diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..6f4c2f2
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<classpath>
+	<classpathentry kind="src" path="src/axis/java"/>
+	<classpathentry kind="src" path="src/db/java"/>
+	<classpathentry kind="src" path="src/doc/java"/>
+	<classpathentry kind="src" path="src/install/java"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="src" path="src/main/webapp/WEB-INF/classes"/>
+	<classpathentry kind="src" path="src/screenshare/java"/>
+	<classpathentry kind="src" path="src/util/java"/>
+	<classpathentry kind="src" path="src/web/java"/>
+	<classpathentry exported="true" kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4">
+		<attributes>
+			<attribute name="org.eclipse.jst.component.nondependency" value=""/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=Openmeetings+3.0.x&amp;ivyXmlPath=ivy.xml&amp;confs=*&amp;ivySettingsPath=%24%7Bworkspace_loc%3AOpenmeetings+3.0.x%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;propertyFiles="/>
+	<classpathentry kind="lib" path="build/lib/java_16_tools.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/red5-io-1.0.6-RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/red5-server.jar" sourcepath="build/red5/server/src/main/java"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/red5-server-common-1.0.6-RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/slf4j-api-1.7.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-core-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-beans-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/mina-core-2.0.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/quartz-2.2.1.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/log4j-over-slf4j-1.7.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-collections-3.2.1.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-web-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-beanutils-1.9.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-lang3-3.4.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/logback-core-1.1.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/logback-classic-1.1.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-expression-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-context-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-context-support-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/aopalliance-1.0.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-aop-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-pool-1.5.6.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/ehcache-core-2.6.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/plugins/tomcat-embed-core.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/bcprov-jdk15on-1.52.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="owner.project.facets" value="java"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="build/classes/eclipse"/>
+</classpath>
diff --git a/.project b/.project
new file mode 100644
index 0000000..0b02fe0
--- /dev/null
+++ b/.project
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<projectDescription>
+	<name>Openmeetings 3.0.x</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.core.springbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.zeroturnaround.eclipse.remoting.remotingBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.zeroturnaround.eclipse.rebelXmlBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.springframework.ide.eclipse.core.springnature</nature>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+		<nature>org.apache.ivyde.eclipse.ivynature</nature>
+		<nature>org.zeroturnaround.eclipse.remoting.remotingNature</nature>
+		<nature>org.zeroturnaround.eclipse.jrebelNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1387965572383</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-.svn</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572384</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-dist</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572388</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/classes/openmeetings</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572390</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/openlaszlo*</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572391</id>
+			<name></name>
+			<type>6</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-.ant-targets-build.xml</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572392</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/target</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572392</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/client/target</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572393</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/api</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572393</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/dist/webapps</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572394</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/src/main/server</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572395</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/webapps</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope
new file mode 100644
index 0000000..f40dd98
--- /dev/null
+++ b/.settings/.jsdtscope
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+		<attributes>
+			<attribute name="hide" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+	<classpathentry kind="output" path=""/>
+</classpath>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..93a19d3
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,14 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+eclipse.preferences.version=1
+encoding//src/main/webapp/WEB-INF/classes/rebel-remote.xml=UTF-8
+encoding//src/main/webapp/WEB-INF/classes/rebel.xml=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..980b98c
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..b78a010
--- /dev/null
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,54 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..bcc91bc
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.component
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId"/>
diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..42bce44
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="jst.web"/>
+  <fixed facet="jst.java"/>
+  <installed facet="jst.web" version="2.5"/>
+  <installed facet="jst.java" version="1.7"/>
+</faceted-project>
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..26adfa2
--- /dev/null
+++ b/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,12 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorList
+USER_MANUAL_PREFERENCE=enabledManualValidatorList
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300
+eclipse.preferences.version=1
+override=true
+suspend=false
+vals/org.eclipse.wst.dtd.core.dtdDTDValidator/groups=0107include04111contentType134org.eclipse.wst.dtd.core.dtdsourceT07fileext03dtdF07fileext03entF07fileext03modF0107exclude0207fileext04.lzxF04file05buildF02
+vals/org.eclipse.wst.html.ui.HTMLValidator/groups=0107include06111contentType136org.eclipse.wst.html.core.htmlsourceT07fileext04htmlF07fileext05xhtmlF07fileext03htmF07fileext04htplF07fileext03wmlF0107exclude0104file05buildF02
+vals/org.eclipse.wst.xml.core.xml/groups=0107include05111contentType128org.eclipse.core.runtime.xmlT111contentType134org.eclipse.wst.xml.core.xmlsourceT111contentType134org.eclipse.wst.xml.core.xslsourceT111contentType134org.eclipse.jst.jsp.core.tldsourceT07fileext03xmlF0107exclude111113projectNature134org.eclipse.jst.j2ee.ejb.EJBNature113projectNature130org.eclipse.jst.j2ee.EARNature04file08.projectT0104file110.classpathT0104file110.settings/T0207fileext04.lzxF04file05buildF0204file114WebContent/srcF0204file116WebContent/swf10F0207fileext04.wmlF04file04testF02
+vals/org.eclipse.wst.xsd.core.xsd/groups=0107include0107fileext03xsdF0107exclude0107fileext04.lzxF
+vf.version=3
diff --git a/.settings/org.springframework.ide.eclipse.beans.core.prefs b/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 0000000..3af8ce5
--- /dev/null
+++ b/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 28 18:17:40 CEST 2011
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false
diff --git a/.settings/org.springframework.ide.eclipse.core.prefs b/.settings/org.springframework.ide.eclipse.core.prefs
new file mode 100644
index 0000000..68f57e2
--- /dev/null
+++ b/.settings/org.springframework.ide.eclipse.core.prefs
@@ -0,0 +1,63 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
+org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true
+org.springframework.ide.eclipse.core.enable.project.preferences=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.autowire.autowire-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.toolAnnotation-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.RefElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.legacyxmlusage.jndiobjectfactory-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidDerivedQuery-org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidParameterType-org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
diff --git a/.springBeans b/.springBeans
new file mode 100644
index 0000000..c54141b
--- /dev/null
+++ b/.springBeans
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+	<version>1</version>
+	<pluginVersion><![CDATA[3.3.0.201307091516-RELEASE]]></pluginVersion>
+	<configSuffixes>
+		<configSuffix><![CDATA[xml]]></configSuffix>
+	</configSuffixes>
+	<enableImports><![CDATA[false]]></enableImports>
+	<configs>
+		<config>src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml</config>
+	</configs>
+	<configSets>
+	</configSets>
+</beansProjectDescription>
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..36942ef
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,1085 @@
+Apache OpenMeetings Change Log
+
+See http://issues.apache.org/jira/browse/OPENMEETINGS-* (where * is the number of the issue below)
+
+Release Notes - Openmeetings - Version 3.0.7
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-1211] - the use of icons in users tab is illogical
+    * [OPENMEETINGS-1213] - Error is shown when contact try to send invitation
+    * [OPENMEETINGS-1218] - Wrong birthday date is displayed on the User datails at Administration->Users page
+    * [OPENMEETINGS-1221] - Language is not loaded after changes
+    * [OPENMEETINGS-1230] - Clustering seems not to work as expected
+    * [OPENMEETINGS-1231] - chat bar on landing page without lable an delete function missing
+    * [OPENMEETINGS-1234] - Unable to take backup using GUI or Admin.sh
+    * [OPENMEETINGS-1238] - Share/record screen: go to HTTP STATUS 404- Apache Tomcat page
+    * [OPENMEETINGS-1239] - Can't import REST URL properly
+    * [OPENMEETINGS-1248] - Clustering not working from external system (for ex. Moodle)
+    * [OPENMEETINGS-1249] - Guest can't enter to the room when room is booked via private message
+    * [OPENMEETINGS-1250] - Video is not availble in the interview rooms
+    * [OPENMEETINGS-1251] - When room is full kicked user not redirected to Rooms list
+    * [OPENMEETINGS-1253] - Crash when searching at language editor.
+    * [OPENMEETINGS-1254] - Crash when adding OAuth2 config
+
+** Improvement
+    * [OPENMEETINGS-954] - Need implement OM client for Android devices.
+    * [OPENMEETINGS-1100] - Seperate video/audio permissions capability 
+    * [OPENMEETINGS-1101] - Live presenter activity (typing , drawing)
+    * [OPENMEETINGS-1212] - Library versions should be updated (3.0.7)
+
+** Wish
+    * [OPENMEETINGS-1214] - LDAP import AD groups
+
+
+Release Notes - Openmeetings - Version 3.0.6
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-1202] - Send Invitation error with moodle
+    * [OPENMEETINGS-1203] - Screen sharing is not started when external guest try to start sharing
+    * [OPENMEETINGS-1205] - Invitation is not sent from the toom
+    * [OPENMEETINGS-1207] - Create a poll
+    * [OPENMEETINGS-1208] - default_group_id ...?
+
+** Improvement
+    * [OPENMEETINGS-1197] - Library versions should be updated (3.0.6)
+    * [OPENMEETINGS-1206] - Room service should be updated to be able to generate invitation hash with first and last name
+
+
+Release Notes - Openmeetings - Version 3.0.5
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-889] - "Upload new image" button should have the same style with other buttons
+    * [OPENMEETINGS-1161] - Dashboard start widget is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1168] - Request for contact multi-language + RTL issues
+    * [OPENMEETINGS-1181] - Date pickers are not localized
+    * [OPENMEETINGS-1182] - User entered the room from Joomla plugin is displayed with "null" as lastname
+    * [OPENMEETINGS-1183] - It is impossible to change 'chatOpened' room parameter using modifyRoomParameter SOAP call
+    * [OPENMEETINGS-1185] - Appointments returned by SOAP service get wrong start/end time
+    * [OPENMEETINGS-1187] - Send One-Time Invitation does not work if we Generate URL first.
+    * [OPENMEETINGS-1188] - less data for getRoomById
+    * [OPENMEETINGS-1189] - Room' s session seems to expire in less than 1.5 hours when in rooms
+    * [OPENMEETINGS-1190] - keystore file pw is disclosed in the screen sharing log
+    * [OPENMEETINGS-1196] - Meaningless internal error in case OAuth email is in use
+    * [OPENMEETINGS-1199] - Cluster status is missed on admin->connection page
+    * [OPENMEETINGS-1200] - Main menu items shows incorrectly
+    * [OPENMEETINGS-1201] - Header of moderators list box shows incorrectly
+
+** Improvement
+    * [OPENMEETINGS-1133] - Direct sign-in from another site
+    * [OPENMEETINGS-1184] - Library versions should be updated (3.0.5)
+    * [OPENMEETINGS-1198] - Simplify Database Install
+
+
+Release Notes - Openmeetings - Version 3.0.4
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-878] - Sign Web-Start application with trusted root cert
+    * [OPENMEETINGS-1041] - It is impossible drag and drop recordings to public folder when recordings list is scrolled
+    * [OPENMEETINGS-1055] - Error is thrown and connection is closed when external user try to generate URL and send email invitation
+    * [OPENMEETINGS-1062] - Contact data of other users are shown not all.
+    * [OPENMEETINGS-1063] - When "Show contact data to contacts only" was selected, contact data are not showing for users from contacts.
+    * [OPENMEETINGS-1074] - Sharing of the screen gives remote access to the other user
+    * [OPENMEETINGS-1075] - system does not save the mark "do not ask me" when choosing a camera and video expansion
+    * [OPENMEETINGS-1079] - Synchronous backup does not work through the web interface with a large volume of data
+    * [OPENMEETINGS-1080] - Connection with the server is canceled after recordings
+    * [OPENMEETINGS-1083] - Impossible to add user to group, moderator to room
+    * [OPENMEETINGS-1084] - cannot remove auto created user by invite for conference room 
+    * [OPENMEETINGS-1087] - X-UA-Compatible should be set as first META tag
+    * [OPENMEETINGS-1088] - error installing with mssql
+    * [OPENMEETINGS-1089] - Spanish installation screens contains bad UTF-8 chars
+    * [OPENMEETINGS-1091] - the attendees can chaange the start and end dates of calendar appointment rooms !!!
+    * [OPENMEETINGS-1092] - users can use the calendar room to make conference after the end-date of the conference room!!!
+    * [OPENMEETINGS-1094] - Ldap authorisation is not working correctly if var ldap_search_scope=SUBTREE
+    * [OPENMEETINGS-1098] - Login via OAuth2 is broken due to redirectUri is wrong
+    * [OPENMEETINGS-1102] - Room web service is broken
+    * [OPENMEETINGS-1103] - Pressing 'play' on the video player while a video is already playing starts a new player
+    * [OPENMEETINGS-1105] - Dereferencing Aliases using LDAP and eDirectory.
+    * [OPENMEETINGS-1109] - Appointment with existing room is displayed as appointment with 'appointment special room'
+    * [OPENMEETINGS-1110] - Audio/video is being broadcasted to the room after room exit
+    * [OPENMEETINGS-1114] - LDAP config is not Unicode aware
+    * [OPENMEETINGS-1117] - RTL is not fully supported by OM
+    * [OPENMEETINGS-1121] - Blank field (invited user)
+    * [OPENMEETINGS-1123] - RedirectLoop while trying to install
+    * [OPENMEETINGS-1124] - Calendar interface bug
+    * [OPENMEETINGS-1126] - Timezone bug
+    * [OPENMEETINGS-1127] - Unexpected behaivor when user enter to the room if room type is udefined
+    * [OPENMEETINGS-1128] - users can not be deleted ("ghost users")
+    * [OPENMEETINGS-1131] - New events are not shown in the calendar
+    * [OPENMEETINGS-1134] - Removed folder shows in the "Move to folder..." dropdown box
+    * [OPENMEETINGS-1137] - Reducing load times of rooms via invitations api
+    * [OPENMEETINGS-1139] - When users are in different timezones, the meeting setup was not shown correctly on invitee's caleander
+    * [OPENMEETINGS-1143] - Recordings list order
+    * [OPENMEETINGS-1146] - RTMPS uses rtmpport
+    * [OPENMEETINGS-1149] - "AVI", "FLV" and "Re-convert" buttons are not visible on recordings panel when recordings list box is scrolled
+    * [OPENMEETINGS-1150] - NullPointerException is thrown when user try enter to the room via calendar
+    * [OPENMEETINGS-1151] - Recording Java Application is blocked by Security Settings
+    * [OPENMEETINGS-1153] - "Record started" remains in upper right corner after record was stoped (interviewroom)
+    * [OPENMEETINGS-1154] - Too big waiting time after pressing the "Stop recording" button
+    * [OPENMEETINGS-1156] - The "Allow recording" flag is not checked when screen sharing is started
+    * [OPENMEETINGS-1157] - Calendar web service is broken
+    * [OPENMEETINGS-1159] - Chat is not correctly aligned then language is RTL
+    * [OPENMEETINGS-1160] - Edit user settings is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1162] - Admin->users is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1163] - Admin->OAuth is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1164] - Admin->Servers is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1165] - Admin->Configurations is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1166] - Admin->Groups is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1167] - Admin->Labels is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1169] - Send Message dialog is not properly aligned when RTL language is selected
+    * [OPENMEETINGS-1170] - Profile page is not updated when user changes settings
+    * [OPENMEETINGS-1173] - The "Internal error" is thrown when uncheck the "Create/Modify appointment special room" flag
+    * [OPENMEETINGS-1174] - Unenrolled user not redirected to Rooms list
+    * [OPENMEETINGS-1175] - It is impossible to send private message from the room
+    * [OPENMEETINGS-1177] - Calendar is not properly aligned when RTL language is selected
+
+** Improvement
+    * [OPENMEETINGS-547] - Deferred recordings converting possibility.
+    * [OPENMEETINGS-623] - OpenMeetings怎么修改发送邮件的格式
+    * [OPENMEETINGS-1082] - Library versions should be updated
+    * [OPENMEETINGS-1099] - Build should be ready for web-start code-signing
+    * [OPENMEETINGS-1130] - Emails should be created using templates, not string concatenation
+    * [OPENMEETINGS-1135] - logback config should be updated to use log rotation and keep old logs
+    * [OPENMEETINGS-1136] - Improving portuguese-brazil installation translation
+
+** New Feature
+    * [OPENMEETINGS-1104] - Enable change first day in the Calendar
+
+** Wish
+    * [OPENMEETINGS-1065] - add ability to minimize screen-sharing video
+
+
+Release Notes - Openmeetings - Version 3.0.3
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-270] - MemoryLeak / Dead-Lock in FlvRecorderConverter
+    * [OPENMEETINGS-292] - Inviting people during conference
+    * [OPENMEETINGS-409] - Interview Room (2)
+    * [OPENMEETINGS-452] - LDAP issue. Cannot relogin with user that already was logined before and then logged out
+    * [OPENMEETINGS-532] - Generated hash issue
+    * [OPENMEETINGS-616] - Openmeetings for Drupal got a 500 error
+    * [OPENMEETINGS-680] - The "," symbol is used for the multiple e-mail instead of standard ";" symbol
+    * [OPENMEETINGS-683] - Somtimes vido frame is not visible for other users in the room
+    * [OPENMEETINGS-686] - Recording faild when pause is used
+    * [OPENMEETINGS-697] - Authentification Ldap
+    * [OPENMEETINGS-809] - Global chat issues in rooms
+    * [OPENMEETINGS-888] - Room name is not translated correctly in the "My room" widget
+    * [OPENMEETINGS-915] - Regression in 3.0: Incorrect moderator list update in the room screen.
+    * [OPENMEETINGS-918] - Contacts should not be added to usergroup
+    * [OPENMEETINGS-931] - AD LDAP Authentication on empty install organization choice after first logon: empty list
+    * [OPENMEETINGS-953] - can not upload files while using Tomcat with SSL enabled
+    * [OPENMEETINGS-986] - Oauth2.0 Logon Not Working
+    * [OPENMEETINGS-998] - Audio and Video of recordings are not in sync after a few minutes
+    * [OPENMEETINGS-1007] - Users with externalUserId and externaluserType <> null can't login
+    * [OPENMEETINGS-1012] - Reverted timezone is set by default in invitation window
+    * [OPENMEETINGS-1013] - Profile pictures are not displayed to invited user
+    * [OPENMEETINGS-1015] - Browser time zone is not selected correctly in the invitation window until all java timezones are loaded
+    * [OPENMEETINGS-1019] - RemoteControl: problem with sql
+    * [OPENMEETINGS-1020] - create new user after adding user does not add to DB
+    * [OPENMEETINGS-1022] - cliAdmin is broken (NPE + exclude-files)
+    * [OPENMEETINGS-1023] - ChatMessages are not imported
+    * [OPENMEETINGS-1024] - Add user admin dropdown is broken when postgres is used
+    * [OPENMEETINGS-1026] - Moderator rights are not availble for admin user if enter to the room after simple user
+    * [OPENMEETINGS-1027] - Search button does not work for users
+    * [OPENMEETINGS-1029] - modifyRoomParameter SOAP/REST method is broken
+    * [OPENMEETINGS-1031] - The "New folder" dialogs moves to the bottom of the screen and becomes invisible
+    * [OPENMEETINGS-1032] - search variable in Language Editor produce java.lang.StackOverflowError
+    * [OPENMEETINGS-1034] - openmeetings start always fails with postgresql db on debian
+    * [OPENMEETINGS-1035] - "ant -Ddb=postgres" always fails
+    * [OPENMEETINGS-1037] - LDAP passwords are being printed to the log
+    * [OPENMEETINGS-1038] - PrivateRoom Widget is displayed when dashboard.show.myrooms key is disabled
+    * [OPENMEETINGS-1039] - Interview recording is broken if stop-on-close
+    * [OPENMEETINGS-1042] - .ppt file not open when i upload 
+    * [OPENMEETINGS-1048] - Appointement owner has no moderation rights
+    * [OPENMEETINGS-1050] - User list is missing room users
+    * [OPENMEETINGS-1052] - Room list not displayed after room exit
+    * [OPENMEETINGS-1059] - Language not loaded from user profile.
+    * [OPENMEETINGS-1060] - Strange view of warnings at User editing screen.
+    * [OPENMEETINGS-1061] - Font size list is not visible and availble in the global chat
+    * [OPENMEETINGS-1067] - "Move to folder.." item is not translated correctly on the "Contacts and messages" tab
+    * [OPENMEETINGS-1068] - Error is thrown and connection is closed when move event into Calendar view
+    * [OPENMEETINGS-1069] - Add/remove a user to the default moderator list not working properly
+    * [OPENMEETINGS-1070] - Strange view after auto logout from demo room
+    * [OPENMEETINGS-1076] - Export of localization to file not working.
+    * [OPENMEETINGS-1077] - Max participants in the room work incorrectly
+
+** Improvement
+    * [OPENMEETINGS-96] - Possibility to deny remote control for all when sharing screen
+    * [OPENMEETINGS-360] - Email invited meeting participants to display name not email address
+    * [OPENMEETINGS-942] - Searching for contacts
+    * [OPENMEETINGS-971] - Restrict attendees suggestions
+    * [OPENMEETINGS-984] - Recording auto-repairing should be added
+    * [OPENMEETINGS-1017] - ACLs should be added to the User
+    * [OPENMEETINGS-1021] - Red5 should be updated to the latest stable version
+    * [OPENMEETINGS-1028] - Red5 should be updated to the latest stable version
+    * [OPENMEETINGS-1033] - Improve ldap auth type adding SearchScope variable in config file
+    * [OPENMEETINGS-1036] - Improve User Form for include LDAP domain
+    * [OPENMEETINGS-1040] - Select2 should be used to display/set user groups
+    * [OPENMEETINGS-1049] - no default value for the "Quality of the screen sharing"/default FPS
+
+** New Feature
+    * [OPENMEETINGS-442] - om LDAP users controlled with a group
+    * [OPENMEETINGS-1011] - long time to load openmeetings activity in moodle
+
+** Task
+    * [OPENMEETINGS-964] - LDAP login should be refactored
+
+** Test
+    * [OPENMEETINGS-1025] - Problem with convert recording by ffmpeg
+
+** Wish
+    * [OPENMEETINGS-861] - SOAP user for creating & using om rooms via moodle can log into GUI of OM
+    * [OPENMEETINGS-1066] - re-order fields on screen-sharing applet
+
+
+Release Notes - Openmeetings - Version 3.0.2
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-604] - Pop up message remain same after quitting the room created by Book conference room option in the email
+    * [OPENMEETINGS-916] - Selected recording is not highlighted and should not be moved to other folder
+    * [OPENMEETINGS-976] - Cannot restore an erased key in administration\configuration\key
+    * [OPENMEETINGS-978] - It is impossible to start OM in offline mode
+    * [OPENMEETINGS-983] - Verification URL is not generated correctly for self register users
+    * [OPENMEETINGS-985] - Send Invitation functionality is broken
+    * [OPENMEETINGS-990] - error while playing recording
+    * [OPENMEETINGS-993] - Deleted rooms are now excluded from backup
+    * [OPENMEETINGS-994] - AllowRecording option lock normal user interaction in conference Room.
+    * [OPENMEETINGS-996] - send invitation - generate URL
+    * [OPENMEETINGS-997] - error installing with mssql 
+    * [OPENMEETINGS-1002] - OM theming should be consistent
+    * [OPENMEETINGS-1004] - Internal error is thrown when you search a user on the Search Users Tab
+
+** Improvement
+    * [OPENMEETINGS-982] - ApplicationContext recreation should be avoided
+
+
+Release Notes - Openmeetings - Version 3.0.1
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-937] - Screen sharing application should create recordings with size multiple by 16
+
+** Bug
+    * [OPENMEETINGS-913] - Booking is not working via private message
+    * [OPENMEETINGS-917] - Contacts should not be added as default moderator
+    * [OPENMEETINGS-920] - where are the controls to playback a recorded video?
+    * [OPENMEETINGS-934] - screenrecording without sound
+    * [OPENMEETINGS-935] - Names are mixed in contact request email
+    * [OPENMEETINGS-936] - First frame of the recording has size differs from all other frames
+    * [OPENMEETINGS-943] - OM3.0: login with LDAP user not working
+    * [OPENMEETINGS-949] - Add Whiteboard: untranslated string - hardcoded
+    * [OPENMEETINGS-951] - Command line installer fails if path contains spaces
+    * [OPENMEETINGS-952] - Build should be compatible with latest ant
+    * [OPENMEETINGS-956] - Recording frame is not scrolled
+    * [OPENMEETINGS-957] - Screensharing is broken
+    * [OPENMEETINGS-958] - Calendar event start and end date are not displayed correctly in the month vew for IST time zone
+    * [OPENMEETINGS-959] - "Choose Device" Dialog doesn't show (all) devices from flash-settings
+    * [OPENMEETINGS-960] - Long time without changing progressbar when enter OM
+    * [OPENMEETINGS-961] - Calendar event can be canceled by guest
+    * [OPENMEETINGS-965] - Dashboard is malfunctioning when the user language is set to french
+    * [OPENMEETINGS-966] - Invitation links are not working
+    * [OPENMEETINGS-967] - dashboard.show.myrooms and dashboard.show.rssfeed options are not working
+    * [OPENMEETINGS-972] - Default user database
+    * [OPENMEETINGS-975] - Reminder is not sent for calendar event
+    * [OPENMEETINGS-977] - Import of Appointments and UserContacts was broken
+
+** Improvement
+    * [OPENMEETINGS-938] - Recording length field should be filled by converters
+    * [OPENMEETINGS-939] - Not ready recordings should have special icon
+
+
+Release Notes - Openmeetings - Version 3.0.0
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-746] - Replace OmTimeZone in User Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-747] - Replace OmTimeZone in Invitations Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-748] - Replace OmTimeZone in MeetingMembers Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-749] - Fix Installer with new timezone handling, default to server timezone in UI
+    * [OPENMEETINGS-750] - Fix Backup importer to be able to import old backups (2.x) to new database schema (3.x) (User, Invitations, MeetingMembers have no OmTimeZone anymore)
+    * [OPENMEETINGS-751] - Remove OmTimeZone Entity and import mechanism for timezones.xml and some cleanup
+    * [OPENMEETINGS-752] - Create Branch and Jenkins Job for Timezone refactoring
+    * [OPENMEETINGS-754] - Fix user admin UI to have timezone as string
+    * [OPENMEETINGS-755] - Fix invitation popup in Flash to not use the OmTimeZones for creating the Invitation
+    * [OPENMEETINGS-758] - Remove OpenLaszlo Admin UI and all related API calls (only if they are not needed somewhere else)
+    * [OPENMEETINGS-759] - Remove Flash UI user settings and related API calls 
+    * [OPENMEETINGS-762] - Callers of TimezoneUtil.getTimezoneByInternalJName should be checked to work as expected
+
+** Bug
+    * [OPENMEETINGS-69] - Conference Room - Chat RTL dosn't function 
+    * [OPENMEETINGS-243] - "Updated" field in Administration -> LDAP panel contains "null" for string for empty value.
+    * [OPENMEETINGS-274] - It is impossible to display "test setup recording" once hidden
+    * [OPENMEETINGS-321] - Recording under OSX throws exception in RecordingConverter
+    * [OPENMEETINGS-337] - interview room - audio does not work when "audio only" is selected
+    * [OPENMEETINGS-348] - zoom synchonization
+    * [OPENMEETINGS-377] - Double clicking in the calendar area create two “Event details” dialog windows not just one window
+    * [OPENMEETINGS-405] - microphoneRateNormal & microphoneRateBest - not change rate
+    * [OPENMEETINGS-410] - whiteboard first color
+    * [OPENMEETINGS-416] - "Hide actions menu" does not work via SOAP in "restricted" room
+    * [OPENMEETINGS-421] - Reminder to conference issue
+    * [OPENMEETINGS-426] - Html Errors/Problems
+    * [OPENMEETINGS-428] - Refactor User administration to Wicket
+    * [OPENMEETINGS-432] - video only room is coming with white board also
+    * [OPENMEETINGS-435] - Help Help Help openmeetings service is not work at the next day
+    * [OPENMEETINGS-437] - Link "...Edit your profile" form de user home page send the control to a user profile view, not to a edit profile view
+    * [OPENMEETINGS-439] - An LDAP user can't change their own profile picture.
+    * [OPENMEETINGS-444] - Create HTML/Wicket admin backup section
+    * [OPENMEETINGS-445] - Backup Export does not work at all
+    * [OPENMEETINGS-451] - Search in user groups Wicket UI does not work
+    * [OPENMEETINGS-473] - Recorded video Display blank at demo.openmeetings.com
+    * [OPENMEETINGS-481] - When I reserve a room by sending an email, users who connected to this link from an email have the same email address as me
+    * [OPENMEETINGS-486] - Sometimes OM stops responding to clicks
+    * [OPENMEETINGS-494] - Recording gives frame rate of 2 fps
+    * [OPENMEETINGS-503] - Openmeetings does not logout on the Recording panel
+    * [OPENMEETINGS-507] - Error message is shown when user save the Profile settings 
+    * [OPENMEETINGS-513] - Participant of poll can vote more than once in the "My conference room"
+    * [OPENMEETINGS-514] - Some extra links are displayed on the "Choose Usergroup" dialog
+    * [OPENMEETINGS-537] - Pop menu  in conference for files shows "Delete folder"
+    * [OPENMEETINGS-544] - some bug with SIP
+    * [OPENMEETINGS-560] - It’s possible to add several records with the same key value in configuration.
+    * [OPENMEETINGS-564] - Types of rooms are not localized
+    * [OPENMEETINGS-566] - No default timezone selection in registration/sign up when user is in timezone +12
+    * [OPENMEETINGS-572] - Empty fields are replaced with string "null" after export&import
+    * [OPENMEETINGS-575] - Name of the restricted and interview rooms is not displayed when user enter to this room
+    * [OPENMEETINGS-579] - In any room not close the video and audio settings windows. Video is not broadcasting.
+    * [OPENMEETINGS-580] - Smslib 3.5.3 should be used.
+    * [OPENMEETINGS-582] - 2.0 RoomPoll and Configs restore failed
+    * [OPENMEETINGS-584] - Main window is scrolled when select value from dropdown box
+    * [OPENMEETINGS-586] - FileItem owner_id is not replaced with new id while system import
+    * [OPENMEETINGS-587] - Exclusive audio by hotkey is broken
+    * [OPENMEETINGS-590] - Useless "SIP Settings" section in the user screen.
+    * [OPENMEETINGS-591] - Whiteboard presentacion from PPT page controll event randomly broken
+    * [OPENMEETINGS-596] - ffmpeg is not work in current version
+    * [OPENMEETINGS-600] - RSS Feed
+    * [OPENMEETINGS-601] - User Profile picture
+    * [OPENMEETINGS-603] - Conference Room Types List doesn't display textual content - Book Conference Room Option Selected while Sending an Email 
+    * [OPENMEETINGS-609] - The end time shown under the Book Conference Room option in New Message is Incorrect
+    * [OPENMEETINGS-617] - Impossible to refresh video using button "(Re) Start audio/video or change device settings"
+    * [OPENMEETINGS-618] - Incorrect translation
+    * [OPENMEETINGS-619] -  Problems with a microphone 
+    * [OPENMEETINGS-620] - Self-Register, Forgot password and login by LDAP should be implemented
+    * [OPENMEETINGS-625] - Profile Pictures not working on LDAP Accounts
+    * [OPENMEETINGS-627] - Private rooms disappear after use
+    * [OPENMEETINGS-628] - Exception is thrown when search user on the Profile->Search users tab
+    * [OPENMEETINGS-629] - Event is not deleted from Calendar
+    * [OPENMEETINGS-630] - Event is not resized in calendar
+    * [OPENMEETINGS-632] - Some links are mistaked in html version of OM
+    * [OPENMEETINGS-633] - Event is not created if title is empty.
+    * [OPENMEETINGS-634] - No menu accessable after file upload, in a special condition
+    * [OPENMEETINGS-635] - Administration / Configuration : default_lang_id documentation
+    * [OPENMEETINGS-640] - Room is not resized in IE
+    * [OPENMEETINGS-642] - The "Import" and "Export" buttons are missed on the Administrator->Language editor tab
+    * [OPENMEETINGS-643] - User details is not updated in the HTML version
+    * [OPENMEETINGS-645] - Can't create installation wizard
+    * [OPENMEETINGS-647] - Drag&Drop Issue Openmeetings 1.8.8 r4555
+    * [OPENMEETINGS-650] - Can't create conference room
+    * [OPENMEETINGS-651] - User can not login
+    * [OPENMEETINGS-654] - Interview room is broken
+    * [OPENMEETINGS-655] - Calendar is not localized
+    * [OPENMEETINGS-657] - can not convert file
+    * [OPENMEETINGS-658] - Event creates in the Calendar with wrong start and end time
+    * [OPENMEETINGS-660] - Types of reminder are not localized
+    * [OPENMEETINGS-661] - Invitation is not implemented in the HTML Calendar
+    * [OPENMEETINGS-663] - OM Installer is not localized
+    * [OPENMEETINGS-664] - OM is not installed in IE 10 browser.
+    * [OPENMEETINGS-665] - File upload in the room is broken
+    * [OPENMEETINGS-666] - Main menu displays incorrectly in the IE browser.
+    * [OPENMEETINGS-667] - Recordings are not viewable on iPad
+    * [OPENMEETINGS-669] - Recording is broken
+    * [OPENMEETINGS-672] - in recordings page ,people cant logout
+    * [OPENMEETINGS-673] - Rooms form is not shown correctly in the HTML version
+    * [OPENMEETINGS-674] - Image is not uploaded on the "Profile" tab in the HTML version of OM
+    * [OPENMEETINGS-676] - User can not login
+    * [OPENMEETINGS-679] - Share/record screen
+    * [OPENMEETINGS-682] - Admin password length is not checked while installing
+    * [OPENMEETINGS-687] - Microphone is unmuted when user refresh video frame
+    * [OPENMEETINGS-688] - Library versions should be bumped
+    * [OPENMEETINGS-689] - Russian installation encoding is broken in Ubuntu.
+    * [OPENMEETINGS-691] - screen sharing / recording couldn't starting
+    * [OPENMEETINGS-693] - Tomcat 7 patch should be removed from OM build
+    * [OPENMEETINGS-695] - Rooms page is not completly in the HTML version
+    * [OPENMEETINGS-696] - Choose device dialog is not availble in the restricted room
+    * [OPENMEETINGS-702] - when uploading file in a room, after click start upload,  return a window with HTTP-ERROR: 500  
+    * [OPENMEETINGS-703] - Invitation is not implemented to the HTML Calendar
+    * [OPENMEETINGS-704] - Calendar UI - Unify button list (Cancel always on right side)
+    * [OPENMEETINGS-705] - Not possible to enter any conference room
+    * [OPENMEETINGS-707] - Calendar UI Creation Popup - clean up UI elements
+    * [OPENMEETINGS-708] - Calender UI Popup shows empty input values when Calendar UI is loaded second time
+    * [OPENMEETINGS-709] - Calendar UI Popup - no need for delete button if you create a new event
+    * [OPENMEETINGS-711] - Calendar UI add external attendee's
+    * [OPENMEETINGS-714] - Calendar does not send any invitations to the attendees
+    * [OPENMEETINGS-715] - Calendar does not send any update email if you change a calendar event to the attendees
+    * [OPENMEETINGS-716] - Calendar does not send any delete email if you delete a calendar event to the attendees
+    * [OPENMEETINGS-718] - Newly created users are unable to login
+    * [OPENMEETINGS-719] - Calendar UI delete button has no confirmation
+    * [OPENMEETINGS-720] - Calendar throws server error if any calendar event is saved (only tested with new events so far)
+    * [OPENMEETINGS-726] - Internal users do not show calendar events of events that you have been added to
+    * [OPENMEETINGS-729] - Empty / null values in email_username/password throws Exception when processing emails
+    * [OPENMEETINGS-730] - Cannot save empty value for configuration key in HTML5 UI (for instance username / pas for email configuration)
+    * [OPENMEETINGS-736] - Calendar UI - Month view does not resize to browser window by default
+    * [OPENMEETINGS-738] - Wrong successful registration message behavior
+    * [OPENMEETINGS-741] - Failed to change password
+    * [OPENMEETINGS-742] - Calendar UI - week and day view pretty useless when you can't select any day
+    * [OPENMEETINGS-743] - HTML Version Forgotten  your password email link does not work 
+    * [OPENMEETINGS-744] - Private message does not send in the HTML version
+    * [OPENMEETINGS-756] - Remove OpenLaszlo/Flash Calendar UI and Server side components API Calls/DTOs
+    * [OPENMEETINGS-757] - Several issues with external and internal meeting members
+    * [OPENMEETINGS-763] - Command line admin: --drop option is broken
+    * [OPENMEETINGS-764] - Plugins should work with OM 3.0.0
+    * [OPENMEETINGS-765] - Wicket should be used for email generation
+    * [OPENMEETINGS-768] - User is not enter to the room when rtmp port is not set correctly
+    * [OPENMEETINGS-769] - Calendar UI - Event details with link to room
+    * [OPENMEETINGS-770] - when i click button  share/recording screen , i get do download [ public 7.jnlp], not working properly
+    * [OPENMEETINGS-771] - Dashboard is not shown correctly when user exit from the room.
+    * [OPENMEETINGS-773] - Deleted users are shown in the Usergroups
+    * [OPENMEETINGS-776] - Contacts should be visible for owner and admin only
+    * [OPENMEETINGS-777] - SOAP/REST API should be fixed to create appointments as HTML5 web client
+    * [OPENMEETINGS-780] - Upload pictures and other documents on the white board, has been in the transition state.
+    * [OPENMEETINGS-784] - SOAP API service "modifyRoomParameter" converts "paramValue" into String
+    * [OPENMEETINGS-785] - Messsage " You have successfully signed up. An email with a verification code will be sent to your mailbox." comes up even if it is not supposed to
+    * [OPENMEETINGS-786] - Loading symbol in Wicket and Flash should look the same
+    * [OPENMEETINGS-787] - top navigation gone
+    * [OPENMEETINGS-788] - As soon as you hit the "start conference" button the video freezes and just nothing happens
+    * [OPENMEETINGS-789] - Interview room recording in 2.1.1
+    * [OPENMEETINGS-796] - Install Wizard displays wrong value for red5SipEnable
+    * [OPENMEETINGS-799] - SOAP methods RoomService.{getRooms,getRoomsWithCurrentUsers} and UserService.getUsersByOrganisation are broken
+    * [OPENMEETINGS-803] - Image files are not visible for attendees on whiteboard
+    * [OPENMEETINGS-804] - updateRoomWithModerationQuestionsAudioTypeAndHideOptions sets isAudioOnly always to true
+    * [OPENMEETINGS-806] - addNewUser SOAP method doe not return valid error code
+    * [OPENMEETINGS-808] - Installation using Derby default database configuration seems to have performance issues
+    * [OPENMEETINGS-810] - Entering interview room doesnt have option to select camera size - it inhetits the last used size
+    * [OPENMEETINGS-815] - Exception in sign up
+    * [OPENMEETINGS-818] - Room login via secureHash is broken
+    * [OPENMEETINGS-819] - Zoom is not synchronyzed on whiteboard
+    * [OPENMEETINGS-821] - Can't upload file
+    * [OPENMEETINGS-822] - Closed room was created by addRoom and addRoomWithModeration REST/SOAP methods
+    * [OPENMEETINGS-830] - Recording is broken without screen sharing
+    * [OPENMEETINGS-832] - SOAP doesn't work
+    * [OPENMEETINGS-835] - no proper db-type option for postgresql db (Command Line Admin)
+    * [OPENMEETINGS-836] - OM layout error  - item from vicket is hide the room chat elements
+    * [OPENMEETINGS-841] - Only the first user in a room is displayed and can be heard by others
+    * [OPENMEETINGS-842] - External users should not be redirected to dashboard
+    * [OPENMEETINGS-844] - Invitations are broken after last refactoring
+    * [OPENMEETINGS-848] - RoomService.getRoomCounters REST/SOAP method is not working
+    * [OPENMEETINGS-849] - some remains after the purge of deleted recordings and a system cleanup via admin.sh
+    * [OPENMEETINGS-851] - There is no way to use uploaded files in an interview room
+    * [OPENMEETINGS-852] - Whiteboard Objects not clickable
+    * [OPENMEETINGS-855] - NPE using ./admin.sh -v -f --cleanup
+    * [OPENMEETINGS-856] - Invitation link is broken
+    * [OPENMEETINGS-859] - Audio and Video in recordings is no more in sync
+    * [OPENMEETINGS-860] - Invite window is opened with long delay
+    * [OPENMEETINGS-864] - Exception is thrown when update event in the calendar
+    * [OPENMEETINGS-865] - Upload buttons has artifacts
+    * [OPENMEETINGS-866] - NPE if frontend register is not allowed
+    * [OPENMEETINGS-868] - User creation via SOAP availability should be controlled by separate option
+    * [OPENMEETINGS-869] - Email subject is not displayed correctly for UTF-8 charset
+    * [OPENMEETINGS-870] - Plugins should work in version 3.0
+    * [OPENMEETINGS-871] - Internal error is thrown when search user on the Search users tab
+    * [OPENMEETINGS-872] - The "to" field is not filed in the "Write new message dialog"
+    * [OPENMEETINGS-873] - Ajax error is thrown when click on the "Show user profile" icon
+    * [OPENMEETINGS-875] - Widgets title are not translated when user change language
+    * [OPENMEETINGS-876] - The "Click here to enter room" link is attached to cancel email notification.
+    * [OPENMEETINGS-877] - New line "<br/>" tag does not applied for invitation message
+    * [OPENMEETINGS-880] - 3.0 regression: "Forgotten your password?" does not work on the login screen.
+    * [OPENMEETINGS-882] - OpenMeetings calendar allows create events with the end date/time earlier than the start date/time
+    * [OPENMEETINGS-883] - Strange behaviour during the external guest entering
+    * [OPENMEETINGS-884] - Regression in 3.0: Drop-down lists in the user registration screen work incorrectly in Google Chrome
+    * [OPENMEETINGS-885] - Record is not played under Chrome browser
+    * [OPENMEETINGS-886] - Impossible to save editable fields in My Profile.
+    * [OPENMEETINGS-890] - The "Login" field is not displayed on the connection panel.
+    * [OPENMEETINGS-891] - Wrong birthday date is displayed on the profile->edit settings panel
+    * [OPENMEETINGS-892] - "Add user" button is disabled when add new group
+    * [OPENMEETINGS-893] - Removed user is not added to usergroup again
+    * [OPENMEETINGS-898] - Time zone is not defined correctly on sign in page
+    * [OPENMEETINGS-899] - Calendar event start and end time are not displayed correctly
+    * [OPENMEETINGS-900] - Deleted contact is selected when user invite external guest to calendar invitation
+    * [OPENMEETINGS-901] - Password is not requested when password protected invitation send to external guest.
+    * [OPENMEETINGS-902] - Records are not created correctly
+    * [OPENMEETINGS-904] - Default landing zone
+    * [OPENMEETINGS-906] - Cannot create new group with users
+    * [OPENMEETINGS-907] - "password is required" message is displayed when "Password protected" checkbox is not  checked
+    * [OPENMEETINGS-908] - Calendar event start and end date are not displayed correctly in the month vew
+    * [OPENMEETINGS-909] - Event owners is not receive email notification
+    * [OPENMEETINGS-910] - Contacts are availble to search on the Search user page
+    * [OPENMEETINGS-912] - Email disappears when move emial to the new folder
+    * [OPENMEETINGS-914] - "Mark unread" action does not work on Contacts and message page
+    * [OPENMEETINGS-919] - Access logs will not be generated
+    * [OPENMEETINGS-922] - Add folder button does not add a folder.
+    * [OPENMEETINGS-923] - Drag and drop of files in the recordings section does not work
+    * [OPENMEETINGS-924] - deleting recordings?
+    * [OPENMEETINGS-925] - Recording details previously showed the room name not the id
+    * [OPENMEETINGS-927] - Memory leak in OM wicket application
+    * [OPENMEETINGS-930] - getInvitationHash method allow creation of invalid users (login too small)
+    * [OPENMEETINGS-932] - SIP dialer menu item is not availble in the OM 3.x
+
+** Improvement
+    * [OPENMEETINGS-167] - Main menu of OM
+    * [OPENMEETINGS-168] - Adding system date on dashboard
+    * [OPENMEETINGS-183] - Replacing "Timezone" column in "Users search" interface with a most important information = "statue" (connected /  absent).
+    * [OPENMEETINGS-273] - calendar time is not updating dynamically
+    * [OPENMEETINGS-280] - Update ATutor Module for OM
+    * [OPENMEETINGS-358] - Remove or hide the "Domian" selection from the "Login" dialog when there is only one "Domain"
+    * [OPENMEETINGS-368] - Allow users to zoom their view of the Whiteboard by default and not being controlled by "Draw on the Whiteboard" permissions
+    * [OPENMEETINGS-375] - Allow an administrative option to control whether to display the "Mute microphone globally" dialog box or not
+    * [OPENMEETINGS-429] - [Wicket] Language admin should be implemented
+    * [OPENMEETINGS-484] - Poor quality of bitmapped pictures in pdf files on the whiteboard.
+    * [OPENMEETINGS-548] - Open meetings in a new window or tab
+    * [OPENMEETINGS-556] - GSOC: Faster screen sharing
+    * [OPENMEETINGS-558] - GSOC: Need wysiwyg editor Wicket component
+    * [OPENMEETINGS-574] - wicket-jquery-ui should be used instead of adding jquery-ui manually to every page
+    * [OPENMEETINGS-578] - Latest Red5 server should be used in OM
+    * [OPENMEETINGS-583] - Ability to disable enhanced microphone should be added
+    * [OPENMEETINGS-589] - Configurable hot key for Mute/Unmute should be added
+    * [OPENMEETINGS-594] - Add translated word in thai language
+    * [OPENMEETINGS-610] - push2talk button
+    * [OPENMEETINGS-612] - Dashboard need to be implemented
+    * [OPENMEETINGS-615] - User Profile panel need to be implemented
+    * [OPENMEETINGS-626] - Recordings panel need to be added
+    * [OPENMEETINGS-631] - Updated French translation
+    * [OPENMEETINGS-637] - Admin: Connections panel need to be implemented
+    * [OPENMEETINGS-638] - Room enter/exit should be implemented
+    * [OPENMEETINGS-639] - Installer should be implemented on Wicket
+    * [OPENMEETINGS-646] - Emotions should be added to the chat
+    * [OPENMEETINGS-685] - Japanese translation update for v2.1.1 / v3.1
+    * [OPENMEETINGS-692] - HTML admin should be improved to highlight record which changes 
+    * [OPENMEETINGS-701] - Wicket HTML templates should be stored unarchived
+    * [OPENMEETINGS-727] - no warning for too short login names
+    * [OPENMEETINGS-772] - Project tree structure should be updated
+    * [OPENMEETINGS-778] - Cannot install simplified Chinese
+    * [OPENMEETINGS-798] - MSSQL support should be added to OM
+    * [OPENMEETINGS-820] - No function to match user groups with rooms via SOAP
+    * [OPENMEETINGS-854] - SOAP/REST call getFlvRecordingByExternalUserId should take into account both external id and type
+
+** New Feature
+    * [OPENMEETINGS-152] - Background image
+    * [OPENMEETINGS-491] - LDAP authentication filter
+    * [OPENMEETINGS-576] - Suggestion about the tunnelling implementation.
+    * [OPENMEETINGS-656] - Callback URL when client drop/log out from room
+    * [OPENMEETINGS-802] - Integration with Chamilo LMS
+    * [OPENMEETINGS-857] - sound/voice warning when disconnected
+
+** Task
+    * [OPENMEETINGS-81] - Unify Upload Components
+    * [OPENMEETINGS-721] - is it possible to add new user from soap method?
+    * [OPENMEETINGS-740] - Login via OAuth2
+    * [OPENMEETINGS-760] - Removing all OpenLaszlo /Flash UI that is no more maintained all all connected server side API calls.
+    * [OPENMEETINGS-767] - Redundant fields should be removed from MeetingMember object
+
+** Wish
+    * [OPENMEETINGS-38] - Default language
+    * [OPENMEETINGS-534] - How to set When the user is registered, need administrator audit to register?
+    * [OPENMEETINGS-607] - Refine the UI
+    * [OPENMEETINGS-622] - Removing the menu items and customizing dashboard
+
+
+Release Notes - Openmeetings - Version 2.2.0 Apache Release
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-671] - Calendar is shown incompletely when book conference room
+    * [OPENMEETINGS-763] - Command line admin: --drop option is broken
+    * [OPENMEETINGS-789] - Interview room recording in 2.1.1
+    * [OPENMEETINGS-791] - Backup import is broken
+    * [OPENMEETINGS-799] - SOAP methods RoomService.{getRooms,getRoomsWithCurrentUsers} and UserService.getUsersByOrganisation are broken
+    * [OPENMEETINGS-803] - Image files are not visible for attendees on whiteboard
+    * [OPENMEETINGS-804] - updateRoomWithModerationQuestionsAudioTypeAndHideOptions sets isAudioOnly always to true
+    * [OPENMEETINGS-806] - addNewUser SOAP method doe not return valid error code
+    * [OPENMEETINGS-810] - Entering interview room doesnt have option to select camera size - it inhetits the last used size
+    * [OPENMEETINGS-811] - Recordings does not downloaded via Google Chrome browser
+    * [OPENMEETINGS-819] - Zoom is not synchronyzed on whiteboard
+    * [OPENMEETINGS-832] - SOAP doesn't work
+    * [OPENMEETINGS-835] - no proper db-type option for postgresql db (Command Line Admin)
+    * [OPENMEETINGS-837] - "Choose Device" Dialog stops working after a few Changes
+    * [OPENMEETINGS-842] - External users should not be redirected to dashboard
+    * [OPENMEETINGS-848] - RoomService.getRoomCounters REST/SOAP method is not working
+
+** Improvement
+    * [OPENMEETINGS-368] - Allow users to zoom their view of the Whiteboard by default and not being controlled by "Draw on the Whiteboard" permissions
+    * [OPENMEETINGS-556] - GSOC: Faster screen sharing
+    * [OPENMEETINGS-798] - MSSQL support should be added to OM
+    * [OPENMEETINGS-820] - No function to match user groups with rooms via SOAP
+
+** New Feature
+    * [OPENMEETINGS-491] - LDAP authentication filter
+
+** Task
+    * [OPENMEETINGS-790] - Red5 version in 2.x branch should be bumped
+
+
+Release Notes - Openmeetings - Version 2.1.1 Apache Release
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-432] - video only room is coming with white board also
+    * [OPENMEETINGS-439] - An LDAP user can't change their own profile picture.
+    * [OPENMEETINGS-481] - When I reserve a room by sending an email, users who connected to this link from an email have the same email address as me
+    * [OPENMEETINGS-503] - Openmeetings does not logout on the Recording panel
+    * [OPENMEETINGS-507] - Error message is shown when user save the Profile settings 
+    * [OPENMEETINGS-537] - Pop menu  in conference for files shows "Delete folder"
+    * [OPENMEETINGS-586] - FileItem owner_id is not replaced with new id while system import
+    * [OPENMEETINGS-587] - Exclusive audio by hotkey is broken
+    * [OPENMEETINGS-598] - dont build trunk on JDK 1.7 x64
+    * [OPENMEETINGS-608] - Office file are uploaded but not displayed
+    * [OPENMEETINGS-609] - The end time shown under the Book Conference Room option in New Message is Incorrect
+    * [OPENMEETINGS-618] - Incorrect translation
+    * [OPENMEETINGS-625] - Profile Pictures not working on LDAP Accounts
+    * [OPENMEETINGS-634] - No menu accessable after file upload, in a special condition
+    * [OPENMEETINGS-635] - Administration / Configuration : default_lang_id documentation
+    * [OPENMEETINGS-654] - Interview room is broken
+    * [OPENMEETINGS-670] - The webinar is already closed, you wil be rediredcted to some interesting offerings in X sek
+    * [OPENMEETINGS-687] - Microphone is unmuted when user refresh video frame
+
+** Improvement
+    * [OPENMEETINGS-589] - Configurable hot key for Mute/Unmute should be added
+
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+
+
+
+Release Notes - Openmeetings - Version 2.1 Apache Release
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-448] - Test and fix latest trunk to be able to import all old download zip's
+
+
+
+** Bug
+    * [OPENMEETINGS-34] - missing entries in XML language files
+    * [OPENMEETINGS-49] - Synchronisation between Calendar and Dashboard
+    * [OPENMEETINGS-92] - The documents are not deleted from the server after removing them from the system
+    * [OPENMEETINGS-94] - References to the code.google.com need to be updated
+    * [OPENMEETINGS-157] - Registration bug
+    * [OPENMEETINGS-166] - Meeting is created with incorrect start time in the calendar.
+    * [OPENMEETINGS-180] - bug sending invitation
+    * [OPENMEETINGS-196] - Calendar Ical / Simple Mail - double invitation mail
+    * [OPENMEETINGS-212] - Activities and actions: "Deny and remove message " button is not worked
+    * [OPENMEETINGS-243] - "Updated" field in Administration -> LDAP panel contains "null" for string for empty value.
+    * [OPENMEETINGS-251] - Minors layout problems when translating
+    * [OPENMEETINGS-267] - missing translation
+    * [OPENMEETINGS-291] - light does not indicate when the user is speaking
+    * [OPENMEETINGS-310] - Moodle plugin version
+    * [OPENMEETINGS-311] - Language problem after Openmeetings update (accessing from Moodle only)
+    * [OPENMEETINGS-312] - File was null or did not exist: TEST_SETUP_1338945244240.flv
+    * [OPENMEETINGS-314] - Webcam Title of user is username of default OM user
+    * [OPENMEETINGS-316] - ICS attachments for emails not working with Exchange 2003/2007 and Outlook 2003/2007
+    * [OPENMEETINGS-320] - Exception and layout for screensharing/recording client
+    * [OPENMEETINGS-322] - Several Exception in Log
+    * [OPENMEETINGS-327] - Add Restart Save Mail-Queue
+    * [OPENMEETINGS-328] - screen sharing is not closing automatically
+    * [OPENMEETINGS-331] - tooltip for cmd_applyforWhiteBoard room action is not set
+    * [OPENMEETINGS-343] - OM crashes if Inviteв guest with screen sharing rights tries to start screen sharing
+    * [OPENMEETINGS-346] - Screen Sharing does not end with end of meeting
+    * [OPENMEETINGS-362] - Download of profile images broken
+    * [OPENMEETINGS-363] - Some minor bugs in private chat
+    * [OPENMEETINGS-364] - User is not removed from user list when he leaves the room
+    * [OPENMEETINGS-366] - File upload does not show images as options when doing file upload
+    * [OPENMEETINGS-376] - “Notification type” text overflows the drop down data selection area and is partly covered
+    * [OPENMEETINGS-378] - Update Calendar email notification rules to send notification only when data relevant to the users has been changed
+    * [OPENMEETINGS-379] - The Calendar ics format email notification is incorrectly formed
+    * [OPENMEETINGS-380] - Calendar "Add attendee" option has a second option of itself to "Add external" but adding an external attendee does not close this dialog
+    * [OPENMEETINGS-381] - ivy jar in our repository
+    * [OPENMEETINGS-382] - LICENSE file mentions both CDDL and GPL
+    * [OPENMEETINGS-385] - contextmenu  contextmenuitem
+    * [OPENMEETINGS-389] - Create Drupal plugin for OpenMeetings
+    * [OPENMEETINGS-391] - Private and public folder does not appear
+    * [OPENMEETINGS-392] - privateChatTabBottom
+    * [OPENMEETINGS-393] - NumberFormatException while creating user or room
+    * [OPENMEETINGS-394] - save and load whiteboard does not work
+    * [OPENMEETINGS-396] - ICS attachments not recognised in Outlook 2003
+    * [OPENMEETINGS-402] - I cannot open Interview recorded
+    * [OPENMEETINGS-403] - Missing rooms
+    * [OPENMEETINGS-408] - Interview Room (1)
+    * [OPENMEETINGS-415] - NetStream NetStatus event does not work when attached to client object
+    * [OPENMEETINGS-418] - ScreenShare russian charset
+    * [OPENMEETINGS-420] - small problems in the current version
+    * [OPENMEETINGS-422] - Java error: TEST_SETUP_xxx.flv does not exist; javax error : ClientBroadCast Stream; published name=null
+    * [OPENMEETINGS-423] - Installation OM2.0
+    * [OPENMEETINGS-424] - Adjust Stream Volume
+    * [OPENMEETINGS-428] - Refactor User administration to Wicket
+    * [OPENMEETINGS-431] - OpenMeetings behind a proxy doesn't work for screen sharing
+    * [OPENMEETINGS-433] - Add Wicket enabled room administration
+    * [OPENMEETINGS-434] - Create admin area for groups, configurations, ldaps, servers
+    * [OPENMEETINGS-438] - Some bugs
+    * [OPENMEETINGS-440] - Problem in installation process
+    * [OPENMEETINGS-441] - Can't backup
+    * [OPENMEETINGS-445] - Backup Export does not work at all
+    * [OPENMEETINGS-449] - Cannot import backup file
+    * [OPENMEETINGS-450] - Wicket UI locked after accepting download of backup
+    * [OPENMEETINGS-451] - Search in user groups Wicket UI does not work
+    * [OPENMEETINGS-453] - Recordings associated with wrong user after import if already a user was in the database
+    * [OPENMEETINGS-454] - Scrennsharing initiated by invited user ends up in exception report
+    * [OPENMEETINGS-455] - Create RTMPClient to do a load test
+    * [OPENMEETINGS-458] - Missing language string "pluginname"
+    * [OPENMEETINGS-459] - Remove RoomClient from database
+    * [OPENMEETINGS-466] - Screen Sharing window, Chinese Simplified (lang_id=11) text display "?????"
+    * [OPENMEETINGS-467] - No internal user can be selected when planning a meeting
+    * [OPENMEETINGS-469] - Deleted meeting data remains in SIP db tables
+    * [OPENMEETINGS-472] - red5sip rev68 will not run
+    * [OPENMEETINGS-474] - Links to rooms sent via email do not work
+    * [OPENMEETINGS-482] - Network check script hangs after the second "Port" button click 
+    * [OPENMEETINGS-489] - Start recording test hangs if no webcamera connected
+    * [OPENMEETINGS-490] - Wrong directory for test file in "Choose device" window
+    * [OPENMEETINGS-492] - Restoration of backup failed
+    * [OPENMEETINGS-493] - Uploading Libreoffice-format files only results in "Deleted"
+    * [OPENMEETINGS-496] - It's unable to send localized SMS message.
+    * [OPENMEETINGS-498] - Backup fails with Exception
+    * [OPENMEETINGS-502] - Some labels are hardcoded on the System backup tab 
+    * [OPENMEETINGS-504] - Some labels are not translated to russian language
+    * [OPENMEETINGS-505] - Values of the "Unerole User" and "Server Address" fields are mixed on the Administrator -> Connections tab.
+    * [OPENMEETINGS-506] - Localized (russian) file name is not uploaded on the Profile tab
+    * [OPENMEETINGS-509] - Comment is shown incorrectly in the Choose device dialog
+    * [OPENMEETINGS-512] - Files are not uploaded in the rooms
+    * [OPENMEETINGS-515] - Video recording artifacts at the begin of the file
+    * [OPENMEETINGS-516] - After graduation tasks
+    * [OPENMEETINGS-517] - sensSMS flag is not imported/exported by admin.
+    * [OPENMEETINGS-519] - Need to update Configuration page on Openmeetings site.
+    * [OPENMEETINGS-520] - Missing areas on the recorded video
+    * [OPENMEETINGS-521] - The "Show/Copy chat log" and "Delete server chat log" buttons are not available for the Ptivate Chat
+    * [OPENMEETINGS-523] - download manual ghostcript download link is dead
+    * [OPENMEETINGS-524] - Unenroled user is not thrown from the conference room 
+    * [OPENMEETINGS-525] - Font styles icon is enabled for Ptivate Chat if the "Allow font styles" is not enabled for conference room
+    * [OPENMEETINGS-526] - Not enough checking in the screensharing/recording
+    * [OPENMEETINGS-530] - Network testing tool on login page does not work when having OM configured for HTTPS and RTMPS
+    * [OPENMEETINGS-531] - Error Missing[XXXX]
+    * [OPENMEETINGS-536] - In upload dialog "Select file" does not work
+    * [OPENMEETINGS-540] - Uploading of .odt files
+    * [OPENMEETINGS-552] - Release blocking UI issues
+    * [OPENMEETINGS-561] - Video is not removed on Whiteboard closing
+    * [OPENMEETINGS-563] - "Black box" is displayed on test audio/video setup dialog
+    * [OPENMEETINGS-565] - Stackoverflow Exception when you goto your user profile and try to save it.
+    * [OPENMEETINGS-566] - No default timezone selection in registration/sign up when user is in timezone +12
+    * [OPENMEETINGS-567] - If you hit the "start upload" button twice, while the conversion is running, Openmeetings will run into an error
+    * [OPENMEETINGS-568] - OpenMeetings requests access to Cam even if there is none
+    * [OPENMEETINGS-569] - Faulty highperf settings in bat script
+    * [OPENMEETINGS-572] - Empty fields are replaced with string "null" after export&import
+    * [OPENMEETINGS-580] - Smslib 3.5.3 should be used.
+    * [OPENMEETINGS-582] - 2.0 RoomPoll and Configs restore failed
+
+
+
+
+** Improvement
+    * [OPENMEETINGS-93] - Create Openmeetings plug-in
+    * [OPENMEETINGS-119] - New users french manual
+    * [OPENMEETINGS-299] - Language import should be improved to take less time
+    * [OPENMEETINGS-339] - File location detection should be centralized
+    * [OPENMEETINGS-349] - OM should be scalable 
+    * [OPENMEETINGS-356] - Modify Rooms menu to have three options for each of the room types
+    * [OPENMEETINGS-357] - Users should first log into "Private rooms", have as a Admin selectable option for where users first log into
+    * [OPENMEETINGS-361] - It should be available to set logo in OM
+    * [OPENMEETINGS-384] - Mention that the file parameter is optional for the admin setup script
+    * [OPENMEETINGS-386] - Import/Export should be automatic based on Annotations
+    * [OPENMEETINGS-387] - It should be possible to create Appointment and use existent room
+    * [OPENMEETINGS-390] - Openmeetings Plugin for Bitrix need to be implemented
+    * [OPENMEETINGS-395] - Ability to add multiple external attendees should be added to the calendar
+    * [OPENMEETINGS-397] - Private chat with chat disabled
+    * [OPENMEETINGS-398] - Updated french translation for OM 2.1
+    * [OPENMEETINGS-399] - jitsi openmeetings plugin
+    * [OPENMEETINGS-400] - Improve volume slider
+    * [OPENMEETINGS-436] - Ability to moderate room chat should be added
+    * [OPENMEETINGS-470] - SIP meeting extensions
+    * [OPENMEETINGS-477] - Possibility to copy invitation link to the clipboard should be added
+    * [OPENMEETINGS-478] - It should be possible to enable auto videopod selection
+    * [OPENMEETINGS-480] - It would be better to remove confirmation dialog when user turns micro on/off.
+    * [OPENMEETINGS-497] - Confirmation diolog for the turning micro on/off is inconvenient.
+    * [OPENMEETINGS-501] - fresh build fails with class org/jdom/JDOMException not found in anakia build section
+    * [OPENMEETINGS-518] - Sms text sent as a meeting reminder is too long sometime.
+    * [OPENMEETINGS-527] - Confirm an exclusive audio
+    * [OPENMEETINGS-529] - AEC should be utilized in OM
+    * [OPENMEETINGS-535] - an update of the german language file
+    * [OPENMEETINGS-541] - Updated version of French language file
+    * [OPENMEETINGS-562] - To import ppt presentation delete page
+    * [OPENMEETINGS-583] - Ability to disable enhanced microphone should be added
+
+** New Feature
+    * [OPENMEETINGS-111] - Command line admin need to be created
+    * [OPENMEETINGS-342] - Private Chat should be available in the room
+    * [OPENMEETINGS-350] - Hot key should be added to be able to "rearrange" video windows in the room
+    * [OPENMEETINGS-351] - Add a possibility to send sms as an appointment reminder
+    * [OPENMEETINGS-354] - Volume slider
+    * [OPENMEETINGS-383] - Plugin for Joomla should be added to Openmeetings
+
+
+
+
+
+
+** Task
+    * [OPENMEETINGS-41] - OM without private storage area
+    * [OPENMEETINGS-107] - Unify database schema
+    * [OPENMEETINGS-248] - Remove LGPL Icons from Symbol/Cliparts and Emoticons
+    * [OPENMEETINGS-306] - Initial network quality test
+    * [OPENMEETINGS-341] - Update to portugues brasil Language
+    * [OPENMEETINGS-414] - Delete SIP Applet from stack
+    * [OPENMEETINGS-417] - How to add/register SIP extension in OpenMeeting ?
+    * [OPENMEETINGS-446] - Create a Master backup File for last versions (including all generated data)
+    * [OPENMEETINGS-522] - add Redmine Plugin Link to HomePage
+    * [OPENMEETINGS-585] - Clustering documentation
+
+
+
+** Test
+    * [OPENMEETINGS-50] - content of whiteboards
+
+
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+
+
+Release Notes - OpenMeetings - Version 2.0-INCUBATING
+================================================================================================================
+Sub-task
+
+    [OPENMEETINGS-8] - Generate CalendarAPI for SOAP/REST WebServices
+    [OPENMEETINGS-9] - Design MockUp for new Calendar UI
+    [OPENMEETINGS-40] - Merge Audio/Video components to trunk
+    [OPENMEETINGS-44] - remove all old audio/video components
+    [OPENMEETINGS-47] - fix ScopeApplicationAdapter / sync and message broadcasting mechanism to not send messages to SWF10 client
+    [OPENMEETINGS-51] - fix url params (invitationHash / secureHash / language_id / roomScopeId / et cetera ) to be forwarded to inner SWF components
+    [OPENMEETINGS-52] - fix icon status in new video components
+    [OPENMEETINGS-53] - Add security mechanism to LocalConnection subscribers
+    [OPENMEETINGS-54] - fix recorder to use new audio/video components and fix recording itself to reference correct streams
+    [OPENMEETINGS-55] - fix testing application (5 second video recording on room enter) to use new a/v components
+    [OPENMEETINGS-61] - fix screensharing player to use the new audio/video components
+    [OPENMEETINGS-62] - Clean up 5-second recordings using a scheduler
+    [OPENMEETINGS-65] - fix whiteboard video player to use the new audio/video components
+    [OPENMEETINGS-71] - fix interview room type to use new audio/video components
+    [OPENMEETINGS-73] - fix mute functionality in new video components
+    [OPENMEETINGS-77] - changeDevice.lzx must be transformed to SWF10
+    [OPENMEETINGS-79] - SharedObject in SWF10 does not store settings
+    [OPENMEETINGS-80] - Some notification windows need to be moved to SWF10
+    [OPENMEETINGS-89] - Fix new option "hideWhiteboard" with layout of video pods
+    [OPENMEETINGS-97] - RTPMSClient for ScreenSharing should be created/tested
+    [OPENMEETINGS-98] - "Borrowed" code should be removed from ScreenSharing client
+    [OPENMEETINGS-105] - Add the license header to all SWF10 files
+    [OPENMEETINGS-170] - When you republish your stream while recording or suddenly leave the meeting, the recording has no audio
+
+Bug
+
+    [OPENMEETINGS-5] - Invitation default language
+    [OPENMEETINGS-15] - Usability problem with login at http://demo.openmeetings.de/openmeetings/
+    [OPENMEETINGS-18] - File upload no work
+    [OPENMEETINGS-26] - Whiteboard error "arrow tool" dragging from right to left in any angle.
+    [OPENMEETINGS-28] - LDAP wrong default mapping for firstname
+    [OPENMEETINGS-31] - Upload files will not convert to SWF.
+    [OPENMEETINGS-48] - Log are either not written or in the wrong logfile
+    [OPENMEETINGS-56] - LDAP authentication is not correct
+    [OPENMEETINGS-64] - whiteboard id
+    [OPENMEETINGS-87] - All DB related JUnit tests are failed
+    [OPENMEETINGS-91] - Fix field type's of comment/description fields to use datatype Text (instead of VARCHAR(255))
+    [OPENMEETINGS-114] - With trunk svn 1307221: LDAP authentication fails because user can't be imported into local DB
+    [OPENMEETINGS-116] - Menu bar shortcuts do not work
+    [OPENMEETINGS-118] - Activity UI: Fix duplicated calls, removal of items does not work
+    [OPENMEETINGS-122] - Fix JUnit tests
+    [OPENMEETINGS-123] - Wildcard on creating WebService docs doesn't work
+    [OPENMEETINGS-127] - Backup\Import Asterisk related tables
+    [OPENMEETINGS-133] - Sources produced by nightly build should be buildable with ant
+    [OPENMEETINGS-135] - Video window can't be maximized
+    [OPENMEETINGS-137] - Loading of stored whiteboards doesn't work (error in loading path)
+    [OPENMEETINGS-138] - Errors and quality of Recording with screensharing application
+    [OPENMEETINGS-139] - Unable to Add User into Usergroups
+    [OPENMEETINGS-140] - Login options/features been reduced in current update
+    [OPENMEETINGS-141] - onMetaData Event not thrown in AS3 Non-Debug version
+    [OPENMEETINGS-142] - 1-2-3-4 buttons on dashboard don't do anything
+    [OPENMEETINGS-144] - When using openLDAP authentication, the source code uses the hardcoded 'uid' attribute to map logins and user DNs instead of the field_user_principal parameter
+    [OPENMEETINGS-145] - Unmuting/exclusive audio doesn't work and icons show wrong status in video pod after entering a room
+    [OPENMEETINGS-149] - Error while installing on MySQL DB openmeetings-2.0.0.r1311115-08-04-2012_2307
+    [OPENMEETINGS-150] - Error restoring password
+    [OPENMEETINGS-156] - UI BUGS?
+    [OPENMEETINGS-158] - Degradation of the sound quality in recordings in the recent release
+    [OPENMEETINGS-161] - UI Bugs in private messages
+    [OPENMEETINGS-162] - Exception in Screensharing
+    [OPENMEETINGS-163] - Recording does no more work if you start to share audio/video AFTER starting the recording
+    [OPENMEETINGS-164] - java.lang.ArrayIndexOutOfBoundsException: 5 in Recording Conversion
+    [OPENMEETINGS-165] - Video freezes as soon as two people have audio/video turned on and you start to record the meeting => Convert FLV writers to act async
+    [OPENMEETINGS-171] - Screensharing notification not showing when already running
+    [OPENMEETINGS-172] - Home drive in recorder UI, minimize the home drive makes the list of files empty, drag and rop file from home drive to public drive
+    [OPENMEETINGS-174] - CLI import of backup does not work
+    [OPENMEETINGS-175] - CLI installer does not create install.xml
+    [OPENMEETINGS-176] - Import of Backup from version 1.9.x fails to import conference rooms
+    [OPENMEETINGS-177] - Meeting Room Invitation Link Not working
+    [OPENMEETINGS-178] - Invited user has access to adminstration panel
+    [OPENMEETINGS-179] - User Not Removed from chat participants window after logout..
+    [OPENMEETINGS-181] - Video Window, Conference room
+    [OPENMEETINGS-182] - OM need to be restarted after fresh installation to get menu list
+    [OPENMEETINGS-187] - Moderator and his room
+    [OPENMEETINGS-188] - Inserting room, horizontal bar does not appear
+    [OPENMEETINGS-190] - Problem with language when invoking OM from Moodle module
+    [OPENMEETINGS-191] - When I enable HTTPS and RTMPS the screen sharing resultant JNLP file has the wrong address = http://servername:443/.... instead of https://servername/..... if I edit the JNLP file by hand on the client level and change the address it works
+    [OPENMEETINGS-193] - Fix timezones that are missing
+    [OPENMEETINGS-195] - Send private message / Show user profile buttons
+    [OPENMEETINGS-196] - Calendar Ical / Simple Mail - double invitation mail
+    [OPENMEETINGS-197] - Calendar Ical / Simple Mail - room language
+    [OPENMEETINGS-198] - Password and dashboard calendar event list
+    [OPENMEETINGS-199] - Screensharing and recording does not work under OSX with Java 64Bit
+    [OPENMEETINGS-200] - Invitation link does not arrive
+    [OPENMEETINGS-203] - two languages are shown
+    [OPENMEETINGS-205] - ReplyTo Field leads to exception when sending emails to external users
+    [OPENMEETINGS-206] - wrong meeting times
+    [OPENMEETINGS-208] - Incorrectly filled "Last name" field on the User details form when created user with "Sign in" form
+    [OPENMEETINGS-209] - Encoding at install OpenMeetings
+    [OPENMEETINGS-210] - Calendar event
+    [OPENMEETINGS-211] - NullPointerException in FLVRecorderService.stopRecordingShow
+    [OPENMEETINGS-214] - When calendar event invitation is sent, invitation_text_from value displays with the name of the person for whom the invitation is being sent to but should be showing the sender's name
+    [OPENMEETINGS-215] - Created date is duplicated where restoring base from backup
+    [OPENMEETINGS-216] - UI problem
+    [OPENMEETINGS-219] - �Delete� button is not visible
+    [OPENMEETINGS-225] - If object on whiteboard of type "freedraw" ("paint") is dragged/moved, the object is gone when you re-enter the room
+    [OPENMEETINGS-229] - "Exit"button is not shown for inviting users from room
+    [OPENMEETINGS-230] - Error in the field name on the form "Add external"
+    [OPENMEETINGS-232] - Rooms are imported with invalid room types
+    [OPENMEETINGS-233] - Font styles in propertyPanel are getting disabled.
+    [OPENMEETINGS-234] - Video and Screen sharing not working with HTTPS and RTMPS - Java Application starts but doesnt connect - java trace logs shows "[WARN] [NioProcessor-2] org.red5.server.net.rtmps.RTMPSMinaIoHandler - Exception caught Keystore or password are null"
+    [OPENMEETINGS-237] - Calender reminder email invitation link fails due to link missing "&language=x" in URL
+    [OPENMEETINGS-238] - Calendar shows incorrect day of week for the actual date when timezone is GMT+10
+    [OPENMEETINGS-239] - Calendar Event details Comment/Description field text can overflow the boundary of the Description field of the Meeting Room's Event details dialog box
+    [OPENMEETINGS-241] - Cannot send emailed Invitations from a Meeting room
+    [OPENMEETINGS-242] - Moodle Plugin
+    [OPENMEETINGS-244] - Calendar doesn't show Day / Week / Month
+    [OPENMEETINGS-246] - Remote Cursor is no more visible
+    [OPENMEETINGS-249] - Using LDAP with latest build fails to login, - after login screen im prompted with "You account is assigned to multiple usergroups... " The drop down list is empty - I have checked the MYSQL DB table "oraganisations" and there are two entries there
+    [OPENMEETINGS-250] - Moderator loses Moderation
+    [OPENMEETINGS-252] - Fix ImportInitValues.java default.timezone not taken from install config and add (optional) mapping "ldap_user_attr_timezone" in the ldap config
+    [OPENMEETINGS-257] - Exception in CLI Installer when installing in a new database
+    [OPENMEETINGS-263] - Missing invitation from calendar
+    [OPENMEETINGS-264] - Spinners in ScreenSharing applet works improperly
+    [OPENMEETINGS-269] - Image Download Issue from the Whiteboard - Naming problem and Deletion.jpg file - Reported by George Kirkham
+    [OPENMEETINGS-270] - MemoryLeak / Dead-Lock in FlvRecorderConverter
+    [OPENMEETINGS-271] - Whiteboad Undo tool does not remove all objects from the Whiteboard
+    [OPENMEETINGS-272] - When entering a room, the "Choose devices" window is behind any attendee video windows.
+    [OPENMEETINGS-275] - "User Speaks" icon in Users list does not indicate when the person is speaking
+    [OPENMEETINGS-277] - Latest build fails to start using RTMPS
+    [OPENMEETINGS-278] - When I enter a room and choose a lower resolution the "Choose Devices" window shrinks but the text at the top doesn't wrap to re-size
+    [OPENMEETINGS-279] - Minimize Video button works improperly
+    [OPENMEETINGS-281] - Enhance Language Editor with search fields
+    [OPENMEETINGS-282] - Video window "Exclusive Audio" causes tool tips message boxes to be left on the screen
+    [OPENMEETINGS-283] - Choose devices - Start test recording - no longer plays back the recorded clip
+    [OPENMEETINGS-284] - Audio is not working
+    [OPENMEETINGS-286] - video/audio broadcast problem with language of japanese
+    [OPENMEETINGS-287] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-288] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-289] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-294] - Cannot install Openmeetings with mysql
+    [OPENMEETINGS-295] - OpenMeetings with rtmp over HTTP Tunneling does not work anymore with Red5 r4374
+    [OPENMEETINGS-296] - Language export works only in english
+    [OPENMEETINGS-297] - Users are imported with invalid country
+    [OPENMEETINGS-298] - Problems with shortcut-key 'Ctrl + Shift + m', Camera/Mic settings-screen pops-up when typing 'M' (Shift+m)
+    [OPENMEETINGS-300] - $APP_NAME placeholder is not correctly handled in some email templates
+    [OPENMEETINGS-302] - Delete massges in Trash
+    [OPENMEETINGS-304] - Can not delete mail in Trash
+    [OPENMEETINGS-307] - Language does not load at login
+    [OPENMEETINGS-312] - File was null or did not exist: TEST_SETUP_1338945244240.flv
+    [OPENMEETINGS-314] - Webcam Title of user is username of default OM user
+    [OPENMEETINGS-316] - ICS attachments for emails not working with Exchange 2003/2007 and Outlook 2003/2007
+    [OPENMEETINGS-317] - Multiple appointments generated when clicking save more than once
+    [OPENMEETINGS-319] - Recordings at demo.openmeetings.com are not downloadble
+    [OPENMEETINGS-320] - Exception and layout for screensharing/recording client
+    [OPENMEETINGS-323] - Update Red5 to latest version (r4380) in both server and client library to test RTMPT and file not found exceptions
+    [OPENMEETINGS-324] - Limit login
+
+Improvement
+
+    [OPENMEETINGS-2] - Modify ANT Build script to create correct Build Artefacts / Integrate into https://builds.apache.org/
+    [OPENMEETINGS-4] - Microphone rooms
+    [OPENMEETINGS-10] - openmeetings_1_9_1_r4707 Default Language Error
+    [OPENMEETINGS-45] - New Audio/Video Components
+    [OPENMEETINGS-46] - Updated German lang file
+    [OPENMEETINGS-59] - Japanese translation update
+    [OPENMEETINGS-63] - Update Sharing RTMPClient with latest Red5 version and test if it works now
+    [OPENMEETINGS-66] - Whiteboard Player should aspect ratio when importing a video to the whiteboard
+    [OPENMEETINGS-83] - multipart.jar should be replaced with implementation compatible with ASF licence
+    [OPENMEETINGS-86] - SVN directory structure need to be optimized
+    [OPENMEETINGS-101] - Linking OpenMeetings tutorials and manuals
+    [OPENMEETINGS-113] - Define a default Login-Domain (ie an Ldap domain) to be automatically selected in the frontend login window
+    [OPENMEETINGS-125] - Text does not fit in the button.
+    [OPENMEETINGS-146] - Add mechanism to debug LocalConnection better
+    [OPENMEETINGS-184] - When we make a mistake or we use the same ID in users add administration menu => all fields become empty !
+    [OPENMEETINGS-185] - There is no sense to have two users / moderator / administrator with the same email
+    [OPENMEETINGS-194] - Command line admin: added parameter "--drop", to drop database before install
+    [OPENMEETINGS-202] - Calendar event
+    [OPENMEETINGS-226] - It should be possible to configure OpenOffice location via OM config
+    [OPENMEETINGS-245] - configuration table is not backup/restored
+    [OPENMEETINGS-247] - Make document conversion quality an administrator changeable option
+    [OPENMEETINGS-253] - Made some changes to the german language deutsch.xml
+    [OPENMEETINGS-259] - English Language Text improvements
+    [OPENMEETINGS-268] - Improvements for english text for 506, "registering_mail_text_head", 507, "registering_mail_text_head2", 512, "register_mail_subject"
+    [OPENMEETINGS-276] - Need a way to select "Exclusive Audio" for attenees who have selected "Audo Only"
+    [OPENMEETINGS-285] - Update for Chinese Language text
+    [OPENMEETINGS-309] - Complete French translation
+    [OPENMEETINGS-313] - Errors with it's types and descriptions should be listed on the site
+
+New Feature
+
+    [OPENMEETINGS-129] - Load Icons dynamically at runtime and replace LGPL licensed icons
+    [OPENMEETINGS-130] - Add mechanism for advanced runtime theming
+    [OPENMEETINGS-134] - Themes: Add Color definitions to default-theme.xml file and enhance with more color definitions
+    [OPENMEETINGS-186] - ReplyTo email address should be set to user email address.
+    [OPENMEETINGS-266] - ScreenSharing need to be enhanced to enable screen publishing
+
+Task
+
+    [OPENMEETINGS-7] - Replace lzCalendar with non CPL implementation
+    [OPENMEETINGS-32] - Replace JOD Library with own implementation
+    [OPENMEETINGS-60] - OpenMeetings Plugin for Atlassian JIRA
+    [OPENMEETINGS-70] - There should be a scheduler the does a check for test-recordings older then 1 hour and delete them.
+    [OPENMEETINGS-74] - Integrate Apache Ivy for dependency management of Libraries
+    [OPENMEETINGS-75] - Remove roomtype audience
+    [OPENMEETINGS-76] - Remove Event Recording
+    [OPENMEETINGS-82] - Atlassian Confluence Integration Plugin
+    [OPENMEETINGS-85] - Fix and improve Chat Layout
+    [OPENMEETINGS-88] - Fix client side modules structure (delete "Plugins" directory)
+    [OPENMEETINGS-99] - Project restructuring (sources, beans, eclipse)
+    [OPENMEETINGS-100] - JabberService should be added to Axis2 services
+    [OPENMEETINGS-106] - JabberService is missing in the API Doclet task that generates the SOAP/REST API Documentation
+    [OPENMEETINGS-109] - Show Number of Unread private messages in the dashboard and upgrade layout
+    [OPENMEETINGS-110] - Refactor menubar layout and tabbuttons in dashboard/rooms/settings section + remove "navisub" table + Fix to use "NamedQuery" for main navigation to enable/disable entries in the mainnavi
+    [OPENMEETINGS-117] - Refactor Conference Coloring and Layout
+    [OPENMEETINGS-124] - Clean Up Splash Screen and unused resources in init
+    [OPENMEETINGS-128] - Remove "doc" folder with partly documentated japanese documention and fix icon resources that are not needed
+    [OPENMEETINGS-147] - The green dot that indicates somebody else is speaking produces too many events and is badly performing
+    [OPENMEETINGS-160] - Enable sending messages to external users from the private messages including invitations to conference rooms and events
+    [OPENMEETINGS-169] - Clean up WhiteBoardService to use proper sync methods
+    [OPENMEETINGS-173] - CLI needs a check on those params that are "must haves" for installation
+    [OPENMEETINGS-222] - Enable Keyboard actions to whiteboard (Arrow Down|Left|Right|Up [+Shift] and Delete) when object is selected
+    [OPENMEETINGS-223] - Hardly anybody knows that you can double click to re-edit the text
+    [OPENMEETINGS-231] - Update website with new screenshots
+    [OPENMEETINGS-236] - Where to put portuguese Brasil.xml.
+
+Test
+
+    [OPENMEETINGS-104] - Error in cyrillic filenames
+    [OPENMEETINGS-115] - Installation error
+    [OPENMEETINGS-120] - Blank screen on Backup
+    [OPENMEETINGS-121] - Share/record screen doesn't work
+    [OPENMEETINGS-136] - Duplicate message in Activity section
+    [OPENMEETINGS-148] - when I click to button of page, that haven't anything content
+    [OPENMEETINGS-155] - record not playing
+    [OPENMEETINGS-220] - main.lzx changes (background)
+    [OPENMEETINGS-221] - problem: recordings with 1 frame/sec
+    [OPENMEETINGS-240] - jod converter error
+    [OPENMEETINGS-303] - Can not Export new language
+
+Wish
+
+    [OPENMEETINGS-11] - Openmeeting use LDAP as default domain
+    [OPENMEETINGS-20] - Add hideWhiteboard attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-21] - Add hideChat attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-22] - Add hideActivitiesAndActions attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-23] - Add hideFilesExplorer attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-24] - Add hideScreenSharing attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-25] - Add SOAP/REST Call
+    [OPENMEETINGS-78] - datatype of externalUserId
+    [OPENMEETINGS-254] - German System Backup garbled text
+    [OPENMEETINGS-255] - Possibility to disable Show Sip Dialer in Meeting Room
+    [OPENMEETINGS-258] - Combine device settings and audio/video test in single UI
+    [OPENMEETINGS-262] - Document conversion Windows / Linux different
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..397f44c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,1746 @@
+
+Apache OpenMeetings License:
+
+                                 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:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) 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
+
+      (d) 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.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   
+======================================================================================================================
+
+Following components are direct work from the Apache OpenMeetings project:
+
+======================================================================================================================
+
+admin.bat
+admin.sh
+network_test.sh
+webapps/openmeetings/conf/om_ldap.cfg
+webapps/openmeetings/css/admin.css
+webapps/openmeetings/css/admin-rtl.css
+webapps/openmeetings/css/calendar.css
+webapps/openmeetings/css/forms.css
+webapps/openmeetings/css/history.css
+webapps/openmeetings/css/jquery.ui.menubar.css
+webapps/openmeetings/css/jquery.ui.menubar-rtl.css
+webapps/openmeetings/css/theme.css
+webapps/openmeetings/css/theme-rtl.css
+
+webapps/openmeetings/docs/*
+webapps/openmeetings/js/openmeetings_functions.js
+webapps/openmeetings/languages/*
+webapps/openmeetings/public/favicon.ico
+webapps/openmeetings/public/config.*
+webapps/openmeetings/public/main.as3.swf11.swf
+webapps/openmeetings/public/main.swf8.swf
+webapps/openmeetings/public/maindebug.as3.swf11.swf
+webapps/openmeetings/public/maindebug.swf8.swf
+webapps/openmeetings/public/networktesting.swf10.swf
+webapps/openmeetings/public/networktestingdebug.swf10.swf 
+webapps/openmeetings/public/theme.*
+webapps/openmeetings/screensharing
+webapps/openmeetings/streams/*
+webapps/openmeetings/upload/*
+
+webapps/openmeetings/WEB-INF/red5-web.properties
+webapps/openmeetings/WEB-INF/red5-web.xml
+webapps/openmeetings/WEB-INF/spring-mvc-servlet.xml
+webapps/openmeetings/WEB-INF/velocity.properties
+webapps/openmeetings/WEB-INF/web.xml
+webapps/openmeetings/WEB-INF/classes/logback.xsd
+webapps/openmeetings/WEB-INF/classes/logback-config.xml
+webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/postgres_persistence.xml
+webapps/openmeetings/WEB-INF/conf/axis2.xml
+webapps/openmeetings/WEB-INF/conf/axis2.xsd
+webapps/openmeetings/WEB-INF/services/openmeetings-*.aar
+webapps/openmeetings/WEB-INF/services/services.list
+webapps/openmeetings/WEB-INF/services/version.aar
+
+webapps/openmeetings/WEB-INF/lib/openmeetings-axis-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-cli-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-core-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-db-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-util-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-web-*.jar
+
+webapps/openmeetings/screensharing/icon.jpg
+webapps/openmeetings/screensharing/splashicon.jpg
+webapps/openmeetings/screensharing/openmeetings-screenshare-*.jar
+
+======================================================================================================================
+
+Further those components are either itself or derivate work from 
+projects licensed under the Apache License 2.0:
+
+======================================================================================================================
+
+red5-*.jar
+webapps/openmeetings/screensharing/red5-*.jar
+commons-cli-jar-1.3.1.jar
+red5.bat
+red5.sh
+red5-highperf.sh
+red5-highperf.bat
+red5-debug.sh
+red5-debug.bat
+red5-shutdown.sh
+red5-shutdown.bat
+conf/access.properties
+conf/build_standalone.properties
+conf/catalina.policy
+conf/context.xml
+conf/ehcache.xml
+conf/jee-container.xml
+conf/keystore.jmx
+conf/logback.xml
+conf/no-jee-container.xml
+conf/password.properties
+conf/quartz.properties
+conf/realm.properties
+conf/red5-common.xml
+conf/red5-core.xml
+conf/red5.globals
+conf/red5.policy
+conf/red5.properties
+conf/red5.xml
+conf/tomcat-users.xml
+conf/truststore.jmx
+conf/web.xml
+webapps/red5-default.xml
+webapps/root/biglogo.png
+webapps/root/crossdomain.xml
+webapps/root/favicon.ico
+webapps/root/favicon.png
+webapps/root/flvdemo.html
+webapps/root/gc.jsp
+webapps/root/index.html
+webapps/root/logo.png
+webapps/root/WEB-INF/red5-web.properties
+webapps/root/WEB-INF/red5-web.xml
+webapps/root/WEB-INF/web.xml
+
+
+webapps/openmeetings/WEB-INF/lib/apache-mime4j-core-jar-0.8-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/asterisk-java-jar-1.0.0.CI-20130102.214528-1134.jar
+webapps/openmeetings/WEB-INF/lib/axiom-api-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axiom-dom-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axiom-impl-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-jaxws-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-kernel-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-metadata-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-saaj-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-transport-http-bundle-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-transport-local-bundle-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/batik-anim-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-awt-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-bridge-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-codec-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-css-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-dom-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-ext-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-extension-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-gui-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-gvt-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-parser-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-rasterizer-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-script-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-slideshow-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-squiggle-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svg-dom-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svggen-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svgpp-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-swing-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-transcoder-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-ttf2svg-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-xml-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/commons-collections-jar-3.2.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-dbcp2-jar-2.1.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-digester-jar-2.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-exec-jar-1.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-httpclient-jar-3.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-lang-jar-2.6.jar
+webapps/openmeetings/WEB-INF/lib/commons-net-jar-3.3.jar
+webapps/openmeetings/WEB-INF/lib/commons-pool2-jar-2.3.jar
+webapps/openmeetings/WEB-INF/lib/commons-transaction-jar-1.2.jar
+webapps/openmeetings/WEB-INF/lib/derbyclient-jar-10.10.2.0.jar
+webapps/openmeetings/WEB-INF/lib/derby-jar-10.10.2.0.jar
+webapps/openmeetings/WEB-INF/lib/derbynet-jar-10.10.2.0.jar
+webapps/openmeetings/WEB-INF/lib/fop-jar-1.0.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-activation_1.1_spec-bundle-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-annotation_1.0_spec-jar-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-javamail_1.4_spec-bundle-1.7.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-jaxws_2.2_spec-bundle-1.0.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-jta_1.1_spec-jar-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-saaj_1.3_spec-jar-1.0.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-stax-api_1.0_spec-bundle-1.0.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-ws-metadata_2.0_spec-jar-1.1.2.jar
+webapps/openmeetings/WEB-INF/lib/jsmpp-jar-2.1.0.jar
+webapps/openmeetings/WEB-INF/lib/neethi-bundle-3.0.3-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-bundle-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jdbc-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jest-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-kernel-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-lib-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jdbc-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-slice-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-xmlstore-jar-2.3.0.jar
+webapps/openmeetings/WEB-INF/lib/simple-xml-jar-2.7.jar
+webapps/openmeetings/WEB-INF/lib/smslib-jar-3.5.3.jar
+webapps/openmeetings/WEB-INF/lib/stax-api-jar-1.0-2.jar
+webapps/openmeetings/WEB-INF/lib/stax2-api-jar-3.1.1.jar
+webapps/openmeetings/WEB-INF/lib/velocity-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/velocity-tools-jar-2.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-auth-roles-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-core-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-dashboard-core-jar-0.12.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-datetime-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-devutils-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-extensions-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-ioc-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-calendar-jar-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-core-jar-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-jar-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-plugins-jar-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-bundle-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-culture-bundle-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-theme-default-bundle-6.20.1.jar
+webapps/openmeetings/WEB-INF/lib/wicket-native-websocket-core-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-native-websocket-javax-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-request-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-html5-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-select2-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-urlfragment-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-util-jar-6.20.0.jar
+webapps/openmeetings/WEB-INF/lib/woden-core-bundle-1.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/woodstox-core-asl-jar-4.1.4.jar
+webapps/openmeetings/WEB-INF/lib/ws-commons-util-jar-1.0.2.jar
+webapps/openmeetings/WEB-INF/lib/wsdl4j-jar-1.6.2.jar
+webapps/openmeetings/WEB-INF/lib/xalan-jar-2.7.0.jar
+webapps/openmeetings/WEB-INF/lib/xml-apis-ext-jar-1.3.04.jar
+webapps/openmeetings/WEB-INF/lib/xml-resolver-jar-1.2.jar
+webapps/openmeetings/WEB-INF/lib/xmlgraphics-commons-jar-1.4.jar
+webapps/openmeetings/WEB-INF/lib/xmlrpc-client-jar-3.1.3.jar
+webapps/openmeetings/WEB-INF/lib/xmlrpc-common-jar-3.1.3.jar
+webapps/openmeetings/WEB-INF/lib/XmlSchema-bundle-1.4.8-SNAPSHOT.jar
+
+webapps/openmeetings/screensharing/commons-beanutils-1.9.2.jar
+webapps/openmeetings/screensharing/commons-codec-1.9.jar
+webapps/openmeetings/screensharing/commons-collections-3.2.1.jar
+webapps/openmeetings/screensharing/commons-lang3-3.3.2.jar
+webapps/openmeetings/screensharing/ehcache-core-2.6.9.jar
+webapps/openmeetings/screensharing/httpclient-4.3.5.jar
+webapps/openmeetings/screensharing/httpcore-4.3.2.jar
+webapps/openmeetings/screensharing/mina-core-2.0.8.jar
+webapps/openmeetings/screensharing/quartz-2.1.7.jar
+webapps/openmeetings/screensharing/red5-client-jar-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/red5-io-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/red5-server-common-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/spring-beans-4.0.8.RELEASE.jar
+webapps/openmeetings/screensharing/spring-context-4.0.8.RELEASE.jar
+webapps/openmeetings/screensharing/spring-core-4.0.8.RELEASE.jar
+
+lib/cglib-nodep-2.2.2.jar
+lib/commons-beanutils-1.9.2.jar
+lib/commons-codec-1.9.jar
+lib/commons-collections-3.2.1.jar
+lib/commons-daemon-1.0.15.jar
+lib/commons-fileupload-jar-1.3.jar
+lib/commons-io-jar-2.4.jar
+lib/commons-lang3-3.3.2.jar
+lib/commons-pool-1.5.6.jar
+lib/ehcache-core-2.6.9.jar
+lib/geronimo-jpa_2.0_spec-bundle-1.1.jar
+lib/httpclient-4.3.5.jar
+lib/httpcore-4.3.2.jar
+lib/mina-core-2.0.8.jar
+lib/mina-integration-beans-2.0.8.jar
+lib/mina-integration-jmx-2.0.8.jar
+lib/mina-integration-ognl-2.0.8.jar
+lib/quartz-2.1.7.jar
+lib/red5-*.jar
+lib/spring-aop-4.0.8.RELEASE.jar
+lib/spring-aspects-jar-4.0.8.RELEASE.jar
+lib/spring-beans-4.0.8.RELEASE.jar
+lib/spring-context-4.0.8.RELEASE.jar
+lib/spring-context-support-4.0.8.RELEASE.jar
+lib/spring-context-support-jar-4.0.8.RELEASE.jar
+lib/spring-core-4.0.8.RELEASE.jar
+lib/spring-expression-4.0.8.RELEASE.jar
+lib/spring-jdbc-jar-4.0.8.RELEASE.jar
+lib/spring-orm-jar-4.0.8.RELEASE.jar
+lib/spring-tx-jar-4.0.8.RELEASE.jar
+lib/spring-web-4.0.8.RELEASE.jar
+lib/spring-webmvc-jar-4.0.8.RELEASE.jar
+lib/xercesImpl-2.9.1.jar
+
+plugins/tomcat-embed-core.jar
+plugins/tomcat-embed-jasper.jar
+plugins/tomcatplugin-1.7.jar
+
+======================================================================================================================
+
+   
+APACHE OPENMEETINGS SUBCOMPONENTS:
+
+Apache OpenMeetings includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.   
+   
+======================================================================================================================
+
+For GlassFish components
+
+activation-jar-1.1.jar
+jsr311-api-jar-1.1.1.jar
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. Executable means the Covered Software in any form other than Source Code.
+
+1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
+
+1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. License means this document.
+
+1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. Modifications means the Source Code and Executable form of any of the following:
+
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+B. Any new file that contains any part of the Original Software or previous Modification; or
+
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)�the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)�ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections�2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section�2.1(b) above, no patent license is granted: (1)�for code that You delete from the Original Software, or (2)�for infringements caused by: (i)�the modification of the Original Software, or (ii)�the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)�Modifications made by that Contributor (or portions thereof); and (2)�the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections�2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section�2.2(b) above, no patent license is granted: (1)�for any code that Contributor has deleted from the Contributor Version; (2)�for infringements caused by: (i)�third party modifications of Contributor Version, or (ii)�the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3)�under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a)�rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b)�otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections�2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. In the event of termination under Sections�6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a commercial item, as that term is defined in 48�C.F.R.�2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R. �252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48�C.F.R.�12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The GlassFish code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. 
+   
+======================================================================================================================
+
+For SLF4J:
+
+webapps/openmeetings/screensharing/jcl-over-slf4j-1.7.9.jar
+webapps/openmeetings/screensharing/slf4j-api-1.7.9.jar
+lib/jcl-over-slf4j-1.7.9.jar
+lib/jul-to-slf4j-1.7.9.jar
+lib/log4j-over-slf4j-1.7.9.jar
+lib/slf4j-api-1.7.9.jar
+
+Copyright (c) 2004-2008 QOS.ch
+ All rights reserved.
+
+ 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.
+ 
+ ======================================================================================================================
+ 
+ For backport-util-concurrent-jar-3.1.jar
+ 
+ This software is released to the public domain, in the spirit of the original code written by Doug Lea. 
+ The code can be used for any purpose, modified, and redistributed without acknowledgment. 
+ No warranty is provided, either express or implied. 
+  
+ ======================================================================================================================
+ 
+plugins/websocket-1.1.jar
+jaxb-api-jar-2.2.6.jar
+jaxb-impl-jar-2.2.6.jar
+jaxb-xjc-jar-2.2.6.jar
+jaxws-tools-jar-2.2.6.jar
+
+ COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+1. Definitions.
+
+     1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+     1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+     1.4. "Executable" means the Covered Software in any form other than Source Code.
+
+     1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
+
+     1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+     1.7. "License" means this document.
+
+     1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means the Source Code and Executable form of any of the following:
+
+     A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+     B. Any new file that contains any part of the Original Software or previous Modification; or
+
+     C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+     1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
+
+     1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+     1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+     1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+     2.1. The Initial Developer Grant.
+
+     Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+     (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+     (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+     (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+     (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+     2.2. Contributor Grant.
+
+     Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+     (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+     (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+     (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+     (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Availability of Source Code.
+
+     Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+     3.2. Modifications.
+
+     The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+     3.3. Required Notices.
+
+     You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+     3.4. Application of Additional Terms.
+
+     You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+     3.5. Distribution of Executable Versions.
+
+     You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+     3.6. Larger Works.
+
+     You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+     4.1. New Versions.
+
+     Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+     4.2. Effect of New Versions.
+
+     You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+     4.3. Modified Versions.
+
+     When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+     COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+     6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+     6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+     6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+     6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+     The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+----------
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+
+
+The GNU General Public License (GPL) Version 2, June 1991
+
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+   a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+   b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+   c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+   a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+   One line to give the program's name and a brief idea of what it does.
+
+   Copyright (C)
+
+   This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+   Gnomovision version 69, Copyright (C) year name of author
+   Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+   signature of Ty Coon, 1 April 1989
+   Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+
+Certain source files distributed by Oracle are subject to the following clarification and special exception to the GPL Version 2, but only where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the License file that accompanied this code."
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library.  Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.  An independent module is a module which is not derived from or based on this library.  If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.  If you do not wish to do so, delete this exception statement from your version.
+ 
+======================================================================================================================
+
+For 
+webapps/openmeetings/WEB-INF/lib/jaxen-jar-1.1.4.jar
+
+ $Id: LICENSE.txt,v 1.5 2006/02/05 21:49:04 elharo Exp $
+
+ Copyright 2003-2006 The Werken Company. All Rights Reserved.
+ 
+ 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 Jaxen 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER
+OR 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.
+
+======================================================================================================================
+
+For mail-jar-1.4.7.jar
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+   1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
+
+   1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+   1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+   1.4. Executable. means the Covered Software in any form other than Source Code.
+
+   1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
+
+   1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+   1.7. License. means this document.
+
+   1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+   1.9. Modifications. means the Source Code and Executable form of any of the following:
+
+        A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+        B. Any new file that contains any part of the Original Software or previous Modification; or
+
+        C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+   1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
+
+   1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+   1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+   1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+         (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+         (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+        (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+        (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+    2.2. Contributor Grant.
+
+    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+        (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+        (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+        (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+        (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+      4.1. New Versions.
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+   COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+   UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+   The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. � 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+   This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+   As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+   NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+   The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+   
+======================================================================================================================
+
+For wsdl4j-jar-1.6.2.jar
+
+Common Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+    b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+    ii) additions to the Program;
+
+    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. 
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. 
+
+    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+    a) it complies with the terms and conditions of this Agreement; and
+
+    b) its license agreement:
+
+    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; 
+
+    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; 
+
+    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. 
+
+When the Program is made available in source code form:
+
+    a) it must be made available under this Agreement; and 
+
+    b) a copy of this Agreement must be included with each copy of the Program. 
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+ 
+======================================================================================================================
+
+For lib/jython-standalone-2.5.3.jar
+
+The Jython License
+A. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING JYTHON
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Jython") in source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Jython alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2007 Python Software Foundation; All Rights Reserved" are retained in Jython alone or in any derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on or incorporates Jython or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Jython.
+
+4. PSF is making Jython available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF JYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF JYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING JYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Jython, Licensee agrees to be bound by the terms and conditions of this License Agreement.
+Jython 2.0, 2.1 License
+
+Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Jython Developers All rights reserved.
+
+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 Jython Developers 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 REGENTS OR 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.
+
+======================================================================================================================
+
+ For Bouncy Castle:
+ 
+ lib/bcprov-jdk15on-1.51.jar
+ webapps/openmeetings/screensharing/bcprov-jdk15on-1.51.jar
+
+ Copyright (c) 2000 - 2011 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+
+ 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.
+ 
+======================================================================================================================
+
+For XPP3: xpp3-jar-1.1.4c.jar
+
+Indiana University Extreme! Lab Software License
+
+Version 1.1.1
+
+Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. 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.
+
+3. The end-user documentation included with the redistribution, if any,
+   must include the following acknowledgment:
+
+  "This product includes software developed by the Indiana University
+  Extreme! Lab (http://www.extreme.indiana.edu/)."
+
+Alternately, this acknowledgment may appear in the software itself,
+if and wherever such third-party acknowledgments normally appear.
+
+4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab"
+must not be used to endorse or promote products derived from this
+software without prior written permission. For written permission,
+please contact http://www.extreme.indiana.edu/.
+
+5. Products derived from this software may not use "Indiana Univeristy"
+name nor may "Indiana Univeristy" appear in their name, without prior
+written permission of the Indiana University.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 AUTHORS, COPYRIGHT HOLDERS OR ITS 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.
+
+======================================================================================================================
+
+For XStream Components: xstream-jar-1.4.2.jar
+
+Copyright (c) 2003-2006, Joe Walnes
+Copyright (c) 2006-2007, XStream Committers
+All rights reserved.
+
+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 XStream 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 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.
+ 
+======================================================================================================================
+
+For Red5 Components:
+
+ RED5 Open Source Flash Server - http://code.google.com/p/red5/
+ 
+Copyright 2006-2012 by respective authors (see below). All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ 
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ 
+The Red5 Project (red5@osflash.org)
+Luke Hubbard (luke@codegent.com)
+Dominick Accattato (daccattato@gmail.com)
+Chris Allen (mrchrisallen@gmail.com)
+Joachim Bauch (jojo@struktur.de)
+Mick Herres (mickherres@hotmail.com)
+John Grden (johng@acmewebworks.com)
+Grant Davies (grant@bluetube.com)
+Steven Elliott (steven.s.elliott@gmail.com)
+Jokul Tian (tianxuefeng@gmail.com)
+Steven Gong (steven.gong@gmail.com)
+Paul Gregoire (mondain@gmail.com)
+Michael Klishin (michael.s.klishin@gmail.com)
+Thijs Triemstra (info@collab.nl)
+Dan Rossi (electroteque@gmail.com)
+Anton Lebedevich (mabrek@gmail.com)
+Art Clarke (aclarke@xuggle.com)
+
+
+======================================================================================================================
+
+For JDOM
+ Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions, and the disclaimer that follows
+    these conditions in the documentation and/or other materials
+    provided with the distribution.
+
+ 3. The name "JDOM" must not be used to endorse or promote products
+    derived from this software without prior written permission.  For
+    written permission, please contact <request_AT_jdom_DOT_org>.
+
+ 4. Products derived from this software may not be called "JDOM", nor
+    may "JDOM" appear in their name, without prior written permission
+    from the JDOM Project Management <request_AT_jdom_DOT_org>.
+
+ In addition, we request (but do not require) that you include in the
+ end-user documentation provided with the redistribution and/or in the
+ software itself an acknowledgement equivalent to the following:
+     "This product includes software developed by the
+      JDOM Project (http://www.jdom.org/)."
+ Alternatively, the acknowledgment may be graphical using the logos
+ available at http://www.jdom.org/images/logos.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JDOM AUTHORS OR THE PROJECT
+ 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.
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the JDOM Project and was originally
+ created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+ Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
+ on the JDOM Project, please see <http://www.jdom.org/>.
+ 
+======================================================================================================================
+The following components are BSD Licensed 
+======================================================================================================================
+
+For: dom4j-jar-1.6.1.jar
+
+    Containing Project URL: http://sourceforge.net/projects/dom4j/
+    
+Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation
+("Software"), with or without modification, are permitted provided
+that the following conditions are met:
+
+1. Redistributions of source code must retain copyright
+   statements and notices.  Redistributions must also contain a
+   copy of this document.
+ 
+2. 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.
+ 
+3. The name "DOM4J" must not be used to endorse or promote
+   products derived from this Software without prior written
+   permission of MetaStuff, Ltd.  For written permission,
+   please contact dom4j-info@metastuff.com.
+ 
+4. Products derived from this Software may not be called "DOM4J"
+   nor may "DOM4J" appear in their names without prior written
+   permission of MetaStuff, Ltd. DOM4J is a registered
+   trademark of MetaStuff, Ltd.
+ 
+5. Due credit should be given to the DOM4J Project - 
+   http://www.dom4j.org
+ 
+THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESSED 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
+METASTUFF, LTD. OR ITS 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.
+
+postgresql-jar-9.4-1200-jdbc41.jar
+	Containing Project URL: http://jdbc.postgresql.org
+	
+	The PostgreSQL JDBC driver is distributed under the BSD license, same as the server. The simplest explanation of the licensing terms is that you can do whatever you want with the product and source code as long as you don't claim you wrote it or sue us. You should give it a read though, it's only half a page.
+
+Copyright (c) 1997-2010, PostgreSQL Global Development Group
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+2. 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.
+3. Neither the name of the PostgreSQL Global Development Group 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 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.
+
+======================================================================================================================
+
+SERP License
+
+File: serp-jar-1.14.1.jar
+
+Copyright (c) 2002-2007, A. Abram White
+All rights reserved.
+
+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 'serp' 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 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.
+
+======================================================================================================================
+ iCal4j - License
+ 
+webapps/openmeetings/WEB-INF/lib/ical4j-jar-1.0.6.jar
+ 
+======================================================================================================================
+
+Copyright (c) 2012, Ben Fortuna
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+	o Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+	o 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.
+
+	o Neither the name of Ben Fortuna nor the names of any other contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"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 COPYRIGHT OWNER OR
+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.
+
+
+======================================================================================================================
+
+
+For the components:
+
+webapps/openmeetings/screensharing/logback-access-1.1.2.jar
+webapps/openmeetings/screensharing/logback-classic-1.1.2.jar
+webapps/openmeetings/screensharing/logback-core-1.1.2.jar
+lib/logback-access-1.1.2.jar
+lib/logback-classic-1.1.2.jar
+lib/logback-core-1.1.2.jar
+lib/jruby-1.6.8.jar
+plugins/ecj-4.4.jar
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
+
+======================================================================================================================
+
+For components:
+
+coin-slider-styles.css
+colorbox.css
+jquery.ui.menubar.js
+jquery.ui.menubar.css
+
+coin-slider.min.js	
+jquery.colorbox.js
+jquery-1.11.0.min.js	
+jquery-ui-1.11.4.custom.min.js
+jquery-ui-1.10.4.custom.css
+jquery-ui-1.11.4.custom.css
+
+border.png
+controls.png
+loading.gif
+loading_background.png
+overlay.png
+ui-bg_flat_0_000088_40x100.png
+ui-bg_flat_0_e6b900_40x100.png
+ui-bg_flat_100_eeeeee_40x100.png
+ui-bg_flat_20_000088_40x100.png
+ui-bg_flat_22_1484e6_40x100.png
+ui-bg_flat_25_c5ddfc_40x100.png
+ui-bg_flat_26_2293f7_40x100.png
+ui-bg_highlight-soft_100_f9f9f9_1x100.png
+ui-icons_0a82eb_256x240.png
+ui-icons_0b54d5_256x240.png
+ui-icons_5fa5e3_256x240.png
+ui-icons_ffffff_256x240.png
+
+JQuery: http://jquery.com/
+JQuery UI: http://code.google.com/p/jquery-ui/
+Colorbox Plugin: http://www.jacklmoore.com/colorbox
+Coinslider Plugin: https://code.google.com/p/coin-slider/
+
+https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt
+
+Copyright (c) 2012 jQuery Foundation and other contributors,
+http://jquery.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.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..5f2e271
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+Apache OpenMeetings
+Copyright 2011-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes icons from FamFamFam Icon Set Silk.
+http://www.famfamfam.com/lab/icons/silk/
+
+This product includes icons from Yusuke Kamiyamane.
+http://p.yusukekamiyamane.com/
diff --git a/README b/README
new file mode 100644
index 0000000..5c2ef07
--- /dev/null
+++ b/README
@@ -0,0 +1,249 @@
+Apache OpenMeetings - README
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+About
+=====
+Apache Openmeetings provides video conferencing, instant messaging, white board,
+collaborative document editing and other groupware tools using API functions of 
+the Red5 Streaming Server for Remoting and Streaming. 
+
+Release Notes 3.0.7
+=============
+see CHANGELOG file for detailed log
+
+Service release 7 for 3.0.0 contains following improvements and bug fixes:
+
+Clustering:
+* Clustering was tested and fixed, now it works as expected both in OM and plugins
+* Moderator able to restrict video in restricted room from now on
+* Private messages with room booking are now works as expected
+* Crashes in admin are fixed
+* LDAP: group import
+
+Other fixes in admin, localizations, invitations etc.
+
+
+Release Notes 3.0.6
+=============
+see CHANGELOG file for detailed log
+
+Service release 6 for 3.0.0 contains following improvements and bug fixes:
+
+Invitation:
+* Invitation hash sending from the room is fixed 
+* Invitation hash is now enable for plugin users
+* First and last name can be passed to SOAP function for hash geneartion
+
+Other fixes
+
+
+Release Notes 3.0.5
+=============
+see CHANGELOG file for detailed log
+
+Service release 5 for 3.0.0 contains following improvements and bug fixes:
+
+Installer:
+* Database configuration screen is added
+
+RTL:
+* Dashboard and Emails are more RTL friendly
+
+OAuth:
+* OAuth support is improved, crash is fixed
+
+Other fixes in SOAP, localizations, invitations etc. 
+
+
+Release Notes 3.0.4
+=============
+see CHANGELOG file for detailed log
+
+Service release 4 for 3.0.0 contains following improvements and bug fixes:
+
+Screen-Sharing:
+* web application is now signed with trusted certificate (no warnings)
+* RTMPT/RTMPS works as expected
+* audio/video synchronization is improved
+
+Recordings:
+* It is now possible to rename the recording
+* Recordings stability is improved
+
+RTL:
+* Dashboard, Calendar, Settings and Admin are more RTL friendly
+
+Calendar:
+* Time zone support is greatly improved
+
+
+Release Notes 3.0.3
+=============
+see CHANGELOG file for detailed log
+
+Service release 3 for 3.0.0, no new features were added, please NOTE Java7 is required on both client and server from now on.
+
+
+Release Notes 3.0.2
+=============
+see CHANGELOG file for detailed log
+
+Service release 2 for 3.0.0, no new features were added
+
+
+Release Notes 3.0.1
+=============
+see CHANGELOG file for detailed log
+
+Service release 1 for 3.0.0, no new features were added
+
+
+Release Notes 3.0
+=============
+see CHANGELOG file for detailed log
+
+Refactoring main interface (admin, dashboard, etc.) to use HTML5 instead of Flash. 
+All the screens but the room are on HTML5. The room is still on Flash.
+
+The release also includes some bug fixes, timezone refactoring and a lot of 
+localization improvements.
+
+_Known Issues And Limitations_
+* RTMPS seems to be very unstable (will try to fix it in 3.1)
+* Recent version of Adobe Flash still causes crash (please downgrade to 11.5 version)
+https://bugzilla.mozilla.org/show_bug.cgi?id=885188
+* Multi-tabbing (no other flash application should be running in
+different browsers or tabs)
+* Chat clean up and log copying is not implemented
+* Moving recordings between folders does not work
+
+Please not that this is a first HTML5 release, so some minor UI issues are possible
+
+
+Release Notes 2.2.0
+=============
+see CHANGELOG file for detailed log
+
+Bug fix release for 2.1.1
+This release includes lots of UI and command line fixes, as well as some improvements:
+MSSQL DB support, Faster screen sharing, improved SOAP/REST call and LDAP support.
+
+_Known Issues_
+RTMPS seems to be very unstable (will try to fix it in 3.0)
+
+
+Release Notes 2.1.1
+=============
+see CHANGELOG file for detailed log
+
+Bug fix release for 2.1.0.
+This release includes some improvements in user interface, fixes for the 
+interview and video only rooms, and localization issues. 
+Configurable hot key for Mute/Unmute have been added.
+
+_Known Issues_
+Video/audio SIP integration is not a part of this Apache release.
+Check free red5sip product for this integration.
+
+Release passed reliability testing (great job, Vasily Degtyarev!)
+For 1 hour long conferences the following does not work with this release:
+* Recordigs (expected to work in 3.0)
+https://issues.apache.org/jira/browse/OPENMEETINGS-669
+* Recent version with Adobe Flash (please downgrade to 11.5 version)
+https://bugzilla.mozilla.org/show_bug.cgi?id=885188
+* Multi-tabbing (no other flash application should be running in
+different browsers or tabs)
+
+Release Notes 2.1
+=============
+see CHANGELOG file for detailed log
+
+_Integration with Asterisk_
+SIP/VOIP integration with Asterisk was refactored. 
+Confbridge application is now used instead of Meetme for the conferences.
+Sound quality and SIP transport stability was significantly improved.
+Basic support for video is added (is unstable and in beta version stage now).
+See also: http://openmeetings.apache.org/red5sip-integration_2.1.html
+
+_Improving the sound and video quality_
+All the audio/video related components now use SWF11 for broadcasting and 
+receiving audio and video signals. 
+Echo cancellation can be enabled in the config. 
+H264 video codec is now used instead of H263 to enable SIP video support.
+
+_Private and moderated chat_
+Ability to send private chat messages in the room is added as well as the chat 
+moderation funmctionality.
+
+_SMS sending module_
+Possibility to send SMS message as a meeting reminder is added.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module
+
+_Network testing tool/script_
+Network testing tool is implemented and its link is added to the login page.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool
+
+_Improvements in the mail sending process_
+Now e-mails are re-send again in case of unsuccessfull result at the first 
+attempt or OpenMeetings re-start before the sending. 
+SMTP setting updates now takes effect just after they saving whereas previously 
+they started to work after the OpenMeetings re-start only.
+
+_Calendar_
+Messages about the meeting updates are sent only when substantial changes were made. 
+Multiple external attendees can be added as one operation, it's now possible to 
+specify user name for external guests (user will appear with this name in the user 
+list in the room). 
+
+_Room Interface_
+Possibility to get invitation link without sending an e-mail was added. 
+Confirmation dialog for exclusive audio no longer appears.
+Hot key is added to be able to "rearrange" video windows in the room. 
+Volume slider on the video pod toolbar was added.
+
+_Recordings and screen sharing improvements_
+Some improvements for the screen sharing and recordings quality and stability 
+were made.
+
+_Cluster capabilities_
+In the beta stage: OpenMeetings  can be configured in the cluster environment and 
+is ready for the testing, but development has not been fnished yet. 
+See also: http://openmeetings.apache.org/Clustering.html,
+https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview
+
+_Admin/Calendar HTML5 UI_
+Additional HTML5 Wicket based UI (fully customizable with CSS) is added for 
+static screens as a proof of the concept.
+
+Getting Started
+===============
+Please visit the project website for the latest information:
+    http://openmeetings.apache.org/
+    
+Documentation for Installation and Upgrade:
+    http://openmeetings.apache.org/installation.html
+    http://openmeetings.apache.org/Upgrade.html
+
+Along with the developer mailing list archive:
+    http://openmeetings.apache.org/mail-lists.html
+    
+    
+System Requirements
+===================
+You need a platform that supports Sun Java SE 6.
+
+
+Building and running
+====================
+To build from source code:
+
+  - Requirements:
+    Sources compilation require Sun Java SE 6.
+    The project is built with Apache ANT 1.8.6 or later.
+  
+  - To build the OpenMeetings project run ant in the root directory:
+     ant
+    
+For a detailed documentation on how to build from source and options see:
+    http://openmeetings.apache.org/BuildInstructions.html
diff --git a/WebContent/crossdomain.xml b/WebContent/crossdomain.xml
new file mode 100644
index 0000000..f844f20
--- /dev/null
+++ b/WebContent/crossdomain.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="crossdomain.xsd">
+	<site-control permitted-cross-domain-policies="all"/>
+	<allow-access-from domain="localhost" to-ports="20-65535"/>
+	<allow-access-from domain="*.local" to-ports="20-65535"/>
+</cross-domain-policy>
diff --git a/WebContent/crossdomain.xsd b/WebContent/crossdomain.xsd
new file mode 100644
index 0000000..7d7351d
--- /dev/null
+++ b/WebContent/crossdomain.xsd
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="cross-domain-policy">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="site-control"/>
+        <xs:element maxOccurs="unbounded" ref="allow-access-from"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="site-control">
+    <xs:complexType>
+      <xs:attribute name="permitted-cross-domain-policies" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="allow-access-from">
+    <xs:complexType>
+      <xs:attribute name="domain" use="required"/>
+      <xs:attribute name="to-ports" use="required" type="xs:NMTOKEN"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/WebContent/jrebel/red5-debug.bat b/WebContent/jrebel/red5-debug.bat
new file mode 100644
index 0000000..9087e9e
--- /dev/null
+++ b/WebContent/jrebel/red5-debug.bat
@@ -0,0 +1,19 @@
+REM #############################################
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM #############################################
+@echo off
+
+if NOT DEFINED RED5_HOME set RED5_HOME=%~dp0
+
+set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -javaagent:@jrebel.home@\jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@
+%RED5_HOME%\red5.bat
diff --git a/WebContent/jrebel/red5-debug.sh b/WebContent/jrebel/red5-debug.sh
new file mode 100644
index 0000000..b4065b4
--- /dev/null
+++ b/WebContent/jrebel/red5-debug.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+
+if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
+
+# Debug options
+export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n $JAVA_OPTS -javaagent:@jrebel.home@/jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@"
+
+# Start Red5
+exec $RED5_HOME/red5.sh
diff --git a/WebContent/lzx.xsd b/WebContent/lzx.xsd
new file mode 100644
index 0000000..3146f4f
--- /dev/null
+++ b/WebContent/lzx.xsd
@@ -0,0 +1,14742 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
+  targetNamespace="http://localhost/openlaszlo/lzx" 
+  xmlns:lzx="http://localhost/openlaszlo/lzx">
+  <xs:simpleType name="booleanLiteral">
+    <xs:restriction base="xs:boolean"/>
+  </xs:simpleType>
+  <xs:simpleType name="colorLiteral">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="numberLiteral">
+    <xs:restriction base="xs:double"/>
+  </xs:simpleType>
+  <xs:simpleType name="sizeLiteral">
+    <xs:restriction base="xs:double">
+      <xs:minInclusive value="0"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="inheritableBooleanLiteral">
+    <xs:union memberTypes="lzx:booleanLiteral">
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="inherit"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="constraint">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="$(style|path|immediately|once|always)?\{.*\}"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="boolean">
+    <xs:union memberTypes="lzx:booleanLiteral lzx:constraint">
+    <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="null"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="booleanOrNull">
+    <xs:union memberTypes="lzx:boolean">
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="null"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="color">
+    <xs:union memberTypes="lzx:colorLiteral lzx:constraint"/>
+  </xs:simpleType>
+  <xs:simpleType name="expression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="reference">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="number">
+    <xs:union memberTypes="lzx:numberLiteral lzx:constraint xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="token">
+    <xs:union memberTypes="xs:token"/>
+  </xs:simpleType>
+  <xs:simpleType name="size">
+    <xs:union memberTypes="lzx:sizeLiteral lzx:constraint"/>
+  </xs:simpleType>
+  <xs:simpleType name="numberExpression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="sizeExpression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="css">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="opacity">
+    <xs:union memberTypes="lzx:constraint">
+      <xs:simpleType>
+        <xs:restriction base="xs:double">
+          <xs:minInclusive value="0.0"/>
+          <xs:maxInclusive value="1.0"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="percentage">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="(\d+(.\d?)|.\d+)%"/>
+    </xs:restriction>
+  </xs:simpleType>
+<xs:element name="passthrough" type="lzx:passthrough" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Provides a way to import SWF10 declarations. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="passthrough" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="when" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Provides a way to import SWF10 declarations. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="styledtext" type="lzx:styledtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A text subclass which allows use of text styles
+        @START_CODE
+            &lt;styledtext text="hello" style="mytextstyle" /&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="styledtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ should be an object of type "textstyle" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubutton" type="lzx:menubutton" >
+</xs:element>
+  <xs:complexType name="menubutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzeditcombobox" type="lzx:lzeditcombobox" >
+</xs:element>
+  <xs:complexType name="lzeditcombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:lzcombobox">
+      <xs:attribute name="y_offset" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="x_offset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="width_offset" type="xs:string" default="-9" >
+</xs:attribute>
+      <xs:attribute name="height_offset" type="xs:string" default="-3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderthumb" type="lzx:vsliderthumb" >
+</xs:element>
+  <xs:complexType name="vsliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="drag_min" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drag_max" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closebox" type="lzx:closebox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the closebox class has its own resource </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="closebox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myday" type="lzx:myday" >
+</xs:element>
+  <xs:complexType name="myday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerday">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radiogroup" type="lzx:radiogroup" >
+</xs:element>
+  <xs:complexType name="radiogroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="Test" type="lzx:Test" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  Test is the abstract interface class for all LZUnit tests.
+
+  It accumulates the results of the test and defines the various
+  assert methods that can be used to implement each test.
+
+  &lt;xref linkend="lz.TestCase"/&gt; and &lt;xref linkend="lz.TestResult"/&gt; extend this class to provide
+  functionality.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="Test" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:DebugObject">
+      <xs:attribute name="formatter" type="xs:string" default="new lz.text()" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseradiogroup" type="lzx:baseradiogroup" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class baseradiogroup: a class representing the selected radiobutton,
+          that can have many radiobuttons associated with it </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseradiogroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="event" type="lzx:event" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The sender in Laszlo's point-to-point event system.
+Events underly most of the functionality in OpenLaszlo applications. Unlike events in similar systems, OpenLaszlo's events are point-to-point, meaning that there is no general broadcast mechanism for events, and events do not trickle up or down the instance hierarchy. Instead, objects called &lt;handler&gt;s use LzDelegate.register() to register to receive events.
+
+An event is implicitly declared for every attribute of a class or instance and sent when that attribute is changed. So, for instance, if a class has an attribute foo, you can receive events when foo changes by registering for the onfoo event.
+
+Events are sent with a single argument, which usually conveys information about the property that changed. The default behavior of the LzEventable.setAttribute() method is to set the named property and send the event called "on" + property. This is general mechanism that updates constraints in a OpenLaszlo programs. For instance, when a view changes its x position, it sends the event onx with the new value for its x property.
+
+Example:
+&lt;handler name="onavalue" reference="eventSender" args="v"&gt;
+  this.setAttribute('x' , v);
+&lt;/handler&gt; 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="event" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the event </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="inittimer" type="lzx:inittimer" >
+</xs:element>
+  <xs:complexType name="inittimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabscontent" type="lzx:tabscontent" >
+</xs:element>
+  <xs:complexType name="tabscontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabscontent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseformitem" type="lzx:baseformitem" >
+</xs:element>
+  <xs:complexType name="baseformitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="submitname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name used when submitting the data of the form item.
+              If no submitname is given before oninit, the 'name' attribute is used.
+              Unlike the name attribute, submitname may be changed at runtime. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submit" type="lzx:boolean" default="${enabled}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If submit is true, then the value of this element will be submitted
+              with the form.  By default, submit is true when enabled.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rollbackvalue" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Rollback value for the baseformitem. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onvalue" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent whenever checkbox value changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onchanged" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when baseformitem is changed. Only sent once when true
+              or once when false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ignoreform" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the component will not inform its parent form
+             that it has changed. Useful in conjunction with submit=false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to determine whether the baseformitem was changed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="emailvalidator" type="lzx:emailvalidator" >
+</xs:element>
+  <xs:complexType name="emailvalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="toomanyatmarkErrorstring" type="xs:string" default="Too many @ characters in your email address." >
+</xs:attribute>
+      <xs:attribute name="missingperiodErrorstring" type="xs:string" default="The domain in your email address is missing a period." >
+</xs:attribute>
+      <xs:attribute name="missingatmarkErrorstring" type="xs:string" default="Missing the @ character in your email address." >
+</xs:attribute>
+      <xs:attribute name="incorrectlydomainErrorstring" type="xs:string" default="The domain in your email address is incorrectly formatted." >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datapoints" type="lzx:datapoints" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+          datapoints for the chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapoints" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valuepoints" type="lzx:valuepoints" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       Represents a value point in the chart
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuepoints" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the tooltip value will be display when the mouse over the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label will be display next to the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datay" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y point will be draw </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datax" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x point will be draw </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stylishbutton" type="lzx:stylishbutton" >
+</xs:element>
+  <xs:complexType name="stylishbutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="tint" type="lzx:color" default="0xD9DCF5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Control the look of the button. These attributes can and should
+              be controlled with css. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texty" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ y position of text, for fine tuning </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrightedge" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showrightborder" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether to show highlight on left side of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showleftedge" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showleftborder" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether to show shadow on right side of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightresource" type="xs:string" default="stylishbutton_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middleresource" type="xs:string" default="stylishbutton_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftresource" type="xs:string" default="stylishbutton_left_rsc" >
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ y position of icon, for fine tuning.
+            if not specified, center the icon vertically. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name prefix </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontcolor" type="lzx:color" default="0x373B56" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fisheye" type="lzx:fisheye" >
+</xs:element>
+  <xs:complexType name="fisheye" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="start_size" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="halo_size" type="xs:string" default="20" >
+</xs:attribute>
+      <xs:attribute name="expanded_size" type="xs:string" default="100" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_scrubstate" type="lzx:_scrubstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   enclosing view must have the following attributes:
+   stream  the stream to control, assume it is paused
+   min     min 'x' value
+   max     max 'x' value
+
+   @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_scrubstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="x" type="xs:string" default="this.__scrubstate_getnewpos(                 this.immediateparent.getMouse( 'x' ) + this.__scrubstate_xdoffset)" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="microphone" type="lzx:microphone" >
+</xs:element>
+  <xs:complexType name="microphone" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:mediadevice">
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Mediastream to associate with the microphone, for audio recording. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="silencetimeout" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Silence timeout in ms, the amount of silent time signifying that 
+              silence has actually begun.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="silencelevel" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Silence level, 0-100, the amount of sound required to activate 
+              the microphone.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rate" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Rate in khz the microphone is using to capture sound, either 5, 8, 11, 22, or 44.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="level" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Audio level, 0-100, the amount of sound detected by this microphone.
+              Reset to 0 when there is no audio (no activity or not allowed).
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gain" type="lzx:number" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount the microphone boosts the signal.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framesperpacket" type="lzx:number" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of Speex speech frames transmitted in a packet.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="encodequality" type="lzx:number" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The quality of encoded speech quality when using the Speex codec.
+              Possible values are from 0 to 10.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="echosuppression" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the microphone will attempt to use echo suppression.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="codec" type="xs:string" default="NellyMoser" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The codec to use, either 'NellyMoser' or 'Speex'.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="image" type="lzx:image" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image represents an image that can be loaded at runtime, either by specifying a URL directly or by binding to data</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="image" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="src" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The URL to load the image from.  May be set directly on this attribute or indirectly by specifying a datapath for this tag. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="prefix" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an optional prefix URL to load from. If specified, the url will be appended to this prefix.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onsrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastloaded" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The last URL loaded by this image tag.  Used to prevent the same URL from loading twice.  
+              @keywords readonly</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="forcereload" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the same URL will be reloaded.  If false, the same URL will not load multiple times.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tooltipManager" type="lzx:tooltipManager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Tooltip Manager
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tooltipManager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tooltip_obj" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMouseOverDelegateArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onMouseOutDelegateArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="messages" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Tooltip Manager
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="messageMap" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delay" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="component_identifier" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="databar" type="lzx:databar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    Render a bar or column of data in the chart</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="databar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totalsets" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Total number of bar sets. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, will display additional information about data
+            in a popup when the cursor is placed over a bar.
+            (Tooltip to be developed in a future version.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="siblingbars" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of sibling bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawaxis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The chart's direction.  (Set here as well for easier reference.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The image to be loaded over the bar, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value of bar. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barspace" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barset" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This bar's group's set number. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barnumber" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This bar's number in its series. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animationinit" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Animation style for when bars appear. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basevalidator" type="lzx:basevalidator" >
+</xs:element>
+  <xs:complexType name="basevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="trim" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="requiredErrorstring" type="xs:string" default="this field is required." >
+</xs:attribute>
+      <xs:attribute name="required" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isformvalidator" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="iserror" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="innercompornent" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="errorstring" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autocompletecombobox" type="lzx:autocompletecombobox" >
+</xs:element>
+  <xs:complexType name="autocompletecombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="defaulttext" type="xs:string" default="Type Here" >
+</xs:attribute>
+      <xs:attribute name="contentpath" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="actuallyTyped" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeledinputtext" type="lzx:labeledinputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        A horizontal container for a right-aligned label and text field.
+        usage:
+            @START_CODE
+                &lt;labeledinputtext label="Title" datapath="details/@title" fieldwidth="50"/&gt;
+            @END_CODE
+
+        datapath should be set to resolve to a text value
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="labeledinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textcolor" type="xs:string" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true for multiline </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum length for the editable text field. Default is null
+              (no limit) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelwidth" type="lzx:number" default="68" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ column for right-aligned label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelsize" type="xs:string" default="${detailslabel_style.fontsize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label font size </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelfont" type="xs:string" default="${detailslabel_style.font}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolor" type="lzx:number" default="${detailslabel_style.textcolor}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the right-aligned label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontname" type="xs:string" default="Verdana, Arial, sans" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ font face </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldwidth" type="lzx:number" default="128" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ width of editable text field </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldheight" type="lzx:number" default="18" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set this to larger if multiline is true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragstate" type="lzx:dragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this state provides standard 'drag' functionality to its immediateparent when applied </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="drag_min_y" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the minimum value for the y attribute. Default : null, no minimum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_min_x" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the minimum value for the x attribute. Default : null, no minimum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_max_y" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the maximum value for the y attribute. Default : null, no maximum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_max_x" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the maximum value for the x attribute. Default : null, no maximum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_axis" type="xs:string" default="both" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'x', 'y' or 'both' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetab" type="lzx:basetab" >
+</xs:element>
+  <xs:complexType name="basetab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="tabpane" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tabpane associated with this tab.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_internalinputtext" type="lzx:_internalinputtext" >
+</xs:element>
+  <xs:complexType name="_internalinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videolibraryicon" type="lzx:videolibraryicon" >
+</xs:element>
+  <xs:complexType name="videolibraryicon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxHeight" type="xs:string" default="48" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="video_no_icon_rsc" >
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TextTestCase" type="lzx:TextTestCase" >
+</xs:element>
+  <xs:complexType name="TextTestCase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:TestCase">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="regionstyle" type="lzx:regionstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for a region
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="regionstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="image" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image path </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gradient" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'none', 'linear', 'radial' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="0xFF0000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color on the axis line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="view" type="lzx:view" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;view&gt; is the most basic viewable element in an OpenLaszlo application. Anything that is displayed on the canvas is a view or extends the view class. A view is a rectangle, which can be visible or invisible, and which can contain other views or display "resources" such as images, .swf files, or other supported media. One view controls one displayable resource. The view system is strictly hierarchical; that is, each view has a single parent but can have multiple children.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="view" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="yscale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies this vertical scale for this and all child views. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="yoffset" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Specifies a translation point for drawing of this view. If the yoffset is set, then rotation and y position will be calculated by first adding the yoffset.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="y" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The vertical offset of this view's upper left corner from the upper left corner of its container  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xscale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies this horizontal scale for this and all child views. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xoffset" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies a translation point for drawing of this view. If the xoffset is set, then rotation and x position will be calculated by first adding the xoffset.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The horizontal offset of this view's upper left corner from the upper left corner of its container.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="with" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="width" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The width of the view. Can be set to either a number, or null, to indicate that the view should be sized to hold its content. If the view is set to stretch its resource, the resource will be resized to the new value. When read, reflects the actual size of the view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="visible" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of true means that this view is shown. A value of false means that this view is hidden. Note that an otherwise clickable view that is not visible will have no click region and will not be clickable.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="visibility" type="xs:string" default="collapse" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of "visible" means that this view is shown. A value of "hidden" means that this view is hidden. Setting this attribute to "collapse" means that the runtime will hide this view when: its opacity is zero, it has a datapath that does not match a node, or it is loading its media. In this case, the the value of the 'visible' attribute of the view will reflect the view's current visible state. 
+	One of: hidden|visible|collapse </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valign" type="xs:string" default="top" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the vertical alignment for the view to the given value. The alignment is based on the height of this view as compared to the height of the view's immediateparent. 
+	One of: 	"top" | "middle" | "bottom" | constraint </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="usegetbounds" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	True if this view requires a call to getBounds() for accurate width and height measurement. This may be necessary when an offset or rotation are applied.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="unstretchedwidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If stretches is not set to none, the width that this view would be if it weren't stretched. This attribute can be used to scale a view by a percentage of its original size, or to determine the aspect ratio for a view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="unstretchedheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If stretches is not set to none, the height that this view would be if it weren't stretched. This attribute can be used to scale a view by a percentage of its original size, or to determine the aspect ratio for a view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="totalframes" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The total number of frames for this view's resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tintcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the color offset, based on a hexadecimal color string, e.g. '#ff00ff'. See setColorTransform() for details. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subviews" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of the subviews that are children of this view. This is initialized to an empty array for views that have no subviews.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stretches" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting stretches causes a view to change its coordinate space so that everything it contains (resources and other views) fit exactly into the view's width and/or height. The default for this property is "none". This is used to resize a view's contents by setting its width and/or height. 
+	One of: 	"width" | "height" | "both" | "none" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="source" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The URL from which to load the resource for this view. If this attribute is set, the media for the view is loaded at runtime.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhandcursor" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Show or hide the hand cursor for this view, if clickable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowdistance" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The distance for the drop shadow, in pixels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The color for the drop shadow </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowblurradius" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The blur radius for the drop shadow, in pixels. A negative value will cause the shadow to be inset. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowangle" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The angle for the drop shadow, in degrees </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rotation" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The rotation value for the view (in degrees). Value may be less than zero or greater than 360.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourcewidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The width of the resource that this view attached </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourceheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The height of the resource that this view attached </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resource" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A resource that is presented in the background of this view. The value can be either the name of a resource defined with the resource tag, a URL, or a pathname. If the value is a URL, the resource is requested when the view is displayed. If it's a pathname, the file named by the pathname is compiled into the application, and attached to this view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratio" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This element is only available in the splash SWF specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyurl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The url of the proxy server, if the app is running in proxied mode. proxyurl can be null, a URL string, or a function.
+
+    If the value is a string, treat it as a URL to the proxy server.
+    If the value is a function, it should return the URL of the proxy server.
+
+The default proxy policy references the proxyurl of the canvas.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playing" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view is currently playing. Setting to true causes the view to play, false causes playback to stop. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pixellock" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The view system supports sub-pixel positioning to enable smooth animation. This may be turned off to make the view snap to a pixel boundary by setting pixellock to true.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="opacity" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The opacity of the view's contents. 1.0 is opaque; 0.0 is totally transparent (invisible).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ony" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's y property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onx" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's x property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onwidth" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's width property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onvisible" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the view changes visibility (true/false) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontouch" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ontouch event is sent when a touch device receives a multitouch event. The value sent with the event is an array of objects with with two properties: clientX and clientY. Currently supported only in iOS on DHTML. Note that Android Webkit doesn't send multitouch events - see http://www.quirksmode.org/mobile/tableTouch.html </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontimeout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the request to load media for the view times out </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view's resource that is capable of playing is stopped. This is only called if stop is called directly; when a resource hits its last frame, the lz.view event onlastframe is called. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowdistance" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowdistance changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowcolor changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowblurradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowblurradius changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowangle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowangle changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onremovesubview" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Event called when this view removes a subview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onplaying" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view begins playing its resource </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onplay" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view begins playing its resource </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopacity" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view changes its opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseupoutside" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseup event is sent when the pointing device button is released outside the element it went down on. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseup event is sent when the pointing device button is released over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse button is released over a view that is registered to an active track group. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse is over a view that is registered to an active track group. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse leaves the visible area of a view that previously sent an 'ontrackover' event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseover event is sent when the pointing device is moved onto an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseout event is sent when the pointing device is moved so that is is no longer over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedragout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedragout event is sent when the pointing device is moved off the element while the button is down. down. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedragin" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedragin event is sent when the pointing device button has moved off the element and back on again while the button is down. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedown event is sent when the pointing device button is pressed over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onloadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sends a percentage (0-1) reflecting the amount of a media file that's been downloaded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Send when the view finishes loading media. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onlastframe" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the view sets its frame (resource number) to the last frame. This can be used to find out when a streaming media clip is done playing. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onkeyup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onkeyup event is sent when this view has the focus and a key is released. This event is sent with the keycode for the key that went up. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onkeydown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onkeydown event is sent when this view has the focus and a key is pressed down. Multiple key down events are sent for a key that is held down. If you want the script executed only once, use onkeyup. This event is sent with the keycode for the key that is down.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onheight" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event for changes to view's height property</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ongesture" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ongesture event is sent when a touch device receives a gesture event. The value sent with the event is an object with two properties: scale and rotation. Currently supported only in iOS on DHTML. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onframesloadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sends a percentage (0-1) reflecting the number of frames downloaded.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onframe" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent onidle while view is playing its resource</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onfocus event is sent when an element receives focus either by the pointing device or by tabbing navigation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when there is an error loading the view's resource. The argument sent with the event is an error string.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondblclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The ondblclick event is sent when the pointing device button is double clicked over an element.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncornerradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when cornerradius changes</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncontext" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when the drawing context is ready to use, which can take some time in IE DHTML.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclip" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onclip event is sent when the clip attribute of a view is changed</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclickable" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event for changes to view's clickable property</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   The onclick event is sent when the pointing device button is clicked over an element.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onblur" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The onblur event is sent when an element loses focus either by the pointing device or by tabbing navigation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onbackgroundrepeat" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event for changes to view's backgroundrepeat property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onaddsubview" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Event called when this view adds a subview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mask" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to closest masked view in the hierarchy at or above this one  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	For views whose resource is loaded at runtime, ratio of the loaded bytes to the total bytes. This is a number between zero and 1.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="layout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A CSS declaration of property: value pairs of layout attributes, which are used to create a layout that is attached to this view. If there is a class property, it names the class of the layout to be created, otherwise &lt;simplelayout&gt; is used. To remove the previously set layout, use {'class': 'none'} Examples: layout="axis: x", layout="class: constantlayout", layout="axis: y", layout="axis: x; spacing: 5".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The height of the view. Can be set to either a number, or null, to indicate that the view should be sized to hold its content. If the view is set to stretch its resource, the resource will be resized to the new value. When read, reflects the actual size of the view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hassetwidth" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, then this view has an assigned or constrained width, and the view will not be sized to its contents.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hassetheight" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, then this view has an assigned or constrained height, and the view will not be sized to its contents.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasdirectionallayout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+If true, sprite will use TLF text framework class that supports bidirectional text layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framesloadratio" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	For views whose resource is loaded at runtime, the ratio of the loaded frames to the total frames. This is a number between zero and 1.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="frame" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If this view has a multi-frame resource, this allows setting which resource frame is displayed. Defaults to the first frame (1). See also the resource attribute. Setting this attribute will change the frame that is being displayed by the resource associated with this view. The first frame of the resource is frame 1. Setting a view's 'donttrackplay' option to true will allow the view's resource to play without updating the value of the view's frame property. This can save CPU usage in cases where the application doesn't need to know what frame the resource is showing while it is playing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontstyle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The style to use to render text fields that appear inside of this view. One of "plain", "bold" , "italic" or "bolditalic".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontsize" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Pixel size to use to render text which appears inside this view. The default is 8.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The font to use for any &lt;text&gt; or &lt;inputtext&gt; elements that appear inside this view. Like all the font properties (fontstyle and fontsize too) these properties cascade down the view hierarchy until a new value is specified.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focustrap" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view "traps" the focus, for example in a window or dialog. See focus manager (lz.Focus) for more details.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusable" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view will receive focus events. See focus manager (lz.Focus) for more details.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fgcolor" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The foreground color of any &lt;text&gt; or &lt;inputtext&gt; elements that appear inside this view. To apply a color transform, see tintcolor. May be set to any valid CSS color specification. When read, will be read as the equivalent numeric value. To retrieve a CSS color specification, use this.presentAttribute('fgcolor', 'color'). Default is 0 (black).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cursor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The cursor to display when the mouse is over this view. Any resource ID can be used as a cursor, or '' for the default cursor. This attribute can be set for any view with clickable=true.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cornerradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The corner radius for the background, e.g. '4' or a list of up to 8 numbers '4 0 0 4 / 2 0 0 2'. Per http://www.w3.org/TR/css3-background/#the-border-radius the 8 values for each radii are given in the order top-left, top-right, bottom-right, bottom-left. If you use the '/' notation, the values before the slash are the horizontal radii, and the values after the slash are the vertical radii.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contextmenu" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The context menu installed on this view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="context" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Contains a reference to the raw drawing context. The oncontext event is sent when the context is ready to use, which can take some time in IE DHTML.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colortransform" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	color transforms everything contained in the view (except the background) by the transformation dictionary given in o. The dictionary has the following possible keys: o.redMultiplier: multiplier for red component (0 to 1) defaults to 1 o.redOffset: offset for red component (-255 to 255) defaults to 0 o.greenMultiplier: multiplier for green component (0 to 1) defaults to 1 o.greenOffset: offset for green component (-255 to 255) defaults to 0 o.blueMultiplier: multiplier for blue component (0 to 1) defaults to 1 o.blueOffset: offset for blue component (-255 to 255) defaults to 0 o.alphaMultiplier: multiplier for alpha component (0 to 1) defaults to 1 o.alphaOffset: offset for alpha component (-255 to 255) defaults to 0  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Clip the view's contents to its size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clickregion" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting to a vector-based resource changes the clickable hotspot for the mouse. Check capabilities.clickregion before using to avoid debugger warnings.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clickable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view intercepts click events; otherwise they are passed to its container. This defaults to true if the view defines a mouse event handler or a cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="center" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This element is only available in the splash SWF specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capabilities" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An object containing properties corresponding to the current runtime's capabilities. For example, capabilities.rotation is true in swf and recent versions of Safari and Firefox.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cachebitmap" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of true means that this view's bitmap will be cached, if available. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor" type="lzx:color" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The background color of the view. Setting bgcolor to null will make the view transparent. May be set to any valid CSS color specification. When read, will be read as the equivalent numeric value. To retrieve a CSS color specification, use this.presentAttribute('bgcolor', 'color'). Default is null (transparent).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundrepeat" type="xs:string" default="norepeat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting backgroundrepeat causes a view to repeat its resource to fit the view's width and/or height. Can be 'repeat', 'repeat-x', 'repeat-y' or 'norepeat' per the CSS1 background-repeat style. 
+	One of: 	"repeat" | "repeat-x" | "repeat-y" | "norepeat" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sets the alignment for the view to the given value. The alignment is based on the size of this view as compared to the size of the view's immediate parent. 
+	One of: 	"left" | "center" | "right" | constraint </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aatabindex" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Set accessibility tab order </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aasilent" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Set accessibility silencing/unsilencing </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aaname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Set accessibility description </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aadescription" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="aaactive" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Activate/inactivate children for accessibility </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="soap" type="lzx:soap" >
+</xs:element>
+  <xs:complexType name="soap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="wsdl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Required attribute that specifies WSDL to read for the SOAP
+              object. The value for wsdl should be an href. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="service" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP service to fetch. If not specified, the first service
+              encountered in the WSDL is used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseheaders" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, the SOAP response header returned by the last
+              call. The value for this must be a dataset. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="requestheaders" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP header to pass with each request. This can be either a
+              string or a dataset. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proto" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The prototypes that can be used to create objects. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="port" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP port to use. If not specified, the first SOAP port
+              encountered in the WSDL is used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseform" type="lzx:baseform" >
+</xs:element>
+  <xs:complexType name="baseform" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onchanged" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when baseformitem is changed. Only sent once when true
+              or once when false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="formdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Holds a reference to each datacomponent contained within the
+              form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to determine whether the baseformitem was changed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rangeslider" type="lzx:rangeslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="rangeslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:custombaseslider">
+      <xs:attribute name="minx" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="xs:string" default="this.minlimit + this.leftknob.x * this.valueratio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="xs:string" default="${parent.rightknob.x}" >
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="xs:string" default="this.minlimit + this.rightknob.x * this.valueratio" >
+</xs:attribute>
+      <xs:attribute name="isMouseDown" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mediadevice" type="lzx:mediadevice" >
+</xs:element>
+  <xs:complexType name="mediadevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="devicename" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the device. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="deviceindex" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Zero-based index of the device, or null for user's default device. 
+              Default is null, which selects the default device. 
+              When the default device is initialized, deviceindex is updated to
+              its actual index. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true for verbose debugging messages </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capturing" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean flag that controls if the media device
+              is currently capturing input. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tracks whether the user has allowed device access. 
+              True after user has accepted security dialog,
+              false if the user denies access with security dialog.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Flag that tracks if there's device activity (audio sound, video motion). 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legenditem" type="lzx:legenditem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legenditem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textsize" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The font size of the label text for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the label text for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linevisible" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="itemvalue" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemlabel" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text label for this item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="identifier" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconshape" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shape of the icon drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color for the icon. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The highlight color to be used when this item has been
+            moused over. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="face" type="lzx:face" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Defines a font face or style within the font family that the outer element defines.
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="face" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="style" type="xs:string" default="bold|italic|bold italic|italic bold|plain" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Corresponds to the fontstyle attribute of a view.
+    One of: 	bold | italic | bold italic | italic bold | plain  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="vslidertrack" type="lzx:vslidertrack" >
+</xs:element>
+  <xs:complexType name="vslidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplelayout" type="lzx:simplelayout" >
+</xs:element>
+  <xs:complexType name="simplelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the first view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newvscrollbar" type="lzx:newvscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical scrollbar manipulates the y position of a target view that is
+      clipped by its parent, creating a scrolling effect when the user
+      clicks up/down arrows, clicks on the scroll track or drags the thumb. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newvscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="silverstyle" type="lzx:silverstyle" >
+</xs:element>
+  <xs:complexType name="silverstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewspool" type="lzx:viewspool" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+     Represents a pool of view </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewspool" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="viewclass" type="xs:string" default="$once{null}" >
+</xs:attribute>
+      <xs:attribute name="used" type="xs:string" default="$once{[]}" >
+</xs:attribute>
+      <xs:attribute name="unused" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+     Represents a pool of view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parentview" type="xs:string" default="$once{null}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="param" type="lzx:param" >
+</xs:element>
+  <xs:complexType name="param" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Value to use for parameter. A &lt;code&gt;getValue()&lt;/code&gt; method can be declared
+              inside param to use its return as the parameter value. If both
+              &lt;code&gt;value&lt;/code&gt; attribute and &lt;code&gt;getValue()&lt;/code&gt; method are declared, param will use
+              &lt;code&gt;getValue()&lt;/code&gt;. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerday" type="lzx:datepickerday" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the implementation of the datepickerday for 
+          the datepicker </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerday">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="columnchartplotarea" type="lzx:columnchartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of column chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="columnchartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiplefileupload" type="lzx:multiplefileupload" >
+</xs:element>
+  <xs:complexType name="multiplefileupload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="numfields" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ numbers of fileuploadlist   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="erroroccured" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error occured</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newhscrollbar" type="lzx:newhscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A scrollbar manipulates the x or y position of a target view that is
+      clipped by its parent, creating a scrolling effect when the user clicks
+      up/down arrows, clicks on the scroll track or drags the thumb. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newhscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="numbervalidator" type="lzx:numbervalidator" >
+</xs:element>
+  <xs:complexType name="numbervalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="toosmallErrorstring" type="xs:string" default="This number is too small." >
+</xs:attribute>
+      <xs:attribute name="toobigErrorstring" type="xs:string" default="This number is too large." >
+</xs:attribute>
+      <xs:attribute name="notnumberErrorstring" type="xs:string" default="This field contains invalid characters." >
+</xs:attribute>
+      <xs:attribute name="notintErrorstring" type="xs:string" default="Enter integer value." >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="real" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabelement" type="lzx:basetabelement" >
+</xs:element>
+  <xs:complexType name="basetabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="onopenstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the end of the open animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopenstart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the start of the open animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclosestop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the end of the close animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclosestart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the start of the close animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height the tab will close to. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When creating tabelements via additem, this is the class that gets
+              created. The default value is the class of the first tabelement or
+              its descendant. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hideonclose" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Content is automatically hidden when tabelement is closed. To
+              override, set this attribute to false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="headerheight" type="lzx:number" default="$once{minheight}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the header. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentvisible" type="xs:string" default="$once{! hideonclose}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is set to true when a basetabelement begins to open and is
+              set to false when it finishes its close. Default is the inverse of
+              hideonclose. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetree" type="lzx:basetree" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract base class to build tree controls. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="yindent" type="lzx:number" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing to indent trees on the y-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xindent" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing to indent trees on the x-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="toggleselected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Flag to toggle selected nodes.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showroot" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root tree. If false, the root item is invisible
+              and its children are displayed.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Check to see if this tree is selected. Default is false, except
+              for the root of a tree, which its selected attribute is set to
+              true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="recurse" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only with data replication. If true, it will
+              recursively follow the datapath's children.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="open" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Check to see if this tree is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is selected. The
+              value of the selection (true or false) is sent with this
+              event.
+              Note the args of this has changed from the previous release. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is selected. This
+              tree is sent with the event. The tree root also receives this
+              event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopen" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is open. The open
+              value of this tree is also sent. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocused" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is focused. The value
+              of the focus (true or false) is sent with this event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Whether to multiselect items.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isleaf" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this basetree is a leaf node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Flag to select a tree on focus.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusoverlay" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. If focusselect is false and focusoverlay
+              is true, then focus has a visual bracket overlay over the focused
+              tree. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focused" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this tree is focused.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closesiblings" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Flag to close other siblings when this tree is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closechildren" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Close all immediate children when this tree is closed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Auto scroll if tree is clipped. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debug" type="lzx:debug" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     @lzxname debug
+     @keywords private_constructor
+     @access public
+     @topic LZX
+     @subtopic Debugging
+     @devnote NOTE [2008-11-25 ptw] Dummy class to hold documentation for debug tag
+     @devnote TODO [2008-11-26 ptw] Make this the real class!
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debug" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datacolumn" type="lzx:datacolumn" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ datacolumn contain a list of values of a series. List of values typically are data for x series,
+        y series, tooltip series and datalabel series.
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datacolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="values" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ array of data representing the series values </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeldatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name of the label in the datapath for the series </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatype" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ type of data: string or number </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datadone" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true when data had been loaded at least once </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columndatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name of the column in the datapath for the series </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hsplitpane" type="lzx:hsplitpane" >
+</xs:element>
+  <xs:complexType name="hsplitpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sizer_width" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="rhs_placed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lhs_width_start" type="xs:string" default="180" >
+</xs:attribute>
+      <xs:attribute name="lhs_placed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lhs_min_width" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="lhs_max_width" type="xs:string" default="${this.width-20}" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mediastream" type="lzx:mediastream" >
+</xs:element>
+  <xs:complexType name="mediastream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The url of the mediastream, maybe be relative URL, 
+          for example: http://localhost/myvideo.flv, or simply myvideo.flv
+          when type="rtmp" the url is always relative to the rtmpconnection.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Protocol "rtmp" or "http".
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="totaltime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Total length (in seconds) of mediastream currently playing.
+          @type Number
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Current time of mediastream currently playing or recording (in seconds)
+          @type Number
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="streamname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rtmp streamname (without .flv suffix).
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rtmp" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rtmp connection to use (defaults to the first one created).
+          @type lz.rtmpconnection
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="recording" type="xs:string" default="${this.mode == 'recording'}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if recording right now.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Progress of mediastream currently downloading.
+          (from 0 for none to 1 for all).
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playing" type="xs:string" default="${(this.mode == 'playing') &amp;&amp; (!this.paused)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if playing right now.
+          @type Boolean   
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paused" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True to pause playback. Named this way to pun with paused for animators.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when playing or recording stops.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when playing or recording starts.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmetadata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when metadata is received, whose parameter is a 
+    dictionary of metadata.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oninsufficientbandwidth" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when insufficient bandwidth.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncuepoint" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when a cue point occurs,
+          whose parameter is a dictionary of metadata.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mutevideo" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True iff video is muted.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="muteaudio" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True iff audio is muted.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mode" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Mode: "" if doing nothing, "playing" if playing,
+          "broadcasting" if can be received, "recording" if recording.
+          Recording also implies can be received, i.e., broadcasting. 
+          Pausing does not affect the mode, unlike stopping.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mic" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A reference to the microphone. This must be set if broadcasting.
+          This is set automatically if the stream is a child of a videoview.
+          @type lz.microphone
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fps" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The current frames per second for playing video.
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, print extra info to the debugger.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cam" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A reference to the camera. This must be set if broadcasting.
+          This is set automatically if the stream is a child of a videoview.
+          @type lz.camera
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="buffertime" type="lzx:number" default="0.1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Amount of time (in seconds) to buffer before starting to display the 
+          stream.  For a publishing stream, bufferTime specifies how long the 
+          outgoing buffer can grow before the application starts dropping 
+          frames.
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadcasting" type="xs:string" default="${(this.mode == 'broadcasting') || (this.mode == 'recording')}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if broadcasting right now.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autorewind" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will automatically rewind to the beginning
+          (and remain in a paused state) when playback ends.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayStart" type="xs:string" default="'either'" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay start argument passed to mediastream.play().
+          See the mediastream.play documentation for its values. 
+          @type String
+          @accesss public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayReset" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay reset argument passed to mediastream.play(). 
+          See the mediastream.play documentation for its values. 
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayPause" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay pause argument passed to mediastream.play().
+          See the mediastream.play documentation for its values. 
+          @type Boolean
+          @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayLength" type="xs:string" default="'end'" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay length argument passed to mediastream.play(). 
+          See the mediastream.play documentation for its values. 
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_plainfloatshadow" type="lzx:_plainfloatshadow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shadows width and height are set to the width and height of the view
+          it is trying to apply a shadow to.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_plainfloatshadow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowsize" type="xs:string" default="1.5" >
+</xs:attribute>
+      <xs:attribute name="offsety" type="xs:string" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="scrollbar" type="lzx:scrollbar" >
+</xs:element>
+  <xs:complexType name="scrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="setter" type="lzx:setter" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tag to declare or override attribute setter methods. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="setter" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tag to declare or override attribute setter methods. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" >
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basedatepicker" type="lzx:basedatepicker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Abstract class for the datepicker.  The basedatepicker class
+          shows the days of the week in a typical month based layout.  Extend
+          this class to create a full featured UI of a datepicker, or just use
+          the datepicker component.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedatepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="yinset" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number if pixels from this.y to show the datepicker days 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xinset" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number if pixels from this.x to show the datepicker days 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="weekclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The weekclass to use for this basedatepicker 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingyear" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The year that is currently showing in the datepicker.
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingmonth" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The month that is currently showing in the datepicker.
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A Date object which represents the month to be shown. 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecteddatepickerday" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The datepickerday which has been selected. 
+              @keywords public  
+           </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Date that is currently selected.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="latestdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The latest date that is selectable. 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasfocus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="earliestdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The earliest date that is selectable. 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dayclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dayclass to use for this basedatepicker 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorbox" type="lzx:colorbox" >
+</xs:element>
+  <xs:complexType name="colorbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartbgstyle" type="lzx:chartbgstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for chart background
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartbgstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myslider" type="lzx:myslider" >
+</xs:element>
+  <xs:complexType name="myslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:slider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartlegend" type="lzx:chartlegend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A legend for charts and graphs. It is imperative
+        that this is declared at the very end of a chart.
+        (Of beta quality.) Due to a couple bugs in drawview,
+        performance is spotty in DHTML. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartlegend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="titletextsize" type="lzx:number" default="12" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the legend title's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titlecolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the legend title's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the text in legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the text in legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizetodata" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to resize the legend to the data.  If not, this will
+            use the specified width and height for the legend, and fit
+            legend items into this size to the best of its ability.  If so,
+            this will use a rough guess at legend item dimensions, and
+            resize the legend.  Accepted values: "tall", "wide", "$once{null}".
+            "tall" will make a taller legend, "wide" will make a wider legend,
+            "$once{null}" will not resize. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="posit" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the legend: left, right, top, bottom, manualleft,
+            manualright, manualtop, manualbottom.
+            If left or right, the legend will behave as though
+            resizetodata="tall" is in effect.  If top or bottom,
+            the legend will behave as though resizetodata="wide" is
+            in effect.  If manual, additional values must be set to
+            place and size legend, and the legend will fit the
+            legenditems within the legend to the best of its ability. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Radius of the pie.  This helps determine placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piepieces" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Pie pieces associated with this legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piececolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Respective piece colors. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The legend title, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The values to use in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemnums" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of items in the legend. (a.k.a. Number of pie pieces.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The highlight color of individual legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="charttype" type="xs:string" default="$once{typeof linechart != 'undefined' ?                 (parent instanceof lz.linechart ? 'line' : null) : null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The type of chart associated with this legend.
+            Currently, only needs to be specified if this
+            is used on a piechart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centery" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Center x coordinate of the pie.  This helps determine
+            placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centerx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Center x coordinate of the pie.  This helps determine
+            placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border around the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border around the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background color of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabpane" type="lzx:basetabpane" >
+</xs:element>
+  <xs:complexType name="basetabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="tabclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tabclass to use to instantiate its associated tab. This
+              overrides the basetabs tabclass. Leave undefined here so that
+              basetabs can have it.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tab" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tab associated with this basetabpane.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If a basetabpane is selected, then it will be shown.
+              Its associated tab will be also be selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="lzx:number" default="${parent.inset_top}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Top inset for basetabpane in tabs content. Default is basetabs's
+              inset_top. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="lzx:number" default="${parent.inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Right inset for basetabpane in tabs content. Default is basetabs's
+              inset_right. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="lzx:number" default="${parent.inset_left}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Left inset for basetabpane in tabs content. Default is basetabs's
+              inset_left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="lzx:number" default="${parent.inset_bottom}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Bottom inset for basetabpane in tabs content. Default is basetabs's
+              inset_bottom. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lzvdrag" type="lzx:_dbg_lzvdrag" >
+</xs:element>
+  <xs:complexType name="_dbg_lzvdrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="ydoffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+      <xs:attribute name="y" type="xs:string" default="${this.immediateparent.getMouse( 'y' ) - this.ydoffset}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="b" type="lzx:b" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="b" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="scrolledittext" type="lzx:scrolledittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements visual baseedittext with scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="scrolledittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseedittext">
+      <xs:attribute name="vscrollbarclassname" type="xs:string" default="vscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of class to instantiate for vertical scroll bar.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pos" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxtextheight" type="xs:string" default="${this.lineheight * this.maxscroll}" >
+</xs:attribute>
+      <xs:attribute name="maxheight" type="xs:string" default="${this.height + this.maxtextheight}" >
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements visual baseedittext with scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="a" type="lzx:a" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="a" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="target" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The value of this attribute determines where the link target will be displayed. The interpretation is the same as in HTML, where the "current frame" is the frame containing the LZX application. The value must be a name beginning with an alphabetic character, or one of the following:
+
+_blank
+    The user agent should load the designated document in a new, unnamed window. 
+_parent
+    The user agent should load the document into the full, original window (thus canceling all other frames). This value is equivalent to _self if the current frame has no parent. 
+_self
+    The user agent should load the document in the same frame as the element that refers to this target. 
+_top
+    The user agent should load the document into the immediate FRAMESET parent of the current frame. This value is equivalent to _self if the current frame has no parent. 
+
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The link target </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="linechart" type="lzx:linechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A chart class that renders as lines.
+      Inherits from the chart class.
+      (Warning: Of beta quality.)
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechart">
+      <xs:attribute name="onminimum" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whenever minimum, maximum, altminimum and altmaximum are changed, the
+            chart needs to be redrawn entirely.  (Normally, tick and data labels aren't
+            redrawn, because it would be far too huge a resource drag to continually
+            break down and rebuild them whenever a person zoomed in.  Instead, they're
+            constrained to scale to the appropriate distances from each other.)  When
+            the mins and maxes are changed, however, the scaling gets thrown off for
+            existing objects.  These handlers ensures that when these values are changed,
+            the labels are broken down and redrawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmaximum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onaltminimum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onaltmaximum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="drawready" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Line drawview.  This draws all the lines of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sessionrpc" type="lzx:sessionrpc" >
+</xs:element>
+  <xs:complexType name="sessionrpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="styleparser" type="lzx:styleparser" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+This class complete the chart style class in case the developer has not defined the chart styles </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="styleparser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="style" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The user's defined style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isleaf" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Test if the current style's node has no more children </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haschildren" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Test if the current style's node has children </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultstyle" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dafault defined style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tickstyle" type="lzx:tickstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ tickstyle is used by the axis style to render major and minor ticks on a chart.
+     NOTE: tickstyle extends linestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tickstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:linestyle">
+      <xs:attribute name="position" type="xs:string" default="inside" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ inside | outside | centered | none  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="length" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ length of tick in pixels perpendicualr to the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="constantboundslayout" type="lzx:constantboundslayout" >
+</xs:element>
+  <xs:complexType name="constantboundslayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="value" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The constant value that is applied to the attribute
+              ( defined in 'axis' as 'x' or 'y' ) of each subview in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="printer" type="lzx:printer" >
+</xs:element>
+  <xs:complexType name="printer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="i" type="lzx:i" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="i" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="valuepointstyle" type="lzx:valuepointstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valuepointstyle is used to set style to the 
+     NOTE: valuelinestyle extends basestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuepointstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="u" type="lzx:u" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="u" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="hscrollbar" type="lzx:hscrollbar" >
+</xs:element>
+  <xs:complexType name="hscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legend" type="lzx:legend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     simple legend class
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="verticalgap" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleBorder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the style will be applied tho the border legend box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="position" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates where the legend box will be positioned, default: right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if legend box will have a border, default: true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontsize" type="lzx:size" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font size wiil be used in the legend item text, default: 10px </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font color wiil be used in the legend item text, default: black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFont" type="xs:string" default="serif" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font will be used in the legend item text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the fill color from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates how the legend items will be displayed, default: vertical </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chartClassName" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Takes the relationship with the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottommargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the line width from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the color line from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="p" type="lzx:p" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="p" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="library" type="lzx:library" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;library&gt; tag defines the root element of a library file. An application can use the &lt;include&gt; tag to include the code in a library file.
+
+See the Guide for a complete discussion. Also see the &lt;include&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="library" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="validate" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, disables validation against the schema during compilation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;library&gt; tag defines the root element of a library file. An application can use the &lt;include&gt; tag to include the code in a library file.
+
+See the Guide for a complete discussion. Also see the &lt;include&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="javarpc" type="lzx:javarpc" >
+</xs:element>
+  <xs:complexType name="javarpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="scope" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of 'session', 'webapp', or 'none' to set the scope of the
+              remote object. This attribute must be set before creating or
+              loading the object. If scope is 'session' or 'webapp', name or
+              attributename must be set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="remoteclassname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The remote class name associated with the remote object. This must
+              be set if creating the remote object. If loading the object, the
+              classname will be set during onload. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="objectreturntype" type="xs:string" default="pojo" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Used to determine what server-side object member values are
+              returned to the client. One of 'pojo' (returns public member
+              values) or 'javabean' (returns members that have associated
+              getters). Default is 'pojo' (plain old java object). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loadoption" type="xs:string" default="loadcreate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of 'loadcreate', 'loadonly', or 'create'. 'Loadcreate' tries
+              to load javarpc object if it exists in the server, else it creates
+              it before loading. 'Loadonly' will only load object if it exists,
+              else an error is returned. 'Create' will always create the object
+              in the server. Default is 'loadcreate'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="createargs" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Used if loadoption='loadcreate' or loadoption='create'. Arguments
+              to construct remote object with. The value passed in must be an
+              array, e.g., [1, 'mystring', 1.45]. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attributename" type="xs:string" default="$once{this.name}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute name of server remote object. Name or attributename must
+              be set when scope is 'session' and 'webapp'. Default is the name
+              of this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chart" type="lzx:chart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        chart is the base class representing a chart. In general,
+        this class is not instantiated directly. A chart contains 
+            at least one dataseries element 
+            at least one axis element 
+        The chart needs to look at its dataseries children and pass 
+        the relevant dataseries to each axis. Relevent dataseries 
+        for the chart must have columns for each of the axes 
+        that the chart cares about.  
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="zoomEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable zoom</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="verticalGap" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical blank space between components. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valueregionsenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value region </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valuepointsenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value points </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valuelinesenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value lines </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the top of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the right side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotarea" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the left side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initdone" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ subview have  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="horizontalGap" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The horizontal blank space between components. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultstyle" type="xs:string" default="${defaultchartstyle}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default style to be applied to the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultRightMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default blank space bordering the right side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatipEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable tooltip for data </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatipColumn" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ data column name of the tooltip </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datalabelEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable data label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datalabelColumn" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ data column name of the data label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="databorderEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="dataPointsEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable data point(data marker) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottomMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the bottom of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizestate" type="lzx:resizestate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ resizes its immediateparent in response to mouse events, when applied </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resizestate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="width" type="xs:string" default="${this.immediateparent.getMouse( 'x' )- this.__resize_xroffset}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" default="${this.immediateparent.getMouse( 'y' )- this.__resize_yroffset}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzcombobox" type="lzx:lzcombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Subclass of basedatacombobox with laszlo mail look. See basedatacombobox for
+          details. Usage:
+          &lt;code&gt;
+          &lt;dataset name="dsHours"&gt;
+              &lt;item value="1"&gt;1&lt;/item&gt;
+              &lt;item value="2"&gt;2&lt;/item&gt;
+              &lt;item value="3"&gt;3&lt;/item&gt;
+              &lt;item value="4"&gt;4&lt;/item&gt;
+              &lt;item value="5"&gt;5&lt;/item&gt;
+              &lt;item value="6"&gt;6&lt;/item&gt;
+              &lt;item value="7"&gt;7&lt;/item&gt;
+              &lt;item value="8"&gt;8&lt;/item&gt;
+              &lt;item value="9"&gt;9&lt;/item&gt;
+              &lt;item value="10"&gt;10&lt;/item&gt;
+              &lt;item value="11"&gt;11&lt;/item&gt;
+              &lt;item value="12"&gt;12&lt;/item&gt;
+          &lt;/dataset&gt;
+
+          &lt;lzcombobox width="50" shownitems="3" itemdatapath="dsHours:/item"&gt;
+              &lt;handler name="onselect" args="dptr"&gt;
+                  Debug.write('value:', this.value);
+                  Debug.write('datapointer:', dptr);
+              &lt;/handler&gt;
+          &lt;/lzcombobox&gt;
+          &lt;/code&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzcombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox">
+      <xs:attribute name="tooltip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ tooltip text, if any </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texty" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="textx" type="xs:string" default="8" >
+</xs:attribute>
+      <xs:attribute name="frnum" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="splash" type="lzx:splash" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Controls the presentation while the application is loading.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="splash" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="y" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="resource" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ratio" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="persistent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Controls the presentation while the application is loading.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="center" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ticks" type="lzx:ticks" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ticks" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="numticks" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="opttree" type="lzx:opttree" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A keyboard navigable (with arrow keys) tree control that supports 
+         selection and dynamic data loading. This tree must be backed by an
+         XML DOM datastructure and presented within a clipping region. 
+         
+         The datapath for an opttree must resolve to a single LzDataElement
+         which is the undisplayed root of the tree. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="opttree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="openattrpath" type="xs:string" default="@__OPTTREE_META_open" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) An xpath that selects the openattr attribute from
+              a node. This should match openattr but prepend the '@' symbol.
+              This cannot be when=always or when=once because it is used as
+              a reference in a $path expression in baseopttreenode </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="openattr" type="xs:string" default="__OPTTREE_META_open" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) The attribute name to use in the data to mark a
+              a node as open.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodepath" type="xs:string" default="*" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The xpath expression to use to retrieve nodes out of the 
+              datapath. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodelist" type="xs:string" default="nodecollection" >
+</xs:attribute>
+      <xs:attribute name="nodecollection" type="xs:string" default="${ opttreecontroller.nodelist }" >
+</xs:attribute>
+      <xs:attribute name="nodeclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class to use to represent nodes in the tree.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="movedel" type="xs:string" default="$once{ new lz.Delegate( this, '_updatePos' ) }" >
+</xs:attribute>
+      <xs:attribute name="highlighted" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The keyboard nav highlighted baseopttreenode or null. This
+              attribute is read-only. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dragged" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dragee" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="depthattrpath" type="xs:string" default="@__OPTTREE_META_depth" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) An xpath that selects the depthattr attribute from
+              a node. This should match depthattr but prepend the '@' symbol.
+              This cannot be when=always or when=once because it is used as
+              a reference in a $path expression n baseopttreenode </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="depthattr" type="xs:string" default="__OPTTREE_META_depth" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) The attribute name to use in the data to mark a
+              a node's depth in the tree hierarchy </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzedittext" type="lzx:lzedittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements the laszlo look of baseedittext. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzedittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseedittext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piepiece" type="lzx:piepiece" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+   Represents a single pie slice in the chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piepiece" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="yRadius" type="lzx:number" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y radius of the slice. default = null </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+   Represents a single pie slice in the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radius" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The length of the radius in pixels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piecevalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The numeric value of the piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieceradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the whole pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieceopacity" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the piece.  Determined by attributes on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piececolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the piece.  Determined by attributes on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onexploded" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The events that handle explosion of pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data label of this pie slice </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="exploded" type="lzx:boolean" default="${parent.wedgeover == this}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether this piece is moused over or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to actually move the piece outward when the mouse is over it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centery" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y coordinate of the center of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centerx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x coordinate of the center of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border of the piece.  Determined by attributes
+            on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border of the piece.  Determined by attributes
+            on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="arcvalue" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The segment of the circle that defines the current pie slice </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="angle" type="lzx:number" default="25" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datevalidator" type="lzx:datevalidator" >
+</xs:element>
+  <xs:complexType name="datevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="invalidyearErrorstring" type="xs:string" default="Please enter a year between 0 and 9999." >
+</xs:attribute>
+      <xs:attribute name="invalidmonthErrorstring" type="xs:string" default="Please enter a month between 1 and 12." >
+</xs:attribute>
+      <xs:attribute name="invalidformatErrorstring" type="xs:string" default="Please input the date in a valid format." >
+</xs:attribute>
+      <xs:attribute name="invaliddateErrorstring" type="xs:string" default="Please enter a valid date." >
+</xs:attribute>
+      <xs:attribute name="format" type="xs:string" default="mm/dd/yyyy" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="br" type="lzx:br" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="br" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="basescrolltrack" type="lzx:basescrolltrack" >
+</xs:element>
+  <xs:complexType name="basescrolltrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebuttonrepeater">
+      <xs:attribute name="direction" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the scroll should move. Set to -1 for back,
+             1 for forward. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vbox" type="lzx:vbox" >
+</xs:element>
+  <xs:complexType name="vbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remotecall" type="lzx:remotecall" >
+</xs:element>
+  <xs:complexType name="remotecall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="remotecontext" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, this is the remote object context in which funcname is run
+              from. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when an error occurs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inforeturnvalue" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a remote response returns an object. The object of a
+             successful response will contain the return value (data), an object
+             containing specific information about the request (info), and the
+             associated unique sequence request number (seqnum), e.g., { data:
+             ..., info: ..., seqnu: ...}. A failure response returns an object
+             that contains the error message (message), the error type (error),
+             an object containing specific information about the request (info),
+             and the associated unique sequence request number (seqnum), e.g., {
+             message: ..., error: ..., info: ..., seqnum: ...}. If false, an
+             error just returns the error message and a successful response
+             returns a value. Default is false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="funcname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of remote function this remotecall refers. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataobject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If an LzDataset or an LzDataElement is set, return values will
+              be mapped into the dataobject. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollarrow" type="lzx:basescrollarrow" >
+</xs:element>
+  <xs:complexType name="basescrollarrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebuttonrepeater">
+      <xs:attribute name="direction" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the scroll should move. Use -1 to go
+                  back. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="zoomarea" type="lzx:zoomarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chart zoom area </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="zoomarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basezoomarea">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleslider" type="lzx:simpleslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:custombaseslider">
+      <xs:attribute name="value" type="xs:string" default="this.minlimit + this.knob.x * this.valueratio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxx" type="xs:string" default="$once{parent.width}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hbox" type="lzx:hbox" >
+</xs:element>
+  <xs:complexType name="hbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="timetext" type="lzx:timetext" >
+</xs:element>
+  <xs:complexType name="timetext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="plotstyle" type="lzx:plotstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for plot area
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="plotstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="linesize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ size of border of the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linecolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the border for the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillcolor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor for the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="wholepie" type="lzx:wholepie" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the class that assembles and contains all the elements
+        of an individual pie.  Nearly all of the attributes are set when the
+        object is instantiated by piechart.  There should be one of these
+        for each dataseries.  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="wholepie" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="wedgeover" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Wedge the mouse is currently over </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showlegendminimized" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to show the legend when the chart is minimized, when
+            there are multiple charts. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radiusvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the radius alterations for pie
+            pieces, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piecevalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the values of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="opacvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of piece opacity values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of the legend, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lhlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Highlight color of an individual legend element, when
+            moused over. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the values to use in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legend" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to include a legend, and if so, where to place it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border color for the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lbgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the label values for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltsize" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label text sizes for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltcolor" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label text colors for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label colors for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelbwidth" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label border widths for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborders" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label borders for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether or not to explode the pie pieces onmouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expanded" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If there are multiple charts, this indicates whether this chart
+            is currently expanded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background border around the circle
+            behind the pie pieces, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background circle behind the pie pieces,
+            and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colorvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the colors of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidths" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of border widths of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of border colors of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the background border around the circle
+            behind the pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="statictext" type="lzx:statictext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A simple text class that provide default font attributes for
+          Laszlo components. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="statictext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="purplestyle" type="lzx:purplestyle" >
+</xs:element>
+  <xs:complexType name="purplestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="custombaseslider" type="lzx:custombaseslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="custombaseslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="valueratio" type="xs:string" default="(this.maxlimit  - this.minlimit) / this.width" >
+</xs:attribute>
+      <xs:attribute name="startlabel" type="xs:string" default="this.minlimit" >
+</xs:attribute>
+      <xs:attribute name="minordivision" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="minlimit" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxlimit" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="majordivision" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="endlabel" type="xs:string" default="this.maxlimit" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basebutton" type="lzx:basebutton" >
+</xs:element>
+  <xs:complexType name="basebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="respondtomouseout" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this button does not respond to onmouseout or onmousedragout
+              events, set this flag to false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourceviewcount" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The first 'n' subviews that will respond to mouseevents by
+              changing the frame number of their resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="reference" type="xs:string" default="this" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where to send mouse events (the view that will be "clickable").
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="overResourceNumber" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse over state. 
+              Use 0 if the resource has at least 2 frames, but there is no over
+              state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresourceviewcount" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when the resourceviewcount changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="normalResourceNumber" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse up state, and initial state of the
+              button.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxframes" type="lzx:number" default="$once{this.totalframes}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of frames to use, defaults to the number of
+              frames for the resource associated with this view. This is useful
+              for a subclass that has no resource for this view.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="downResourceNumber" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse down state.
+              Use 0 if the resources has at least 3 frames, but there is no down
+              state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabledResourceNumber" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the disabled state.
+              Use 0 if the resource has at least 4 frames, but there
+              is no disabled state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="PopupPolygon" type="lzx:PopupPolygon" >
+</xs:element>
+  <xs:complexType name="PopupPolygon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:polygonhotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="text" type="lzx:text" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The basic text display element. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="text" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The y scroll offset of the content in pixels (a negative number specifying how many pixels the content should be scrolled vertically). Default 0. NOTE: A constraint or handler on onyscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The x scroll offset of the content in pixels (a negative number specifying how many pixels the content should be scrolled horizontally). Default 0. NOTE: A constraint or handler on onxscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thickness" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The thickness for this text, between -200 and 200, Flash only</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textindent" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  textindent accepts any number which is interpreted as a px value</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdecoration" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  text-decoration for this text, either 'none' or 'underline'.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textalign" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  textalign accepts one of [left, right, center, justify]</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The text to display in this text field. If set to a value that is not a string, the value will first be converted to a string as if by String(value). To display nothing, set the value to the empty string "". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sharpness" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The sharpness for this text, between -400 and 400, Flash only</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the text is selectable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollwidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The total width of the content in pixels. this.setAttribute('width', this.scrollwidth) is equivalent to this.setAttribute('width', null) (for the current content: the former will not follow content changes as the latter does). If this.scrollwidth &gt; this.width, this.setAttribute('yscroll', this.width - this.scrollwidth) will cause the end of content to be visible at the edge of the view. (The rightmost content will appear at the right edge of the view for left-to-right scripts.) NOTE: A constraint or handler on onscrollwidth will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The total height of the content in pixels. this.setAttribute('height', this.scrollheight) is equivalent to this.setAttribute('height', null) (for the current content: the former will not follow content changes as the latter does). If this.scrollheight &gt; this.height, this.setAttribute('yscroll', this.height - this.scrollheight) will scroll the content so that the bottom of the content appears in the bottom of the view. NOTE: A constraint or handler on onscrollheight will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollevents" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Use setAttribute('scrollevents', true) to cause scroll events to be sent. NOTE: A constraint or handler on onyscroll, onscroll, onxscroll, onhscroll, onscrollheight, onmaxscroll, onscrollwidth or onmaxhscroll will automatically enable scrollevents. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The vertical scroll position (in lines, 1-based). Default 1.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resize" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the width of the text field will be recomputed each time text is changed, so that the text view is exactly as wide as the width of the widest line. Defaults to true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pattern" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  regexp describing set of characters allowed in this field Restrict the characters that can be entered to a pattern specified by a regular expression. Currently only the expression [ ]* enclosing a set of characters or character ranges, preceded by an optional "^", is supported. examples: [0-9]* , [a-zA-Z0-9]*, [^0-9]* </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onyscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onxscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontextlink" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onselectable" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollwidth" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollheight" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollevents" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onpattern" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxlength" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxhscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onlineheight" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onhscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondirection" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the lines of text are wrapped to fit within the text width. (The name multiline is a misnomer. Unwrapped text can be multiple lines if it contains a &lt;br /&gt; or &lt;p&gt; element, or a line break within a &lt;pre&gt; element. This attribute defaults to true if width and height are explicitly specified. If you set multiline=true, you probably want to explicitly a width for the text also; if multiline=true and you do not specify a width, the system will pick an arbitrary width (100 pixels at the moment). When multiline=true, the text is automatially re-wrapped whenever the content is modified by calls to setText, or whenever the width of the text view is modified. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The maximum vertical scroll position (in lines, 1-based). this.setAttribute('scroll', this.maxscroll) will cause the last line of the content to be visible at the bottom of the view (hence this is the line number of the line that will appear at the top of the view when scrolled all the way to the bottom). NOTE: A constraint or handler on onmaxscroll will automatically enable updating the attribute.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Maximum number of characters allowed in this field </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxhscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The maximum horizontal scroll position in pixels. this.setAttribute('hscroll', this.maxhscroll) will cause the end of content to be visible at the edge of the view. (The rightmost content will appear at the right edge of the view for left-to-right scripts, hence this is the pixel position of the leftmost pixel that will appear in the view when scrolled all the way to the right.) NOTE: A constraint or handler on onmaxhscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of a line of text in the current style </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="letterspacing" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  letterspacing accepts any number which is interpreted as a px value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The horizontal scroll position in pixels. Default 0. NOTE: A constraint or handler on onhscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gridFit" type="xs:string" default="none|pixel|subpixel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Grid fit for this text, Flash only One of:  "none" | "pixel" | "subpixel" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Text direction, either "ltr" (default) or "rtl", Flash only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  An alias for the text attribute, but with the type cdata, allowing it to be bound to a value that should not be interpreted as markup (when data binding, CSS style binding, or ??? or ???). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="antiAliasType" type="xs:string" default="normal|subpixel|advanced" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Antialias type for this text, Flash only One of:  "normal" | "subpixel" | "advanced" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="submit" type="lzx:submit" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Associates a form with a dataset. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="submit" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="status" type="xs:string" default="ok" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Read-only status of data request. Possible values are 'ok',
+              'requesting', and 'error'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error from most recent response or empty string; cleared to empty
+              string each time a request on the dataset is made. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataset" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dataset that specifies the request url, which will also hold
+              the result of the query. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabscontent" type="lzx:basetabscontent" >
+</xs:element>
+  <xs:complexType name="basetabscontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartactionhelper" type="lzx:chartactionhelper" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+        class that help with the zoom animation and undo ability
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartactionhelper" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+        class that help with the zoom animation and undo ability
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animateProgress" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="actionlist" type="xs:string" default="[]" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestResult" type="lzx:TestResult" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  A TestResult accumulates the results of a test run: the total number
+  of tests run, the number of failures, and the number of errors.  A
+  TestResult is automatically created by a TestSuite and included as
+  its first child view so the results of the test suite will be
+  displayed.
+
+  See the documentation for &lt;xref linkend="lz.TestSuite"/&gt;
+  for an example of this tag.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="TestResult" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:DebugObject">
+      <xs:attribute name="messages" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzcombobox_item" type="lzx:lzcombobox_item" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class used as the default item class in lzcombobox. See lzcombobox's
+          itemclassname attribute. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzcombobox_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox_item">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basesliderthumb" type="lzx:basesliderthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Basesliderthumb expects to be within a baseslidertrack (or its
+          subclass). In other words, its "classroot" should be a slidertrack. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basesliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="xs:string" default="${this.parent.parent.showvalue}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Toggles the floating value text when dragging thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="canvas" type="lzx:canvas" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+The canvas is the container for all views within an application.
+
+The lz.canvas class represents the viewable area of the application. There is one instance of lz.canvas, named canvas. The canvas contains all views within an application.
+
+The &lt;canvas&gt; tag is the document root of an LZX application file. It contains class, resource, and font definitions, library includes, and view and other instances.
+
+See the Guide for a complete discussion of the &lt;canvas&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="canvas" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="scriptlimits" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A CSS declaration of property: value pairs used to advise the underlying runtime of desired recursion and timeout limits. Not all runtimes respect this advice. The default value is runtime dependent, but typically recursion is at least 100 and timeout at least 10 (seconds). Example: scriptlimits="recursion: 256, timeout: 15"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="screenorientation" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Used to tell what the screen orientation is, 'portrait' or 'landscape' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="runtime" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String describing the target runtime. "dhtml" | "swf8" | "swf9" | "swf10" are currently supported. Others are in development.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, requests for data and media are proxied through LPS server. if false, requests are made directly to target URLs. if inherit, inherit from lzproxied query arg. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="percentcreated" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A number from 0-1 that represents the percentage of the app that has been instantiated.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="medialoadtimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for media load requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mediaerrortimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for media errors. An error occurs when no bytes have been received. This is used in Flash to detect media loads that have failed due to the security policy. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsversion" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ version number of the LPS that generated this application (for .lzo files, this is the version number of the server that generated the optimized file, not the one that served it). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsrelease" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   release of the LPS that generated this application (for .lzo files, this is the release of the server that generated the optimized file, not the one that served it). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsbuilddate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String specifying the date and time of the LPS build. "2007-03-05T15:33:42-0800" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsbuild" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String specifying the LPS build revision and the build directory: e.g. "4075 /Users/maxcarlson/openlaszlo/legals" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="httpdataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   
+httpdataprovider is bound to the system default HTTP DataProvider.
+This will be an instance of LzHTTPDataProvider, which implements HTTP request transport. The default value of the canvas.defaultdataprovider is initially set to point to this same object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fullscreen" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Used to switch into fullscreen display mode or back to normal display. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framerate" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The framerate that should be used for this application </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultdataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+defaultdataprovider is bound to the system default DataProvider.
+By default, this will be an instance of LzHTTPDataProvider, which will also be pointed to by the canvas.httpdataprovider. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="boolean" >
+</xs:attribute>
+      <xs:attribute name="datasets" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Dictionary of all named datasets. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataloadtimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for data load requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="appbuilddate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A String specifying the date and time of the application build. "2008-09-12T14:15:12Z" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowfullscreen" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether fullscreen display state is supported for the SWFx runtimes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="label" type="lzx:label" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      An abstract class that applies all features label.
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="label" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the style will be applied
+            @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rvaly" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The original y value for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rvalx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The original x value for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltextsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text size of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltext" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lbwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborder" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fadein" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to initially fade this label in. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enableCache" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rte" type="lzx:rte" >
+</xs:element>
+  <xs:complexType name="rte" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:html">
+      <xs:attribute name="wrapperfile" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Location of the html wrapper file used by the editor.
+          An empty string (default) loads the system wrapper file.
+          If a custom wrapper file is used, the path is relative to where
+          the application runs from.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="toolbar_order" type="xs:string" default="undo,redo,|,cut,copy,paste,|,bold,italic,underline,strikethrough,|,insertOrderedList,insertUnorderedList,indent,outdent,|,justifyLeft,justifyRight,justifyCenter,justifyFull,|,foreColor,hiliteColor,|,createLink,unlink,insertImage,|,print,smiley,||,fontName,fontSize" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dijit.Editor toolbar order. The list of items to show in the editor
+          toolbar. The default is to show all toolbar features.
+          A '|' inserts a separator between blocks of toolbars. 
+          A '||' will force a linebreak in the toolbar.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The initial value of the text to edit. The text is updated while
+          the rte is running.
+          @type html
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontext" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The ontext event is generated whenever the rte text content changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oneditorready" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The oneditor event is generated whenever the rte editor is completely loaded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_rte_loaded" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_editorready" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="extra_plugins" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Comma-separated list of additional dijit.Editor plugins to load.
+          An empty string (default) will load only the plugins used by default.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editorready" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the rte editor is ready to receive commands
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_theme" type="xs:string" default="tundra" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dojo theme to use. Default value is 'tundra'
+          Other values in dojo 1.5 are soria, nihilo, claro
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_root" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ root url where Dojo library is loaded. An empty string (default)
+          will load the library from Google. This path must end with a '/'.
+          For example, if you have a local version located at /trunk, 
+          you would specify something like '/trunk/dojo-release-1.5.0/'.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_locale" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dojo locale to use. Default value is '' which will use the
+          locale from the browser.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_js" type="xs:string" default="dojo/dojo.js" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dojo library to load (relative to dojo_root). This value is
+          ignored if dojo_root is empty. Default value is 'dojo/dojo.js'.
+          If you want to load an uncompressed version of dojo, specify
+          'dojo/dojo.js.uncompressed.js'
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_css" type="xs:string" default="dijit/themes/" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dojo stylesheet root (relative to dojo_root). This value is
+          ignored if dojo_root is empty. Default value is 'dijit/themes/'
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="script" type="lzx:script" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Client executed script </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="script" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Client executed script </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="datapointer" type="lzx:datapointer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The binder between data and nodes.
+Datapaths are used to merge data hierarchies with the hierarchy of an OpenLaszlo application. This is done using the the XPath syntax supported by lz.datapointer. When a node is given a datapath attribute, a datapath with the given value as its XPath is created. If the datapath retrieves a node (i.e. it doesn't terminate in an attribute getter or a () operator) then the node is mapped to that data context and all child nodes will implicitly share the datacontext, but no further action is taken. If the datapath retrieves data, rather than just a node, a few extra things happen. First, the node's data property is set and the node's ondata event is sent. Second, the node's applyData method is called with the data as the argument. In cases where a datapath matches more than one data node, the view with the matching datapath is replicated once for each data node that matches, and a lz.ReplicationManager takes over the view's spot in its parent.
+
+When a node is replicated, an LzReplicationManager takes it's place, and an onclones will be sent when the node's clones are updated.
+
+A node can only have one datapath, and datapaths always have the name datapath. Additional options available on datapath such as pooling and replication are specified by writing the &lt;datapath&gt; tag as a separate node. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="xpath" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="rerunxpath" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	This determines the behavior of the datapointer in response to notification that the dataset the datapointer is mapped to has changed. If rerunxpath is true, the datapointer will always rerun its remembered XPath (set with the xpath property). If it is false, the datapointer will only verify that the node it is pointing to is still in the dataset. If it isn't, the datapointer will rerun its remembered xpath (if it has one) or will print a debug message if any further attempt is made to use its current node as the basis for a relative XPath query.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="p" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The LzDataNodeMixin that the datapointer is pointing to. Calling setAttribute on p calls LzDatapointer.setPointer.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="context" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The reference to a clonemanager from a clone. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contextmenu" type="lzx:contextmenu" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A contextual menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="contextmenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="delegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		Sets the delegate which will be called when a menu item is selected. An onselect event is also sent.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basefocusview" type="lzx:basefocusview" >
+</xs:element>
+  <xs:complexType name="basefocusview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="target" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a reference to the view that is currently focused </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="400" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the duration of the animation from one focused view to the next </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true during keyboard navigation, when this view is visible 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="node" type="lzx:node" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The base class for all Laszlo classes.
+JavaScript: lz.node
+The lz.node class provides the basic interface for OpenLaszlo objects: parent/child hierarchy, setters, interaction with the instantiator, and reference resolution. New nodes (and subclasses thereof) can be created by new-ing the class, like this: var mynode= new LzNode( parent , args ); where parent is the parent for the new node, and args is an Object whose name/value pairs are attributes to be set on the new node.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="node" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="transition" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Allows node attributes to be automatically animated when set. A string of transitions, according to the css3 transition spec http://dev.w3.org/csswg/css3-transitions/#the-transition-shorthand-property- e.g. 'x 2s'. Note that transition-delay is not currently supported. [transition-property || transition-duration || transition-timing-function || transition-delay [, [transition-property || transition-duration || transition-timing-function || transition-delay]]*  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subnodes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of all of the LzNodes which consider this LzNode their parent. This list is similar to the subviews list, but it contains all the children of this node, not just the view children.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	
+A space-separated list of CSS classes that can be used in a stylesheet to select this node.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="placement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Instructions to this element's container about where it should go within its container's internal hierarchy. See the LzNode.determinePlacement method. Defaults to the container itself.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to the node that was passed as this node's ancestor in the constructor. If this node was created by declaring it in a tag, the parent will be its lexical parent. Its lexical parent is the tag that encloses it. Allow a null parent so that nodes can be garbage collected when they are no longer needed. See also, immediateparent.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="options" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A CSS declaration of property: value pairs that modify the interaction of this node with controllers such as replicators and layouts. For example, setting options="ignorelayout: true" on a view will cause the view to not be controlled by any layout.
+[Note] 	Note
+The options that affect particular controllers and replicators are documented with each controller and replicator.
+[Note] 	Note
+options should not be accessed directly. You must use getOption and setOption to get or set the value of an option.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oninit" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+This event is sent after the node's init method has been called. Simple actions that need to occur after the node's children have been initialized can be assigned to this event. For more complex initialization, see the init method. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ondata script is executed when the data selected by a view's datapath changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onconstruct" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+This is the first event a node sends, right at the end of the instantiation process, but before any subnodes have been created or references resolved </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeLevel" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The depth of this node in the overall node hierarchy </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name for this subnode. If given, then this node's parent and immediate parent will store a pointer to this node as the given name value.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initstage" type="xs:string" default="normal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The execution of a node's init method and sending of the oninit event is under the control of its initstage attribute, as follows:
+
+immediate
+    The init method is called immediately as the last stage of instantiation. 
+early
+    The init method is called immediately after the view and its children have been instantiated. 
+normal
+    The init method is called when the parent is initialized. 
+late
+    The init method is called during idle time. To check whether init has been called, check the inited property. Force calling init using the completeInstantiation method. 
+defer
+    The init method will not be called unless explicitly requested by the completeInstantiation method. 
+
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inited" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="immediateparent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to this nodes's parent in the node hierarchy. This will be different from "parent" when a class uses placement or defaultplacement to assign a subnode a specific place. For example, always use immediateparent to get a mouse position in your views coordinate system.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ignoreplacement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Overrides placement attribute (and defaultplacement in lexical parent). See the LzNode.determinePlacement method. Defaults to false.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="id" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A unique identifier for this element. Can be used as a global variable name in JavaScript code.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultplacement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An attribute used in container classes. If set to a non-null value, this forces this node to run its determinePlacement method for any node whose parent is this node. If the subnode has its own placement attribute, determinePlacement will be called with that value, otherwise it will be called with this value. Note that a class's defaultplacement attribute only applies to children in subclasses or in instances, not to the children of the class itself. This means that if a class and its subclass both define a defaultplacement attribute, the attribute will be set to one value before the subclass children are created and to a different one after they are created. See the determinePlacement method.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datapath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A shorthand version of &lt;datapath&gt;, specifies the data source for this node and its children. You write a string to datapath; reading datapath will yield a lz.datapath. If the value begins with an identifier followed by a colon, the identifier names a dataset, and the portion of the string after the colon is an XPath description of a portion of the data. Otherwise the entire attribute value is an XPath description of the data, relative to the data source of this node's parent element. Examples: "mydata:", "mydata:/a/b", "/a/b".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The data context for the node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cloneManager" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If this node is replicated due to data replication, the LzReplicationManager which controls this node.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="classroot" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A reference to the node that is an instance of the &lt;class&gt; where this node is defined. Members of state subclasses do not define classroot. This is convenient to use when you want to access an attribute of the class in a method or event handler that is nested deep in the node hierarchy. For example, to set the bgcolor of the class object, instead of parent.parent.parent.setAttribute(bgcolor, 0xFFFFFF) you can simply use classroot.setAttribute(bgcolor, 0xFFFFFF).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="frame" type="lzx:frame" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A frame of a multi-frame resource.
+
+The &lt;frame&gt; tag is used to define a single frame of a multi-frame &lt;resource&gt;. A multi-frame resource contains several images which can be toggled among by script commands.
+
+Multiple frame tags can be declared consecutively to produce a single resource constructed of an unlimited number of frames. Such composed resources are often used to conveniently implement mouse rollovers, button states, or other UI elements where alternate views of a resource are required. Once a multi-frame resource has been defined and presented within a &lt;view&gt;, the developer can designate which frame is actively visible through the use of the view's setResourceNumber method.
+
+Multi-frame resources can be used in conjunction with components such as &lt;basebutton&gt;, which pre-define complex button behavior using frames designated by the user. 
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="frame" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name of a variable that will be set to this object when the application is started. If this element is directly within a &lt;canvas&gt; or &lt;library&gt; element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="webapprpc" type="lzx:webapprpc" >
+</xs:element>
+  <xs:complexType name="webapprpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseslider" type="lzx:baseslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for implementing sliders representing a range of
+              values. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="trackheight" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the track. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="track" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for implementing sliders representing a range of
+              values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thumbwidth" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thumbheight" type="lzx:number" default="18" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the floating value text when the user
+              drags. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the bounding range text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showfill" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the slider's filled area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="precision" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ significant digits of precision </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onminvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="keystep" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ How far to move value when key navigating. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border width. This can be set with a style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartzoomer" type="lzx:chartzoomer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allows users to zoom in on specific areas of the chart.
+        Click or drag right-to-left to zoom back out.  (Of beta quality.)
+        Due to a bug with drawview, this doesn't currently work in DHTML. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartzoomer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomcolor" type="lzx:color" default="${parent.zoomcolor}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color tint of the zoomer. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stableborderlayout" type="lzx:stableborderlayout" >
+</xs:element>
+  <xs:complexType name="stableborderlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="windowpanel" type="lzx:windowpanel" >
+</xs:element>
+  <xs:complexType name="windowpanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basewindow">
+      <xs:attribute name="titlearea_inset_top" type="xs:string" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the window title area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the title of a window : this string appears at the top
+              of the window. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="11" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closeable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the window will have a close control. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iconradioitem" type="lzx:iconradioitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the iconradioitem class is a radio button with only an icon
+        @START_CODE
+        &lt;iconradioitem iconname="target" /&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="iconradioitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="rightrsc" type="xs:string" default="iconradiobutton_small_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middlersc" type="xs:string" default="iconradiobutton_small_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftrsc" type="xs:string" default="iconradiobutton_small_left_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background resources </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon filename </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_y" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon y position. calculated if not specified explicitly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_x" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon x position. calculated if not specified explicitly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawview" type="lzx:drawview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+
+    @access public
+    @affects lzdrawview
+    @topic LFC
+    @subtopic Views
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="drawview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="strokeStyle" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the colour to use for the lines around shapes.  Specified as a hexadecimal number (0xffffff) or a CSS string ('#ff00ff' or '#f0f').
+        @type String
+        @lzxtype string
+        @lzxdefault "#000000"
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="miterLimit" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default miterLimit value for lines.
+          @type Number
+          @lzxtype number
+          @lzxdefault 10
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="measuresize" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the size of the drawview will be set dynamically based on its contents, where possible. (swf-only)
+      @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default width of lines, in coordinate space units.
+          Negative values are ignored.  0 draws hairlines in swf - lines that
+          are always 1 pixel wide even when scaled.
+          @type Number
+          @lzxtype number
+          @lzxdefault 1
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineJoin" type="xs:string" default="miter" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default lineJoin value for lines. Round for consistency between swf and dhtml.
+          @type String
+          @lzxtype "round" | "bevel" | "miter"
+          @lzxdefault "miter"
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineCap" type="xs:string" default="butt" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default lineCap value for lines. Round for consistency between swf and dhtml.
+          @type String
+          @lzxtype "butt" | "round" | "square"
+          @lzxdefault "butt"
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="globalAlpha" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives an alpha value that is applied to shapes and images
+          before they are composited onto the canvas. The valid range of
+          values is from 0.0 (fully transparent) to 1.0 (no additional
+          transparency). If the attribute is set to values outside this range,
+          it is ignored. When the context is created, the globalAlpha
+          attribute initially has the value 1.0.
+          @type Number
+          @lzxtype number
+          @lzxdefault 1.0
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillStyle" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the colour or style to use for the fill inside the shapes. Can be either a hexadecimal number (0xffffff), a CSS string ('#ff00ff' or '#f0f'), or a CanvasGradient/LzCanvasGradient.
+        @type String
+        @lzxtype string
+        @lzxdefault "#000000"
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aliaslines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be offset by lineWidth / 2 to appear aliased (dhtml-only)
+      @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="slider" type="lzx:slider" >
+</xs:element>
+  <xs:complexType name="slider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseslider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizestatemin" type="lzx:resizestatemin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Resizes its immediateparent with a minimum size in response to mouse events, when applied. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resizestatemin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:resizestate">
+      <xs:attribute name="resize_min_width" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width to resize to </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resize_min_height" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum height to resize to </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propedit" type="lzx:propedit" >
+</xs:element>
+  <xs:complexType name="propedit" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:toggletext">
+      <xs:attribute name="prop" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isnumber" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="icontogglebutton" type="lzx:icontogglebutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the icontogglebutton class is a icon button with two states, no text. the resource passed in should
+          have two frames, one for each state.
+        @START_CODE
+        &lt;icontogglebutton iconresource="resourcename"/&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="icontogglebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="statenum" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ button state (either 0 or 1)  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the vertical position of icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuseparator" type="lzx:menuseparator" >
+</xs:element>
+  <xs:complexType name="menuseparator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="xinset" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of pixels to inset the menuseparartor from the sides of the menu </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabsbar" type="lzx:basetabsbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class is a container for basetab items. It must be a child of
+          basetabs. The default layout for its subviews is "class: simplelayout;
+          axis: x; spacing: 0". You can pass the name of this class in the
+          'barclass' attribute of tabpane, basetabpane, basetabs, and
+          tabs. Basetabs uses this class as its default 'barclass'. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabsbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewlistmanager" type="lzx:viewlistmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private  
+        Manage a hash table of viewslist 
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewlistmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="pools" type="xs:string" default="${new Object()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private  
+        Manage a hash table of viewslist 
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="swatchview" type="lzx:swatchview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ swatchview is a simple view that is filled with a single color.
+    Either 'fgcolor' and 'bgcolor' may be used to set the color of the view.
+    By default it fills the space of the parent with white </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="swatchview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="color" type="xs:string" default="0xffffff" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this is the color that was set (by setting 'bgcolor' or 'fgcolor' ),
+        bgcolor may be different if setColorTransform has been called
+        @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataselectionmanager" type="lzx:dataselectionmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzdataselectionmanager
+    @access public
+    @topic LFC
+    @subtopic Helpers
+    @devnote TODO: [20080930 anba] (LPP-6080) uncomment typing in method signatures
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataselectionmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="manager" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalaxis" type="lzx:horizontalaxis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Represents the X-axis on the rectangular chart extends from Axis class
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="horizontalaxis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:axis">
+      <xs:attribute name="labelLenght" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolumn" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="constantlayout" type="lzx:constantlayout" >
+</xs:element>
+  <xs:complexType name="constantlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="value" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The constant value that is applied to the attribute
+          ( defined in 'axis' as 'x' or 'y' ) of each subview in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="streamprogress" type="lzx:streamprogress" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An instance of this class will set its width relative to the
+      progress of the given stream and its maxwidth attribute. It is
+      green by default; however, to make it appear with a resource, you may
+      set the bgcolor to null and provde a resource (and don't forget to set
+      stretches attribute).
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="streamprogress" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ stream for which to show the progress </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a value between 0 and 1 indicating how much of the stream has played
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="lzx:number" default="${parent.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max width that this will grow to (defaults to parent's width </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multistatebutton" type="lzx:multistatebutton" >
+</xs:element>
+  <xs:complexType name="multistatebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="statenum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the current state </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="statelength" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of frames in a state </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxstate" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the largest number allowed for the value of statenum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabsbar" type="lzx:tabsbar" >
+</xs:element>
+  <xs:complexType name="tabsbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabsbar">
+      <xs:attribute name="spacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between tab items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videovolumebutton" type="lzx:videovolumebutton" >
+</xs:element>
+  <xs:complexType name="videovolumebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="volumeInternal" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="volume" type="xs:string" default="${this.mute ? 0.0 : this.volumeInternal}" >
+</xs:attribute>
+      <xs:attribute name="trackingDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="mute" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="adjusting" type="xs:string" default="${             this.button.over ||              this.button.tracking ||              this.adjuster.over  ||              this.adjuster.tracking}" >
+</xs:attribute>
+      <xs:attribute name="adjusterHeight" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="adjusterBorder" type="xs:string" default="2" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollthumb" type="lzx:basescrollthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Basescrollthumb expects to be within a basescrollbar (or a subclass).
+          In other words, its "classroot" must be a scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basescrollthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="doffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabslider" type="lzx:tabslider" >
+</xs:element>
+  <xs:complexType name="tabslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabslider">
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="${this.style != null ? this.style.bordercolor : null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color. Default is constrained to the 
+              &lt;tagname&gt;style&lt;/tagname&gt;'s &lt;attribute&gt;bordercolor&lt;/attribute&gt; 
+              value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="style" type="lzx:style" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ contains style attributes which are applied to components to modify their look </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="style" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="textselectedcolor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color with 'selectedcolor' to color the
+        selected item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texthilitecolor" type="lzx:color" default="iceblue1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color with 'hilitecolor' to highlight an item,
+        such as when mouse is over a menu item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textfieldcolor" type="lzx:color" default="white" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background color for text areas </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdisabledcolor" type="lzx:color" default="gray60" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color when a component is disabled </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="gray10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color for text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectedcolor" type="lzx:color" default="iceblue3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when an item is selected, such as in a list </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="menuitembgcolor" type="lzx:color" default="textfieldcolor" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background color for menu items, defaults to the 'textfieldcolor' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isstyle" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this is a style object
+          @access private
+          @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isdefault" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, this style is the default style for components  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hilitecolor" type="lzx:color" default="iceblue4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when the background color changes to highlight an item,
+        such as when mouse is over a menu item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabledcolor" type="lzx:color" default="gray30" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when an item is disabled </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="canvascolor" type="lzx:color" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ canvas color, default: null (will use whatever is specified
+        as the canvas bgcolor, default: white) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the line width used in those components that have a visual border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="gray40" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used to color the frame of a component for those that have a visual
+        border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor" type="lzx:color" default="white" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used for colorizing the backgrounds of content areas, such
+          as the background in tabslider's content, and window's content </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="basecolor" type="lzx:color" default="offwhite" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used for colorizing a component, components will typically use
+        varying shades of this color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollbar" type="lzx:basescrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Contains non-visual aspects of a scrollbar. Subclasses are expected to
+          define this.thumb and this.scrolltrack to reference the views that
+          perform those functions. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basescrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="usemousewheel" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this scrollbar listens for mousewheel events </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stepsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount that the scrolltarget is moved when the user clicks on
+              the scrolltrack or when the step method is called. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrolltarget" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that is controlled by the scrollbar.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollmax" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum distance to scroll, default: the height or width
+              of the scrolltarget. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollattr" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The attribute of the scrolltarget that is modified by the scrollbar,
+              default: value of axis attribute.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if the scrolltarget is bigger than the containing view
+              therefore the scrollbar is active. The scrollbar appears disabled
+              when scrollable is false. You can make the scrollbar invisible
+              when there is nothing to scroll by setting visible="${scrollable}"
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pagesize" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum distance to scroll, default: the height or width
+              of the scrollbar.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onscrollmax" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelevent_on" type="xs:string" default="onfocus" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The event that activates the mousewhen when sent from the focusview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelevent_off" type="xs:string" default="onblur" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The event that deactivates the mousewhen when sent from the focusview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the mousewheel is active for the focusview.
+              @keywords read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusview" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view to which the scrollbar should listen for focus 
+            events. If not set, it will be set to the scrolltarget
+            or the immediateparent of the scrollbar,
+            whichever is focusable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Axis may be "x" or "y", controls the orientation and default
+              scrollattr
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="validatingForm" type="lzx:validatingForm" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Validators
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="validatingForm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:form">
+      <xs:attribute name="validators" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Validators
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="errorcount" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="PopupCircle" type="lzx:PopupCircle" >
+</xs:element>
+  <xs:complexType name="PopupCircle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:circlehotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baselistitem" type="lzx:baselistitem" >
+</xs:element>
+  <xs:complexType name="baselistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="selected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether this item is selected. Our containing list will adopt the value
+              of this component when it is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when this item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when the user makes a selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piechartplotarea" type="lzx:piechartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+         A pie chart plot area where the pie slices are rendered
+         @access public
+         </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piechartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Defines the pie slice's style </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="formlayout" type="lzx:formlayout" >
+</xs:element>
+  <xs:complexType name="formlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the first view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="counter" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" default="left" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mred" type="lzx:mred" >
+</xs:element>
+  <xs:complexType name="mred" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="urls" type="xs:string" default="[ 'http://www.openlaszlo.org/images/edsurf.gif',                      'http://www.openlaszlo.org/images/ednpals2.gif',                      'http://www.openlaszlo.org/images/edchess1.jpg',                      'http://www.openlaszlo.org/images/edandalaninbarn.jpg'                    ]" >
+</xs:attribute>
+      <xs:attribute name="urlnum" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="timedel" type="xs:string" default="${new LzDelegate ( this , 'advance' )}" >
+</xs:attribute>
+      <xs:attribute name="running" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bluestyle" type="lzx:bluestyle" >
+</xs:element>
+  <xs:complexType name="bluestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="axis" type="lzx:axis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A abstract class that represents one of the axes of a rectangular chart. In general, axis isn't instantiated directly     
+    @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="axis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="type" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the axis type can be 'linear' or 'categorical' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleY" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement in Y position of the Axis title </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleX" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement in X position of the Axis title </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleLocation" type="xs:string" default="default" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement of the Axis title possible values: 'low','high','default'</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleGap" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Axis title label</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickmarkLabelMaxDecimals" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ticklabelcolumn" type="xs:string" default="$once{''}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Data Column that is used to override the values of Tic Marks labels   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickMarksLabelsEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the rendering of tic Marks labels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickMarkPositions" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Exposes distances where tickmarks are drawn 
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratioPixel" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offset" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minorTickEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable minor Tics Marks </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumRender" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimum" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value that indicates the Minimum value in the axis can be positive or negative value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximumRender" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximum" type="xs:string" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value that indicates the Maximum value in the axis can be positive or negative value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="majorTickEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable Major Tics Marks </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="majorInterval" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allows to customize the interval of the Major Tics Marks</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelrotation" type="xs:string" default="horizontal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the axis title rotation can be 'horizontal' or 'vertical' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelTextArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Exposes distances where tickmarks are drawn 
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelReposEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute that controls if the labels are vertically repositioned to avoid overlaping </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="interval" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the interval of values between the tic marks of the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fixedRange" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Fix the range of the axis to the maximum &amp;amp; minimum   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataSeries" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columnName" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the column name associated to the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="categoricalArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axisEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable or disable the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="adjustmin" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colormenuitem" type="lzx:colormenuitem" >
+</xs:element>
+  <xs:complexType name="colormenuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolor" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sliderknob" type="lzx:sliderknob" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sliderknob" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="minx" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="isMouseDown" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="custombutton" type="lzx:custombutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The custombutton class can include text and/or an icon, with our app-specific background graphic
+        &lt;example&gt;
+          &amp;lt;canvas&amp;gt;
+            &amp;lt;include href="incubator/custombutton.lzx"/&amp;gt;
+            &amp;lt;custombutton iconname="target" text="Hit Me"/&amp;gt;
+          &amp;lt;/canvas&amp;gt;
+        &lt;/example&gt;
+
+        the icon should be a resource with a name ending in "_icon_rsc";
+        the iconname should be that resource name, without the "_icon_rsc"
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="custombutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="texty" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ use to fine-tune text y position </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightrsc" type="xs:string" default="custombutton_small_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middlersc" type="xs:string" default="custombutton_small_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftrsc" type="xs:string" default="custombutton_small_left_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background resources </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the vertical position of icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconstretches" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ controls whether the icon stretches (none|both) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconspace" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the horizontal spacing of icon to text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name prefix </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expandedWidth" type="xs:string" default="$once{this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max width of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="collapsedWidth" type="xs:string" default="30" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ min width of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="barchartplotarea" type="lzx:barchartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of barchart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="barchartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xdragstate" type="lzx:xdragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="xdragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" default="${limit(minx, maxx,                     this.immediateparent.getMouse( 'x' ) - this.xdoffset)}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecombobox" type="lzx:basecombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A dropdown list of selectable items. Can either be editable or
+          not. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x position of the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_width" type="lzx:number" default="${this.width - 19}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the width the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The spacing size ( in pixels ) between items in the pop-up list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height of the combobox to show 'n' items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The initial selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the user makes a selection. It
+              may be used as a script in the combobox tag or as an event method.
+              </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondefaultselection" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when the default selection is set.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="min_width" type="lzx:number" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width this component is allowed to be.
+              @keywords defaultsetter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The class that is used to create an item in the list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isopen" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates whether or not the popup list is showing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Make the text field of this combobox editable. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaulttext" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text that appears in the text field when no item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultselection" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataoption" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of "lazy", "resize", "pooling", "none". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacontrolsvisibility" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border size ( in pixels ) of the popup list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a scrollbar should automatically show up when there are more
+              items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical offset of the floatinglist attached to this
+              combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="audio" type="lzx:audio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Imports an audio file.
+[Warning]This tag is obsolete. Its functionality has been replaced by the &lt;resource&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="audio" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Imports an audio file.
+[Warning]This tag is obsolete. Its functionality has been replaced by the &lt;resource&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basefloatinglist" type="lzx:basefloatinglist" >
+</xs:element>
+  <xs:complexType name="basefloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:list">
+      <xs:attribute name="attachtarget" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view to which this floatinglist will attach. By default, this
+              will be the lexical parent.  The style of the attachtarget will be
+              inherited. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The distance from the attachtarget. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where this floatinglist should attach to its owner. Possible
+              values: bottom, top, left, right.  In the event of a canvas
+              out-of-bounds, the floating list will attach in a visible
+              location. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecomponent" type="lzx:basecomponent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an abstract class which all components subclass </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecomponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label or title of the component: instead of using this 
+              attribute text may instead be placed withing the tag, for
+              example: &amp;lt;button&amp;gt;OK&amp;lt;/button&amp;gt; </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether style should be applied to this component </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  if null, the style is set to the inherited style from the parent
+               component, if no parent component the style will be the canvas
+               'defaultstyle' attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstyle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onisdefault" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event: when isdefault changes
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocusable" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_enabled" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isdefault" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to true, this component will be the default (and will
+              therefore receive the enter key) if it is nearest to the focussed
+              view, and if that focussed view does not have doesenter set to
+              true. "Nearness" is defined to mean the closest common parent
+              with the focussed view that is not excluded from the mode, and
+              which is visible onscreen.
+              </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasdefault" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true when this component will receive enter key events </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ when false the component should appear as its disabled state and
+              not respond to user events. The component is
+              automatically set to clickable when enabled, and not clickable
+              when disabled.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="doesenter" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if set to true, the component manager will call this component
+              with doEnterDown and doEnterUp when the enter key goes up or down
+              if it is focussed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="camera" type="lzx:camera" >
+</xs:element>
+  <xs:complexType name="camera" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:mediadevice">
+      <xs:attribute name="width" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width (resolution) that will be captured by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="show" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, show camera on immediateparent videoview.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="picturequality" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Camera picture quality: a value between 0 and 1, where 1
+              represents the highest quality (no compression). When
+              0 is passed, this indicates to use highest quality that
+              fits into the available bandwidth </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height (resolution) that will be captured by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fps" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of frames per second that will be captured 
+              by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="favorsize" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Often several capture modes are available per camera device.
+              These modes will allow capturing at a specific size (width/height)
+              and framerate.  If you specify both fps and width and height for
+              this camera, this attribute will control which capturing mode
+              for the camera device will be used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bandwidth" type="xs:string" default="16384" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Camera bandwidth (in bytes per second). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toggletext" type="lzx:toggletext" >
+</xs:element>
+  <xs:complexType name="toggletext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="editing" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tickmarklabel" type="lzx:tickmarklabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private Represents the tickmark text which appears on a computerized note </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tickmarklabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+      <xs:attribute name="styleSet" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute to handle style set optimization
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="photo" type="lzx:photo" >
+</xs:element>
+  <xs:complexType name="photo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datamarker" type="lzx:datamarker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      datamarker for the chart
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datamarker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpicker" type="lzx:colorpicker" >
+</xs:element>
+  <xs:complexType name="colorpicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+      <xs:attribute name="selectedColor" type="lzx:number" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseslidertrack" type="lzx:baseslidertrack" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Baseslidertrack expects to be within a baseslider (or its
+          subclass). In other words, its "classroot" should be a slider. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseslidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpot" type="lzx:colorpot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="colorpot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="listener" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="pre" type="lzx:pre" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="pre" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="wrappinglayout" type="lzx:wrappinglayout" >
+</xs:element>
+  <xs:complexType name="wrappinglayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="yspacing" type="xs:string" default="${this.spacing}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          the y axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="yinset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to offset the first view controlled by the layout in y
+          axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xspacing" type="xs:string" default="${this.spacing}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          the x axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xinset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to offset the first view controlled by the layout in x
+          axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          both axes. By default, both xspacing and yspacing are set to this
+          value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, a number of miliseconds to use to animate the views in to
+          place.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The primary axis for wrapping. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="checkbox" type="lzx:checkbox" >
+</xs:element>
+  <xs:complexType name="checkbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.cb.height/2 - this._title.height/2+1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizeview_x" type="lzx:resizeview_x" >
+</xs:element>
+  <xs:complexType name="resizeview_x" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="right" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="middle" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="left" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="html" type="lzx:html" >
+</xs:element>
+  <xs:complexType name="html" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="target" type="xs:string" default="$once{this.parent}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the view to listen to for x/y/width/height change events.  Defaults to this.parent.
+          @type LzView
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the URL the html tag should load
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownativecontextmenu" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, show native context menus in the iframe.  Otherwise, show OpenLaszlo context menus.  Note that this only works in DHTML because it's not possible to programatically display a context menu in Flash.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollbars" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag will have scrollbars.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rpcmethods" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Contains a list of method names available to call with callRPC().
+          @type Array
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ready" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag is ready to receive commands
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontarget" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onready" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mouseevents" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, attempt to listen for mouse events on the iframe.  Cross-domain security restrictions apply, so if the content loaded in the iframe is from a different domain, mouse events won't be sent.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width of the iframe: embedded swfs won't load with a size less than 1
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum height of the iframe: embedded swfs won't load with a size less than 1
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loading" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag is currently loading
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iframeid" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="html" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The HTML that the iframe starts out containing.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="history" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag will set browser history.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framename" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the name/target of the html iframe.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="frametimer" type="lzx:frametimer" >
+</xs:element>
+  <xs:complexType name="frametimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fps" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="delta" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizeview_y" type="lzx:resizeview_y" >
+</xs:element>
+  <xs:complexType name="resizeview_y" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="top" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="middle" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="bottom" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baselist" type="lzx:baselist" >
+</xs:element>
+  <xs:complexType name="baselist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="toggleselected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, the first click on a list item selects it and the
+              second click deselects it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the user makes a selection it may
+              used as a script in the tag or as an event method. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemclassname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the itemclassname attribute 
+              changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple items may be selected. When the
+              shift key is down, a range of items is selected. When the control
+              key is down, any item may be added to the selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class for new items that will be created with
+              addItem(). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultselection" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The index of the default selected item, if none is provided via
+              the selected="true" attribute on an item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataoption" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of "lazy", "resize", "pooling", "none". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="selectionmanager" type="lzx:selectionmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzselectionmanager
+    @access public
+    @topic LFC
+    @subtopic Helpers
+    @lzxname selectionmanager
+    @devnote TODO: [20080930 anba] (LPP-6080) uncomment typing in method signatures
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="selectionmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="toggle" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @type Boolean
+        @lzxtype boolean
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectedHash" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @access private
+        @type Object
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @access private
+        @type Array
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sel" type="xs:string" default="setSelected" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the method to call on an object when an object's
+        selectedness changes. The method is called with a single Boolean
+        argument. The default value for this field is &lt;code&gt;setSelected&lt;/code&gt;.
+        (This feature is not available for &lt;tagname&gt;dataselectionmanager&lt;/tagname&gt;.)
+        @type String
+        @lzxtype string
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lastRangeStart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @type *
+        @access private
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datalabel" type="lzx:datalabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      Represents the data text which appears on a computerized note
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datalabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+      <xs:attribute name="labelOut" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="handler" type="lzx:handler" >
+</xs:element>
+  <xs:complexType name="handler" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="reference" type="xs:string" default="this" >
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" use="required" >
+</xs:attribute>
+      <xs:attribute name="method" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" default="" >
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="tooltip" type="lzx:tooltip" >
+</xs:element>
+  <xs:complexType name="tooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="yoffset" type="xs:string" default="25" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        The vertical offset of tooltip from the mouse position.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tipvalign" type="xs:string" default="default" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Whether the tooltip shows up above or below the mouse
+        position. Default will position heuristically to keep
+        the tooltip visible on the canvas.
+
+        @lzxtype above | below | default
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tipalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Whether the tooltip is horizontally aligned by it's left edge
+        (default) or right edge relative to the mouse position.
+
+        @lzxtype right | left
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        The text that will be displayed by the tooltip.  If the text
+        is &lt;code&gt;null&lt;/code&gt; or empty, no tooltip will be displayed.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewslist" type="lzx:viewslist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pool of ordered view  
+         - @keyword private
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewslist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="vlist" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pool of ordered view  
+         - @keyword private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="viewclass" type="xs:string" default="$once{null}" >
+</xs:attribute>
+      <xs:attribute name="parentview" type="xs:string" default="${parent}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="combobox" type="lzx:combobox" >
+</xs:element>
+  <xs:complexType name="combobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerlistitem" type="lzx:datepickerlistitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpconnection" type="lzx:rtmpconnection" >
+</xs:element>
+  <xs:complexType name="rtmpconnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="status" type="xs:string" default="disconnected" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String to indicate connection status.
+            @type string
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stage" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number to indicate what stage of connection we're in:
+            0: disconnected, 1: connecting, 2: connected.
+            @type Number
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Application url, for example
+            "rtmp:/appname" or "rtmp://myserver.com/myapp/".
+            @type String
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onconnect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when connection established. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="objectencoding" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The AMF object encoding to use for this connection, either 0 or 3.
+            @type Number
+            @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turn on for verbose debugger output.
+            @type Boolean
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connectiontimeout" type="lzx:number" default="3000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of milliseconds to wait for connection at src before 
+                using altsrc URL </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connections" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A shared hash of connections
+            @type Object
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connectionparams" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Connection parameters that will be sent to the server when NetConnection.connect() is called
+            @type Expression
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoconnect" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Connect automatically during init. If false, you need to explicitly
+            call connect().
+            @type Boolean
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altsrc" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Alternate application url, used if the connection for src 
+                fails for example : "rtmp:/appname" or 
+                "rtmp://myserver.com/myapp/". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizelayout" type="lzx:resizelayout" >
+</xs:element>
+  <xs:complexType name="resizelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatacombobox_item" type="lzx:basedatacombobox_item" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class used to create an item in a basedatacombobox's list.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedatacombobox_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="greenstyle" type="lzx:greenstyle" >
+</xs:element>
+  <xs:complexType name="greenstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tab" type="lzx:tab" >
+</xs:element>
+  <xs:complexType name="tab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetab">
+      <xs:attribute name="padding" type="xs:string" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text padding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basechart" type="lzx:basechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for non-pie charts.  Contains most of the
+        shared attributes and elements.  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomcolor" type="lzx:color" default="#DDDDDD" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the zoom selector. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="zoomable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether bars are zoomable or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="zerowidth" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the line drawn at zero. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vtickwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn vertical tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Length of drawn vertical tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklabelsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text size of vertical tick labels. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklabel" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of vertical tick labels.  If not specified, no
+            labels are drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vtick" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw vertical tick marks, and if so,
+            what color.  If no color is specified, ticks are not drawn.
+            These are the tick marks that are drawn vertically, along the
+            bottom axis.  Note: In barchart, setting drawaxis to y changes
+            overall chart orientation, with the "bottom" on the left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid line thickness. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridspacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid line spacing.  (Units, not pixels.  In
+            barchart, the space between one bar and the next is
+            considered one unit.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridlines" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the vertical grid lines.  Note: In barchart,
+            vertical axis is considered the axis that runs parallel to the
+            orientation of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridbands" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid bands. Note: In barchart, vertical axis is
+            considered the axis that runs parallel to the orientation of
+            the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vbopacity" type="lzx:number" default=".5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid band opacity.  Note: In barchart, vertical
+            axis is considered the axis that runs parallel to the
+            orientation of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vaxiswidth" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn vertical axis. Note: In barchart, vertical
+            axis is considered the axis that runs parallel to the
+            bars in the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vaxis" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line along the vertical axis, and if so,
+            what color.  (If no color is specified, axis is not drawn.)
+            Note: In barchart, vertical axis is considered the axis
+            that runs parallel to the bars in the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ploty" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area's y position, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area's x position, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotwidth" type="lzx:number" default="${this.width - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotheight" type="lzx:number" default="${this.height - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Height of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paneslider" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the view in which the data is drawn in
+            relation to its parent clipping frame.  Allows data to be
+            dragged or slid around. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's minimum displayed value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's maximum displayed value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="htickwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn horizontal tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Length of drawn horizontal tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklabelsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text size of horizontal tick labels. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklabel" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of horizontal tick labels.  If not specified, no
+            labels are drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="htick" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw horizontal tick marks, and if so,
+            what color.  If no color is specified, ticks are not
+            drawn.  These are the tick marks that are drawn horizontally,
+            along the side axis.  Note: In barchart, setting drawaxis to y
+            changes overall chart orientation, with the "bottom" on the
+            left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid line thickness. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridspacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid line spacing.  (Units, not pixels.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridlines" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the horizontal grid lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridbands" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid bands. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hbopacity" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid band opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haxiswidth" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn horizontal axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haxis" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the horizontal axis, and what color.
+            (If no color is specified, axis is not drawn.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawzero" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line at zero, and what color.  If
+            no color is specified, line is not drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawaxis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the data will be drawn.
+            Accepts values x and y.  (x - vertical bars drawn
+            from left to right.  y - horizontal bars drawn
+            top to bottom.)  Only applicable to barchart, but
+            necessary for certain shared elements. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="draggable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether bars are able to be dragged or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the plot area's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether there's a border around the plot area, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If desired, a resource can be used in the background.
+            If specified, this view will appear behind the chart,
+            with everything drawn on top of it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="belowzeroopacity" type="lzx:number" default=".2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Opacity for area below zero.  Defaults to a low number
+            for a hazy, translucent effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="belowzero" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to fill the area below zero, and what color.
+            (Will not be drawn if no color specified.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabels" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to label the individual bar ticks, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barticks" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to have ticks for individual bars, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altslider" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The slider for the alternate direction to paneslider. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altminimum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's maximum for width.  (If lines are drawn
+            vertically, this controls horizontal visible area.  If lines are drawn
+            horizontally, this controls vertical visible area.  Changing these
+            will allow the user to zoom in and out on a particular area, and
+            will scale data accordingly.)  Note: Not settable in barchart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altmaximum" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's minimum for width.  (If lines are drawn
+            vertically, this controls horizontal visible area.  If lines are drawn
+            horizontally, this controls vertical visible area.  Changing these
+            will allow the user to zoom in and out on a particular area, and
+            will scale data accordingly.)  Note: Not settable in barchart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="adjusttodata" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to adjust the graph to data. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="memorymonitor_model" type="lzx:memorymonitor_model" >
+</xs:element>
+  <xs:complexType name="memorymonitor_model" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="scale" type="lzx:number" default="1 / 1024" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="current" type="lzx:number" default="-1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundrectbutton" type="lzx:roundrectbutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+A class for making nice-looking, styleable buttons with gradients, without any art assets.
+
+See test/test-roundrectbutton.lzx for several examples of how to use this component. 
+
+The component attributes are only used for initialization. They are not live constraints.
+Currently the best way to change them at runtime is to apply a &amp;lt;style&amp;gt;. 
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roundrectbutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="upStopColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="upStartColor" type="lzx:color" default="0xcccccc" >
+</xs:attribute>
+      <xs:attribute name="overStopColor" type="lzx:color" default="0x777777" >
+</xs:attribute>
+      <xs:attribute name="overStartColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="downStopColor" type="lzx:color" default="0xCCCCCC" >
+</xs:attribute>
+      <xs:attribute name="downStartColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+A class for making nice-looking, styleable buttons with gradients, without any art assets.
+
+See test/test-roundrectbutton.lzx for several examples of how to use this component. 
+
+The component attributes are only used for initialization. They are not live constraints.
+Currently the best way to change them at runtime is to apply a &amp;lt;style&amp;gt;. 
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="xs:string" default="0xb3b3b3" >
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="15" >
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{parent.upStopColor}" >
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{parent.upStartColor}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="LzTextFormat" type="lzx:LzTextFormat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    LzTextFormat is deprecated.  Use 'textformat' instead.
+    @keyword deprecated
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="LzTextFormat" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textformat">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myweek" type="lzx:myweek" >
+</xs:element>
+  <xs:complexType name="myweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerweek">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rpc" type="lzx:rpc" >
+</xs:element>
+  <xs:complexType name="rpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="secureport" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The port to use for the secure socket between the client and the
+              LPS. If secure is false, this value is ignored.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="secure" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Make connection secure between client and the LPS secure
+             (HTTPS). Default is false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyinfo" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="proxy" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The remote proxy object. Proxy is set after the rpc object
+              loads. Proxy contains client-side function stubs to remote
+              methods. Each method takes an array of arguments and a delegate
+              like:
+
+                myrpc.proxy.remoteFunc( [ p1, p2, ..., pN ], delegate );
+
+              Remote methods with no arguments are passed in an empty array
+              like:
+
+                myrpc.proxy.otherRemoteFunc( [], delegate );
+
+              The delegate is used to handle the return value since RPC calls
+              are asynchronous.
+
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onunload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when the remote object is unloaded.
+              @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when the remote object is loaded.
+              @access public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when an error or timeout occurs associated
+              with getting this object or calling one of its remote methods. 
+              @access public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoload" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Load remote object during init. If false, create remote object by
+              calling load(). Default is true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datacombobox" type="lzx:datacombobox" >
+</xs:element>
+  <xs:complexType name="datacombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basezoomarea" type="lzx:basezoomarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract class that provide basic zooming ability. 
+        Allow subclasses to modify the look and feel
+        and action to be taken
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basezoomarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starty" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="startx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectionDel" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecting" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ user is selecting or not </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotarea" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="endy" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="endx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable zoom area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="lzx:number" default="500" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ zoom animation duration </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the chart instance </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_componentmanager" type="lzx:_componentmanager" >
+</xs:element>
+  <xs:complexType name="_componentmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tree" type="lzx:tree" >
+</xs:element>
+  <xs:complexType name="tree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetree">
+      <xs:attribute name="onactivate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Double-clicking on the icon or text triggers this event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="lztree_folder_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the item icon:
+              frame 1 (closed), frame 2 (opened), frame 3 (leaf) 
+              Default is lztree_folder_rsc defined in lz/tree.lzx.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expander" type="xs:string" default="lztree_arrow_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the expanding icon:
+              frame 1 (closed), frame 2 (opened), frame 3 (leaf).
+              Default is lztree_arrow_rsc defined in lz/tree.lzx.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartdata" type="lzx:chartdata" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A container class for dataseries instances.  Helps organize and
+        locate the data. All dataseries tags in a chart must be children
+        of this class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartdata" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="button" type="lzx:button" >
+</xs:element>
+  <xs:complexType name="button" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the button text. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="${this.width/2 - this._title.width/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x position of the button text. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_padding_y" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the amount of space to add vertically  when sizing button to its
+        text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_padding_x" type="lzx:number" default="11" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the amount of space to add horizontally when sizing button to its
+        text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="slidertrack" type="lzx:slidertrack" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the inner track on which the sliderthumb rides </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="slidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseslidertrack">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listselector" type="lzx:listselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a helper class that wraps the selectionmanager in some
+        higher level APIs, used by baselist </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.
+        When the shift key is down, a range of items is selected.
+        When the control key is down, any item may be added to the
+        selection.
+             Default: false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piechart" type="lzx:piechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selectedpie" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Which pie is selected, if there are multiple pies. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ploty" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area y coordinate, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area x coordinate, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotwidth" type="lzx:number" default="${this.width - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotheight" type="lzx:number" default="${this.height - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Height of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotbgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the plot area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piespacing" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between the pies, if there are multiple pies. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the plot area's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border around the plot area, if anything. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If desired, a resource can be used in the background.
+            If specified, this view will appear behind the chart,
+            with everything drawn on top of it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuarrow" type="lzx:menuarrow" >
+</xs:element>
+  <xs:complexType name="menuarrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="import" type="lzx:import" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;import&gt; tag is used to import, at run time, source code contained in another (library) file. See the Guide for a complete discussion. Also see the &lt;library&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="import" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="stage" type="xs:string" default="late|defer" >
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A reference to a target file whose content is treated as a loadable module </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textlistitem" type="lzx:textlistitem" >
+</xs:element>
+  <xs:complexType name="textlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:listitem">
+      <xs:attribute name="text_y" type="xs:string" default="${this.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the displayed text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpstatus" type="lzx:rtmpstatus" >
+</xs:element>
+  <xs:complexType name="rtmpstatus" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="rtmpc" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ rtmpconnection to monitor </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueline" type="lzx:valueline" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       Represents a line in the chart
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueline" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="tipEnable" type="lzx:boolean" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable tooltip for data </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the tooltip value will be display when the mouse over the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label will be display next to the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the axis value could be "x" or "y" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelstyle" type="lzx:labelstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style object used for anything that contains a label within the chart.
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="labelstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="linesize" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ size of border of label background  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linecolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of bounding box border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of pixels the font is inset from the border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontangle" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ angle of rotation of the font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillcolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of bounding box fill </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basevaluecomponent" type="lzx:basevaluecomponent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an abstract class for components that represent a value for data </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basevaluecomponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the value that this item represents. When selected,
+        the parent selection group's value will be set to this value.
+        Most subclasses require you to call getValue() to get the
+        value of the attribute.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="expression" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The type of value of the item. Default is 'expression',
+             which will attempt to heuristicate the type from the
+             value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetooltip" type="lzx:basetooltip" >
+</xs:element>
+  <xs:complexType name="basetooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="Default Value" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="form" type="lzx:form" >
+</xs:element>
+  <xs:complexType name="form" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseform">
+      <xs:attribute name="spacing" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical space between content and button area. If forms height is
+              specified, the button area will be flush against the form's bottom
+              right corner (adjusted by any layout that the form has). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basestyle" type="lzx:basestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base style for all chart styles
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueregionstyle" type="lzx:valueregionstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valueregionstyle is used for drawing the appearance of a value region
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueregionstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartstyle" type="lzx:chartstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for chart, contain nested level of style extend from basestyle
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="version" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="onversion" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="datastyleindex" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radiobutton" type="lzx:radiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements a "radio" button, allows a one-of-many selection when
+          several of these are in a radiogroup. Radiobutton expects its parent
+          to be radiogroup. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="radiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.rb.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="alert" type="lzx:alert" >
+</xs:element>
+  <xs:complexType name="alert" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:modaldialog">
+      <xs:attribute name="text_y" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the button text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the button text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="result" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ After the alert is closed, this is set to true if button1 ("OK")
+              is pressed or false if button2 is pressed. You can check for the
+              result value using the onresult event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresult" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when a button is pressed. Use this to check the
+              result value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxtextwidth" type="xs:string" default="${Math.round(parent.width/3) - inset_left - inset_right                     - content_inset_left - content_inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The max length of a line of text before it wraps. Default: 1/3 of
+              the parent's width - width of window dressing and margin. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="button2" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If a string is set for this attribute, a second button will be
+              shown to the left of the first with this text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="button1" type="xs:string" default="OK" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Alert shows only this button, if button2 isn't set.
+              You may specify a different string to change the text of the
+              button. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegridcolumn" type="lzx:basegridcolumn" >
+</xs:element>
+  <xs:complexType name="basegridcolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="sortpath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An xpath expression to use to determine the sort key for this
+              column. By default, this is the column's datapath's xpath. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width for this column. This is relevant if the column
+              can be resized. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasSort" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set by &lt;code&gt;doSort()&lt;/code&gt; method. If true, then this is the current
+              sort column.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="descendComparator" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An optional method. If defined, this method will be used when 
+              the column is sorted when ascendsort is set to false. This method
+              should have the comparator signature. It should accept to string
+              argument and return 1, 0 , or -1, indicating that the two
+              arguments are in order, equivalent, or out of order,
+              respectively. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatype" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Either "number" or "string". If "string", then dictionary sort
+              is used. If "number", then types are coerced to a number before
+              sorting. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colwidth" type="xs:string" default="${this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The current width of the column. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ascendsort" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the next sort will be ascending, otherwise it will
+              be descending.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ascendComparator" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An optional method. If defined, this method will be used when 
+              the column is sorted when ascendsort is set to true. This method
+              should have the comparator signature. It should accept to string
+              argument and return 1, 0 , or -1, indicating that the two
+              arguments are in order, equivalent, or out of order,
+              respectively. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="strokestyle" type="lzx:strokestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+Implementes the Stroke rendering lines </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="strokestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="strokeWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ -    Numerical value that indicate the thickness of the Stroke line in pixels. Default value ="1"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="strokeType" type="xs:string" default="solid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String value that indicates the type of the Stroke, possible values : "solid", "dashed" or "dotted". Default value "solid"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="strokeColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the Stroke in  hexadecimal value, default value "0x000000"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spaceLength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of pixels of spacing between each small line that compose the stylish line. Default value ="5"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dottedLength" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of pixel of each small line that compose the stylish line. Default value ="10"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menu" type="lzx:menu" >
+</xs:element>
+  <xs:complexType name="menu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="opened" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a boolean indicating whether or not the menu is in opened </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a string to indicate how the floating part of the menu attaches to 
+              the menubutton or menuitem. Possible values are: 'top', 'bottom', 'left', and 'right' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartbacking" type="lzx:chartbacking" >
+</xs:element>
+  <xs:complexType name="chartbacking" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechartbacking">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vslider" type="lzx:vslider" >
+</xs:element>
+  <xs:complexType name="vslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="switchaxis" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ switchaxis true means minimum-value is 
+                t op maximum is bottom false turns around </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ showvalue should the slider show the numbers of min/max </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Showrange should the slidertrack be with color while 'sliding' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initvalue" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatacombobox" type="lzx:basedatacombobox" >
+</xs:element>
+  <xs:complexType name="basedatacombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="valuedatapath" type="xs:string" default="@value" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to value for items in list. See caveat.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdatapath" type="xs:string" default="text()" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to text to display for items in list. 
+              See caveat.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="statictext" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, this will always be displayed instead of selected item
+              text. Behaves like a menu button. Also see defaulttext. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height to the number of items to show in combobox
+              popup list. Must be greater than 0. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectfirst" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, the 1st item is selected oninit. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapointer to selected item. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when an item is selected. Sends selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when an item is selected. Sends selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onisopen" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Called when combobox opens or closes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncombofocus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The equivalent for onfocus for combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncomboblur" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The equivalent for onblur for combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="menuclassname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="listwidth" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of popup list, defaults to width of combobox view. During
+              setup, the width of the floating list view might not yet be set,
+              so this returns the expected width. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="listattach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where the floatinglist should attach to its owner. Possible
+              values: bottom, top, left, right.  In the event of a canvas
+              out-of-bounds, the floating list will attach in a visible
+              location. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemdatapath" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to items in list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class for items in the floating list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isopen" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates whether or not the popup list is showing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ismenu" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the combobox will behave like a menu. "value" is
+              ignored, and items will not remain selected. Selecting an
+              item generates an onselect event </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaulttext" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Default text to display before a selection is made. No default
+              item is selected if defaulttext is set. Defaulttext is replaced
+              with selected item's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="columnchart" type="lzx:columnchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       A chart class that renders vertical bars.
+       Inherits from the chart class.  (Warning: Of beta quality.)
+       @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="columnchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rectangularchart">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="row" type="lzx:row" >
+</xs:element>
+  <xs:complexType name="row" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="include" type="lzx:include" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;include&gt; tag is used to include source code contained in another file. See the Guide for a complete discussion. Also see the &lt;library&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="include" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="type" type="xs:string" default="text|xml" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If this attribute has the value text , the content of the target file is included as text. Otherwise, it is read as XML.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A reference to a target file whose content is included in the application that contains this include element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="menutrackgroup" type="lzx:menutrackgroup" >
+</xs:element>
+  <xs:complexType name="menutrackgroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetrackgroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundrect" type="lzx:roundrect" >
+</xs:element>
+  <xs:complexType name="roundrect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="oninsettop" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetright" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetleft" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetbottom" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninset" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="insettop" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetright" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetleft" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetbottom" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:size" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The margin between the outside view and the content view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowOpacity" type="xs:string" default="0.5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow color.  If this is specified, a box shadow is drawn.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border.  If this is zero, no frame is drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rounding radius of the border corners.  Because the default
+            join type is a round join, even a radius of zero will product some
+            rounding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop opacity.  This defaults to one (opaque) unless the
+            stop color is not specified and the start color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop color.  This is the color that is drawn at the
+            bottom or right of the view, depending on the value of
+            backgroundGradientOrientation.  See the documentation for
+            backgroundStartColor for additional documentation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start opacity.  This defaults to one (opaque) unless the
+            start color is not specified and the stop color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start color.  This is the color that is drawn at
+            the top or left of the view, depending on the value of
+            backgroundGradientOrientation.  If this and the backround stop color
+            are specified, a gradient background is drawn in the direction specified
+            by backgroundGradientOrientation.  If only one of the background start
+            and stop color are specified, a gradient of the same color that fades to
+            transparent at the unspecified end is drawn.  If a box shadow is drawn,
+            the background defaults to white.  Specify a start and stop opacity to
+            suppress this behavior. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundGradientOrientation" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background gradient orientation.  One of 'vertical' (the default)
+            and 'horizontal'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="versioninfo" type="lzx:versioninfo" >
+</xs:element>
+  <xs:complexType name="versioninfo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_newinternalinputtext" type="lzx:_newinternalinputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A private inputtext class used by baseedittext that basically passes
+          its events (onfocus, onblur, onkeyup, onkeydown, ontext) up. Instances
+          of _internalinputtext should only exist in a baseedittext class. Note
+          that _internalinputtext assumes that its parent is a baseedittext.
+
+          Baseedittext controls _internalinputtexts y position and multiline
+          setting. Subclasses and instances should not override these
+          attributes.
+
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_newinternalinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+      <xs:attribute name="ignorecallup" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True means that doSetValue called internal inputtext and inputtext
+              should not call doSetValue back. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="pointstyle" type="lzx:pointstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for point and datamarker
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="pointstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="strokeStyle" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the stroke </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shape" type="xs:string" default="square" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'circle','square','triangle', [name of resource] </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineWidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the stroke line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="image" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image path </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gradient" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'none', 'linear', 'radial' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="checkdragstate" type="lzx:checkdragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  This should be declared as a child of the thing for which you want to
+        enable dragging.  You will need to define a view (an instance of a
+        subclass of &lt;xref linkend="lz.basedragimage"/&gt;)
+        to define the visual look of the thing while its being dragged.
+        &lt;example executable="false"&gt;
+        &amp;lt;class name="dragger" &amp;gt;
+            ...
+            &amp;lt;handler name="onmousedown"&amp;gt;
+                checkdrag.setAttribute('applied', true);
+            &amp;lt;/handler&gt;
+            &amp;lt;handler name="onmouseup"&amp;gt;
+                canvas.dragimage.stopdrag(this);
+                checkdrag.setAttribute('applied', false);
+            &amp;lt;/handler&amp;gt;
+
+            &amp;lt;checkdragstate name="checkdrag" draggername="dragimage"/&amp;gt;
+        &amp;lt;/class&amp;gt;
+        &lt;/example&gt;
+
+        The object that you want to accept a drop action, needs to register with
+        lz.Track using the same group as is declared in the dragimage.
+
+        &lt;example executable="false"&gt;
+        &amp;lt;class name="droptarget"&amp;gt;
+            ...
+            &amp;lt;method name="init"&amp;gt;
+                super.init();
+                lz.Track.register(this, 'target');
+            &amp;lt;/method&amp;gt;
+
+            &amp;lt;handler name="onmousetrackover"&amp;gt;
+               setAttribute('bgcolor', 0xffff00); // hilite
+            &amp;lt;/handler&amp;gt;
+            &amp;lt;handler name="onmousetrackout"&amp;gt;
+               setAttribute('bgcolor', null); // normal
+            &amp;lt;/handler&amp;gt;
+            &amp;lt;handler name="onmousetrackup"&amp;gt;
+               setAttribute('bgcolor', null); // normal
+               canvas.dragimage.dropcomplete(this);
+               Debug.write('dropped: '+dragimage.source.text);
+            &amp;lt;/handler&amp;gt;
+        &amp;lt;/class&gt;
+        &lt;/example&gt;
+        
+        @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="checkdragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="draggername" type="xs:string" default="dragimage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an instance subclass of basedragimage that defines the
+         visual representation of the item while it is being dragged
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ticklabel" type="lzx:ticklabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Labels along the tick axes. Either incremental, or, in a barchart,
+        determined by specified data. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ticklabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ltextsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the text for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltext" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of this label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelangle" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ XX To be implemented: The rotation of this particular label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radioitem" type="lzx:radioitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A selectable list item which works like a Radio Button
+            though uses an icon instead of radio button graphics.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="radioitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegridrow" type="lzx:basegridrow" >
+</xs:element>
+  <xs:complexType name="basegridrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="styleRegularColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="regularColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="ownerGrid" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lineColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="highlighted" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="highlightColor" type="lzx:color" default="black" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatepickerday" type="lzx:basedatepickerday" >
+</xs:element>
+  <xs:complexType name="basedatepickerday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day is currently selected 
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day is selectable.  The day is selectable if 
+              it is within the range of possible selected dates 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day should be enabled or disabled.  The day 
+              would be disbled if it should not show its daynum.
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="daynum" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The day of the month to be displayed 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewspoolmanager" type="lzx:viewspoolmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+    Manage a hash table of viewspool 
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewspoolmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="pools" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+    Manage a hash table of viewspool 
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datapath" type="lzx:datapath" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A cursor in a dataset.
+A datapointer is an object that represents a pointer to a node in a lz.dataset. The datapointer can be repositioned using either cursor movements calls such as LzDatapointer.selectNext(), or by running an XPath request via LzDatapointer.setXPath().
+
+Datapointers support a subset of the XPath specification, which uses a notation similar to the UNIX file-system to refer to nodes within a dataset. Once a datapointer is bound to a node in a dataset it will keep pointing to that node until it is moved. If the dataset is edited, the behavior of the datapointer will be controlled by its rerunxpath attribute. If this attribute is true, it will continue pointing to its current node as long as it is valid. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapath" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:datapointer">
+      <xs:attribute name="spacing" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The spacing (in pixels) between replicated views.
+[Note] 	Note
+This attribute is only available if replication is set to either "lazy" or "resize".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sortpath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An XPath to use to obtain the sort key for sorting if replication occurs. To change this attribute, use .setAttribute('sortpath', ...),  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sortorder" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The order to use to sort the dataset if replication occurs. One of "ascending" or "descending" to use built in dictionary sort, or a function which compares two strings and returns 1 if the strings are in order, 0 if they are the same, and -1 if they are out of order. To change this attribute, use setAttribute('sortorder', ...).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="replication" type="xs:string" default="normal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Determines whether to use normal or lazy replication, if the datapath matches more than one node. See the section on Replication in the Guide for information about the use of this attribute.
+[Note] 	Note
+The choice of replication style implies a choice of replication manager. Each replication manager may have additional attributes which are specified as attributes of the datapath. For example, lz.LazyReplicationManager takes axis and spacing attributes. See the documentaion for the corresponding replication manager for detailed information on these additional attributes.
+
+One of: 	'normal' | 'lazy' | 'resize'  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pooling" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		This attribute applies to datapaths which match multiple nodes and force replication. If pooling is true, views that are data-bound to this datapath are recycled if the dataset changes. Otherwise, views are deleted when the data nodes they are bound to disappear, and created when new data nodes match the datapath. See the section on Pooling in the Guide for information about the use of this attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The direction in which the replicated elements will be layed out.
+		Note
+This attribute is only available if replication is set to either "lazy" or "resize".  
+	One of: "x" | "y"  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="icontab" type="lzx:icontab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tab item for use in sidebar.lzx - switches between listpanel views </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="icontab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="label_y" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y offset for the label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_x" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the icon and text are contained in one view, and inset_x sets the x for its position </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ optional icon for tab </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_y" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y postion of the icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="linestyle" type="lzx:linestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for point or border
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="type" type="xs:string" default="solid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'solid', 'dotted' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="size" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ pixel size for the stroke of the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color on the axis line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sliderthumb" type="lzx:sliderthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the visual thumb the user drags to select a value </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basesliderthumb">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepicker" type="lzx:datepicker" >
+</xs:element>
+  <xs:complexType name="datepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepicker">
+      <xs:attribute name="startAsIcon" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true to initially show the datepicker as an
+              icon, otherwise set to false.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oldvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="allowdrag" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="linechartplotarea" type="lzx:linechartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of linechart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linechartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestSuite" type="lzx:TestSuite" >
+</xs:element>
+  <xs:complexType name="TestSuite" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:Test">
+      <xs:attribute name="onteststart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontestfinish" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontestfail" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsuitestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsuitefinish" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="controlPanel" type="xs:string" default="${canvas.lzunitControlPanel}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_datepicker_dirButton" type="lzx:_datepicker_dirButton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_datepicker_dirButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorslider" type="lzx:colorslider" >
+</xs:element>
+  <xs:complexType name="colorslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inputtext" type="lzx:inputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+The basic input-text element.
+JavaScript: lz.inputtext
+
+This tag creates an area of the canvas that the user can use to edit text. It is equivalent to the HTML &lt;input type="text"&gt;, &lt;input type="password"&gt;, and textarea tags.
+
+See the documentation for the &lt;text&gt; tag for a description of the width and height attributes, and of scrolling. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="inputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="password" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the inputtext contents will be obscured </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onenabled" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent whenever the text field is enabled. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the inputtext will be editable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lazyreplicator" type="lzx:lazyreplicator" >
+</xs:element>
+  <xs:complexType name="lazyreplicator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:replicator">
+      <xs:attribute name="clonesoffset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="clonedel" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoscreen" type="lzx:videoscreen" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used by videoplayer component
+          @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoscreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="volume" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="videoWidth" type="xs:string" default="${             Math.min(this.innerWidth,                      this.innerHeight * this.aspectRatio)}" >
+</xs:attribute>
+      <xs:attribute name="videoHeight" type="xs:string" default="${             Math.min(this.innerHeight,                      this.innerWidth / this.aspectRatio)}" >
+</xs:attribute>
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerWidth" type="xs:string" default="${             this.width - (this.borderLeft + this.borderRight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the actual width of the videoview 
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="innerHeight" type="xs:string" default="${             this.height - (this.borderTop + this.borderBottom)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the actual height of the videoview 
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true for verbose debug logging </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capturing" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="borderTop" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderRight" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderLeft" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderBottom" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="$once{             4 / 3}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzradiobutton" type="lzx:lzradiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Subclass of radiobutton with customizable look.  apps should either
+        include lzradio_resources.lzx (to get default look) or define
+        a "lzradio_rsrc" resource with the same format. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzradiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseradiobutton">
+      <xs:attribute name="text_y" type="lzx:number" default="$once{this._rb.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the text label. Default: centered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="$once{this._rb.width + 2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the text label. Default: 2 pixels past
+              radiobutton resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="XMLHttpRequest" type="lzx:XMLHttpRequest" >
+</xs:element>
+  <xs:complexType name="XMLHttpRequest" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="timeout" type="xs:string" default="60000" >
+</xs:attribute>
+      <xs:attribute name="statusText" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String message accompanying the status code </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="status" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numeric code returned by server, such as 404 for "Not Found" or 200 for "OK" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseXML" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ DOM-compatible document object of data returned from server process </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseText" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String version of data returned from server process </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="readyState" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Object status integer: 0 Uninitialised The initial value. 1 Open The open() method has been successfully called. 
+              2 Sent The send() method has been successfully called, but no data has yet been received. 3 Receiving Data is being received, 
+              but the data transfer is not yet complete. 4 Loaded The data transfer has been completed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" default="$once{canvas.proxied}" >
+</xs:attribute>
+      <xs:attribute name="parsexml" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="onreadystatechange" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="headers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valuelinestyle" type="lzx:valuelinestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valuelinestyle is used to set style to the 
+     NOTE: valuelinestyle extends basestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuelinestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileupload" type="lzx:fileupload" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    @topic Incubator
+    @subtopic Components
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fileupload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadenable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Enable upload. True to enable uploading, false to disable uploading. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="msg" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ message of feedback to user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxsize" type="xs:string" default="10000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Max file size in bytes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fileref" type="xs:string" default="$once{new flash.net.FileReference()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ file reference, for internal use 
+            @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="command" type="lzx:command" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzcommand
+    @access public
+    @topic LFC
+    @subtopic Views
+    @devnote A command is an object that sends an event in response to keyboard input.
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="command" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    If the command is active, this event is sent
+    when the keys array are pressed simultaneously.
+    @lzxtype event
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="keys" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ array of keys (strings) that, when pressed together,
+    cause the onselect event of the command to be sent. For example:
+    setAttribute('key', ['a', 'shift'])
+    @type [String]
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="key" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  WTF?  See LPP-4982, LPP-7814
+  Necessary to add "key" to the schema
+  @access private
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    true if the command is currently active.
+    The default is &lt;i&gt;true&lt;/i&gt;.
+    @type Boolean
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="DisplayKeys" type="xs:string" default="{control:'Ctrl', shift:'Shift', alt:'Alt'}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+ * Mapping from key names to display strings used by keysToString
+ * @type Dictionary
+ * @keywords read-only
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colormenu" type="lzx:colormenu" >
+</xs:element>
+  <xs:complexType name="colormenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetrackgroup">
+      <xs:attribute name="owner" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datastyle" type="lzx:datastyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dataseriesstyle is used for drawing the appearance of a dataseries
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datastyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hotspot" type="lzx:hotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+This class is a contract interface for hotspots that can be used
+by the imagemap class. A generic hotspot does three things:
+1. Tells us if it contains a point
+2. Performs some action on entry
+3. Performs some action on leaving
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="hotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="circlehotspot" type="lzx:circlehotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A general hotspot for points inside a circle.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="circlehotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:hotspot">
+      <xs:attribute name="y" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Y coordinate of the center </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The X coordinate of the center </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radius" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the circle </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatepickerweek" type="lzx:basedatepickerweek" >
+</xs:element>
+  <xs:complexType name="basedatepickerweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dayclass" type="xs:string" default="$once{classroot.dayclass}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the day class instance to use.  
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videolibrarypopup" type="lzx:videolibrarypopup" >
+</xs:element>
+  <xs:complexType name="videolibrarypopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yourY" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourX" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourWidth" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourHeight" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="popupWidth" type="xs:string" default="300" >
+</xs:attribute>
+      <xs:attribute name="popupHeight" type="xs:string" default="${this.f.height + 2}" >
+</xs:attribute>
+      <xs:attribute name="pinYourYPos" type="xs:string" default="0.0" >
+</xs:attribute>
+      <xs:attribute name="pinYourXPos" type="xs:string" default="0.5" >
+</xs:attribute>
+      <xs:attribute name="pinY" type="xs:string" default="${             this.yourY +             (this.pinYourYPos * this.yourHeight) -             (this.pinMyYPos * this.height)}" >
+</xs:attribute>
+      <xs:attribute name="pinX" type="xs:string" default="${             this.yourX +             (this.pinYourXPos * this.yourWidth) -             (this.pinMyXPos * this.width)}" >
+</xs:attribute>
+      <xs:attribute name="pinMyYPos" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="pinMyXPos" type="xs:string" default="0.5" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="atts" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabpane" type="lzx:tabpane" >
+</xs:element>
+  <xs:complexType name="tabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabpane">
+      <xs:attribute name="tabwidth" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the tab associated with this tabpane. If not set, the tab
+              will resize itself to fit. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabpanecontent" type="lzx:basetabpanecontent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the content of a basetabpane.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabpanecontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderinput" type="lzx:borderinput" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="borderinput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelwidth" type="lzx:number" default="80" >
+</xs:attribute>
+      <xs:attribute name="labelstyle" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ should be an object of type "textstyle" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="${this.txt.changed}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stepper" type="lzx:stepper" >
+</xs:element>
+  <xs:complexType name="stepper" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="left" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rectangularchart" type="lzx:rectangularchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       class that provides all common features for the rectangular charts like line, bar and column
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="rectangularchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:chart">
+      <xs:attribute name="verticalGridLines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Determines if the vertical grid lines are going to be used </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onRenderStop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onRenderStart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="miny" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum virtual value to be rendered in the 'y' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum virtual value to be rendered in the 'x' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum virtual value to be rendered in the 'y' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum virtual value to be rendered in the 'x' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="horizontalGridLines" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="horizontalGridBands" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Determines if the horizontal grid lines are going to be used </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gridlinecolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultminy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="defaultminx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="defaultmaxy" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="defaultmaxx" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="dataSeriesLeaf" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modaldialog" type="lzx:modaldialog" >
+</xs:element>
+  <xs:complexType name="modaldialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:windowpanel">
+      <xs:attribute name="content_inset_top" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the dialog contents from the edge of the window
+              inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_right" type="xs:string" default="14" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for the dialog contents from the edge of the
+              window inner frame </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_left" type="xs:string" default="14" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for the dialog contents from the edge of the
+              window inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_bottom" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for the dialog contents from the edge of the
+              window inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menufloatinglist" type="lzx:menufloatinglist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="menufloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:floatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ZoomView" type="lzx:ZoomView" >
+</xs:element>
+  <xs:complexType name="ZoomView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="closed" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecheckbox" type="lzx:basecheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A checkbox component representing a boolean. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gridcolumn" type="lzx:gridcolumn" >
+</xs:element>
+  <xs:complexType name="gridcolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basegridcolumn">
+      <xs:attribute name="sortable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the column header is clickable and will initiate a 
+              sort </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showheader" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, then no header will be shown for this column.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizemargin" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the resizer between columns.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, the column cannot be resized. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="item" type="lzx:item" >
+</xs:element>
+  <xs:complexType name="item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="showcomponenthelpers" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="root" type="xs:string" default="this" >
+</xs:attribute>
+      <xs:attribute name="reference" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="opendefaultplacement" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="open" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isview" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="method" type="lzx:method" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attaches a function or event handler to an object or class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="method" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" use="required" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The name of a variable that will be set to this object when the application is started. If this element is directly within a canvas or library element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The parameter names of this method. The value of this attribute is a comma-separated list of JavaScript identifiers. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allocation" type="xs:string" default="instance|class" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of:
+class
+    The attribute will be an attribute of the class; to refer to it, you say lz.classname.attributename . 
+instance
+    Each instance will have an attribute with the specified properties ( name , type , value , etc.). 
+
+You can set allocation to class to get static attributes. Static properties are attached to the class itself, for example lz.classname . </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="baseopttreenode" type="lzx:baseopttreenode" >
+</xs:element>
+  <xs:complexType name="baseopttreenode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="startdragdelay" type="xs:string" default="800" >
+</xs:attribute>
+      <xs:attribute name="startdragdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="open" type="xs:string" default="${ dopen }" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A boolean value representing whether or not this node
+              is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="indent" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount, in pixels, to indent each element of the tree.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="highlight" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this element is selected </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dragging" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="depth" type="xs:string" default="${ ddepth }" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A 0-based depth number that indicates the depth of this
+              element in the tree. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datalistselector" type="lzx:datalistselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a helper class that wraps the dataselectionmanager in some
+        higher level APIs, used by baselist </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datalistselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:dataselectionmanager">
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.
+        When the shift key is down, a range of items is selected.
+        When the control key is down, any item may be added to the
+        selection.
+             Default: false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gradientview" type="lzx:gradientview" >
+</xs:element>
+  <xs:complexType name="gradientview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="stretchWidth" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="stretchHeight" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="gradientType" type="xs:string" default="linear" >
+</xs:attribute>
+      <xs:attribute name="gradientOrientation" type="xs:string" default="vertical" >
+</xs:attribute>
+      <xs:attribute name="colorTo" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="colorFrom" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderSizeTop" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeRight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeLeft" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeBottom" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSize" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderColorTop" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorRight" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorLeft" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorBottom" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragger" type="lzx:dragger" >
+</xs:element>
+  <xs:complexType name="dragger" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabs" type="lzx:tabs" >
+</xs:element>
+  <xs:complexType name="tabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabs">
+      <xs:attribute name="tabspacing" type="lzx:number" default="-15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between the tabs. Defaults to -15 so tabs overlap. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tabalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Align the set of tabs within the dimensions of the "tabs"
+             container ("left", "center", "right"). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpledefaultlist" type="lzx:simpledefaultlist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list class that handles a default value. 
+          Input and output for the list is defined to be in this format:
+          &lt;code&gt;
+          &lt;list name="fubar"&gt;
+            &lt;item text="foo" value="bar" default="true"/&gt;
+            &lt;item text="goo" value="mar"/&gt;
+          &lt;/list&gt;
+          &lt;/code&gt;
+         
+          Currently only works with dataoption="lazy" or "pooling"
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpledefaultlist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:list">
+      <xs:attribute name="defaultitem" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ LzDataElement of the default node 
+              null means the list has no default </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoselectdefault" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true if the default item should be selected whenever
+            data is received </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vscrollbar" type="lzx:vscrollbar" >
+</xs:element>
+  <xs:complexType name="vscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="polygonhotspot" type="lzx:polygonhotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A general hotspot for an N-sided polygon.
+This will create a polygon whose sides are described
+by moving in order to the points added by calling addPoint,
+returning back to the first point added to close the polygon.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="polygonhotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:hotspot">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugger_shadow_right" type="lzx:debugger_shadow_right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    Drop shadow for the right side of the debugger window 
+
+    @keywords private
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debugger_shadow_right" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorspot" type="lzx:colorspot" >
+</xs:element>
+  <xs:complexType name="colorspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:colormenuitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerweek" type="lzx:datepickerweek" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the implementation of the datepickerweek for 
+          the datepicker </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerweek">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseradiobutton" type="lzx:baseradiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class baseradiobutton: represents a single radio button. If groupname
+           is defined, it will reference an baseradiogroup that's named
+           groupname. If both groupname and group are not defined, this
+           radiobutton will attempt to use a baseradiogroup ancestor in its view
+           hierarchy. If it can't find one, it will use a default baseradiogroup
+           with groupname 'lzdefaultgroup'. If this radiobutton is inside a
+           form, an implicit baseradiogroup is created as a child the form.
+
+           The first radiobutton is special for implicitly created
+           baseradiogroups. A baseradiogroup will inherit the groupdatapath,
+           used as the baseradiogroup's datapath, and submit attributes from the
+           first radiobutton, which are used during its instantiation. Those
+           same attributes are ignored for subsequent radiobuttons belonging in
+           the same group. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseradiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Value of this radiobutton. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submitname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The submit name for a baseradiogroup. This must be set by the first
+              radiobutton in a baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submit" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a baseradiogroup will send its data when a form is
+              submitted. This must be set by the first radiobutton in a
+              baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if radio's group value is the same as group's. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when selected attribute selected or unselected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="groupname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of baseradiogroup. If not defined, it will use group reference as
+              its group. If both groupname and group are not defined, this
+              radiobutton will attempt to use a baseradiogroup ancestor in its view
+              hierarchy. If it can't find one, it will use a default baseradiogroup
+              with groupname 'lzdefaultgroup'. If this radiobutton is inside a
+              form, an implicit baseradiogroup is created as a child of the
+              form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="groupdatapath" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value datapath for a baseradiogroup. This must be set by the first
+              radiobutton in a baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="group" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference to baseradiogroup. If groupname is defined, it will
+              reference an baseradiogroup that's named groupname. If both groupname
+              and group are not defined, this radiobutton will attempt to use a
+              baseradiogroup ancestor in its view hierarchy. If it can't find one,
+              it will use a default baseradiogroup with groupname
+              'lzdefaultgroup'. If this radiobutton is inside a form, an
+              implicit baseradiogroup is created as a child of the form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_floatshadow" type="lzx:_floatshadow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shadows width and height are set to the width and height of the view
+          it is trying to apply a shadow to.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_floatshadow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowsize" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="oncornerresourcenumber" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onbottomvisible" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="offsety" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="cornerresourcenumber" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="bottomvisible" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="edittext" type="lzx:edittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This component provides the look and feel for user editable text, data
+          binding, and focus events. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="edittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${multiline ? 2 : Math.round(((this.height - this.field.getTextHeight())/2))} " >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text. default: centered, unless it is mutltiline </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true if you plan to change the width or height of the
+              component at run-time.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pattern" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A regular expression describing set of characters allowed in
+              this field. Restrict the characters that can be entered to a
+              pattern specified by a regular expression. Currently only the
+              expression [ ]* enclosing a set of characters or character
+              ranges, preceded by an optional "^", is supported. 
+              examples: [0-9]* , [a-zA-Z0-9]*, [^0-9]* </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="password" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for a password field. Text will appear as ****.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for multiple lines.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of chars that can be entered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugger_shadow_bottom" type="lzx:debugger_shadow_bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    Drop shadow for the bottom of the debugger window
+
+    @keywords private
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debugger_shadow_bottom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="img" type="lzx:img" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="img" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="width" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="vspace" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="hspace" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basebuttonrepeater" type="lzx:basebuttonrepeater" >
+</xs:element>
+  <xs:complexType name="basebuttonrepeater" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="onmousestilldown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleboundslayout" type="lzx:simpleboundslayout" >
+</xs:element>
+  <xs:complexType name="simpleboundslayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates, 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newcheckbox" type="lzx:newcheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basecheckbox implementation representing a boolean, i.e., checked
+          if true, else false. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newcheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecheckbox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubar" type="lzx:menubar" >
+</xs:element>
+  <xs:complexType name="menubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imagemap" type="lzx:imagemap" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A class which will activate hotspots as the mouse passes over them in a parent view, or deactivate
+them as they leave. This class operates by havign a number of objects subclassed from hotspot added.
+Each of these is then queried as the mouse passes about the view to alter its activation state.
+This class will operate either exclusively, only one active hotspot at a time, or may allow
+multiple active hotspots at once if exclusive is true (it is false by default). The class
+also provides suspend and resume methods to pause the classes handling of the hotspots and
+resume respectively. Note that the priority of choosing an active spot is random. That is
+in exclusive mode (or switching from non-exclusive to exclusive mode) if two spot a and b
+both contain x and y, no guarantee is made as to which of a and b will be chosen to be
+the active exclusive view. Additionally this will only activate and deactivate hotspots
+within the parent view. Even if a hotspot added to this map defines an active region outside
+the parent view it will not be honored. Therefore it is strongly recommended that no hotspots
+define an area outside of the view in which the are active. In order for this class
+to work the view in which it is defined must be clickable.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="imagemap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="exclusive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="reverselayout" type="lzx:reverselayout" >
+</xs:element>
+  <xs:complexType name="reverselayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the last view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="end" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true (the default), then the layout will push the subviews 
+              to the right (or bottom) of the containing view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textstyle" type="lzx:textstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Simple class that adds font attributes to style class
+        &lt;example executable="false"&gt;
+        &amp;lt;textstyle font="futura" fontsize="12" fontstyle="bold" /&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="textstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+      <xs:attribute name="fontstyle" type="xs:string" default="plain" >
+</xs:attribute>
+      <xs:attribute name="fontsize" type="xs:string" default="11" >
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" default="arial" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Simple class that adds font attributes to style class
+        &lt;example executable="false"&gt;
+        &amp;lt;textstyle font="futura" fontsize="12" fontstyle="bold" /&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetrackgroup" type="lzx:basetrackgroup" >
+</xs:element>
+  <xs:complexType name="basetrackgroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="trackingrate" type="xs:string" default="150" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The periodic rate in milliseconds to track the mouse</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this trackgroup is currently tracking or not.
+              It can bet set to turn tracking on or off, or use the methods
+              activatetrackgroup and deactivatetrackgroup </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="deactivateevents" type="xs:string" default="['onmouseup']" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an array of events which will deactivate tracking. 
+           To override, you must declare as once. For example:
+           &lt;programlisting&gt;&amp;lt;attribute name="deactivateevents" value="['onmouseover']" when="once"/&amp;gt;&lt;/programlisting&gt;
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boundsref" type="xs:string" default="${this}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will be used to define the bounding rect for tracking
+              the mouse </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="activateevents" type="xs:string" default="['onmousedown']" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an array of events which will activate tracking. 
+           To override, you must declare as once. For example:
+           &lt;programlisting&gt;&amp;lt;attribute name="activateevents" value="['onmouseover']" when="once"/&amp;gt;&lt;/programlisting&gt;
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="shadowbox" type="lzx:shadowbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A basic container view with an inner dropshadow effect.
+        &lt;example executable="false"&gt;
+            &amp;lt;shadowbox width="200" height="200"&amp;gt;
+                &amp;lt;view bgcolor="red" width="200" height="200"/&amp;gt;
+            &amp;lt;/shadowbox&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="shadowbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowleft" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ display shadow along left side </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="edgecolor_tl" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor of one pixel wide border on right and bottom sides only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="edgecolor" type="xs:string" default="0xD9D9D9" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor of one pixel wide border on right and bottom sides only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textformat" type="lzx:textformat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    An object to specify the format of a text object.  Used only in 
+    Javascript by richinputtext.setTextFormat.
+    @shortdesc Formats rich text
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="textformat" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="url" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="underline" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="target" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="size" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="leading" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="italic" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="indent" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    An object to specify the format of a text object.  Used only in 
+    Javascript by richinputtext.setTextFormat.
+    @shortdesc Formats rich text
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="bold" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boxview" type="lzx:boxview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+                implements the CSS box model in a view that allows for margins, padding, and a border.
+                Allows for an italized title.
+                By default functions the same as a view, but has a 1 pixel black border.
+                v1.0 - Original
+                v1.1 - Bugfix added " - parent.parent.vTitle.height" to vPadding height on !_contentheight state
+                @author Brad Erickson
+         </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="boxview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Italized title of the view, appears in upper left </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paddingsize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the padding </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="marginsize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the margin </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentbgcolor" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the element, default is transparent</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="xs:string" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the border, default is black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="virtualdrawview" type="lzx:virtualdrawview" >
+</xs:element>
+  <xs:complexType name="virtualdrawview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="miny" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="markers" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabelement" type="lzx:tabelement" >
+</xs:element>
+  <xs:complexType name="tabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabelement">
+      <xs:attribute name="text_y" type="xs:string" default="${this.top.header.height/2 - this.top.header.txt.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the text field in the header area. Default is centered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the text field in the header area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowvisible" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to set the shadow of this tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowheight" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the shadow. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="${parent.inset_top}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_top value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="${parent.inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_right value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="${parent.inset_left}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_left value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="${parent.inset_bottom}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_bottom value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="headerpadding" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Insets the header art on the x-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorrow" type="lzx:colorrow" >
+</xs:element>
+  <xs:complexType name="colorrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="axisstyle" type="lzx:axisstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for axis
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="axisstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="direction" type="xs:string" default="y | x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ direction of the axis: x or y </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoplayer" type="lzx:videoplayer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ provides standard UI controls for video playback
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoplayer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ url of the stream to play
+              see mediastream for details </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ type of stream: 'http' or 'rtmp', 
+              see mediastream for details </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="${vscreen.ms}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a reference to the stream to enable direct control,
+              such as vp.steam.play or vp.stream.seek(20) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Show the frame from this time (in seconds) whenever the url 
+            is set for video playback.
+            Use -1 to show no frame (which will leave the image as it
+            was when switching videos) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderTop" type="xs:string" default="${             this.height - (this.borderBottom + this.sliderHeight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ internal: derived from public attributes 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderHeightVal" type="xs:string" default="16" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ see note above 
+          @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderHeight" type="xs:string" default="${             this.showslider ? this.sliderHeightVal : 0}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the controls stretch to this height, but I don't see a test
+              for this and I can't imagine it looks good so I'm marking
+              this private
+          @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderGap" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the vertical space between the video image and the controls </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showslider" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ why would you want this? no test case, marking private 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showscreen" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ why would you want this? no test case, marking private 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showVolumeControl" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, display a volume control </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showTimeDisplay" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, display the current and total time </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="screenWidth" type="xs:string" default="${             this.width - (this.borderLeft + this.borderRight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ internal: derived from public attributes 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progressColor" type="xs:string" default="0x00ff00" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the progress bar </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true for verbose debug logging </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderTop" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the top border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRight" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the right border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderLeft" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the left border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderBottom" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the bottom border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the border around the video image.  Default: 5 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ when true, playback will start automatically
+              without user action </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="$once{4/3}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if non-zero, then this will be used to maintain the
+              aspect ratio based on the width of the videoscreen.
+              Default: 4/3
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datastylelist" type="lzx:datastylelist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of datastyle
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datastylelist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegrid" type="lzx:basegrid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract container for data rows, relying on lazy replication
+          to make it possible to display large datasets.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basegrid" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="spacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between the rows. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sizetoheader" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A boolean. If true, the grid will keep its width set to the size
+              of the header. This is automatically set to true for grids that
+              do not have a set width.  This is initially set to 0, which means
+              that it is not true, but if it is explicitly set to false, the
+              automatic behavior will be disabled for grids with no set
+              width.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvlines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be drawn (in component's style's bordercolor)
+              horizontally at each at each row division. This attribute cannot
+              be set after instantiation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height of the grid to show a maximum of 'n' items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhlines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be drawn (in component's style's bordercolor)
+              vertically at each at each column division. This attribute can be
+              set after instantiation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the rows are not clickable and the grid does not support selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rowheight" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Optional height for the rows contained by the grid. If no
+              value is given for this attribute, it will be set to the
+              calculated height of rows. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when the grid selection changes.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the list will allow for multiple selection, and the 
+              getSelection method will always return a list. If false, only
+              single selection is allowed.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hilite" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view which is currently hilited.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentdatapath" type="xs:string" default="*" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The datapath to use for the contents of the grid. By
+              default, this is set to "*", meaning all of the nodes underneath
+              the datacontext of the grid. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columns" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array holding the basegridcolumns used by this grid </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor1" type="lzx:color" default="$immediately{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, sets the bgcolor for odd numbered rows. If not given,
+              the bgcolor for these rows is taken from the style's bgcolor.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor0" type="lzx:color" default="$immediately{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, sets the bgcolor for even numbered rows. If not given,
+              the bgcolor for these rows is taken from the style's bgcolor.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalaxis" type="lzx:verticalaxis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the Y axis on the rectangular chart, extends from Axis class
+     @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="verticalaxis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:axis">
+      <xs:attribute name="datacolumn" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="DebugObject" type="lzx:DebugObject" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  DebugObject is a base class for all the other classes in LZUnit that
+  supports the debugging of LZUnit itself.
+
+  @keywords public
+
+  @param Boolean debugWrite: Whether or not to emit debugging statements.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="DebugObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="debugWrite" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether or not to emit debugging statements </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoslider" type="lzx:videoslider" >
+</xs:element>
+  <xs:complexType name="videoslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="waspaused" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="volume" type="xs:string" default="${this.controls.volumebutton.volume}" >
+</xs:attribute>
+      <xs:attribute name="value" type="xs:string" default="${this.tracking ? this.trackvalue : this.sourcevalue}" >
+</xs:attribute>
+      <xs:attribute name="trackvalue" type="xs:string" default="0.0" >
+</xs:attribute>
+      <xs:attribute name="tracktime" type="xs:string" default="${this.trackvalue * this.totaltime}" >
+</xs:attribute>
+      <xs:attribute name="trackingDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="timedisplay" type="xs:string" default="${this.tracking ? this.tracktime : this.time}" >
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="sourcevalue" type="xs:string" default="${this.time / (this.totaltime || 1.0)}" >
+</xs:attribute>
+      <xs:attribute name="showVolumeControl" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showTimeDisplay" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="ms" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" default="0x00ff00" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="barchart" type="lzx:barchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A chart class that renders horizontal bars.
+      Inherits from the chart class.  (Warning: Of beta quality.)
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="barchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechart">
+      <xs:attribute name="staggerticks" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to alternate lengths of tick lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondrawaxis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Refreshes drawn chart when direction changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barspace" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="anicomplete" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dataclip is a view at a fixed size (plotwidth and plotheight, with location
+            set by plotx and ploty) that contains an internal view with all the points,
+            lines and labels.  As the internal view datapane is scalable and able to be
+            dragged around once scaled, it needs to be clipped. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="font" type="lzx:font" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Tag for including fonts.
+The &lt;font&gt; tag is used to import fonts into an LZX application. Each font in an LZX application has a source file (in TrueType format), a name, and a style (plain, bold, italic, or bold italic).
+
+A font element within a &lt;canvas&gt; or &lt;library&gt; defines a font, which can be referenced by the font attribute of a view, or by the face attribute of the &lt;font&gt; tag within HTML markup. A font element can define a single font face or style, by using the src attribute to refer to a TrueType font that is included in the application. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="font" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="size" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Tag for including fonts.
+The &lt;font&gt; tag is used to import fonts into an LZX application. Each font in an LZX application has a source file (in TrueType format), a name, and a style (plain, bold, italic, or bold italic).
+
+A font element within a &lt;canvas&gt; or &lt;library&gt; defines a font, which can be referenced by the font attribute of a view, or by the face attribute of the &lt;font&gt; tag within HTML markup. A font element can define a single font face or style, by using the src attribute to refer to a TrueType font that is included in the application. 
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="face" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="gridtext" type="lzx:gridtext" >
+</xs:element>
+  <xs:complexType name="gridtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:gridcolumn">
+      <xs:attribute name="textalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Type of content's alignment.
+              Possible values are: left, center, right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether one is able to select the text.  (Only applies
+            if the grid isn't editable, because when it's editable,
+            the text is automatically selectable.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editing" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="editbox" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, the field will not be editable. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileuploadlist" type="lzx:fileuploadlist" >
+</xs:element>
+  <xs:complexType name="fileuploadlist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ select file or not</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Events</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncomplete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="maxsize" type="xs:string" default="15000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Max file size  unit: bytes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="erroroccured" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error occured </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="class" type="lzx:class" >
+</xs:element>
+  <xs:complexType name="class" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isRoot" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="implements" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="extends" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listitem" type="lzx:listitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A simple listitem that is usually declared inside of a list. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="focusoverlay" type="lzx:focusoverlay" >
+</xs:element>
+  <xs:complexType name="focusoverlay" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefocusview">
+      <xs:attribute name="offset" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the offset is used by the brackets to 'offset' themselves from the
+              bounding rect of the focusoverlay. The bounce effect is achieved
+              by animating this parameter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contextmenuitem" type="lzx:contextmenuitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A menu item within a context menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="contextmenuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="visible" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the visibility of the menu item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="separatorbefore" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Draw a horizontal separator line before this item in the menu. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Sets the enabled status of the menu item. If false, the menu item is grayed out and will not respond to clicks  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Sets the delegate which will be called when the menu item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="caption" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		Sets the text which is displayed for the menu item</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuitem" type="lzx:menuitem" >
+</xs:element>
+  <xs:complexType name="menuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="command" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the command object assigned to be executed when this menuitem is selected </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedragimage" type="lzx:basedragimage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the visual representation of an object being dragged.
+        See &lt;xref linkend="lz.checkdragstate"/&gt; for usage details 
+        @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedragimage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dropgroup" type="xs:string" default="droptarget" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the group that drop targets will register with </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabslider" type="lzx:basetabslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class is a non-visual container that animates and coordinates the
+          sliding of basetabelements. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The spacing of the tabs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="slideduration" type="xs:string" default="300" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The duration of the tabs openning and closing. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mintabheight" type="xs:string" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default height of every tab when closed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ZoomPolygon" type="lzx:ZoomPolygon" >
+</xs:element>
+  <xs:complexType name="ZoomPolygon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:polygonhotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="map" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whitestyle" type="lzx:whitestyle" >
+</xs:element>
+  <xs:complexType name="whitestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bigcheckbox" type="lzx:bigcheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basecheckbox implementation representing a boolean, i.e., checked
+          if true, else false. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="bigcheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecheckbox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="backcircle" type="lzx:backcircle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background circle of the pie.  Has properties set by attributes on the
+        respective dataseries. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="backcircle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="pieradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color of the circle. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="0xCCCCCC" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background color of the circle. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ctry" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The center y coordinate of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ctrx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The center x coordinate of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the circle's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="window" type="lzx:window" >
+</xs:element>
+  <xs:complexType name="window" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:windowpanel">
+      <xs:attribute name="resizable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a resize control will appear in the lower-right corner,
+              allowing the user to resize the window. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseedittext" type="lzx:baseedittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This component provides the look and feel for user editable text, data
+          binding, and focus events. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseedittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="pattern" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An expression to restrict the set of characters that are allowed
+              to be entered. For example, [0-9]*, [012]*, [a-zA-Z]*,
+              [0-9A-Z]*. You can restrict the number of characters using
+              maxlength. Default is any character. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="password" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for a password field. Text will appear as ****. 
+              This attribute cannot be changed at runtime.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onpattern" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for multiple lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of chars that can be entered. Default is
+              unlimited. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestCase" type="lzx:TestCase" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  TestCase implements an individual test case.
+
+  See the documentation for &lt;xref linkend="lz.TestSuite"/&gt;
+  for an example of this tag.
+
+  @param testName: the name of the test
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="TestCase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:Test">
+      <xs:attribute name="testnames" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickercombobox" type="lzx:datepickercombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickercombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="marker" type="lzx:marker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+         data marker class </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="marker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="droptarget" type="lzx:droptarget" >
+</xs:element>
+  <xs:complexType name="droptarget" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="replicator" type="lzx:replicator" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a declared replicator for visual elements. Unlike
+        OpenLaszlo''s data-replication feature, a replicator can take an
+        arbitrary node set that may be passed in as an array.
+        Non-replicating elements may be used inside a replicator; only
+        the last child inside the replicator is replicated.
+
+        The data attribute of the replicated (cloned) view is set by the
+        setData method with data from the nodes array when the clone is
+        bound. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="replicator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="xpath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Compute nodes from this xpath query against the specified dataset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each replicated view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="replicatedsize" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size (width or height) in the replication axis of the view
+            being replicated.  Assumes all subviews have same replicated size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pool" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, then instances of the replicated instance are reused
+            when possible </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onnodes" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="nodes" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The list of nodes over which this replictor acts </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mask" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will clip the replicated nodes.  Defaults to the immediateparent of the container </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataset" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Compute nodes from this dataset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="container" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will contain the replicated nodes.  Defaults to the immediateparent of the replicator. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clones" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The list of elements controlled by this repliator </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which to replicate</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lzhdrag" type="lzx:_dbg_lzhdrag" >
+</xs:element>
+  <xs:complexType name="_dbg_lzhdrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" default="${this.immediateparent.getMouse( 'x' ) - this.xdoffset}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legendtitle" type="lzx:legendtitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title for the legend.  This is its own small class because it
+        makes constraints easier for adjustments. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legendtitle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ttsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's font size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tposit" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's alignment.  (left, right, center) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text for the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="defaultlistitem" type="lzx:defaultlistitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text list item that displays a default </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="defaultlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="default_y" type="xs:string" default="$once{this.height/2 - this.defaultlabel._default.height/2}" >
+</xs:attribute>
+      <xs:attribute name="default_x" type="xs:string" default="40" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ x position of default label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="SyncTester" type="lzx:SyncTester" >
+</xs:element>
+  <xs:complexType name="SyncTester" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:TestCase">
+      <xs:attribute name="tested_object" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Refers to object to be tested; this is dependent on specific test run
+     @keywords required
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="del" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="current_method" type="xs:string" default="${cur_meth.xpathQuery('@name')}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Helps keep track of currently executed method
+     @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataseries" type="lzx:dataseries" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+          
+        A dataseries in a container for dataseries and datacolumn.
+        dataseries can be nested.
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataseries" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ydatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data to be linked to the y axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xdatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data to be linked to the x axis.  (Also used for piechart data.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (To be developed:) Whether a tooltip is available onmouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showlegendminimized" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to show the legend when the chart is minimized, when
+            there are multiple charts. (It is strongly recommended this
+            be set to false for multiple pies.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radiusadjust" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether certain pieces should have radii different from the
+            overall pie, and if so, how much shorter or longer, percentage-wise.
+            (e.g. A value of 10 would mean 10% greater a radius.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointsvisible" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw points, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointshape" type="xs:string" default="square" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ What shape to make the point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointopacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointdiameter" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointborderwidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border around the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointborder" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw borders around points, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piebgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether the area behind the pie is colored, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linethickness" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The thickness of the line from the last point to the current point.
+            If using data for this attribute, this will determine the thickness
+            of the line from the last point to the current point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linesvisible" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line between points, and if so, which color.
+            If using data for this attribute, this will determine whether
+            to draw a line from the last point to the current point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title of the legend.  If not null, appears at the top of
+            the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendhl" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onmouseover highlight for legend elements. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legenddatapath" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The location of the data to be used in the legend.  If unspecified,
+            the numerical values of the piechart will be used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the legend border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the legend border, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendbg" type="lzx:color" default="#CCCCCC" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the legend, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legend" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether or not there's a legend associated with this data.
+            Values: top, bottom, left, right,
+            manualtop, manualbottom, manualleft, manualright. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltextsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of a label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltextcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of a label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolor" type="lzx:color" default="#EEEEEE" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborderwidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of a label's border.  (Set 0 for none.)</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborder" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of a label's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label of the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillbelow" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to fill beneath the line, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fbopacity" type="xs:string" default=".2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the filled area below the line. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether the pieces should move away from the center on mouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw an outline around the background circle's
+            circumference, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background circle, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataseriesleafs" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+            cache a leaf nodes of the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Bar resource, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataopacity" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Opacity of the bar, line or pie piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataenabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Is this series of data enabled? </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolumnsmap" type="xs:string" default="$once{new Object()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+            cache the a hashtable of datacolumn </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolor" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the line, bar or pie piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of each piece's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of each piece's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Thickness of the background circle's circumference outline. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabels" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw labels at the bases of bars, and
+            what data to use.  No labels are drawn if not specified. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabelangle" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Angle of baselabels.  (Determines rotation of tick labels
+            at the bases of bars.  Not compatible with DHTML.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animationinit" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a bar has animation.  Currently only works
+            for bars, but may eventually be worked into other
+            chart types. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inspector" type="lzx:inspector" >
+</xs:element>
+  <xs:complexType name="inspector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basewindow" type="lzx:basewindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basewindow class defines methods, attributes that are used by window
+      subclasses.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basewindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="ydoffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+</xs:attribute>
+      <xs:attribute name="state" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The state of the window: 1=selected (frontmost) window,
+              2=not-selected window, 3=dragging, 4=disabled, 5=resizing.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starty" type="xs:string" default="$once{this.y}" >
+</xs:attribute>
+      <xs:attribute name="startx" type="xs:string" default="$once{this.x}" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="xs:string" default="60" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum width for the window.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="xs:string" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum height for the window.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haswindowfocus" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if the window is frontmost. Set this
+              attribute to bring the window to the fore of its sibling
+              windows, and bring window focus.
+              @keywords defaultsetter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowdrag" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute handles whether window can be dragged or not </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videothumbnail" type="lzx:videothumbnail" >
+</xs:element>
+  <xs:complexType name="videothumbnail" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+</xs:attribute>
+      <xs:attribute name="thumbnailtime" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleinputtext" type="lzx:simpleinputtext" >
+</xs:element>
+  <xs:complexType name="simpleinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text for input. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusborderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the border on focus. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="blurborderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the border on blur. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the input background. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ulink" type="lzx:ulink" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A class for URL links.
+    
+    This differs from the use of the XHTML &amp;lt;a&amp;gt; attribute, e.g in '&amp;lt;text&amp;gt;&amp;lt;a href="http://openlaszlo.org"&amp;gt;OpenLaszlo.org&amp;lt;/a&amp;gt;lt;/text&amp;gt;', in these ways:
+    - There is a hover effect.  (This defaults to underline.)
+    - There is a hover color.  (This defaults to blue.)
+    - The link content and target can be databound. 
+    
+    &lt;example executable="false"&gt;
+      &amp;lt;ulink href="http://openlaszlo.org"&amp;gt;OpenLaszlo.org&amp;lt;/ulink&amp;gt;
+    &lt;/example&gt;
+    
+    See ulink-test.lzx for additional examples. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ulink" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of the link. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="target" type="xs:string" default="_new" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where the target opens.  See lz.Browser.loadURL for
+    a list of values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The URL target. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hoverTags" type="xs:string" default="u" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list of tags that are applied to the link when
+    it is hovered.  This is either a list of tag names, e.g. "u"
+    or "u b", or the HTML itself, e.g. "&amp;lt;u&amp;gt;". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hoverColor" type="lzx:color" default="blue" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color when the link is hovered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="blue" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color when the link is &lt;em&gt;not&lt;/em&gt; being hovered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="state" type="lzx:state" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A description of an instance hierarchy that can be applied and removed at runtime.
+JavaScript: lz.state 
+
+A state is an object that holds its children and attributes for creation or application at a later time when the state's apply method is called. In addition to representing visual state by adding and removing children from a view, states are often used to control constraints which are applied and removed at different times during the run of an application.
+
+For the most part, the declarative style used in OpenLaszlo applications represents an initial state for the application. All modification to application state can be made using the script API's, but it is often convenient to declaratively describe a bit of application state which may be selectively applied or removed at runtime. The &lt;state&gt; tag is provided for this purpose.
+
+Everything within a &lt;state&gt; tag acts as if it were written inside the parent when the state is applied. States can contain attributes, methods, and other nodes.
+
+When a state is removed, any children or constraints created when the state was applied are then removed, but attributes that were set by the application of the state are not restored. 
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="state" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="pooling" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        If true, the state will merely hide any views it has created when it is removed (not applied), instead of destroying them. 
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applied" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+        Whether or not the state is applied. setAttribute('applied', true) will apply the state. setAttribute('applied', false) will remove the state.
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="attribute" type="lzx:attribute" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets an attribute of the object that contains it. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="attribute" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="value" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The initial value of the attribute. The type of this value is specified by the value of the type attribute; if that attribute is not present, it's the type of this attribute in this element's tag. The attribute is given this value when the element is created. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="style" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The CSS property name that can be used to set the value of this attribute under the control of a &lt;stylesheet&gt; (See Chapter 19. Cascading Style Sheets ). style can be any valid CSS property name, and need not be the same as the attribute name; for example you could use the standard CSS property name background-color as the style of the bgcolor attribute. When an attribute has a style property, the value property acts as the default value for the attribute: in the absence of any applicable CSS rule specifying the corresponding property, the attribute will be given the default value. In the case of dynamic CSS, the attribute will revert to the default value if CSS was applied and is removed. (See Dynamic CSS .) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="setter" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Delegate the event to a method on changes through setAttribute('...',$value) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="required" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if this is a required attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" use="required" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allocation" type="xs:string" default="instance|class" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of:
+class
+    The attribute will be an attribute of the class; to refer to it, you say lz.classname.attributename . 
+instance
+    Each instance will have an attribute with the specified properties ( name , type , value , etc.). 
+
+You can set allocation to class to get static attributes. Static properties are attached to the class itself, for example lz.classname . </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="streamscrubber" type="lzx:streamscrubber" >
+</xs:element>
+  <xs:complexType name="streamscrubber" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the stream to control </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrubbing" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true when user has the mouse down and is scrubbing the stream </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="min" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ min 'x' value, defaults to zero (typically the left side of parent) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="$once{parent.width-this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max 'x' value, defaults to the right side of the parent </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stringvalidator" type="lzx:stringvalidator" >
+</xs:element>
+  <xs:complexType name="stringvalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="minLength" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minErrorstring" type="xs:string" default="this string is shorter than the minimum allowed length." >
+</xs:attribute>
+      <xs:attribute name="maxLength" type="lzx:number" default="255" >
+</xs:attribute>
+      <xs:attribute name="maxErrorstring" type="xs:string" default="this string is longer than the maximum allowed length." >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="LzDebugWindow" type="lzx:LzDebugWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    The Laszlo debugger window. An instance will be automatically
+    instantiated when the application is compiled in debug mode
+    (requested by either using the
+    &lt;code&gt;canvas&lt;/code&gt; &lt;code&gt;debug&lt;/code&gt; attribute or by loading the
+    application using the &lt;code&gt;?debug=true&lt;/code&gt; option).  
+
+    @keywords private_constructor
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="LzDebugWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="smallInputAreaHeight" type="xs:string" default="29" >
+</xs:attribute>
+      <xs:attribute name="savedYPos" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="savedXPos" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="savedWidth" type="xs:string" default="340" >
+</xs:attribute>
+      <xs:attribute name="savedInputAreaHeight" type="xs:string" default="53" >
+</xs:attribute>
+      <xs:attribute name="savedHeight" type="xs:string" default="125" >
+</xs:attribute>
+      <xs:attribute name="resizable" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="persist" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="minimized" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="lineheight" type="xs:string" default="13" >
+</xs:attribute>
+      <xs:attribute name="lastpart" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="keep_width_on_canvas" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="keep_height_on_canvas" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="evalloader" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="default_width" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="default_height" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="debuggerBorderWidth" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="consoleRemote" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="commandhistory_ptr" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="commandhistory" type="xs:string" default="[]" >
+</xs:attribute>
+      <xs:attribute name="closeable" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="clientBridge" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="layout" type="lzx:layout" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    layout.lzx
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @topic LFC
+    @subtopic Controllers
+    @affects lzlayout
+    @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="layout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="vip" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private
+ * Just used to effect a type cast of immediateparent to LzView 
+ * TODO [max 2010-07] add LzView type back when possible
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="updateDelegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A delegate used to update the layout.
+      @type LzDelegate
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subviews" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Array of the views this layout controls. Used by subclasses of
+     &lt;code&gt;layout&lt;/code&gt; to implement their arrangement algorithm by
+     adjusting the appropriate attribute of each view.
+    
+     @type [LzView]
+     @access public
+   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="locked" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Set to true if layout is locked from updates.
+    
+     @devnote locked is set to 2 in the prototype of the layout. This
+     is a special signal that the layout is locked temporarily until
+     it resolves its references
+    
+     @type Boolean
+   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueregion" type="lzx:valueregion" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Represents a region of values in the chart
+        @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueregion" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="tipEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the value region's tooltip </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tip label that appear when the mouse is over the value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="regionEnabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the rendering of the value region in the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label of the value region, it is shown next to the region </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data2" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum value for the Value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data1" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum value for the Value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the associated axis to the Region can be"x" or "y" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="grid" type="lzx:grid" >
+</xs:element>
+  <xs:complexType name="grid" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basegrid">
+      <xs:attribute name="showvscroll" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the grid will never show a vertical scrollbar,
+            even if the rows are wider than the grid.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhscroll" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the grid will never show a horizontal scrollbar,
+              even if the rows are wider than the grid.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="goldstyle" type="lzx:goldstyle" >
+</xs:element>
+  <xs:complexType name="goldstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="treeselector" type="lzx:treeselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Selection manager used by tree. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="treeselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="multiselect" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.  When the
+              shift key is down, a range of items is selected.  When the control
+              key is down, any item may be added to the selection. Default is
+              false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lztextscroller" type="lzx:_dbg_lztextscroller" >
+</xs:element>
+  <xs:complexType name="_dbg_lztextscroller" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="visiblelines" type="xs:string" default="4" >
+</xs:attribute>
+      <xs:attribute name="thumbheight" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="textlines" type="xs:string" default="[]" >
+</xs:attribute>
+      <xs:attribute name="lineptr" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="arrowbuttonheight" type="xs:string" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabs" type="lzx:basetabs" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base tabs object. This is the outermost containing component
+          within which there are a basetabsbar and the basetabscontent. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="tabclass" type="xs:string" default="basetab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate tab items for basetabsbar. Can be
+              overridden by basetabpane.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentclass" type="xs:string" default="basetabscontent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate to contain basetabpanes.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to basetab's content area. This is where all
+              basetabpanes in tabs are placed.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the border surrounding a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barclass" type="xs:string" default="basetabsbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate to contain tab items.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bar" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to its basetabsbar. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resource" type="lzx:resource" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A tag that defines a media object that can be associated with a view. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resource" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offsety" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The y offset of a bitmap resource used for a custom cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offsetx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The x offset of a bitmap resource used for a custom cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name of a variable that will be set to this object when the application is started. If this element is directly within a canvas or library element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="datatip" type="lzx:datatip" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     tooltip is a tool tip to be use be the chart elements such as the plot area
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datatip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="list" type="lzx:list" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list containing listitems and providing selection capabilities. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="list" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Toggles the mousedown tracking. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of pixels that items should be spaced from one another. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of items that are displayed. This value will ignored if
+              this view attempts to draw past the canvas boundary. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollbarclassname" type="xs:string" default="vscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class to instantiate as our scrollbar.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackoutright" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event not used - declared to remove debugger warnings </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackoutleft" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event not used - declared to remove debugger warnings </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="24" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ minumum height of the list </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size in pixels for this list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_top" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the top border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_right" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the right border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_left" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the left border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_bottom" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the bottom border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a scrollbar will show up automatically when there are
+              more items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoview" type="lzx:videoview" >
+</xs:element>
+  <xs:complexType name="videoview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The url of the video, may be a relative URL, 
+            for example: "http://localhost/myvideo.flv", 
+            or simply "myvideo.flv".
+
+            When type="rtmp", the url is always relative the rtmpconnection.
+            (Use only when you are not explicitly declaring the mediastream.)
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Protocol "rtmp" or "http". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The mediastream object.  A mediastream will be automatically generated if one is not specified at init time. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Show the frame from this time (in seconds) whenever the url 
+          is set for video playback.
+          Use -1 to show no frame (which will leave the image as it
+          was when switching videos) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playvolume" type="xs:string" default="1.0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The volume for video playback, a float from 0 to 1. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mic" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The microphone object. 
+            @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, Debug.write extra stuff (this may go away). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cam" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The camera object. 
+            @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="buffertime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="timevalidator" type="lzx:timevalidator" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ timevalidator class </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="timevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="separator" type="xs:string" default=":" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Separator must be the same as specified in "format" attribute
+              it's needed to prevent input with different separator </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="invalidformatErrorstring" type="xs:string" default="Please input the time in a valid format" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The five attributes above are five different message errors </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="invalidSeparatorErrorstring" type="xs:string" default="Please enter a valid separator" >
+</xs:attribute>
+      <xs:attribute name="invalidSecondsErrorstring" type="xs:string" default="Please enter seconds between 0 and 59" >
+</xs:attribute>
+      <xs:attribute name="invalidMinutesErrorstring" type="xs:string" default="Please enter minutes between 0 and 59" >
+</xs:attribute>
+      <xs:attribute name="invalidHourErrorstring" type="xs:string" default="Please enter hour between 0 and 23" >
+</xs:attribute>
+      <xs:attribute name="incongruentSeparatorErrorstring" type="xs:string" default="Warning! Two different separators are defined in format and separator attribute" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Warning message when the two attribute "format" and "separator" have different separator's char </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="format" type="xs:string" default="hh:mi:ss" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The time format attribute. Default: hh:mi:ss
+              hh = hour
+              mi = minutes
+              ss = seconds 
+              The separator must be the same ss specified in "separator" attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="floatinglist" type="lzx:floatinglist" >
+</xs:element>
+  <xs:complexType name="floatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefloatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_horiz_scrollbar" type="lzx:_dbg_horiz_scrollbar" >
+</xs:element>
+  <xs:complexType name="_dbg_horiz_scrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="thumbwidth" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="arrowbuttonwidth" type="xs:string" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlrpc" type="lzx:xmlrpc" >
+</xs:element>
+  <xs:complexType name="xmlrpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="service" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Required) XML-RPC service URL. The URL must be http. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="treenode" type="lzx:treenode" >
+</xs:element>
+  <xs:complexType name="treenode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseopttreenode">
+      <xs:attribute name="mousein" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fisheye_item" type="lzx:fisheye_item" >
+</xs:element>
+  <xs:complexType name="fisheye_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tooltip" type="xs:string" default="${this.text}" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="start_size" type="xs:string" default="${parent.start_size}" >
+</xs:attribute>
+      <xs:attribute name="old_y" type="xs:string" default="$once{canvas.getMouse('y')}" >
+</xs:attribute>
+      <xs:attribute name="old_x" type="xs:string" default="$once{canvas.getMouse('x')}" >
+</xs:attribute>
+      <xs:attribute name="myTooltipManager" type="xs:string" default="$once{parent.tooltipmanager}" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="halo_size" type="xs:string" default="${parent.halo_size}" >
+</xs:attribute>
+      <xs:attribute name="expanded_size" type="xs:string" default="${parent.expanded_size}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videotogglebutton" type="lzx:videotogglebutton" >
+</xs:element>
+  <xs:complexType name="videotogglebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="frameTable" type="xs:string" default="$once{             [1, 2, 1, 2, 3, 3, 3, 3]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This look-up table maps a state value to a frame index. 
+              Currently 2^3=8 states: 
+              over (2^0=1), tracking (2^1=2) and engaged (2^2=4). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="engaged" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataset" type="lzx:dataset" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An in-memory xml-style data hierarchy. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataset" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="type" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When set to "http" or "soap", the dataset interprets it's src attribute as a URL to be loaded at runtime. If the "src" attribute is set to a URL (e.g., starts with "http:") then the type attribute implicitly becomes "http".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="trimwhitespace" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will trim whitespace in the XML data (defaults to false).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="timeout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The numer of milliseconds to wait before the request times out, and an ontimeout event is sent. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The source for requests made by this dataset. The value can be a pathname or an absolute or relative URL. If the value is a URL (starts with "http:"), the dataset will be configured to load its data at runtime. Otherwise, the data is included inline into the application at compile time.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sel" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Selection state of this node, used by dataselectionmanager </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="secureport" type="lzx:number" default="443" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	TCP port number to use for secure (HTTPS) requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="request" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the datset will make a request upon initialization </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rawdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Holds raw data response string from data source </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="querytype" type="xs:string" default="GET" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+HTTP request method. Value must be one of "GET" or "POST". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="querystring" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A string to be appended to the request that the dataset makes.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyurl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The URL of the proxy server, for proxied requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sets whether or not the dataset makes its request directly to the target server or via the server proxy. Inherits value from canvas.proxied flag.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="postbody" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Used to send a string as the entire body of a POST request. For a POST request, setting postbody to a non-null string value will send that string as the complete body of the POST request. In this case any other query parameters that have been set via setQueryParam dataset will be ignored. The behavior of a GET request with a non-null postbody is not defined. Note, the swf8 runtime is forced to XML-quote the postbody, due to limitations in the Flash 8 player API. This restriction is not present in later swf runtimes, or in the DHTML runtime.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parentNode" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The parent of this node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="params" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An lz.Param object which holds query key-value pairs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ownerDocument" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The owner document for this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nsprefix" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will preserve namespace prefixes on data node names and attribute names  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeType" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The type of this node one of lz.DataElement.DOCUMENT_NODE, lz.DataElement.ELEMENT_NODE or lz.DataElement.TEXT_NODE </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeName" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The name of this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multirequest" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Create a new data request object for each request. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="getresponseheaders" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the proxy server (if making a proxied request) will encode and send the HTTP response headers along with the data (defaults to false). Due to a lack of a native API to get this information, SOLO SWF applications will always return an empty set. When making a proxied request, getresponseheaders must be true in order for the response headers to be retrieved via the getResponseHeader or getAllResponseHeaders methods.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Holds a pointer to the DataProvider which handles data load requests for this dataset. Default value is canvas.defaultdataprovider  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="credentialled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+When true, the withCredentials property on the XHR object will be set to true, allowing credentialled cross-origin resource sharing (CORS) requests. If withCredentials is not set for a CORS request using credentials, the browser will not set any cookies sent by the server. See http://www.w3.org/TR/cors/#access-control-allow-credentials-respons and http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-withcredentials-attribute for more information.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clientcacheable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	When true, data responses can be cached by the client (browser). When false, a unique valued argument will be added to the request string in the format '__lzbc__=1204685840777' to defeat the browser's cache.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="childNodes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of children of this node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cacheable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will attempt to cache response (defaults to false). There are security concerns when this field is true. When this field is true, you will usually want the getresponseheaders field to be false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autorequest" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, changes to src or querystring attributes cause doRequest() to be called automatically. If false, doRequest() must be called manually when src or querystring attributes change.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attributes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dictionary of attributes for this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="acceptencodings" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will accept encoded responses for this request. Encoded responses require more work for the LPS (encoding the response) and client (decoding the response) in trade for lower network bandwidth usage.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="minibutton" type="lzx:minibutton" >
+</xs:element>
+  <xs:complexType name="minibutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:stylishbutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="plainfloatinglist" type="lzx:plainfloatinglist" >
+</xs:element>
+  <xs:complexType name="plainfloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefloatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basechartbacking" type="lzx:basechartbacking" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base chart background class for rectangular charts.
+        (That is, not used in piechart.)  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basechartbacking" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="drawready" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The drawview responsible for drawing horizontal ticks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lwzendatepicker" type="lzx:lwzendatepicker" >
+</xs:element>
+  <xs:complexType name="lwzendatepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepicker">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:group name="topLevelElements">
+<xs:sequence>
+<xs:choice minOccurs="0" maxOccurs="unbounded">
+<xs:any />
+</xs:choice>
+</xs:sequence>
+</xs:group>
+</xs:schema>
diff --git a/WebContent/project.xsd b/WebContent/project.xsd
new file mode 100644
index 0000000..cb4bc03
--- /dev/null
+++ b/WebContent/project.xsd
@@ -0,0 +1,8472 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
+  targetNamespace="http://localhost/openlaszlo/project" 
+  xmlns:lzx="http://localhost/openlaszlo/lzx" 
+  xmlns:project="http://localhost/openlaszlo/project">
+<xs:import namespace="http://localhost/openlaszlo/lzx" schemaLocation="lzx.xsd"/><xs:element name="resultPollWin" type="project:resultPollWin" >
+</xs:element>
+  <xs:complexType name="resultPollWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomPoll" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="resultpollvotes" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="displayedPoll" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="archPolls" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerListPagingContent" type="project:innerListPagingContent" >
+</xs:element>
+  <xs:complexType name="innerListPagingContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDateSelector" type="project:baseDateSelector" >
+</xs:element>
+  <xs:complexType name="baseDateSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="year" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onyearSel" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmonthSel" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondoubleselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="monthnames" type="xs:string" default="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']" >
+</xs:attribute>
+      <xs:attribute name="firstdayinweek" type="lzx:number" default="$once{ canvas.firstdayinweek }" >
+</xs:attribute>
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editRecordStream" type="project:editRecordStream" >
+</xs:element>
+  <xs:complexType name="editRecordStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="remoteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="myvideocontainer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isSyncUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isInterview" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="doDefaultAnimation" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentClient" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenSetting" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenMic" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenCam" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalMenuIconBarPointer" type="project:horizontalMenuIconBarPointer" >
+</xs:element>
+  <xs:complexType name="horizontalMenuIconBarPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorPopup" type="project:errorPopup" >
+</xs:element>
+  <xs:complexType name="errorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="makeModal" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageForScreenViewer" type="project:imageForScreenViewer" >
+</xs:element>
+  <xs:complexType name="imageForScreenViewer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminareaForWeekView" type="project:terminareaForWeekView" >
+</xs:element>
+  <xs:complexType name="terminareaForWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="countX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="previousNextButton" type="project:previousNextButton" >
+</xs:element>
+  <xs:complexType name="previousNextButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorDay" type="project:dateSelectorDay" >
+</xs:element>
+  <xs:complexType name="dateSelectorDay" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="daydate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confmenucommand" type="project:confmenucommand" >
+</xs:element>
+  <xs:complexType name="confmenucommand" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:command">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseMenuSeperator" type="project:baseMenuSeperator" >
+</xs:element>
+  <xs:complexType name="baseMenuSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewModerationMiniIcons" type="project:interviewModerationMiniIcons" >
+</xs:element>
+  <xs:complexType name="interviewModerationMiniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthLetterSlider" type="project:changeWidthLetterSlider" >
+</xs:element>
+  <xs:complexType name="changeWidthLetterSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="tempValue" type="lzx:number" default="$once{ parent.initialNumber }" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="onplus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onminus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="right" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="initialNumberInit" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseModirPlain" type="project:drawChooseModirPlain" >
+</xs:element>
+  <xs:complexType name="drawChooseModirPlain" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelectablemodi" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toolTipCustomPic" type="project:toolTipCustomPic" >
+</xs:element>
+  <xs:complexType name="toolTipCustomPic" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelButtonTooltip" type="project:simpleLabelButtonTooltip" >
+</xs:element>
+  <xs:complexType name="simpleLabelButtonTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="tooltipId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsLeftPanel" type="project:mainToolsLeftPanel" >
+</xs:element>
+  <xs:complexType name="mainToolsLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconsEventUserList" type="project:moderationMiniIconsEventUserList" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconsEventUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="showAvIcons" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListTable" type="project:eventUserListTable" >
+</xs:element>
+  <xs:complexType name="eventUserListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userStatus" type="project:userStatus" >
+</xs:element>
+  <xs:complexType name="userStatus" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="statusText" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="statusColor" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tableListItem" type="project:tableListItem" >
+</xs:element>
+  <xs:complexType name="tableListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isdatarecord" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isaltered" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="changeholder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePagingListItem" type="project:basePagingListItem" >
+</xs:element>
+  <xs:complexType name="basePagingListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="itemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customEdittext" type="project:customEdittext" >
+</xs:element>
+  <xs:complexType name="customEdittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:edittext">
+      <xs:attribute name="regexpType" type="xs:string" default="none" >
+</xs:attribute>
+      <xs:attribute name="regexpLabelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="preText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onafterCheck" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isvalidInput" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="termindetails" type="project:termindetails" >
+</xs:element>
+  <xs:complexType name="termindetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="contact" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointmentId" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthSlider" type="project:changeWidthSlider" >
+</xs:element>
+  <xs:complexType name="changeWidthSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="tempValue" type="lzx:number" default="$once{ parent.initialNumber }" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="onplus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onminus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="right" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="429" >
+</xs:attribute>
+      <xs:attribute name="initialNumberInit" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceBrowser" type="project:conferenceBrowser" >
+</xs:element>
+  <xs:complexType name="conferenceBrowser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initedByUser" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="initURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreNextEvent" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="callBackJSDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="browserhistoryPre" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="browserhistoryPost" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomRemote" type="project:activityListRestrictedRoomRemote" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomRemote" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchContact" type="project:searchContact" >
+</xs:element>
+  <xs:complexType name="searchContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="vorname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="nachname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="testingApplication" type="project:testingApplication" >
+</xs:element>
+  <xs:complexType name="testingApplication" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timerIsRunning" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="recordingsCounter" type="lzx:number" default="5" >
+</xs:attribute>
+      <xs:attribute name="lastRecorded" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isRunning" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="counterDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListInviteUserItem" type="project:roomListInviteUserItem" >
+</xs:element>
+  <xs:complexType name="roomListInviteUserItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="starttime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomType" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="conferenceView" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxUsers" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="ispublic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isaudience" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkForMaxUsers" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileExplorer" type="project:fileExplorer" >
+</xs:element>
+  <xs:complexType name="fileExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="parentFolderId" type="lzx:number" default="-2" >
+</xs:attribute>
+      <xs:attribute name="onClose" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentTrackGroupName" type="xs:string" default="fileExplorer" >
+</xs:attribute>
+      <xs:attribute name="currentDragItem" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editWhiteboardDefault" type="project:editWhiteboardDefault" >
+</xs:element>
+  <xs:complexType name="editWhiteboardDefault" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ibutton" type="project:ibutton" >
+</xs:element>
+  <xs:complexType name="ibutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="overRsrcNumber" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="normalRsrcNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="mouseisdown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downRsrcNumber" type="lzx:number" default="3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseConferenceRoom" type="project:baseConferenceRoom" >
+</xs:element>
+  <xs:complexType name="baseConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+	  </xs:attribute>
+      <xs:attribute name="meetingTimer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListInner" type="project:eventUserListInner" >
+</xs:element>
+  <xs:complexType name="eventUserListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemResize" type="project:turnoverlistheaderitemResize" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemResize" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monthView" type="project:monthView" >
+</xs:element>
+  <xs:complexType name="monthView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="year" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="weekdaynames" type="xs:string" default="['So.','Mo.','Di.','Mi.','Do.','Fr.','Sa.']" >
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="monthnames" type="xs:string" default="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']" >
+</xs:attribute>
+      <xs:attribute name="firstdayinweek" type="lzx:number" default="$once{ canvas.firstdayinweek }" >
+</xs:attribute>
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorListItemView" type="project:monitorListItemView" >
+</xs:element>
+  <xs:complexType name="monitorListItemView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceMenubar" type="project:conferenceMenubar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Menu for public/private conference and audience room. This class shows 
+		exit, moderator, file, setteings and poll menu. Those menu items are connected 
+		to each command that has been declared in base/mainMethods.lzx. May 24 2008 
+		commented by onokeiji@gmail.com </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="conferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoBoard" type="project:videoBoard" >
+</xs:element>
+  <xs:complexType name="videoBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sponsorsPopUp" type="project:sponsorsPopUp" >
+</xs:element>
+  <xs:complexType name="sponsorsPopUp" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTab" type="project:chatTab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editUserProfile" type="project:editUserProfile" >
+</xs:element>
+  <xs:complexType name="editUserProfile" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentSaveView">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="userObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItem" type="project:turnOverListHeaderItem" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertySelector" type="project:basePropertySelector" >
+</xs:element>
+  <xs:complexType name="basePropertySelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="enabledView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boxPosition" type="xs:string" default="down" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ position of the SliderWin or ColorPicker </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="answerPoll" type="project:answerPoll" >
+</xs:element>
+  <xs:complexType name="answerPoll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomScopeName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomPollId" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomPollAnswerList" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollvalue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollTypesId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollTypeId" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollQuestion" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="createdBy" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentsLoaderIcon" type="project:documentsLoaderIcon" >
+</xs:element>
+  <xs:complexType name="documentsLoaderIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeltext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remoteWhiteboard" type="project:remoteWhiteboard" >
+</xs:element>
+  <xs:complexType name="remoteWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawSave">
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="loadingObjectListId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadingObjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadObjectDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isStarting" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawPaintTools" type="project:drawPaintTools" >
+</xs:element>
+  <xs:complexType name="drawPaintTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharedObject" type="project:sharedObject" >
+</xs:element>
+  <xs:complexType name="sharedObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="so" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onStatus" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorList" type="project:monitorList" >
+</xs:element>
+  <xs:complexType name="monitorList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="doubleclickEvent" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFilePDF" type="project:listPresentationFilePDF" >
+</xs:element>
+  <xs:complexType name="listPresentationFilePDF" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItem">
+      <xs:attribute name="swfName" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pdfname" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoStreamDevice" type="project:baseVideoStreamDevice" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	extends the baseVideoStream with functions to catch Device Events
+	this Class uses Events from the Base Class baseVideoStream
+	onmicro and oncamera, which are thrown, once a device was set
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoStreamDevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoStream">
+      <xs:attribute name="sendMicroStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendCameraStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+	Message to send to Clients
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="micactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Shows if there is Activity on the Microphone </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="level" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Audio level, 0-100, the amount of sound detected by this microphone.
+          Reset to 0 when there is no audio (no activity or not allowed).
+          @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isgreater" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+		indicates if the message should be send, you can change the notification 
+		level by changing the loudnessAcitviation in the public/config.xml
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="doSendNotification" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="camactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Shows if there is Activity on the Camera </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closableViewLetter" type="project:closableViewLetter" >
+</xs:element>
+  <xs:complexType name="closableViewLetter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userListItem" type="project:userListItem" >
+</xs:element>
+  <xs:complexType name="userListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="login" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragItemFileExplorer" type="project:dragItemFileExplorer" >
+</xs:element>
+  <xs:complexType name="dragItemFileExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="overItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="newParentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="moveToHome" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dragItemResource" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alreadySent" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelTooltip" type="project:labelTooltip" >
+</xs:element>
+  <xs:complexType name="labelTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="setContent" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="ismenubuttonlabel" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inittwice" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initByDataPathparent" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="browserButton" type="project:browserButton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="browserButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingSession" type="project:sharingSession" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    View for recorded contents list.
+    When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sharingSession" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sharingSessionObject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    View for recorded contents list.
+    When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sharerPublicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="registerToViewers" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="httpSessionStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentCursorObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="closeByRemote" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="devmediadevice" type="project:devmediadevice" >
+</xs:element>
+  <xs:complexType name="devmediadevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="itemKkk" type="project:itemKkk" >
+</xs:element>
+  <xs:complexType name="itemKkk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netparam" type="project:netparam" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Net parameter.
+        Element to use inside netremotecall.
+        @todo Document netparam class.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="netparam" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value of the netparam. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recorderClickMask" type="project:_recorderClickMask" >
+</xs:element>
+  <xs:complexType name="_recorderClickMask" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDoAndUndo" type="project:drawDoAndUndo" >
+</xs:element>
+  <xs:complexType name="drawDoAndUndo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="doredo" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabItemEmoticons" type="project:chatTabItemEmoticons" >
+</xs:element>
+  <xs:complexType name="chatTabItemEmoticons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="usercolor" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="picture_uri" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="leading" type="lzx:number" default="5" >
+</xs:attribute>
+      <xs:attribute name="isDirectLink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertyPanel" type="project:basePropertyPanel" >
+</xs:element>
+  <xs:complexType name="basePropertyPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIcons" type="project:miniIconSmybolExtraIcons" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewParticipentsTable" type="project:innerlistViewParticipentsTable" >
+</xs:element>
+  <xs:complexType name="innerlistViewParticipentsTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lineOnlyColorChoose" type="project:lineOnlyColorChoose" >
+</xs:element>
+  <xs:complexType name="lineOnlyColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingDialog" type="project:screenSharingDialog" >
+</xs:element>
+  <xs:complexType name="screenSharingDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="tObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastMouseY" type="lzx:number" default="-1" >
+</xs:attribute>
+      <xs:attribute name="lastMouseX" type="lzx:number" default="-1" >
+</xs:attribute>
+      <xs:attribute name="isWindows" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMouseOverActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMac" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isLinux" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="idleDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doSendEvents" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentCursorObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkboxIsinited" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="filesPanel" type="project:filesPanel" >
+</xs:element>
+  <xs:complexType name="filesPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="invitationQuickLoader" type="project:invitationQuickLoader" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="invitationQuickLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="userlang" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatOutputRoomsList" type="project:chatOutputRoomsList" >
+</xs:element>
+  <xs:complexType name="chatOutputRoomsList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="wmlFileExplorerItem" type="project:wmlFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="wmlFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+      <xs:attribute name="isWmlFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplebaseItemActivityList" type="project:simplebaseItemActivityList" >
+</xs:element>
+  <xs:complexType name="simplebaseItemActivityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tStamp" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rcl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawClipArt" type="project:baseDrawClipArt" >
+</xs:element>
+  <xs:complexType name="baseDrawClipArt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawArrow">
+      <xs:attribute name="minClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentClipArtRessourceName" type="xs:string" default="icons.png" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndx" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewConferenceMenubar" type="project:interviewConferenceMenubar" >
+</xs:element>
+  <xs:complexType name="interviewConferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listFolderDrag" type="project:listFolderDrag" >
+</xs:element>
+  <xs:complexType name="listFolderDrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="foldername" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="singletonErrorPopup" type="project:singletonErrorPopup" >
+</xs:element>
+  <xs:complexType name="singletonErrorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorPopup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iframeView" type="project:iframeView" >
+</xs:element>
+  <xs:complexType name="iframeView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iname" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iid" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iFrameJsStack" type="xs:string" default="javascript:" >
+</xs:attribute>
+      <xs:attribute name="createIFrame_callbackMax" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="createIFrame_callbackCounter" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="createIFrameDone_attr" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="callbackTimerDelay" type="lzx:number" default="100" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelerrorPopup" type="project:labelerrorPopup" >
+</xs:element>
+  <xs:complexType name="labelerrorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorPopup">
+      <xs:attribute name="errorlabelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawViewInner" type="project:drawViewInner" >
+</xs:element>
+  <xs:complexType name="drawViewInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorDayHeader" type="project:dateSelectorDayHeader" >
+</xs:element>
+  <xs:complexType name="dateSelectorDayHeader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="daynumber" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelPanel" type="project:labelPanel" >
+</xs:element>
+  <xs:complexType name="labelPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="weekbkgnd" type="project:weekbkgnd" >
+</xs:element>
+  <xs:complexType name="weekbkgnd" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistView" type="project:innerlistView" >
+</xs:element>
+  <xs:complexType name="innerlistView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="applyForModeration" type="project:applyForModeration" >
+</xs:element>
+  <xs:complexType name="applyForModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="applymessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="guiPresenter" type="project:guiPresenter" >
+</xs:element>
+  <xs:complexType name="guiPresenter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="defaulttitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Title of this Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizeable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresized" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this Event will be triggered after resizing </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onactivate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you do click on it and drag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimized" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="minimizable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="maximizable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="maxi_y" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_x" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_width" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_height" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isresizeing" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="ismaximized" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initialHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="hasshadow" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="customMinimizeMethod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="parentResultPollBalk" type="project:parentResultPollBalk" >
+</xs:element>
+  <xs:complexType name="parentResultPollBalk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textA" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="newX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newPercent" type="xs:string" default="0%" >
+</xs:attribute>
+      <xs:attribute name="answer" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomScreen" type="project:activityListRestrictedRoomScreen" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomScreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="questionCheckbox" type="project:questionCheckbox" >
+</xs:element>
+  <xs:complexType name="questionCheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="valBool" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar" type="project:calendar" >
+</xs:element>
+  <xs:complexType name="calendar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="terminareaObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="detailsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentSelection" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="contact" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointmentId" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePanel" type="project:basePanel" >
+</xs:element>
+  <xs:complexType name="basePanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rootFileExplorerItem" type="project:rootFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="rootFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basepanel" type="project:basepanel" >
+</xs:element>
+  <xs:complexType name="basepanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleTurnOverList" type="project:simpleTurnOverList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common simpleTurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleTurnOverList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ondblclickedItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mainBgColor" type="xs:string" default="0xEEF0EB" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorMonth" type="project:dateSelectorMonth" >
+</xs:element>
+  <xs:complexType name="dateSelectorMonth" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="month" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="firstweekNumber" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentMonthName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorPot" type="project:colorPot" >
+</xs:element>
+  <xs:complexType name="colorPot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolorString" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="mycolor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="listener" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentListItem" type="project:participentListItem" >
+</xs:element>
+  <xs:complexType name="participentListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitem" type="project:turnoverlistheaderitem" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseDrawAreaObjectWindow" type="project:chooseDrawAreaObjectWindow" >
+</xs:element>
+  <xs:complexType name="chooseDrawAreaObjectWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:explorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listV" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserList" type="project:restrictedUserList" >
+</xs:element>
+  <xs:complexType name="restrictedUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorSubListItem" type="project:monitorSubListItem" >
+</xs:element>
+  <xs:complexType name="monitorSubListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textitem" type="xs:string" default="def" >
+</xs:attribute>
+      <xs:attribute name="lableid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="itemid" type="xs:string" default="def" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItemSimple" type="project:turnOverListHeaderItemSimple" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItemSimple" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="pathOrder" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelBlueButton" type="project:labelBlueButton" >
+</xs:element>
+  <xs:complexType name="labelBlueButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemResizeWizzardRefresh" type="project:turnoverlistheaderitemResizeWizzardRefresh" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemResizeWizzardRefresh" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="openmeetingsTabButtonBackground" type="project:openmeetingsTabButtonBackground" >
+</xs:element>
+  <xs:complexType name="openmeetingsTabButtonBackground" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:roundRectGradient">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingScreenImage" type="project:sharingScreenImage" >
+</xs:element>
+  <xs:complexType name="sharingScreenImage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="imageCompleted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subMenuIconToolsToUpload" type="project:subMenuIconToolsToUpload" >
+</xs:element>
+  <xs:complexType name="subMenuIconToolsToUpload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refToolbar" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentSelected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentContainer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelExplorerBox" type="project:labelExplorerBox" >
+</xs:element>
+  <xs:complexType name="labelExplorerBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:explorerBox">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentsTabBar" type="project:documentsTabBar" >
+</xs:element>
+  <xs:complexType name="documentsTabBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="currentItem" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="paintMenu" type="project:paintMenu" >
+</xs:element>
+  <xs:complexType name="paintMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseToolbarMenu">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseErrorDialog" type="project:baseErrorDialog" >
+</xs:element>
+  <xs:complexType name="baseErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="errortext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="errorid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="addInfo" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseListPresentationItemExplorer" type="project:baseListPresentationItemExplorer" >
+</xs:element>
+  <xs:complexType name="baseListPresentationItemExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmoduleimgfolder" type="xs:string" default="$once{ canvas.uploadmoduleimgfolder }" >
+</xs:attribute>
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isoriginal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewListInner" type="project:interviewListInner" >
+</xs:element>
+  <xs:complexType name="interviewListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseToolbarMenu" type="project:baseToolbarMenu" >
+</xs:element>
+  <xs:complexType name="baseToolbarMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selectedButton" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoBoardAudience" type="project:videoBoardAudience" >
+</xs:element>
+  <xs:complexType name="videoBoardAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rpcErrorDialog" type="project:rpcErrorDialog" >
+</xs:element>
+  <xs:complexType name="rpcErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorDialog">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFileOrigExplorer" type="project:listPresentationFileOrigExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationFileOrigExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:listPresentationFilePDFExplorer">
+      <xs:attribute name="originalName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autoLoader" type="project:autoLoader" >
+</xs:element>
+  <xs:complexType name="autoLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="maxwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="maxsteps" type="lzx:number" default="19" >
+</xs:attribute>
+      <xs:attribute name="currentsteps" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="logoutConfirm" type="project:logoutConfirm" >
+</xs:element>
+  <xs:complexType name="logoutConfirm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="objectsToClean" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boxInitEffect" type="project:boxInitEffect" >
+</xs:element>
+  <xs:complexType name="boxInitEffect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ziely" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielx" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="zielheight" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentNotificationPopUp" type="project:appointmentNotificationPopUp" >
+</xs:element>
+  <xs:complexType name="appointmentNotificationPopUp" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventRoomSidebar" type="project:eventRoomSidebar" >
+</xs:element>
+  <xs:complexType name="eventRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedInputtext" type="project:borderedInputtext" >
+</xs:element>
+  <xs:complexType name="borderedInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="preText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monthViewAlt" type="project:monthViewAlt" >
+</xs:element>
+  <xs:complexType name="monthViewAlt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarTabs" type="project:calendarTabs" >
+</xs:element>
+  <xs:complexType name="calendarTabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:tabslider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertyPanelWhiteboard" type="project:basePropertyPanelWhiteboard" >
+</xs:element>
+  <xs:complexType name="basePropertyPanelWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="usersTable" type="project:usersTable" >
+</xs:element>
+  <xs:complexType name="usersTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="selectedDayLook" type="project:selectedDayLook" >
+</xs:element>
+  <xs:complexType name="selectedDayLook" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="open" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="dayview" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedMultiInputtext" type="project:borderedMultiInputtext" >
+</xs:element>
+  <xs:complexType name="borderedMultiInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="cursorObject" type="project:cursorObject" >
+</xs:element>
+  <xs:complexType name="cursorObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayScreenShare" type="project:videoObjectPlayScreenShare" >
+</xs:element>
+  <xs:complexType name="videoObjectPlayScreenShare" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="currentY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentX" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedFileExplorerWhiteboardPanel" type="project:fixedFileExplorerWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="fixedFileExplorerWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanelWhiteboard">
+      <xs:attribute name="whiteboardId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_labelMenu" type="project:_labelMenu" >
+</xs:element>
+  <xs:complexType name="_labelMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menu">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userTagView" type="project:userTagView" >
+</xs:element>
+  <xs:complexType name="userTagView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customInputtext" type="project:customInputtext" >
+</xs:element>
+  <xs:complexType name="customInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="singletonErrorPopupHolder" type="project:singletonErrorPopupHolder" >
+</xs:element>
+  <xs:complexType name="singletonErrorPopupHolder" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="error" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="dialogPresent" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="dialogObject" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="panelBoundBox" type="project:panelBoundBox" >
+</xs:element>
+  <xs:complexType name="panelBoundBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverTextItem" type="project:turnOverTextItem" >
+</xs:element>
+  <xs:complexType name="turnOverTextItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelRoundButtonIcon" type="project:simpleLabelRoundButtonIcon" >
+</xs:element>
+  <xs:complexType name="simpleLabelRoundButtonIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelRoundButton">
+      <xs:attribute name="tlabelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ressourceIcon" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="incomingScreenSharing" type="project:incomingScreenSharing" >
+</xs:element>
+  <xs:complexType name="incomingScreenSharing" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteConference" type="project:chatParticipantsInviteConference" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteConference" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpConnection" type="project:rtmpConnection" >
+</xs:element>
+  <xs:complexType name="rtmpConnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="src" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onconnect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastCalled" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="debug" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resultPollBalk" type="project:resultPollBalk" >
+</xs:element>
+  <xs:complexType name="resultPollBalk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceRoomSidebarTabButton" type="project:conferenceRoomSidebarTabButton" >
+</xs:element>
+  <xs:complexType name="conferenceRoomSidebarTabButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentIconRsc" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaObjectCombobox" type="project:drawAreaObjectCombobox" >
+</xs:element>
+  <xs:complexType name="drawAreaObjectCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+      <xs:attribute name="preselectedName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="modus" type="xs:string" default="${ this.parent.canvas._drawarea.drawmodus }" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaObjectValueBox" type="project:drawAreaObjectValueBox" >
+</xs:element>
+  <xs:complexType name="drawAreaObjectValueBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:borderedInputtext">
+      <xs:attribute name="posName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectTestBroadcast" type="project:videoObjectTestBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectTestBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendMicroStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendCameraStatus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainerStream" type="project:videoContainerStream" >
+</xs:element>
+  <xs:complexType name="videoContainerStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSizeRadio" type="project:drawChooseSizeRadio" >
+</xs:element>
+  <xs:complexType name="drawChooseSizeRadio" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiogroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="converterPopup" type="project:converterPopup" >
+</xs:element>
+  <xs:complexType name="converterPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomA" type="project:activityListRestrictedRoomA" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomA" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoFileExplorerItem" type="project:videoFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="videoFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverList" type="project:turnOverList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sendEventToReload" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="records" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="orderby" type="xs:string" default="firstname" >
+</xs:attribute>
+      <xs:attribute name="ondblclickedItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallpre" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallnext" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onUpdateOrder" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mainBgColor" type="xs:string" default="0xEEF0EB" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedOrder" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="languagesEditor" type="project:languagesEditor" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Language editor module. You can edit the label for your language. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="languagesEditor" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="tempValue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="language_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlCrmTooltipMulti" type="project:xmlCrmTooltipMulti" >
+</xs:element>
+  <xs:complexType name="xmlCrmTooltipMulti" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDrawarrowTools" type="project:drawDrawarrowTools" >
+</xs:element>
+  <xs:complexType name="drawDrawarrowTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hibRtmpConnection" type="project:hibRtmpConnection" >
+</xs:element>
+  <xs:complexType name="hibRtmpConnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:rtmpConnection">
+      <xs:attribute name="userobject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userlang" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="userScope" type="xs:string" default="hibernate" >
+</xs:attribute>
+      <xs:attribute name="testAppLoading" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sipLoader" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="showKickMessage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="showFullMessage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="room_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refreshDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectionAction" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="reconnectedRoomInstance" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectAfterRoomleft" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="publicSIDOfNewModerator" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="protocollPort" type="xs:string" default="$once{ canvas.rtmpport }" >
+</xs:attribute>
+      <xs:attribute name="protocollName" type="xs:string" default="rtmp" >
+</xs:attribute>
+      <xs:attribute name="mute" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="modus" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="1300" >
+</xs:attribute>
+      <xs:attribute name="loaderVar" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isClosed" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isAllowedToBroadCastAV" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="interviewPodId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initlanguageLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentroomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentdomainObj" type="xs:string" default="domain1" >
+</xs:attribute>
+      <xs:attribute name="currentdomain" type="xs:string" default="domain1" >
+</xs:attribute>
+      <xs:attribute name="currentInvitation" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the current Invitation-Object </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentHashSession" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="counterror" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="conferencedomain" type="xs:string" default="public" >
+</xs:attribute>
+      <xs:attribute name="canShare" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canDraw" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="avsettings" type="xs:string" default="av" >
+</xs:attribute>
+      <xs:attribute name="UserID" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawRect" type="project:baseDrawRect" >
+</xs:element>
+  <xs:complexType name="baseDrawRect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawSelect">
+      <xs:attribute name="currentrectanglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentrectangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentrectangleOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="paintToolsPalette" type="project:paintToolsPalette" >
+</xs:element>
+  <xs:complexType name="paintToolsPalette" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="testSetup" type="project:testSetup" >
+</xs:element>
+  <xs:complexType name="testSetup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isDirectLink" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="forceTest" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragItemFLVExplorer" type="project:dragItemFLVExplorer" >
+</xs:element>
+  <xs:complexType name="dragItemFLVExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="overItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="newParentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dragItemResource" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alreadySent" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentMonth" type="project:appointmentMonth" >
+</xs:element>
+  <xs:complexType name="appointmentMonth" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textbox" type="project:textbox" >
+</xs:element>
+  <xs:complexType name="textbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="bordercolor" type="xs:string" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatInnerSmily" type="project:chatInnerSmily" >
+</xs:element>
+  <xs:complexType name="chatInnerSmily" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconlabel" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationThumb" type="project:listPresentationThumb" >
+</xs:element>
+  <xs:complexType name="listPresentationThumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItem">
+      <xs:attribute name="thumbname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="no" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="aquaButton" type="project:aquaButton" >
+</xs:element>
+  <xs:complexType name="aquaButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelTextWidthTooltip" type="project:labelTextWidthTooltip" >
+</xs:element>
+  <xs:complexType name="labelTextWidthTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="labelLabelid" type="lzx:number" default="-1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participents" type="project:participents" >
+</xs:element>
+  <xs:complexType name="participents" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userNewVideoContainer" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomV" type="project:activityListRestrictedRoomV" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomV" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIcons" type="project:miniIcons" >
+</xs:element>
+  <xs:complexType name="miniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventSelectorbar" type="project:eventSelectorbar" >
+</xs:element>
+  <xs:complexType name="eventSelectorbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yoff" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="xoff" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startDragDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startDate2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="snapEdge" type="xs:string" default="30" >
+</xs:attribute>
+      <xs:attribute name="origx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="obarx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="hidedel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="freedragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="endDate2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="endDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clipping" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clipdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="appointementId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newPrivateMessage" type="project:newPrivateMessage" >
+</xs:element>
+  <xs:complexType name="newPrivateMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="userObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendUpdateText" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendUpdateAttr" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendSingleUpdateText" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="receipents" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentMessageId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeltabelement" type="project:labeltabelement" >
+</xs:element>
+  <xs:complexType name="labeltabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:tabelement">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseturnOverListPaged" type="project:baseturnOverListPaged" >
+</xs:element>
+  <xs:complexType name="baseturnOverListPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showTopBar" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="showHScrollbar" type="xs:string" default="visible" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rerender" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="renderList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="records" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="orderby" type="xs:string" default="firstname" >
+</xs:attribute>
+      <xs:attribute name="oncallpre" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallnext" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onScrollItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onNextScrollItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMoveList" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="menuBarXIndent" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listLabelId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listItemName" type="xs:string" default="basePagingListItem" >
+</xs:attribute>
+      <xs:attribute name="itemHeight" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="headerHeight" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawViewNew" type="project:drawViewNew" >
+</xs:element>
+  <xs:complexType name="drawViewNew" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="typeOfObject" type="xs:string" default="paint" >
+</xs:attribute>
+      <xs:attribute name="initwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initheight" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsHPanelSeperator" type="project:mainToolsHPanelSeperator" >
+</xs:element>
+  <xs:complexType name="mainToolsHPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListOrderedPaged" type="project:turnOverListOrderedPaged" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverListOrderedPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnOverListPaged">
+      <xs:attribute name="onUpdateOrder" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedOrder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseRoomInnerList" type="project:baseRoomInnerList" >
+</xs:element>
+  <xs:complexType name="baseRoomInnerList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundRectGradient" type="project:roundRectGradient" >
+</xs:element>
+  <xs:complexType name="roundRectGradient" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="oninsettop" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetright" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetleft" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetbottom" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninset" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oncomplete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="insettop" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetright" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetleft" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetbottom" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:size" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The margin between the outside view and the content view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowOpacity" type="xs:string" default="0.5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow color.  If this is specified, a box shadow is drawn.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border.  If this is zero, no frame is drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rounding radius of the border corners.  Because the default
+            join type is a round join, even a radius of zero will product some
+            rounding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop opacity.  This defaults to one (opaque) unless the
+            stop color is not specified and the start color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop color.  This is the color that is drawn at the
+            bottom or right of the view, depending on the value of
+            backgroundGradientOrientation.  See the documentation for
+            backgroundStartColor for additional documentation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start opacity.  This defaults to one (opaque) unless the
+            start color is not specified and the stop color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start color.  This is the color that is drawn at
+            the top or left of the view, depending on the value of
+            backgroundGradientOrientation.  If this and the backround stop color
+            are specified, a gradient background is drawn in the direction specified
+            by backgroundGradientOrientation.  If only one of the background start
+            and stop color are specified, a gradient of the same color that fades to
+            transparent at the unspecified end is drawn.  If a box shadow is drawn,
+            the background defaults to white.  Specify a start and stop opacity to
+            suppress this behavior. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundGradientOrientation" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background gradient orientation.  One of 'vertical' (the default)
+            and 'horizontal'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorPopupUserInfo" type="project:errorPopupUserInfo" >
+</xs:element>
+  <xs:complexType name="errorPopupUserInfo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="user" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawEllipseTools" type="project:drawEllipseTools" >
+</xs:element>
+  <xs:complexType name="drawEllipseTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawSelect" type="project:baseDrawSelect" >
+</xs:element>
+  <xs:complexType name="baseDrawSelect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawTriangle">
+      <xs:attribute name="currentSelectanglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestrokeFill" type="xs:string" default="0x8e8986" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestroke" type="xs:string" default="0x8e8986" >
+</xs:attribute>
+      <xs:attribute name="currentSelectangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentSelectangleOpacity" type="lzx:number" default="0.2" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawColorPicker" type="project:drawColorPicker" >
+</xs:element>
+  <xs:complexType name="drawColorPicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onnewcolor" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="defaultno" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSeperator" type="project:drawChooseSeperator" >
+</xs:element>
+  <xs:complexType name="drawChooseSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseMenuSeperator">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedFileExplorerWhiteBoard" type="project:fixedFileExplorerWhiteBoard" >
+</xs:element>
+  <xs:complexType name="fixedFileExplorerWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timeisInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendUpdate" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObjectDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propertyPanelLetterButton" type="project:propertyPanelLetterButton" >
+</xs:element>
+  <xs:complexType name="propertyPanelLetterButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" default="87" >
+</xs:attribute>
+      <xs:attribute name="itemResourceName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentVal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordValueList" type="project:recordValueList" >
+</xs:element>
+  <xs:complexType name="recordValueList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnOverList">
+      <xs:attribute name="itemToDelete" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="deleteItem" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="loadWhiteboardWindow" type="project:loadWhiteboardWindow" >
+</xs:element>
+  <xs:complexType name="loadWhiteboardWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelText">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTopPanel" type="project:baseTopPanel" >
+</xs:element>
+  <xs:complexType name="baseTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarWeekView" type="project:calendarWeekView" >
+</xs:element>
+  <xs:complexType name="calendarWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderThumb" type="project:vsliderThumb" >
+</xs:element>
+  <xs:complexType name="vsliderThumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="drag_min" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drag_max" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tableCombobox" type="project:tableCombobox" >
+</xs:element>
+  <xs:complexType name="tableCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:combobox">
+      <xs:attribute name="tvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initvalue" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageListInnerTable" type="project:imageListInnerTable" >
+</xs:element>
+  <xs:complexType name="imageListInnerTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawImage" type="project:baseDrawImage" >
+</xs:element>
+  <xs:complexType name="baseDrawImage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawLetter">
+      <xs:attribute name="syncImageRefObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="syncImageCheckTime" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="setNewScreenUserName" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="screenImageRefNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="screenImageRef2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="screenImageRef1" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadingUsersImageListIndex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadimageDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadImageObjectTimer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isWmlLoaderImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isScreenImageLoading" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="imageSyncMessageText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="imageSyncMessageId" type="lzx:number" default="209" >
+</xs:attribute>
+      <xs:attribute name="imageLoadingCompleteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="imageLoadMessageId" type="lzx:number" default="208" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicFLVName" type="project:dynamicFLVName" >
+</xs:element>
+  <xs:complexType name="dynamicFLVName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isNew" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardBarMenu" type="project:whiteboardBarMenu" >
+</xs:element>
+  <xs:complexType name="whiteboardBarMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="staticwidth" type="lzx:number" default="120" >
+</xs:attribute>
+      <xs:attribute name="currentBtn" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recordPlayerBG" type="project:_recordPlayerBG" >
+</xs:element>
+  <xs:complexType name="_recordPlayerBG" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_videoBoardStream" type="project:_videoBoardStream" >
+</xs:element>
+  <xs:complexType name="_videoBoardStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardVideoPlayer" type="project:whiteboardVideoPlayer" >
+</xs:element>
+  <xs:complexType name="whiteboardVideoPlayer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="timerDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="timerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendInit" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="recordingName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaInSeconds" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewWhiteboard" type="project:interviewWhiteboard" >
+</xs:element>
+  <xs:complexType name="interviewWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemIcon" type="project:turnoverlistheaderitemIcon" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="toolTipLabelId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="iconResource" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconsInterviewUserList" type="project:moderationMiniIconsInterviewUserList" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconsInterviewUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChoose" type="project:colorRectChoose" >
+</xs:element>
+  <xs:complexType name="colorRectChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:colorRectChoosebase">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalMenuIconBar" type="project:verticalMenuIconBar" >
+</xs:element>
+  <xs:complexType name="verticalMenuIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="omlegend" type="project:omlegend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     simple legend class
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="omlegend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="verticalgap" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleBorder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the style will be applied tho the border legend box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="position" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates where the legend box will be positioned, default: right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if legend box will have a border, default: true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontsize" type="lzx:size" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font size wiil be used in the legend item text, default: 10px </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font color wiil be used in the legend item text, default: black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFont" type="xs:string" default="serif" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font will be used in the legend item text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the fill color from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates how the legend items will be displayed, default: vertical </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chartClassName" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Takes the relationship with the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottommargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the line width from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the color line from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoInfoStuff" type="project:videoInfoStuff" >
+</xs:element>
+  <xs:complexType name="videoInfoStuff" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentIconLeftPanel" type="project:documentIconLeftPanel" >
+</xs:element>
+  <xs:complexType name="documentIconLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closableView" type="project:closableView" >
+</xs:element>
+  <xs:complexType name="closableView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChooseSmall" type="project:colorRectChooseSmall" >
+</xs:element>
+  <xs:complexType name="colorRectChooseSmall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:colorRectChoosebase">
+      <xs:attribute name="defaultno" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDraw" type="project:baseDraw" >
+</xs:element>
+  <xs:complexType name="baseDraw" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showGrid" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="selectedObjects" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="redolayers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="prevy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="prevx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="onupdateScale" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onopenWhiteBoard" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="my" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mousetracker_del" type="xs:string" default="$once{ new LzDelegate(this, 'trackmouse' )}" >
+</xs:attribute>
+      <xs:attribute name="layers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="last_y" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="last_x" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isSnapToGrid" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isRemoteOID" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true it will try to load the ObjectIdentifier Extension from the Server </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isDragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="hasprevious" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="hasenext" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="gridWidth" type="lzx:number" default="24" >
+</xs:attribute>
+      <xs:attribute name="endy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="endx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drawmodus" type="xs:string" default="hand" >
+</xs:attribute>
+      <xs:attribute name="doClearSlide" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="doClearAll" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentlayer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="counter" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="copyObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingref" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingIsActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="basetempactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseredoactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="basdrawredoView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewConferenceRoom" type="project:interviewConferenceRoom" >
+</xs:element>
+  <xs:complexType name="interviewConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiWhiteboardPanel" type="project:multiWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="multiWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:fixedFileExplorerWhiteBoard">
+      <xs:attribute name="whiteboardId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="objWhiteboard" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationThumbExplorer" type="project:listPresentationThumbExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationThumbExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItemExplorer">
+      <xs:attribute name="thumbname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="no" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseFileExplorerItem" type="project:baseFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="baseFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="singleClickStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="singleClickDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="refObjListRoot" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="open" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="mouseDownClickUsed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="mouseDownClickDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isVideo" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isRoot" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isPresentation" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMouseDownDragAction" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isFolder" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileIcon" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="fileHash" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseNickName" type="project:chooseNickName" >
+</xs:element>
+  <xs:complexType name="chooseNickName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="swfResourceView" type="project:swfResourceView" >
+</xs:element>
+  <xs:complexType name="swfResourceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomlevel" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="typeOfObject" type="xs:string" default="swf" >
+</xs:attribute>
+      <xs:attribute name="standardFileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="slideNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recorderModus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="innery" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fullFit" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="doSendChangeValue" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentzoomFactor" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="currentzoom" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userRoomTabItem" type="project:userRoomTabItem" >
+</xs:element>
+  <xs:complexType name="userRoomTabItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cbtext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRow" type="project:colorRow" >
+</xs:element>
+  <xs:complexType name="colorRow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomClientListItem" type="project:roomClientListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of conference/audience rooms </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roomClientListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="streamid" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of conference/audience rooms </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scope" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="login" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="dateConnected" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIcons" type="project:moderationMiniIcons" >
+</xs:element>
+  <xs:complexType name="moderationMiniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="redirectBox" type="project:redirectBox" >
+</xs:element>
+  <xs:complexType name="redirectBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="timerDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="redirectURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="maxTime" type="lzx:number" default="5000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rememberMessage" type="project:rememberMessage" >
+</xs:element>
+  <xs:complexType name="rememberMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="showCheckBox" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inputtextbox" type="project:inputtextbox" >
+</xs:element>
+  <xs:complexType name="inputtextbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentsTable" type="project:participentsTable" >
+</xs:element>
+  <xs:complexType name="participentsTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawSave" type="project:baseDrawSave" >
+</xs:element>
+  <xs:complexType name="baseDrawSave" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawImage">
+      <xs:attribute name="wmlspreadNews" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="wmlroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmlfileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmldomain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmlLoadingCompleteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="w" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="syncmessageId" type="lzx:number" default="207" >
+</xs:attribute>
+      <xs:attribute name="synccheckTime" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="snap" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendpictureName" type="xs:string" default="snapchot.jpg" >
+</xs:attribute>
+      <xs:attribute name="sendURL" type="xs:string" default="http://www.webbase-design.de/dokeos/videoconference/createimagefrombitmap.php" >
+</xs:attribute>
+      <xs:attribute name="sendPartURL" type="xs:string" default="http://www.webbase-design.de/dokeos/videoconference/createimagefrombitmap.php" >
+</xs:attribute>
+      <xs:attribute name="savefileName" type="xs:string" default="savefileName1" >
+</xs:attribute>
+      <xs:attribute name="savefileDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pixel_del" type="xs:string" default="$once{ new LzDelegate(this, 'buildPixelArray' )}" >
+</xs:attribute>
+      <xs:attribute name="pixelArray" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onwmlloadStop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onwmlloadStart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onprogress" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="loadmessageId" type="lzx:number" default="206" >
+</xs:attribute>
+      <xs:attribute name="loadfileDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadfileDataIndex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadfileData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadObjectTimer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isinitRecordingLoad" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSendPartArray" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isRecordingLoad" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isInitLoader" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="h" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fileData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="exportType" type="xs:string" default="svg" >
+</xs:attribute>
+      <xs:attribute name="bpData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="a" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="MatrixValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="MCRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelButton" type="project:simpleLabelButton" >
+</xs:element>
+  <xs:complexType name="simpleLabelButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabItem" type="project:chatTabItem" >
+</xs:element>
+  <xs:complexType name="chatTabItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="usercolor" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cbtext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boundingBoxAll" type="project:boundingBoxAll" >
+</xs:element>
+  <xs:complexType name="boundingBoxAll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="whiteboardRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startdragY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum width for the windowy, default: 60.
+          @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum height for the window, default: 50.
+          @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="innerInsetScrollbars" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ey" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ewidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="eheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="doHandlerUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canBeResized" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canBeDragged" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="boundingDoUpdateOnInit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="saveAsWmlWindow" type="project:saveAsWmlWindow" >
+</xs:element>
+  <xs:complexType name="saveAsWmlWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileExplorerWindow" type="project:fileExplorerWindow" >
+</xs:element>
+  <xs:complexType name="fileExplorerWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contactSearchHead" type="project:contactSearchHead" >
+</xs:element>
+  <xs:complexType name="contactSearchHead" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="uploadWindowExplorer" type="project:uploadWindowExplorer" >
+</xs:element>
+  <xs:complexType name="uploadWindowExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="winobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="usersid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="uploadmodule" type="xs:string" default="videoconf1" >
+</xs:attribute>
+      <xs:attribute name="singleslidesmodule_id" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sessionid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="servletName" type="xs:string" default="UploadHandler" >
+</xs:attribute>
+      <xs:attribute name="returnObj" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="parentFolderId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isdefaultreturn" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOnlyXml" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyProfile" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationPanel" type="project:moderationPanel" >
+</xs:element>
+  <xs:complexType name="moderationPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="roomName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="recordingUser" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initial" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="presentationFilesList" type="project:presentationFilesList" >
+</xs:element>
+  <xs:complexType name="presentationFilesList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="$once{ canvas.uploadmoduleimg }" >
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferencecontainertab" type="project:conferencecontainertab" >
+</xs:element>
+  <xs:complexType name="conferencecontainertab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardMiniButton" type="project:whiteboardMiniButton" >
+</xs:element>
+  <xs:complexType name="whiteboardMiniButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zielx" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isactive" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isHidden" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="btnName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelCheckbox" type="project:labelCheckbox" >
+</xs:element>
+  <xs:complexType name="labelCheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:checkbox">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseChooseIcon" type="project:baseChooseIcon" >
+</xs:element>
+  <xs:complexType name="baseChooseIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initX" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawLineTools" type="project:drawLineTools" >
+</xs:element>
+  <xs:complexType name="drawLineTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentListItem" type="project:baseContentListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base class for the item list views</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseContentListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base class for the item list views</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imagesListdraw" type="project:imagesListdraw" >
+</xs:element>
+  <xs:complexType name="imagesListdraw" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="$once{ canvas.uploadmoduleimg }" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="meetingTimer" type="project:meetingTimer" >
+</xs:element>
+  <xs:complexType name="meetingTimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="demoTime" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatOutput" type="project:chatOutput" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chat output specialized for video-conference </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatOutput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isAlreadyLoaded" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chat output specialized for video-conference </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugPinCode" type="project:debugPinCode" >
+</xs:element>
+  <xs:complexType name="debugPinCode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomApplyForMuteOff" type="project:activityListRestrictedRoomApplyForMuteOff" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomApplyForMuteOff" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textBoxSubBlank" type="project:textBoxSubBlank" >
+</xs:element>
+  <xs:complexType name="textBoxSubBlank" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netremotecall" type="project:netremotecall" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Net remote call. 
+        @todo Document netremotecall class.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="netremotecall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="remotecontext" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error handling event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="funcname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the remote function. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataobject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="flexibleConferenceRoom" type="project:flexibleConferenceRoom" >
+</xs:element>
+  <xs:complexType name="flexibleConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubarButton" type="project:menubarButton" >
+</xs:element>
+  <xs:complexType name="menubarButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clientobjectArea" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="clientmaskname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_whiteBoardPanelRecord" type="project:_whiteBoardPanelRecord" >
+</xs:element>
+  <xs:complexType name="_whiteBoardPanelRecord" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="validText" type="project:validText" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A editfieldText with the possibility of a dropdown menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="validText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:edittext">
+      <xs:attribute name="validate_method" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The method to be called for validating </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="typetime" type="lzx:number" default="500" >
+</xs:attribute>
+      <xs:attribute name="timerIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="timerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="spacing" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="shownitems" type="lzx:number" default="7" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ items to be shown in the floatinglist </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resultName" type="xs:string" default="name" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name-attribute of the resultset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resultId" type="xs:string" default="id" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the id-attribute of the resultset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onisopen" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initSelect" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentValue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border size ( in pixels ) of the popup list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a scrollbar should automatically show up when there are more
+              items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical offset of the floatinglist attached to this
+              combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaAlterPosition" type="project:drawAreaAlterPosition" >
+</xs:element>
+  <xs:complexType name="drawAreaAlterPosition" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="objName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarDayView" type="project:calendarDayView" >
+</xs:element>
+  <xs:complexType name="calendarDayView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="clickBox" type="project:clickBox" >
+</xs:element>
+  <xs:complexType name="clickBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="onvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isupdateCheck" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initval" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorSlider" type="project:colorSlider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      changed by swagner
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="colorSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:slider">
+      <xs:attribute name="doSendValueEvent" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      changed by swagner
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newWhiteBoard" type="project:newWhiteBoard" >
+</xs:element>
+  <xs:complexType name="newWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderTrack" type="project:vsliderTrack" >
+</xs:element>
+  <xs:complexType name="vsliderTrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netRemoteCallHib" type="project:netRemoteCallHib" >
+</xs:element>
+  <xs:complexType name="netRemoteCallHib" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:netremotecall">
+      <xs:attribute name="showLoading" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with normal Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sendCallBack" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="returnObj" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this should be the contentSaveWindow </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="registerObject" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true this object will register at the update-observer </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isCallBackHandler" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with Callback Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="activeErrorHandler" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with normal Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="omlegenditem" type="project:omlegenditem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="omlegenditem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tBox" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="linevisible" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="identifier" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawArrowWhiteBoard" type="project:drawArrowWhiteBoard" >
+</xs:element>
+  <xs:complexType name="drawArrowWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customScrollEdittext" type="project:customScrollEdittext" >
+</xs:element>
+  <xs:complexType name="customScrollEdittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ontextChange" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="styleableInput" type="project:styleableInput" >
+</xs:element>
+  <xs:complexType name="styleableInput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="startAdjustHight" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="setFocusOnInit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewRoomSidebar" type="project:interviewRoomSidebar" >
+</xs:element>
+  <xs:complexType name="interviewRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawPointer" type="project:baseDrawPointer" >
+</xs:element>
+  <xs:complexType name="baseDrawPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawEllipse">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartFileExplorerItem" type="project:chartFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="chartFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+      <xs:attribute name="isChartFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gridsliderlayout" type="project:gridsliderlayout" >
+</xs:element>
+  <xs:complexType name="gridsliderlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="rows" type="xs:string" default="6" >
+</xs:attribute>
+      <xs:attribute name="positiondel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="openview" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="openrow_only" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="openrow" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="opencol_only" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="opencol" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="onupdatestop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onupdatestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onopenstart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onclosestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastsel" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="300" >
+</xs:attribute>
+      <xs:attribute name="doanimation" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="displayrow" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="displaymode" type="xs:string" default="grid" >
+</xs:attribute>
+      <xs:attribute name="displaycol" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="cw" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cols" type="xs:string" default="6" >
+</xs:attribute>
+      <xs:attribute name="ch" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cellwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cellheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="addedOpenWidth" type="xs:string" default="150" >
+</xs:attribute>
+      <xs:attribute name="addedOpenHeight" type="xs:string" default="170" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseChooseIconView" type="project:baseChooseIconView" >
+</xs:element>
+  <xs:complexType name="baseChooseIconView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsImageMap" type="project:miniIconSmybolExtraIconsImageMap" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsImageMap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconsPresenter" type="project:miniIconsPresenter" >
+</xs:element>
+  <xs:complexType name="miniIconsPresenter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconRessourceName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calButton" type="project:calButton" >
+</xs:element>
+  <xs:complexType name="calButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yadjust" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="rightinset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="rightcap" type="xs:string" default="oval" >
+</xs:attribute>
+      <xs:attribute name="overRsrcNumber" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="onsafeclick" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="normalRsrcNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="mouseisdown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="leftinset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="leftcap" type="xs:string" default="oval" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="keepinitialwidth" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="downRsrcNumber" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="divider" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="deselectRsrcNumber" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="applied" type="xs:string" default="classroot.leftcap == 'rect'" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSizeRadioT" type="project:drawChooseSizeRadioT" >
+</xs:element>
+  <xs:complexType name="drawChooseSizeRadioT" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiogroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmCancelPopup" type="project:confirmCancelPopup" >
+</xs:element>
+  <xs:complexType name="confirmCancelPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="makeModal" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="errorlabelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boundingBoxAllRotationMarger" type="project:boundingBoxAllRotationMarger" >
+</xs:element>
+  <xs:complexType name="boundingBoxAllRotationMarger" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dragStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTabbarButton" type="project:baseTabbarButton" >
+</xs:element>
+  <xs:complexType name="baseTabbarButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedRoomSidebar" type="project:restrictedRoomSidebar" >
+</xs:element>
+  <xs:complexType name="restrictedRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="presentationPreview" type="project:presentationPreview" >
+</xs:element>
+  <xs:complexType name="presentationPreview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObjList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="miniButton" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="documentObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawClipArtWhiteBoard" type="project:drawClipArtWhiteBoard" >
+</xs:element>
+  <xs:complexType name="drawClipArtWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="clipArtEndy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndx" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="allmeetings" type="project:allmeetings" >
+</xs:element>
+  <xs:complexType name="allmeetings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="refObjItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="finishedTabsQuantity" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clickedButton" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dayname" type="project:dayname" >
+</xs:element>
+  <xs:complexType name="dayname" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modPanel" type="project:modPanel" >
+</xs:element>
+  <xs:complexType name="modPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fillColorChoose" type="project:fillColorChoose" >
+</xs:element>
+  <xs:complexType name="fillColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="selectedColorDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inInitColorSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="regexptip" type="project:regexptip" >
+</xs:element>
+  <xs:complexType name="regexptip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="regexptext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleListItem" type="project:simpleListItem" >
+</xs:element>
+  <xs:complexType name="simpleListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlCrmTooltip" type="project:xmlCrmTooltip" >
+</xs:element>
+  <xs:complexType name="xmlCrmTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentFileExplorerItem" type="project:documentFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="documentFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalMenuIconBarPointer" type="project:verticalMenuIconBarPointer" >
+</xs:element>
+  <xs:complexType name="verticalMenuIconBarPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsPanelItem" type="project:mainToolsPanelItem" >
+</xs:element>
+  <xs:complexType name="mainToolsPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="setSelectionToItem" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceContainerTab" type="project:conferenceContainerTab" >
+</xs:element>
+  <xs:complexType name="conferenceContainerTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadTapIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="membersTapIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doBlink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainerAudience" type="project:videoContainerAudience" >
+</xs:element>
+  <xs:complexType name="videoContainerAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="streams" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="modLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allUsers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDocumentItem" type="project:drawDocumentItem" >
+</xs:element>
+  <xs:complexType name="drawDocumentItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpletimelayout" type="project:simpletimelayout" >
+</xs:element>
+  <xs:complexType name="simpletimelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="viewheight" type="xs:string" default="22" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatInnerTextBox" type="project:chatInnerTextBox" >
+</xs:element>
+  <xs:complexType name="chatInnerTextBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_chatInnerSmilyIcon" type="project:_chatInnerSmilyIcon" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_chatInnerSmilyIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconvalue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iconlabel" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChoosebase" type="project:colorRectChoosebase" >
+</xs:element>
+  <xs:complexType name="colorRectChoosebase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorchoose" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="loginScreen" type="project:loginScreen" >
+</xs:element>
+  <xs:complexType name="loginScreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectAudience" type="project:videoObjectAudience" >
+</xs:element>
+  <xs:complexType name="videoObjectAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoObject">
+      <xs:attribute name="isAssigned" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hidePropertyView" type="project:hidePropertyView" >
+</xs:element>
+  <xs:complexType name="hidePropertyView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityList" type="project:activityList" >
+</xs:element>
+  <xs:complexType name="activityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanelWhiteboard">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelRoundButton" type="project:simpleLabelRoundButton" >
+</xs:element>
+  <xs:complexType name="simpleLabelRoundButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:roundrectbutton">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="blueButton" type="project:blueButton" >
+</xs:element>
+  <xs:complexType name="blueButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="y_insetResource" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="x_insetResource" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="width_insetResource" type="lzx:number" default="18" >
+</xs:attribute>
+      <xs:attribute name="resourceItem" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="height_insetResource" type="lzx:number" default="18" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="info_Panel" type="project:info_Panel" >
+</xs:element>
+  <xs:complexType name="info_Panel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basepanel">
+      <xs:attribute name="startDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="rooms_id" type="lzx:number" default="$path{ 'rooms_id/@value'}" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isConnectedEvent" type="lzx:boolean" default="$path{ 'isConnectedEvent/@value' }" >
+</xs:attribute>
+      <xs:attribute name="endDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dataapply" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointementId" type="lzx:number" default="$path{ 'appointementId/@value' }" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentToolsPalette" type="project:documentToolsPalette" >
+</xs:element>
+  <xs:complexType name="documentToolsPalette" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListMessageRequest" type="project:activityListMessageRequest" >
+</xs:element>
+  <xs:complexType name="activityListMessageRequest" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simplebaseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewVideoBox" type="project:interviewVideoBox" >
+</xs:element>
+  <xs:complexType name="interviewVideoBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="interviewPodId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageListInnerTableExplorer" type="project:imageListInnerTableExplorer" >
+</xs:element>
+  <xs:complexType name="imageListInnerTableExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeekNumber" type="project:dateSelectorWeekNumber" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeekNumber" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="weeknumber" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingSaveWin" type="project:recordingSaveWin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		Similar with recordingStartWIn.lzx, but any other class dose not invoke this class.
+		Maybe this class could be deleted.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingSaveWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		Similar with recordingStartWIn.lzx, but any other class dose not invoke this class.
+		Maybe this class could be deleted.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteMessage" type="project:chatParticipantsInviteMessage" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="conferenceRoomName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomAV" type="project:activityListRestrictedRoomAV" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomAV" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeldTextListItem" type="project:labeldTextListItem" >
+</xs:element>
+  <xs:complexType name="labeldTextListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewUserList" type="project:interviewUserList" >
+</xs:element>
+  <xs:complexType name="interviewUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminareaWeekView" type="project:terminareaWeekView" >
+</xs:element>
+  <xs:complexType name="terminareaWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewEventUserListTableWithNames" type="project:innerlistViewEventUserListTableWithNames" >
+</xs:element>
+  <xs:complexType name="innerlistViewEventUserListTableWithNames" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenShareCursorObject" type="project:screenShareCursorObject" >
+</xs:element>
+  <xs:complexType name="screenShareCursorObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participantsPanel" type="project:participantsPanel" >
+</xs:element>
+  <xs:complexType name="participantsPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="redoUndoToolsPanelItem" type="project:redoUndoToolsPanelItem" >
+</xs:element>
+  <xs:complexType name="redoUndoToolsPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:mainToolsPanelItem">
+      <xs:attribute name="doredo" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tempTextBox" type="project:tempTextBox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tempTextBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isStopped" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="responseForModeration" type="project:responseForModeration" >
+</xs:element>
+  <xs:complexType name="responseForModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="userobject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userautoTimerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userautoTimerCounter" type="lzx:number" default="31" >
+</xs:attribute>
+      <xs:attribute name="clientId" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="applymessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragView" type="project:dragView" >
+</xs:element>
+  <xs:complexType name="dragView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="startY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filesid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="filename" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomModeratorsRoomClientListItem" type="project:roomModeratorsRoomClientListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of ddefault moderators rooms </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roomModeratorsRoomClientListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="uName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomModeratorsId" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of ddefault moderators rooms </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="modRoomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipants" type="project:chatParticipants" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ it shows chat participants. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatParticipants" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ it shows chat participants. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="picture_uri" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawRectangleTools" type="project:drawRectangleTools" >
+</xs:element>
+  <xs:complexType name="drawRectangleTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalDocumentIconBar" type="project:verticalDocumentIconBar" >
+</xs:element>
+  <xs:complexType name="verticalDocumentIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingsViewer" type="project:recordingsViewer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	This class shows a play-viewer panel for recording data.
+	When you select and click a recording data from the recording list that is invoked with recordContent.lzx,
+	you can see a big start button on this panel. Then you click it, regording data starts with video/audio panel, 
+	whiteboard panel and files panel.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingsViewer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="timerDel" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	This class shows a play-viewer panel for recording data.
+	When you select and click a recording data from the recording list that is invoked with recordContent.lzx,
+	you can see a big start button on this panel. Then you click it, regording data starts with video/audio panel, 
+	whiteboard panel and files panel.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="timeStepSyncing" type="lzx:number" default="500" >
+</xs:attribute>
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recordingValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initObjectCount" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="downloadUrlWhiteboard" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="currentTime" type="lzx:number" default="-500" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calenderlistitem" type="project:calenderlistitem" >
+</xs:element>
+  <xs:complexType name="calenderlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textAttr" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedWhiteboardPanel" type="project:fixedWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="fixedWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoStream" type="project:baseVideoStream" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	extends the Video-View with Streaming functions
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoView">
+      <xs:attribute name="streamName" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="soundRefMC" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference To the Sound MovieClip
+		@keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="soundRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference To the Sound Object
+		@keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onPlayStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMetaData" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mode" type="xs:string" default="play" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This value does indicate if this stream play or broadcasts
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="micro" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to the current microphone, only set if broadcasting
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delay" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="camera" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to the current camara, only set if broadcasting
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bufferTime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the current buffer used, in Live Streaming this MUST be 0
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="infoTab" type="project:infoTab" >
+</xs:element>
+  <xs:complexType name="infoTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabelement">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTabChatPanel" type="project:baseTabChatPanel" >
+</xs:element>
+  <xs:complexType name="baseTabChatPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanel">
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doBlink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="copiedTextPopup" type="project:copiedTextPopup" >
+</xs:element>
+  <xs:complexType name="copiedTextPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedConferenceRoom" type="project:restrictedConferenceRoom" >
+</xs:element>
+  <xs:complexType name="restrictedConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeekNumberHeader" type="project:dateSelectorWeekNumberHeader" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeekNumberHeader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelWeekHeader" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fieldValueForm" type="project:fieldValueForm" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ right block of the LanguageEditor. you can edit the label.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fieldValueForm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentSaveView">
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="fieldvalues_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fieldlanguagesvalues_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzRecordNavigation" type="project:lzRecordNavigation" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	View for recorded contents list.
+	When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzRecordNavigation" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="recordingName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="playSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentFolderId" type="lzx:number" default="-2" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	View for recorded contents list.
+	When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentTrackGroupName" type="xs:string" default="fileExplorer" >
+</xs:attribute>
+      <xs:attribute name="currentRecording" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentDragItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="alternateName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ordnerInhaltHead" type="project:ordnerInhaltHead" >
+</xs:element>
+  <xs:complexType name="ordnerInhaltHead" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="showChatLog" type="project:showChatLog" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="showChatLog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rssBox" type="project:rssBox" >
+</xs:element>
+  <xs:complexType name="rssBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="filesPanelStrict" type="project:filesPanelStrict" >
+</xs:element>
+  <xs:complexType name="filesPanelStrict" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingStartWin" type="project:recordingStartWin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		When you click the Recording button on your conference menu, this class shows a dialog box for saving it.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingStartWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		When you click the Recording button on your conference menu, this class shows a dialog box for saving it.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingDialogContainer" type="project:screenSharingDialogContainer" >
+</xs:element>
+  <xs:complexType name="screenSharingDialogContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toolbarTabList" type="project:toolbarTabList" >
+</xs:element>
+  <xs:complexType name="toolbarTabList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawUlineTools" type="project:drawUlineTools" >
+</xs:element>
+  <xs:complexType name="drawUlineTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawPaint" type="project:baseDrawPaint" >
+</xs:element>
+  <xs:complexType name="baseDrawPaint" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDraw">
+      <xs:attribute name="painttrans" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentlayerstroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentlayerlineWidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="currentlayerOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchResultsAddContact" type="project:searchResultsAddContact" >
+</xs:element>
+  <xs:complexType name="searchResultsAddContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dtmfButton" type="project:dtmfButton" >
+</xs:element>
+  <xs:complexType name="dtmfButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="dtmf" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmationBox" type="project:confirmationBox" >
+</xs:element>
+  <xs:complexType name="confirmationBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="doAskAgain" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="callbackRpcErrorDialog" type="project:callbackRpcErrorDialog" >
+</xs:element>
+  <xs:complexType name="callbackRpcErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorDialog">
+      <xs:attribute name="callBackObject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="emotIconsSelector" type="project:emotIconsSelector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ view to select emoticons. size is 160x140 </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="emotIconsSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableView">
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ view to select emoticons. size is 160x140 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpicker" type="project:colorpicker" >
+</xs:element>
+  <xs:complexType name="colorpicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="selectedColor" type="lzx:number" default="0x00aeef" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateField" type="project:dateField" >
+</xs:element>
+  <xs:complexType name="dateField" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="setDefaultToday" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="additionalDay" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelRadioButton" type="project:labelRadioButton" >
+</xs:element>
+  <xs:complexType name="labelRadioButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiobutton">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageFileExplorerItem" type="project:imageFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="imageFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoard" type="project:whiteBoard" >
+</xs:element>
+  <xs:complexType name="whiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmationSingle" type="project:confirmationSingle" >
+</xs:element>
+  <xs:complexType name="confirmationSingle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="showCheckBox" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refReturnMethod" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthSliderWin" type="project:changeWidthSliderWin" >
+</xs:element>
+  <xs:complexType name="changeWidthSliderWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableView">
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsLeftPanelPointer" type="project:mainToolsLeftPanelPointer" >
+</xs:element>
+  <xs:complexType name="mainToolsLeftPanelPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawWords" type="project:baseDrawWords" >
+</xs:element>
+  <xs:complexType name="baseDrawWords" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="inittext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="initTextName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="winni" type="project:winni" >
+</xs:element>
+  <xs:complexType name="winni" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomApplyForMuteOn" type="project:activityListRestrictedRoomApplyForMuteOn" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomApplyForMuteOn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayTestBroadcast" type="project:videoObjectPlayTestBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectPlayTestBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawLetterTools" type="project:drawLetterTools" >
+</xs:element>
+  <xs:complexType name="drawLetterTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerList" type="project:innerList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class for turnOverList only. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="innerList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeDevice" type="project:changeDevice" >
+</xs:element>
+  <xs:complexType name="changeDevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myalert" type="project:myalert" >
+</xs:element>
+  <xs:complexType name="myalert" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:alert">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoUserProfilePic" type="project:videoUserProfilePic" >
+</xs:element>
+  <xs:complexType name="videoUserProfilePic" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fieldValuesListItem" type="project:fieldValuesListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class shows label-ID,label name, value.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fieldValuesListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="fieldvalues_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class shows label-ID,label name, value.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldvalue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fieldname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="createPollWin" type="project:createPollWin" >
+</xs:element>
+  <xs:complexType name="createPollWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="polltypesid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollquestion" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedPasswordText" type="project:borderedPasswordText" >
+</xs:element>
+  <xs:complexType name="borderedPasswordText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorModeratorPopup" type="project:errorModeratorPopup" >
+</xs:element>
+  <xs:complexType name="errorModeratorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="openmeetingsTabButton" type="project:openmeetingsTabButton" >
+</xs:element>
+  <xs:complexType name="openmeetingsTabButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:roundRectGradient">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="iconresourcename" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedWhiteBoard" type="project:fixedWhiteBoard" >
+</xs:element>
+  <xs:complexType name="fixedWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timeisInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendUpdate" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObjectDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basicturnoverlistheaderitem" type="project:basicturnoverlistheaderitem" >
+</xs:element>
+  <xs:complexType name="basicturnoverlistheaderitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseListPresentationItem" type="project:baseListPresentationItem" >
+</xs:element>
+  <xs:complexType name="baseListPresentationItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmoduleimgfolder" type="xs:string" default="$once{ canvas.uploadmoduleimgfolder }" >
+</xs:attribute>
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isoriginal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewUserProfile" type="project:viewUserProfile" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ User Profile Setting Panel </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewUserProfile" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userObject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ User Profile Setting Panel </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listOfUsers" type="project:listOfUsers" >
+</xs:element>
+  <xs:complexType name="listOfUsers" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subitemsListItem" type="project:subitemsListItem" >
+</xs:element>
+  <xs:complexType name="subitemsListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="list" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isleaf" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="action" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListTableWithNames" type="project:eventUserListTableWithNames" >
+</xs:element>
+  <xs:complexType name="eventUserListTableWithNames" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalDocumentIconBar" type="project:horizontalDocumentIconBar" >
+</xs:element>
+  <xs:complexType name="horizontalDocumentIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiWhiteBoard" type="project:multiWhiteBoard" >
+</xs:element>
+  <xs:complexType name="multiWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="headerMenu" type="project:headerMenu" >
+</xs:element>
+  <xs:complexType name="headerMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingFrame" type="project:sharingFrame" >
+</xs:element>
+  <xs:complexType name="sharingFrame" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sharingStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initSrc" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="bufferIndex" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseModir" type="project:drawChooseModir" >
+</xs:element>
+  <xs:complexType name="drawChooseModir" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelectablemodi" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPpt" type="project:listPpt" >
+</xs:element>
+  <xs:complexType name="listPpt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseDrawAreaObjectCombobox" type="project:chooseDrawAreaObjectCombobox" >
+</xs:element>
+  <xs:complexType name="chooseDrawAreaObjectCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listV" type="xs:string" default="${ this.parent.listV }" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoardPointer" type="project:whiteBoardPointer" >
+</xs:element>
+  <xs:complexType name="whiteBoardPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelector" type="project:dateSelector" >
+</xs:element>
+  <xs:complexType name="dateSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelector">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentMenu" type="project:documentMenu" >
+</xs:element>
+  <xs:complexType name="documentMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseToolbarMenu">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myView" type="project:myView" >
+</xs:element>
+  <xs:complexType name="myView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawLetter" type="project:baseDrawLetter" >
+</xs:element>
+  <xs:complexType name="baseDrawLetter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawObject">
+      <xs:attribute name="letterObjectIsActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="italic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="edittextLetterObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="edittextLetter" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentletterObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentlayerstyle" type="xs:string" default="plain" >
+</xs:attribute>
+      <xs:attribute name="currentlayersize" type="lzx:number" default="12" >
+</xs:attribute>
+      <xs:attribute name="currentlayerletter" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="bold" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_labelMenuItem" type="project:_labelMenuItem" >
+</xs:element>
+  <xs:complexType name="_labelMenuItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menuitem">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userItem" type="project:userItem" >
+</xs:element>
+  <xs:complexType name="userItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="hasAnswered" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="answer" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vslider" type="project:vslider" >
+</xs:element>
+  <xs:complexType name="vslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="switchaxis" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ switchaxis true means minimum-value is 
+            t op maximum is bottom false turns around </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ showvalue should the slider show the numbers of min/max </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Showrange should the slidertrack be with color while 'sliding' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initvalue" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawLine" type="project:baseDrawLine" >
+</xs:element>
+  <xs:complexType name="baseDrawLine" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawPaint">
+      <xs:attribute name="currentlinestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentlinelineWidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="currentlineOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListItem" type="project:eventUserListItem" >
+</xs:element>
+  <xs:complexType name="eventUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="withNames" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxWidth" type="lzx:number" default="82" >
+</xs:attribute>
+      <xs:attribute name="maxHeight" type="lzx:number" default="72" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="initWidth" type="lzx:number" default="42" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoardTextField" type="project:whiteBoardTextField" >
+</xs:element>
+  <xs:complexType name="whiteBoardTextField" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="typeOfObject" type="xs:string" default="text" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsVPanelSeperator" type="project:mainToolsVPanelSeperator" >
+</xs:element>
+  <xs:complexType name="mainToolsVPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentList" type="project:participentList" >
+</xs:element>
+  <xs:complexType name="participentList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchContactInCalendar" type="project:searchContactInCalendar" >
+</xs:element>
+  <xs:complexType name="searchContactInCalendar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="nachname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="meetingMemberId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconRestricted" type="project:moderationMiniIconRestricted" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconRestricted" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recorderProgressBar" type="project:_recorderProgressBar" >
+</xs:element>
+  <xs:complexType name="_recorderProgressBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_videoBoardStreamEvent" type="project:_videoBoardStreamEvent" >
+</xs:element>
+  <xs:complexType name="_videoBoardStreamEvent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelText" type="project:labelText" >
+</xs:element>
+  <xs:complexType name="labelText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListDetails" type="project:roomListDetails" >
+</xs:element>
+  <xs:complexType name="roomListDetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomcomment" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorDialog" type="project:errorDialog" >
+</xs:element>
+  <xs:complexType name="errorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseErrorDialog">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmDeleteWindow" type="project:confirmDeleteWindow" >
+</xs:element>
+  <xs:complexType name="confirmDeleteWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="messagelabelid" type="lzx:number" default="153" >
+</xs:attribute>
+      <xs:attribute name="confirmlabelid" type="lzx:number" default="154" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserListInner" type="project:restrictedUserListInner" >
+</xs:element>
+  <xs:complexType name="restrictedUserListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="resizeDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="resizeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="renderDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="renderDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedIndex" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchResultsContact" type="project:searchResultsContact" >
+</xs:element>
+  <xs:complexType name="searchResultsContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bigTextListItem" type="project:bigTextListItem" >
+</xs:element>
+  <xs:complexType name="bigTextListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewUserListItem" type="project:interviewUserListItem" >
+</xs:element>
+  <xs:complexType name="interviewUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoView" type="project:baseVideoView" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+	This class provides the basic functions for the video-output
+	
+	    @START_CODE
+            &lt;baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" /&gt;
+        @END_CODE	
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="weekView" type="project:weekView" >
+</xs:element>
+  <xs:complexType name="weekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myScheduledMeetings" type="project:myScheduledMeetings" >
+</xs:element>
+  <xs:complexType name="myScheduledMeetings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteNotification" type="project:chatParticipantsInviteNotification" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteNotification" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="usermessage" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="conferenceRoomName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeek" type="project:dateSelectorWeek" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="firstweekddaydate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawSimpleClick" type="project:drawSimpleClick" >
+</xs:element>
+  <xs:complexType name="drawSimpleClick" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="advancedRoomSettings" type="project:advancedRoomSettings" >
+</xs:element>
+  <xs:complexType name="advancedRoomSettings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="uploadTab" type="project:uploadTab" >
+</xs:element>
+  <xs:complexType name="uploadTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+      <xs:attribute name="sortOrder" type="xs:string" default="file" >
+</xs:attribute>
+      <xs:attribute name="preButton" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentFilesValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="ascFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="ascDate" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDateSelectorComponent" type="project:baseDateSelectorComponent" >
+</xs:element>
+  <xs:complexType name="baseDateSelectorComponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="weekclass" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="showcalenderweek" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="showcalendermonth" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="monthclass" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="daynumbers" type="xs:string" default="[0,1,2,3,4,5,6]" >
+</xs:attribute>
+      <xs:attribute name="dayclass" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleValueList" type="project:simpleValueList" >
+</xs:element>
+  <xs:complexType name="simpleValueList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="simpleListItem" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplebasetabpane" type="project:simplebasetabpane" >
+</xs:element>
+  <xs:complexType name="simplebasetabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseLeftPanel" type="project:baseLeftPanel" >
+</xs:element>
+  <xs:complexType name="baseLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageForDrawView" type="project:imageForDrawView" >
+</xs:element>
+  <xs:complexType name="imageForDrawView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="typeOfObject" type="xs:string" default="image" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="remotewidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="remoteheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recorderModus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isLocalSync" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicCombobox" type="project:dynamicCombobox" >
+</xs:element>
+  <xs:complexType name="dynamicCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isCountryCombobox" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propertyPanel" type="project:propertyPanel" >
+</xs:element>
+  <xs:complexType name="propertyPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanel">
+      <xs:attribute name="sendSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawArrow" type="project:baseDrawArrow" >
+</xs:element>
+  <xs:complexType name="baseDrawArrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawULine">
+      <xs:attribute name="currentdrawarrowlinestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestrokeFill" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestroke" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinelineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawObject" type="project:baseDrawObject" >
+</xs:element>
+  <xs:complexType name="baseDrawObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawPointer">
+      <xs:attribute name="newSlideNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="modernToolbar" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fullFit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentView" type="project:baseContentView" >
+</xs:element>
+  <xs:complexType name="baseContentView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendInit" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontabcontentleave" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="destroyByMethod" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewEventUserListTable" type="project:innerlistViewEventUserListTable" >
+</xs:element>
+  <xs:complexType name="innerlistViewEventUserListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminarea" type="project:terminarea" >
+</xs:element>
+  <xs:complexType name="terminarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar_day" type="project:calendar_day" >
+</xs:element>
+  <xs:complexType name="calendar_day" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="year" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdate" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="pixels_per_hour" type="xs:string" default="22" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="newYear" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newMonth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newDay" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="month" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="eventwidth" type="xs:string" default="${details.bgrect.width - ( this.opened ? 38 : 0 )}" >
+</xs:attribute>
+      <xs:attribute name="enddate" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="dayOfMonth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="asyncNew" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inviteMainWindow" type="project:inviteMainWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		This class shows a invitation window with clicking button which is located in video and audio panel.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="inviteMainWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomType" type="xs:string" default="conference" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		This class shows a invitation window with clicking button which is located in video and audio panel.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="http://www.denic.de" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resultPieCharPoll" type="project:resultPieCharPoll" >
+</xs:element>
+  <xs:complexType name="resultPieCharPoll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:ompiechart">
+      <xs:attribute name="yseries" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="xseries" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tooltipseries" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseItemActivityList" type="project:baseItemActivityList" >
+</xs:element>
+  <xs:complexType name="baseItemActivityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tStamp" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rcl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelidToolTipOkButton" type="lzx:number" default="1360" >
+</xs:attribute>
+      <xs:attribute name="labelidToolTipDenyButton" type="lzx:number" default="1361" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainer" type="project:videoContainer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Container view including all audio/video - views for a Meeting
+        
+        @keywords deprecated see participents.lzx
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListItem" type="project:roomListItem" >
+</xs:element>
+  <xs:complexType name="roomListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starttime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomcomment" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomType" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="conferenceView" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxUsers" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="ispublic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isaudience" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkForMaxUsers" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sipLoader" type="project:sipLoader" >
+</xs:element>
+  <xs:complexType name="sipLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="countryCombobox" type="project:countryCombobox" >
+</xs:element>
+  <xs:complexType name="countryCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:resetCombobox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="audienceView" type="project:audienceView" >
+</xs:element>
+  <xs:complexType name="audienceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentSaveView" type="project:baseContentSaveView" >
+</xs:element>
+  <xs:complexType name="baseContentSaveView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="saveIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refreshIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="onreload" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onnew" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondelete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="observerViews" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="deleteIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="confirmMessageLabelId" type="lzx:number" default="661" >
+</xs:attribute>
+      <xs:attribute name="addIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceBox" type="project:conferenceBox" >
+</xs:element>
+  <xs:complexType name="conferenceBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textInset" type="lzx:number" default="10" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="initHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="headerText" type="xs:string" default="Users" >
+</xs:attribute>
+      <xs:attribute name="closedHeight" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="closeable" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewListTable" type="project:interviewListTable" >
+</xs:element>
+  <xs:complexType name="interviewListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarWindow" type="project:calendarWindow" >
+</xs:element>
+  <xs:complexType name="calendarWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fieldRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalMenuIconBar" type="project:horizontalMenuIconBar" >
+</xs:element>
+  <xs:complexType name="horizontalMenuIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordListItem" type="project:recordListItem" >
+</xs:element>
+  <xs:complexType name="recordListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="valueName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="value" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawTriangle" type="project:baseDrawTriangle" >
+</xs:element>
+  <xs:complexType name="baseDrawTriangle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawClipArt">
+      <xs:attribute name="currenttrianglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currenttriangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currenttriangleOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="explorerBox" type="project:explorerBox" >
+</xs:element>
+  <xs:complexType name="explorerBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="defaulttitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Title of this Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizeable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentPanelVPanelSeperator" type="project:documentPanelVPanelSeperator" >
+</xs:element>
+  <xs:complexType name="documentPanelVPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewUserProfileWindow" type="project:viewUserProfileWindow" >
+</xs:element>
+  <xs:complexType name="viewUserProfileWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="syncWin" type="project:syncWin" >
+</xs:element>
+  <xs:complexType name="syncWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelText">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleBaseTabpane" type="project:simpleBaseTabpane" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tabpane. it used by chat. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleBaseTabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFilePDFExplorer" type="project:listPresentationFilePDFExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationFilePDFExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItemExplorer">
+      <xs:attribute name="swfName" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pdfname" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarMonthView" type="project:calendarMonthView" >
+</xs:element>
+  <xs:complexType name="calendarMonthView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fullDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="daydate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="countsubwievs" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsSeparator" type="project:miniIconSmybolExtraIconsSeparator" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsSeparator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="title" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedConferenceMenubar" type="project:restrictedConferenceMenubar" >
+</xs:element>
+  <xs:complexType name="restrictedConferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autoloaderBarOnly" type="project:autoloaderBarOnly" >
+</xs:element>
+  <xs:complexType name="autoloaderBarOnly" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="maxsteps" type="lzx:number" default="19" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="1300" >
+</xs:attribute>
+      <xs:attribute name="currentsteps" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentIconTopPanel" type="project:documentIconTopPanel" >
+</xs:element>
+  <xs:complexType name="documentIconTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="commonVideoViewContent" type="project:commonVideoViewContent" >
+</xs:element>
+  <xs:complexType name="commonVideoViewContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserListItem" type="project:restrictedUserListItem" >
+</xs:element>
+  <xs:complexType name="restrictedUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePagingListItem">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="userpicView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userpicURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selfItem" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="micMuted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isBroadcasting" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="canShare" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canDraw" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="folderFileExplorerItem" type="project:folderFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="folderFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iconView" type="project:iconView" >
+</xs:element>
+  <xs:complexType name="iconView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="enterExternMember" type="project:enterExternMember" >
+</xs:element>
+  <xs:complexType name="enterExternMember" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewVideoChooseUser" type="project:interviewVideoChooseUser" >
+</xs:element>
+  <xs:complexType name="interviewVideoChooseUser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoEventContainerStream" type="project:videoEventContainerStream" >
+</xs:element>
+  <xs:complexType name="videoEventContainerStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoObject" type="project:baseVideoObject" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Base container for a client, can be either:
+	a remote-video (subscribing/playing a video)
+	or a self-video (broadcasting a cam/mic)
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usercolor" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of this user, this is the color the user will also use for his chat-color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="respectRatio" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ publicSID is a hash-value to identify a user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimized" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="micMuted" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ micMuted indicates if the microphone is currently turned sound or gain to 0 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isload" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isShowMicMute" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMutedByModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initW" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="initH" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="hidebyAudioOnly" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="custom" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="messageWin" type="project:messageWin" >
+</xs:element>
+  <xs:complexType name="messageWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceRoomSidebar" type="project:conferenceRoomSidebar" >
+</xs:element>
+  <xs:complexType name="conferenceRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ompiechart" type="project:ompiechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ompiechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:chart">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserList" type="project:eventUserList" >
+</xs:element>
+  <xs:complexType name="eventUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userNewVideoContainer" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="comoboxListItemNoHeaders" type="project:comoboxListItemNoHeaders" >
+</xs:element>
+  <xs:complexType name="comoboxListItemNoHeaders" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePagingListItem">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomModeration" type="project:activityListRestrictedRoomModeration" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItemOrdered" type="project:turnOverListHeaderItemOrdered" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItemOrdered" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnoverlistheaderitemResize">
+      <xs:attribute name="orderBy" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="browserjavascriptcallback" type="project:browserjavascriptcallback" >
+</xs:element>
+  <xs:complexType name="browserjavascriptcallback" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="timer" type="lzx:number" default="10" >
+</xs:attribute>
+      <xs:attribute name="prevalue" type="xs:string" default="_browserjavascriptcallbackprevalue" >
+</xs:attribute>
+      <xs:attribute name="lzappId" type="xs:string" default="lzapp" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseOrganisationWindow" type="project:chooseOrganisationWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Organization choice modal window when an organization is added to a user.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chooseOrganisationWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="item_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Organization choice modal window when an organization is added to a user.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentPanelHPanelSeperator" type="project:documentPanelHPanelSeperator" >
+</xs:element>
+  <xs:complexType name="documentPanelHPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lineColorChoose" type="project:lineColorChoose" >
+</xs:element>
+  <xs:complexType name="lineColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="selectedColorDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inInitColorSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resetCombobox" type="project:resetCombobox" >
+</xs:element>
+  <xs:complexType name="resetCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:combobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordListitem" type="project:recordListitem" >
+</xs:element>
+  <xs:complexType name="recordListitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileUpload" type="project:fileUpload" >
+</xs:element>
+  <xs:complexType name="fileUpload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isOnlyZip" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyXml" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyProfile" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fr" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseBoundingBorderView" type="project:baseBoundingBorderView" >
+</xs:element>
+  <xs:complexType name="baseBoundingBorderView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="verticalClassActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="vWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="vHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="topClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="rightClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="preclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ extra Event for this kind of view
+		will be thrown before the view inits new </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousetracker_del" type="xs:string" default="$once{ new LzDelegate(this, 'checkStaticBorders' )}" >
+</xs:attribute>
+      <xs:attribute name="leftClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="hasshadow" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="hWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="hHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentBoundingBox" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingbarrier" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="bottomClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="activationVClassBounding" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="activationClassBounding" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listImageDrag" type="project:listImageDrag" >
+</xs:element>
+  <xs:complexType name="listImageDrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modernWhiteBoardPanel" type="project:modernWhiteBoardPanel" >
+</xs:element>
+  <xs:complexType name="modernWhiteBoardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsContainer" type="project:miniIconSmybolExtraIconsContainer" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="toolTipReference" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="iconList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="folderName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="calcItem" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contentSaveWindow" type="project:contentSaveWindow" >
+</xs:element>
+  <xs:complexType name="contentSaveWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseErrorDialog">
+      <xs:attribute name="saveObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="processNextIndex" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFileOrig" type="project:listPresentationFileOrig" >
+</xs:element>
+  <xs:complexType name="listPresentationFileOrig" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:listPresentationFilePDF">
+      <xs:attribute name="originalName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListPaged" type="project:turnOverListPaged" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverListPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseturnOverListPaged">
+      <xs:attribute name="sendEventToReload" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDocumentPanelItem" type="project:drawDocumentPanelItem" >
+</xs:element>
+  <xs:complexType name="drawDocumentPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remoteUserDetails" type="project:remoteUserDetails" >
+</xs:element>
+  <xs:complexType name="remoteUserDetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsTopPanel" type="project:mainToolsTopPanel" >
+</xs:element>
+  <xs:complexType name="mainToolsTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="flexibleEventRoom" type="project:flexibleEventRoom" >
+</xs:element>
+  <xs:complexType name="flexibleEventRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentMembers" type="project:appointmentMembers" >
+</xs:element>
+  <xs:complexType name="appointmentMembers" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="numberOfStart" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="numberOfRecords" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="numberOfMessage" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceView" type="project:conferenceView" >
+</xs:element>
+  <xs:complexType name="conferenceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="meetingTimer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPagedContent" type="project:listPagedContent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listPagedContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totalItemsInList" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showHScrollbar" type="xs:string" default="visible" >
+</xs:attribute>
+      <xs:attribute name="itemsToShow" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="itemHeight" type="lzx:number" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentLastItemInList" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingContainer" type="project:screenSharingContainer" >
+</xs:element>
+  <xs:complexType name="screenSharingContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawULine" type="project:baseDrawULine" >
+</xs:element>
+  <xs:complexType name="baseDrawULine" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawLine">
+      <xs:attribute name="currentulinestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentulinelineWidth" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="currentulineOpacity" type="lzx:number" default="0.5" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="liste" type="project:liste" >
+</xs:element>
+  <xs:complexType name="liste" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicFileName" type="project:dynamicFileName" >
+</xs:element>
+  <xs:complexType name="dynamicFileName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isNew" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar_event" type="project:calendar_event" >
+</xs:element>
+  <xs:complexType name="calendar_event" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="startTime" type="xs:string" default="${this.startHour * 60 + Number( this.startMin )}" >
+</xs:attribute>
+      <xs:attribute name="startMin" type="xs:string" default="$path{'start[1]/@minute'}" >
+</xs:attribute>
+      <xs:attribute name="startHour" type="xs:string" default="$path{'start[1]/@hour'}" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="$path{'@selected'}" >
+</xs:attribute>
+      <xs:attribute name="pixelPerMin" type="lzx:number" default="22/60" >
+</xs:attribute>
+      <xs:attribute name="normalColor" type="lzx:color" default="${this.getEventColor( this.category )}" >
+</xs:attribute>
+      <xs:attribute name="mouseIsDown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="hiColor" type="lzx:color" default="0xDDDDDD" >
+</xs:attribute>
+      <xs:attribute name="endTime" type="xs:string" default="${this.endHour * 60 + Number( this.endMin )}" >
+</xs:attribute>
+      <xs:attribute name="endMin" type="xs:string" default="$path{'end[1]/@minute'}" >
+</xs:attribute>
+      <xs:attribute name="endHour" type="xs:string" default="$path{'end[1]/@hour'}" >
+</xs:attribute>
+      <xs:attribute name="defaultTimes" type="xs:string" default="{startHour: 0, startMin: 0, endHour: 0, endMin: 0}" >
+</xs:attribute>
+      <xs:attribute name="category" type="xs:string" default="$path{'category[1]/@value'}" >
+</xs:attribute>
+      <xs:attribute name="bkgndColor" type="lzx:color" default="0x5D84CB" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="addLanguage" type="project:addLanguage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Popup view to input a new language name to be added. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="addLanguage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="tempValue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Popup view to input a new language name to be added. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomWhiteboard" type="project:activityListRestrictedRoomWhiteboard" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subitemsListContainter" type="project:subitemsListContainter" >
+</xs:element>
+  <xs:complexType name="subitemsListContainter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="updatecheckbox" type="project:updatecheckbox" >
+</xs:element>
+  <xs:complexType name="updatecheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:checkbox">
+      <xs:attribute name="tvalue" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthLetterSliderWin" type="project:changeWidthLetterSliderWin" >
+</xs:element>
+  <xs:complexType name="changeWidthLetterSliderWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableViewLetter">
+      <xs:attribute name="initialNumber" type="lzx:number" default="12" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabBottom" type="project:chatTabBottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ View of the buttom area of chat. It contains buttons of message,emoticons,clear. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatTabBottom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayBroadcast" type="project:videoObjectPlayBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectPlayBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoObject">
+      <xs:attribute name="ratioW" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratioH" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listWml" type="project:listWml" >
+</xs:element>
+  <xs:complexType name="listWml" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsTopPanelPointer" type="project:mainToolsTopPanelPointer" >
+</xs:element>
+  <xs:complexType name="mainToolsTopPanelPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawEllipse" type="project:baseDrawEllipse" >
+</xs:element>
+  <xs:complexType name="baseDrawEllipse" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawRect">
+      <xs:attribute name="currentellipsestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentellipselineWidth" type="xs:string" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentellipseOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:group name="topLevelElements">
+<xs:sequence>
+<xs:choice minOccurs="0" maxOccurs="unbounded">
+<xs:any />
+</xs:choice>
+</xs:sequence>
+</xs:group>
+</xs:schema>
diff --git a/WebContent/red5/admin.bat b/WebContent/red5/admin.bat
new file mode 100644
index 0000000..8ae8ec2
--- /dev/null
+++ b/WebContent/red5/admin.bat
@@ -0,0 +1,21 @@
+REM #############################################
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM #############################################
+@echo off
+set RED5_HOME=%~dp0
+set OM_CONTEXT=openmeetings
+
+set CLASSPATH=%RED5_HOME%\*;%RED5_HOME%\conf;%RED5_HOME%\plugins\*;%RED5_HOME%\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\classes
+
+java -cp "%CLASSPATH%" -Dcontext=%OM_CONTEXT% -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin %*
+
diff --git a/WebContent/red5/admin.sh b/WebContent/red5/admin.sh
new file mode 100644
index 0000000..a31a5ad
--- /dev/null
+++ b/WebContent/red5/admin.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+export RED5_HOME=$(cd $(dirname "$0"); pwd) 
+export OM_CONTEXT=openmeetings
+
+export CLASSPATH=$RED5_HOME/*:$RED5_HOME/conf:$RED5_HOME/plugins/*:$RED5_HOME/lib/*:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF/lib/*:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF/classes
+
+java -cp "$CLASSPATH" -Dcontext=${OM_CONTEXT} -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin $*
+
diff --git a/WebContent/red5/index.html b/WebContent/red5/index.html
new file mode 100644
index 0000000..8884681
--- /dev/null
+++ b/WebContent/red5/index.html
@@ -0,0 +1,23 @@
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Your Page Title</title>
+<meta http-equiv="REFRESH" content="0;url=openmeetings/">
+</head>
+<body>
+Redirect to openmeetings/
+</body>
+</html>
diff --git a/WebContent/red5/network_test.sh b/WebContent/red5/network_test.sh
new file mode 100755
index 0000000..64cb8e9
--- /dev/null
+++ b/WebContent/red5/network_test.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+
+LOCAL_HOST=$1
+SSH_LOGIN=$2
+TESTING_HOST=$3
+
+if [ -z "$3" ];then
+  echo "Usage: $0 LOCAL_HOST_IP REMOTE_SSH_LOGIN REMOTE_HOST_IP"
+  echo "Script requare installed 'iperf' on both local and remote hosts."
+  echo "Also need setting up ssh login without requiring a password. Use for this purpose ssl certificates."
+  exit 0;
+fi
+
+TEST_LOCAL_IPERF=`iperf 2>&1 | grep "Usage: iperf" |wc -l`
+if [ "1" != "$TEST_LOCAL_IPERF" ];then
+  echo "Script requare installed 'iperf' on local host."
+  exit 0;
+fi
+
+TEST_REMOTE_IPERF=`ssh $SSH_LOGIN@$TESTING_HOST "iperf 2>&1 | grep \"Usage: iperf\" |wc -l"`
+if [ "1" != "$TEST_REMOTE_IPERF" ];then
+  echo "Script requare installed 'iperf' on remote host."
+  exit 0;
+fi
+
+test_jitter_with_ping (){
+## $1 - size of packets in bites
+## $2 - count of send packets
+
+COUNT_PACKETS=1000
+if [ -z "$1" ]; then 
+  ping -c 1000 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
+else
+  ping -c $2 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
+  COUNT_PACKETS=$2
+fi
+
+MIN=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f1 | cut -d "." -f1`
+AVG=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f2 | cut -d "." -f1`
+MAX=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f3 | cut -d "." -f1`
+
+let "JITTER=($MAX-$AVG)-($AVG-$MIN)"
+if [ "$JITTER" -lt "0" ];then
+    let "JITTER=-$JITTER"
+fi
+echo "Jitter = $JITTER for $COUNT_PACKETS packets with size $1 bites (ping)"
+echo "Max latency is $MAX"
+if [ "$AVG" != "0"  ]; then 
+  let "JITTERPS=$JITTER*100/$AVG"
+  echo "Jitter = $JITTERPS % from $AVG ms"
+fi
+
+}
+
+test_opened_ports_with_iperf (){
+## Test opened ports
+echo "Start testing opened ports"
+echo "========================================"
+PORTS=$1 #"5080 1935 8088"
+AVAIL_PORTS=""
+rm server_port_log.txt
+for i in $PORTS; do
+  #echo "ssh $SSH_LOGIN@$TESTING_HOST \"iperf -s -p $i\""
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $i" >>server_port_log.txt 2>&1 &
+  sleep 2
+  #echo "telnet -e q $TESTING_HOST $i <telnet_commands.txt"
+  TELNET_OUT=`echo -e "q\nquit"|telnet -e q $TESTING_HOST $i`
+  #echo "ssh $SSH_LOGIN@$TESTING_HOST \"ps -C iperf|cut -d \" \" -f1 | xargs kill -9\""
+  ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_port_log.txt 2>&1 &
+  PORT_IS_AVAILABLE=`echo "$TELNET_OUT" | grep "Connected to"`
+  if [ "$PORT_IS_AVAILABLE" != "" ];then
+    echo "Port $i available"
+    AVAIL_PORTS="$AVAIL_PORTS $i"
+  else
+    echo "Port $i not available"
+  fi
+  sleep 2
+done
+
+}
+
+
+test_bandwidth_with_iperf (){
+## Test bandwidth of server
+echo "Start testing bandwidth of server"
+echo "========================================"
+  PORT=$1
+  TIME_TO_TEST=30
+  NUM_THREADS=10
+  REPORT_INTERVAL=5
+  #Download test
+  echo "Start outbound test"
+  #setup server
+  #echo "Starting server..."
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $PORT" >server_log.txt 2>&1 &
+  #wait when server started
+  sleep 2
+  #start test
+  #echo "Start test"
+  iperf -c $TESTING_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST | tee client_log.txt | grep "SUM"
+  #stop server
+  echo "Stop server"
+  ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_log.txt 2>&1 &
+  echo "End outbound test"
+  sleep 2
+  echo 
+  #Upload test 
+  #Comment: This we can use any port for testing, I use 12100
+  PORT=12100
+  echo "Start inbound test"
+  #setup server
+  #echo "Starting server..."
+  iperf -s -p $PORT >local_server_log.txt 2>&1 &
+  #wait when server started
+  sleep 2
+  #start test
+  #echo "Start test"
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -c $LOCAL_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST" | tee remote_client_log.txt | grep "SUM"
+  #stop server
+  echo "Stop server"
+  ps -C iperf | cut -d " " -f1 | xargs kill -9 >local_server_log.txt 2>&1 &
+  echo "End inbound test"
+}
+
+echo "Start testing latency and jitter"
+echo "========================================"
+test_jitter_with_ping 1000 100
+test_jitter_with_ping 1000 1000
+test_jitter_with_ping 10000 1000
+#Hard test
+#test_jitter_with_ping 1024 100000
+echo
+
+test_opened_ports_with_iperf "5080 1935 8088"
+#echo "$AVAIL_PORTS"
+echo
+
+test_bandwidth_with_iperf 1935
+
+## generate file with random content and size 1Mb
+#dd if=/dev/urandom of=test.log bs=1k count=1024
+
+
+
diff --git a/WebContent/src/base/components/button/baseChooseIcon.lzx b/WebContent/src/base/components/button/baseChooseIcon.lzx
new file mode 100644
index 0000000..86007c3
--- /dev/null
+++ b/WebContent/src/base/components/button/baseChooseIcon.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<resource name="background_drawchoose_rsc">
+    <frame src="resources/menudraw_up.png" />
+    <frame src="resources/menudraw_over.png" />
+    <frame src="resources/menudraw_down.png" />
+</resource>
+
+<class name="baseChooseIcon" extends="view" width="24" height="24" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    <attribute name="resourceN" value="" type="string" />
+    
+    <view name="_bg" x="1" y="1" height="$once{ parent.height - 2 }"
+    	  width="$once{ parent.width - 2 }" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" />
+    
+    <image name="_icon" src="$once{ canvas.getThemeImage(parent.resourceN) }" 
+    	  x="$once{ (parent.width-this.width) / 2 }"
+    	  y="$once{ (parent.height-this.height) / 2 }" 
+    	  width="18" height="18" stretches="both"/>
+    <attribute name="initX" value="0" type="number"/>
+    <attribute name="initY" value="0" type="number"/>
+    <attribute name="isselected" value="false" type="boolean" />
+	<!--
+    <attribute name="enabled" value="true" type="boolean" />
+	 -->
+    <attribute name="labelid" value="0" type="number" />
+    <handler name="onmouseover">
+    	this.isOut = false;
+    	this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+    	this._icon.setAttribute("x",this._icon.x-1);
+    	this._icon.setAttribute("y",this._icon.y-1);
+    	this._icon.setAttribute("width",this._icon.width+2);
+    	this._icon.setAttribute("height",this._icon.height+2);
+    </handler>
+    <handler name="onmouseout">
+    	this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    	if (this.initX == this._icon.x) {
+    		return;
+    	}
+    	this.isOut = true;
+    	this._icon.setAttribute("x",this.initX);
+    	this._icon.setAttribute("y",this.initY);
+    	this._icon.setAttribute("width",this._icon.width-2);
+    	this._icon.setAttribute("height",this._icon.height-2);
+    </handler>
+    <handler name="onclick">
+    	this.onmouseout.sendEvent(null);
+    </handler>
+    <handler name="oninit">
+    	this.initX = this._icon.x;
+    	this.initY = this._icon.y;
+        if (this.isselected){
+            this.onclick.sendEvent();
+            this.setAttribute('frame',3);
+        }
+    </handler>          
+    <labelTooltip labelid="$once{ parent.labelid }" inittwice="true" />
+</class>
+
+
+</library>
diff --git a/WebContent/src/base/components/button/blueButton.lzx b/WebContent/src/base/components/button/blueButton.lzx
new file mode 100644
index 0000000..c30474e
--- /dev/null
+++ b/WebContent/src/base/components/button/blueButton.lzx
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="blueButton" extends="basecomponent" width="200" height="18" 
+	       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" focusable="true">
+	    
+	    <attribute name="resourceItem" value="" type="string" />
+	    
+	    <attribute name="x_insetResource" value="4" type="number" />
+	    <attribute name="y_insetResource" value="4" type="number" />
+	    
+	    <attribute name="width_insetResource" value="18" type="number" />
+	    <attribute name="height_insetResource" value="18" type="number" />
+	    
+		<method name="setText" args="txt">
+			this.setAttribute('text',txt);
+		</method>
+		<view name="_bg" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		<view name="_bgOver" x="1" y="1" bgcolor="0xFFFFFF" opacity="0.5" visibility="hidden"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		<view name="_bgDown" x="1" y="1" bgcolor="0x000000" opacity="0.5" visibility="hidden"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		
+		<view name="disAbledView" visibility="${ ( parent.enabled ) ? 'hidden' : 'visible' }"
+	          bgcolor="white" opacity="1" x="1" y="1"
+	          width="$once{ parent.width-2 }" height="$once{ parent.height-2 }" />
+		
+	    <image name="_rscIcon" stretches="both" 
+	    	  opacity="${ ( parent.enabled ) ? 1 : 0.4 }"
+		  	  x="$once{ parent.x_insetResource }" 
+	    	  y="$once{ parent.y_insetResource }" 
+	          width="$once{ parent.width_insetResource }" 
+	          height="$once{ parent.height_insetResource }" 
+	          src="$once{ canvas.getThemeImage(parent.resourceItem) }" />
+	          
+	    
+	     
+		<handler name="onmouseover">
+			this._rscIcon.setAttribute("x",this._rscIcon.x-1);
+			this._rscIcon.setAttribute("y",this._rscIcon.y-1);
+			this._rscIcon.setAttribute("width",this._rscIcon.width+2);
+			this._rscIcon.setAttribute("height",this._rscIcon.height+2);
+			this._bgOver.setAttribute('visibility','visible');
+		</handler>
+		<handler name="onmouseout">
+			this._rscIcon.setAttribute("x",this._rscIcon.x+1);
+			this._rscIcon.setAttribute("y",this._rscIcon.y+1);
+			this._rscIcon.setAttribute("width",this._rscIcon.width-2);
+			this._rscIcon.setAttribute("height",this._rscIcon.height-2);
+		</handler>
+		<handler name="onmousedown">
+			if (!this.enabled) {
+				return;
+			}
+			this._bgOver.setAttribute('visibility','hidden');
+			this._bgDown.setAttribute('visibility','visible');
+		</handler>
+		<handler name="onmouseup">
+			this._bgDown.setAttribute('visibility','hidden');
+		</handler>	
+			
+	</class>
+
+</library>
diff --git a/WebContent/src/base/components/button/labelBlueButton.lzx b/WebContent/src/base/components/button/labelBlueButton.lzx
new file mode 100644
index 0000000..318ddfa
--- /dev/null
+++ b/WebContent/src/base/components/button/labelBlueButton.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelBlueButton" extends="blueButton" >
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		//Debug.write(this.labelid);
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/button/library.lzx b/WebContent/src/base/components/button/library.lzx
new file mode 100644
index 0000000..fa5dc19
--- /dev/null
+++ b/WebContent/src/base/components/button/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="incubator/roundrectbutton.lzx" />
+    
+	<include href="blueButton.lzx" />
+	<include href="labelBlueButton.lzx" />
+	<include href="simpleLabelButton.lzx" />
+    <include href="baseChooseIcon.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/button/resources/menudraw_down.png b/WebContent/src/base/components/button/resources/menudraw_down.png
new file mode 100644
index 0000000..8ba606b
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_down.png
Binary files differ
diff --git a/WebContent/src/base/components/button/resources/menudraw_over.png b/WebContent/src/base/components/button/resources/menudraw_over.png
new file mode 100644
index 0000000..d7e9f26
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_over.png
Binary files differ
diff --git a/WebContent/src/base/components/button/resources/menudraw_up.png b/WebContent/src/base/components/button/resources/menudraw_up.png
new file mode 100644
index 0000000..cebc7c5
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_up.png
Binary files differ
diff --git a/WebContent/src/base/components/button/simpleLabelButton.lzx b/WebContent/src/base/components/button/simpleLabelButton.lzx
new file mode 100644
index 0000000..5f63fad
--- /dev/null
+++ b/WebContent/src/base/components/button/simpleLabelButton.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="simpleLabelButton" extends="button" fontstyle="bold"
+	   fontsize="11" height="20" style="componentStyle">
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+<class name="simpleLabelRoundButton" extends="roundrectbutton" 
+	   fontsize="11" height="20" style="componentStyle" fontstyle="bold">
+
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+</class>
+
+<class name="simpleLabelButtonTooltip" extends="button" fontstyle="bold"
+	   fontsize="11" height="20" style="componentStyle">
+	
+	<attribute name="tooltipId" type="number" value="0" />
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	<labelTooltip labelid="$once{ parent.tooltipId }" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/calendarWindow.lzx b/WebContent/src/base/components/calendar/calendarWindow.lzx
new file mode 100644
index 0000000..1118862
--- /dev/null
+++ b/WebContent/src/base/components/calendar/calendarWindow.lzx
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="calendarWindow" extends="view" clickable="true" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">	
+
+	<attribute name="fieldRef" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	<method name="close">
+		lz.ModeManager.release(this);
+		this.destroy();
+	</method>	
+	
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method> 	
+	
+	<labelText fgcolor="0xFFFFFF" fontstyle="bold" labelid="481" x="1" y="1" />
+	
+    <view name="_close" x="${ this.parent.width-19 }" y="1" 
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>  	
+
+	<dateSelector y="20" name="_dateselector">
+		<handler name="oninit">
+			<![CDATA[
+			//Debug.write("dateselector oninit. ",this);
+			var t = parent.fieldRef.getText();
+			var newDate = parseStringToDate(t);
+			this.showingdate = newDate;
+			//Debug.write("n1:",this.showingdate);
+			this.init();
+			]]>
+		</handler>
+		<handler name="ondoubleselect" args="d">
+			parent.fieldRef.setAttribute('text',parseDateToString(d));
+			this.parent.close();
+		</handler>
+	</dateSelector>	
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/dateField.lzx b/WebContent/src/base/components/calendar/dateField.lzx
new file mode 100644
index 0000000..fd83911
--- /dev/null
+++ b/WebContent/src/base/components/calendar/dateField.lzx
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dateField" extends="view" width="104">
+	
+	<attribute name="enabled" value="true" type="boolean" />
+	<attribute name="setDefaultToday" value="false" type="boolean" />
+	<attribute name="additionalDay" value="0" type="number" />
+	
+	<handler name="oninit">
+		if (this.setDefaultToday){
+			if (this.additionalDay==0){
+				this._text.setAttribute('text',parseDateToString(new Date()));
+			} else {
+				var date = new Date();
+				date.setTime(date.getTime()+86400000);
+				this._text.setAttribute('text',parseDateToString(date));
+			}
+		}
+	</handler>
+ 
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method>
+	<method name="getText" >
+		return this._text.getText();
+	</method>	
+    
+    <method name="setDate" args="d">
+        
+    </method>
+    <method name="getDate">
+        var tString = this._text.getText();
+        var y = tString.substring(6,10);
+        var m = Number(tString.substring(3,5))-1;
+        var d = tString.substring(0,2);     
+        var date = new Date(y,m,d);
+        if ($debug) Debug.write(date); 
+        return date;
+    </method>
+    
+	<attribute name="text" value="" type="string" />
+
+	<customEdittext name="_text" width="$once{ parent.width-22 }" regexpType="date" 
+					align="left" text="${ parent.text }" enabled="${ parent.enabled }" />
+
+	<blueButton resourceItem="date_icon_rsc" align="right"
+		  opacity="${ ((parent.enabled) ? 1 : 0.4) }"
+		  x_insetResource="2" y_insetResource="2" width="20" height="20"
+		  width_insetResource="16" height_insetResource="16">
+		<handler name="onclick">
+			if (parent.enabled) {
+				new lz.calendarWindow(this.parent.parent,{fieldRef:this.parent._text,x:this.parent.x+(this.parent.width-200),y:this.parent.y});
+			}
+		</handler>
+		<labelTooltip labelid="162" />
+	</blueButton>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/dateSelector.lzx b/WebContent/src/base/components/calendar/dateSelector.lzx
new file mode 100644
index 0000000..209ca6f
--- /dev/null
+++ b/WebContent/src/base/components/calendar/dateSelector.lzx
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDateSelectorComponent" extends="view">
+
+	<attribute name="daynumbers" value="[0,1,2,3,4,5,6]" />
+
+	<attribute name="showingdate" type="string" value="" />
+	
+	<attribute name="dayclass" when="once" />
+
+	<attribute name="weekclass" when="once" />
+	<attribute name="showcalenderweek" value="true" type="boolean" />
+	
+	<attribute name="monthclass" when="once" />
+	<attribute name="showcalendermonth" value="true" type="boolean" />	
+	
+</class>
+
+<class name="dateSelectorDay" extends="baseDateSelectorComponent" width="24" bgcolor="0xFFFFFF">
+
+	<attribute name="dayIndexNumber" value="-1" type="number" />
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+
+	<handler name="onclick">
+		this.parent.parent.parent.parent.parent.parent.selectDate(this.daydate,this.dayIndexNumber,this.weekIndexNumber);
+	</handler>
+	
+	<handler name="ondblclick">
+		this.parent.parent.parent.parent.parent.parent.selectDoubleDate(this.daydate);
+	</handler>
+	
+	<attribute name="daydate" value="null" />
+	
+	<method name="init">
+		<![CDATA[
+        super.init();
+        if (parent.parent.parent.parent.month!=daydate.getMonth())
+        	this._date.setAttribute('text','<FONT COLOR="#CCCCCC">'+daydate.getDate()+'</FONT>');
+        else 
+        	this._date.setAttribute('text',daydate.getDate());
+        ]]>
+	</method>
+	
+	<text name="_date" fontsize="10" align="center" resize="true" />
+
+</class>
+
+<class name="dateSelectorDayHeader" extends="baseDateSelectorComponent" width="24" bgcolor="0xF9F9F9" >
+
+	<attribute name="daynumber" value="0" type="number" />
+	
+	<method name="init">
+		<![CDATA[
+	        super.init();
+	        var dateRoot = parent.parent.parent.parent;
+	        //if ($debug) Debug.write("daynumber",this,dateRoot);
+	        this._date.setAttribute('text',canvas.getLabelName(dateRoot.dayNamesLabelIds[( (daynumber>6) ? (daynumber-7) : daynumber )]));
+	        this._date._tip.setAttribute('labelid',dateRoot.dayLabelNamesLabelIds[( (daynumber>6) ? (daynumber-7) : daynumber )]); 
+        ]]>
+	</method>
+	
+	<text fgcolor="0x000000" name="_date" fontsize="10" align="center" resize="true"
+		  onmouseover="" onmouseout="">
+		<labelTooltip name="_tip" />
+	</text>
+
+</class>
+
+<class name="dateSelectorWeekNumber" extends="view" width="24" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+
+	<attribute name="weeknumber" value="0" type="number" />	
+	<text name="_date" fgcolor="white" fontsize="10" text="$once{ parent.weeknumber }" 
+		  align="center" resize="true" />
+
+</class>
+
+<class name="dateSelectorWeekNumberHeader" extends="view" width="24" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+
+	<attribute name="labelWeekHeader" value="" type="string" />	
+	<text name="_date" fgcolor="white" fontsize="10" text="$once{ parent.labelWeekHeader }" 
+		  align="center" resize="true" 
+		  onmouseover="" onmouseout="">
+		<labelTooltip name="_tip" labelid="468" />
+	</text>
+
+</class>
+
+<class name="dateSelectorWeek" extends="baseDateSelectorComponent" 
+		bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+
+	<attribute name="firstweekddaydate" value="null" />
+	
+	<method name="init">
+        <![CDATA[ 
+        super.init();
+        for( var i = 0 ; i < 7 ; i++ )  {
+        	new dayclass(this.content,{
+        						daydate:new Date(firstweekddaydate.getTime()+(86400000*i)),
+        						weekIndexNumber:this.weekIndexNumber,
+        						dayIndexNumber:i
+        					});
+       	}  
+		]]>
+	</method>
+	
+	<view name="content" layout="axis:x;spacing:1" />
+	
+</class>
+
+
+<class name="dateSelectorMonth" extends="baseDateSelectorComponent" 
+		bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="137" width="176">
+            
+	<attribute name="month" value="0" type="number" />
+	<attribute name="firstweekNumber" value="0" type="number" />
+	<attribute name="currentMonthName" value="" type="string" />
+
+	<method name="init">
+        <![CDATA[ 
+        super.init();
+        var dateRoot = parent.parent;
+        //if ($debug) Debug.write("dateRoot: ",dateRoot);
+        this.setAttribute('currentMonthName',dateRoot.monthnames[month]); 
+        for( var i = 0 ; i < 6 ; i++ ) new lz.dateSelectorWeek(this.content,{firstweekddaydate:new Date(this.showingdate.getTime()+(604800000*i)),dayclass:dayclass,month:month,weekIndexNumber:i});  
+        for( var i = 0 ; i < 7 ; i++ ) new lz.dateSelectorDayHeader(this.weekheader,{daynumber:(this.showingdate.getDay()+i)});  
+		]]>
+	</method> 
+	<view name="header" layout="axis:x" height="18" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		<text width="20" fgcolor="0x000000" height="18" 
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="oninit"><![CDATA[
+				this.setAttribute('text','&#60;');]]>
+			</handler>
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showPreviewsMonth();
+			</handler>
+		</text>
+		<text width="22" fgcolor="0x000000" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="oninit"><![CDATA[
+				this.setAttribute('text','&#60;&#60;');]]>
+			</handler>			
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showPreviewsYear();
+			</handler>
+		</text>	
+		<view width="91" height="$once{ parent.height }" >
+			<text fontsize="10" fgcolor="0x000000" align="center" text="${ parent.parent.parent.currentMonthName+' '+parent.parent.parent.parent.parent.year }" resize="true" />
+		</view>
+		<text width="22" fgcolor="0x000000" text=">>" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showNextYear();
+			</handler>
+		</text>
+		<text width="20" fgcolor="0x000000" text="  >" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showNextMonth();
+			</handler>
+		</text>	
+	</view>
+	<view name="weekheader" layout="axis:x;spacing:1" x="1" y="18" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"/>
+	<!-- 
+	<view name="weekNumber" layout="axis:y;spacing:1" x="1" y="35" />
+	 -->
+	<view name="content" layout="axis:y;spacing:1" x="1" y="35" />
+</class>
+
+<class name="baseDateSelector" extends="baseDateSelectorComponent" >
+	
+	<attribute name="dayNamesLabelIds" value="null" />
+	<attribute name="dayLabelNamesLabelIds" value="null" />
+	<attribute name="monthnames" value="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']"/> 
+
+
+	<attribute name="firstdayinweek" value="$once{ canvas.firstdayinweek }" type="number" />
+	<attribute name="year" value="" type="string" />
+	<attribute name="selecteddate" value="null" />
+	<attribute name="selected" value="null" />
+	
+	<event name="onselect" />
+	<event name="ondoubleselect" />
+	
+	<event name="onmonthSel" />
+	<event name="onyearSel" />
+	
+	<attribute name="dayIndexNumber" value="-1" type="number" />
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			this.dayNamesLabelIds = [459,453,454,455,456,457,458];
+			this.dayLabelNamesLabelIds = [466,460,461,462,463,464,465];
+			this.monthnames = [canvas.getLabelName(469),canvas.getLabelName(470),
+								canvas.getLabelName(471),canvas.getLabelName(472),
+								canvas.getLabelName(473),canvas.getLabelName(474),
+								canvas.getLabelName(475),canvas.getLabelName(476),
+								canvas.getLabelName(477),canvas.getLabelName(478),
+								canvas.getLabelName(479),canvas.getLabelName(480)]
+			
+			this.init();
+		]]>
+	</handler>	
+	
+	<method name="loadDate" args="datObj">
+		this.showingdate = datObj;
+		this.init();
+		this.showDate(this.selecteddate);
+		//this.onselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="init">
+        <![CDATA[ 
+	        super.init();
+	        
+	        var tIsInit = false;
+	        if (this.showingdate==""){
+	        	tIsInit = true;
+	        	this.showingdate = new Date();
+	        }
+	        this.setAttribute('year',this.showingdate.getFullYear());
+	        this.selecteddate = this.showingdate;
+	        var firstdayDate = this.getDateFirstDayInMonth();
+	        if (this.content.content != null) {
+	        	this.content.content.destroy();
+	        }
+	        new lz.dateSelectorMonth(this.content,{name:'content',
+		        	firstweekNumber:this.getWeekNumber(firstdayDate.getTime()),
+		        	month:this.selecteddate.getMonth(),
+		        	showingdate:firstdayDate,
+		        	dayclass:dayclass,
+		        	weekclass:weekclass,
+		        	showcalenderweek:showcalenderweek,
+		        	showcalendermonth:showcalendermonth
+	        	});
+	        this.hiliteDate(this.showingdate);
+	        //this.onselect.sendEvent(this.selecteddate);
+	        var ref = this.checkToday();
+	        
+	        if ($debug) Debug.write("INIT ",ref,ref.daydate);
+	        
+	        if (ref != null && tIsInit) {
+		        this.selectDate(ref.daydate, ref.dayIndexNumber, ref.weekIndexNumber);
+	        }
+		]]>
+	</method>
+	
+	<method name="checkToday">
+		<![CDATA[
+		var tDate = new Date();
+        if (this.showingdate.getMonth()== tDate.getMonth() && this.showingdate.getFullYear() == tDate.getFullYear()){
+        	//Debug.write("+++++++ Found Today");
+        	var ref = this.getDateRefByDateNumber(tDate.getDate(),tDate.getMonth());
+        	if (ref == null) {
+        		if ($debug) Debug.warn("Could not find date ref",tDate);
+        	}
+        	ref.setAttribute('bgcolor',0xCECECE);
+        	return ref;
+        }
+        
+        return this.getDateRefByDateNumber(this.showingdate.getDate(),this.showingdate.getMonth())
+		]]>
+	</method>
+	
+	<method name="showDate" args="dateObj">
+		<![CDATA[
+		if(this.selected!=null) this.selected.setAttribute('bgcolor',"white");
+		var i=0;
+		while (i<this.content.content.content.subviews.length){
+			var k=0;
+			while (k<this.content.content.content.subviews[i].content.subviews.length){
+				var t = this.content.content.content.subviews[i].content.subviews[k].daydate;
+				if (t.getDate()==dateObj.getDate() && t.getMonth()==dateObj.getMonth()){
+					this.content.content.content.subviews[i].content.subviews[k].onclick.sendEvent(null);
+					return;
+				}
+				k++;
+			}
+			i++;
+		}
+		]]>
+	</method>
+	
+	<method name="selectDate" args="dateObj,dayIndex,weekIndex">
+		dayIndexNumber = dayIndex;
+		weekIndexNumber = weekIndex;
+		this.showingdate = dateObj;
+		this.selecteddate = dateObj;
+		this.hiliteDate(this.showingdate);
+		this.checkToday();
+		this.onselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="selectDoubleDate" args="dateObj">
+		this.showingdate = dateObj;
+		this.selecteddate = dateObj;
+		this.hiliteDate(this.showingdate);
+		this.checkToday();
+		this.ondoubleselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="hiliteDate" args="dateObj">
+		<![CDATA[
+		if(this.selected!=null) this.selected.setAttribute('bgcolor',"white");
+		var i=0;
+		while (i<this.content.content.content.subviews.length){
+			var k=0;
+			while (k<this.content.content.content.subviews[i].content.subviews.length){
+				var t = this.content.content.content.subviews[i].content.subviews[k].daydate;
+				if (t.getDate()==dateObj.getDate() && t.getMonth()==dateObj.getMonth()){
+					this.selected = this.content.content.content.subviews[i].content.subviews[k];
+					this.selected.setAttribute('bgcolor',0xCCD7E1);
+					return;
+				}
+				k++;
+			}
+			i++;
+		}
+		]]>
+	</method>
+	
+	<!-- 
+		Here the Date has to be changed sothat the firstday in week is the first day in month
+	 -->
+	<method name="getDateFirstDayInMonth">
+		<![CDATA[
+		//First calc the date by the given first day in week
+		var newDateTemp = new Date(this.showingdate.getFullYear(), this.showingdate.getMonth(), 1, 12); //set hours to 12 to prevent timezone issues
+		////Debug.write(newDateTemp);
+		var factor = 0;
+		if (newDateTemp.getDay()>this.firstdayinweek)	
+			factor = -((newDateTemp.getDay()-this.firstdayinweek));
+		else if (newDateTemp.getDay()<this.firstdayinweek)
+			factor = (this.firstdayinweek-newDateTemp.getDay());
+		////Debug.write("factor: ",factor);
+		
+		//calc first day
+		var newDate = new Date( (newDateTemp.getTime()+(86400000*factor)) );
+
+		//if the first day is after the first day of the selected month then we have to add 7 Days
+		if (newDate.getDate()>1 && newDate.getMonth()==newDateTemp.getMonth()){
+			newDate = new Date( (newDate.getTime()-(86400000*7)) );
+		}
+		if ($debug) Debug.write("getDateFirstDayInMonth ",newDate);
+		return newDate;
+		]]>
+	</method>
+	
+	<method name="isoWeekDays" args="yday,wday" >
+		<![CDATA[
+		return yday - ((yday - wday + 382) % 7) + 3;
+		]]>
+	</method>
+	
+	<method name="isLeapYear" args="year" >
+		<![CDATA[
+		if (((year % 4) == 0 && (year % 100)!=0) || (year % 400)==0)
+			return 1;
+		else
+			return 0;
+		]]>
+	</method>
+	
+	<method name="getDaysInMonth" args="iYear,iMonth" >
+		<![CDATA[
+			return 32 - new Date(iYear, iMonth, 32).getDate();
+		]]>
+	</method>
+	
+	<method name="getWeekNumber" args="DateInMilliseconds" >
+		<![CDATA[
+		var d = new Date(DateInMilliseconds);
+		if ($debug) Debug.write("getWeekNumber: ",d);
+		var NumerOfDaysIn = d.getDate();
+		
+		for (var i=0;i<d.getMonth();i++) {
+			var monthDays = this.getDaysInMonth(d.getFullYear(),d.getMonth());
+			NumerOfDaysIn+=monthDays;
+		}
+		if ($debug) Debug.write("NumerOfDaysIn,month: ",NumerOfDaysIn,d.getMonth());
+		
+		var days = this.isoWeekDays(NumerOfDaysIn,d.getDay());
+		if ($debug) Debug.write("days: ",days);
+		
+		if (days < 0) {
+			NumerOfDaysIn += 365 + isLeapYear(--NumerOfDaysIn);
+			days = this.isoWeekDays(NumerOfDaysIn, d.getDay());
+		} else {
+			NumerOfDaysIn -= 365 + isLeapYear(NumerOfDaysIn);
+			var d2 = this.isoWeekDays(NumerOfDaysIn,d.getDay());
+			if (0 <= d2) {
+				days = d2;
+			}
+		}
+
+		if ($debug) Debug.write("days: ",days);
+		
+		return (Math.floor((days / 7)));
+		]]>
+	</method>
+	
+	<method name="clearContent">
+		this.content.destroy();
+		new LzView(this,{name:'content'});
+	</method>
+	
+	<method name="showPreviewsMonth">
+		<![CDATA[
+		this.clearContent();
+		var preyear = this.showingdate.getFullYear();
+		var previewsMonth = this.showingdate.getMonth()-1;
+		if (previewsMonth<0) {
+			previewsMonth=11;
+			preyear--;
+		}
+		this.showingdate = new Date(preyear, previewsMonth, this.showingdate.getDate());
+		this.onmonthSel.sendEvent(previewsMonth);
+		this.init();
+		]]>
+	</method>
+	
+	<method name="showNextMonth">
+		<![CDATA[
+		this.clearContent();
+		var nextyear = this.showingdate.getFullYear();
+		var nextMonth = this.showingdate.getMonth()+1;
+		if (nextMonth>11) {
+			nextMonth=0;
+			nextyear++;
+		}		
+		this.showingdate = new Date(nextyear, nextMonth, this.showingdate.getDate());
+		this.onmonthSel.sendEvent(nextMonth);
+		this.init();
+		]]>
+	</method>
+	
+	<method name="showPreviewsYear">
+		this.clearContent();
+		this.showingdate = new Date(this.showingdate.getFullYear()-1, this.showingdate.getMonth(), this.showingdate.getDate());
+		this.onyearSel.sendEvent(this.showingdate.getFullYear());
+		this.init();
+	</method>
+	
+	<method name="showNextYear">
+		this.clearContent();
+		this.showingdate = new Date(this.showingdate.getFullYear()+1, this.showingdate.getMonth(), this.showingdate.getDate());
+		this.onyearSel.sendEvent(this.showingdate.getFullYear());
+		this.init();
+	</method>
+	
+	<method name="getDateRefByDateNumber" args="dayNumber,month">
+		<![CDATA[
+		////Debug.write(this.content.content.content);
+		for (var i=0;i<this.content.content.content.subviews.length;i++){
+			////Debug.write("this.content.content.content.subviews: ",i,this.content.content.content.subviews[i]);
+			for (var k=0;k<this.content.content.content.subviews[i].content.subviews.length;k++){
+				////Debug.write("this.content.content.content.subviews[i].content.subviews[k].daydate.getDate(): ",this.content.content.content.subviews[i].content.subviews[k].daydate.getDate(),dayNumber);
+				////Debug.write("this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth(): ",this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth(),month);
+				if(this.content.content.content.subviews[i].content.subviews[k].daydate.getDate()==dayNumber && this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth()==month){
+					return this.content.content.content.subviews[i].content.subviews[k];
+				}
+				////Debug.write("k: ",k,this.content.content.content.subviews[i].content.subviews[k]);
+				////Debug.write(this.content.content.content.subviews[i].content.subviews[k].daydate);
+			}
+		}
+		return null;
+		]]>
+	</method>
+	
+	<view name="content">
+		<view name="content" />
+	</view>
+
+</class>
+
+<class name="dateSelector" extends="baseDateSelector"
+	weekclass="lz.dateSelectorWeek" dayclass="lz.dateSelectorDay" monthclass="lz.dateSelectorMonth" >
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/library.lzx b/WebContent/src/base/components/calendar/library.lzx
new file mode 100644
index 0000000..31e0d0e
--- /dev/null
+++ b/WebContent/src/base/components/calendar/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="dateSelector.lzx" />
+	<include href="dateField.lzx" />
+	<include href="calendarWindow.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/conferenceBox.lzx b/WebContent/src/base/components/conferencebox/conferenceBox.lzx
new file mode 100644
index 0000000..8b0ec40
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/conferenceBox.lzx
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>     
+
+<class name="conferenceBox" extends="view" width="250" height="400" >
+    
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('headerText',canvas.getLabelName(this.labelid));
+    </method>
+    
+    <attribute name="headerText" value="Users" type="string" />
+    
+    <attribute name="closeable" value="false" type="boolean" />
+    <attribute name="isopen" value="true" type="boolean" />
+    
+    <attribute name="textInset" value="10" type="number" />
+    
+    <attribute name="initHeight" value="0" type="number"/>
+    
+    <attribute name="closedHeight" value="40" type="number"/>
+    
+    <handler name="oninit">
+        if (this.initHeight == 0) {
+            this.initHeight = this.height;
+        }
+    </handler>
+    
+    <method name="doOpen">
+        if (!this.isopen) {
+            this.toggleopen();
+        }
+    </method>
+    
+    <method name="toggleopen">
+        if (this.isopen) {
+            this.setAttribute("isopen",false);
+            this.setAttribute("height",this.closedHeight);
+            this.content.setAttribute("visibility","hidden");
+        } else {
+            this.setAttribute("isopen",true);
+            this.setAttribute("height",this.initHeight);
+            //if ($debug) Debug.write("toggleopen TRUE ",this.initHeight)
+            this.content.setAttribute("visibility","visible");
+        }
+    </method>
+    
+    <view name="_head" x="0" y="0" width="${ parent.width }" height="24" 
+    	  clickable="$once{ this.parent.closeable }" >
+        
+        <handler name="onclick">
+        	if (this.parent.closeable) {
+        		this.parent.toggleopen();
+        	}
+        </handler>
+        
+        <view x="8" y="4" visible="${ this.parent.parent.closeable }">
+            
+	        <view visible="${ !this.parent.parent.parent.isopen }" x="2" y="3" resource="conferenceBox_button_min_rsc">
+	            <handler name="onmouseup">
+	                this.parent.parent.parent.toggleopen();
+	            </handler>                                  
+	        </view>
+	        <view visible="${ this.parent.parent.parent.isopen }" x="2" y="3" resource="conferenceBox_button_max_rsc">
+	            <handler name="onmouseup">
+	                this.parent.parent.parent.toggleopen();
+	            </handler>                                  
+	        </view>
+            
+        </view>
+
+        <text x="$once{ parent.parent.textInset }" fontstyle="bold" fontsize="14" fgcolor="0xFFFFFF" 
+              text="${ parent.parent.headerText }" valign="middle"></text>
+        
+    </view>  
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/library.lzx b/WebContent/src/base/components/conferencebox/library.lzx
new file mode 100644
index 0000000..c00e280
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <resource name="conferenceBox_button_min_rsc" src="resources/box_closed.png" />
+    
+    <resource name="conferenceBox_button_max_rsc" src="resources/box_open.png" />
+    
+    <resource name="kaleidoscope_textbox_milk" 
+          src="resources/milk.swf" />
+
+    <include href="conferenceBox.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/resources/box_closed.fla b/WebContent/src/base/components/conferencebox/resources/box_closed.fla
new file mode 100644
index 0000000..66e7459
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_closed.fla
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_closed.png b/WebContent/src/base/components/conferencebox/resources/box_closed.png
new file mode 100644
index 0000000..49f20a3
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_closed.png
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_open.fla b/WebContent/src/base/components/conferencebox/resources/box_open.fla
new file mode 100644
index 0000000..9ea85a7
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_open.fla
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_open.png b/WebContent/src/base/components/conferencebox/resources/box_open.png
new file mode 100644
index 0000000..b5873a8
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_open.png
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/milk.swf b/WebContent/src/base/components/conferencebox/resources/milk.swf
new file mode 100644
index 0000000..e52a1f8
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/milk.swf
Binary files differ
diff --git a/WebContent/src/base/components/explorer/explorerBox.lzx b/WebContent/src/base/components/explorer/explorerBox.lzx
new file mode 100644
index 0000000..3d2e8d4
--- /dev/null
+++ b/WebContent/src/base/components/explorer/explorerBox.lzx
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="explorerBox" extends="view" width="250" y="100" visibility="hidden"
+    height="400" bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" 
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+
+	<attribute name="showWindowEffect" value="false" type="boolean" />
+	
+	<attribute name="annimationStartStyle" value="center" type="string" />
+	
+	<attribute name="annimationColor" value="$once{ canvas.getThemeColor('basebgcolorizer') }" type="string" />
+
+	<event name="animationInited" />
+
+    <handler name="oninit">
+    	<![CDATA[
+	    	//if($debug) Debug.write("explorerBox/oninit showWindowEffect? ",canvas.showWindowEffect);
+	    	if (canvas.showWindowEffect=="y" || this.showWindowEffect){
+	    		//if($debug) Debug.write("explorerBox/showWindowEffect == YES");
+	    		if (this.annimationStartStyle == "center") {
+	    			new lz.boxInitEffect(parent,{
+		    					x:this.x+(this.width/2)-50,
+		    					y:this.y+(this.height/2)-10,
+		    					zielx:this.x,
+		    					ziely:this.y,
+		    					bgcolor:annimationColor,
+		    					zielwidth:this.width,
+		    					zielheight:this.height,
+		    					objRef:this
+	    					});
+	    		} else if (this.annimationStartStyle == "mouse"){
+	    			new lz.boxInitEffect(parent,{
+		    					x:parent.getMouse("x"),
+		    					y:parent.getMouse("y"),
+		    					width:2,
+		    					height:2,
+		    					zielx:this.x,
+		    					ziely:this.y,
+		    					bgcolor:annimationColor,
+		    					zielwidth:this.width,
+		    					zielheight:this.height,
+		    					objRef:this
+	    					});
+				} else {
+					if ($debug) Debug.warn("Unkown annimationStartStyle");
+				}
+	    	} else {
+	    		this.sendAnniComplete();
+	    	}
+    	]]>
+    </handler>
+    
+    <method name="sendAnniComplete">
+    	//if($debug) Debug.write("sendAnniComplete");
+    	this.setAttribute('visibility','visible');
+    	this.animationInited.sendEvent(null);
+    	this.setShadow(); 	
+    </method>
+
+    <method name="setShadow" args="bool">
+        this.hasshadow = bool;
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+            //Debug.write(this.normalMC);
+            ////Debug.write("this.normalMC: ",this.normalMC);
+            ////Debug.write("this: ",this);
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	
+          
+	<!--- The Title of this Box -->
+	<attribute name="title" value="defaulttitle" type="string" />
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="resizeable" value="false" type="boolean" />
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="false" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />
+	
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<!-- do not allow draging of window -->
+	<attribute name="allowDragging" value="true" type="boolean" />
+	
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+	<handler name="oninit">
+		this.initheight=this.height;
+		////Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+	</handler>
+	
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+		this.doDestroy();
+	</method>
+	
+	<method name="toggleopen">
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+	    if (!this.allowDragging) {
+	       return;
+	    }
+		//It's important to remove the dragger and do docking stuff before you check for connected Boxes
+		dragger.remove();
+		if (obj==this){
+			if (docking) arrangePosition();
+		} else {
+			if (docking) _lookforParentOnly(obj);
+		}
+			
+		//check for connected Boxes
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._removeDragState(this);
+			}
+		}
+
+	</method>
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+		this.bringToFront();
+		if (!this.allowDragging) {
+           return;
+        }
+		_calcdockingList();
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._startDragState(this);
+			}
+		}
+		//store position cause it wasn't dragged by itself
+		if (obj!=this){
+			storeAdjustmentToParent(obj.x,obj.y);
+		}
+		dragger.apply();
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg]["docking"] && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg]["docking"] && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+		
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+    <animator attribute="y" to="20" duration="1000" started="false" />
+        
+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    
+    
+    <method name="doDestroy">
+        this.destroy();
+    </method>
+	
+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" 
+		  x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >
+	
+		<gradientview x="0" width="${ this.parent.width }" height="20"
+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
+				colorTo="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+		</gradientview>
+		
+        <text fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+			
+		<view visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-20 }" 
+			y="2" resource="btn_presenter_close"
+                onmouseover="this.setAttribute('frame',2)"
+                onmouseout="this.setAttribute('frame',1)"
+                onmousedown="this.setAttribute('frame',3)"
+                onmouseup="this.setAttribute('frame',1)" >
+			<handler name="onclick">
+				this.parent.parent.close();
+			</handler>									
+		</view>
+	</view>
+    <handler name="onaddsubview" args="v">
+		////Debug.write("onaddsubview",v);
+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();
+    </handler>
+    <view visible="${ this.parent.resizeable }" name="_resizeview" 
+    	  x="${ this.parent.width - 17 }" y="${ this.parent.height - 17 }" 
+        resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" 
+        onmousedown="this.parent.rs.apply()"
+        onmouseup="this.parent.rs.remove()" >
+    	<handler name="oninit">
+    		//if ($debug) Debug.write("setTint");
+    		//TODO: Fix this, does not work at the moment
+    		//http://code.google.com/p/openmeetings/issues/detail?id=470
+    		this.setColor(canvas.getThemeColor('baseMousecolorizer'));
+    	</handler>  	
+    </view>
+    <resizestate name="rs"/>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/explorer/labelexplorerBox.lzx b/WebContent/src/base/components/explorer/labelexplorerBox.lzx
new file mode 100644
index 0000000..66a170c
--- /dev/null
+++ b/WebContent/src/base/components/explorer/labelexplorerBox.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelExplorerBox" extends="explorerBox" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/explorer/library.lzx b/WebContent/src/base/components/explorer/library.lzx
new file mode 100644
index 0000000..d53d994
--- /dev/null
+++ b/WebContent/src/base/components/explorer/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="incubator/gradientview.lzx" /> 
+
+	<include href="resources/" />
+	
+	<include href="explorerBox.lzx" />
+	<include href="labelexplorerBox.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png
new file mode 100644
index 0000000..e5ae343
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png
new file mode 100644
index 0000000..093a0b0
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png
new file mode 100644
index 0000000..fca6ec8
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png
new file mode 100644
index 0000000..e05de83
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png
new file mode 100644
index 0000000..faba70d
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png
new file mode 100644
index 0000000..b4dafa3
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorerbar.png b/WebContent/src/base/components/explorer/resources/explorerbar.png
new file mode 100644
index 0000000..4cb2d59
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorerbar.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/feather-1.png b/WebContent/src/base/components/explorer/resources/feather-1.png
new file mode 100644
index 0000000..d8f5175
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/feather-1.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/feather-16x16.png b/WebContent/src/base/components/explorer/resources/feather-16x16.png
new file mode 100644
index 0000000..0db0d36
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/feather-16x16.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/library.lzx b/WebContent/src/base/components/explorer/resources/library.lzx
new file mode 100644
index 0000000..8d3051d
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/library.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<resource src="explorerbar.png" name="explorer_thumb_rsc" />
+
+<resource name="explorer_thumb_rsc" src="feather-16x16.png"/>
+
+
+<resource name="explorer_button_min_rsc" >
+	<frame src="explorbar_minimize_no.png" />
+	<frame src="explorbar_minimize_mo.png" />
+	<frame src="explorbar_minimize_dn.png" />
+</resource>
+
+<resource name="explorer_button_max_rsc" >
+	<frame src="explorbar_maximize_no.png" />
+	<frame src="explorbar_maximize_mo.png" />
+	<frame src="explorbar_maximize_dn.png" />
+</resource>
+
+<resource name="explorer_resize_rsc" src="resizer.swf" />
+
+<resource name="explorer_resizemouse_rsc" src="resizemouse.png" />
+
+
+
+</library>
diff --git a/WebContent/src/base/components/explorer/resources/resizemouse.png b/WebContent/src/base/components/explorer/resources/resizemouse.png
new file mode 100644
index 0000000..be3164f
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizemouse.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.fla b/WebContent/src/base/components/explorer/resources/resizer.fla
new file mode 100644
index 0000000..07de957
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.fla
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.png b/WebContent/src/base/components/explorer/resources/resizer.png
new file mode 100644
index 0000000..2c951fe
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.swf b/WebContent/src/base/components/explorer/resources/resizer.swf
new file mode 100644
index 0000000..2e5d0da
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.swf
Binary files differ
diff --git a/WebContent/src/base/components/iconView.lzx b/WebContent/src/base/components/iconView.lzx
new file mode 100644
index 0000000..494c5f8
--- /dev/null
+++ b/WebContent/src/base/components/iconView.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="iconView" extends="view">
+    <attribute name="enabled" value="true" type="boolean" />
+    <handler name="onenabled" args="ena">
+        //Debug.write("onenabled: ",ena);
+        ( this.enabled ) ? this.setAttribute('frame',1) : this.setAttribute('frame',4);
+    </handler>
+    <handler name="onmouseover">
+        if (this.enabled) this.setAttribute('frame',2);
+    </handler>
+    <handler name="onmouseout">
+        if (this.enabled) this.setAttribute('frame',1);
+    </handler>
+    <handler name="onmousedown">
+        if (this.enabled) this.setAttribute('frame',3);
+    </handler>
+    <handler name="onmouseup">
+        if (this.enabled) this.setAttribute('frame',1);
+    </handler>            
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/labelRadioButton.lzx b/WebContent/src/base/components/labelRadioButton.lzx
new file mode 100644
index 0000000..e11d718
--- /dev/null
+++ b/WebContent/src/base/components/labelRadioButton.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelRadioButton" extends="radiobutton" style="componentStyle">
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/labeltabelement.lzx b/WebContent/src/base/components/labeltabelement.lzx
new file mode 100644
index 0000000..bab29ad
--- /dev/null
+++ b/WebContent/src/base/components/labeltabelement.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labeltabelement" extends="tabelement" style="componentStyle">
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/library.lzx b/WebContent/src/base/components/library.lzx
new file mode 100644
index 0000000..a4d80cf
--- /dev/null
+++ b/WebContent/src/base/components/library.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	
+	<include href="miniIcons.lzx" />
+    <include href="iconView.lzx" />
+    <include href="miniIconsNew.lzx" />
+    <include href="resetCombobox.lzx" />
+    <include href="updatecheckbox.lzx" />
+    <include href="tableCombobox.lzx" />
+    <include href="tableListItem.lzx" />
+    <include href="labelRadioButton.lzx" />
+    <include href="labeltabelement.lzx" />
+    
+    <include href="scrollbars/" />
+    <include href="text/" />
+    <include href="omcharts/" />
+    <include href="button/" />
+    <include href="explorer/" />    
+    <include href="panel/" />  
+    <include href="turnoverlist/" />
+    <include href="turnoverlistpaged/" />
+    <include href="calendar/" />
+    <include href="simplevaluelist/" />
+    <include href="upload/" /> 
+    <include href="validbox/" />
+    <include href="presenter/" />
+    <include href="lps/" />
+    <include href="conferencebox/" />
+
+</library>
diff --git a/WebContent/src/base/components/lps/basePropertySelector.lzx b/WebContent/src/base/components/lps/basePropertySelector.lzx
new file mode 100644
index 0000000..2d9a099
--- /dev/null
+++ b/WebContent/src/base/components/lps/basePropertySelector.lzx
@@ -0,0 +1,48 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="hidePropertyView" extends="view"
+	   width="$once{ parent.width }" height="$once{ parent.height }"
+	   opacity="0.7" bgcolor="0xFFFFFF" />
+
+<class name="basePropertySelector" extends="view">
+	
+	<!--- position of the SliderWin or ColorPicker -->
+	<attribute name="boxPosition" value="down" type="string" />
+	
+	<attribute name="isEnabled" value="true" type="boolean" />
+	<attribute name="enabledView" value="null" />
+	
+	<method name="setEnabled" args="b">
+		this.setAttribute('isEnabled',b);
+		if (this.enabledView != null) {
+			this.enabledView.destroy();
+			this.enabledView = null;
+		}
+		if (!b) {
+			this.enabledView = new lz.hidePropertyView(this);
+		} 
+	</method>
+    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx b/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx
new file mode 100644
index 0000000..646de89
--- /dev/null
+++ b/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx
@@ -0,0 +1,146 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthLetterSlider" extends="basePropertySelector" bgcolor="white" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="4" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="12" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	this.setEnabled(true);
+    </method>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+                var pick = new lz.changeWidthLetterSliderWin(canvas,{initialNumber:parent.numericValue.tempValue,btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),y:(parent.getAttributeRelative('y',canvas))});
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="431" />
+    </button>
+    
+</class>
+    
+<class name="closableViewLetter" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthLetterSliderWin" extends="closableViewLetter" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="12" type="number"/>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="4" maxvalue="100"
+        initvalue="$once{ parent.initialNumber }" showrange="false" >
+        <handler name="onvalue" args="v">
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/src/base/components/lps/changeWidthSlider.lzx b/WebContent/src/base/components/lps/changeWidthSlider.lzx
new file mode 100644
index 0000000..dfa746a
--- /dev/null
+++ b/WebContent/src/base/components/lps/changeWidthSlider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthSlider" extends="basePropertySelector" bgcolor="0xFFFFFF" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="1" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="3" type="number"/>
+    
+    <attribute name="boxPosition" value="down" type="string"/>
+    
+    <attribute name="labelid" value="429" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('tempValue',this.initialNumber);
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	if ($debug) Debug.write("setSliderValue ",v);
+    	this.setEnabled(true);
+    </method>
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+            	if (this.parent.boxPosition=="up"){
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas)-140+parent.height)
+				            			});
+            	} else {
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas))
+				            			});
+            	}
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelid }" />
+    </button>
+    
+</class>
+    
+<class name="closableView" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthSliderWin" extends="closableView" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="3" type="number"/>
+    <attribute name="maxvalue" value="100" type="number" />
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="1" maxvalue="$once{ parent.maxvalue }" 
+        initvalue="$once{ parent.initialNumber }" showrange="false" showvalue="true">
+        <handler name="onvalue" args="v">
+            //if ($debug) Debug.write("onvalue",v);
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>        
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/src/base/components/lps/colorpicker.lzx b/WebContent/src/base/components/lps/colorpicker.lzx
new file mode 100644
index 0000000..dbd62d5
--- /dev/null
+++ b/WebContent/src/base/components/lps/colorpicker.lzx
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+      changed by swagner
+  -->
+<library>
+    
+    
+<class name="colorSlider" extends="slider" x="4"
+    minvalue="1" maxvalue="240" 
+    trackheight="4" thumbheight="12"
+    showrange="false" showvalue="true">
+    <attribute name="doSendValueEvent" value="false" type="boolean" />
+    <handler name="onvalue">
+        if (this.doSendValueEvent) { 
+            classroot.updateColor();
+        } else {
+            this.doSendValueEvent=true;
+        }
+    </handler>
+</class>    
+
+<class name="colorPot" width="13" height="13" 
+    onmouseout="">
+    <handler name="onmouseover">
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColorTZ = new Color(t);
+        myColorTZ.setRGB(this.mycolor);        
+        this.setAttribute('mycolorString',this.parent.parent.parent.numberToRGB(myColorTZ));
+    </handler>
+    <attribute name="mycolor" type="color" value="0x000000"/>
+    <attribute name="mycolorString" type="string" value="0x000000"/>
+    <attribute name="listener" type="expression"/>
+    <handler name="onclick">
+        listener.changeColor(this.mycolor);
+        listener.close();
+    </handler>
+    <handler name="ondblclick">
+        listener.changeColor(this.mycolor);
+        listener.close();
+    </handler>    
+    <labelTooltip text="${ parent.mycolorString }" />
+    <view bgcolor="#444444" width="13" height="13" >
+        <view bgcolor="${classroot.mycolor}"  x="1" y="1" width="11" height="11"/>
+    </view>
+</class>
+  
+<class name="colorRow" layout="axis:x;spacing:-1" />
+    
+<class name="colorpicker" extends="guiPresenter" labelid="425" isdragable="false" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="250" height="154" >
+    
+    <attribute name="btnRef" value="null" />
+      
+    <attribute name="selectedColor" type="number" value="0x00aeef"/>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+        this.btnRef.closedColorPicker();
+        this.btnRef.setAttribute('selectedColor', this.selectedColor);
+        this.btnRef.setTransformedStringColor();        
+    </handler>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+    <method name="doDefaultColor" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            var hsl = RGBtoHLS(r,g,b);
+            ////Debug.write("doDefaultColor ",hsl);
+            this.updateSlidersByValue(hsl);
+            var rgb = HLStoRGB(s_hue.value, s_bri.value, s_sat.value);
+            var c = rgb.r << 16 | rgb.g << 8 | rgb.b
+            this.setAttribute('selectedColor', c);
+        ]]>    
+    </method>  
+    
+    <method name="updateColor" >
+        <![CDATA[
+            ////Debug.write("updateColor ");
+            var rgb = HLStoRGB(s_hue.value, s_bri.value, s_sat.value);
+            var c = rgb.r << 16 | rgb.g << 8 | rgb.b
+            this.setAttribute('selectedColor', c);
+
+        ]]>
+    </method>
+    
+    <method name="changeColor" args="c">
+        <![CDATA[
+            ////Debug.write("changeColor ");
+            this.setAttribute('selectedColor', c);
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            var hsl = RGBtoHLS(r,g,b);
+            this.updateSlidersByValue(hsl);
+        ]]>
+    </method>
+    
+    <method name="updateSlidersByValue" args="hsl">
+        s_hue.doSendValueEvent=false;
+        s_hue.setValue(hsl.h);
+        s_bri.doSendValueEvent=false;
+        s_bri.setValue(hsl.l);
+        s_sat.doSendValueEvent=false;
+        s_sat.setValue(hsl.s);        
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>
+    
+    <method name="RGBtoHLS" args="r,g,b">
+        <![CDATA[
+            var h,l,s;
+            var max = (Math.max(Math.max(r, g), b))/255;
+            var min = (Math.min(Math.min(r, g), b))/255;
+            var delta = max-min;
+            l = (max+min)/2;
+            s = (max == min) ? 0 : ((l <= 0.5) ? delta/l/2 : delta/(2-l*2));
+            if(r/255 == max) h = (g-b)/delta/255;
+            else if(g/255 == max) h = 2+(b-r)/delta/255;
+            else if(b/255 == max) h = 4+(r-g)/delta/255;
+            h *= 40;
+            if(h < 0) h += 240;
+            h = Math.round(h);
+            return {h:((isNaN(h)) ? 0 : h), l:Math.round(l*240), s:Math.round(s*240)};
+        ]]>
+    </method>
+    
+    <method name="HLStoRGB" args="h,l,s">
+        <![CDATA[
+            var r,g,b;
+            if(s == 0) {
+                r = g = b = Math.round(l/240*255);
+            } else {
+                h /= 240; l /= 240; s /= 240;
+                var temp4,temp3;
+                var temp2 = (l < 0.5) ? l*(s+1) : l+s-l*s;
+                var temp1 = l*2 - temp2;
+                for(var i=0; i<3; i++) {
+                    switch(i) {
+                        case 0: temp3 = h+1/3; break;
+                        case 1: temp3 = h; break;
+                        case 2: temp3 = h-1/3; break;
+                    }
+                    if(temp3 < 0) temp3++;
+                    else if(temp3 > 1) temp3--;
+                    if(temp3*6 < 1) temp4 = temp1+(temp2-temp1)*6*temp3;
+                    else if(temp3*2 < 1) temp4 = temp2;
+                    else if(temp3*3 < 2) temp4 = temp1+(temp2-temp1)*((2/3)-temp3)*6;
+                    else temp4 = temp1;
+                    switch(i) {
+                        case 0: r = Math.round(temp4*255); break;
+                        case 1: g = Math.round(temp4*255); break;
+                        case 2: b = Math.round(temp4*255); break;
+                    }
+                }
+            }
+            return {r:r, g:g, b:b};
+        ]]>
+    </method>
+    
+    
+    <text fontsize="8" x="$once{classroot.s_hue.width + classroot.s_hue.x}"
+          y="$once{classroot.s_hue.y - 4}" text="HUE" width="26"/>
+      
+    <colorSlider name="s_hue" y="102" />
+    
+    <text fontsize="8" x="$once{classroot.s_bri.width + classroot.s_bri.x}"
+          y="$once{classroot.s_bri.y - 4}" text="BRI" />
+      
+    <colorSlider name="s_bri" y="120" />
+    
+    <text fontsize="8" x="$once{classroot.s_sat.width + classroot.s_sat.x}"
+          y="$once{classroot.s_sat.y - 4}" text="SAT" />
+    
+    <colorSlider name="s_sat" y="138" />  
+    
+    
+    <!-- current color -->
+    <view name="c2" bgcolor="black" width="30" height="66" y="24" x="206">
+        <view name="current" x="1" y="1" bgcolor="${classroot.selectedColor}" 
+            width="$once{parent.width -2}" height="$once{parent.height -2}" />
+    </view>
+
+    <!-- default colors -->
+    <view x="4" y="26" layout="axis:y;spacing:-1" >
+
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#ff0000" mycolorString="0xFF0000" />
+            <colorPot listener="$once{classroot}" mycolor="#ffff00" mycolorString="0xFFFF00" />
+            <colorPot listener="$once{classroot}" mycolor="#00ff00" mycolorString="0x00FF00" />
+            <colorPot listener="$once{classroot}" mycolor="#00ffff" mycolorString="0x00FFFF" />
+            <colorPot listener="$once{classroot}" mycolor="#0000ff" mycolorString="0x0000FF" />
+            <colorPot listener="$once{classroot}" mycolor="#ff00ff" mycolorString="0xFF00Ff" />
+            <colorPot listener="$once{classroot}" mycolor="#ffffff" mycolorString="0xFFFFFF" />
+            <colorPot listener="$once{classroot}" mycolor="#ebebeb" mycolorString="0xEBEBEB" />
+            <colorPot listener="$once{classroot}" mycolor="#e1e1e1" mycolorString="0xE1E1E1" />
+            <colorPot listener="$once{classroot}" mycolor="#d7d7d7" mycolorString="0xD7D7D7" />
+            <colorPot listener="$once{classroot}" mycolor="#cccccc" mycolorString="0xCCCCCC" />
+            <colorPot listener="$once{classroot}" mycolor="#c2c2c2" mycolorString="0xC2C2C2" />
+            <colorPot listener="$once{classroot}" mycolor="#b7b7b7" mycolorString="0xB7B7B7" />
+            <colorPot listener="$once{classroot}" mycolor="#acacac" mycolorString="0xACACAC" />
+            <colorPot listener="$once{classroot}" mycolor="#a0a0a0" mycolorString="0xA0A0A0" />
+            <colorPot listener="$once{classroot}" mycolor="#959595" mycolorString="0x959595" />
+        </colorRow>
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#ee1d24" mycolorString="0xEE1D24" />
+            <colorPot listener="$once{classroot}" mycolor="#fff100" mycolorString="0xFFF100" />
+            <colorPot listener="$once{classroot}" mycolor="#00a650" mycolorString="0x00A650" />
+            <colorPot listener="$once{classroot}" mycolor="#00aeef" mycolorString="0x00AEEF" />
+            <colorPot listener="$once{classroot}" mycolor="#2f3192" mycolorString="0x2F3192" />
+            <colorPot listener="$once{classroot}" mycolor="#ed008c" mycolorString="0xED008C" />
+            <colorPot listener="$once{classroot}" mycolor="#898989" mycolorString="0x898989" />
+            <colorPot listener="$once{classroot}" mycolor="#7d7d7d" mycolorString="0x7D7D7D" />
+            <colorPot listener="$once{classroot}" mycolor="#707070" mycolorString="0x707070" />
+            <colorPot listener="$once{classroot}" mycolor="#626262" mycolorString="0x626262" />
+            <colorPot listener="$once{classroot}" mycolor="#555555" mycolorString="0x555555" />
+            <colorPot listener="$once{classroot}" mycolor="#464646" mycolorString="0x464646" />
+            <colorPot listener="$once{classroot}" mycolor="#363636" mycolorString="0x363636" />
+            <colorPot listener="$once{classroot}" mycolor="#262626" mycolorString="0x262626" />
+            <colorPot listener="$once{classroot}" mycolor="#111111" mycolorString="0x111111" />
+            <colorPot listener="$once{classroot}" mycolor="#000000" mycolorString="0x000000" />
+        </colorRow>
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#f7977a" mycolorString="0xF7977A" />
+            <colorPot listener="$once{classroot}" mycolor="#fbad82" mycolorString="0xFBAD82" />
+            <colorPot listener="$once{classroot}" mycolor="#fdc68c" mycolorString="0xFDC68C" />
+            <colorPot listener="$once{classroot}" mycolor="#fff799" mycolorString="0xFFF799" />
+            <colorPot listener="$once{classroot}" mycolor="#c6df9c" mycolorString="0xC6DF9C" />
+            <colorPot listener="$once{classroot}" mycolor="#a4d49d" mycolorString="0xA4D49D" />
+            <colorPot listener="$once{classroot}" mycolor="#81ca9d" mycolorString="0x81CA9D" />
+            <colorPot listener="$once{classroot}" mycolor="#7bcdc9" mycolorString="0x7bcdc9" />
+            <colorPot listener="$once{classroot}" mycolor="#6ccff7" mycolorString="0x6CCFF7" />
+            <colorPot listener="$once{classroot}" mycolor="#7ca6d8" mycolorString="0x7CA6D8" />
+            <colorPot listener="$once{classroot}" mycolor="#8293ca" mycolorString="0x8293CA" />
+            <colorPot listener="$once{classroot}" mycolor="#8881be" mycolorString="0x8881BE" />
+            <colorPot listener="$once{classroot}" mycolor="#a286bd" mycolorString="0xA286BD" />
+            <colorPot listener="$once{classroot}" mycolor="#bc8cbf" mycolorString="0xBC8CBf" />
+            <colorPot listener="$once{classroot}" mycolor="#f49bc1" mycolorString="0xF49BC1" />
+            <colorPot listener="$once{classroot}" mycolor="#f5999d" mycolorString="0xf5999d" />
+        </colorRow>
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#f16c4d" mycolorString="0xF16C4D" />
+            <colorPot listener="$once{classroot}" mycolor="#f68e54" mycolorString="0xF68E54" />
+            <colorPot listener="$once{classroot}" mycolor="#fbaf5a" mycolorString="0xFBAF5A" />
+            <colorPot listener="$once{classroot}" mycolor="#fff467" mycolorString="0xFFF467" />
+            <colorPot listener="$once{classroot}" mycolor="#acd372" mycolorString="0xACD372" />
+            <colorPot listener="$once{classroot}" mycolor="#7dc473" mycolorString="0x7DC473" />
+            <colorPot listener="$once{classroot}" mycolor="#39b778" mycolorString="0x39B778" />
+            <colorPot listener="$once{classroot}" mycolor="#16bcb4" mycolorString="0x16BCB4" />
+            <colorPot listener="$once{classroot}" mycolor="#00bff3" mycolorString="0x00BFF3" />
+            <colorPot listener="$once{classroot}" mycolor="#438ccb" mycolorString="0x438CCB" />
+            <colorPot listener="$once{classroot}" mycolor="#5573b7" mycolorString="0x5573B7" />
+            <colorPot listener="$once{classroot}" mycolor="#5e5ca7" mycolorString="0x5E5CA7" />
+            <colorPot listener="$once{classroot}" mycolor="#855FA8" mycolorString="0x855FA8" />
+            <colorPot listener="$once{classroot}" mycolor="#a763a9" mycolorString="0xA763A9" />
+            <colorPot listener="$once{classroot}" mycolor="#ef6ea8" mycolorString="0xEf6EA8" />
+            <colorPot listener="$once{classroot}" mycolor="#f16d7e" mycolorString="0xF16D7E" />
+        </colorRow>
+          
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#9a8575" mycolorString="0x9A8575" />
+            <colorPot listener="$once{classroot}" mycolor="#726357" mycolorString="0x726357" />
+            <colorPot listener="$once{classroot}" mycolor="#524842" mycolorString="0x524842" />
+            <colorPot listener="$once{classroot}" mycolor="#362f2c" mycolorString="0x362F2C" />
+            <colorPot listener="$once{classroot}" mycolor="#c69c6d" mycolorString="0xC69C6D" />
+            <colorPot listener="$once{classroot}" mycolor="#a77c50" mycolorString="0xA77C50" />
+            <colorPot listener="$once{classroot}" mycolor="#8c623a" mycolorString="0x8C623A" />
+            <colorPot listener="$once{classroot}" mycolor="#744b24" mycolorString="0x744B24" />
+            <colorPot listener="$once{classroot}" mycolor="#613813" mycolorString="0x613813" />
+        </colorRow>
+      
+    </view>
+    
+</class>
+
+</library>
+<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
+* Copyright 2005-2007 Laszlo Systems, Inc. All Rights Reserved.               *
+* Use is subject to license terms.                                            *
+* X_LZ_COPYRIGHT_END ****************************************************** -->
+<!-- @LZX_VERSION@                                                         -->
diff --git a/WebContent/src/base/components/lps/fillColorChoose.lzx b/WebContent/src/base/components/lps/fillColorChoose.lzx
new file mode 100644
index 0000000..d2e316e
--- /dev/null
+++ b/WebContent/src/base/components/lps/fillColorChoose.lzx
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="fillColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="80" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFFFF33" />
+    <attribute name="selectedColorDis" type="number" value="1" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFFFF33"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" /> 
+    <attribute name="inInitColorSelection" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	if (this.selectedColorDis==-1){
+    		Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    	}
+    </handler>
+    
+    <method name="setSelectedColor" args="c">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+    </method>
+    
+    <method name="setSelectedColorWithDis" args="c,d">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+		this.selectedColorDis = d;
+		if (this.selectedColorDis==-1){
+    		if ($debug) Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    		this.rgt_b._lock.setAttribute("visibility","visible");
+	    	this.rgt_b._lock_open.setAttribute("visibility","hidden");
+    	} else {
+			this._currentcolor.setAttribute('clickable',true);
+    		this._currentcolor.setAttribute('opacity',1);
+    		this.rgt.setAttribute('opacity',1);
+    		this.rgt.setAttribute('enabled',true);
+    		this.onselectedColor.sendEvent(this.selectedColor);
+    		this.colorIsEnabled = true;
+    		this.rgt_b._lock.setAttribute("visibility","hidden");
+	    	this.rgt_b._lock_open.setAttribute("visibility","visible");
+    	}
+    </method>
+        
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        if (this.boxPosition=="up"){
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+        } else {
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas))});
+        }
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${ parent.selectedColor }" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorfillchoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="427" />
+    </button>
+        
+    <button name="rgt_b" x="56" y="1" width="24" height="23" >
+    	<handler name="onclick">
+    		if (parent.colorIsEnabled){
+	    		parent._currentcolor.setAttribute('clickable',false);
+	    		parent._currentcolor.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('enabled',false);
+	    		parent.selectedColorDis = -1;
+	    		parent.onselectedColor.sendEvent(-1);
+	    		parent.colorIsEnabled = false;
+	    		this._lock.setAttribute("visibility","hidden");
+	    		this._lock_open.setAttribute("visibility","visible");
+    		} else {
+	    		parent._currentcolor.setAttribute('clickable',true);
+	    		parent._currentcolor.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('enabled',true);
+	    		parent.selectedColorDis = 1;
+	    		parent.onselectedColor.sendEvent(parent.selectedColor);
+	    		parent.colorIsEnabled = true;
+	    		this._lock.setAttribute("visibility","visible");
+	    		this._lock_open.setAttribute("visibility","hidden");
+    		}
+    	</handler>
+    	<image x="4" y="3" name="_lock" src="$once{ canvas.getThemeImage('color_lock_rsc') }"
+    			width="16" height="16" stretches="both" />
+ 	    <image x="4" y="3" name="_lock_open" src="$once{ canvas.getThemeImage('color_lock_open_rsc') }"
+    			width="16" height="16" stretches="both" visibility="hidden" />
+        <labelTooltip labelid="428" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/library.lzx b/WebContent/src/base/components/lps/library.lzx
new file mode 100644
index 0000000..9826b0e
--- /dev/null
+++ b/WebContent/src/base/components/lps/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+	<!-- APL Author sebawagner -->
+    <resource name="arrow_down_slider_rsc" src="resources/arrow_down_slider.png" /> 
+
+	<include href="vslider.lzx" /> 
+	<include href="basePropertySelector.lzx" />
+	<include href="colorpicker.lzx" />
+    <include href="lineColorChoose.lzx" />
+    <include href="lineOnlyColorChoose.lzx" />
+    <include href="lineColorChoose.lzx" />
+    <include href="fillColorChoose.lzx" />
+    <include href="changeWidthSlider.lzx" />
+    <include href="changeWidthLetterSlider.lzx" />
+    <include href="regexptip.lzx" />
+    
+</library>
diff --git a/WebContent/src/base/components/lps/lineColorChoose.lzx b/WebContent/src/base/components/lps/lineColorChoose.lzx
new file mode 100644
index 0000000..58a84a4
--- /dev/null
+++ b/WebContent/src/base/components/lps/lineColorChoose.lzx
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="lineColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="80" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFF6600" />
+    <attribute name="selectedColorDis" type="number" value="1" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFF6600"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" />
+    <attribute name="inInitColorSelection" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	if (this.selectedColorDis==-1){
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    	}
+    </handler>
+        
+    <handler name="oninit">
+    	this.setTransformedStringColor();
+    </handler>
+    
+    <method name="setSelectedColor" args="c">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+    </method>
+    
+    <method name="setSelectedColorWithDis" args="c,d">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+		this.selectedColorDis = d;
+		if (this.selectedColorDis==-1){
+    		if ($debug) Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    		this.rgt_b._lock.setAttribute("visibility","visible");
+	    	this.rgt_b._lock_open.setAttribute("visibility","hidden");
+    	} else {
+			this._currentcolor.setAttribute('clickable',true);
+    		this._currentcolor.setAttribute('opacity',1);
+    		this.rgt.setAttribute('opacity',1);
+    		this.rgt.setAttribute('enabled',true);
+    		this.onselectedColor.sendEvent(this.selectedColor);
+    		this.colorIsEnabled = true;
+    		this.rgt_b._lock.setAttribute("visibility","hidden");
+	    	this.rgt_b._lock_open.setAttribute("visibility","visible");
+    	}
+    </method>
+    
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        if (this.boxPosition=="up"){
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+        } else {
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas))});
+        }
+
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${ parent.selectedColor }" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorlinechoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="424" />
+    </button>
+        
+    <button name="rgt_b" x="56" y="1" width="24" height="23" >
+    	<handler name="onclick">
+    		if (parent.colorIsEnabled){
+	    		parent._currentcolor.setAttribute('clickable',false);
+	    		parent._currentcolor.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('enabled',false);
+	    		parent.selectedColorDis = -1;
+	    		parent.onselectedColor.sendEvent(-1);
+	    		parent.colorIsEnabled = false;
+	    		this._lock.setAttribute("visibility","hidden");
+	    		this._lock_open.setAttribute("visibility","visible");
+    		} else {
+	    		parent._currentcolor.setAttribute('clickable',true);
+	    		parent._currentcolor.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('enabled',true);
+	    		parent.selectedColorDis = 1;
+	    		parent.onselectedColor.sendEvent(parent.selectedColor);
+	    		parent.colorIsEnabled = true;
+	    		this._lock.setAttribute("visibility","visible");
+	    		this._lock_open.setAttribute("visibility","hidden");
+    		}
+    	</handler>
+    	<image x="4" y="3" name="_lock" src="$once{ canvas.getThemeImage('color_lock_rsc') }"
+    			width="16" height="16" stretches="both" />
+ 	    <image x="4" y="3" name="_lock_open" src="$once{ canvas.getThemeImage('color_lock_open_rsc') }"
+    			width="16" height="16" stretches="both" visibility="hidden" />
+        <labelTooltip labelid="426" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx b/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx
new file mode 100644
index 0000000..95c7640
--- /dev/null
+++ b/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="lineOnlyColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="56" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFF6600" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFF6600"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	this.setTransformedStringColor();
+    </handler>
+    
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,x:(this.getAttributeRelative('x',canvas)-(250-this.width)),y:(this.getAttributeRelative('y',canvas))});
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${parent.selectedColor}" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorlinechoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="424" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/regexptip.lzx b/WebContent/src/base/components/lps/regexptip.lzx
new file mode 100644
index 0000000..a66bc6d
--- /dev/null
+++ b/WebContent/src/base/components/lps/regexptip.lzx
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_r" src="resources/regexp/regexp_bg_r.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_m" src="resources/regexp/regexp_bg_m.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_l" src="resources/regexp/regexp_bg_l.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_point" src="resources/regexp/regexp_point.swf" />
+
+<class name="regexptip" extends="view">
+    <attribute name="regexptext" value="" type="string" />
+    <attribute name="fadeDelegate" value="null" />
+    <handler name="oninit">
+        this.fadeDelegate = new LzDelegate( this, "fadeText" );
+        lz.Timer.addTimer( this.fadeDelegate, 5000 );
+    </handler>
+    <method name="fadeText" args="itemRef">
+        this.destroy();
+    </method>
+    <view width="${parent.width}" layout="axis:x">
+        <view name="regexptip_rsc_r" resource="regexptip_rsc_r" width="5" />
+        <view name="regexptip_rsc_m" resource="regexptip_rsc_m" stretches="width" width="${ parent.width-10 }"/>
+        <view name="regexptip_rsc_l" resource="regexptip_rsc_l" width="5" />
+    </view>
+    
+    <view resource="regexptip_rsc_point" y="-7" x="12" />
+
+    <text fontsize="11" text="${ parent.regexptext}" resize="true" multiline="false" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/lps/resources/arrow_down_slider.png b/WebContent/src/base/components/lps/resources/arrow_down_slider.png
new file mode 100644
index 0000000..f5107d7
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/arrow_down_slider.png
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/color_fill.png b/WebContent/src/base/components/lps/resources/color_fill.png
new file mode 100644
index 0000000..13631ec
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/color_fill.png
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf
new file mode 100644
index 0000000..c2ae7a8
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf
new file mode 100644
index 0000000..119a8ac
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf
new file mode 100644
index 0000000..34383d4
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf
new file mode 100644
index 0000000..22adb7e
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/vslider.lzx b/WebContent/src/base/components/lps/vslider.lzx
new file mode 100644
index 0000000..51648a7
--- /dev/null
+++ b/WebContent/src/base/components/lps/vslider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- X_LZ_COPYRIGHT_BEGIN ************************************************
+* Copyright 2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Use is subject to license terms.                                       *
+* X_LZ_COPYRIGHT_END ************************************************** -->
+<!--
+    vertical slider contributed by Sebastian Wagner
+-->
+<library>
+  
+  <class name="vsliderTrack" extends="view" bgcolor="0x000000">
+        <view width="${ parent.width-2}" height="${ parent.height-2 }" 
+          x="1" y="1" bgcolor="0xFFFFFF"/>
+        <view width="${ parent.width-2}" bgcolor="0xCCCCCC"
+          x="1" y="${ (this.parent.parent.switchaxis) ? 
+                parent.parent._sliderthumb.y : 1 }" 
+          visible="${ parent.parent.showrange }" 
+          height="${ (this.parent.parent.switchaxis) ? 
+        (parent.parent._vslidertrack.height - parent.parent._sliderthumb.y-1) : 
+        parent.parent._sliderthumb.y }" />
+      <handler name="onclick">
+        var newy = parent.getMouse("y");
+        parent._sliderthumb.setNewYFromTrack(newy);
+      </handler>
+  </class>
+	  
+	<class name="vsliderThumb" extends="button" bgcolor="0x999999" height="10" width="20" 
+		onmousedown="dragger.apply()" onmouseup="dragger.remove()">
+  	
+        <attribute name="drag_min" value="0" type="number" />
+        <attribute name="showvalue" type="boolean" value="true" />
+        <attribute name="drag_max" value="0" type="number" />
+        
+        <method name="setNewYFromTrack" args="y">
+            <![CDATA[
+                if (y > drag_max) {
+                    this.setAttribute("y",this.drag_max);
+                    return;
+                }
+                if (y < drag_min) {
+                    this.setAttribute("y",this.drag_min);
+                    return;
+                }
+                this.setAttribute("y",y);
+            ]]>
+        </method>
+        
+        <handler name="oninit">
+            //Setting the initVal
+            this.setY(getPosFromValue(this.parent.initvalue));
+        </handler>
+        
+        <method name="getValueFromPos">
+            var delta1 = this.parent.maxvalue-this.parent.minvalue;
+            var perc = (this.parent.switchaxis) ? 1-(y / (this.parent.height-this.height)) : (y / (this.parent.height-this.height));
+            //Debug.write(delta1,perc);
+            return (Math.round(perc*delta1))+this.parent.minvalue;
+        </method>
+        
+        <method name="getPosFromValue" args="val">
+            var perc = (val-this.parent.minvalue) / (this.parent.maxvalue-this.parent.minvalue);
+            //Debug.write(perc);
+            valY = (this.parent.switchaxis) ? ( (1-perc) * (this.parent.height-this.height)) : (perc * (this.parent.height-this.height));
+            //Debug.write("valY: ",Math.round(valY));
+            return Math.round(valY);
+        </method>
+        
+        <handler name="ony" args="v">
+            //super.setY(v);
+            //if ($debug) Debug.write("setY: ",v);
+		    var thumbVal = getValueFromPos();
+		    if (thumbVal != parent.value) {
+		        this.parent.setValue(thumbVal);
+		    }               
+        </handler>
+        
+        <handler name="onclick">
+        	parent.onvalueChosenFinal.sendEvent();
+        </handler>
+        
+		<dragstate name="dragger" drag_axis="y"
+		    drag_min_y="${ this.drag_min }"  
+		    drag_max_y="${ this.drag_max }">
+			<text name="t1" x="-26" text="${ this.parent.parent.value }" bgcolor="0xFFFFFF"
+				  y="-4" resize="true" />
+		</dragstate>
+	</class>
+
+<class name="vslider" extends="view" >
+    <!--- Minimum Value -->
+    <attribute name="minvalue" type="number" value="0"/>
+    
+    <!--- Maximum Value -->
+    <attribute name="maxvalue" type="number" value="100"/>
+    
+    <!--- Showrange should the slidertrack be with color while 'sliding' -->
+    <attribute name="showrange" type="boolean" value="true"/>
+    
+    <!--- showvalue should the slider show the numbers of min/max -->
+    <attribute name="showvalue" type="boolean" value="true"/>
+    
+    <!--- switchaxis true means minimum-value is 
+            t op maximum is bottom false turns around -->
+    <attribute name="switchaxis" type="boolean" value="false"/>
+    
+    <!-- Initial Value -->
+    <attribute name="initvalue" value="0" type="number" />          
+        
+    <!--- @keywords private -->
+    <event name="onvalue"/>
+    
+    <!--- @keywords private -->
+    <event name="onvalueChosenFinal"/>
+        
+    <!--- @keywords private -->
+    <attribute name="value" value="0" setter="setValue(value)"/>
+    <method name="setValue" args="v">
+        if (!isinited) {
+          this.value = v;
+          return;
+        }
+        if (this.value == v) return;
+        this.value = v;
+        if (onvalue) onvalue.sendEvent(v);
+    </method>
+       
+	<vsliderTrack name="_vslidertrack" x="5" 
+	    width="10" height="${ parent.height }" />
+	    
+	<vsliderThumb name="_sliderthumb" 
+	    drag_max="${ parent.height-this.height }" 
+	    showvalue="${ parent.showvalue }" />
+	    
+	<text text="${ ( (this.parent.switchaxis) ? 
+	            this.parent.maxvalue : this.parent.minvalue ) }" 
+	    visible="${ parent.showvalue }" 
+	    y="-8" x="${ this.parent._vslidertrack.width+10 }" />
+	    
+	<text text="${ ( (this.parent.switchaxis) ? 
+	            this.parent.minvalue : this.parent.maxvalue ) }" 
+	      visible="${ parent.showvalue }" 
+	      y="${ this.parent.height-10 }" 
+	      x="${ this.parent._vslidertrack.width+10 }" />
+          
+</class>
+  
+  
+
+</library>
diff --git a/WebContent/src/base/components/miniIcons.lzx b/WebContent/src/base/components/miniIcons.lzx
new file mode 100644
index 0000000..301d381
--- /dev/null
+++ b/WebContent/src/base/components/miniIcons.lzx
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="miniIcons" extends="view" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
+<class name="miniIconsImage" extends="image" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/miniIconsNew.lzx b/WebContent/src/base/components/miniIconsNew.lzx
new file mode 100644
index 0000000..2e4a1a2
--- /dev/null
+++ b/WebContent/src/base/components/miniIconsNew.lzx
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="miniIconsNew" extends="view" >
+		<attribute name="innerResource" value="" type="string" />
+		<handler name="onmouseover">
+	    	if (this.showhandcursor) {
+	        	this.innnerView.setAttribute("x",this.innnerView.x-1);
+	        	this.innnerView.setAttribute("y",this.innnerView.y-1);
+	        	this.innnerView.setAttribute("height",this.innnerView.height+2);
+	        	this.innnerView.setAttribute("width",this.innnerView.width+2);
+	    	}
+	    </handler>
+	    <handler name="onmouseout">
+	    	if (this.showhandcursor) {
+	        	this.innnerView.setAttribute("x",this.innnerView.x+1);
+	            this.innnerView.setAttribute("y",this.innnerView.y+1);
+	            this.innnerView.setAttribute("height",this.innnerView.height-2);
+	            this.innnerView.setAttribute("width",this.innnerView.width-2);
+	    	}
+	    </handler>
+		<view name="innnerView" resource="$once{ parent.innerResource }" stretches="both"
+				width="$once{ parent.width }" height="$once{ parent.height }">
+		    
+		</view>
+	</class>
+	
+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/omcharts/library.lzx b/WebContent/src/base/components/omcharts/library.lzx
new file mode 100644
index 0000000..7d16571
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/library.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="charts/styles/chartstyle.lzx"/>
+    <include href="charts/common/dataseries.lzx"/>
+    <include href="charts/common/viewspoolmanager.lzx"/>
+    <include href="charts/common/virtualdrawview.lzx"/>
+    <include href="charts/common/datalabel.lzx"/>
+    <include href="charts/common/chart.lzx"/>
+    <include href="charts/common/legend.lzx"/>
+    <include href="charts/piechart/piepiece.lzx"/>
+    <include href="charts/piechart/piechartplotarea.lzx"/>
+    
+    <include href="charts/styles/strokestyle.lzx"/>
+    <include href="charts/piechart/piepiece.lzx"/>
+    <include href="utils/layouts/simplelayout.lzx"/>
+    <include href="extensions/drawview.lzx"/>
+    
+    <include href="omchartstyle.lzx" />
+    <include href="omlegend.lzx" />
+    <include href="ompiechart.lzx" />
+
+
+</library>
diff --git a/WebContent/src/base/components/omcharts/omchartstyle.lzx b/WebContent/src/base/components/omcharts/omchartstyle.lzx
new file mode 100644
index 0000000..c5386dc
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/omchartstyle.lzx
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+    
+<chartstyle name="omchartstyle">
+    <plotstyle name="plot" linesize="1" linecolor="0xCCCCCC" fillcolor="0xffffff" opacity="0.5"/>
+    <chartbgstyle name="chartbgstyle">
+        <linestyle name="line" size="0"/>
+        <regionstyle name="region" color="0xFFFFFF" opacity="0.5"/>
+    </chartbgstyle>
+    <valueregionstyle name="valueregionstyle">
+        <linestyle name="line" color="0x000000" size="1" opacity="1"/>
+        <regionstyle name="region" color="0xB71CB3" opacity="0.8" gradient="linear"/>
+        <labelstyle name="label" font="serif" fontsize="12" fontcolor="0x000000"/>
+        <labelstyle name="tip" font="serif" fontsize="12" fontcolor="0x000000"/>
+    </valueregionstyle>
+    <axisstyle name="haxisstyle">
+        <labelstyle name="label" font="Helmet" fontsize="16" fontcolor="0x000000" fontangle="0"/>
+        <tickstyle name="tickmajor" color="0x000000" position="outside" length="3" size="1">
+            <labelstyle name="label" font="serif" fontstyle="bold" fontsize="12" fontcolor="0x606060"/>
+        </tickstyle>
+        <tickstyle name="tickminor" color="0xD3D3D3" position="outside" length="3" size="1"/>
+        <linestyle name="axisline" color="0x000000" size="1"/>
+        <linestyle name="gridline" color="0xD3D3D3" size="1"/>
+    </axisstyle>
+    <axisstyle name="vaxisstyle">
+        <labelstyle name="label" font="Helmet" fontsize="16" fontcolor="0x000000" fontangle="-90"/>
+        <tickstyle name="tickmajor" color="0x000000" position="outside" length="3" size="1">
+            <labelstyle name="label" font="serif" fontsize="12" fontcolor="0x606060"/>
+        </tickstyle>
+        <tickstyle name="tickminor" color="0x000000" position="outside" length="3" size="1"/>
+        <linestyle name="axisline" color="0x000000" size="1"/>
+        <linestyle name="gridline" color="0xD3D3D3" size="1"/>
+        <regionstyle name="band1" color="0xE8EBEE" opacity="1" gradient="linear"/>
+        <regionstyle name="band2" color="0xE3E5E7" opacity="1" gradient="linear"/>
+    </axisstyle>
+    <valuelinestyle name="valuelinestyle">
+        <linestyle name="line" color="0xFF9999" size="2" opacity="1"/>
+        <labelstyle name="label" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        <labelstyle name="tip" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+    </valuelinestyle>
+    <valuepointstyle name="valuepointstyle">
+        <pointstyle name="point" width="15" height="15" color="0x00ff00" opacity=".5" shape="triangle" image="../../test/images/master.gif"/>
+        <labelstyle name="label" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        <labelstyle name="tip" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+    </valuepointstyle>
+    <datastylelist name="datastyles">
+        <datastyle name="yline">
+            <pointstyle name="point" width="10" height="10" color="0xF9F932" opacity="1" shape="diamond" strokeStyle="0xA3A304" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xA6CEE3" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0xF9F932" fillcolor="0xFFFFC1" linesize="4"/>
+        </datastyle>
+        <datastyle name="bline">
+            <pointstyle name="point" width="10" height="10" color="0x32ADFB" opacity="1" shape="fourpoint" strokeStyle="0x03609C" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x1F78B4" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="rline">
+            <pointstyle name="point" width="10" height="10" color="0xFA8159" opacity="1" shape="circle" strokeStyle="0xB24C2C" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xB2DF8A" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="gline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x33A02C" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="hline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFB9A99" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="iline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xE31A1C" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="jline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFDBF6F" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="kline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFF7F00" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="lline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xCAB2D6" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="mline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x6A3D9A" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+    </datastylelist>
+</chartstyle>    
+    
+</library> 
diff --git a/WebContent/src/base/components/omcharts/omlegend.lzx b/WebContent/src/base/components/omcharts/omlegend.lzx
new file mode 100644
index 0000000..8d365b3
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/omlegend.lzx
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+
+    <!---
+     simple legend class
+     @access public
+      -->
+    <class name="omlegend" extends="drawview" >
+        <!--- @keyword private -->
+        <attribute name="topmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="bottommargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="leftmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="rightmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="verticalgap" type="number" value="1"/>
+        <!--- Indicates if legend box will have a border, default: true -->
+        <attribute name="legendborder" type="boolean" value="true"/>
+        <!--- Allow to set the line width from the legend tag -->
+        <attribute name="borderWidth" type="number" value="1"/>
+        <!--- Allow to set the color line from the legend tag -->
+        <attribute name="borderColor" type="color" value="0x000000"/>
+        <!--- Allow to set the fill color from the legend tag -->
+        <attribute name="fillColor" type="color" value="0xFFFFFF"/>
+        <!--- Indicates how the legend items will be displayed, default: vertical -->
+        <attribute name="direction" type="string" value="vertical"/>     
+        <!--- Indicates the style will be applied tho the border legend box -->
+        <attribute name="styleBorder" type="string" value="null"/>
+        <!--- Indicates the Font will be used in the legend item text -->
+        <attribute name="legendFont" type="string" value="serif"/>
+        <!--- Indicates the Font size wiil be used in the legend item text, default: 10px -->
+        <attribute name="legendFontsize" type="size" value="6"/>
+        <!--- Indicates the Font color wiil be used in the legend item text, default: black -->
+        <attribute name="legendFontcolor" type="color" value="0x000000"/>
+        <!--- Indicates where the legend box will be positioned, default: right -->
+        <attribute name="position" type="string" value="right"/>
+
+        <!--- Takes the relationship with the chart -->
+        <attribute name="chart" type="expression" value="${null}"/>
+        <attribute name="chartClassName" type="string" value="${null}"/>
+
+        <simplelayout axis="y"/>
+        
+                
+       <!--- @keywords private
+        <handler name="oninitdone" reference="this.chart">
+            if(chart.initdone)
+            {
+                var lChart = this.getChartInstance();
+                if( lChart != null ) {
+                    this.chartClassName = lChart.constructor.tagname;
+                    this.datapath.setFromPointer(lChart.getDataSeries().getLegend());
+                }   
+            }
+        </handler>
+         -->
+         
+        <handler name="oninit">
+        	<![CDATA[
+        	    var tObject = parent.getOMDataSeries();
+        	    this.chart = parent;
+        	    
+        	    for (var i=0;i<tObject.tooltipseries.length;i++) {
+        	    	
+        	    	new lz.omlegenditem(this.viewlegendbox,{tBox:tObject.tooltipseries[i]});
+        	    	
+        	    }
+        	    
+        	    //this.bringToFront();
+        	    this.border();
+        	]]>
+        </handler> 
+        
+        <!-- Top Margin -->
+        <view height="${parent.topmargin}" />
+        <!-- Legend box -->
+        <view name="viewlegendbox">    
+            <simplelayout spacing="${parent.parent.verticalgap}"/>       
+            <method name="init">
+                <![CDATA[
+    
+                    super.init();
+                    if ( parent.direction == 'horizontal'){
+                        this.layouts[0].setAttribute('axis', 'x');
+                    } else {
+                        this.layouts[0].setAttribute('axis', 'y');
+                    }
+                   
+                ]]>
+            </method>    
+                  
+        </view>
+        <!-- Bottom Margin -->
+        <view height="${parent.bottommargin}"/>        
+
+
+        <!--- @keywords private -->
+        <method name="border">
+            var lStartX = Math.ceil(this.lineWidth/2);
+            var lStartY = Math.ceil(this.lineWidth/2);
+            var lOrgWidth = this.width;
+            var lOrgHeight = this.height;
+
+            this.lineWidth = this.borderWidth;
+            this.strokeStyle = this.borderColor;
+            this.fillStyle = this.fillColor;
+
+            this.beginPath();
+            this.moveTo(lStartX, lStartY);
+            this.lineTo(this.width, lStartY);
+            this.lineTo(this.width, this.height);
+            this.lineTo(lStartY, this.height);
+            this.lineTo(lStartX, lStartY);
+            this.closePath();
+            this.stroke();
+            this.fill();
+
+            // Restores the original dimensions of the legend, due to the changes
+            // that the lineTo()'s calls perform over the legendbox dimensions.
+            this.setAttribute( "width", lOrgWidth );
+            this.setAttribute( "height", lOrgHeight );
+        </method>
+
+        <!--- @keywords private -->
+        <method name="getChartInstance">
+        <![CDATA[
+            return this.chart;
+        ]]>
+        </method>
+
+        <!--- event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseover" />
+        <!--- event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseout" />
+        <!--- event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmousedown" />
+        <!--- event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseup" />
+        <!--- event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseclick" />
+        
+    </class>
+    
+    <!--- @keyword private
+    individual legend item -->
+    <class name="omlegenditem" >
+        <attribute name="identifier" type="number" value="0"/>
+        <attribute name="tBox" type="string" value=""/>
+        <attribute name="linevisible" type="boolean" value="false"/>
+        <simplelayout axis="x" spacing="$once{parent.parent.parent.verticalgap}"/>
+        <view name="leftmarginview" width="$once{parent.parent.parent.leftmargin}" />
+        <marker name="legendmarker"></marker>    
+        <text name="legendtext" resize="true" text="$once{ parent.tBox }" 
+        	  fontsize="$once{parent.parent.parent.legendFontsize}"
+              fgcolor="$once{parent.parent.parent.legendFontcolor}"
+              height="$once{parent.parent.parent.legendFontsize+6}">
+        </text>
+        <view name="rightmarginview" width="${parent.parent.parent.rightmargin}"/>
+        <method name="init">
+            <![CDATA[
+                super.init();
+
+                var colors = new Array(0);
+                var imagesPath = new Array(0);
+                var legenditems = parent.subviews;
+                var legendmarkeritem;
+
+                if( parent.parent.chartClassName == "piechart" ) {
+                    var arrPieces = parent.parent.getChartInstance().plotarea.arrPiePieces;
+                    var piePiece;
+
+                    for(var i = 0; i < arrPieces.length; i++){ 
+                        piePiece = arrPieces[i];  
+                        colors[i] = piePiece.style.region.color;
+                        
+                        if ( legenditems[i] != null ){                
+                            legendmarkeritem = legenditems[i].legendmarker;
+                            legendmarkeritem.setAttribute('width', piePiece.style.point.width);
+                            legendmarkeritem.setAttribute('height', piePiece.style.point.height);
+                        }
+                    }
+                } else {
+                    var topseries = parent.parent.getChartInstance().getDataSeries();
+                    var numSeries = topseries.getNumDataSeries();
+                    for(var i = 0; i < numSeries; i++){ 
+                        var ldatastyle = parent.parent.getChartInstance().style.getDataStyle(i);
+                        if ( parent.parent.chartClassName == "linechart" )
+                            colors[i] = ldatastyle.line.color;
+                        else
+                            if ( ldatastyle.region.image != null ){
+                                imagesPath[i] = ldatastyle.region.image;
+                            } else {
+                                colors[i] = ldatastyle.region.color;
+                            }
+                        if ( legenditems[i] != null ){                
+                            legendmarkeritem = legenditems[i].legendmarker;
+                            legendmarkeritem.setAttribute('width', ldatastyle.point.width);
+                            legendmarkeritem.setAttribute('height', ldatastyle.point.height);
+                        }
+                    }
+                }
+
+                for(var i = 0; i < legenditems.length; i++){
+                    var legenditem = legenditems[i];
+                    legendmarkeritem = legenditem.legendmarker;
+                    if ( imagesPath[i] != null ){
+                        legendmarkeritem.setSource(imagesPath[i]);
+                        legendmarkeritem.setAttribute('opacity', ldatastyle.region.opacity);
+                        legendmarkeritem.setAttribute( "visible", true );
+                    }
+                    else
+                        legendmarkeritem.setAttribute('bgcolor', colors[i]);
+                    this.setAttribute('identifier', i);
+                }
+            ]]>
+        </method>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseover">
+        	this.legendtext.setAttribute("fontstyle","bold");
+            parent.classroot.onitemmouseover.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseout">
+        	this.legendtext.setAttribute("fontstyle","plain");
+            parent.classroot.onitemmouseout.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmousedown">
+            parent.classroot.onitemmousedown.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseup">
+            parent.classroot.onitemmouseup.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onclick">
+            parent.classroot.onitemmouseclick.sendEvent(this);
+        </handler>
+    </class>
+
+</library>
diff --git a/WebContent/src/base/components/omcharts/ompiechart.lzx b/WebContent/src/base/components/omcharts/ompiechart.lzx
new file mode 100644
index 0000000..e248133
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/ompiechart.lzx
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+    
+    <!---
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          -->
+    <class name="ompiechart" extends="chart">
+
+        <!--- @keywords private -->
+        <method name="init">
+            plotarea = this.getNodeOfClass("piechartplotarea");
+            _datalabelpool = this.createLabelViewspool();
+            super.init();            
+        </method>  
+        
+        <!--- Renders the plot area which is an instance of the piechartplotarea 
+              class. The plot area requires to read a group of two data series, one
+              for the groups that are represented by the pie slices and the second
+              for their values. -->
+        <method name="renderPlotArea">
+        <![CDATA[
+            super.renderPlotArea();
+            plotarea.clear();
+
+            var topseries = this.getOMDataSeries();
+            
+            //var numSeries = topseries.getNumDataSeries();
+            var numSeries = 1;
+            
+            var xseries = topseries.xseries;
+            var yseries = topseries.yseries;
+            var tooltipseries = topseries.tooltipseries;
+                                
+            for(var i = 0; i < numSeries; i++)
+            {
+                plotarea.renderSeries(xseries, yseries, tooltipseries);          
+            }
+            if ( this.datalabelEnabled ){
+                this.renderDataLabels();
+            }
+
+        ]]>
+        </method>
+        
+        <!--- Renders the labels that display the values of the data series. -->
+        <method name="renderDataLabels">
+        
+            <![CDATA[
+                _datalabelpool.reclaimAll();
+            
+                var arrPiePieces = this.plotarea.arrPiePieces;
+                var topseries = this.getOMDataSeries();
+                
+                var xseries = topseries.xseries;
+                var yseries = topseries.yseries;
+                var tooltipseries = topseries.tooltipseries;
+                
+                if ($debug) Debug.write("arrPiePieces.length ",arrPiePieces.length);
+
+                for(var i = 0; i < arrPiePieces.length; i++){ 
+                    piePiece = arrPiePieces[i];  
+                    
+                    var lbl = _datalabelpool.getView();
+                    var ldatastyle = piePiece.style;
+                    lbl.setAttribute('style', ldatastyle.label);
+                    lbl.render(yseries[i]);
+                    piePiece.renderLabel(lbl);
+                }
+            ]]>
+                
+        </method>
+        
+        <!--- The plot area where the pie slices are rendered -->
+        <piechartplotarea name="plotarea" x="50" y="20" width="500" height="300">
+        	
+        </piechartplotarea>
+
+    </class>
+    
+</library> 
diff --git a/WebContent/src/base/components/panel/baseBoundingBorderView.lzx b/WebContent/src/base/components/panel/baseBoundingBorderView.lzx
new file mode 100644
index 0000000..d3e0cdb
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseBoundingBorderView.lzx
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseBoundingBorderView" extends="view" width="250" y="100" height="400"
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="false" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+	
+	<attribute name="boundingbarrier" value="2" type="number" />
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />
+	
+	<!--- extra Event for this kind of view
+		will be thrown before the view inits new -->
+	<event name="preclose" />
+	
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<attribute name="currentBoundingBox" value="null" />
+	
+	<attribute name="verticalClassActive" value="false" type="boolean" />
+	<attribute name="activationClassBounding" value="" type="string" />
+	<attribute name="activationVClassBounding" value="" type="string" />
+	
+	<attribute name="topClassPanel" value="" type="string" />
+	<attribute name="bottomClassPanel" value="" type="string" />
+	<attribute name="rightClassPanel" value="" type="string" />
+	<attribute name="leftClassPanel" value="" type="string" />
+	
+	<!-- this is the Width and Height of the vertical and horizontal class
+		it can have different values -->
+	<attribute name="hWidth" value="0" type="number" />
+	<attribute name="hHeight" value="0" type="number" />
+	<attribute name="vWidth" value="0" type="number" />
+	<attribute name="vHeight" value="0" type="number" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="hasshadow" value="true" type="boolean" />
+	
+	<attribute name="mousetracker_del" value="$once{ new LzDelegate(this, 'checkStaticBorders' )}" />
+	
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+    <handler name="oninit">
+    	this.initheight=this.height;
+		////Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+    	if (this.hasshadow) this.setShadow(); 
+    </handler>
+    
+    <method name="setShadow" args="bool">
+        this.hasshadow = bool;
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+            //Debug.write(this.normalMC);
+            ////Debug.write("this.normalMC: ",this.normalMC);
+            ////Debug.write("this: ",this);
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>		
+	
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+		this.doDestroy();
+	</method>
+	
+	<method name="toggleopen">
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+		//It's important to remove the dragger and do docking stuff before you check for connencted Boxes
+		dragger.remove();
+		if (obj==this){
+			if (docking) arrangePosition();
+		} else {
+			if (docking) _lookforParentOnly(obj);
+		}
+			
+		//check for connected Boxes
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._removeDragState(this);
+			}
+		}
+		mousetracker_del.unregisterAll();
+		this.preclose.sendEvent();
+		if (this.currentBoundingBox!=null) {
+			
+			if(this.currentBoundingBox.width>this.currentBoundingBox.height){
+				if (this.currentBoundingBox.y==0){
+					if ($debug) Debug.write("TOP");
+					if (this.topClassPanel!=""){
+						new lz[this.topClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						if ($debug) Debug.warn("No Top Panel Definied");
+						new lz[this.activationVClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else if (this.currentBoundingBox.y==(parent.height-this.currentBoundingBox.height)){
+					if ($debug) Debug.write("BOTTOM");
+					if (this.bottomClassPanel!=""){
+						new lz[this.bottomClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationVClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else {
+					new lz[this.activationVClassBounding](parent,{
+						x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+					});
+				}
+			} else {
+				if (this.currentBoundingBox.x==0){
+					if ($debug) Debug.write("RIGHT");
+					if (this.rightClassPanel!=""){
+						new lz[this.rightClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else if (this.currentBoundingBox.x==(parent.width-this.currentBoundingBox.width)){
+					if ($debug) Debug.write("LEFT");
+					if (this.leftClassPanel!=""){
+						new lz[this.leftClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else {
+					new lz[this.activationClassBounding](parent,{
+						x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+					});
+				}
+			}
+			this.currentBoundingBox.destroy();
+			this.close();
+		} else {
+			if(this.width>this.height){
+				new lz[this.activationVClassBounding](parent,{x:this.x,y:this.y});
+			} else {
+				new lz[this.activationClassBounding](parent,{x:this.x,y:this.y});
+			}
+			this.close();
+		}
+	</method>
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+		this.bringToFront();
+		_calcdockingList();
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._startDragState(this);
+			}
+		}
+		//store position cause it wasn't dragged by itself
+		if (obj!=this){
+			storeAdjustmentToParent(obj.x,obj.y);
+		}
+		dragger.apply();
+		mousetracker_del.register(lz.Idle,'onidle');
+	</method>
+	
+	<!--- arranges the Box to be build into any border -->
+	<method name="checkStaticBorders" args="item">
+		<![CDATA[
+			if (!this.verticalClassActive){
+				//if ($debug) Debug.write("checkStaticBorders");
+				if (this.x<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if (this.y<this.boundingbarrier){
+						//if ($debug) Debug.write("a1");
+						this.drawCurrentBoundingBox(0,0,this.vWidth,this.vHeight);
+					} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("a2");
+						this.drawCurrentBoundingBox(0,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("a3");
+						this.drawCurrentBoundingBox(0,this.y,this.width,this.height);
+					}
+				} else if (this.y<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("b1");
+						this.drawCurrentBoundingBox((this.parent.width-this.vWidth),0,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("b2");
+						this.drawCurrentBoundingBox(this.x,0,this.vWidth,this.vHeight);
+					}
+				} else if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					//if ($debug) Debug.write("c");
+					if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(parent.width-this.vWidth,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						this.drawCurrentBoundingBox(parent.width-this.width,this.y,this.width,this.height);
+					}
+				} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+					
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("d1");
+						this.drawCurrentBoundingBox(parent.width-this.vWidth,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("d2");
+						this.drawCurrentBoundingBox(this.x,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					}
+				} else {
+					//if ($debug) Debug.write("d");
+					this.setAttribute('visibility','visible');
+					if (this.currentBoundingBox!=null) {
+						this.currentBoundingBox.destroy();
+						this.currentBoundingBox = null;
+					}
+				}
+			} else {
+				if (this.x<this.boundingbarrier){
+					//if ($debug) Debug.write("a",(this.parent.height-(this.y+this.width)));
+					this.setAttribute('visibility','hidden');
+					if (this.y<this.boundingbarrier){
+						//if ($debug) Debug.write("a1");
+						this.drawCurrentBoundingBox(0,0,this.width,this.height);
+					} else if ( (this.parent.height-(this.y+this.width))<this.boundingbarrier){
+						//if ($debug) Debug.write("a2");
+						this.drawCurrentBoundingBox(0,parent.height-this.height,this.width,this.height);
+					} else {
+						//if ($debug) Debug.write("a3");
+						this.drawCurrentBoundingBox(0,this.y,this.hWidth,this.hHeight);
+					}
+				} else if (this.y<this.boundingbarrier){
+					//if ($debug) Debug.write("b");
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(this.parent.width-this.width,0,this.width,this.height);
+					} else {
+						this.drawCurrentBoundingBox(this.x,0,this.width,this.height);
+					}
+				} else if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.height-(this.y+this.width))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(this.parent.width-this.width,parent.height-this.height,this.width,this.height);
+					} else {
+						this.drawCurrentBoundingBox(parent.width-this.hWidth,this.y,this.hWidth,this.hHeight);
+					}
+				} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					this.drawCurrentBoundingBox(this.x,parent.height-this.height,this.width,this.height);
+				} else {
+					//if ($debug) Debug.write("d");
+					this.setAttribute('visibility','visible');
+					if (this.currentBoundingBox!=null) {
+						this.currentBoundingBox.destroy();
+						this.currentBoundingBox = null;
+					}
+				}
+			}			
+		]]>
+	</method>
+	
+	<method name="drawCurrentBoundingBox" args="x,y,width,height">
+		if (this.currentBoundingBox!=null) this.currentBoundingBox.destroy();
+		this.currentBoundingBox = new lz.panelBoundBox(parent,{x:x,y:y,
+			width:width,height:height});
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+		
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		if ($debug) Debug.write("Position: ",newx,newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+    <animator attribute="y" to="20" duration="1000" started="false" />
+        
+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    
+    
+    <method name="doDestroy">
+        this.destroy();
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/baseLeftPanel.lzx b/WebContent/src/base/components/panel/baseLeftPanel.lzx
new file mode 100644
index 0000000..b0b686c
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseLeftPanel.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseLeftPanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" hasshadow="false">
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<!-- basebgcolorizer -->
+	
+	<view name="_bgItem" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+			width="$once{ this.parent.width-2 }" height="$once{ this.parent.height-2 }" />
+	
+	<view x="1" y="1" width="$once{ this.parent.width-2 }" height="17" 
+		  bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        <handler name="onmousedown">
+        	parent.onmousedown.sendEvent(parent);
+        </handler>
+        <handler name="onmouseup">
+        	lz.Cursor.unlock();
+        	parent.onmouseup.sendEvent(parent);
+        </handler>
+        <handler name="onmouseover">
+        	//cursor="arrow_draw_panel_cursor" 
+        	lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+        </handler>
+        <handler name="onmouseout">
+        	lz.Cursor.unlock();
+        </handler>
+		<view resource="draw_box_horizontal_rsc" />
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/basePanel.lzx b/WebContent/src/base/components/panel/basePanel.lzx
new file mode 100644
index 0000000..75d0d32
--- /dev/null
+++ b/WebContent/src/base/components/panel/basePanel.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" x="1" y="1" bgcolor="0xFFFFFF" />
+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >
+				<view width="${ this.parent.parent.width-2 }" y="0" stretches="width"
+            resource="presenter_thumb_rsc" >
+            <handler name="oninit">
+            	<![CDATA[
+            		this.setColor(canvas.getThemeColor('basebgcolorizer'));
+            	]]>
+            </handler>
+			<method name="setTintRGB" args="color, brightness">
+			    <![CDATA[
+			    if (color != "" && color != null){
+			    	
+			        if (brightness == null) { brightness = 0; }
+			        var rgb = color;
+			        var red=(rgb >> 16) & 0xFF;
+			        var green=(rgb >> 8) & 0xFF;
+			        var blue=rgb & 0xFF;
+		
+			        this.setColorTransform( { ra : red, ga : green, ba : blue,
+			                            		rb : 0, gb : 0, bb : 0 } );
+			                            		
+			        if($debug) Debug.write("explorerBox/setTintRGB",this);
+			        if($debug) Debug.write("explorerBox/setTintRGB", { ra : red, ga : green, ba : blue, rb : 0, gb : 0, bb : 0 } );
+			    }
+			    ]]>
+			</method>            
+        </view>
+        <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+		<button visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-23 }" 
+			y="1" text="X" height="18" width="20" >
+			<handler name="onmouseup">
+				this.parent.parent.close();
+			</handler>									
+		</button>
+		<view visible="${ !this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_min_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+		<view visible="${ this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_max_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/basePropertyPanel.lzx b/WebContent/src/base/components/panel/basePropertyPanel.lzx
new file mode 100644
index 0000000..48e4906
--- /dev/null
+++ b/WebContent/src/base/components/panel/basePropertyPanel.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePropertyPanel" extends="view" >
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />		
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+		
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<method name="toggleopen">
+		//if ($debug) Debug.write("toggleopen:: this.isopen", this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){		
+			this.setAttribute('height',this.initheight);
+			this.setAttribute('height',this.initheight);
+		} else {	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+    <handler name="oninit">
+    	this.initheight=this.height;
+    </handler>
+	
+	<view width="${ this.parent.width }" height="${ this.parent.height-2 }" 
+		  x="0" y="1"  />
+	
+    <view x="0" y="1" width="${ this.parent.width }" height="20" bgcolor="0xE0E1EB" />
+    
+    <view x="0" y="0" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+    
+    <view x="0" y="19" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+	
+		  
+    <view x="0" y="1" width="${ this.parent.width }" height="20" >
+		
+		<handler name="onclick">
+            this.parent.toggleopen();
+        </handler>
+		
+        <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" resize="true" fontstyle="bold" />
+			
+		<button visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-23 }" 
+			y="1" text="X" height="18" width="20" >
+			<handler name="onmouseup">
+				this.parent.parent.close();
+			</handler>									
+		</button>
+		
+		<view visible="${ !this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_min_small_rsc">
+			<handler name="onmouseup">
+				this.parent.parent.toggleopen();
+			</handler>	
+			<labelTooltip name="_labelTooltip" labelid="857" />								
+		</view>
+		
+		<view visible="${ this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_max_small_rsc">
+			<handler name="onmouseup">
+				this.parent.parent.toggleopen();
+			</handler>
+			<labelTooltip name="_labelTooltip" labelid="856" />									
+		</view>
+		
+	</view>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/baseTopPanel.lzx b/WebContent/src/base/components/panel/baseTopPanel.lzx
new file mode 100644
index 0000000..933fc58
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseTopPanel.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseTopPanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" hasshadow="false">
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<view name="_bgItem" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+			width="$once{ this.parent.width-2 }" height="$once{ this.parent.height-2 }" />
+			
+	<view x="1" y="1" height="$once{ this.parent.height-2 }" width="17" 
+		  bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        <handler name="onmousedown">
+        	parent.onmousedown.sendEvent(parent);
+        </handler>
+        <handler name="onmouseup">
+        	lz.Cursor.unlock();
+        	parent.onmouseup.sendEvent(parent);
+        </handler>
+        <handler name="onmouseover">
+        	//cursor="arrow_draw_panel_cursor" 
+        	lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+        </handler>
+        <handler name="onmouseout">
+        	lz.Cursor.unlock();
+        </handler>
+		<view resource="draw_box_vertical_rsc" />
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/labelPanel.lzx b/WebContent/src/base/components/panel/labelPanel.lzx
new file mode 100644
index 0000000..34aac21
--- /dev/null
+++ b/WebContent/src/base/components/panel/labelPanel.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelPanel" extends="basePanel" >
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/library.lzx b/WebContent/src/base/components/panel/library.lzx
new file mode 100644
index 0000000..96746f9
--- /dev/null
+++ b/WebContent/src/base/components/panel/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="resources/" />
+	
+	<include href="baseBoundingBorderView.lzx" />
+	<include href="basePanel.lzx" />
+	<include href="baseTopPanel.lzx" />
+	<include href="baseLeftPanel.lzx" />
+	<include href="panelBoundBox.lzx" />
+	<include href="basePropertyPanel.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/panel/panelBoundBox.lzx b/WebContent/src/base/components/panel/panelBoundBox.lzx
new file mode 100644
index 0000000..fb637a6
--- /dev/null
+++ b/WebContent/src/base/components/panel/panelBoundBox.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--
+
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="-1" y="-1" >
+ -->
+<class name="panelBoundBox" extends="drawview" cachebitmap="false" >
+	
+	<handler name="oncontext">
+		var numberColor = this.stringRgbToInteger(canvas.getThemeColor('basebgcolorizer'));
+		var fillColor = this.stringRgbToInteger(canvas.getThemeColor('baseMousecolorizer'));
+		this.drawBody(this,0,0,this.width,this.height,fillColor,2);
+		this.drawDottedLine(this,0,0,this.width,0,numberColor,2);
+		this.drawDottedLine(this,this.width,0,this.width,this.height,numberColor,2);
+		this.drawDottedLine(this,this.width,this.height,0,this.height,numberColor,2);
+		this.drawDottedLine(this,0,this.height,0,0,numberColor,2);
+	</handler>
+	
+	<method name="stringRgbToInteger" args="rgb">
+	    <![CDATA[
+	        var red=(rgb >> 16) & 0xFF;
+	        var green=(rgb >> 8) & 0xFF;
+	        var blue=rgb & 0xFF;
+	        return (red * 65536 + green * 256 + blue);
+	    ]]>
+	</method>
+	
+  	<method name="drawBody" args="targetObj,x1,y1,x2,y2,fill,lineWidth">
+   		<![CDATA[
+    		
+            //if ($debug) Debug.write("drawBody: ",targetObj,lineWidth);
+        
+    		targetObj.lineWidth = lineWidth;
+    		targetObj.beginPath();
+    		targetObj.moveTo(x1,y1);
+    		targetObj.lineTo(x1,y2);
+    		targetObj.lineTo(x2,y2);
+    		targetObj.lineTo(x2,y1);
+    		targetObj.lineTo (x1,y1);
+    		targetObj.closePath();
+
+    		targetObj.fillStyle = fill;
+    		targetObj.fill();
+    		
+    	]]>   
+  	</method> 	
+
+	<method name="drawDottedLine" args="targetObj,startx,starty,endx,endy,stroke,lineWidth">
+    	<![CDATA[
+    		//var drawObj = new lz.drawview(targetObj,{width:this.width,height:this.height});	    
+    		//if ($debug) Debug.write("drawDottedLine: ",targetObj,startx,starty,endx,endy,stroke,lineWidth);
+	    	Math.linearTween = function (t, b, c, d) {
+			    return c*t/d + b;
+			};
+
+    		//if($debug)  Debug.write("drawDashLine: ",tObject);
+    		var tx = endx;
+    		var ty = endy;
+    		var sx = startx;
+    		var sy = starty;
+    		var distance = Math.sqrt(Math.pow(tx-sx,2)+Math.pow(ty-sy,2)); 
+    		var steps = Math.floor(distance  / 5 ); 
+    		//if($debug)  Debug.write("steps: ",steps);
+    		var gap = false;
+    		//if($debug)  Debug.write("gap1: ",gap);
+	        for (var i = 1; i<=steps; ++i) {
+	            var ctx = Math.linearTween(i, sx, tx-sx,steps);    //equations by R.Penner!
+	            var cty = Math.linearTween(i, sy, ty-sy,steps);
+	            //if($debug)  Debug.write("gap2: ",gap);
+	            gap = !gap;    //abwechselnd luecke/nichtluecke
+	            if(!gap) {
+	            	//if($debug)  Debug.write(csx,csy,"|",ctx,cty);
+    				targetObj.strokeStyle = stroke;
+    				targetObj.lineWidth = lineWidth;
+    				targetObj.beginPath();    			            	
+	               	targetObj.moveTo(csx,csy);
+	                targetObj.lineTo(ctx,cty);
+	                targetObj.stroke();
+	            }
+	            csx =ctx;
+	            csy = cty;
+	        }       		  		
+    	]]>
+	</method>	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor.fla b/WebContent/src/base/components/panel/resources/arrow_cursor.fla
new file mode 100644
index 0000000..7937bab
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor.swf b/WebContent/src/base/components/panel/resources/arrow_cursor.swf
new file mode 100644
index 0000000..c41d8dc
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla
new file mode 100644
index 0000000..47f6ba9
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf
new file mode 100644
index 0000000..05a2e97
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla
new file mode 100644
index 0000000..823ce08
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf
new file mode 100644
index 0000000..1bbb90c
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla
new file mode 100644
index 0000000..dda794a
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png
new file mode 100644
index 0000000..a9f3169
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_closed_small.fla b/WebContent/src/base/components/panel/resources/box_closed_small.fla
new file mode 100644
index 0000000..8b0d901
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_closed_small.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_closed_small.png b/WebContent/src/base/components/panel/resources/box_closed_small.png
new file mode 100644
index 0000000..ca34510
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_closed_small.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_open_small.fla b/WebContent/src/base/components/panel/resources/box_open_small.fla
new file mode 100644
index 0000000..1c04bc2
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_open_small.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_open_small.png b/WebContent/src/base/components/panel/resources/box_open_small.png
new file mode 100644
index 0000000..87597a3
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_open_small.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla b/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla
new file mode 100644
index 0000000..223156d
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf b/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf
new file mode 100644
index 0000000..c6748e5
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_vertical.fla b/WebContent/src/base/components/panel/resources/draw_box_vertical.fla
new file mode 100644
index 0000000..7ddd9a4
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_vertical.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_vertical.swf b/WebContent/src/base/components/panel/resources/draw_box_vertical.swf
new file mode 100644
index 0000000..37ffa2c
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_vertical.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/library.lzx b/WebContent/src/base/components/panel/resources/library.lzx
new file mode 100644
index 0000000..9cfcfd4
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/library.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="conferenceBox_button_min_small_rsc" src="box_closed_small.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="conferenceBox_button_max_small_rsc" src="box_open_small.png" />
+    <!-- APL Author sebawagner -->
+	<resource name="arrow_draw_panel_cursor" src="arrow_cursor.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="arrow_resize_panel_cursor" src="arrow_cursor_resize_tool.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="arrow_rotate_panel_cursor" src="arrow_cursor_rotate_tool.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="draw_box_vertical_rsc" src="draw_box_vertical.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="draw_box_horizontal_rsc" src="draw_box_horizontal.swf" />
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/boxInitEffect.lzx b/WebContent/src/base/components/presenter/boxInitEffect.lzx
new file mode 100644
index 0000000..4391c93
--- /dev/null
+++ b/WebContent/src/base/components/presenter/boxInitEffect.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="boxInitEffect" extends="view" width="100" height="20" 
+    opacity="0.3" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    
+    <attribute name="zielx" value="200" type="number" />
+    <attribute name="ziely" value="200" type="number" />
+    <attribute name="zielwidth" value="100" type="number" />
+    <attribute name="zielheight" value="100" type="number" />
+    
+    <attribute name="objRef" value="null" />
+    
+    <handler name="oninit">
+    	//It seems like you need additionally to start it oninit, the start = true works
+    	//only for the first initialization, sebawagner 19.03.2012
+    	//the following call seems to be redundant after using non-deprecated attribute name -- solomax 2012.07.20 
+    	this.anm.setAttribute('started', true);
+    </handler>
+    
+    <method name="sendStop">
+        this.objRef.sendAnniComplete();
+        this.destroy();
+    </method>
+
+    <animatorgroup name="anm" started="true" process="simultaneous" 
+        		duration="500" onstop="this.parent.sendStop()" >
+        <animator attribute="x" to="$once{ parent.parent.zielx }" />
+        <animator attribute="y" to="$once{ parent.parent.ziely }" />
+        <animator attribute="width" to="$once{ parent.parent.zielwidth }" />
+        <animator attribute="height" to="$once{ parent.parent.zielheight }" />
+    </animatorgroup>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/presenter/guiPresenter.lzx b/WebContent/src/base/components/presenter/guiPresenter.lzx
new file mode 100644
index 0000000..5b1ed9e
--- /dev/null
+++ b/WebContent/src/base/components/presenter/guiPresenter.lzx
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>     
+
+<class name="guiPresenter" extends="view" width="250" height="400" 
+    clickable="$once{ this.isdragable }"
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+    
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    
+    <method name="setShadow">
+        <![CDATA[
+        if (this.isinited && this.hasshadow){
+            this.normalMC = this.getDisplayObject();
+            this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	    
+
+    <attribute name="hasshadow" value="true" type="boolean" />
+          
+	<!--- The Title of this Box -->
+	<attribute name="title" value="defaulttitle" type="string" />
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="true" type="boolean" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="resizeable" value="true" type="boolean" />
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="true" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+    
+    <!--- @keywords private show minimize, maximize, close buttons -->
+    <attribute name="fullToolBar" value="true" type="boolean" />
+    
+    <attribute name="maximizable" value="true" type="boolean" />
+    
+    <attribute name="minimizable" value="true" type="boolean" />
+    
+    <attribute name="minimized" value="false" type="boolean" />
+    
+    <attribute name="customMinimizeMethod" value="false" type="boolean" />
+    
+    <attribute name="initialHeight" value="0" type="number"/>
+    
+    <!--- @keywords private if this window is dragable -->
+    <attribute name="isdragable" value="true" type="boolean" />
+    
+    <attribute name="_barmenuButtonRef" value="null" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="ismaximized" value="false" type="boolean" />    
+    <attribute name="maxi_x" value="0" type="number" />
+    <attribute name="maxi_y" value="0" type="number" />
+    <attribute name="maxi_height" value="0" type="number" />
+    <attribute name="maxi_width" value="0" type="number" />
+    
+    <attribute name="isresizeing" value="false" type="boolean" />
+    
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="id">
+		this.labelid=id;
+		this.setAttribute('title',canvas.getLabelName(this.labelid));
+	</method>    
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />    
+    
+	<!--- the Event will be thrown if you do click on it and drag -->
+	<event name="onactivate" />   
+    
+    <!--- this Event will be triggered after resizing -->
+    <event name="onresized" />
+    
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+	<handler name="oninit">
+		this.initheight=this.height;
+		//Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+	</handler>
+    
+    <handler name="onwidth" args="w">
+        <![CDATA[
+            if (this.isresizeing){
+            	if (w<40){
+            		this.setAttribute('width',41); 
+            		this._resizeview.onmouseup.sendEvent();
+            	}
+                if (w<_titlebar._title.width+70) {
+                    this.setAttribute('width',_titlebar._title.width+71); 
+                    this._resizeview.onmouseup.sendEvent();
+                }
+            }
+        ]]>
+    </handler>
+    
+    <handler name="onheight" args="h">
+        <![CDATA[
+            if (this.isresizeing){
+                if (h<40) {
+                    this.setAttribute('height',41); 
+                    this._resizeview.onmouseup.sendEvent();
+                }
+            }
+        ]]>
+    </handler>
+    
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+        if (this._barmenuButtonRef!=null){
+            this._barmenuButtonRef.destroy();
+            this._barmenuButtonRef.parent.onwidth.sendEvent();
+        }
+		this.destroy();
+	</method>
+    
+    <method name="minimize">
+        <![CDATA[
+	        this.setAttribute("minimized",true);
+	        
+	        this._titlebar._toolbar._minimize.setAttribute("visibility","hidden");
+	        this._titlebar._toolbar._maximize2.setAttribute("visibility","visible");
+	        
+	        if (this.customMinimizeMethod) {
+	            return;
+	        }
+	        
+	        for (var eg in this.subviews) {
+	            if (this.subviews[eg].name != "_titlebar" 
+	                    && this.subviews[eg].name != "_bg") {
+	                 this.subviews[eg].setAttribute("visibility","hidden");   
+	            }
+	        }
+            
+	        this.initialHeight = this.height;
+	        //this.setAttribute("height",20);
+            this._minimizeZoom.setAttribute("to",20);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+    </method>
+    
+    <method name="reminimize">
+        <![CDATA[
+	        this.setAttribute("minimized",false);
+	        
+	        this._titlebar._toolbar._minimize.setAttribute("visibility","visible");
+	        this._titlebar._toolbar._maximize2.setAttribute("visibility","hidden");
+	        
+	        if (this.customMinimizeMethod) {
+	            return;
+	        }
+	        
+	        //this.setAttribute("height",this.initialHeight); 
+            this._minimizeZoom.setAttribute("to",this.initialHeight);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+    </method>
+    
+    <method name="reminimizeComplete">
+        <![CDATA[
+	        if (!this.minimized) {
+	            
+	            for (var eg in this.subviews) {
+	                if (this.subviews[eg].name != "_titlebar" 
+	                        && this.subviews[eg].name != "_bg") {
+	                     this.subviews[eg].setAttribute("visibility","visible");   
+	                }
+	            }
+	            
+	            if (!this.resizeable) {
+	                this._resizeview.setAttribute("visibility","hidden");   
+	            }
+	        
+	        }
+        ]]>
+    </method>
+	
+	<method name="toggleopen">
+		//////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					//////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					//////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					//////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		//////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				//////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		//////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					//////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+    
+    <method name="activate">
+        this.onactivate.sendEvent();
+        this.bringToFront();
+        if (this._barmenuButtonRef!=null) this._barmenuButtonRef.sendActiveWindow(this);
+    </method>
+    
+    <method name="rsapply">
+        this.isresizeing=true;
+        this.rs.apply();
+    </method>
+    
+    <method name="rsremove">
+        this.rs.remove();
+        this.isresizeing=false;
+        //Debug.write("rsremove",this,this.isinited);
+        this.onresized.sendEvent();
+    </method>    
+    	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+        if (!this.ismaximized){
+            //It's important to remove the dragger and do docking stuff before you check for conencted Boxes
+            dragger.remove();
+            if (obj==this){
+                if (docking) arrangePosition();
+            } else {
+                if (docking) _lookforParentOnly(obj);
+            }
+                
+            //check for connected Boxes
+            for (var eg in this.dockinglist){
+                if(this.dockinglist[eg].docking){
+                    this.dockinglist[eg]._removeDragState(this);
+                }
+            }
+        }
+	</method>
+
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+        this.activate();
+        if (!this.ismaximized){
+            _calcdockingList();
+            for (var eg in this.dockinglist){
+                if(this.dockinglist[eg].docking){
+                    this.dockinglist[eg]._startDragState(this);
+                }
+            }
+            //store position cause it wasn't dragged by itself
+            if (obj!=this){
+                storeAdjustmentToParent(obj.x,obj.y);
+            }
+            dragger.apply();
+        }
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		//////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+	<view name="_bg" width="${ this.parent.width }" height="${ this.parent.height }" 
+        bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" > 
+        <view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }"
+             x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+    </view>        
+    
+	<view x="1" y="1" width="${ this.parent.width-1 }" height="20" name="_titlebar" >
+		<!-- stretches="width" -->
+		<gradientview x="0" width="${ this.parent.width }" height="20"
+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
+				colorTo="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+		</gradientview>
+		
+        <text name="_title" fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+			
+	    <view name="_toolbar" visibility="$once{ ((parent.parent.fullToolBar) ? 'visible' : 'hidden' ) }" 
+	        x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">     
+            
+            <miniIconsPresenter name="_minimize"
+                visibility="$once{ ((parent.parent.parent.minimizable) ? 'visible' : 'hidden' ) }" 
+                iconRessourceName="btn_presenter_minimize">
+                <handler name="onclick">
+                    this.parent.parent.parent.minimize();
+                </handler>
+                <labelTooltip labelid="856" />
+            </miniIconsPresenter>
+            
+            <miniIconsPresenter name="_maximize2" visibility="hidden"
+                iconRessourceName="btn_presenter_maximize">
+                <handler name="onclick">
+                    this.parent.parent.parent.reminimize();
+                </handler>
+                <labelTooltip labelid="857" />
+            </miniIconsPresenter>
+            
+	        <miniIconsPresenter name="_close"
+	            visibility="$once{ ((parent.parent.parent.closable) ? 'visible' : 'hidden' ) }"
+	            iconRessourceName="btn_presenter_close2">
+	            <handler name="onclick">
+	                this.parent.parent.parent.close();
+	            </handler>
+	            <labelTooltip labelid="430" />
+	        </miniIconsPresenter>  
+            
+	    </view>  			
+	</view>
+    <handler name="onaddsubview" args="v">
+		//Debug.write("onaddsubview",v);
+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();
+    </handler>
+    <view visibility="$once{ ((this.parent.resizeable) ? 'visible' : 'hidden' ) }"
+        name="_resizeview" x="${ this.parent.width - 16 }" 
+        y="${ this.parent.height - 16 }" resource="explorer_resize_rsc" 
+        cursor="explorer_resizemouse_rsc" onmousedown="this.parent.rsapply()"
+        onmouseup="this.parent.rsremove()" >
+        <labelTooltip text="resize" />
+    </view>    
+    <resizestate name="rs"/>
+    
+    <animator name="_minimizeZoom" attribute="height" 
+              duration="750" to="20" started="false">
+        <handler name="onstop" args="s">
+            parent.reminimizeComplete();
+        </handler>
+    </animator>
+    
+</class>
+
+<class name="miniIconsPresenter" extends="view">
+    
+    <attribute name="iconRessourceName" value="" type="string"/>
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",0xFFFFFF);
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <handler name="onmousedown">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('basebgcolorizer'));
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseup">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <view name="_bg" visibility="hidden" opacity="0.7"
+          width="14" height="14" x="1" y="1" bgcolor="0xFFFFFF" />
+          
+    <view name="_itemRsc" resource="$once{ parent.iconRessourceName }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/presenter/library.lzx b/WebContent/src/base/components/presenter/library.lzx
new file mode 100644
index 0000000..9472fa8
--- /dev/null
+++ b/WebContent/src/base/components/presenter/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="resources/" />
+	<include href="boxInitEffect.lzx" />
+	<include href="guiPresenter.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/resources/close_mo.png b/WebContent/src/base/components/presenter/resources/close_mo.png
new file mode 100644
index 0000000..b9d0f94
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/close_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/close_up.png b/WebContent/src/base/components/presenter/resources/close_up.png
new file mode 100644
index 0000000..79d3b72
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/close_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/library.lzx b/WebContent/src/base/components/presenter/resources/library.lzx
new file mode 100644
index 0000000..994ca29
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/library.lzx
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL Author sebawagner -->
+	<resource src="presenter_thumb.swf" name="presenter_thumb_rsc" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_minimize" src="minimize_up.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_maximize" src="maximize_up.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_maximize2" src="maximize2_up.png" />
+    
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_close2" src="close_up.png" />
+    
+    <!-- APL Author sebawagner -->
+	<resource name="btn_presenter_close">
+        <frame src="close_up.png" />
+        <frame src="close_mo.png" />
+        <frame src="close_up.png" />
+    </resource> 
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/resources/maximize2_up.png b/WebContent/src/base/components/presenter/resources/maximize2_up.png
new file mode 100644
index 0000000..1edd23b
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/maximize2_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/maximize_up.png b/WebContent/src/base/components/presenter/resources/maximize_up.png
new file mode 100644
index 0000000..778c05c
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/maximize_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/minimize_up.png b/WebContent/src/base/components/presenter/resources/minimize_up.png
new file mode 100644
index 0000000..1637298
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/minimize_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/presenter_thumb.swf b/WebContent/src/base/components/presenter/resources/presenter_thumb.swf
new file mode 100644
index 0000000..84f8b96
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/presenter_thumb.swf
Binary files differ
diff --git a/WebContent/src/base/components/resetCombobox.lzx b/WebContent/src/base/components/resetCombobox.lzx
new file mode 100644
index 0000000..ae0a855
--- /dev/null
+++ b/WebContent/src/base/components/resetCombobox.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="resetCombobox" extends="combobox" editable="false" shownitems="12"
+    	   style="componentStyle" itemclassname="labeldTextListItem">
+    
+    	<method name="getNumItems">
+    		return this.cblist.getNumItems();
+    	</method>
+    
+        <method name="reset" >
+            <![CDATA[
+                var currentCount = this.cblist.getNumItems();
+                for (var i = 0; i < currentCount; i++)
+                    this.removeItemAt(0);
+                this.clearSelection();
+            ]]>
+        </method>
+    
+    </class>
+        
+</library>
diff --git a/WebContent/src/base/components/scrollbars/library.lzx b/WebContent/src/base/components/scrollbars/library.lzx
new file mode 100644
index 0000000..9ee00e1
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL Author sebawagner -->
+	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />
+	
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />
+    <!-- APL Author sebawagner -->
+   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />
+
+	<include href="om_vscrollbar.lzx"/>
+	<include href="om_hscrollbar.lzx"/>
+
+</library>
diff --git a/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx b/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx
new file mode 100644
index 0000000..036fed6
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_hscrollbar" extends="basescrollbar" styleable="false"
+    axis="x">
+
+    <!--- @keywords private -->
+    <attribute name="height" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="rightarrow" width="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="left"
+           resource="omscrolltrack_x_rsc" stretches="width">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_xthumbleft_rsc"/>
+             <view resource="omscrollbar_xthumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_xthumbright_rsc"/>
+             <stableborderlayout axis="x"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="leftarrow" />
+    <stableborderlayout axis="x"/>
+
+</class>
+</library>
diff --git a/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx b/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx
new file mode 100644
index 0000000..98623ed
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_vscrollbar" extends="basescrollbar" styleable="false"
+    axis="y">
+
+    <!--- @keywords private -->
+    <attribute name="width" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="toparrow" height="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="top"
+           resource="omscrolltrack_y_rsc" stretches="height">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_ythumbtop_rsc"/>
+             <view resource="omscrollbar_ythumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_ythumbbottom_rsc"/>
+             <stableborderlayout axis="y"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="bottomarrow" />
+    <stableborderlayout axis="y"/>
+
+</class>
+</library>
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf
new file mode 100644
index 0000000..fd9411b
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf
new file mode 100644
index 0000000..fff3744
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf
new file mode 100644
index 0000000..74ea64a
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
new file mode 100644
index 0000000..09a370b
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf
new file mode 100644
index 0000000..af9015f
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf
new file mode 100644
index 0000000..c701740
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf b/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf
new file mode 100644
index 0000000..937dd8d
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf b/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf
new file mode 100644
index 0000000..b05b88a
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx b/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx
new file mode 100644
index 0000000..bc08ffe
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+    
+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/simplevaluelist/library.lzx b/WebContent/src/base/components/simplevaluelist/library.lzx
new file mode 100644
index 0000000..b9ca8fe
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="simpleValueList.lzx" />
+    <include href="recordValueList.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/simplevaluelist/recordValueList.lzx b/WebContent/src/base/components/simplevaluelist/recordValueList.lzx
new file mode 100644
index 0000000..95cacae
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/recordValueList.lzx
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="recordListItem" extends="baseContentListItem" height="24">
+    
+    <attribute name="valueName" type="string" value="" />
+    <attribute name="value" type="number" value="0" />
+    
+	<turnOverTextItem text="$once{ parent.valueName }" width="226" />    
+    
+	<view width="60" height="24"
+		onclick="new lz.confirmDeleteWindow(canvas.main_content._content.inner,{refObj:this});" >		
+		<method name="confirmDelete">
+            this.parent.parent.parent.parent.parent.itemToDelete=this;
+			this.parent.parent.parent.parent.parent.deleteItem.sendEvent(parent);
+		</method>
+		<image stretches="both" width="16" height="16" 
+			 src="$once{ canvas.getThemeImage('button_cancel_rsc') }"
+			 align="center" y="4" />
+		<labelTooltip labelid="274" />
+	</view>	
+</class>
+	
+	
+<class name="recordValueList" extends="turnOverList" >
+    
+    <attribute name="itemToDelete" value="null" />
+    
+    <event name="deleteItem" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx b/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx
new file mode 100644
index 0000000..2807c56
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="simpleListItem" extends="view"
+	bgcolor="0xFFFFFF" onmouseup="this.parent.parent.parent.parent.toggleSelected(this)" >
+	<handler name="onmouseover">
+		<![CDATA[
+			if (this.selected) this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'))
+			else this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		]]>
+	</handler>
+	<handler name="onmouseout">
+		<![CDATA[
+			if (this.selected)  this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'))
+			else this.setAttribute('bgcolor',0xFFFFFF);
+		]]>
+	</handler>
+	<attribute name="selected" value="false" type="boolean"/>
+	<attribute name="value" value="null" />
+	<attribute name="text" value="" type="string" />
+	<text text="$once{ parent.text }" resize="true" fontsize="11" />
+</class>
+	
+	
+<class name="simpleValueList" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" >
+	
+	<attribute name="_selected" value="null" />
+	
+	<attribute name="multiselect" value="false" type="boolean" />
+    
+    <attribute name="itemclassname" type="string" value="simpleListItem" />
+	
+	<event name="onselect" />
+	
+	<method name="toggleSelected" args="obj">
+		<![CDATA[
+			var downkeys = lz.Keys.downKeysArray;
+			
+			//Select the Obj
+			
+			
+			if(downkeys.length==1 && downkeys[0]==17 && this.multiselect){
+				if (this._selected == null) this._selected = new Array();
+				if (this._checkForAlreadySelected(obj)) {
+					obj.setAttribute('selected',false);
+					obj.setAttribute('bgcolor',0xFFFFFF);
+				} else {
+					obj.setAttribute('selected',true);
+					this._selected.push(obj);
+				}				
+			} else if (downkeys.length==0 && this.multiselect){
+				if (this._selected == null) this._selected = new Array();
+				this._deslectAll();
+				obj.setAttribute('selected',true);
+				this._selected.push(obj);	
+			} else if (!this.multiselect) {
+				if(this._selected!=null) {
+					this._selected.setAttribute('selected',false);
+					this._selected.setAttribute('bgcolor',0xFFFFFF);
+				}
+				this._selected = obj;
+			    this._selected.setAttribute('selected',true);
+			} else {
+				Debug.warning("not handled",this);
+			}
+			
+		]]>
+	</method>
+	
+	<method name="_checkForAlreadySelected" args="obj">
+		<![CDATA[
+			for (var i=0;i<this._selected.length;i++){
+				if (this._selected[i]==obj) {
+					this._selected.splice(i,1);
+					return true;
+				}
+			}
+			return false;
+		]]>
+	</method>
+	
+	<method name="_deslectAll">
+		<![CDATA[
+			for (var i=0;i<this._selected.length;i++){
+				this._selected[i].setAttribute('selected',false);
+				this._selected[i].setAttribute('bgcolor',0xFFFFFF);
+			}
+			this._selected=new Array();
+		]]>
+	</method>
+	
+    <method name="addItem" args="txt,value">
+    	new lz[this.itemclassname](this.content.content.inn,{text:txt,value:value,width:this.width});
+    </method>
+	
+    <method name="removeItem" args="value">
+		<![CDATA[
+			if (this._selected!=null){
+				if (this.multiselect){
+					for (var i=0;i<this._selected.length;i++){
+						if (this._selected[i].value==value){
+							this._selected.splice(i,1);
+						}
+					}
+				} else {
+					if (this._selected.value==value) this._selected==null;
+				}
+			}
+			for (var i=0;i<this.content.content.inn.subviews.length;i++){
+				if(this.content.content.inn.subviews[i].value==value){
+					this.content.content.inn.subviews[i].destroy();
+				}
+			}
+		]]>
+    </method>
+	<method name="checkValue" args="value">
+		<![CDATA[
+			var t = this.getAllObjects();
+			if (t!=null){
+				for (var i=0;i<t.length;i++){
+					if (t[i].value==value) return true;
+				}
+			}
+			return false;
+		]]>
+	</method>		
+		
+    <method name="getAllItems">
+    	<![CDATA[
+    	var a = new Array();
+    	for (var i=0;i<this.content.content.inn.subviews.length;i++){
+    		//Debug.write("t: ",this.content.content.inn.subviews[i].value);
+    		a.push(Number(this.content.content.inn.subviews[i].value));
+    	}
+    	return a;
+    	]]>
+    </method>
+	<method name="getAllObjects">
+    	<![CDATA[
+    	var a = new Array();
+    	for (var i=0;i<this.content.content.inn.subviews.length;i++){
+    		a.push(this.content.content.inn.subviews[i]);
+    	}
+    	return a;
+    	]]>
+	</method>
+    <method name="clearList">
+    	for (var eg in this.content.content.inn.subviews){
+    		this.content.content.inn.subviews[eg].destroy();
+    	}
+    </method>
+    <view name="content" width="$once{ parent.width-2 }" height="$once{ parent.height-2 }"
+    	x="1" y="1" clip="true" bgcolor="0xFFFFFF">
+    	<view name="content" >
+    		<view name="inn" layout="axis:y;spacing:2" />
+    	</view>
+    	<om_vscrollbar />
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/tableCombobox.lzx b/WebContent/src/base/components/tableCombobox.lzx
new file mode 100644
index 0000000..d8d8fb6
--- /dev/null
+++ b/WebContent/src/base/components/tableCombobox.lzx
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="tableCombobox" extends="combobox" editable="false" fontsize="10" style="componentStyle">
+    <attribute name="initvalue" type="string" />
+    <attribute name="tvalue" type="string" />
+    <attribute name="sendchange" value="false" type="boolean" />
+    <handler name="oninit">
+        this.parent.parent.parent.parent.loadModsCombo(this);
+        this.selectItem(this.initvalue);
+    </handler>
+    <handler name="onblur">
+        if (this.sendchange) this.parent.sendchange(this,tvalue,this.getValue());
+    </handler>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/tableListItem.lzx b/WebContent/src/base/components/tableListItem.lzx
new file mode 100644
index 0000000..fffa1ad
--- /dev/null
+++ b/WebContent/src/base/components/tableListItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="tableListItem" extends="view"
+    bgcolor="${ ( this.isaltered ) ? red : white }" height="22">
+    
+    <handler name="oninit">
+        this.changeholder = new Array();
+    </handler>
+
+    <attribute name="isdatarecord" value="true" type="boolean" />
+    
+    <attribute name="changeholder" value="null" />
+    <attribute name="isaltered" value="false" type="boolean" />
+
+    <method name="sendchange" args="obj,oldv,newv">
+        ////Debug.write("check Update");
+        var t = false;
+        for (var eg in this.changeholder){
+            if (this.changeholder[eg][0]==obj){
+                t = true;
+                this.changeholder[eg][1]=oldv;
+                this.changeholder[eg][2]=newv;
+                break;
+            }
+        }
+        if (!t) this.changeholder.push(new Array(obj,oldv,newv));
+        
+        t = false;
+        for (var eg in this.changeholder){
+            if (this.changeholder[eg][1]!=this.changeholder[eg][2]){
+                t = true;
+                break;
+            }
+        }
+        
+        this.setAttribute('isaltered',t);
+        this._doupdate.setValue(t);
+        this.parent.parent.parent.sendchange(this);
+        
+    </method>
+    <simplelayout axis="x" spacing="3" inset="2" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/borderedInputtext.lzx b/WebContent/src/base/components/text/borderedInputtext.lzx
new file mode 100644
index 0000000..4e74e26
--- /dev/null
+++ b/WebContent/src/base/components/text/borderedInputtext.lzx
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="borderedInputtext" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+	<!---@keywords private -->
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <!---@keywords private -->
+    <event name="onblur" />
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>         	
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+  		<attribute name="preText" value="" type="string" />
+  		<handler name="onfocus">
+  			this.preText = this.getText();
+  		</handler>
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t=this.preText;
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+            if (this.parent.onblur) this.parent.onblur.sendEvent();
+      	</handler>
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedMultiInputtext" extends="view">
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+    <!---@keywords private -->	
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>       
+    <!---@keywords private -->  	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+            if(this.multiline) this.init();
+        </handler>       	           
+        <method name="init">
+            super.init();        
+        </method>
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedPasswordText" extends="view">
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+	<!---@keywords private -->
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>  
+    <!---@keywords private -->       	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<!---@keywords private -->
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" password="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customEdittext.lzx b/WebContent/src/base/components/text/customEdittext.lzx
new file mode 100644
index 0000000..b8e1ce6
--- /dev/null
+++ b/WebContent/src/base/components/text/customEdittext.lzx
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="customEdittext" extends="inputtext" bgcolor="0xFFFFFF" fontsize="11" height="20" >
+	
+	<view name="v_border" height="1"       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="$once{parent.width}" />
+    <view name="h_border" width="1"  y="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="$once{parent.height -1}" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	
+	<attribute name="isvalidInput" value="true" type="boolean" />
+	<attribute name="regexpType" value="none" type="string" />
+	<attribute name="regexpLabelid" type="number" />
+	<attribute name="preText" value="" type="string" />
+    <attribute name="emailRegEx" type="string" value=""/>
+	
+	<event name="onafterCheck" />
+
+	<handler name="onfocus" args="f">
+    	this.preText = this.getText();
+    </handler>
+    
+    <handler name="oninit">
+    <![CDATA[
+    	emailRegEx = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{1,3})$";
+    	//this.field.setAttribute("bgcolor",0xFFFFFF);
+    ]]>
+    </handler>
+    
+    <handler name="ontext" args="txt">
+    	<![CDATA[
+            
+    	    //
+    	   
+    	    if (System.capabilities.os.indexOf('Linux')==-1) { 
+                return; 
+	        }
+	        
+	        //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+	        
+	        if (txt == null || txt.length == 0) {
+	        	return;
+	        }
+	        
+	        
+	        //UTF8 character remappings
+            var cp1252 = new Object();
+            cp1252[0x20ac]=0x80;
+            cp1252[0x201a]=0x82;
+            cp1252[0x0192]=0x83;
+            cp1252[0x201e]=0x84;
+            cp1252[0x2026]=0x85;
+            cp1252[0x2020]=0x86;
+            cp1252[0x2021]=0x87;
+            cp1252[0x02c6]=0x88;
+            cp1252[0x2030]=0x89;
+            cp1252[0x0160]=0x8a;
+            cp1252[0x2039]=0x8b;
+            cp1252[0x0152]=0x8c;
+            cp1252[0x017d]=0x8e;
+            cp1252[0x2018]=0x91;
+            cp1252[0x2019]=0x92;
+            cp1252[0x201c]=0x93;
+            cp1252[0x201d]=0x94;
+            cp1252[0x2022]=0x95;
+            cp1252[0x2013]=0x96;
+            cp1252[0x2014]=0x97;
+            cp1252[0x02dc]=0x98;
+            cp1252[0x2122]=0x99;
+            cp1252[0x0161]=0x9a;
+            cp1252[0x203a]=0x9b;
+            cp1252[0x0153]=0x9c;
+            cp1252[0x017e]=0x9e;
+            cp1252[0x0178]=0x9f;
+    	
+            
+            var s=eval(Selection.getFocus()); 
+            var t=txt;
+                    
+            var i=Selection.getCaretIndex()-1; 
+            
+            //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+            
+            var d=i;
+            
+            //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+            
+            while (((t.charCodeAt(i)>=0x80 && t.charCodeAt(i)<=0xBF) || (cp1252[t.charCodeAt(i)])) && i>0) {
+            	
+            	//if ($debug) Debug.write("DO WHILE -2- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i);
+            	
+                if (cp1252[t.charCodeAt(i)]) {
+                    t=t.substr(0,i)+String.fromCharCode(cp1252[t.charCodeAt(i)])+t.substr(i+1);
+                }
+                i--;
+            }
+            if (i==d) { 
+            	//if ($debug) Debug.write("i == d NOTHING TO REPLACE!");
+                return; 
+            }
+        
+            var u=0;
+            
+            if (t.charCodeAt(i)>=0xC2 && t.charCodeAt(i)<=0xDF && d-i==1) {
+                 // two-byte sequence
+                u= (t.charCodeAt(i+1) & 0x3F)       +
+                  ((t.charCodeAt(i  ) & 3   ) << 6) +
+                  ((t.charCodeAt(i  ) & 0x1C) << 6);
+            } else if (t.charCodeAt(i)>=0xE0 && t.charCodeAt(i)<=0xEF && d-i==2) {
+                // three-byte sequence
+                // (Flash Player doesn't cope with any more obscure Unicode)
+                u= (t.charCodeAt(i+2) & 0x3F)        +
+                  ((t.charCodeAt(i+1) & 3   ) << 6 ) +
+                  ((t.charCodeAt(i+1) & 0x3C) << 6 ) +
+                  ((t.charCodeAt(i  ) & 0x0F) << 12);
+            }
+        
+            if (u!=0) {
+            	//if ($debug) Debug.write("Replace String -1- ",txt,u,"Replace With ",String.fromCharCode(u));
+            	
+                this.setAttribute("text",t.slice(0,i)+String.fromCharCode(u)+t.slice(d+1));
+                
+                //if ($debug) Debug.write("Replace String -2- ",txt,u);
+                
+                this.setAttribute("text",this.text.split(String.fromCharCode(0x03)).join(''));
+            }
+            
+            //if ($debug) Debug.write("-- END ",this.text);
+            
+    	]]>
+    </handler>
+    
+    <attribute name="callDelegate" value="null" />
+    <attribute name="regExpCheckId" value="-1" />
+	
+	<handler name="onblur">
+		<![CDATA[
+			if (this.regexpType!="none"){
+			
+				//if ($debug) Debug.write("onblur");
+				//if ($debug) Debug.write("onblur check ",this.regexpType);		
+				var fieldValue = this.getText();
+				if (this.regexpType=="email") {
+					//var regExpV = ".+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)";
+					var regExpV = this.emailRegEx;
+					//var regExpV = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
+					this.regexpLabelid = 519;
+				} else if (this.regexpType=="date"){
+					var regExpV = "(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d";
+					this.regexpLabelid = 518;
+				} else if (this.regexpType=="float"){
+					var regExpV = "[0-9]*\\.[0-9]*";
+					this.regexpLabelid = 520;
+				} else if (this.regexpType=="phone"){
+					var regExpV = "\\+[0-9]+ [0-9]+ [0-9\\-]+";
+					this.regexpLabelid = 522;
+				} else if (this.regexpType=="number"){
+					var regExpV = "[0-9]*";
+					this.regexpLabelid = 521;
+				} else if (this.regexpType=="time"){
+					var regExpV = "([01][0-9]|2[0-3]):[0-5][0-9]";
+					this.regexpLabelid = 523;
+				} else {
+					if ($debug) Debug.warn("Unkown Regexp Type: ",this.regexpType);
+				}
+				//if ($debug) Debug.write("regExpV: ",regExpV);
+		  	    var fieldValue = this.getText();
+		  	    
+		  	    this.regExpCheckId = canvas.doRegExpCheck(this.getText(),regExpV);
+		  	    
+		  	    if(this.callDelegate == null) {
+		  	    	this.callDelegate = new LzDelegate( this, "checkRegExpResult" );
+		  	    }
+		
+				lz.Timer.resetTimer( this.callDelegate, 50 );
+			}
+		]]>
+	</handler>
+	
+	<method name="checkRegExpResult" args="item">
+		var tResult = canvas.checkRegExpResult(this.regExpCheckId);
+     	if ($debug) Debug.write("callback",tResult);
+     
+		if(tResult == undefined || tResult == null) {
+			lz.Timer.resetTimer( this.callDelegate, 50 );
+		} else {
+			if(!tResult){
+                if ($debug) Debug.warn("FALSE: regexperror");
+              	disablesTooltips(new lz.regexptip(canvas,{x:this.getAttributeRelative('x',canvas)+12,
+              					y:this.getAttributeRelative('y',canvas)+26,
+              					regexptext:canvas.getLabelName(this.regexpLabelid)}));
+              	this.usePreContent();
+              	this.setAttribute('isvalidInput',false);
+            } else {
+              	if(!this.isvalidInput){
+                	disablesTooltips(null);
+              	}
+              	this.setAttribute('isvalidInput',true);
+            }
+            if ($debug) Debug.write("-- Complete --");
+            this.onafterCheck.sendEvent();
+		}
+     </method>
+	
+    
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+  	<method name="usePreContent">
+  		this.setAttribute('text',this.preText);
+  	</method>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customInputtext.lzx b/WebContent/src/base/components/text/customInputtext.lzx
new file mode 100644
index 0000000..4301a29
--- /dev/null
+++ b/WebContent/src/base/components/text/customInputtext.lzx
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="customInputtext" extends="inputtext">
+	  
+	 <!-- lost selection workaroud -->
+	 <attribute name="selPosition" type="integer"/>
+	 <attribute name="selSize" type="integer"/>
+	 <!-- this method should be called before the component lost focus -->
+	 <method name="saveselection">
+	 	this.selPosition=getSelectionPosition();
+	 	this.selSize=getSelectionSize();
+	 </method>
+	  
+	 <handler name="onfocus">
+	 
+	 	if ($debug) Debug.write("customInputtext onFocus : ", canvas.isrtl);
+	 		
+	 
+		 if(canvas.isrtl == 'true'){
+	 		if ($debug) Debug.write("customInputtext onFocus : RTL is set");
+	 		this.setAttribute('textalign', 'right');
+        }
+        else{
+        	if ($debug) Debug.write("customInputtext onFocus : RTL is NOT set");
+      		this.setAttribute('textalign', 'left');
+        
+        }
+	 </handler>	  
+	  
+	 <handler name="ontext" args="txt">
+        <![CDATA[
+            
+            //
+           
+            if (System.capabilities.os.indexOf('Linux')==-1) { 
+                return; 
+            }
+            
+            //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+            
+            if (txt == null || txt.length == 0) {
+                return;
+            }
+            
+            
+            //UTF8 character remappings
+            var cp1252 = new Object();
+            cp1252[0x20ac]=0x80;
+            cp1252[0x201a]=0x82;
+            cp1252[0x0192]=0x83;
+            cp1252[0x201e]=0x84;
+            cp1252[0x2026]=0x85;
+            cp1252[0x2020]=0x86;
+            cp1252[0x2021]=0x87;
+            cp1252[0x02c6]=0x88;
+            cp1252[0x2030]=0x89;
+            cp1252[0x0160]=0x8a;
+            cp1252[0x2039]=0x8b;
+            cp1252[0x0152]=0x8c;
+            cp1252[0x017d]=0x8e;
+            cp1252[0x2018]=0x91;
+            cp1252[0x2019]=0x92;
+            cp1252[0x201c]=0x93;
+            cp1252[0x201d]=0x94;
+            cp1252[0x2022]=0x95;
+            cp1252[0x2013]=0x96;
+            cp1252[0x2014]=0x97;
+            cp1252[0x02dc]=0x98;
+            cp1252[0x2122]=0x99;
+            cp1252[0x0161]=0x9a;
+            cp1252[0x203a]=0x9b;
+            cp1252[0x0153]=0x9c;
+            cp1252[0x017e]=0x9e;
+            cp1252[0x0178]=0x9f;
+        
+            
+            var s=eval(Selection.getFocus()); 
+            var t=txt;
+                    
+            var i=Selection.getCaretIndex()-1; 
+            
+            //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+            
+            var d=i;
+            
+            //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+            
+            while (((t.charCodeAt(i)>=0x80 && t.charCodeAt(i)<=0xBF) || (cp1252[t.charCodeAt(i)])) && i>0) {
+                
+                //if ($debug) Debug.write("DO WHILE -2- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i);
+                
+                if (cp1252[t.charCodeAt(i)]) {
+                    t=t.substr(0,i)+String.fromCharCode(cp1252[t.charCodeAt(i)])+t.substr(i+1);
+                }
+                i--;
+            }
+            if (i==d) { 
+                //if ($debug) Debug.write("i == d NOTHING TO REPLACE!");
+                return; 
+            }
+        
+            var u=0;
+            
+            if (t.charCodeAt(i)>=0xC2 && t.charCodeAt(i)<=0xDF && d-i==1) {
+                 // two-byte sequence
+                u= (t.charCodeAt(i+1) & 0x3F)       +
+                  ((t.charCodeAt(i  ) & 3   ) << 6) +
+                  ((t.charCodeAt(i  ) & 0x1C) << 6);
+            } else if (t.charCodeAt(i)>=0xE0 && t.charCodeAt(i)<=0xEF && d-i==2) {
+                // three-byte sequence
+                // (Flash Player doesn't cope with any more obscure Unicode)
+                u= (t.charCodeAt(i+2) & 0x3F)        +
+                  ((t.charCodeAt(i+1) & 3   ) << 6 ) +
+                  ((t.charCodeAt(i+1) & 0x3C) << 6 ) +
+                  ((t.charCodeAt(i  ) & 0x0F) << 12);
+            }
+        
+            if (u!=0) {
+                //if ($debug) Debug.write("Replace String -1- ",txt,u,"Replace With ",String.fromCharCode(u));
+                
+                this.setAttribute("text",t.slice(0,i)+String.fromCharCode(u)+t.slice(d+1));
+                
+                //if ($debug) Debug.write("Replace String -2- ",txt,u);
+                
+                this.setAttribute("text",this.text.split(String.fromCharCode(0x03)).join(''));
+            }
+            
+            //if ($debug) Debug.write("-- END ",this.text);
+            
+        ]]>
+    </handler>
+  	
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customscrollEdittext.lzx b/WebContent/src/base/components/text/customscrollEdittext.lzx
new file mode 100644
index 0000000..626e9ad
--- /dev/null
+++ b/WebContent/src/base/components/text/customscrollEdittext.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+   
+<include href="incubator/scrolledittext.lzx" />
+
+<class name="customScrollEdittext" extends="view" >
+	
+	<attribute name="text" value="" type="string" />
+	
+	<event name="ontextChange" />
+
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribtue('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+    <method name="getText">
+    	return this._cbtext.getText();
+    </method>
+    
+    <view name="_face" bgcolor="0xFFFFFFF" 
+          width="$once{parent.width}" 
+          height="$once{parent.height}" />
+          
+    <view name="v_border" height="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="$once{parent.width}" />
+    <view name="h_border" width="1"  y="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="$once{parent.height -1}" />
+          
+    <scrolledittext name="_cbtext" width="$once{ parent.width-1 }" x="1" y="1" bgcolor="0xFFFFFF"  styleable="false"
+		height="$once{ parent.height-1 }" text="${ parent.text }" vscrollbarclassname="om_vscrollbar"
+		multiline="true" fontsize="11" />
+    
+     
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/labelText.lzx b/WebContent/src/base/components/text/labelText.lzx
new file mode 100644
index 0000000..6387078
--- /dev/null
+++ b/WebContent/src/base/components/text/labelText.lzx
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelText" extends="text" resize="true" fontsize="11" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+
+<class name="labelTextWidthTooltip" extends="text" resize="true" 
+	   onmouseover="" onmouseout=""
+	   fontsize="11" >
+	
+	<attribute name="labelLabelid" type="number" value="-1" />
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+	<labelTooltip name="_labelTooltip" labelid="$once{ parent.labelLabelid }" />
+	
+</class>
+
+<class name="labeldTextListItem" extends="textlistitem">
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <labelTooltip initByDataPathparent="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/labelTooltip.lzx b/WebContent/src/base/components/text/labelTooltip.lzx
new file mode 100644
index 0000000..b143407
--- /dev/null
+++ b/WebContent/src/base/components/text/labelTooltip.lzx
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelTooltip" extends="view" visible="false" >
+
+	<attribute name="inittwice" value="false" type="boolean" />
+    <attribute name="multiline" value="false" type="boolean" />
+    <attribute name="ismenubuttonlabel" value="false" type="boolean" />
+    <attribute name="initByDataPathparent" value="false" type="boolean" />
+    
+    <attribute name="holder" value="null" />
+    
+    <event name="setContent" />
+        
+    <handler name="onmouseover" reference="this.parent">
+    	<![CDATA[
+            this.setContent.sendEvent();
+	    	if (this.ismenubuttonlabel){
+	    		this.parent.setLabel();
+	    	}
+	    	if (this.inittwice){
+	    		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	    	}
+	    	if (this.initByDataPathparent){
+                this.setAttribute('text',parent.text);
+            }
+	        var xVal = canvas.getMouse('x');
+	        var yVal = canvas.getMouse('y');
+			////Debug.write("mytext: ",this.mytext);
+			if (this.multiline && this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltipMulti(canvas,{text:this.text,holder:this});
+			} else if (this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltip(canvas,{text:this.text,holder:this});
+			}
+	        if (xVal<canvas.width/2){
+	            xVal += 0;
+	        } else {
+	            xVal -= this.holder.width-14;
+	        }
+	        if (yVal<canvas.height/2){
+	            yVal += 24;
+	        } else {
+	            yVal -= 24;
+	        }
+	        if (this.holder!=null)  {
+	           this.holder.setAttribute('x',xVal);
+	           this.holder.setAttribute('y',yVal);
+            }
+            canvas.registerToolTip(this);
+        ]]>        
+    </handler>
+    <handler name="onmouseout" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    <handler name="onmouseup" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    <handler name="onclick" reference="this.parent">
+        this.cleanHolder();
+    </handler>   
+    <method name="cleanHolder">
+        if (this.holder!=null) {
+            this.holder.destroy();
+            this.holder = null; 
+            canvas.clearToolTip();
+        }
+    </method> 
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <attribute name="text" value="" type="string" />
+</class>
+
+<class name="xmlCrmTooltip" extends="view" bgcolor="0x000000" 
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" />
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method> 
+</class>
+
+<class name="xmlCrmTooltipMulti" extends="view" bgcolor="0x000000" 
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" multiline="true" />
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	    
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/library.lzx b/WebContent/src/base/components/text/library.lzx
new file mode 100644
index 0000000..facbdab
--- /dev/null
+++ b/WebContent/src/base/components/text/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="borderedInputtext.lzx" />
+	<include href="labelText.lzx" />
+	<include href="labelTooltip.lzx" />
+    <include href="customEdittext.lzx" />
+    <include href="customscrollEdittext.lzx" />
+    <include href="customInputtext.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx b/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx
new file mode 100644
index 0000000..799bed3
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--- base class for the item list views-->
+<class name="baseContentListItem" extends="view" 
+	   layout="axis:x;spacing:0" bgcolor="0xFFFFFF" >
+	
+	<attribute name="isselected" value="false" type="boolean"/>
+	
+	<method name="select">
+		this.isselected = true;
+		this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+	</method>
+	
+	<method name="deselect">
+		this.isselected = false;
+		this.setAttribute('bgcolor',0xFFFFFF);
+	</method>
+	
+	<method name="doDeselect">
+		this.deselect();
+	</method>
+	
+	<handler name="onmouseover">
+		if (!this.isselected) {
+			this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		}
+	</handler>
+	
+	<handler name="onmouseout">
+		if (!this.isselected) {
+			this.setAttribute('bgcolor',0xFFFFFF);
+		} else {
+			this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		}
+	</handler>
+	
+	<handler name="onclick">
+		if ($debug) Debug.write("baseContentListItem -- onclick");
+		this.parent.parent.parent.parent.onclickedItem.sendEvent(this);
+	</handler>
+    
+    <handler name="ondblclick">
+		this.parent.parent.parent.parent.ondblclickedItem.sendEvent(this);
+	</handler>
+	
+    <attribute name="obj" value="null" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/library.lzx b/WebContent/src/base/components/turnoverlist/library.lzx
new file mode 100644
index 0000000..32abb86
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/library.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- APL Author sebawagner -->
+    <resource name="width_gripper_rsc" src="resources/width_change_cursor.swf" />
+
+	<!-- APL Author sebawagner -->
+	<resource name="sort_asc_turnover_rsc" src="resources/sort_asc.png" />
+	
+	<!-- APL Author sebawagner -->
+	<resource name="sort_desc_turnover_rsc" src="resources/sort_desc.png" />
+	    
+	<include href="turnOverList.lzx" />
+    <include href="simpleTurnOverList.lzx" />
+	<include href="turnOverListHeaderItem.lzx" />
+	<include href="turnOverTextItem.lzx" />
+    <include href="baseContentListItem.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/resources/sort_asc.png b/WebContent/src/base/components/turnoverlist/resources/sort_asc.png
new file mode 100644
index 0000000..a5c9c8b
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/sort_asc.png
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/sort_desc.png b/WebContent/src/base/components/turnoverlist/resources/sort_desc.png
new file mode 100644
index 0000000..acdb200
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/sort_desc.png
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla
new file mode 100644
index 0000000..7205efb
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf
new file mode 100644
index 0000000..39e0f00
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx b/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx
new file mode 100644
index 0000000..fd021fe
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- common simpleTurnOverList view class. -->
+<class name="simpleTurnOverList" extends="view">
+    
+    <attribute name="_selected" value="null"/>
+    
+    <event name="ondblclickedItem" />
+
+    <handler name="onclickedItem" args="itemObj">
+        if (this._selected != null) {
+            this._selected.deselect();
+        }
+        this._selected = itemObj;
+        this._selected.select();
+    </handler>
+	
+	<attribute name="mainBgColor" value="0xEEF0EB" />
+    
+	<method name="addHeaderItem" args="labelid,width" >
+		new lz.turnOverListHeaderItem(this._innerlisthead._inn,{labelid:labelid,width:width,subviewsid:this._innerlisthead._inn.subviews.length});
+	</method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+	
+	<method name="sendWidthUpdate" args="w,subviewsid" >
+		<![CDATA[
+		////Debug.write(w,subviewsid,this._innerlist._inn);
+		for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+			this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w);
+		}
+		]]>
+	</method>
+    
+    <method name="initValues" args="numberOfRecords">
+        <![CDATA[
+            this._records.setAttribute('text',numberOfRecords + ' ' + canvas.getLabelName(272) );
+        ]]>
+    </method>
+	
+	<method name="clearList">
+        this._selected = null;
+		this._innerlist._inn._inn.destroy();
+		new lz.innerList(this._innerlist._inn,{name:'_inn'});
+	</method>
+    
+    <!-- =========  BgArea area  =========-->
+    <view width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+          height="$once{ parent.height-20 }" x="0" y="20">
+        <view width="$once{ parent.width-2 }" bgcolor="$once{ parent.parent.mainBgColor }"
+          height="$once{ parent.height-2 }" x="1" y="1"></view>
+    </view>
+    
+	<!-- =========  Control area  =========-->
+
+    <labelText name="_records" x="2" resize="true" />
+    
+    
+	<!-- =========  List Header area  =========-->
+
+	<view name="_innerlisthead" height="20" x="1" width="$once{ parent.width-2 }"
+         y="22" clip="true">
+        <view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+    </view> 
+	
+	<!-- =========  List Contents area  =========-->
+	<view name="_innerlist" height="$once{ parent.height-43 }" x="1" width="$once{ parent.width-2 }"
+		y="42" clip="true" bgcolor="$once{ parent.mainBgColor }">
+		<view name="_inn" >
+			<innerList name="_inn" />
+		</view>
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverList.lzx b/WebContent/src/base/components/turnoverlist/turnOverList.lzx
new file mode 100644
index 0000000..821b20f
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverList.lzx
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--- private class for turnOverList only. -->
+<class name="innerList" layout="axis:y;spacing:1" />
+	
+<!--- common TurnOverList view class. -->
+<class name="turnOverList" extends="view" >
+
+	<attribute name="start" value="0" type="number" />
+	<attribute name="step" value="100" type="number" />
+	<attribute name="orderby" value="firstname" type="string" />
+	<attribute name="asc" value="true" type="boolean" />
+	<attribute name="records" value="0" type="number" />
+	
+	<attribute name="_selected" value="null"/>
+    <attribute name="currentSelectedOrder" value="null" />
+    <attribute name="mainBgColor" value="0xEEF0EB" />
+	
+	<event name="oncallnext" />
+	<event name="oncallpre" />
+	<event name="ondblclickedItem" />
+    <event name="onUpdateOrder" />
+	
+	<method name="callfirst">
+		this.start = 0;
+		this.oncallnext.sendEvent();
+	</method>
+    
+    <method name="clearSelection">
+        if (this._selected != null) {
+            this._selected.deselect();
+        }
+    </method>
+	
+	<handler name="onclickedItem" args="itemObj">
+		if (this._selected != null) {
+			this._selected.deselect();
+		}
+		this._selected = itemObj;
+		this._selected.select();
+	</handler>
+	
+	<method name="calllast">
+		var newMaxPages = Math.floor(this.records/this.step);
+        if ($debug) Debug.write("calllast 1 ",newMaxPages);
+        this.start = newMaxPages*this.step;
+        if ($debug) Debug.write("calllast 2 ",this.start);
+        if (this.start == this.records) {
+            this.start = this.records-this.step;
+        }
+        if ($debug) Debug.write("calllast 3 ",this.start);
+        if ($debug) Debug.write("calllast 4 ",this.records);
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+        
+		//this.start = this.records-this.step;
+		//this.oncallnext.sendEvent();
+	</method>
+	
+	<method name="callnext">
+		this._next1.setAttribute('enabled',false);
+		this._pre2.setAttribute('enabled',false);
+		if (this.records>(this.start+this.step)){
+			this.start+=this.step;
+		}
+		this.oncallnext.sendEvent();
+	</method>
+	
+	<method name="callpre">
+		this._next1.setAttribute('enabled',false);
+		this._pre2.setAttribute('enabled',false);
+		if (this.start>0){
+			this.start-=this.step;
+		}
+		this.oncallpre.sendEvent();
+	</method>
+	
+	<method name="initValues" args="rec">
+		<![CDATA[
+            this.records = rec;
+            if (this.records>(this.start+this.step)){
+                this._next1.setAttribute('enabled',true);
+            } else {
+                this._next1.setAttribute('enabled',false);
+            }
+            if (this.start>0){
+                this._pre2.setAttribute('enabled',true);
+            } else {
+                this._pre2.setAttribute('enabled',false);
+            }
+            this._records.setAttribute('text',this.start + ' - ' +(this.start+this.step) + ' ' + canvas.getLabelName(272) + ' ' + this.records);
+		]]>
+	</method>
+	
+	<method name="addHeaderItem" args="labelid,width" >
+		new lz.turnOverListHeaderItem(this._innerlisthead._inn,{labelid:labelid,width:width,subviewsid:this._innerlisthead._inn.subviews.length});
+	</method>
+	
+	<method name="addHeaderItemOrdered" args="labelid,width,orderBy,asc,isSelected" >
+        new lz.turnOverListHeaderItemOrdered(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                orderBy:orderBy,asc:asc,isSelected:isSelected,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method> 
+    
+    <method name="updateOrder" args="itemRef">
+        <![CDATA[
+            //only do that if the previous orderBy != new orderby
+            //if (this.currentSelectedOrder == null || 
+            //        this.currentSelectedOrder.orderBy != itemRef.orderBy){
+            if (itemRef.isSelected) {
+                itemRef.asc = !itemRef.asc;
+            } else {
+                itemRef.isSelected = true;
+            }
+            if (itemRef.asc) {
+                itemRef._sortUp.setAttribute('visibility','hidden');
+                itemRef._sortDown.setAttribute('visibility','visible');
+            } else {
+                itemRef._sortUp.setAttribute('visibility','visible');
+                itemRef._sortDown.setAttribute('visibility','hidden'); 
+            }
+            
+            //do not perform search on initial Selection
+            var isInitSelect = false;
+            if (this.currentSelectedOrder != null) {
+                if (this.currentSelectedOrder.orderBy != itemRef.orderBy) {
+                    this.currentSelectedOrder.isSelected = false;
+                    this.currentSelectedOrder._sortUp.setAttribute('visibility','hidden');
+                    this.currentSelectedOrder._sortDown.setAttribute('visibility','hidden'); 
+                }
+            } else {
+                isInitSelect = true;
+            }
+            this.currentSelectedOrder = itemRef;
+            
+            if ($debug) Debug.write("updateOrder: ",itemRef,itemRef.orderBy,itemRef.asc,isInitSelect);
+            this.setAttribute('orderby',itemRef.orderBy);
+            this.setAttribute('asc',itemRef.asc);
+            
+            if (!isInitSelect){
+                this.onUpdateOrder.sendEvent(itemRef);
+            }
+            //}
+        ]]>
+    </method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+	
+	<method name="sendWidthUpdate" args="w,subviewsid" >
+		<![CDATA[
+		////Debug.write(w,subviewsid,this._innerlist._inn);
+		for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+			this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w);
+		}
+		]]>
+	</method>
+	
+	<method name="clearList">
+		this._selected = null;
+		this._innerlist._inn._inn.destroy();
+		new lz.innerList(this._innerlist._inn,{name:'_inn'});
+	</method>
+    
+
+
+	<!-- =========  Control area  =========-->
+
+    <labelText name="_records" x="2" resize="true" />
+    
+    <!-- 368:goto first -->
+    <blueButton name="_pre1" y="0" x="$once{ parent.width-188 }" resourceItem="step_back_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+					width_insetResource="16" height_insetResource="16" >
+        <handler name="onclick">
+            parent.callfirst();
+        </handler>
+        <labelTooltip labelid="368" />
+    </blueButton>
+
+    <!-- 369:goto previous -->
+    <blueButton name="_pre2" y="0" x="$once{ parent.width-166 }" resourceItem="step_back_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+					width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.callpre();
+        </handler>
+        <labelTooltip labelid="369" />
+    </blueButton>
+
+    <!-- combobox to decide the step number -->
+    <resetCombobox name="languages" width="96" x="$once{ parent.width-144 }" 
+			  editable="false" height="20" >
+		<attribute name="sendEventToReload" value="false" type="boolean" />
+        <textlistitem value="10" text="10" />
+        <textlistitem value="25" text="25" />
+        <textlistitem value="50" text="50" />
+        <textlistitem value="75" text="75" />
+        <textlistitem value="100" text="100" />
+        <textlistitem value="200" text="200" />
+        <handler name="onselect">
+        	if (this.sendEventToReload){ 
+        		parent.setAttribute('step',Number(this.getValue()));
+        	}
+        </handler>
+        <handler name="oninit">
+        	this.selectItem(String(parent.step));
+        	this.sendEventToReload = true;
+        </handler>
+	</resetCombobox>
+	
+	<!-- 370:goto next -->
+	<blueButton name="_next1" y="0" x="$once{ parent.width-44 }" resourceItem="step_fwd_arrow" 
+                x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.callnext();
+        </handler>
+        <labelTooltip labelid="370" />
+    </blueButton>
+
+    <!-- 371:goto last -->
+    <blueButton name="_next2" y="0" x="$once{ parent.width-21 }" resourceItem="step_fwd_two_arrow" 
+				x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.calllast();
+        </handler>
+        <labelTooltip labelid="371" />
+    </blueButton>
+	
+    <!-- =========  BgArea area  =========-->
+    <view width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+          height="${ parent.height-20 }" x="0" y="20">
+        <view width="$once{ parent.width-2 }" bgcolor="$once{ parent.parent.mainBgColor }"
+          height="${ parent.height-2 }" x="1" y="1"></view>
+    </view>
+          
+	<!-- =========  List Header area  =========-->
+
+	<view name="_innerlisthead" height="20" x="1" width="$once{ parent.width-2 }" 
+		 y="22" clip="true">
+		<view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+	</view>	
+	
+	<!-- =========  List Contents area  =========-->
+	<view name="_innerlist" height="${ parent.height-43 }" x="1" width="$once{ parent.width-2 }"
+		y="42" clip="true" bgcolor="$once{ parent.mainBgColor }">
+		<view name="_inn" >
+			<innerList name="_inn" />
+		</view>
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx b/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx
new file mode 100644
index 0000000..a349f4e
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="turnOverListHeaderItem" extends="simpleLabelButton" clip="true" fontstyle="plain">
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+	<view height="$once{ parent.height-2 }" width="5" align="right"
+		cursor="width_gripper_rsc" 
+		onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+		
+	<handler name="onwidth" args="w">
+		this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+	</handler>
+	<resizestate name="rs" height="20" />
+</class>
+
+<class name="turnOverListHeaderItemSimple" extends="simpleLabelButton" fontstyle="plain">
+	<attribute name="asc" value="false" type="boolean" />
+	<attribute name="pathOrder" value="" type="string" />
+	<handler name="onclick">
+		if (parent.preButton!=null){
+			parent.preButton._asc.setAttribute('visibility','hidden');
+			parent.preButton._desc.setAttribute('visibility','hidden');
+		}
+		if (!this.asc){
+			this._asc.setAttribute('visibility','hidden');
+			this._desc.setAttribute('visibility','visible');
+		} else {
+			this._asc.setAttribute('visibility','visible');
+			this._desc.setAttribute('visibility','hidden');		
+		}
+		parent.preButton = this;
+		parent.setNewSortOrder(this.pathOrder,this);
+	</handler>
+	<view name="_asc" x="$once{ parent.width-20 }" 
+		  visibility="hidden" resource="sort_asc_turnover_rsc" />
+	<view name="_desc" x="$once{ parent.width-20 }" 
+		  visibility="hidden" resource="sort_desc_turnover_rsc" />
+</class>
+
+<class name="basicturnoverlistheaderitem" fontsize="9"
+       extends="simpleLabelButton" clip="true">
+	
+</class>
+
+<class name="turnoverlistheaderitem" extends="basicturnoverlistheaderitem" >
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+	<handler name="onwidth" args="w">
+		this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+	</handler>
+
+</class>
+
+<class name="turnoverlistheaderitemIcon" extends="basicturnoverlistheaderitem" >
+
+    <attribute name="subviewsid" value="0" type="number" />
+    <attribute name="toolTipLabelId" value="0" type="number" />
+    <attribute name="iconResource" value="" type="string" />
+
+    <handler name="onwidth" args="w">
+        this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+    </handler>
+    
+    <handler name="onclick" >
+        this.parent.parent.parent.sendHeaderClick.sendEvent(this);
+    </handler>
+    
+    <view align="center" valign="middle" 
+          resource="$once{ parent.iconResource }" />
+    
+    <labelTooltip labelid="$once{ parent.toolTipLabelId }" />
+    
+</class>
+
+<class name="turnoverlistheaderitemResize" extends="basicturnoverlistheaderitem" >
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+    <attribute name="minwidth" value="2" type="number" />
+    <attribute name="minheight" value="10" type="number" />
+    
+	<view height="$once{ parent.height }" width="4" align="right" bgcolor="black"
+		cursor="width_gripper_rsc" opacity="0.01"
+		onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+
+	<handler name="onwidth" args="w">
+        //////if ($debug) //Debug.write("onwidth: ",w);
+		this.parent.parent.parent.sendWidthUpdate(w-1,this.subviewsid);
+	</handler>
+
+	<resizestatemin name="rs" height="20" />
+
+</class>
+
+<class name="turnoverlistheaderitemResizeWizzardRefresh" extends="basicturnoverlistheaderitem" >
+
+    <attribute name="subviewsid" value="0" type="number" />
+
+    <attribute name="minwidth" value="2" type="number" />
+    <attribute name="minheight" value="10" type="number" />
+    
+    <view height="$once{ parent.height }" width="4" align="right" bgcolor="black"
+        cursor="width_gripper_rsc" opacity="0.01"
+        onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+
+    <handler name="onwidth" args="w">
+        //////if ($debug) //Debug.write("onwidth: ",w);
+        this.parent.parent.parent.sendWidthUpdate(w-1,this.subviewsid);
+    </handler>
+    
+    <view name="refresh_geomComp" resource="refresh_geomComp" y="1" x="${ parent.width - 19 }"
+        onmouseover="" onmouseout="">
+        <handler name="onclick">
+           this.parent.parent.parent.parent.parent.updateGeomByValue();
+        </handler>
+        <labelTooltip labelid="62" />
+    </view>   
+
+    <resizestatemin name="rs" height="20" />
+
+</class>
+
+
+
+<class name="turnOverListHeaderItemOrdered" extends="turnoverlistheaderitemResize">
+
+    <attribute name="orderBy" value="" type="string" />
+    <attribute name="asc" value="true" type="boolean" />
+    <attribute name="isSelected" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        if (this.isSelected) {
+            parent.parent.parent.updateOrder(this);
+        }
+    </handler>
+    
+    <handler name="onclick">
+        parent.parent.parent.updateOrder(this);
+    </handler>
+    
+    <image name="_sortUp" visibility="hidden" stretches="both" width="8" height="8" y="6"
+        x="${parent.width - 13 }" src="$once{ canvas.getThemeImage('sort_up_rsc') }" />
+    <image name="_sortDown" visibility="hidden" stretches="both" width="8" height="8" y="6"
+        x="${parent.width - 13 }" src="$once{ canvas.getThemeImage('sort_down_rsc') }" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx b/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx
new file mode 100644
index 0000000..c758163
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="turnOverTextItem" extends="text" fontsize="11" resize="false">
+	<view height="$once{ parent.parent.height }" width="1" 
+        align="right" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+</class>
+        
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx b/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx
new file mode 100644
index 0000000..2d8b24b
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePagingListItem" extends="baseContentListItem" height="20"> 
+
+	<attribute name="itemId" value="0" type="number" />
+    
+</class>
+
+
+<class name="comoboxListItemNoHeaders" extends="basePagingListItem" >
+    
+    <attribute name="text" value="" type="string" />
+    
+    <text width="100" height="20" resize="false" fontsize="10"
+          text="${ parent.text }" />
+          
+    <labelTooltip text="${ parent.text }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/library.lzx b/WebContent/src/base/components/turnoverlistpaged/library.lzx
new file mode 100644
index 0000000..90f5920
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="basePagingListItem.lzx" />
+    <include href="listPagedContent.lzx" />
+	<include href="turnOverListPaged.lzx" />
+    <include href="turnOverListOrderedPaged.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx b/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx
new file mode 100644
index 0000000..dbafcb4
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- common TurnOverList view class. -->
+<class name="listPagedContent" extends="view" clip="true" >
+	
+	<attribute name="itemHeight" value="20" type="number"/>
+    
+    <attribute name="showHScrollbar" value="visible" type="string"/>
+    
+    <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName"> 
+        this._inn.initItemsBySubItemNo(itemName,noSubItems,subItemClassName);
+    </method>    
+	
+    <view name="_inn" >
+        
+        <!-- calculates the additional items -->
+        <attribute name="itemsToShow" value="0" type="number" />
+        <attribute name="totalItemsInList" value="0" type="number" />
+        
+        <attribute name="currentLastItemInList" value="0" type="number" />
+        
+        <attribute name="itemHeight" value="$once{ parent.itemHeight }" type="number"/>
+        
+		<method name="initItems" args="itemName">
+	        <![CDATA[
+	            this.totalItemsInList = Math.round(parent.height/this.itemHeight);
+	            for (var i=0;i<this.totalItemsInList;i++){
+	                this.currentLastItemInList = i;
+	                new lz[itemName](this._inn,{y:i*this.itemHeight,itemId:i,clickable:false});
+	            }
+                
+                if ($debug) Debug.write("initItems -1- ",i,itemName,lz[itemName]);
+                if ($debug) Debug.write("initItems -2- ",this._inn.subviews.length);
+                if ($debug) Debug.write("initItems -3- ",totalItemsInList);
+                if ($debug) Debug.write("initItems -4- ",parent.height);
+                if ($debug) Debug.write("initItems -5- ",this.itemHeight);
+                
+                //canvas.currentDebugPageList = this;
+                
+	        ]]>
+	    </method>	
+	    
+	    <handler name="ony" args="y">
+	    	parent.parent.onMoveList.sendEvent(y);
+	    </handler> 
+        
+        <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName">
+           <![CDATA[
+                this.totalItemsInList = Math.round(parent.height/this.itemHeight);
+                for (var i=0;i<this.totalItemsInList;i++){
+                    this.currentLastItemInList = i;
+                    var baseItem = new lz[itemName](this._inn,{y:i*this.itemHeight,itemId:i,clickable:false});
+                    
+                    for (var k=0;k<noSubItems;k++) {
+                        new lz[subItemClassName](baseItem);
+                    }
+                    
+                }
+            ]]>
+        </method>      
+        
+        <method name="resetItems">
+            <![CDATA[
+                for (var i=0;i<this._inn.subviews.length;i++) {
+                    this._inn.subviews[i].itemId = i;
+                    this.currentLastItemInList = i;
+                    this._inn.subviews[i].setAttribute("y",i*this.itemHeight);
+                }
+            ]]>
+        </method>
+        
+        <handler name="ony" args="y">
+            <![CDATA[
+                //if ($debug) Debug.write("ony ",y);
+                var items = Math.round(y/this.itemHeight);
+                //if ($debug) Debug.write("items ",items);
+                if (this.itemsToShow != items) {
+                    var deltaItem = itemsToShow - items;
+                    
+                    //if ($debug) Debug.write("deltaItem ",deltaItem);
+                    
+                    if (deltaItem > 0) {
+                        //Add new Items to the end
+                        for (var i=0;i<deltaItem;i++) {
+                            var item = this._inn.getUpmostItemInList();
+                            this.shiftToLast(item);
+                        }
+                    } else {
+                        //Add new Items to the beginning
+                        for (var i=0;i>deltaItem;i--) {
+                            var item = this._inn.getLastItemInList();
+                            this.shiftToFirst(item);
+                        }
+                    }
+                    
+                    this.itemsToShow = items;
+                }
+            ]]>
+        </handler>
+        
+        <method name="shiftToLast" args="item">
+            <![CDATA[
+                parent.parent.onNextScrollItem.sendEvent(item);
+                //if ($debug) Debug.write("shiftToLast ",item,item.itemId);
+                this.currentLastItemInList++;
+                item.setAttribute("y",this.currentLastItemInList*this.itemHeight);
+                //if ($debug) Debug.write("shiftToLast -1- ",item.y,this.currentLastItemInList);
+                //if ($debug) Debug.write("++ shiftToLast 4 ",item.y,this.currentLastItemInList);
+                item.itemId = this.currentLastItemInList;
+                parent.parent.onScrollItem.sendEvent(item);
+            ]]>
+        </method>
+        
+        <method name="shiftToFirst" args="item">
+            <![CDATA[
+                parent.parent.onNextScrollItem.sendEvent(item);
+                //if ($debug) Debug.write("shiftToFirst 1 ",item.itemId);
+                //if ($debug) Debug.write("shiftToFirst 2 ",item.y);
+                var newItem = this.currentLastItemInList-this.totalItemsInList;
+                //if ($debug) Debug.write("shiftToFirst 3 ",newItem);
+                item.setAttribute("y",newItem*this.itemHeight);
+                //if ($debug) Debug.write("-- shiftToFirst 4 ",item.y,newItem,this.currentLastItemInList);
+                item.itemId = newItem;
+                //if ($debug) Debug.write("shiftToFirst 5 ",item.itemId);
+                this.currentLastItemInList--;
+                parent.parent.onScrollItem.sendEvent(item);
+            ]]>
+        </method>
+            
+        <innerListPagingContent name="_inn" />
+        
+    </view>
+    <om_vscrollbar name="_scrollbar" stepsize="$once{ parent.itemHeight }" />
+    
+    
+    <om_hscrollbar visibility="$once{ parent.showHScrollbar }" />
+
+</class>
+
+<class name="innerListPagingContent" extends="view">
+    
+    <method name="getItemByPosition" args="yPos">
+        <![CDATA[
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].y == yPos){
+                    return this.subviews[i];
+                }
+            }
+        ]]>
+    </method>
+    
+    <method name="getUpmostItemInList">
+        <![CDATA[
+            var item = this.subviews[0];
+            
+            //if ($debug) Debug.write("getUpmostItemInList ",this.subviews.length);
+            
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].itemId < item.itemId){
+                    item = this.subviews[i];
+                    //break;
+                }
+            }
+            
+            //if ($debug) Debug.write("getUpmostItemInList ",item);
+            
+            return item;
+        ]]>
+    </method>
+    
+    <method name="getLastItemInList">
+        <![CDATA[
+            var item = this.subviews[0];
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].itemId > item.itemId){
+                    item = this.subviews[i];
+                    //break;
+                }
+            }
+            return item;
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx b/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx
new file mode 100644
index 0000000..d4db2a6
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+
+
+<!--- common TurnOverList view class. -->
+<class name="turnOverListOrderedPaged" extends="turnOverListPaged">
+    
+    <attribute name="currentSelectedOrder" value="null" />
+    
+    <event name="onUpdateOrder" />
+    
+    <method name="updateOrder" args="itemRef">
+        <![CDATA[
+	        //only do that if the previous orderBy != new orderby
+	        //if (this.currentSelectedOrder == null || 
+            //        this.currentSelectedOrder.orderBy != itemRef.orderBy){
+	        if (itemRef.isSelected) {
+	            itemRef.asc = !itemRef.asc;
+	        } else {
+	            itemRef.isSelected = true;
+	        }
+	        if (itemRef.asc) {
+	            itemRef._sortUp.setAttribute('visibility','hidden');
+	            itemRef._sortDown.setAttribute('visibility','visible');
+	        } else {
+	            itemRef._sortUp.setAttribute('visibility','visible');
+	            itemRef._sortDown.setAttribute('visibility','hidden'); 
+	        }
+	        
+	        //do not perform search on initial Selection
+	        var isInitSelect = false;
+	        if (this.currentSelectedOrder != null) {
+                if (this.currentSelectedOrder.orderBy != itemRef.orderBy) {
+		            this.currentSelectedOrder.isSelected = false;
+		            this.currentSelectedOrder._sortUp.setAttribute('visibility','hidden');
+		            this.currentSelectedOrder._sortDown.setAttribute('visibility','hidden'); 
+                }
+	        } else {
+	            isInitSelect = true;
+	        }
+	        this.currentSelectedOrder = itemRef;
+	        
+	        if ($debug) Debug.write("updateOrder: ",itemRef,itemRef.orderBy,itemRef.asc,isInitSelect);
+	        this.setAttribute('orderby',itemRef.orderBy);
+	        this.setAttribute('asc',itemRef.asc);
+	        
+	        if (!isInitSelect){
+            	this.onUpdateOrder.sendEvent(itemRef);
+            }
+	        //}
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx b/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx
new file mode 100644
index 0000000..b10550d
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseturnOverListPaged" extends="view">
+	
+	<attribute name="start" value="0" type="number" />
+    <attribute name="step" value="100" type="number" />
+    <attribute name="orderby" value="firstname" type="string" />
+    <attribute name="asc" value="true" type="boolean" />
+    <attribute name="records" value="0" type="number" />
+    
+    <attribute name="renderList" value="null"/>
+    
+    <attribute name="_selected" value="null" />
+    
+    <attribute name="_selectedRefObj" value="null" />
+    
+    <attribute name="multiselect" value="true" type="boolean" />
+    <attribute name="selected" value="null" />
+    
+    <attribute name="showTopBar" value="true" type="boolean" />
+    
+    <event name="oncallnext" />
+    <event name="oncallpre" />
+    
+    <!--- @keywords private -->
+    <event name="onload" />
+    
+    <event name="rerender" />
+    
+    <event name="onMoveList" />
+    
+    <event name="onScrollItem" />
+    <event name="onNextScrollItem" />
+    
+    <attribute name="listItemName" value="basePagingListItem" type="string" />
+    
+    <attribute name="itemHeight" value="20" type="number"/>
+    
+    <attribute name="menuBarXIndent" value="0" type="number"/>
+    
+    <attribute name="headerHeight" value="20" type="number" />
+    
+    <attribute name="listLabelId" value="0" type="number" />
+    
+    <attribute name="showHScrollbar" value="visible" type="string"/>
+     
+    <handler name="oninit">
+    	<![CDATA[
+            //this inits the items
+            this._innerlist._inn.initItems(this.listItemName);
+            
+            if (this["_menu"] && this["_menu"]["_pre1"]) {
+                this._menu._pre1.setAttribute('isEnabled',false);
+                this._menu._next2.setAttribute('isEnabled',false);
+                this._menu._next1.setAttribute('isEnabled',false);
+                this._menu._pre2.setAttribute('isEnabled',false);
+            }
+        ]]>
+    </handler>  
+    
+    <handler name="onclickedItem" args="obj" >
+        <![CDATA[
+            this.addToSelection(obj,false); 
+        ]]>
+    </handler>
+    
+    <method name="selectAll">
+        <![CDATA[
+        
+            if (!this.multiselect){
+                if ($debug) Debug.warn("Cannot selectAll when multiselect is FALSE");
+                return;
+            }
+            
+            this._selectedRefObj = new Array();
+            this._selected = new Array();
+            
+            for (var i=0;i<this.renderList.length;i++) {
+            	this.renderList[i].itemSelected = true;
+                this.renderList[i].isselected = true;
+                this._selectedRefObj.push(i);
+            }
+            
+            if ($debug) Debug.write("this._selectedRefObj LENGTH ",this._selectedRefObj.length);
+        
+            for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            	if (this._innerlist._inn._inn.subviews[i].clickable) {
+	            	this._innerlist._inn._inn.subviews[i].setAttribute("itemSelected",true);
+		            this._innerlist._inn._inn.subviews[i].isselected = true;
+	                this._innerlist._inn._inn.subviews[i].onmouseout.sendEvent();
+	                this._selected.push(this._innerlist._inn._inn.subviews[i]);
+            	}
+	        }
+        
+        ]]>
+    </method>
+    
+    <method name="deleteSelected">
+        <![CDATA[
+        
+	        function sortTablePoints(a,b){
+	            var a1 = a;
+	            var b1 = b;
+	            //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+	            if(a1==b1){
+	                return 0;
+	            } else if(a1>b1){
+	                return 1;
+	            } else {
+	                return -1;
+	            }
+	        }
+            
+            this._selectedRefObj.sort(sortTablePoints);
+            
+            if ($debug) Debug.write("deleteSelected",this._selectedRefObj);
+            
+            if ($debug) Debug.write("-1- this.renderList ",this.renderList.length);
+        
+            for (var i=0;i<this._selectedRefObj.length;i++) {
+                this.renderList.splice(this._selectedRefObj[i],1);
+            }
+            
+            if ($debug) Debug.write("-2- this.renderList ",this.renderList.length);
+            
+            this.deselectAll();
+            
+            this.rerender.sendEvent(this);
+        ]]>
+    </method>
+    
+    <method name="deselectAll">
+        <![CDATA[
+        
+            if (!this.multiselect){
+                if ($debug) Debug.warn("Cannot deselectAll when multiselect is FALSE");
+                return;
+            }
+        
+            this._selectedRefObj = new Array();
+            this._selected = new Array();
+            
+            for (var i=0;i<this.renderList.length;i++) {
+            	this.renderList[i].itemSelected = false;
+                this.renderList[i].isselected = false;
+            }
+            
+            for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            	this._innerlist._inn._inn.subviews[i].setAttribute("itemSelected",false);
+                this._innerlist._inn._inn.subviews[i].isselected = false;
+                this._innerlist._inn._inn.subviews[i].onmouseout.sendEvent();
+            }
+        
+        ]]>
+    </method>    
+    
+    <method name="addToSelection" args="obj,forceMultiAdd">
+        <![CDATA[
+        
+            if (this._selected!=null ||this._selectedRefObj!=null){
+                if (this.multiselect){
+                    if (lz.Keys.downKeysArray.length==0 || 
+                        (lz.Keys.downKeysArray[0]!=17 && lz.Keys.downKeysArray[0]!=16)){
+                        if (!forceMultiAdd) {
+
+                            if ($debug) Debug.write("onclickedItem Deselect ALL -1- ",this._selected.length);    
+                            if ($debug) Debug.write("onclickedItem Deselect ALL -2- ",this._selectedRefObj.length);    
+                            
+                            for (var i=0;i<this._selected.length;i++){
+                            	this._selected[i].setAttribute("itemSelected",false);
+                                this._selected[i].isselected = false;
+                                this._selected[i].doDeselect();
+                            }
+                            
+                            for (var i=0;i<this._selectedRefObj.length;i++){
+                                if ($debug) Debug.write("DESELECT ITEM ID ",this._selectedRefObj[i]);
+                                this.renderList[this._selectedRefObj[i]].itemSelected = false;
+                                this.renderList[this._selectedRefObj[i]].isselected = false;
+                            }
+                            
+                        }
+                    } else {
+                        //////if ($debug) //Debug.write("onclickedItem Key Hold IT");
+                        for (var i=0;i<this._selected.length;i++){
+                            if (this._selected[i] == obj) {
+                                //////if ($debug) //Debug.write("Found Object: ",obj);
+                                obj.isselected = false;
+                                if ($debug) Debug.write("DESELECT ITEM ID 2 ",this._selectedRefObj[i]);
+                                this.renderList[this._selectedRefObj[i]].isselected = false;
+                                ////if ($debug) //Debug.write("send onmouseout TO: ",obj);
+                                obj.doDeselect();
+                                this._selected.splice(i,1);
+                                this._selectedRefObj.splice(i,1);
+                                return;
+                            }
+                        }
+                    }
+                } else {
+                    this.renderList[this._selected.itemId].isselected = false;
+                    this._selected.isselected = false;
+                    this._selected.doDeselect();
+                }
+            }
+
+            //////if ($debug) //Debug.write("onclickedItem Set IT");
+            if ($debug) Debug.write("SELECT ITEM ID ",obj.itemId);
+            this.renderList[obj.itemId].isselected = true;
+            obj.isselected = true;
+            obj.onmouseout.sendEvent();
+            if (this.multiselect){
+                if (this._selected==null){
+                    this._selected = new Array();
+                    this._selectedRefObj = new Array();
+                }
+                if ((lz.Keys.downKeysArray.length==1 && 
+                    (lz.Keys.downKeysArray[0]==17 || lz.Keys.downKeysArray[0]==16))
+                    || forceMultiAdd){
+                    this._selected.push(obj);
+                    this._selectedRefObj.push(obj.itemId);
+                } else {
+                    this._selected = new Array();
+                    this._selectedRefObj = new Array();
+                    this._selected.push(obj);
+                    this._selectedRefObj.push(obj.itemId);
+                }
+            } else {
+                this._selected = obj;
+            }
+            
+        ]]>
+    </method>    
+    
+    <!--
+    <handler name="onclickedItem" args="obj" >
+        if (this.selected != null) {
+            this.selected.deselect();
+        }
+        this.selected = obj;
+        this.selected.select();
+    </handler>
+     -->
+    
+    <method name="callfirst">
+        this.start = 0;
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="reload">
+    	this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="calllast">
+    	var newMaxPages = Math.floor(this.records/this.step);
+    	if ($debug) Debug.write("calllast 1 ",newMaxPages);
+        this.start = newMaxPages*this.step;
+        if ($debug) Debug.write("calllast 2 ",this.start);
+        if (this.start == this.records) {
+        	this.start = this.records-this.step;
+        }
+        if ($debug) Debug.write("calllast 3 ",this.start);
+        if ($debug) Debug.write("calllast 4 ",this.records);
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+        
+        //this.start = this.records-this.step;
+        //this.oncallnext.sendEvent();
+        //this.onload.sendEvent();
+    </method>
+    
+    <method name="callnext">
+        if (this.records>(this.start+this.step)){
+            this.start+=this.step;
+        }
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="callpre">
+        if (this.start>0){
+            this.start-=this.step;
+        }
+        this.oncallpre.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="initValues" args="rec">
+        <![CDATA[
+            this.records = rec;
+            
+            if (this.start == 0) {
+                this._menu._pre1.setAttribute('isEnabled',false);
+            } else {
+                this._menu._pre1.setAttribute('isEnabled',true);
+            }
+            
+            if ((this.start+this.step) >= this.records) {
+                this._menu._next2.setAttribute('isEnabled',false);
+            } else {
+                this._menu._next2.setAttribute('isEnabled',true);
+            }
+            
+            if (this.records>(this.start+this.step)){
+                if (this["_menu"]) this._menu._next1.setAttribute('isEnabled',true);
+            } else {
+                if (this["_menu"]) this._menu._next1.setAttribute('isEnabled',false);
+            }
+            if (this.start>0){
+                if (this["_menu"]) this._menu._pre2.setAttribute('isEnabled',true);
+            } else {
+                if (this["_menu"]) this._menu._pre2.setAttribute('isEnabled',false);
+            }
+            
+            if (this.showTopBar) {
+                
+                var maxRecord = this.start+this.step;
+                if ((this.start+this.step) > this.records) {
+                    maxRecord = this.records;
+                }
+                
+                this._records.setAttribute("text",(this.start+1) + ' - ' + maxRecord + ' von ' + this.records);
+                
+            } else {
+                
+                this._records.setAttribute("text",rec);
+            }
+        ]]>
+    </method>
+    
+    <method name="addHeaderItem" args="labelid,width" >
+        new lz.turnoverlistheaderitemResize(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method>
+    
+    <method name="clearHead">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].destroy();
+        }
+    </method>
+    
+    <method name="addHeaderItemByText" args="zText,width" >
+        new lz.turnoverlistheaderitemResize(this._innerlisthead._inn,{
+                text:zText,width:width,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method>
+    
+    <method name="addHeaderItemOrdered" args="labelid,width,orderBy,asc,isSelected" >
+    	if ($debug) Debug.write("turnOverListHeaderItemOrdered ",labelid,width,orderBy,asc,isSelected);
+        new lz.turnOverListHeaderItemOrdered(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                orderBy:orderBy,asc:asc,isSelected:isSelected,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method> 
+    
+    <method name="setSelectionOrder" args="orderBy,asc">
+    	<![CDATA[
+    		
+    		for (var i=0;i<this._innerlisthead._inn.subviews.length;i++) {
+    			
+    			if (this._innerlisthead._inn.subviews[i]["orderBy"] && 
+    					this._innerlisthead._inn.subviews[i].orderBy == orderBy) {
+    				
+    				if (this.currentSelectedOrder != null) {
+    					this.currentSelectedOrder.isSelected = false;
+    				}
+    				
+					this._innerlisthead._inn.subviews[i].isSelected = true;
+    				this._innerlisthead._inn.subviews[i].asc = !asc;
+    				
+    				this._innerlisthead._inn.subviews[i].onclick.sendEvent();
+    				
+    				return;
+    				
+    			}
+    			
+    		}
+    	
+    	]]>
+    </method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+    
+    <method name="sendWidthUpdate" args="w,subviewsid" >
+        <![CDATA[
+        ////Debug.write(w,subviewsid,this._innerlist._inn);
+        for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w+1);
+        }
+        ]]>
+    </method>
+    
+    <method name="getListItemNumber">
+        return this._innerlist._inn._inn.subviews.length;
+    </method>
+    
+    <method name="getItemByNumber" args="itemNo">
+        <![CDATA[
+	        if ($debug) Debug.write("getItemByNumber",itemNo);
+	        for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+                if ($debug) Debug.write("getItemByNumber :: ",this._innerlist._inn._inn.subviews[i].itemId);
+	            if (this._innerlist._inn._inn.subviews[i].itemId == itemNo) {
+                    return this._innerlist._inn._inn.subviews[i];
+                }
+	        }
+        ]]>
+        return this._innerlist._inn._inn.subviews[itemNo];
+    </method>
+    
+    <method name="clearList">
+        this._innerlist._inn._inn.destroy();
+        new lz.innerListPagingContent(this._innerlist._inn,{name:'_inn'});
+    </method>
+    
+    <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName">
+        this._innerlist.initItemsBySubItemNo(itemName,noSubItems,subItemClassName);
+    </method>
+
+    <labelText labelid="${ parent.listLabelId }" visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }"
+                       y="4" fontsize="10" x="2" />
+                       
+    <text fontsize="10" y="4" x="$once{ (!parent.showTopBar) ? 64+parent.menuBarXIndent : 2+parent.menuBarXIndent }"
+          name="_records" resize="true" visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }" />
+    
+    <!-- =========  List Header area  =========-->
+    <view name="_innerlisthead" height="${ parent.headerHeight }" width="${ parent.width }" y="$once{ parent.headerHeight + 2 }" clip="true">
+        <view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+    </view> 
+    
+    <!-- =========  List Contents area  =========-->   
+    <listPagedContent name="_innerlist" height="${ parent.height-22-parent.headerHeight }" bgcolor="0xFFFFFF"
+          width="${ parent.width }" y="$once{ parent.headerHeight + 22 }" showHScrollbar="$once{ parent.showHScrollbar }"
+          itemHeight="$once{ parent.itemHeight }" />
+</class>
+	
+<!--- common TurnOverList view class. -->
+<class name="turnOverListPaged" extends="baseturnOverListPaged">
+
+    <!-- =========  Control area  =========-->
+    <view name="_menu" align="right" y="2" width="180"
+          visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }">
+    	
+	    <!-- 368:goto first -->
+	    <blueButton name="_pre1" y="0" x="0" resourceItem="step_back_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callfirst();
+	        </handler>
+	        <labelTooltip labelid="368" />
+	    </blueButton>
+	
+	    <!-- 369:goto previous -->
+	    <blueButton name="_pre2" y="0" x="20" resourceItem="step_back_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callpre();
+	        </handler>
+	        <labelTooltip labelid="369" />
+	    </blueButton>
+    	<resetCombobox name="_step" width="100" x="40" editable="false" fontsize="10" height="20" >
+            <attribute name="sendEventToReload" value="false" type="boolean" />
+            <textlistitem value="10" text="10" />
+            <textlistitem value="25" text="25" />
+            <textlistitem value="50" text="50" />
+            <textlistitem value="75" text="75" />
+            <textlistitem value="100" text="100" />
+            <textlistitem value="200" text="200" />
+            <textlistitem value="500" text="500" />
+            <textlistitem value="1000" text="1000" />
+            <textlistitem value="2500" text="2500" />
+            <textlistitem value="5000" text="5000" />
+            <handler name="onselect">
+                if (this.sendEventToReload){ 
+                	parent.parent.start = 0;
+                    parent.parent.setAttribute('step',Number(this.getValue()));
+                    parent.parent.onload.sendEvent();
+                }
+            </handler>
+            <handler name="oninit">
+                this.selectItem(String(parent.parent.step));
+                this.sendEventToReload = true;
+            </handler>
+        </resetCombobox>
+        
+        <!-- 370:goto next -->
+        <blueButton name="_next1" y="0" x="140" resourceItem="step_fwd_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callnext();
+	        </handler>
+	        <labelTooltip labelid="370" />
+	    </blueButton>
+		
+	    <!-- 371:goto last -->
+	    <blueButton name="_next2" y="0" x="160" resourceItem="step_fwd_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.calllast();
+	        </handler>
+	        <labelTooltip labelid="371" />
+	    </blueButton>
+		
+		<view width="2" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/updatecheckbox.lzx b/WebContent/src/base/components/updatecheckbox.lzx
new file mode 100644
index 0000000..1259161
--- /dev/null
+++ b/WebContent/src/base/components/updatecheckbox.lzx
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="updatecheckbox" extends="checkbox" style="componentStyle">
+    <attribute name="tvalue" type="boolean" value="false"/>
+    <attribute name="sendchange" value="false" type="boolean" />       
+    <handler name="onblur">
+        if (this.parent.sendchange) this.parent.sendchange(this,tvalue,this.getValue()); 
+    </handler>  
+</class>
+
+<class name="labelCheckbox" extends="checkbox" style="componentStyle" fontsize="11" >
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/upload/fileUpload.lzx b/WebContent/src/base/components/upload/fileUpload.lzx
new file mode 100644
index 0000000..a43c464
--- /dev/null
+++ b/WebContent/src/base/components/upload/fileUpload.lzx
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ 	<class name="fileUpload">
+ 	
+ 		<!--  Show all Documents in FileBrowser -->
+ 		<attribute name="isOnlyImage" value="false" type="boolean" />
+ 		
+ 		<!-- Show only PowerPoint Presentations in FileBrowser -->
+ 		<attribute name="isOnlyPpt" value="false" type="boolean" />
+ 		
+ 		<!-- Show only XML Files in FileBrowser -->
+ 		<attribute name="isOnlyXml" value="false" type="boolean" />
+ 		
+ 		<!-- Show only ZIP Files in FileBrowser -->
+ 		<attribute name="isOnlyZip" value="false" type="boolean" />
+ 		
+ 		<!-- Show only Images Files in FileBrowser -->
+ 		<attribute name="isOnlyProfile" value="false" type="boolean" />
+        
+        <attribute name="fr" value="null" />
+ 		 		
+		<handler name="oninit" args="invoker">
+		<![CDATA[
+			this.fr = new flash.net.FileReference();	
+    		this.fr.onHTTPError = function(fr, httpError){
+                var t = _root;
+            	if ($debug) t.Debug.write('onHTTPError function: ' + httpError);
+            	new lz.errorPopup(canvas,{error:'Err2: '+httpError});
+			}
+			this.fr.onIOError = function(fr){
+				var t = _root;
+                if ($debug) t.Debug.write.write('onIOError function');
+				new lz.errorPopup(canvas,{error:'onIOError invoked '});
+			}
+			function callbackFunction ( e ) {
+				var t = _root;
+                if ($debug) t.Debug.write( e.data );
+			}		
+			this.fr.onSecurityError = function(fr, errorString){
+				var t = _root;
+                if ($debug) t.Debug.write('onSecurityError function: ' + errorString);
+            	new lz.errorPopup(canvas,{error:'Err2: '+errorString});
+			}
+			this.fr.addListener(invoker, callbackFunction);
+		]]>
+		</handler>
+
+		<method name="browse">
+		<![CDATA[	
+			var zipExt = "*.zip"
+				, profileExt = "*.psd;*.tiff;*.bmp;*.svg;*.dpx;*.exr;*.jpg;*.jpeg;*.gif;*.png"
+				, pptExt = "*.ppt;*.odp;"
+				, docExt = pptExt + ";*.txt;*.pptx;*.odt;*.wpd;*.doc;*.docx;*.rtf;*.ods;*.sxc;*.xls;*.xlsx;*.sxi;*.pdf"
+				, vidExt = "*.avi;*.mov;*.flv;*.mp4"
+				, imgExt = profileExt + ";*.tga;*.xcf;*.wpg;*.ico;*.ttf;*.pcd;*.pcds;*.ps"
+				, allExt = docExt + ";" + vidExt + ";" + imgExt;
+
+			if (this.isOnlyZip) {
+				
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "ZIP (*.zip)";
+				imageTypes.extension = zipExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+				
+			} else if(this.isOnlyProfile){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "Allowed Files (" + profileExt + ")";
+				imageTypes.extension = profileExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else if (this.isOnlyImage){
+				fr.browse([
+					{description: "Allowed Files", extension: allExt}
+					, {description: "Documents", extension: docExt}
+					, {description: "Videos", extension: vidExt}
+					, {description: "Pictures", extension: imgExt}
+				]);
+			} else if(this.isOnlyPpt){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "Powerpoint (" + pptExt + ")";
+				imageTypes.extension = pptExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else if(this.isOnlyXml){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "XML (*.xml)";
+				imageTypes.extension = "*.xml;";
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else {	
+				fr.browse();
+			}
+		]]>
+		</method>
+
+		<method name="getName"><![CDATA[
+			return this.fr.name;
+		]]>
+		</method>
+
+		<method name="upload" args="url"><![CDATA[
+			if ($debug) Debug.write("url: ",url,this.fr);
+			this.fr.upload(url);
+		]]>
+		</method>
+		
+    <method name="onCancel" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onCancel invoked');
+        ]]>
+    </method>
+    
+    <method name="onComplete" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onComplete invoked');
+            canvas.filedialogRef.progressBar.setValue(100);
+            //canvas.filedialogRef.upload.setAttribute('enabled', false);
+            if (canvas.filedialogRef.sendCompleted)canvas.filedialogRef.sendCompleted.sendEvent();
+        ]]>
+    </method>
+    
+    <method name="onHTTPError" args="fr, httpError">
+        <![CDATA[
+            if ($debug) Debug.write('onHTTPError invoked: ' + httpError);
+        ]]>
+    </method>
+    
+    <method name="onIOError" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onIOError invoked',fr);
+        ]]>
+    </method>
+    
+    <method name="onOpen" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onOpen invoked',fr);
+        ]]>
+    </method>
+    
+    <method name="onSecurityError" args="fr, errorString">
+        <![CDATA[
+            if ($debug) Debug.write('onSecurityError invoked: ' + errorString);
+        ]]>
+    </method>
+		
+ 	</class>
+ 	
+ </library>
diff --git a/WebContent/src/base/components/upload/library.lzx b/WebContent/src/base/components/upload/library.lzx
new file mode 100644
index 0000000..3a3f1e8
--- /dev/null
+++ b/WebContent/src/base/components/upload/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="fileUpload.lzx" />
+	<include href="uploadWindowExplorer.lzx" />
+	
+</library>
diff --git a/WebContent/src/base/components/upload/uploadWindowExplorer.lzx b/WebContent/src/base/components/upload/uploadWindowExplorer.lzx
new file mode 100644
index 0000000..f5e2f39
--- /dev/null
+++ b/WebContent/src/base/components/upload/uploadWindowExplorer.lzx
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ <class name="uploadWindowExplorer" extends="labelExplorerBox" labelid="304"
+    docking="true" closable="true" width="264" x="200" height="230">
+    
+    <handler name="oninit">
+    	lz.ModeManager.makeModal(this);
+        canvas.currentUploadWindow = this;
+        if (this.servletName != "file.upload") {
+        	this._loadToWhiteboard.destroy();
+        }
+    </handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <attribute name="winobj" value="null" />
+	<attribute name="sessionid" value="" type="string" />
+	<attribute name="isOwner" value="0" type="string" />
+	<attribute name="usersid" value="" type="string" />
+	<attribute name="singleslidesmodule_id" type="string" value="" />
+	<attribute name="fileExplorerRef" value="null" />
+	<attribute name="secondid" value="0" type="string" />
+	
+	<attribute name="servletName" value="upload.upload" type="string" />
+	<attribute name="parentFolderId" value="0" type="number" />
+    
+    <attribute name="uploadmodule" value="videoconf1" type="string" />
+    
+    <attribute name="isOnlyImage" value="false" type="boolean" />
+    <attribute name="isOnlyPpt" value="false" type="boolean" />
+    <attribute name="isOnlyProfile" value="false" type="boolean" />
+    <attribute name="isOnlyXml" value="false" type="boolean" />
+    <attribute name="isOnlyZip" value="false" type="boolean" />
+    
+    <attribute name="isdefaultreturn" value="true" type="boolean" />
+    <attribute name="returnObj" value="true" type="boolean" />
+    
+ 	<fileUpload name="myFileUpload" isOnlyImage="${ this.parent.isOnlyImage }" 
+ 		 isOnlyPpt="${ this.parent.isOnlyPpt }" isOnlyProfile="${ this.parent.isOnlyProfile }" 
+ 		 isOnlyXml="${ this.parent.isOnlyXml }" isOnlyZip="${ this.parent.isOnlyZip }">
+		<method name="onComplete" args="fr">
+            if ($debug) Debug.write("oncomplete ",fr);
+        </method>
+        <method name="formatURL" args="fileHash">
+            <![CDATA[
+                var uploadmoduleimgfolderVar = '/' + fileHash;
+                var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileHash + ".swf") +
+                    '&moduleName=' + 'videoconf1' + 
+                    '&parentPath=' + encodeURIComponent(uploadmoduleimgfolderVar + '/' )+
+                    '&room_id=files'+ 
+                    '&sid='+canvas.sessionId;
+                ////if ($debug) Debug.write("downloadurl: ",downloadurl);
+                return downloadurl;
+            ]]>
+        </method> 
+        
+        <method name="generateFileLink" args="fileHash">
+            <![CDATA[
+                return canvas.getUrl()+'DownloadHandler?' +
+                        'fileName='+ fileHash + 
+                        '&moduleName='+ "videoconf1" +
+                        '&parentPath='+ '/' +
+                        '&room_id=files' +
+                        '&sid='+canvas.sessionId;
+            ]]>
+        </method>
+    
+        <method name="onCompleteByRemote" args="tArrayValueObj">
+            
+            if ($debug) Debug.write("onCompleteByRemote ",tArrayValueObj);
+            this.parent.progressBar.setValue(100);
+            this.parent.upload.setAttribute('enabled', false);
+            this.parent.upload.setAttribute("visible",false);
+            this.parent.browse.setAttribute("visible",false);
+            this.parent.txtFile.setAttribute("visible",false);
+            
+            if (this.isOnlyZip) {
+            	this.parent.close();
+            	return;
+            }
+            
+            if (this.isOnlyXml) {
+            	parent.returnObj.sendRefresh();
+            	this.parent.close();
+            	return;
+            }
+            
+            if (this.isOnlyProfile) {
+            	parent.returnObj.sendRefresh();
+            	this.parent.close();
+            	return;
+            }
+            
+            if (parent._loadToWhiteboard.getValue()) {
+            	
+            	if ($debug) Debug.write(tArrayValueObj);
+            	if (tArrayValueObj.isPresentation) {
+            		var url = this.formatURL(tArrayValueObj.fileHash);
+            		
+            		var uploadmoduleimgfolderVar = '/' + tArrayValueObj.fileHash;
+            		
+            		if ($debug) Debug.write(url);
+            		
+                	canvas._drawarea.loadSWFPresentationSynced(url,tArrayValueObj.fileHash + ".swf",
+                              "videoconf1",uploadmoduleimgfolderVar,"files",hib.conferencedomain,1,
+                              tArrayValueObj.fileSystemName);
+            	} else if (tArrayValueObj.isImage) {
+            		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(tArrayValueObj.fileHash),0,0,
+                      canvas.getUrl() +'DownloadHandler',
+                      tArrayValueObj.fileHash,"videoconf1","/","files",hib.conferencedomain);
+            	}
+            }
+            
+            if (parent.isdefaultreturn) {
+            	
+                var tempSendArray = new Array ();
+                tempSendArray[0] = 'fileslist';
+                var nowTime = new Date();
+                var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+                tempSendArray[1] = datumsString;
+                //if ($debug) Debug.write("Setting Message");
+                tempSendArray[2] = 'newfile';
+                tempSendArray[3] = canvas.currentusename;
+                //if ($debug) Debug.write("send: ",tempSendArray);
+                canvas.objMessage = tempSendArray;
+                canvas.thishib.sendMessageAll.doCall();
+
+            } else {
+                parent.returnObj.sendRefresh();
+            }
+            
+            if (parent.fileExplorerRef != null) {
+            	parent.fileExplorerRef.onClose.sendEvent();
+            }
+            
+            parent.close();
+        </method>
+
+		<method name="onProgress" args="fr, bytesLoaded, bytesTotal">
+			<![CDATA[
+    			this.parent.progressBar.setValue(bytesLoaded * 100 / bytesTotal);
+    			if (Math.round(bytesLoaded * 100 / bytesTotal)==100){
+    				this.parent.progressBar.setAttribute('visibility','hidden');
+    				this.parent.progress2.startShowing();
+    			}
+    		]]>
+		</method>
+    
+	    <method name="onHTTPError" args="fr, httpError">
+	        <![CDATA[
+	            if ($debug) Debug.write('onHTTPError invoked: ' + httpError);
+	            new lz.errorPopup(canvas,{error:'HTTP-ERROR: '+httpError});
+	            this.parent.close();
+		  		var tempSendArray = new Array ();
+		  		tempSendArray[0] = 'fileslist';
+		  		var nowTime = new Date();
+		  		var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+		  		tempSendArray[1] = datumsString;
+	  			//if ($debug) Debug.write("Setting Message");
+	  			tempSendArray[2] = 'newfile';
+	  			tempSendArray[3] = canvas.currentusename;
+		  		//if ($debug) Debug.write("send: ",tempSendArray);
+		  		canvas.objMessage = tempSendArray;
+		  		hib.sendMessage.doCall();	            
+	        ]]>
+	    </method>
+    
+		<method name="onSelect" args="fr">
+			//if ($debug) Debug.write("onSelect: ",getName());
+			this.parent.txtFile.setAttribute('text',getName());
+			this.parent.upload.setAttribute('enabled', true);
+		</method>
+	</fileUpload>
+    
+    <labelText x="10" width="250" y="24" multiline="true" name="txtFileDescr" labelid="594" />
+	
+	<labelText x="10" fontsize="11" y="60" width="250" name="txtFile" multiline="true" 
+			   resize="false" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+
+	<simpleLabelButton fontsize="11" name="browse" x="10" y="100" labelid="596" width="250" height="20">
+		<handler name="onclick">
+			parent.myFileUpload.browse();
+		</handler>
+	</simpleLabelButton>
+
+    <!-- moduleName=videoconf1'; -->
+	<simpleLabelButton name="upload" x="10" y="120" labelid="593" width="250" enabled="false" height="20">
+		<handler name="onclick">
+			<![CDATA[
+			var uploadurl = canvas.getUrl() + parent.servletName +'?' +
+					'moduleName='+this.parent.uploadmodule +
+                    '&publicSID='+canvas.publicSID +
+                    '&filename='+encodeURIComponent(parent.txtFile.text) +
+                    '&parentFolderId='+parent.parentFolderId +
+					'&room_id='+hib.currentroomid +
+					'&secondid='+parent.secondid +
+					'&isOwner='+parent.isOwner + 
+					'&sid='+canvas.sessionId;
+            if ($debug) Debug.write("uploadurl: ",uploadurl);
+			parent.myFileUpload.upload(uploadurl);
+			this.setAttribute("enabled", false);
+			]]>
+		</handler>
+	</simpleLabelButton>
+    
+    <view name="progress2" x="10" y="158" width="250" visibility="hidden" height="10" bgcolor="#C6CEDF">
+        <attribute name="isStarted" value="false" type="boolean" />
+        <method name="startShowing">
+        	if (!this.isStarted) {
+        		this.isStarted = true;
+        		this.status._hide.setAttribute('started', true);
+        		this.setAttribute("visibility","visible");
+        	} else {
+        		return;
+        	}
+        </method>
+        <view x="1" y="1" width="248" height="8" bgcolor="#FFFFFF"/>
+        <view name="status" x="1" y="1" height="8" width="248" bgcolor="#D6DEEF">
+        	
+        	<animator name="_hide" attribute="opacity" to="0" from="1" duration="1000" started="false">
+        		<handler name="onstop">
+        			if (parent["_show"]) {
+        				parent._show.setAttribute('started', true);
+        			}
+        		</handler>
+        	</animator>
+        	<animator name="_show" attribute="opacity" to="1" from="0" duration="1000" started="false">
+                <handler name="onstop">
+                	if (parent["_show"]) {
+                    	parent._show.setAttribute('started', true);
+                    }
+                </handler>
+            </animator>
+        </view>
+        <labelText name="percent" align="center" resize="true" y="-18" fontstyle="bold" 
+            fontsize="10" fgcolor="#555555" labelid="592"/>
+    </view>
+    		   
+	<view name="progressBar" x="10" y="158" width="250" visibility="hidden" height="10" bgcolor="#C6CEDF">
+		<view x="1" y="1" width="248" height="8" bgcolor="#FFFFFF"/>
+		<view name="status" x="1" y="1" height="8" bgcolor="#D6DEEF"/>
+		<method name="setValue" args="value">
+			<![CDATA[
+                this.setAttribute("visible",true);
+                status.setAttribute('width', value * 248 / 100);
+                percent.setAttribute('text',Math.round(value) + '%');
+			]]>
+		</method>
+		<text name="percent" align="center" resize="true" y="-18" fontstyle="bold" 
+			fontsize="10" fgcolor="#555555" />
+	</view>
+	
+	<labelCheckbox name="_loadToWhiteboard" x="4" y="184" fontsize="11" 
+		labelid="1312" value="${ canvas.whiteboardCount &gt; 0 }" enabled="${ canvas.whiteboardCount &gt; 0 }" />
+	
+	<simpleLabelButton name="_close" x="100" y="204" labelid="595" width="160" height="20">
+		<handler name="onclick">
+			if ($debug) Debug.write("this.parent: ",this.parent);
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>
+</class>
+	
+</library>
+ 
diff --git a/WebContent/src/base/components/validbox/library.lzx b/WebContent/src/base/components/validbox/library.lzx
new file mode 100644
index 0000000..63a46b7
--- /dev/null
+++ b/WebContent/src/base/components/validbox/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="validText.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/validbox/validText.lzx b/WebContent/src/base/components/validbox/validText.lzx
new file mode 100644
index 0000000..0f5ffc2
--- /dev/null
+++ b/WebContent/src/base/components/validbox/validText.lzx
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!--- A editfieldText with the possibility of a dropdown menu -->
+
+    <class name="validText" extends="edittext">
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+        
+        <!--- the id-attribute of the resultset -->
+        <attribute name="resultId" value="id" type="string" />
+        <!--- the name-attribute of the resultset -->
+        <attribute name="resultName" value="name" type="string" />        
+					
+        <attribute name="initSelect" value="false" type="boolean" />
+					
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="500"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+        
+        <!--- items to be shown in the floatinglist -->
+        <attribute name="shownitems" value="7" type="number" />          
+        <attribute name="spacing" value="1" type="number" />  
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>   
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />      
+        
+        <attribute name="currentValue" type="string" value="" />
+        
+        <!--- refernce to the current selected item -->
+        <attribute name="_selected" value="null" />    
+        
+        <method name="addAndSelectItem" args="txt,id">
+            this.cblist.addItem(txt,id);
+            this.currentValue = id;
+            this.setAttribute('text',txt);
+        </method>    
+        
+        <method name="setSelection" args="obj">
+            this._selected = obj;
+            this.currentValue = obj.value;
+            this.setAttribute('text',obj.text);
+            this.setOpen(false,true);
+            this.onselect.sendEvent();
+        </method>    
+        
+        <event name="onselect" />
+        
+        <method name="getValue">
+            return this.currentValue;
+        </method>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+        <handler name="onkeydown" args="key">
+            <![CDATA[
+                //Debug.write("onkeydown: ",key);
+                // 38 is up-arrow
+                // 40 is down-arrow
+                // 32 is space
+                // 13 is return
+                if ((key==38) || (key==40)) {
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    // pass the key event on to the floatinglist
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key==27){
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key!=13 && key!=9){
+                    //Don't handle Enter and Tab Events cause it will open the listItems
+                    ////Debug.write("onkeydown txt: ",this.getText());
+                    if (!this.initSelect){
+                        ////Debug.write("onvalue: ",txt,this);
+                        if (!this.timerIsInited){
+                            this.timerIsInited = true;
+                            this.timerDelegate = new LzDelegate( this, "validatedText" );
+                            ////Debug.write("+++++++++++++++++ addTimer");
+                            //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                            lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                        } else {
+                            ////Debug.write("############### resetTimer NO ADDING ");
+                            //Debug.write("############### resetTimer ",lz.Timer.countTimers());
+                            lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+                        }
+                    } else {
+                        this.initSelect = false;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <method name="validatedText">
+            <![CDATA[
+                ////Debug.write("validatedText: ",this.getText());
+                //this.reset();
+                if (!this.initSelect){
+                    var t = this.validate_method(this.getText());
+                    ////Debug.write('t: ',t.length);
+                    //this.parent._cblist.setAttribute('visible',true);
+                    this.cblist.removeAllItems();
+                    for (var i=0;i<t.length;i++){
+                        ////Debug.write(t[i][this.resultName],t[i][this.resultId]);
+                        this.cblist.addItem(t[i][this.resultName],t[i][this.resultId]);
+                    }                
+
+                    ////Debug.write("validateText: ",this.getText());
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    }
+                    this.timerIsInited = false;
+                } else {
+                    this.initSelect=false;
+                    this.timerIsInited = false;
+                }
+            ]]>
+        </method>	
+        
+        <attribute name="isopen" value="false" type="boolean" setter="this.setOpen(isopen)" />
+        
+        <event name="onisopen" />
+        
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+                //lz.ModeManager.makeModal( this );
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+                //lz.Focus.setFocus(this.cblist, withkey);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                //lz.ModeManager.release( this );
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(this, withkey);
+                }
+            }
+        </method>           
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}" >
+
+            <handler name="onkeyup" args="kc">
+                //name="_dokeyup" 
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </handler>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>	
+            <handler name="onselect" args="obj">
+                ////Debug.write("obj: ",obj);
+                this.owner.setSelection(obj);
+            </handler>		
+        </floatinglist>
+
+    </class>
+	
+    
+</library>
diff --git a/WebContent/src/base/contentviews/baseContentSaveView.lzx b/WebContent/src/base/contentviews/baseContentSaveView.lzx
new file mode 100644
index 0000000..915c0a6
--- /dev/null
+++ b/WebContent/src/base/contentviews/baseContentSaveView.lzx
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseContentSaveView" extends="baseContentView">
+
+    <attribute name="observerViews" value="null" />
+	
+	<attribute name="saveIsVisible" value="true" type="boolean" />
+	<attribute name="addIsVisible" value="true" type="boolean" />
+	<attribute name="refreshIsVisible" value="true" type="boolean" />
+	<attribute name="deleteIsVisible" value="true" type="boolean" />
+	
+	<attribute name="confirmMessageLabelId" value="661" type="number" />
+    
+	<event name="onnew" />
+    <event name="ondelete" />
+    <handler name="onsavecompleted" >
+		this.hideNewRecordText();
+	</handler>
+    
+    <method name="hideNewRecordText">
+        this._newRecord.setAttribute('visibility','hidden');
+    </method>
+    
+	<event name="onreload" />
+
+    <view name="_savecontentbar" layout="axis:x;spacing:2;inset:2" x="2" height="28" width="$once{ parent.width }"
+        bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        
+        <state applied="$once{ parent.parent.saveIsVisible }">
+	        <baseChooseIcon resourceN="filesave_rsc" labelid="144" y="2" 
+	        	onclick="this.parent.parent.doSaveEvent()" />
+        </state>	
+        <state applied="$once{ parent.parent.addIsVisible }">
+        	<baseChooseIcon resourceN="edit_add_rsc" labelid="155" y="2" 
+        		onclick="this.parent.parent.doAddEvent()" />  
+        </state>
+        <state applied="$once{ parent.parent.refreshIsVisible }">
+	        <baseChooseIcon resourceN="reload_rsc" labelid="156" y="2" 
+	        	onclick="this.parent.parent.doReloadEvent()" />
+        </state> 
+        <state applied="$once{ parent.parent.deleteIsVisible }">    
+	        <baseChooseIcon resourceN="button_cancel_rsc" labelid="157" y="2" 
+	        	onclick="this.parent.parent.doDeleteEvent()"  />
+        </state>
+        
+		  
+		 	 	      	
+    </view>
+    
+    <labelText name="_newRecord" x="120"
+   						visibility="hidden" labelid="344" fgcolor="green" width="150" />     
+    
+    <method name="addViewToObserver" args="obj">
+    	if (this.observerViews==null) this.observerViews = new Array();
+        this.observerViews.push(obj);
+    </method>
+	
+	<method name="doAddEvent">
+		this._newRecord.setAttribute('visibility','visible');
+		this.onnew.sendEvent();
+	</method>
+    
+    <method name="doSaveEvent">
+    	if (this.observerViews.length!=0){
+        	new lz.contentSaveWindow(canvas.main_content._content.inner,{refObj:this,saveObj:this.observerViews});
+        }
+    </method>
+	
+	<method name="doReloadEvent">
+		this.onreload.sendEvent();
+	</method>
+    
+    <method name="doDeleteEvent">
+    	new lz.confirmDeleteWindow(canvas.main_content._content.inner,{
+    	                   refObj:this,
+    	                   messagelabelid:confirmMessageLabelId
+    	               });
+    </method> 
+    
+    <method name="confirmDelete">
+    	this.ondelete.sendEvent();
+    </method>
+
+    <event name="ontabcontentleave" />
+    
+    <method name="close">
+        this.ontabcontentleave.sendEvent();
+        this.destroy();
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/baseContentView.lzx b/WebContent/src/base/contentviews/baseContentView.lzx
new file mode 100644
index 0000000..167b5bb
--- /dev/null
+++ b/WebContent/src/base/contentviews/baseContentView.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseContentView" extends="view">
+
+    <!---
+        If destroyByMethod is true, the clear content call will not destroy the views, but the method 
+        ontabcontentleave is still invoked, this can be handy if some connections must be closed before 
+        destroying / leaving the module, you could probably also use it to confirm leaving the module 
+     -->
+    <attribute name="destroyByMethod" value="false" type="boolean" />
+    
+    <event name="ontabcontentleave" />
+    
+    <handler name="oninit">
+    	canvas.currentContentView = this;
+    </handler>
+    
+    <!--
+        This Event is for sending additional Init Events, for example after the reconnect
+        the File-List has to be refreshed for the File-Browser Plugin 
+     -->
+    <event name="sendInit" />
+    
+    <method name="close">
+        if ($debug) Debug.write("close: ",this,this.destroyByMethod);
+        //Make sure any cursor status is reset
+		lz.Cursor.restoreCursor();
+		lz.Cursor.showHandCursor(true);
+		//Make sure any tooltip is cleared
+		canvas.clearToolTip();
+        this.ontabcontentleave.sendEvent();
+        if (!this.destroyByMethod) this.destroy();
+        return this.destroyByMethod;
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/confirmDeleteWindow.lzx b/WebContent/src/base/contentviews/confirmDeleteWindow.lzx
new file mode 100644
index 0000000..bb090da
--- /dev/null
+++ b/WebContent/src/base/contentviews/confirmDeleteWindow.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="confirmDeleteWindow" extends="labelExplorerBox" labelid="152"
+    docking="true" width="264" x="450" y="20" height="200">
+    
+    <attribute name="refObj" value="null" />
+    <attribute name="messagelabelid" value="153" type="number" />
+    <attribute name="confirmlabelid" value="154" type="number" />
+    
+    <handler name="oninit">
+        lz.ModeManager.makeModal(this);
+    </handler>
+    
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+    
+    <labelText labelid="$once{ parent.messagelabelid }" y="22" x="4"
+    		   width="$once{ parent.width - 8 }" multiline="true"/>
+    
+    <simpleLabelButton labelid="$once{ parent.confirmlabelid }" width="100" x="40" y="170">
+        <handler name="onclick">
+            //Debug.write("confirm");
+            this.parent.refObj.confirmDelete();
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="153" width="100" x="150" y="170">
+        <handler name="onclick">
+            //Debug.write("cancel");
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/library.lzx b/WebContent/src/base/contentviews/library.lzx
new file mode 100644
index 0000000..4e6c9a1
--- /dev/null
+++ b/WebContent/src/base/contentviews/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="baseContentView.lzx" />
+    <include href="baseContentSaveView.lzx" />
+    <include href="confirmDeleteWindow.lzx" />
+
+</library>
diff --git a/WebContent/src/base/externalJavaScript.lzx b/WebContent/src/base/externalJavaScript.lzx
new file mode 100644
index 0000000..c19e3c5
--- /dev/null
+++ b/WebContent/src/base/externalJavaScript.lzx
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<script>
+<![CDATA[
+
+
+	flash.external.ExternalInterface.addCallback("redirectToUrlCallback", null, redirectToUrlCallback);
+	flash.external.ExternalInterface.addCallback("getTimeZoneOffsetCallback", null, getTimeZoneOffsetCallback);
+    flash.external.ExternalInterface.addCallback("getBrowserInfoCallback", null, getBrowserInfoCallback);
+    flash.external.ExternalInterface.addCallback("getBrowserLangCallback", null, getBrowserLangCallback);
+
+	
+	var redirectToUrlReturnObject = null;
+	var timeZoneOffsetReturnObject = null;
+	var browserInfoReturnObject = null;
+	var browserLangReturnObject = null;
+	
+	
+	function redirectToUrl(url, returnObject) {
+		
+		redirectToUrlReturnObject = returnObject;
+		
+		flash.external.ExternalInterface.call("redirectToUrl", url);
+		
+		//lz.Browser.callJS("redirectToUrl",callback,this.redirectURL);
+	}
+	
+	function redirectToUrlCallback(returnValue) {
+		if ($debug) Debug.write("redirectToUrlCallback ",returnValue);
+		if (redirectToUrlReturnObject != null) {
+			redirectToUrlReturnObject.callback(returnValue);
+		}
+	}
+
+	
+	function getTimeZoneOffset(returnObject) {
+		
+		timeZoneOffsetReturnObject = returnObject;
+		
+		flash.external.ExternalInterface.call("getTimeZoneOffset");
+		
+		//lz.Browser.callJS("getTimeZoneOffset",getTimeZoneOffsetCallback);
+	}
+	
+	function getTimeZoneOffsetCallback(returnValue) {
+		if ($debug) Debug.write("getTimeZoneOffsetCallback ",returnValue);
+		if (timeZoneOffsetReturnObject != null) {
+			timeZoneOffsetReturnObject.callback(returnValue);
+		}
+	}
+	
+	
+	function getBrowserInfo(returnObject) {
+        
+        browserInfoReturnObject = returnObject;
+        
+        flash.external.ExternalInterface.call("getBrowserInfo");
+        
+        //lz.Browser.callJS("getBrowserInfo",callback);
+    }
+    
+    function getBrowserInfoCallback(returnValue) {
+        if ($debug) Debug.write("getBrowserInfoCallback ",returnValue);
+        if (browserInfoReturnObject != null) {
+            browserInfoReturnObject.callback(returnValue);
+        }
+    }
+    
+    
+    function getBrowserLang(returnObject) {
+        
+        browserLangReturnObject = returnObject;
+        
+        flash.external.ExternalInterface.call("getBrowserLang");
+        
+        //lz.Browser.callJS("getBrowserLang",callback);
+    }
+    
+    function getBrowserLangCallback(returnValue) {
+        if ($debug) Debug.write("getBrowserLangCallback ",returnValue);
+        if (browserLangReturnObject != null) {
+            browserLangReturnObject.callback(returnValue);
+        }
+    }
+	
+
+]]>
+</script>
+
+</library>
diff --git a/WebContent/src/base/functions.lzx b/WebContent/src/base/functions.lzx
new file mode 100644
index 0000000..6142cdf
--- /dev/null
+++ b/WebContent/src/base/functions.lzx
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<script>
+<![CDATA[
+
+var labelObj;
+    
+var tempActionForNavi = null;
+
+// Load Labels from List
+var labels = new Object();
+
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+
+var _labelObject = new Array();
+
+var RegExpTooltiplist = null;
+
+function disablesTooltips(obj){
+  if(RegExpTooltiplist!=null){
+    RegExpTooltiplist.destroy();
+    RegExpTooltiplist=null;
+  }
+  RegExpTooltiplist = obj;
+}
+
+function setLabelObject(lableObj){
+	_labelObject = lableObj;
+}
+
+function getLabelObjectById(labelid){
+	for (var i=0;i<_labelObject.length;i++){
+		if (Number(_labelObject[i]['labelid'])==labelid){
+			return _labelObject[i];
+		}
+	}
+}
+
+function getLabelNameGlob(labelid){
+	for (var i=0;i<_labelObject.length;i++){
+		if (Number(_labelObject[i]['labelid'])==labelid){
+			return _labelObject[i]['labelvalue'];
+		}
+	}
+}
+    
+var currentMouseWheelObject = null;
+    
+function setCurrentMouseWheelObject(obj) {
+    currentMouseWheelObject=obj;
+}    
+function getCurrentMouseWheelObject(obj) {
+    return currentMouseWheelObject;
+}  
+function disableCurrentMouseWheelObject() {
+    currentMouseWheelObject=null;
+}  
+
+function setLabelObjectByHundred(no,obj){
+    canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "hibAdapter_setLabelObjectByHundred", [no, obj]); 
+   	for (var i = 0; i < obj.length; ++i) {
+	    labels["id" + obj[i].id] = obj[i].value;
+   	}
+}
+
+function getLabelTag(labelid){
+	var l = labels["id" + labelid];
+	if (l == undefined) {
+		l = "Error Missing [" + labelid + "]";
+	}
+    return l;
+}
+
+function quicklinkAct(action) {
+    // if($debug) Debug.write("FUNC/quicklinkAct",action);
+    loadContent({action: action, params: null},null,null);
+}            
+
+function loadContent(obj,parentobj,preparentobj){
+    if($debug) Debug.write("FUNC/loadContent: ", obj);
+    
+	if (obj.action!="logout") {
+	    tempActionForNavi = {action: obj.action, params: obj.params};
+		if (!clearStageContent()) {
+			loadContentByTempActionForNavi();
+		}
+	} else {
+		new lz.logoutConfirm(canvas,{objectsToClean: obj});
+	}
+    
+}
+    
+function loadContentByTempActionForNavi(){
+    // if($debug) Debug.write("FUNC/loadContentByTempActionForNavi");
+    
+	if (canvas.roomJumpId != 0) {
+		canvas.initroomid = canvas.roomJumpId;
+        canvas.thishib.getRoomById.doCall();
+		canvas.roomJumpId = 0;
+	} else {
+        if($debug) Debug.write("FUNC/loadContentByString -1- ",tempActionForNavi);
+        if($debug) Debug.write("FUNC/loadContentByString -2- ",canvas[tempActionForNavi.action]);
+        if($debug) Debug.write("FUNC/loadContentByString -3- ",lz[canvas[tempActionForNavi.action]]);
+        
+        new lz[canvas[tempActionForNavi.action]](canvas.main_content._content.inner, {params: tempActionForNavi.params});
+	}
+}    
+
+function clearStageContent(){
+    return canvas.main_content._content.clearAll();
+}
+
+function setLabelObject(labelObjRef){
+    // if($debug) Debug.write("FUNC/setLabelObject",labelObjRef);
+    labelObj = labelObjRef;
+}
+
+function getLabelNameXMLCRM(labelid){
+    // if($debug) Debug.write("FUNC/getLabelNameXMLCRM",labelid);
+    for (var i=0;i<labelObj.length;i++){
+        if (labelid==labelObj[i].fieldvalues_id){
+            return labelObj[i].value;
+        }
+    }
+    
+}
+
+function getStringTime(){
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    return ''+hours+':'+minutes;
+}   
+
+function getStringTimeWithSeconds(){
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var seconds = dateObj.getSeconds();
+    if (seconds<10) seconds="0"+seconds;
+    return ''+hours+':'+minutes+':'+seconds;
+}   
+
+function parseDateToString(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToString",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var m = dateObj.getMonth()+1;
+    if (m<10) m = "0"+m;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    return d+'.'+m+'.'+y;
+}
+
+function parseDateToStringTimeOnly(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m;        
+    return h+':'+m;
+}
+
+function parseTimeStringToDate(t){
+    // if($debug) Debug.write("FUNC/parseStringToTime",t);
+    if (t.length==5){
+        var d = 1;
+        var m = 1;
+        var y = 1970;
+        var std = Number(t.substring(0, 2));
+        var min = Number(t.substring(3, 5));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            if ($debug) Debug.write("parseTimeStringToDate: ",new Date(y, m-1, d, std, min))
+            return new Date(y, m-1, d, std, min);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function parseDateToStringTime(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m;        
+    return d+'.'+mo+'.'+y+' '+h+':'+m;
+}
+
+function parseDateToStringTimeSeconds(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m; 
+    var s = dateObj.getSeconds();
+    if (s<10) s = "0"+s; 
+    return d+'.'+mo+'.'+y+' '+h+':'+m+':'+s;
+}
+
+function parseStringToDate(t){
+    // if($debug) Debug.write("FUNC/parseStringToDate",t);
+    if (t.length==10){
+        var d = Number(t.substring(0, 2));
+        var m = Number(t.substring(3, 5));
+        var y = Number(t.substring(6, 10));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            return new Date(y, m-1, d);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function parseStringToDateTime(t){
+    // if($debug) Debug.write("FUNC/parseStringToDate",t);
+    if (t.length==15){
+        var d = Number(t.substring(0, 2));
+        var m = Number(t.substring(3, 5));
+        var y = Number(t.substring(6, 10));
+        var h = Number(t.substring(10, 12));
+        var min = Number(t.substring(13, 15));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            if ($debug) Debug.write("parseStringToDateTime+: ",new Date(y, m-1, d, h, min))
+            return new Date(y, m-1, d, h, min);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function getStringDateFileSave(){
+    // if($debug) Debug.write("FUNC/getStringDateFileSave");
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var date = dateObj.getDate();
+    if (date<10) date="0"+date;
+    var month = dateObj.getMonth()+1;
+    if (month<10) month="0"+month;
+    return date+'_'+month+'_'+dateObj.getFullYear()+'_at_'+hours+'_'+minutes;
+} 
+
+function getStringTimeByTimeStamp(tStamp){
+    if ($debug) Debug.write("getStringTimeByTimeStamp "+tStamp);
+    var dateObj = new Date(tStamp);
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var seconds = dateObj.getSeconds();
+    if (seconds<10) seconds="0"+seconds;
+    return ''+hours+':'+minutes+':'+seconds;
+}  
+
+
+function strtrim(str)
+{
+    for(var i = 0; str.charCodeAt(i) < 33; i++);
+    for(var j = str.length-1; str.charCodeAt(j) < 33; j--);
+    return str.substring(i, j+1);
+}
+
+function parseDateTimeStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	return ""+tDay+"."+tMonth+"."+tYear+" "+tHour+":"+tMin;
+}
+
+function parseDateStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	return ""+tDay+"."+tMonth+"."+tYear;
+}
+
+function parseTimeStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	
+	return ""+tHour+":"+tMin;
+}
+
+/*
+ * parse date from string
+ * sample strings:
+ * 2012-03-05
+ */
+function parseDateOnlyFromXmlString(str) { 
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	return new Date(tYear,Number(tMonth)-1,tDay);
+}
+
+
+/*
+ * parse date from string
+ * sample strings:
+ * 0123456789012345678901234567890
+ * 2012-03-08T06:30:00.000+01:00
+ * 2012-03-11T15:00:00.713Z
+ */
+function parseDateTimeFromXmlString(str) { 
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	return new Date(tYear,Number(tMonth)-1,tDay,tHour,tMin,0);
+}
+
+/**
+ * Correct REST format for java.util.Calendar is: yyyy-mm-ddTHH:MM:SS
+ *
+ *
+ */
+function parseDateToRestDateCalendar(dateObj){
+    if($debug) Debug.write("FUNC/parseDateToStringTime 1",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m; 
+    var s = dateObj.getSeconds();
+    if (s<10) s = "0"+s; 
+    if($debug) Debug.write("FUNC/parseDateToStringTime 2",""+y+"-"+mo+"-"+d+"T"+h+":"+m+":"+s);
+    return ""+y+"-"+mo+"-"+d+"T"+h+":"+m+":"+s;
+}
+
+]]>
+</script>
+		
+</library>
diff --git a/WebContent/src/base/hibernate/hibRtmpConnection.lzx b/WebContent/src/base/hibernate/hibRtmpConnection.lzx
new file mode 100644
index 0000000..2f52be0
--- /dev/null
+++ b/WebContent/src/base/hibernate/hibRtmpConnection.lzx
@@ -0,0 +1,1907 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<dataset name="myresultnavi" />
+
+<dataset name="languagesSet" />        
+
+<class name="userStatus" extends="view" width="250" height="30">
+    <attribute name="statusText" type="string" />
+    <attribute name="statusColor" type="number" value="0" />
+
+    <text name="status" width="240" height="20" x="5" y="5" fontstyle="bold" fgcolor="0" text="defaulttext" fontsize="10"/>
+
+    <handler name="oninit">
+        this.status.setAttribute("text", this.statusText);
+        this.status.setAttribute("fgcolor", this.statusColor);
+        this.setAttribute("visibility", "visible");
+        lz.Timer.addTimer( new LzDelegate( this, "selfDestroy" ), 3000 );
+    </handler>
+
+    <method name="selfDestroy" args="ignore=null">
+        this.destroy();
+    </method>
+</class>
+
+<class name="hibRtmpConnection" extends="rtmpConnection" debug="false"
+    src="$once{ this.getUrl() }" >
+
+    <attribute name="counterror" type="number" value="0" />
+    
+    <attribute name="loaderVar" value="null" />
+    
+    <attribute name="userScope" value="hibernate" type="string" />
+    
+    <!-- refreshing the session regulary -->
+    <attribute name="refreshDelegate" value="null" />
+    
+    <!-- UserId-->
+    <attribute name="UserID" value="1" type="number" />
+    <!-- reconnect after each conferenceView -->
+    <attribute name="reconnectAfterRoomleft" type="boolean" value="false" />
+    <attribute name="reconnectedRoomInstance" value="null" />
+    
+    <attribute name="reconnectionAction" value="false" type="boolean" />
+    <attribute name="reconnectObjRef" value="null" />
+         
+     <attribute name="userobject" value="null" />
+     
+     <!-- default will be loaded on startup -->
+     <attribute name="userlang" value="1" type="number" />
+     
+     <!-- The default Language will be loaded on init  -->
+     <attribute name="initlanguageLoaded" value="false" type="boolean" />
+     
+     <!-- This domain is the orgdomain used in the video-conference -->
+     <attribute name="conferencedomain" value="public" type="string" />
+     
+     <!-- if this connection is used for testing the app
+     see test-setup.lzx -->
+     <attribute name="testAppLoading" value="false" type="boolean" />
+     
+     <!-- 
+        the real ROOM_ID
+     -->
+     <attribute name="currentroomid" value="0" type="number" />
+     
+     <!-- This is the current domain the user has logged-in -->
+     <attribute name="currentdomain" value="domain1" type="string" />
+     <attribute name="currentdomainObj" value="domain1" type="string" />
+     
+     <!--- the current Invitation-Object -->
+     <attribute name="currentInvitation" value="null" />
+    
+    <!-- shows what kind of conferenceView it is at the moment
+        wether its conferenceView or audienceView -->
+    <attribute name="modus" value="" type="string" />
+    
+    <!-- shows what kind of room the use is public or private -->
+    <attribute name="roomtype" value="" type="string" />
+        
+    <attribute name="showKickMessage" value="false" type="boolean"/>
+    <attribute name="showFullMessage" value="false" type="boolean"/>
+         
+    <attribute name="useRTMPT" value="false" type="boolean" />
+    <attribute name="connected" value="false" type="boolean" />
+    
+    <method name="getProtocol">
+    	if (canvas.useSSL) {
+    		return "rtmps";
+    	}
+    	if (this.useRTMPT) {
+    		return "rtmpt";
+    	}
+    	return "rtmp";
+    </method>
+    
+    <method name="getPort">
+    	if (canvas.useSSL) {
+            return canvas.rtmpsslport;
+        }
+    	if (this.useRTMPT) {
+    		return canvas.red5httpport;
+    	}
+    	return canvas.rtmpport;
+    </method>
+    
+    <method name="getHost">
+    	return canvas.rtmphostlocal;
+    </method>
+    
+    <method name="getWebappRootKey">
+    	return canvas.webAppRootKey;
+    </method>
+         
+    <!-- 
+    	canvas.getUrl() can not be reused since it has different protocol and port 
+    	and potentially in cluster another host, the only thing that stays the same
+    	no matter if hosted on slave or on master, is the scope, so
+    	userScope always stays the same
+     -->
+    <method name="getUrl">
+        return this.getProtocol() + '://' + this.getHost() + ':' + this.getPort() 
+        			+ '/' + this.getWebappRootKey() + '/' + this.userScope;
+    </method>
+             
+     <!--
+        The onconnect Method is triggered several times:
+             - When you enter a room the NetConnection will close and reconnect to the Scope of the Room
+             - When you leave the room again it will be re-connected to the default scope again
+      -->
+     <handler name="onconnect">
+        if($debug) Debug.write("hibRtmpConnection/onconnect");
+        if (this.reconnectionAction){
+        	if (canvas.wicketsid == null) {
+            	this.overwritePublicSID.doCall();
+	            this.setUsernameReconnect.doCall();
+            } else {
+	            canvas.sessionId = canvas.wicketsid;
+				canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+	            this.getPublicSID.doCall();
+            }
+        } else if (this.reconnectAfterRoomleft) {
+            //Return to content after reconnect
+            canvas.thishib.reconnectedRoomInstance.destroy();
+            this.overwritePublicSID.doCall();
+            this.setUsernameReconnect.doCall();
+        } else if (canvas.wicketsid != null) {
+            canvas.sessionId = canvas.wicketsid;
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            this.getPublicSID.doCall();
+        } else {
+            this.refreshDelegate = new LzDelegate( this, "refreshSessionMeth" );
+            //lz.Timer.addTimer( this.refreshDelegate, 60000 );
+            lz.Timer.addTimer( this.refreshDelegate, canvas.refreshSession );
+            if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            
+            //Load Session Data
+            this.getsessiondata.callRPC();    
+        }
+        connected = true;
+    </handler>
+    
+    <handler name="ondisconnect">
+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "disconnect", [canvas.thishib.src]);
+        connected = false;
+    </handler>
+    
+    <method name="reconnectComplete">
+         if (this.reconnectionAction){
+            this.reconnectionAction = false;
+            this.reconnectObjRef.reconnectSuccess();
+        } else if (this.reconnectAfterRoomleft) {
+            loadContentByTempActionForNavi();
+        }
+        canvas.currentContentView.sendInit.sendEvent(this);
+    </method>
+    
+	<handler name="onerror" >
+	<![CDATA[
+		canvas.remoteLogWrite("error status='" + this.status + "'; src='" + this.src + "'; lastCalled='" + this.lastCalled
+			+ "'; showKickMessage='" + this.showKickMessage + "'; showFullMessage='" + this.showFullMessage
+			+ "'; reconnectionAction='" + this.reconnectionAction + "'; reconnectAfterRoomleft='" + this.reconnectAfterRoomleft + "'");
+		if (this.showFullMessage) {
+			new lz.labelerrorPopup(canvas,
+				{
+					errorlabelid: 99
+					, onCloseFunc: function() {
+				       if (this.makeModal) {
+				           lz.ModeManager.releaseAll();
+				       }
+				       if ($debug) Debug.write("Error dialog is being closed, calling QUIT");
+				       canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+					}
+				});
+			this.showFullMessage = false;
+			return;
+		} else if (this.showKickMessage) {
+			new lz.labelerrorPopup(canvas,{
+				errorlabelid:606
+				, onCloseFunc: function() {
+					canvas.quit();
+				}
+			});
+			canvas._loadingAll.hideContentOnly();
+			return;
+		} else if (this.reconnectionAction){
+			this.connect();
+		} else if (this.reconnectAfterRoomleft) {
+			if ($debug) Debug.write("this.reconnectAfterRoomleft: ",this.reconnectAfterRoomleft);
+			this.counterror=0;
+			this.connect();
+		} else {
+			if (canvas.isRemoteUser() && (this.status == 'NetConnection.Connect.Closed' 
+					|| this.status == 'NetConnection.Connect.NetworkChange'))
+			{
+				if (null != canvas.REDIRECT_URL_FOR_EXTERNAL_USERS) {
+					new lz.redirectBox(canvas, {
+							redirectURL:canvas.REDIRECT_URL_FOR_EXTERNAL_USERS
+							, maxTime: 0
+						});
+				}
+				this.counterror = 6; //NO more reconnects
+			}
+			this.useRTMPT = true
+			var src = getUrl();
+			this.setAttribute('src',src);
+			//Debug.write("new src ",this.src);
+			if (this.counterror<3){
+				this.counterror++;
+				//Debug.write("try ",this.counterror,"one");
+				if (canvas.thishib.loaderVar != null) {
+					canvas.thishib.loaderVar.error.setAttribute('text',"try "+this.counterror);
+				}
+				this.connect();
+			} else {
+				//Debug.write("connection failed");
+				if (canvas.thishib.loaderVar != null) {
+					canvas.thishib.loaderVar.error.setAttribute('text',this.status);
+				}
+				canvas.setAttribute('loadingmessage','connection failed');
+				new lz.labelerrorPopup(canvas,{errorlabelid:556});
+			}
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar._src.setAttribute('text',src);
+			}
+		}
+	]]>
+	</handler>    
+    
+    <method name="refreshSessionMeth" args="calleeObj">
+        this.refreshSession.doCall();
+    </method>
+    
+    <!-- This Function is just for refreshing the Session -->
+    <netRemoteCallHib name="refreshSession" funcname="userservice.refreshSession" showLoading="false" >    
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>   
+        <handler name="ondata" args="value">
+            //if ($debug) Debug.write("hibRtmpConnection/refreshSession [",value,"]");
+            lz.Timer.addTimer( parent.refreshDelegate, canvas.refreshSession );
+        </handler>
+    </netRemoteCallHib>
+      
+    <netRemoteCallHib name="getsessiondata" funcname="xmlcrm.getsessiondata" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("hibRtmpConnection/getsessiondata [",value,"]");
+            canvas.sessionObject = value;
+            canvas.sessionId = value.session_id;
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            parent.getPublicSID.doCall();
+        </handler>  
+    </netRemoteCallHib>
+     
+    <netRemoteCallHib name="getPublicSID" funcname="getPublicSID" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("hibRtmpConnection/getPublicSID [",value,"]");
+            canvas.publicSID = value;     
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+			parent.getLanguages.doCall();
+        </handler>  
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="overwritePublicSID" funcname="overwritePublicSID" >     
+        <netparam><method name="getValue"> return canvas.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("overwritePublicSID: ",value);
+        </handler>  
+    </netRemoteCallHib>    
+    
+	<netRemoteCallHib name="getLanguages" funcname="languageservice.getLanguages" dataobject="languagesSet" >
+		<handler name="ondata" args="value">
+			//The onResult-Handler will be called be the rtmpconnection
+			//if ($debug) Debug.write("getLanguages: ",value, languagesSet);
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.setProgress();
+			}
+			parent.getDefaultLanguage.doCall();
+		</handler>
+	</netRemoteCallHib>    
+    
+    <method name="setDefaultUserLanguage">
+	    <![CDATA[
+	        if (userlang == -1 && canvas.language_id != 0) {
+	            userlang = canvas.language_id;
+	        } else if (userlang == -1) {
+	            var lang_id = canvas.default_lang_id;
+	            
+	            var browserLang = flash.external.ExternalInterface.call("function(){return window.navigator.systemLanguage || window.navigator.userLanguage || window.navigator.language;}");
+	            if (browserLang == null) {
+	                browserLang = "" + System.capabilities.language;
+	            }
+	            if (browserLang != null && browserLang.length > 1) {
+	                var lngCode = browserLang.substring(0, 2);
+	                
+	                //openlaszlo XPath is able to search nothing, so will iterate
+	                var xpath = "languagesSet:/item";
+	                var list = languagesSet.getPointer().xpathQuery(xpath);
+	                
+	                var partMatch = -1, fullMatch = -1; 
+	                for (var i = 1; list != null && i <= list.length; ++i) {
+	                    xpath = "languagesSet:/item[" + i + "]/code/text()";
+	                    var val = languagesSet.getPointer().xpathQuery(xpath);
+	                    if (val != null && val.length > 1) {
+	                        var partCode = ("" + val).substring(0, 2);
+	                        
+	                        if (browserLang == val) {
+	                            fullMatch = i;
+	                        } else if (lngCode == val) {
+	                            partMatch = i;
+	                        } else if (partCode == lngCode) {
+	                            partMatch = i;
+	                        }
+	                    }
+	                }
+	                if (partMatch != -1 || fullMatch != -1) {
+	                    i = (fullMatch != -1) ? fullMatch : partMatch;
+	                    xpath = "languagesSet:/item[" + i + "]/language_id/text()";
+	                    lang_id = languagesSet.getPointer().xpathQuery(xpath);
+	                }
+	            }
+	            
+	            if (canvas.language_id == 0) {
+	                userlang = lang_id;
+	            } else {
+	                userlang = canvas.language_id;
+	            }
+	        }
+	    ]]>
+    </method>
+    
+    <netRemoteCallHib name="logoutUser" funcname="xmlcrm.logoutUser"
+        remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" 
+        isCallBackHandler="true">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="sendCallBack">
+        <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("sendCallBack logoutUser: ");    
+            parent.initlanguageLoaded = false;
+            
+            var g = canvas.getUserData();
+            g["username"] = '';
+            g["userpass"] = '';
+            g["userquality"] = null;
+            g["usercolor"] = null;
+            g["userlang"] = null;
+            g["saveuserdata"]=false;
+            g["storedSession"] = "";
+            canvas.setUserData(g);
+            canvas.setColorStyle(canvas.baseColorScheme);
+            
+            parent.userlang = -1;
+            parent.setDefaultUserLanguage();
+
+            parent.getLanguageByIdAndMax.start = 0;
+            parent.getLanguageByIdAndMax.doCall();
+        ]]>
+        </handler>          
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="setUsernameReconnect" funcname="setUsernameReconnect" remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+        <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+        <netparam><method name="getValue">return canvas.lastName;</method></netparam>   
+        <netparam><method name="getValue">return canvas.picture_uri;</method></netparam>   
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setUsernameReconnect: ",canvas.user_id,value);   
+            parent.reconnectComplete();
+        </handler>  
+    </netRemoteCallHib>    
+        
+    <netRemoteCallHib name="getDefaultLanguage" funcname="languageservice.getDefaultLanguage" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            canvas.default_lang_id = value;
+            if ($debug) Debug.write("getDefaultLanguage: ",value,"; canvas.lang = ", canvas.language_id);
+            if (canvas.language_id==0){
+                parent.userlang = canvas.default_lang_id;
+            } else {
+                parent.userlang = canvas.language_id;
+            }
+            parent.getLanguageByIdAndMax.doCall();
+        </handler>  
+    </netRemoteCallHib>      
+    
+	<netRemoteCallHib name="getInvitationByHash" activeErrorHandler="true" funcname="invitationservice.getInvitationByHash">
+		<netparam name="invitationHash"><method name="getValue">return canvas.invitationHash;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.close();
+			}
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getInvitationByHash: ",value);
+			if (value<0){
+			} else {
+				if (value.allowEntry) {
+					parent.currentInvitation = value;
+					new lz.invitationQuickLoader(canvas.main_content._content.inner);
+				} else {
+					var addInfo = "" + value.validFrom +"<br/> - <br/>"+ value.validTo;
+					var dlg = new lz.rpcErrorDialog(canvas,{errorid:-50,addInfo:addInfo});
+				}
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib> 
+    
+	<netRemoteCallHib name="secureLoginByRemote" activeErrorHandler="true" funcname="xmlcrm.secureLoginByRemote" >
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam name="remoteSessionId"><method name="getValue">return canvas.secureHash;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.close();
+			}
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("secureLoginByRemote: ",value);
+			if (value < 0) {
+			} else {
+				if (value == null) {
+					new lz.errorPopup(canvas,{error:'Invalid Hash'});
+					return;
+				}
+				
+				canvas.showNickNameDialog = value.showNickNameDialog;
+				if ($debug) Debug.write("markSessionAsLogedIn9 ",canvas.showNickNameDialog);
+				
+				canvas.initroomid = value.room_id;
+				canvas.becomemoderator = value.becomemoderator;
+				canvas.showAudioVideoTest = value.showAudioVideoTest;
+				canvas.landingZone = value.landingZone;
+				
+				canvas.roomRecordingId = value.roomRecordingId;
+				
+				if (canvas.roomRecordingId == null) {
+					canvas.roomRecordingId = 0;
+				}
+				
+				if (canvas.showNickNameDialog) {
+					new lz.chooseNickName(canvas);
+				} else {
+					parent.getCurrentRoomClient.doCall();
+				}
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>  
+    
+    <netRemoteCallHib name="loginUserByRemote" activeErrorHandler="true" 
+        funcname="xmlcrm.loginUserByRemote" >          
+        <netparam name="remoteSessionId"><method name="getValue">return canvas.remoteUserSid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("loginUserByRemote -1-: ",value);
+                if ($debug) Debug.write("loginUserByRemote -2-: ",canvas.remoteUserSid);
+                if (value<0){
+                    
+                } else {
+                    parent.getCurrentRoomClient.doCall();
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <netRemoteCallHib name="getCurrentRoomClient" funcname="xmlcrm.getCurrentRoomClient" >          
+        <netparam name="sessionId"><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("getCurrentRoomClient: ",value);
+                if (value!=null){
+                    
+                    canvas.setAttribute('currentuser',value.firstname+" "+value.lastname);
+                    
+                    //Somehow this leads to a bug in the implementation of the secure User Login
+                    canvas.setAttribute('user_id',value.user_id);
+                    
+                    canvas.setAttribute('allowRecording',value.allowRecording);
+                    
+                    var fName = value.firstname == null ? "" : value.firstname;
+                    var lName = value.lastname == null ? "" : value.lastname;
+                    canvas.setAttribute('firstName', fName);
+                    canvas.setAttribute('lastName', lName);
+                    
+                    hib.userobject.firstname = fName;
+                    hib.userobject.lastname = lName;
+                    
+                    canvas.setAttribute('mail','');
+                    canvas.setAttribute('lastLogin','');
+                    canvas.setAttribute('official_code','');
+                    canvas.setAttribute('picture_uri',value.picture_uri);
+                    canvas.setAttribute('language','');
+                    
+                    if ($debug) Debug.write("canvas.landingZone :: ",canvas.landingZone);
+                    
+                    if (canvas.landingZone == "dashboard") {
+                        canvas.destroyExitButton = false;
+			            parent.setUsernameAndSession.doCall();
+                        parent.getRoomTypes.doCall();
+                    } else if (canvas.roomRecordingId > 0) {
+                    	if (canvas.thishib.loaderVar != null) {
+                        	canvas.thishib.loaderVar.close();
+                        }
+                        //parent.getRoomById.doCall();
+                        var obj = new Array();
+                        obj["action"] = "recordModule";
+                        loadContent(obj,null,null);
+                    } else if (canvas.wicketroomid > 0) {
+                    	canvas.initroomid = canvas.wicketroomid;
+                        parent.getRoomTypes.doCall();
+                        parent.getRoomById.doCall();
+                    } else {
+                    	if (canvas.thishib.loaderVar != null) {
+	                        canvas.thishib.loaderVar.close();
+                        }
+                        parent.getRoomById.doCall();
+                    }
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+    
+	<netRemoteCallHib name="getRoomById" funcname="conferenceservice.getRoomById" >          
+		<netparam name="sessionId"><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam name="roomId"><method name="getValue">return canvas.initroomid;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getRoomById: ",value);
+			if (value!=null){
+				if (canvas.wicketsid != null) {
+					canvas.thishib.loaderVar.close();
+				}
+				if (canvas.directUserLogin) {
+					canvas.directRoomObj = value;
+					canvas.thishib.loaderVar.close();
+				} else {
+					canvas.setRoomValues(value.roomtype.roomtypes_id,value.rooms_id,value);
+					var r = value;
+					r.currentusers = ''; //this might be huge list
+					canvas.sendViaLocalConnection(canvas.rtmp_lc_name,"setRoomValues",[value.roomtype.roomtypes_id,value.rooms_id,r]);
+				}
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:1286});
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+        
+    <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" >
+        <attribute name="start" value="0" type="number" />
+        <attribute name="step" value="100" type="number" />
+        <attribute name="max" value="1607" type="number" />
+        <netparam><method name="getValue">return parent.parent.userlang;</method></netparam> 
+        <netparam><method name="getValue">return parent.start;</method></netparam> 
+        <netparam><method name="getValue">return parent.step;</method></netparam> 
+        <handler name="ondata" args="value">
+            <![CDATA[
+            if($debug) Debug.write("hibRtmpConnection/userlang:[",parent.userlang,"]");
+                //if($debug) Debug.write("hibRtmpConnection/getLanguageByIdAndMax:[",value,"]");
+                setLabelObjectByHundred(this.start,value);
+                //The onResult-Handler will be called be the rtmpconnection
+                if (this.start <= max){
+                    this.start += this.step;
+                    if (canvas.thishib.loaderVar != null) {
+                       canvas.thishib.loaderVar.setProgress();
+                    }
+                    this.doCall();
+                } else {
+                	if($debug) Debug.write("loading lang complete");
+                    if (parent.initlanguageLoaded){
+                        if (canvas.thishib.loaderVar != null) {
+                            canvas.thishib.loaderVar.setProgress();
+                        }
+			            parent.setUsernameAndSession.doCall();
+                    } else {
+						parent.initlanguageLoaded = true;
+						if($debug) Debug.write("getGeneralOptions");
+						parent.getGeneralOptions.doCall();
+						if($debug) Debug.write("getTimeZones");
+						parent.getTimeZones.doCall(); // this is very long call let it be async
+                    }
+                    if($debug) Debug.write("getRoomTypes");
+                    parent.getRoomTypes.doCall();
+                }
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+        
+	<netRemoteCallHib name="getTimeZones" funcname="xmlcrm.getTimeZones">
+		<attribute name="start" value="0" type="number" />
+		<attribute name="step" value="100" type="number" />
+		<netparam><method name="getValue">return parent.start;</method></netparam>
+		<netparam><method name="getValue">return parent.step;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getTimeZones count: ", value.length);
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.setProgress();
+			}
+			if (start == 0) {
+				canvas.timeZones = new Array();
+			}
+			for (var i = 0; i < value.length; ++i) {
+				canvas.timeZones.push(value[i]);
+			}
+			if (value.length < step) {
+				//if($debug) Debug.write("canvas.timeZones == ", canvas.timeZones);
+				canvas.inviteMainWindow = new lz.inviteMainWindow(canvas);
+				if($debug) Debug.write("create invitationWindow: ",canvas.inviteMainWindow);
+			} else {
+				start += step;
+				doCall();
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+
+    <!--
+        There must be a temporary SIP-Account created at this moment
+     -->  
+    <netRemoteCallHib name="markSessionAsLogedIn" funcname="xmlcrm.markSessionAsLogedIn" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+                        
+            if (value == null) {
+                new lz.errorPopup(canvas,{error:"Missing User Object, set the Configuration value of the key 'default.rpc.userid' to a valid user Id that has at least one Organization assigned in the OpenMeetings Administrion Configuration Panel "});
+            }
+            
+            if ($debug) Debug.write("markSessionAsLogedIn1 ",value);
+             
+            hib.userobject = value;
+             
+            canvas.user_id = hib.userobject.user_id;
+            
+            if (value.organisation_users.length > 0){
+                hib.currentdomain = value.organisation_users[0].organisation.name;
+                hib.currentdomainObj = value.organisation_users[0].organisation;
+            } else {
+                new lz.errorPopup(canvas,{error:"Missing Organization in User Object, set the Configuration value of the key 'default.rpc.userid' to a valid user Id that has at least one Organization assigned in the OpenMeetings Administrion Configuration Panel "});
+            }
+            
+            if ($debug) Debug.write("markSessionAsLogedIn2 ",canvas.sessionId);
+            if ($debug) Debug.write("markSessionAsLogedIn3 ",canvas.initroomid);
+            if ($debug) Debug.write("markSessionAsLogedIn4 ",canvas.isinitRoomDirect);
+            if ($debug) Debug.write("markSessionAsLogedIn5 ",canvas.remoteUserLogin);
+            if ($debug) Debug.write("markSessionAsLogedIn6 ",canvas.directUserLogin);
+            if ($debug) Debug.write("markSessionAsLogedIn7 ",canvas.directRoomId);
+            if ($debug) Debug.write("markSessionAsLogedIn8 ",canvas.secureRemoteUserLogin);
+            
+            if (canvas.secureRemoteUserLogin) {
+                
+                if ($debug) Debug.write("markSessionAsLogedIn == CALL ",canvas.secureHash);
+             
+                parent.secureLoginByRemote.doCall();
+                
+            } else if (canvas.isinitRoomDirect){
+                parent.getInvitationByHash.doCall();   
+            } else if (canvas.remoteUserLogin) {
+                parent.loginUserByRemote.doCall();   
+            } else if (canvas.directUserLogin) {
+                //show Nick Name or Password Protection Dialog
+                canvas.initroomid = Number(canvas.directRoomId);
+                parent.getRoomById.doCall();
+            }
+        </handler>  
+    </netRemoteCallHib> 
+    
+	<netRemoteCallHib name="getGeneralOptions" funcname="xmlcrm.getGeneralOptions">
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.setProgress();
+			}
+			if ($debug) Debug.write("getGeneralOptions: ", value.length, value);
+			if (value != null) {
+				if (value.length > 0 && value[0] != null) {
+					//if ($debug) Debug.write("Give exclusive audio keycode is: ", value[0].conf_value);
+					canvas.setAttribute('GIVE_EXCLUSIVE_AUDIO_KEY', value[0].conf_value);
+				}
+				if (value.length > 1 && value[1] != null) {
+					if ($debug) Debug.write("red5sip.enable is: ", value[1].conf_value);
+					canvas.setAttribute('RED5_SIP_ENABLE', value[1].conf_value);
+				}
+				if (value.length > 2 && value[2] != null) {
+					if ($debug) Debug.write("max_upload_size is: ", value[2].conf_value);
+					canvas.setAttribute('MAX_UPLOAD_SIZE', value[2].conf_value);
+				}
+				if (value.length > 3 && value[3] != null) {
+					if ($debug) Debug.write("Mute/unmute keycode is: ", value[3].conf_value);
+					canvas.setAttribute('MUTE_AUDIO_KEY', value[3].conf_value);
+				}
+				if (value.length > 4 && value[4] != null) {
+					if ($debug) Debug.write("redirect.url.for.external.users is: ", value[4].conf_value);
+					canvas.setAttribute('REDIRECT_URL_FOR_EXTERNAL_USERS', value[4].conf_value);
+				}
+			} else {
+				if ($debug) Debug.warn("xmlcrm.getGeneralOptions empty!");
+			}
+			parent.getUserSalutations.doCall();
+		]]>
+		</handler>
+	</netRemoteCallHib>
+    
+    <netRemoteCallHib name="setCurrentUserOrganization" funcname="xmlcrm.setCurrentUserOrganization">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return hib.currentdomainObj.organisation_id;</method></netparam>  
+        <handler name="ondata" args="value">
+            //Sessionmanagement.getInstance() 
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setCurrentUserOrganization: ",value);
+        </handler>  
+    </netRemoteCallHib> 
+     
+    
+    <netRemoteCallHib name="getUserSalutations" funcname="userservice.getUserSalutations" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.userlang; </method></netparam> 
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("getUserSalutations ",value);
+            canvas.salutationsInitValues = value;
+            //check for password reset
+            if (canvas.wicketsid != null) {
+            	parent.loginWicket.doCall();
+            } else { 
+                if (canvas.thishib.loaderVar != null) {
+                   canvas.thishib.loaderVar.close();
+                }
+                //do not show loggin-PopUp for the test-Application
+                if (parent.testAppLoading){ 
+                    canvas.loadNextStepTestApp();
+                } else {
+                    if (canvas.isRemoteUser()){
+                        if (canvas.thishib.loaderVar != null) {
+                          canvas.thishib.loaderVar.setProgress();
+                        }
+                        if($debug) Debug.write("isinitRoomDirect or remoteUserLogin is true");
+                        parent.markSessionAsLogedIn.doCall();
+                    }
+                }
+            }
+        </handler>  
+    </netRemoteCallHib>
+    
+	<netRemoteCallHib name="loginWicket" funcname="xmlcrm.loginWicket" >
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam><method name="getValue">return canvas.wicketsid;</method></netparam>
+		<netparam><method name="getValue">return canvas.wicketroomid;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if ($debug) Debug.write("!!!!!!!!!!! loginWicket", value);
+			if (value != null) {
+				canvas.setAttribute('user_id',value.user_id);
+				canvas.setAttribute('firstName', value.firstname == null ? "" : value.firstname);
+				canvas.setAttribute('lastName', value.lastname == null ? "" : value.lastname);
+				canvas.setAttribute('mail','');
+				canvas.setAttribute('lastLogin','');
+				canvas.setAttribute('official_code','');
+				canvas.setAttribute('picture_uri','');
+				canvas.setAttribute('language','');
+				canvas.setAttribute('currentuser',value.login);
+				if (value.timeZoneId != null) {
+					canvas.timeZoneId = value.timeZoneId;
+				}
+				if (value.rights != null) {
+					for (var i = 0; i < value.rights.length; ++i) {
+						if ('Admin' == value.rights[i]) {
+							canvas.becomemoderator = true;
+						}
+					}
+				}
+				if ($debug) Debug.write("hibRtmpConnection::loginWicket -> canvas.becomemoderator", canvas.becomemoderator);
+				if (value.sessionData == null) {
+					if ($debug) Debug.write("No Language Found to assign");
+					return;
+				}
+				hib.userobject = value;
+				var found = false;
+				for (var i = 0; i < value.organisation_users.length; ++i) {
+					if (value.organisation_users[i].organisation.organisation_id == value.sessionData.organization_id) {
+						found = true;
+						hib.currentdomain = value.organisation_users[i].organisation.name;
+						hib.currentdomainObj = value.organisation_users[i].organisation;
+						break;
+					}
+				}
+				if (!found && value.organisation_users.length > 0) {
+					hib.currentdomain = value.organisation_users[0].organisation.name;
+					hib.currentdomainObj = value.organisation_users[0].organisation;
+				}
+				parent.getCurrentRoomClient.doCall();
+			} else {
+				new lz.labelerrorPopup(canvas, {errorlabelid: 1599});
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+	
+    <netRemoteCallHib name="getRoomTypes" funcname="conferenceservice.getRoomTypes" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getRoomTypes ", value);
+            canvas.roomTypesInitValues = value;
+            canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "getRoomTypes", [value]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+        </handler>  
+    </netRemoteCallHib>      
+    
+        <netRemoteCallHib name="setId" funcname="setId">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("################ setId: ",value);
+                canvas.setAttribute('streamid',value);   
+            </handler>  
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="setUsernameAndSession" funcname="setUsernameAndSession" remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam> 
+            <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+            <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+            <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+            <netparam><method name="getValue">return canvas.lastName;</method></netparam>      
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setUsernameAndSession: ",canvas.user_id,value);
+                if (canvas.thishib.loaderVar != null) {
+	                canvas.thishib.loaderVar.close();
+                }
+            </handler>  
+        </netRemoteCallHib>        
+        
+        <netRemoteCallHib name="testMethod" funcname="testMethod">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("testMethod ",value);                   
+            </handler>  
+        </netRemoteCallHib>
+
+        <!--- Notification of new User --> 
+		<netRemoteCallHib name="addNewUser" funcname="addNewUser">
+			<handler name="ondata" args="value">
+				//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("addNewUser: ",value);
+				if(value.sipTransport) {
+					canvas._videocontainer.addItem(value.connectedSince,value.isMod,value.streamid,value.room_id,'',value.formatedDate,value.userpos,value.usercolor,value);
+				} else {
+					canvas._videocontainer.addClientItem(value.connectedSince,value.isMod,value.streamid,value.room_id,'',value.formatedDate,value.userpos,value.usercolor,value);
+				}
+				canvas.setAttribute('numberofpartners',canvas.numberofpartners+1);
+			</handler>
+		</netRemoteCallHib>    
+        
+        <netRemoteCallHib name="getCurrentModeratorList" funcname="getCurrentModeratorList">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("############ getCurrentModeratorList: ",value);
+                    
+                    canvas.analyzeModerationList(value);
+                    
+                    canvas.currentModeratorList = value;
+                    //Update Moderation Flag
+                    canvas.updateModerationFlag();
+                    
+                    var messageAlreadyThrown = false;
+                    
+                    //if ($debug) Debug.write("throw event to drawarea: ", canvas.moderatorStreamID, canvas.ismoderator);
+                    
+					if (this.parent.modus == "conference") {
+						if ($debug) Debug.write("############## start broadcasting ");
+						parent.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+						parent.setBroadCastingFlag.canVideo = !canvas.currentRoomObj.isAudioOnly;
+						parent.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+						parent.setBroadCastingFlag.doCall();
+					}
+                    canvas._drawarea.onopenWhiteBoard.sendEvent();
+                    
+                    if ($debug) Debug.write("room ",canvas.currentRoomObject);
+                    if ($debug) Debug.write("roomType_id ",canvas.currentRoomObject.roomtype.roomtypes_id);
+                    
+                    if (canvas.currentRoomObject.roomtype.roomtypes_id != 3) {
+                        //We do not show this warning when the roomtype is 3 (restricted)
+                        if (canvas.currentRoomObj.isModeratedRoom) {
+                            if (value.length == 0 && !messageAlreadyThrown){
+                                new lz.labelerrorPopup(canvas,{errorlabelid:641});
+                            }
+                        } else {
+                            if (value.length == 0 && !messageAlreadyThrown){
+                                new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(498)});
+                            }
+                        }
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="newStream" funcname="newStream">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("newStream: ",value);
+                if (value == null || value.isScreenClient) {
+                    return;
+                }
+                canvas._videocontainer.startStream(value.publicSID,value.broadCastID,value.firstname,value.lastname,value.interviewPodId,value.VWidth,value.VHeight); 
+            </handler>   
+        </netRemoteCallHib> 
+           
+        <netRemoteCallHib name="closeStream" funcname="closeStream">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("**** closeStream: ",value);
+                if (value == null) {
+                	return;
+                }
+                if (value.isScreenClient) {
+                    if ($debug) Debug.write(" ondata closeStream: ",value.streamPublishName); 
+                    canvas.currentBaseConferenceRoom._screenSharingAdapter.closeScreenSharing(value);
+                } else {
+                    //free the VideoContainer
+                    //canvas._videocontainer.closeStreamClient(value.publicSID);
+                    canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeStreamClient", [value.publicSID]);
+                    canvas.setAttribute('numberofpartners',canvas.numberofpartners-1);
+                }
+                //TODO:check first current tab
+            </handler>   
+        </netRemoteCallHib>  
+        
+        <!---
+            Event is invoked if a red5 stream sharing is closed
+         -->
+        <netRemoteCallHib name="stopScreenSharingMessage" funcname="stopScreenSharingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("**** closeStream: ",value);
+                if ($debug) Debug.write(" onResult stopScreenSharingMessage : ",value.streamPublishName); 
+                canvas.currentBaseConferenceRoom._screenSharingAdapter.closeScreenSharing(value);
+            </handler>   
+        </netRemoteCallHib> 
+             
+        <netRemoteCallHib name="clientregisterRoom" funcname="clientregisterRoom">
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("**** clientregisterRoom::ondata ", value);
+            </handler>   
+        </netRemoteCallHib>   
+
+		<method name="roomDisconnectUser" args="value,id">
+			if (canvas._videocontainer!=null){
+				canvas._videocontainer.disconnectclient(id);
+				if (canvas.currentModApply!=null) canvas.currentModApply.rejectUser(value);
+				if (value.isRecording) {
+					canvas._mymod.recordingUser = null;
+				}
+				if (value.streamPublishStarted) {
+					canvas._mymod.publishingObj = null;
+				}
+				canvas._mymod.setMessage();
+			}
+		</method>
+		
+        <netRemoteCallHib name="roomDisconnect" funcname="roomDisconnect">
+            <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("roomDisconnect: ",value);
+                if (value == null || value.isScreenClient) {
+                    return;
+                }
+                if (canvas.currentBaseConferenceRoom != null && canvas.currentBaseConferenceRoom._chatPanelStrict != null) {
+	                if ($debug) Debug.write("canvas.currentBaseConferenceRoom._chatPanelStrict: ", canvas.currentBaseConferenceRoom._chatPanelStrict);
+                	canvas.currentBaseConferenceRoom._chatPanelStrict.closeprivatechat(["close", value.publicSID]);
+                }
+                if (canvas.currentActivityList != null) {
+                    canvas.currentActivityList.addMessageRequest(value, canvas.getLabelName(1367), new Date().getTime());
+                }
+                parent.roomDisconnectUser(value, value.publicSID);
+            ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="stopRecordingMessage" funcname="stopRecordingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                canvas._mymod.recordingUser = null;
+                canvas._mymod.setMessage();                 
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="stopPublishingMessage" funcname="stopPublishingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+				canvas._mymod.publishingObj = null;
+                canvas._mymod.setMessage();                 
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setSyncFlag" funcname="setSyncFlag" >      
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("setSyncFlag: ",value);
+            </handler>
+        </netRemoteCallHib>   
+             
+        <netRemoteCallHib name="logicalRoomLeaveDis" funcname="logicalRoomLeaveDis" >      
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("logicalRoomLeaveDis: ",value);
+                parent.roomDisconnectUser(value, value.broadCastID);
+            </handler>
+        </netRemoteCallHib>             
+  
+        <method name="setUserStatus" args="ctx,user,o">
+            <![CDATA[
+				if (!o || !user) return;
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) {
+                    Debug.write("setUserStatus: ", user);
+                    Debug.write("setUserStatus: ", o.param);
+                }
+                var aObj = o.param[3];
+                var usPoint = null;
+                if ($debug) Debug.write("drawObj: ", aObj[0]);
+                switch(aObj[0]) {
+                    case 'line':
+                    case 'uline':
+                        usPoint = {x: aObj[aObj.length - 5] + aObj[6], y: aObj[aObj.length - 4] + aObj[7]};
+                        break;
+                    case 'letter':
+                    case 'rectangle':
+                    case 'ellipse':
+                    case 'clipart':
+                        usPoint = {x: aObj[aObj.length - 3] + aObj[aObj.length - 5], y: aObj[aObj.length - 2] + aObj[aObj.length - 4]};
+                        break;
+                    case 'paint':
+                        var points = aObj[1];
+                        //points are empty on 'paint' move
+                        usPoint = {
+                            x: aObj[aObj.length - 5] + (points.length ? points[points.length - 1][3] : aObj[aObj.length - 3])
+                            , y: aObj[aObj.length - 4] + (points.length ? points[points.length - 1][4] : aObj[aObj.length - 2])};
+                        break;
+                    case 'drawarrow':
+                        usPoint = {x: aObj[aObj.length - 5] + aObj[9], y: aObj[aObj.length - 4] + aObj[10]};
+                        break;
+                    case 'clipart':
+                        break;
+                }
+                if (usPoint) {
+                    var us = new lz.userStatus(ctx, {
+                        width:100
+                        , x: usPoint.x
+                        , y: usPoint.y - 25 //little above
+                        , queueable: false
+                        , statusText: user.firstname + " " + user.lastname
+                        });
+                    if ($debug) Debug.write("us: ", us, "; usPoint: ", usPoint);
+                }
+            ]]>
+        </method>
+
+        <netRemoteCallHib name="sendVarsToWhiteboard" funcname="sendVarsToWhiteboard">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("sendVarsToWhiteboard : ",value);
+            parent.setUserStatus(canvas._drawarea, value[0], value[1]);
+            canvas._drawarea.sendWatchObject(canvas._drawarea,value[1][2],value[1][3],false);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>  
+        
+         <netRemoteCallHib name="sendVarsToWhiteboardById" funcname="sendVarsToWhiteboardById">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("sendVarsToWhiteboardById : ",value);
+            parent.setUserStatus(canvas._drawarea, value[0], value[1]);
+            canvas._drawarea.parent.parent.parent.sendWatchObjectByWhiteboard(value[1]);
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="loadWmlToWhiteboardById" funcname="loadWmlToWhiteboardById">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("sendVarsToWhiteboardById : ",value);
+                    canvas._drawarea.parent.parent.parent.loadWmlToWhiteboardById(value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+            Adds this User to the List of current Moderators
+         -->
+        <netRemoteCallHib name="addModerator" funcname="addModerator">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <netparam name="vars"><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write(" addModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="removeModerator" funcname="removeModerator">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <netparam name="vars"><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write(" onResult setModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+        public synchronized Long setBroadCastingFlag(String publicSID, boolean value, boolean canVideo, Integer podId) 
+         -->
+        <netRemoteCallHib name="setBroadCastingFlag" funcname="setBroadCastingFlag">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <attribute name="isAllowedToBroadCastAV" value="false" type="boolean" />
+            <attribute name="canVideo" value="false" type="boolean" />
+            <attribute name="avsettings" value="av" type="string" />
+            <attribute name="interviewPodId" value="0" type="number" />
+            <netparam><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <netparam><method name="getValue">return parent.isAllowedToBroadCastAV;</method></netparam>
+            <netparam><method name="getValue">return parent.canVideo;</method></netparam>
+            <netparam><method name="getValue">return parent.interviewPodId;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write(" onResult setModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setNewBroadCastingFlag" funcname="setNewBroadCastingFlag">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write(" onResult setNewBroadCastingFlag : ",value);
+                    canvas._videocontainer._participants.getUserListItemByPublicSID(value.publicSID).setAttribute("refObj", value);   
+                    if (canvas.publicSID == value.publicSID) {
+						canvas.sendViaLocalConnection(canvas.vid_lc_name, "toggleVideo", [value.canVideo]);
+                        canvas.setAttribute("isBroadCasting", value.isBroadcasting);
+                        canvas.setAttribute("canVideo", value.canVideo);
+                        
+                        if ($debug) Debug.write("Its about You ", value);
+                        if (value.isBroadcasting) {
+                            if (canvas.thishib.modus == "interview") {
+                               canvas._drawarea.newInterviewStarting(value);
+                            } else {
+                            	canvas._videocontainer._videoviewcontent.showDevicePopUp(false);
+                            }
+                        }
+                    } 
+                    canvas.setAttribute("lastBroadCastingUser",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="giveExclusiveAudio" funcname="giveExclusiveAudio">
+            <attribute name="publicSID" value="0" type="string" />
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <method name="setExclusiveAudio" args="tPublicSID">
+                this.publicSID = tPublicSID;
+                this.doCall();
+            </method>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="receiveExclusiveAudioFlag" funcname="receiveExclusiveAudioFlag">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    canvas._videocontainer.receiveExclusiveAudioFlag(value.publicSID)
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="switchMicMuted" funcname="switchMicMuted">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="mute" value="false" type="boolean" />
+            <event name="onMute" />
+            <method name="setMute" args="tPublicSID,tMute">
+                this.publicSID = tPublicSID;
+                this.mute = tMute;
+                var obj = new Array();
+                obj["mute"] = tMute;
+                obj["publicSID"] = tPublicSID;
+                this.onMute.sendEvent(obj);
+                this.doCall();
+            </method>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.mute;</method></netparam>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="newRed5ScreenCursor" funcname="newRed5ScreenCursor">
+            <netparam><method name="getValue">return null;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				//if ($debug) Debug.write(" onResult newRed5ScreenCursor : ",value);
+				if (canvas.currentBaseConferenceRoom._screenSharingAdapter != null) {
+					canvas.currentBaseConferenceRoom._screenSharingAdapter.updateCursorScreenSharing(value);
+				}
+			]]>
+			</handler>   
+        </netRemoteCallHib>
+        
+        
+        <!--
+            Red5 Screen Sharing
+         -->
+        <netRemoteCallHib name="newScreenSharing" funcname="newScreenSharing">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //if ($debug) Debug.write(" onResult newScreenSharing 1 : ",value);  
+                    //if ($debug) Debug.write(" onResult newScreenSharing 2 : ",value.streamid); 
+                    //if ($debug) Debug.write(" onResult newScreenSharing 3 : ",canvas.streamid); 
+                    if ($debug) Debug.write(" onResult newScreenSharing 4 : ",value.streamPublishName); 
+                    if ($debug) Debug.write(" onResult newcreenSharing 5 : ",canvas.publicSID); 
+                    
+                    canvas.currentBaseConferenceRoom._screenSharingAdapter.newScreenSharing(value,canvas.currentBaseConferenceRoom._chatPanelStrict.height);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="checkScreenSharing" funcname="checkScreenSharing">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write(" onResult checkScreenSharing : ",value);  
+                    if (value != null) {
+                    	canvas.currentBaseConferenceRoom._screenSharingAdapter.newScreenSharings(value,canvas.currentBaseConferenceRoom._chatPanelStrict.height);
+                    } else {
+                        if ($debug) Debug.warn("Self Screen Sharing");
+                    }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+        public synchronized Long applyForModeration(String publicSID)
+         -->
+        <netRemoteCallHib name="applyForModeration" funcname="applyForModeration"
+                       remotecontext="$once{ canvas.thishib }">
+            <netparam><method name="getValue">return canvas.publicSID;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("applyForModeration : ",value);
+                    if (value == 1) {
+                        //Do add direct
+                        parent.addModerator.publicSIDOfNewModerator = canvas.publicSID;
+                        parent.addModerator.doCall();
+                    } else if (value == 2) {
+                        //Ask the Moderator
+                        var tDate = new Date();
+                        parent.sendMessageWithClient.sendMessage("applyForModeration",tDate.getTime());
+                    } else if (value == 3) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:696});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanDraw" funcname="whiteboardservice.setCanDraw"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canDraw" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canDraw;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanDraw : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanShare" funcname="whiteboardservice.setCanShare"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canShare" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canShare;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanShare : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanRemote" funcname="whiteboardservice.setCanRemote"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canRemote" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canRemote;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanRemote : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setNewModeratorByList" funcname="setNewModeratorByList">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("setNewModeratorByList ",value);
+                    
+                    canvas.analyzeModerationList(value);
+                    
+                    //The onResult-Handler will be called be the rtmpconnection
+                    canvas.currentModeratorList = value;
+                    //Update Moderation Flag
+                    canvas.updateModerationFlag();
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendMessage" funcname="sendMessage">
+            <netparam name="vars"><method name="getValue">return canvas.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("getValue : ",value);
+                
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendMessageAll" funcname="sendMessageAll">
+            <netparam name="vars"><method name="getValue">return canvas.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("getValue : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendVarsToMessage" funcname="sendVarsToMessage">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //Debug.write("sendVarsToMessage : ",value);
+                    if (value[0]=='audioActivity'){
+                        //canvas.currentModApply
+                        //if ($debug) Debug.write("audioActivity Client ",value[1],value[2]);
+                        canvas._videocontainer.setSpeakingByPos(value[2],value[1]);
+                    } else if (value[0]=='typingActivity'){
+                        if ($debug) Debug.write("!!!typingActivity ::", value[1], canvas._videocontainer._participants.getUserListItemByPublicSID(value[2]));
+                        canvas._videocontainer._participants.getUserListItemByPublicSID(value[2]).userTyping(value[1]);
+                    } else if (value[0]=='chat'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas.addChatHistory(value);
+                    } else if (value[0]=='activateWhiteboard'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.activateWhiteboard(value);
+                    } else if (value[0]=='newWhiteboard'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.newWhiteboard(value);
+                    } else if (value[0]=='removeWindow'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.removeWindow(value);
+                    } else if(value[0]=='fileslist'){
+                        canvas.currentImagesListdraw.parent.onvisible.sendEvent(true);
+                    } else if(value[0]=='initBrowser'){
+                        canvas.startBrowser(value);
+                    } else if(value[0]=='newBrowserURL'){
+                        canvas.startBrowser(value);
+                    } else if(value[0]=='closeBrowserURL'){
+                        canvas.closeBrowser(value);
+                    }
+                    
+                ]]>
+            </handler>   
+        </netRemoteCallHib>   
+        <netRemoteCallHib name="sendVarsModeratorGeneral" funcname="sendVarsModeratorGeneral">
+            <netparam name="vars"><method name="getValue">return canvas.VarsModeratorGeneral;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendVarsModeratorGeneral : ",value);
+                
+                ]]>
+            </handler>   
+        </netRemoteCallHib>  
+
+		<netRemoteCallHib name="sendChatMessageWithClient"
+			funcname="chatservice.sendMessageWithClient" remotecontext="$once{ canvas.thishib }">
+            <attribute name="messageObj" value="null" />
+			<netparam><method name="getValue">return parent.messageObj;</method></netparam>
+
+            <method name="sendMessage" args="messageObject">
+                this.messageObj = messageObject;
+                this.doCall();
+            </method>
+			<handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("chatservice.sendMessageWithClient getValue : ",value);
+                ]]>
+			</handler>
+		</netRemoteCallHib>
+		
+        <netRemoteCallHib name="sendMessageWithClient" funcname="sendMessageWithClient" 
+                          remotecontext="$once{ canvas.thishib }" >  
+            
+            <attribute name="messageObj" value="null" />
+            <method name="sendMessage" args="typeName,messageObject">
+                this.messageObj = new Object();
+                this.messageObj[0] = typeName;
+                this.messageObj[1] = messageObject;
+                this.doCall();
+            </method>
+            
+            <method name="sendAdvMessage" args="typeName,messageObject,tStamp">
+                this.messageObj = new Object();
+                this.messageObj[0] = typeName;
+                this.messageObj[1] = messageObject;
+                this.messageObj[2] = tStamp;
+                this.doCall();
+            </method>
+            
+            <netparam name="vars"><method name="getValue">return parent.messageObj;</method></netparam>
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendMessageWithClient : ",value);
+            </handler>
+        </netRemoteCallHib>
+          
+        <netRemoteCallHib name="sendVarsToMessageWithClient" funcname="sendVarsToMessageWithClient" 
+                          remotecontext="$once{ canvas.thishib }" >  
+            <netparam name="vars"><method name="getValue">return parent.parent.applymessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendVarsToMessageWithClient : ",value,value.message,value.message[0]);
+                if (value[0]=='kick' || value.message[0]=='kick'){
+                    //canvas.currentModApply
+                    if ($debug) Debug.write("!!!!!! THIS USER GOING TO BE KICKED");
+                    parent.showKickMessage = true;
+                    parent.disconnect();
+                    canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+                } else if (value.message[0]=='copiedText'){
+                    //canvas.currentModApply
+                    
+                    if ($debug) Debug.info("copiedText :: ",value.message[1]);
+                    //System.setClipboard(value.message[1]);
+                    //lz.Browser.setClipboard(value.message[1]);
+                    //LzBrowserKernel.setClipboard (value.message[1]);
+                    
+                    //import flash.System;
+                    //flash.System.setClipboard(value.message[1]);
+                    
+                    new lz.copiedTextPopup(canvas,{
+                                       error:value.message[1]
+                                    });
+                    
+                } else if (value.message[0]=='applyforMod'){
+                    //canvas.currentModApply
+                    if (canvas.streamid!=value.client.streamid) {
+                        new lz.responseForModeration(canvas.main_content._content.inner,{
+                                                                userobject:value.client,
+                                                                clientId:value.client.streamid
+                                                            });
+                    }
+                } else if (value.message[0]=='applyModAnswer'){
+                    canvas.currentModApply.setUserAnswer(value);
+                } else if (value.message[0]=='privatechat'){
+                    if ($debug) Debug.write("privatechat",value.message,value.client);
+                    canvas._currentChatPanel.privatechat(value.message,value.client);
+                } else if (value.message[0]=='chat'){
+                    if (canvas._chatcontent) canvas._chatcontent.addChatHistory(value.message,value.client);
+                } else if (value.message[0]=='avsettings'){
+                    canvas._videocontainer.setAVSettingsToClient(value.client);
+                } else if (value.message[0]=='whiteboard'){
+                    //if (value.message[1]=='wmlloadcomplete'){
+                    //    canvas._drawarea.sendCompleteWmlLoadedRClient(value.client);
+                    //} else if (value.message[1]=='wmlsynccomplete'){
+                    //    canvas._drawarea.sendCompleteWmlSync(value.client);
+                    //} else 
+                    
+                    if (value.message[1]=='imageloadcomplete'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='imagesynccomplete'){
+                        canvas._drawarea.sendCompleteImageSync(value.client);
+                    } else if (value.message[1]=='imageloaderror'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='imageloadtimeout'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfloadcomplete'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfsynccomplete'){
+                        canvas._drawarea.sendCompleteSWFSync(value.client);
+                    } else if (value.message[1]=='swfloaderror'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfloadtimeout'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='inituser'){
+                        
+                        //this message is deprecated and can be removed!
+                        //swagner 12.06.2008
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        if ($debug) Debug.write("inituser loadwmlObjectToStage: ",value.message[2]);
+                        if (!canvas.ismoderator) canvas._drawarea.loadwmlObjectToStage(value.message[2],"","","",true,true);
+                    } else if (value.message[1]=='initgetVars'){
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        //Debug.write("initgetVars sendVarsToMessageWithClient: ",value.message[2]);
+                        canvas._drawarea.sendWatchObject(value.message[1],value.message[2],false);
+                    } else if (value.message[1]=='syncinitLoader'){
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        //Debug.write("syncinitLoader sendVarsToMessageWithClient: ",value.message[2]);
+                        if (value.client.streamid!=canvas.streamid) canvas._drawarea.remoteSyncLoader();
+                    } else if (value.message[1][0]=='isSnapToGrid'){
+                        canvas._drawarea.setAttribute('isSnapToGrid', value.message[1][1]);
+                        //Debug.write("syncinitLoader sendVarsToMessageWithClient: ",value.message[2]);
+                        //if (value.client.streamid!=canvas.streamid) canvas._drawarea.remoteSyncLoader();
+                    }
+                } else if (value.message[0]=='updateMuteStatus'){
+                    canvas.setMuteStatus(value.message[1]);
+                } else if (value.message[0]=='updateDrawStatus'){
+                    canvas.setDrawAllowStatus(value.message[1]);
+                    //Notify all Listeners for change of the item
+                    canvas.setAttribute("drawAllowStatus",value.message[1]);
+                } else if (value.message[0]=='updateGiveAudioStatus') {
+                    canvas.setExclusiveAudioAllowStatus(value.message[1]);
+                    canvas.setAttribute("exclusiveAudioAllowStatus",value.message[1]);                    
+                } else if (value.message[0]=='applyForModeration'){
+                    if ($debug) Debug.write("Somebody wants the Moderation ",value.client);
+                    canvas.currentActivityList.addModerationRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForScreen'){
+                   if ($debug) Debug.write("Somebody wants to share/record Screen ",value.client);
+                    canvas.currentActivityList.addScreenRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForRemote'){
+                    if ($debug) Debug.write("Somebody wants to remote control screen ",value.client);
+                    canvas.currentActivityList.addRemoteRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForWhiteboard'){
+                    if ($debug) Debug.write("Somebody wants to draw on Whiteboard ",value.client);
+                    canvas.currentActivityList.addWhiteboardRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForA'){
+                    if ($debug) Debug.write("Somebody wants to share A ",value.client);
+                    canvas.currentActivityList.addAudioRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForAV'){
+                    if ($debug) Debug.write("Somebody wants to share AV ",value.client);
+                    canvas.currentActivityList.addAudioAndVideoRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='hideActivityObj'){
+                    if ($debug) Debug.write("Somebody wants to hideActivityObj ",value.client);
+                    canvas.currentActivityList.hideActivityObj(value);
+                } else if (value.message[0]=='applyForMuteOn'){
+                    canvas.currentActivityList.applyForMuteOn(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForMuteOff'){
+                    canvas.currentActivityList.applyForMuteOff(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForGiveExclusiveAudioOn'){
+                    canvas.currentActivityList.applyForGiveExclusiveAudioOn(value.client,value.message[1]);
+                } else if (value.message[0] == 'personal') {
+                	var pSID = value.client.publicSID;
+                    var vo = canvas._videocontainer._participants.getUserListItemByPublicSID(pSID);
+                    if (vo != null) {
+                    	vo.setAttribute('lastname', value.message[2]);
+                    	vo.refObj.lastname = value.message[2];
+                    }
+					canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateFirstLastName", [pSID, value.message[1], value.message[2]]);
+                } else {
+                    if ($debug) Debug.warn("sendVarsToMessageWithClient unkown message ",value);
+                }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>     
+    
+        <netRemoteCallHib name="newMessageByRoomAndDomain" funcname="newMessageByRoomAndDomain">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                //if ($debug) Debug.write("newMessageByRoomAndDomain: ",value);    
+                <![CDATA[
+                    if (value[0]=='closeprivatechat'){
+                        if ($debug) Debug.write("closeprivatechat",value);
+                        canvas._currentChatPanel.closeprivatechat(value);
+                    } else if (value[0]=='newprivatechat'){
+	                    if ($debug) Debug.write("newprivatechat",value);
+	                    canvas._currentChatPanel.newprivatechat(value);
+	                } else if (value.message=='desktop'){
+                        canvas._drawarea.incomingScreenSharing(value);
+                    } else if (value.message=='library'){
+                        
+                        if (value.action == 'import') {
+                            canvas.currentUploadWindow.myFileUpload.onCompleteByRemote(value);
+                            return;
+                        }
+                        
+                        var error = false;
+                        for (var eg in value.error){
+                            if (value.error[eg].exitValue!=0){
+	                            if ($debug) Debug.write("eg ",eg," value ",value.error[eg]);
+	                            if ($debug) Debug.write("eg ",eg," value ",value.error[eg].exitValue);
+                                error = true;
+                            }
+                        }
+                        canvas.currentUploadWindow.myFileUpload.onCompleteByRemote(value);
+                        if (value.hasError) {
+                            new lz.converterPopup(canvas.main_content._content.inner,{error:value.error});
+                        }
+                    } else if (value.message=='startStreaming'){
+                        canvas._drawarea.startStreaming(value);
+                    } else if (value.message=='stopStreaming'){
+                        canvas._drawarea.stopStreaming(value);
+                    } else if (value.message=='roomClosed'){
+                        canvas.roomClosed();
+                    } else if (value.message=='inviteToRoom'){
+                        if ($debug) Debug.write("Incoming Room Invitation ",value);
+                        new lz.chatParticipantsInviteNotification(canvas,{
+                                    publicSID:value.publicSID,
+                                    usermessage:value.usermessage,
+                                    roomId:value.roomId
+                                });
+                    } else if (value.message=='inviteToRoomAnswer'){
+                        if ($debug) Debug.write("Incoming Room inviteToRoomAnswer ",value);
+                        new lz.errorPopup(canvas,{
+                                    error:value.usermessage
+                                });
+                    } else {
+                        if ($debug) Debug.warn("Unknown Event -newMessageByRoomAndDomain- ",value);
+                    }
+                    
+                    
+                ]]>    
+            </handler>  
+        </netRemoteCallHib>      
+               
+        
+        <netRemoteCallHib name="newPoll" funcname="newPoll">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called by the rtmpconnection
+                //Debug.write("newPoll : ",value);
+                if(canvas.user_id!=value.createdBy.user_id)
+                    new lz.answerPoll(
+                        canvas.main_content._content.inner
+                        , {
+                            createdBy: value.createdBy.login
+                            , pollDate: value.created
+                            , pollQuestion: value.pollQuestion
+                            , pollTypeId: value.pollType.pollTypesId
+                            , roomPollAnswerList: value.roomPollAnswerList
+                            , roomPollId: value.roomPollId
+                            , roomScopeName: value.roomScopeName
+                        }
+                    );
+                ]]>
+            </handler>   
+        </netRemoteCallHib>                    
+                                
+        <netRemoteCallHib name="sendVarsToModeratorGeneral" funcname="sendVarsToModeratorGeneral">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendVarsToWhiteboard : ",value);
+                if (value[0]=='sharewhiteinit'){
+                    if (!canvas.htmlframeisloaded){         
+                        canvas.ifrm.createIFrame();
+                        canvas.setAttribute('htmlframeisloaded',true);
+                    }
+                } else if (value[0]=='sharewhiteside'){
+                    if (canvas.htmlframeisloaded){      
+                        _htmlside.setAttribute('text',value[2]);
+                        canvas.ifrm.setAttribute('isrc','http://'+value[2]);
+                    }
+                }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>       
+        
+   <!-- recordContentings Notifications -->
+    <netRemoteCallHib name="stopedRecording" funcname="stopedRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("stopedRecording: ",value);
+            canvas._mymod.recordingUser = null;
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="startedRecording" funcname="startedRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("startedRecording: ",value);
+            canvas._mymod.recordingUser = value;
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="checkLzRecording" funcname="flvrecorderservice.checkLzRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("checkLzRecording: ",value);
+            if (value != null) {
+                canvas._mymod.recordingUser = value;
+                canvas._mymod.setMessage();
+            }
+            parent.checkScreenSharing.doCall();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="startedPublishing" funcname="startedPublishing" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("startedPublishing: ", value);
+            canvas._mymod.publishingObj = {user: value[0], url: value[1]};
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="roomConnect" funcname="roomConnect" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("roomConnect: ",value);
+            canvas._videocontainer.addItem(value.connectedSince,value.isMod,value.streamid,value.username,
+                              '',value.formatedDate,value.userpos,value.usercolor,value);
+        </handler>
+    </netRemoteCallHib>
+    
+    
+    <!-- Whiteboard sync Events -->
+    <netRemoteCallHib name="sendSyncFlag" funcname="sendSyncFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendSyncFlag: ",value);
+                if (canvas.syncWindow == null) {
+                    canvas.syncWindow = new lz.syncWin(canvas.main_content._content.inner,{
+                            labelid:558,labeliderror:559});
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="sendSyncCompleteFlag" funcname="sendSyncCompleteFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendSyncCompleteFlag: ",value);
+                if (canvas.syncWindow != null) {
+                    canvas.syncWindow.close();
+                    canvas.syncWindow = null;
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <!-- Whiteboard Object Sync Process -->
+    <netRemoteCallHib name="sendObjectSyncFlag" funcname="sendObjectSyncFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendObjectSyncFlag: ",value);
+                if (canvas.syncImageWindow == null) {
+                    canvas.syncImageWindow = new lz.syncWin(canvas.main_content._content.inner,{labeliderror:591});
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="sendObjectSyncCompleteFlag" funcname="sendObjectSyncCompleteFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendObjectSyncCompleteFlag: ",value);
+                if (canvas.syncImageWindow != null) {
+                    canvas.syncImageWindow.close();
+                    canvas.syncImageWindow = null;
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    
+    <!-- Recording of Meetings -->
+    <netRemoteCallHib name="interviewStatus" funcname="interviewStatus">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("interviewStatus: ",value);
+                canvas._drawarea.reloadStatus();
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <netRemoteCallHib name="closeRoom" funcname="xmlcrm.closeRoom">
+        <attribute name="room_id" value="0" type="number" />
+        <attribute name="isClosed" value="true" type="boolean" />
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.room_id;</method></netparam>
+        <netparam><method name="getValue">return parent.isClosed;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("closeRoom: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="clearChatContent" funcname="clearChatContent">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                canvas._chatcontent.reload();
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="setCanGiveAudio" funcname="whiteboardservice.setCanGiveAudio"
+                   remotecontext="$once{ canvas.thishib }">
+        <attribute name="publicSID" value="" type="string" />
+        <attribute name="canGiveAudio" value="true" type="boolean" />
+        <method name="sendValue" args="publicSID,giveAudio">
+        	this.publicSID = publicSID;
+        	this.canGiveAudio = giveAudio;
+        	this.doCall();
+        </method>
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+        <netparam><method name="getValue">return parent.canGiveAudio;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setCanGiveAudio : ",value);
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+    
+</class>
+
+<hibRtmpConnection name="thishib" id="hib" />
+
+</library>
diff --git a/WebContent/src/base/hibernate/library.lzx b/WebContent/src/base/hibernate/library.lzx
new file mode 100644
index 0000000..d3bfbf1
--- /dev/null
+++ b/WebContent/src/base/hibernate/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="netRemoteCallHib.lzx" />
+	<include href="hibRtmpConnection.lzx" />
+
+</library>
diff --git a/WebContent/src/base/hibernate/netRemoteCallHib.lzx b/WebContent/src/base/hibernate/netRemoteCallHib.lzx
new file mode 100644
index 0000000..cd13da1
--- /dev/null
+++ b/WebContent/src/base/hibernate/netRemoteCallHib.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="netRemoteCallHib" extends="netremotecall">
+
+	<!--- this should be the contentSaveWindow -->
+	<attribute name="returnObj" value="null" />
+	 
+	<!--- if true this object will register at the update-observer -->
+	<attribute name="registerObject" value="false" type="boolean" />
+	
+	<!--- show Error Messages with normal Box -->
+    <attribute name="activeErrorHandler" value="false" type="boolean" />	
+    
+	<!--- show Error Messages with normal Box -->
+    <attribute name="showLoading" value="true" type="boolean" />    
+	
+	<!--- show Error Messages with Callback Box -->
+	<attribute name="isCallBackHandler" value="false" type="boolean" />	
+	
+	<handler name="oninit">
+		if (this.registerObject) this.parent.addViewToObserver(this);
+	</handler>	
+	<method name="doCall">
+        if (this.showLoading) canvas._loadingAll.showLoading();
+		//if($debug) Debug.write("netRemoteCallHib/doCall: [ " , this.funcname , " ]",this.parent);
+		this.callRPC();
+	</method>
+	
+	<event name="sendCallBack" />
+	
+	<!---
+        @keywords private
+	 -->
+	<handler name="ondata" args="value">
+		<![CDATA[
+			//Debug.write("ondata: ",this.funcname,value);
+			
+			if (this.showLoading) canvas._loadingAll.hideLoading();
+			
+			//Another Error Handler for the Form-Components
+			if (this.returnObj!=null && Number(value)>0) {
+				//Debug.write("this.returnObj.processNext");
+				this.returnObj.processNext();
+			} else if (this.returnObj!=null && Number(value)<0) {
+				this.returnObj.errorByCode(Number(value));
+			} else if (this.returnObj!=null && value==null) {
+				this.returnObj.errorByCode(-1);
+			}
+			
+            if (this.activeErrorHandler) {
+                if (Number(value)<0){
+                    Debug.warn("Received Error ID: ",value);					
+					if (this.isCallBackHandler) 
+					{
+						var dlg = new lz.callbackRpcErrorDialog(canvas,{callBackObject:this,errorid:Number(value)});						
+						lz.Focus.setFocus(dlg);
+					} else {
+						var dlg = new lz.rpcErrorDialog(canvas,{errorid:Number(value)});
+						lz.Focus.setFocus(dlg);
+					}
+                }
+            }			
+		]]>
+	</handler>	
+</class>
+
+</library>
diff --git a/WebContent/src/base/library.lzx b/WebContent/src/base/library.lzx
new file mode 100644
index 0000000..5ce5d66
--- /dev/null
+++ b/WebContent/src/base/library.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="remote/" />
+    <include href="components/" /> 
+    <include href="hibernate/" />
+    <include href="contentviews/" />
+    <include href="navi/" />
+
+	<!-- for main.lzx -->
+	<include href="externalJavaScript.lzx" />
+    <include href="functions.lzx" />
+	<include href="mainAttributes.lzx" /> 
+	<include href="mainDatasets.lzx" /> 
+	<include href="mainMethods.lzx" /> 
+	<include href="logoutConfirm.lzx" />
+	
+	<!-- 
+	   Defines the Core Classes that gets loaded in the Main Navigation
+	 -->
+	<include href="moduleConfiguration.lzx" />
+
+
+</library>
diff --git a/WebContent/src/base/logoutConfirm.lzx b/WebContent/src/base/logoutConfirm.lzx
new file mode 100644
index 0000000..b1c18ab
--- /dev/null
+++ b/WebContent/src/base/logoutConfirm.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="logoutConfirm" extends="labelExplorerBox" labelid="633"
+    docking="true" resizeable="false" closable="false" width="270" x="${ canvas.width / 2 - 145 }" y="${ canvas.height / 2 - 120}" height="100">
+
+	<attribute name="objectsToClean" type="expression"/>
+	
+	<labelText fontstyle="bold" y="25" labelid="634" x="10" width="270" multiline="true" />
+	
+	<simpleLabelButton name="ok" x="20" y="70" labelid="54" width="120" height="20">
+		<handler name="onclick">
+			if (!clearStageContent())
+			{
+				canvas._mainbgcontentNavi.navi.destroy();
+				canvas._mainbgcontentNavi.help.destroy();
+				canvas.thishib.logoutUser.doCall();
+			}
+        
+            this.parent.close();                   
+			
+		</handler>
+	</simpleLabelButton>
+	<simpleLabelButton name="cancel" x="140" y="70" labelid="55" width="120" height="20">
+		<handler name="onclick">
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>		
+</class>
+
+</library>
diff --git a/WebContent/src/base/mainAttributes.lzx b/WebContent/src/base/mainAttributes.lzx
new file mode 100644
index 0000000..89ad752
--- /dev/null
+++ b/WebContent/src/base/mainAttributes.lzx
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all attributes for main.lzx -->
+
+<library>
+<!-- 
+##########################################################
+these properties will be overwritten by public/config.xml -->  
+
+<attribute name="vid_lc_name" value="" type="string"/>
+
+<attribute name="lc_SID" value="" type="string"/>
+
+<attribute name="lc"/>
+
+<attribute name="rtmp_lc_name" value="" type="string"/>
+
+<attribute name="rtmp_lc"/>
+
+<attribute name="videoComp_lc_name" value="" type="string"/>
+
+<attribute name="videoComp_lc_callback_name" value="" type="string"/>
+
+<attribute name="videoComp_lc"/>
+
+<!--- URL/IP to use for the Server 192.168.178.28
+    inno02.fh-pforzheim.de macbook 192.168.2.103
+    192.168.2.102 bxlug.homelinux.org 213.219.160.72
+        if this value is empty it will try to connect to the 
+    domain-name it has been loading from
+    -->
+<attribute name="rtmphostlocal" value="" type="string" />
+
+<!-- 
+	URL/IP to use for the Server for HTTP and HTTPS traffic.
+    If this value is empty it will use the rtmphostlocal 
+    variable (and in that way try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from)
+ -->
+<attribute name="httphostlocal" value="" type="string" />
+ 
+<!---  
+    Port to use for the Server
+    To this port the default server lookup is done
+    
+    You can find all this configuraiton in your red5-Config in: $RED5_HOME/conf/red5.properties
+ -->
+<attribute name="rtmpport" value="1935" type="string" />
+
+<!--- 
+    Port to use for the Server
+    This port is used to connect to the HTTP-Servlet
+    of the Red5-Servlet
+ -->
+<attribute name="red5httpport" value="5080" type="string" />
+
+<attribute name="useSSL" value="false" type="boolean" />
+<attribute name="rtmpsslport" value="443" type="string" />
+
+<!---
+#############################################################
+    These colors are the main colors and style the hole application
+ -->
+<attribute name="basebgcolorizer" value="" type="string" /> 
+<attribute name="baseMousecolorizer" value="" type="string" />  
+<attribute name="baseMouseOvercolorizer" value="" type="string" />      
+<attribute name="styleMenuBarBaseColor" value="0xFFFFFF" type="string" />    
+
+<attribute name="fontColorHeader" value="0x000000" type="string" />
+<attribute name="bgColorMenuItems" value="0xEAEAEA" type="string" />
+
+<attribute name="webAppRootKey" value="" type="string" />
+
+<attribute name="httpRootKey" value="/" type="string" />
+
+<attribute name="protocol" value="http" type="string" />
+<attribute name="proxyType" value="none" type="string" />
+
+<attribute name="showAudioVideoTest" value="true" type="boolean" />
+
+<!-- 
+#############################################################
+Attributes needed for clustering -->
+
+<attribute name="isCluster" value="false" type="boolean" />
+
+<!--
+#############################################################
+    Id of the Recording that is played when access the Recordings Player via Direct Link URL
+ -->
+<attribute name="roomRecordingId" value="0" type="number" />
+
+<!--- Name of the Application -->
+<attribute name="currentappname" value="OpenMeetings" type="string" />   
+<attribute name="currentappnameurl" value="OpenMeetings" type="string" />   
+<attribute name="currentappnamebugurl" value="OpenMeetings" type="string" /> 
+
+<!--- Video Settings -->
+<attribute name="loudnessAcitviation" value="10" type="number" />
+<attribute name="showWindowEffect" value="y" type="string" /> 
+
+<!--- Calendar Settings -->
+<attribute name="firstdayinweek" value="1" type="number" />
+
+<attribute name="showmodernWhiteBoard" value="y" type="string" />
+
+<attribute name="showRecording" value="visible" type="string" />
+
+<attribute name="defaultWhiteboardWidth" value="2400" type="number" />
+<attribute name="defaultWhiteboardHeight" value="1200" type="number" />
+
+<!-- END OF public/config.xml attributes
+##########################################################
+ -->
+
+<attribute name="userHistory" value="null" />
+<attribute name="browserTabHistory" value="null" />
+
+<!-- this attribute holds an object of type RoomClient
+ the LAST RoomClient Object that has been changed the drawstatus
+ so ondrawAllowStatus = will trigger that the draw-status of ANYBODY has changed
+ and canvas.drawAllowStatus = is the RoomClient that has changed
+ and canvas.drawAllowStatus.canDraw = is the new Status of that RoomClient
+ -->
+
+<attribute name="drawAllowStatus" value="null"/>
+
+<!-- this attribute holds an object of type RoomClient
+the LAST RoomClient Object that has been changed the giveExclusiveAudio status
+-->
+<attribute name="exclusiveAudioAllowStatus" value="null"/>
+
+<!--
+    this value indicates if this user is allowed to draw to the Whiteboard
+    If this user is currently Moderator => he ALWAYS can draw to whiteboard
+    even if this isAllowedToDraw == false
+ -->
+<attribute name="isAllowedToDraw" value="false" type="boolean" />
+
+<!-- 
+    this attribute holds an object of type RoomClient
+    the LAST RoomClient Object that has been changed the mute-status
+ -->
+<attribute name="micMutedStatusChangedItem" value="null" />
+
+<!--
+    this value indicates if this user is currently muted
+ -->
+<attribute name="micMuted" value="false" type="boolean" />
+
+<!--- URL/IP to use for the Server -->
+<attribute name="rtmphost" value="" type="string" />
+
+<!--- Username/Nickname -->
+<attribute name="currentuser" value="" type="string" />
+
+<!--- Roomname internaly Scope -->
+<attribute name="currentcourse" value="" type="string" />
+
+<!--- Roomname/Coursename -->
+<attribute name="currentcourseName" value="" type="string" />
+
+<attribute name="currentImagesListdraw" value="null" />
+
+<!--- 
+    The Reference for a Streaming Object
+    This should be removed later when the OpenLaszlo API handles
+    the broadcast better
+    -swagner
+ -->
+<attribute name="_nc" value="null" />
+    
+<!--
+<attribute name="moderatorStreamID" value="" type="string" />
+<attribute name="moderatorationObject" value="" type="string" />
+<attribute name="moderatorName" type="string" setter="this.setModeratorName(moderatorName)" />
+ -->
+<attribute name="currentModeratorList" value="null" />
+
+<attribute name="newModeratorList" value="null" />
+<attribute name="removeModeratorList" value="null" />
+
+<attribute name="ismoderator" value="false" type="boolean" />
+
+<attribute name="loadingmessage" value="" type="string" />
+<!--- 
+    The state of the Application
+    At the beginning you should choose how many users are allowed to
+    login simultaniously
+ -->
+<attribute name="islogedin" value="false" type="boolean" />
+   
+<attribute name="htmlframeisloaded" value="false" type="boolean" />
+<attribute name="createIFrameDone_attr" value="false" type="boolean" />
+
+
+<attribute name="uploadmoduleppt" value="videoconf1ppt" type="string" />
+<attribute name="uploadmoduleimg" value="videoconf1" type="string" />
+<attribute name="foldersequence" value="null" />
+<attribute name="uploadmoduleimgfolder" value="" type="string" />
+<!---
+    Can be either 2 or 4
+    But theoretically there is no limit
+ -->
+<attribute name="numberofallowedpartners" value="0" type="number" />
+
+<!--- Number of currently connected Users -->
+<attribute name="numberofpartners" value="0" type="number" />
+
+<!--- unique ID of this Stream -->
+<attribute name="streamid" value="0" type="string" />
+
+<!--- id of the current Mod in this room -->
+<attribute name="currentmodid" value="0" type="string" />
+
+<attribute name="currentlanguage" value="english" type="string" />
+
+<attribute name="objWhiteboard" value="null" />
+<attribute name="whiteboardCount" value="0" type="number" />
+<attribute name="objMessage" value="null" />
+<attribute name="VarsModeratorGeneral" value="null" />
+
+<attribute name="isConference" value="false" type="boolean" />
+
+<attribute name="statesInitValues" value="null" />
+<attribute name="salutationsInitValues" value="null" />
+<attribute name="roomTypesInitValues" value="null" />
+
+<attribute name="stdTimeOffset" value="0" type="number" />
+<attribute name="inviteMainWindow" value="null" />
+
+<!--- Audio-Video Quality Settings
+    overwritten by values from the public/config.xml 
+ -->
+<attribute name="codecType" value="h264" type="string" />
+<attribute name="framesPerSecond" value="30" type="number" />
+<attribute name="bandwidthNeededNormal" value="16384" type="number" />
+<attribute name="bandwidthNeededBest" value="32768" type="number" />
+<attribute name="camQualityNormal" value="75" type="number" />
+<attribute name="camQualityBest" value="75" type="number" />
+        
+<!--- Reference to the current active drawarea -->
+<attribute name="_drawarea" value="null" /> 
+
+<!--- Username of current user -->
+<attribute name="currentusename" value="defaultname" type="string" />
+<attribute name="user_id" value="0" type="number" />
+<attribute name="firstName" value="" type="string" />
+<attribute name="timeZoneId" value="0" type="number" />
+<attribute name="jNameTimeZone" value="" type="string" />
+<attribute name="timeZones" type="object" />
+<attribute name="timeZonesLoaded" type="boolean" value="false"/>
+<attribute name="lastName" value="" type="string" />
+<attribute name="mail" value="" type="string" />
+<attribute name="lastLogin" value="" type="string" />
+<attribute name="official_code" value="" type="string" />
+<attribute name="picture_uri" value="" type="string" />
+<attribute name="language" value="" type="string" />
+
+<!--- User porperties -->
+<attribute name="currentusercolor" value="0" type="number" />
+<attribute name="currentuserpos" value="0" type="number" />
+    
+<attribute name="currentModApply" value="null" />   
+
+<attribute name="sessionObject" value="null" />
+<attribute name="sessionId" value="" type="string" />
+
+<attribute name="syncWindow" value="null" />
+<attribute name="syncImageWindow" value="null" />
+<attribute name="syncSWFWindow" value="null" />
+<attribute name="publicSID" value="" type="string" />
+
+<!--- attributes for direct room access -->
+<attribute name="initroomid" value="0" type="number" />
+<attribute name="initroomStr" value="" type="string" />
+<attribute name="initroomtype" value="" type="string" />
+<attribute name="initdomainid" value="" type="string" />
+<attribute name="initlangid" value="1" type="number" />
+<attribute name="isinitRoomDirect" value="false" type="boolean" />
+<attribute name="isinitRoomObject" value="null" /> 
+
+<!-- attributes for direct room access via direct link -->
+<attribute name="directUserLogin" value="false" type="boolean" />
+<attribute name="directRoomId" value="1" type="number" />
+<attribute name="directRoomObj" value="null" />
+
+<!--- attributes for direct room access via remoteUser -->
+<attribute name="remoteUserLogin" value="false" type="boolean" />
+<attribute name="remoteUserSid" value="" type="string" />
+
+<!--- attributes for direct room access via remoteUser
+    This is using the advanced methods to prevent abuse
+ -->
+<attribute name="secureRemoteUserLogin" value="false" type="boolean" />
+<attribute name="secureHash" value="" type="string" />
+
+<!-- Attributes for wicket login (since it hard not to break anything)-->
+<attribute name="wicketsid" type="string" value="null"/>
+<attribute name="wicketroomid" type="number" value="0"/>
+
+<!--- skip loading of Language -->
+<attribute name="language_id" value="0" type="number" />
+<!--- application default language -->
+<attribute name="default_lang_id" value="1" type="number" />
+
+<attribute name="isResetUsername" value="false" type="boolean" />
+<attribute name="resetHash" value="" type="string" />
+    
+<attribute name="naviHeight" value="84" type="number" />    
+<attribute name="naviHeightDelta" value="84" type="number" />  
+
+<attribute name="currentrecorder" value="null" /> 
+<attribute name="currentrecorder_id" value="0" type="number" /> 
+
+<!--- 
+Holds a refernce to the current VideoCOntainer Object
+containing the VideoViews
+and some more references to temp-objects
+ -->
+<attribute name="_videocontainer" value="null" />
+<attribute name="_mymod" value="null" />
+
+<attribute name="isrtl" value="false" type="boolean" />    
+
+<!---
+    Attributes for browser panel size.
+    Those attributes are used to determine size of browser class (modules/conference/browser/conferenecBrowser.lzx)
+    in base/mainMethods.lzx.
+        2008 Apr 9 commented by onokeiji@gmail.com
+-->
+<attribute name="browserPanelWidth" value="600"/>
+<attribute name="browserPanelHeight" value="500"/>
+
+<attribute name="currentSlideNo" value="0" type="number" />
+<attribute name="currentSlideTotal" value="0" type="number" />
+<attribute name="currentSlideZoom" value="0" type="number" />
+
+<attribute name="currentUploadWindow" value="null" />
+
+<!--
+    ################################
+    Attributes for direct Moderator setup via Moodle
+ -->
+<attribute name="isMoodleRoom" value="false" type="boolean" /> 
+
+<attribute name="becomemoderator" value="false" type="boolean" />
+<attribute name="becomeSuperModerator" value="false" type="boolean" />
+
+<attribute name="moodleWwwRoot" value="" type="string" />
+<attribute name="moodleUserId" value="0" type="number" />
+<attribute name="moodlePicture" value="0" type="number" />
+
+
+<attribute name="currentRoomObj" value="null" />
+
+<attribute name="refreshSession" value="60000" type="number" />
+
+<attribute name="globalFontSize" value="11" type="number" />
+
+<attribute name="lastBroadCastingUser" value="null" />
+
+<attribute name="isBroadCasting" value="false" type="boolean" />
+<attribute name="canVideo" value="false" type="boolean" />
+
+<attribute name="currentContentView" value="null" />
+
+<!-- item to focus on after rpcErrorDialog has been shown-->
+<attribute name="focusOnItem" value="null"/>
+
+<attribute name="currentRoomObject" value="null"/>
+
+<attribute name="appointmentNotificationPopUp" value="null"/>
+
+<attribute name="conferenceBrowserIsinited" value="false" type="boolean" />
+
+<attribute name="isAllowedToScreenShare" value="false" type="boolean" />
+
+<attribute name="isAllowedToRemoteControl" value="false" type="boolean" />
+
+<attribute name="isAllowedToGiveExclusiveAudio" value="false" type="boolean" />
+
+<attribute name="roomJumpId" value="0" type="number" />
+
+<!--
+    Loads a User profile page directly instead of loading the Dashboard
+    cuser is a hash that can be found in the UserContacts Table
+ -->     
+<attribute name="cuser" value="" type="string"/>
+
+<!--
+    Indicates if the user does accept or deny a user contact request
+ -->    
+<attribute name="cuserStatus" value="none" type="string"/>
+
+<!--
+    Attribute to load a custom user calendar instead of the own one
+-->
+<attribute name="contactUser" value="0" type="number" />
+
+<attribute name="monthnames" value="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']"/> 
+
+<attribute name="dayShortNames" value="null" />
+
+<!--
+    Used in SOAP API to indicate if the user will see a pop up to enter its nickname
+ -->
+<attribute name="showNickNameDialog" value="false" type="boolean" />
+
+<!--
+    Used in SOAP API to indicate if the user logs directly into a room or into the dashboard
+ -->
+<attribute name="landingZone" value="" type="string"/>
+
+<!--
+    if the users logs in via SOAP he does not see the exit button by default
+    only if the landingZone == dashboard
+ -->
+<attribute name="destroyExitButton" value="true" type="boolean" />
+
+<attribute name="currentFileExplorer" value="null"/>
+
+<attribute name="allowRecording" value="true" type="boolean" />
+
+<!-- userdata -->
+<attribute name="sharedObject" value="null" />
+
+<attribute name="currentMicName" value="" type="string"/>
+<attribute name="currentCamName" value="" type="string"/>
+
+<attribute name="currentBaseConferenceRoom" value="null" />
+
+<attribute name="GIVE_EXCLUSIVE_AUDIO_KEY" value="123"/> <!-- F12 --> 
+<attribute name="ARRANGE_WINDOWS_KEY" value="119"/> <!-- F8 --> 
+<attribute name="MUTE_AUDIO_KEY" value="118"/> <!-- F7 --> 
+
+<!-- 
+	Indicates if the Red5 SIP Integration is enabled or not and 
+	if the SIP Dialer is shown in the conference menu
+ -->
+<attribute name="RED5_SIP_ENABLE" value="no" type="string" /> 
+
+<!-- 
+	The server side configuration of the max upload size for files
+ -->
+<attribute name="MAX_UPLOAD_SIZE" value="-1" type="string" /> 
+
+<!-- 
+	The server side configuration of the redirect.url.for.external.users
+ -->
+<attribute name="REDIRECT_URL_FOR_EXTERNAL_USERS" value="null" type="string" /> 
+
+<attribute name="currentNC" value="null" />
+
+<!-- 
+	Holds a reference to the current tooltip, if there is one
+ -->
+<attribute name="currentToolTip" value="null" />
+
+<method name="registerToolTip" args="viewInstance">
+	if (this.currentToolTip != null) {
+		this.currentToolTip.cleanHolder();
+	}
+	this.currentToolTip = viewInstance;
+</method>
+
+<method name="clearToolTip">
+	if (this.currentToolTip != null) {
+		this.currentToolTip.cleanHolder();
+		this.currentToolTip = null;
+	}
+</method>
+
+<!-- 
+	Holds a reference to the current activity list, if there is one
+ -->
+<attribute name="currentActivityList" value="null" />
+
+</library>
diff --git a/WebContent/src/base/mainDatasets.lzx b/WebContent/src/base/mainDatasets.lzx
new file mode 100644
index 0000000..9957db6
--- /dev/null
+++ b/WebContent/src/base/mainDatasets.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all datasets for main.lzx -->
+
+<library>
+
+	<method name="getServerBaseUrl">
+	<![CDATA[
+		var protocol = lz.Browser.getInitArg('protocol');
+		var host = lz.Browser.getInitArg('host');
+		var port = lz.Browser.getInitArg('port');
+		var context = lz.Browser.getInitArg('context');
+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {
+			canvas.setAttribute('isCluster', true);
+			canvas.setAttribute('rtmphostlocal', host);
+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";
+		} else {
+			var urlObject = lz.Browser.getBaseURL();
+			//If Port is Null or undefinied use port 80
+			var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
+			//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
+			var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
+			url = url + (url.slice(-1) == '/' ? '' : '/');
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
+			return url;
+		}
+	]]>
+	</method>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()">
+    <handler name="oninit">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());
+        this.doRequest();
+    </handler>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()">
+    <method name="loadTheme">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());
+        this.doRequest();
+    </method>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+</library>
diff --git a/WebContent/src/base/mainMethods.lzx b/WebContent/src/base/mainMethods.lzx
new file mode 100644
index 0000000..2050944
--- /dev/null
+++ b/WebContent/src/base/mainMethods.lzx
@@ -0,0 +1,1108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- methods for main.lzx -->
+
+<library>
+
+	<class name="baseconfmenucommand" extends="command" >
+    	<attribute name="enabled" value="true" type="boolean" />
+    	<attribute name="tipLabelId" value="0" type="number" />
+    </class>
+    
+    <class name="confmenucommand" extends="baseconfmenucommand" >
+    	<attribute name="actionCommand" value="" type="string" />
+    	<handler name="onselect" args="sel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		canvas.doActionmenu(this.actionCommand);
+    	</handler>
+    </class>
+        
+    <baseconfmenucommand id="cmd_shareDesktop" tipLabelId="1480" >
+    	<handler name="onselect" args="sel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		canvas._mymod.checkForApplyScreen("no");
+    	</handler>
+    </baseconfmenucommand>
+    
+    <confmenucommand id="cmd_applyforMod" tipLabelId="1481" actionCommand="applyForMod" />
+    
+    <confmenucommand id="cmd_applyforWhiteBoard" tipLabelId="1492" key="['control','shift','2']">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforWhiteBoard onselect",tSel);
+    		//Ask for Right to Draw on Whiteboard
+			var tDate = new Date();
+			canvas.thishib.sendMessageWithClient.sendMessage("applyForWhiteboard",tDate.getTime());
+    	</handler>
+    </confmenucommand>
+    
+    <baseconfmenucommand id="cmd_applyforA" tipLabelId="1602">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforA onselect",canvas.ismoderator,tSel);
+    		if (canvas.ismoderator) {
+				//Do directly send confirmation to share Audio/Video to SELF! so that all users get
+				//the notification and the broadcasting Bit is set for this User
+				canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+				canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+				canvas.thishib.setBroadCastingFlag.canVideo = false;
+				canvas.thishib.setBroadCastingFlag.doCall();
+			} else {
+				//Apply for Right to Share Audio/Video
+				var tDate = new Date();
+				canvas.thishib.sendMessageWithClient.sendMessage("applyForA",tDate.getTime());
+			}
+    	</handler>
+    </baseconfmenucommand>
+    <baseconfmenucommand id="cmd_applyforAV" tipLabelId="1482">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforAV onselect",canvas.ismoderator,tSel);
+    		if (canvas.ismoderator) {
+				//Do directly send confirmation to share Audio/Video to SELF! so that all users get
+				//the notification and the broadcasting Bit is set for this User
+				canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+				canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+				canvas.thishib.setBroadCastingFlag.canVideo = true;
+				canvas.thishib.setBroadCastingFlag.doCall();
+			} else {
+				//Apply for Right to Share Audio/Video
+				var tDate = new Date();
+				canvas.thishib.sendMessageWithClient.sendMessage("applyForAV",tDate.getTime());
+			}
+    	</handler>
+    </baseconfmenucommand>
+    
+    <confmenucommand id="cmd_createPoll" tipLabelId="1483" actionCommand="createPoll" />
+    <confmenucommand id="cmd_pollResults" tipLabelId="1484" actionCommand="pollResults" />
+    <confmenucommand id="cmd_checkPollVoted" tipLabelId="1485" actionCommand="checkPollVoted" />
+    <confmenucommand id="cmd_importFile" tipLabelId="1479" actionCommand="importFile" />
+    <confmenucommand id="cmd_editCamMicSettings" actionCommand="editCamMicSettings" tipLabelId="1486" /> 
+    <confmenucommand id="cmd_quit" actionCommand="quit" tipLabelId="1487" />
+    <confmenucommand id="cmd_showSipDialer" actionCommand="showSipDialer" tipLabelId="1488" />
+    
+    <confmenucommand id="cmd_invitation" actionCommand="invitation" tipLabelId="1489" /> 
+    <confmenucommand id="cmd_editWhiteboardDefault" actionCommand="editWhiteboardDefault" tipLabelId="1490" /> 
+    
+    <!-- 
+    <confmenucommand id="cmd_coBrowser" actionCommand="browser_open" key="['control','b']"/> 
+     -->
+   
+    <confmenucommand id="cmd_exportFilePNG" onselect="canvas.doWhiteboardActionmenu('exportFilePNG')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileJPG" onselect="canvas.doWhiteboardActionmenu('exportFileJPG')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileSVG" onselect="canvas.doWhiteboardActionmenu('exportFileSVG')" tipLabelId="1489" />
+    <!-- 
+    <confmenucommand id="cmd_exportFilePDF" onselect="canvas.doWhiteboardActionmenu('exportFilePDF')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileTIF" onselect="canvas.doWhiteboardActionmenu('exportFileTIF')" tipLabelId="1489" />
+     -->
+    
+    <attribute name="colorArray" value="null" />
+    
+    <method name="getColorForUser">
+    	<![CDATA[
+    	   var colorArray = [0x92E8A4,0xC2F1FF,0xFFFCAE,0xE8C792,0xFF8073,
+                            0xE8DB87,0xAFFFB8,0xBED4FF,0xE0BBE8,0xFFBBA5];
+    	   return colorArray[Math.round(Math.random()*10)];
+    	]]>
+    </method>
+    
+    <method name="remoteLogWrite" args="message">
+    	if ($debug) Debug.write(message);
+    	var remoteLog = new lz.dataset();
+    	remoteLog.setQueryType("POST");
+    	remoteLog.setAttribute("src", canvas.getUrl() + "remotelog.upload");
+    	remoteLog.setQueryParam("message", message);
+    	remoteLog.setQueryParam("sid", canvas.sessionId);
+    	remoteLog.doRequest();
+    </method>
+    
+    <method name="getHttpHost">
+   	<![CDATA[
+    	if (canvas.httphostlocal != null && canvas.httphostlocal.length > 0) {
+			return canvas.httphostlocal;
+		}
+		return canvas.rtmphostlocal;
+	]]>
+    </method>
+        
+	<method name="getUrl">
+	<![CDATA[
+		return canvas.protocol + '://' + getHttpHost()
+			+ ':' + canvas.red5httpport + canvas.httpRootKey;
+	]]>
+	</method>
+        
+	<method name="getServicesUrl">
+	<![CDATA[
+		return getUrl() + 'services/';
+	]]>
+	</method>
+
+	<method name="getTestingUrl">
+	<![CDATA[
+		return getUrl() + '?swf=networktesting' + ($debug ? 'debug' : '') + '.swf10.swf';
+	]]>
+	</method>
+
+	<method name="getAppBaseUrl">
+	<![CDATA[
+		return getUrl() + "swf";
+	]]>
+	</method>
+
+	<method name="getScreenSharingUrl">
+	<![CDATA[
+		var organisation_id = (hib.currentdomainObj != null && hib.currentdomainObj.organisation_id != null)
+			? hib.currentdomainObj.organisation_id : 1;
+		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", hib.userobject, hib.currentdomainObj);
+		
+		var appBase = canvas.getUrl();
+		if ($debug) Debug.write("appBase=" + appBase);
+		var downloadurl = appBase + 'screen.upload?'
+			+'rtmphostlocal=' + canvas.getHttpHost()
+			+'&baseurl=' + escape(appBase)
+			+'&domain=' + hib.conferencedomain
+			+'&organization_id=' + organisation_id
+			+'&sid=' + canvas.sessionId
+			+'&connectionType=' + canvas.thishib.getProtocol()
+			+'&port=' + canvas.thishib.getPort()
+			+'&publicSID=' + canvas.publicSID
+			+'&languageAsString=' + hib.userlang;
+		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", downloadurl); 
+		return downloadurl;
+	]]>
+	</method>
+	
+    <method name="myinit">
+        <![CDATA[
+        canvas.mediaerrortimeout = 30000;
+        canvas.medialoadtimeout = 30000;
+        
+        if($debug) Debug.write("main.lzx/config.xml ondata",this);
+        
+        //Set Config-values by public/config.xml, see comments on public/config.xml
+        if (!canvas.isCluster) {
+        	this.setAttribute('rtmphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/rtmphostlocal/text()'));
+        }   
+        this.setAttribute('rtmpport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpport/text()')));  
+        this.setAttribute('rtmpsslport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpsslport/text()'))); 
+        
+        var userSSLString = canvas.myConfigSet.getPointer().xpathQuery('config/useSSL/text()');
+        if ($debug) Debug.write("userSSLString",userSSLString)
+        if (userSSLString == "yes") {
+            this.setAttribute('useSSL',true);
+        }
+        
+        this.setAttribute('red5httpport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/red5httpport/text()')));
+        
+        this.setAttribute('currentappname',canvas.myConfigSet.getPointer().xpathQuery('config/currentappname/text()'));  
+        this.setAttribute('currentappnameurl',canvas.myConfigSet.getPointer().xpathQuery('config/currentappnameurl/text()'));  
+        this.setAttribute('currentappnamebugurl',canvas.myConfigSet.getPointer().xpathQuery('config/currentappnamebugurl/text()'));
+        this.setAttribute('loudnessAcitviation',canvas.myConfigSet.getPointer().xpathQuery('config/loudnessAcitviation/text()'));
+        this.setAttribute('webAppRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/webAppRootKey/text()'));
+        this.setAttribute('showWindowEffect',canvas.myConfigSet.getPointer().xpathQuery('config/showWindowEffect/text()'));
+        this.setAttribute('firstdayinweek',canvas.myConfigSet.getPointer().xpathQuery('config/firstdayinweek/text()'));
+        this.setAttribute('showRecording',canvas.myConfigSet.getPointer().xpathQuery('config/showRecording/text()'));
+        
+        //old menubar is not active anymore
+        //this.setAttribute('showmodernWhiteBoard',canvas.myConfigSet.getPointer().xpathQuery('config/showmodernWhiteBoard/text()'));
+        
+        //Audio-Video-Settings
+        this.setAttribute('codecType',canvas.myConfigSet.getPointer().xpathQuery('config/codecType/text()'));
+        this.setAttribute('framesPerSecond',Number(canvas.myConfigSet.getPointer().xpathQuery('config/framesPerSecond/text()')));  
+        this.setAttribute('bandwidthNeededNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededNormal/text()')));  
+        this.setAttribute('bandwidthNeededBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededBest/text()')));  
+        this.setAttribute('camQualityNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityNormal/text()')));  
+        this.setAttribute('camQualityBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityBest/text()')));  
+        
+        this.setAttribute('defaultWhiteboardWidth',Number(canvas.myConfigSet.getPointer().xpathQuery('config/defaultWhiteboardWidth/text()')));  
+        this.setAttribute('defaultWhiteboardHeight',Number(canvas.myConfigSet.getPointer().xpathQuery('config/defaultWhiteboardHeight/text()')));  
+        
+        
+        this.setAttribute('moderatorModuleUser',canvas.myConfigSet.getPointer().xpathQuery('config/moderatorModuleUser/text()'));  
+        this.setAttribute('moderatorModuleRoom',canvas.myConfigSet.getPointer().xpathQuery('config/moderatorModuleRoom/text()'));  
+        
+        this.setAttribute('dashboardModuleStartScreen',canvas.myConfigSet.getPointer().xpathQuery('config/dashboardModuleStartScreen/text()'));  
+        this.setAttribute('dashboardModuleCalendar',canvas.myConfigSet.getPointer().xpathQuery('config/dashboardModuleCalendar/text()'));  
+        this.setAttribute('conferenceRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/conferenceRoomModule/text()'));  
+        this.setAttribute('restrictedRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/restrictedRoomModule/text()'));  
+        this.setAttribute('interviewRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/interviewRoomModule/text()'));  
+        this.setAttribute('recordModule',canvas.myConfigSet.getPointer().xpathQuery('config/recordModule/text()'));
+          
+        this.setAttribute('httpRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/httpRootKey/text()'));
+        this.setAttribute('httphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/httphostlocal/text()'));
+        this.setAttribute('protocol',canvas.myConfigSet.getPointer().xpathQuery('config/protocol/text()'));  
+        this.setAttribute('proxyType',canvas.myConfigSet.getPointer().xpathQuery('config/proxyType/text()'));
+
+		//set user color
+		canvas.currentusercolor = canvas.getColorForUser();
+
+        var lc_SID = lz.Browser.getInitArg('lc_SID');
+        
+        if($debug) Debug.write("lc_SID: ", lc_SID);
+        
+        if (lc_SID == undefined) {
+        	new lz.errorPopup(canvas,{'error':'You are loading the wrong SWF, there is no lz_SID given'});
+        	return;
+        }
+        
+        
+
+        this.setAttribute('lc_SID', lc_SID);
+        this.setAttribute('vid_lc_name', this.lc_SID + "__videoLC");
+        this.setAttribute('rtmp_lc_name', this.lc_SID + "__rtmpLC");
+        this.setAttribute('videoComp_lc_name', this.lc_SID + "__streamLC");
+        this.setAttribute('videoComp_lc_callback_name', this.lc_SID + "__streamLC_cback");
+
+        var videoComp_lc = new LocalConnection();
+        videoComp_lc.connect(this.videoComp_lc_name);
+        this.setAttribute('videoComp_lc', videoComp_lc);
+        
+        var t = this;
+    	canvas.videoComp_lc.regExpResult = function(tId,tResult) {
+      		t.regExpResult(tId,tResult);
+        }
+        canvas.videoComp_lc.remoteLogWrite = function(message) {
+        	canvas.remoteLogWrite(message);
+        }
+        canvas.videoComp_lc.exitRoom = function(confirm) {
+            if ($debug) Debug.write("confirm exitRoom:", confirm);
+            if (confirm) {
+	            if ($debug) Debug.write("logicalRoomLeave: ", canvas.thishib.connected);
+	            if (canvas.thishib.connected) {
+            		logicalRoomLeave.doCall();
+            	} else {
+            		canvas.doActionmenu('quit');
+            	}
+            }
+        }
+    
+        mainBaseText.setAttribute('text',canvas.currentappname);
+        var cleanUrl = _url;
+        
+        var hasParams = _url.indexOf("?");
+        if (hasParams != -1) {
+            cleanUrl = _url.substr(0, hasParams);
+        }
+        
+        if ($debug) Debug.write("_url ",_url,cleanUrl);
+        var doubleSlash = cleanUrl.indexOf("//");
+        var isNotPort80 = cleanUrl.indexOf(":", doubleSlash+2);
+        if ($debug) Debug.write("isNotPort80: ",isNotPort80,doubleSlash);
+        if (isNotPort80!=-1){
+            //Debug.write("isNotPort80: ",doubleSlash+2, _url.indexOf(":", doubleSlash+2)-doubleSlash-2);
+            var server = cleanUrl.substr(doubleSlash+2, _url.indexOf(":", doubleSlash+2)-doubleSlash-2); 
+        } else {
+            var server = cleanUrl.substr(doubleSlash+2, _url.indexOf("/", doubleSlash+2)-doubleSlash-2); 
+        }
+        
+        if ($debug) Debug.write("this zielnr: ",this,server);
+        
+        this.setAttribute('rtmphost',server);
+    
+        if (this.rtmphostlocal.length==0){
+            this.setAttribute('rtmphostlocal',server);
+        }
+        
+        //Check for Invitation
+        var invitationHash = lz.Browser.getInitArg('invitationHash');
+        
+        if ($debug) Debug.info("###################### -1 ");
+        if ($debug) Debug.info("invitationHash :: ",invitationHash);
+        
+        if (invitationHash != undefined){
+            canvas.isinitRoomDirect = true;
+            canvas.invitationHash = invitationHash;
+        }
+        
+        var secureHash = lz.Browser.getInitArg('secureHash');
+        if (secureHash != undefined){
+            canvas.secureRemoteUserLogin = true;
+            canvas.secureHash = secureHash;
+        }
+        
+        if ($debug) Debug.info("###################### -2 ");
+        
+        //sid=fe9ea55284e0b23991b1c1089b2c8f64&roomid=1
+        var sid = lz.Browser.getInitArg('sid');
+        var initroomid = lz.Browser.getInitArg('roomid');
+        if (sid != undefined && initroomid != undefined){
+            canvas.remoteUserLogin = true;
+            canvas.initroomid = initroomid;
+            canvas.remoteUserSid = sid;
+        }
+        
+        var directRoomId = lz.Browser.getInitArg('directRoomId');
+        if (directRoomId != undefined) {
+            canvas.directUserLogin = true;
+            canvas.directRoomId = directRoomId;
+        }
+        
+        var language = lz.Browser.getInitArg('language');
+        if (language != undefined) {
+            canvas.language_id = Number(language);
+        }
+    
+        //check for reset password
+        var hash = lz.Browser.getInitArg('hash');
+        if (hash!=undefined){
+            canvas.isResetUsername = true;
+            canvas.resetHash = hash;        
+        }
+        
+        var cuserItem = lz.Browser.getInitArg('cuser');
+        if (cuserItem!=undefined){
+            canvas.cuser = cuserItem;  
+            
+            //Lookup additional actions
+            var tAccept = lz.Browser.getInitArg('tAccept');
+            if (tAccept != undefined) {
+                canvas.cuserStatus = tAccept;
+            } else {
+                canvas.cuserStatus = "none";
+            }
+            
+        }
+        
+        var moodleRoom = lz.Browser.getInitArg('moodleRoom');
+        var becomemoderator = lz.Browser.getInitArg('becomemoderator');
+        
+        if (becomemoderator != undefined) {
+            if (becomemoderator == "2"){
+                canvas.becomemoderator = true;
+            } else {
+                canvas.becomemoderator = false;
+            }
+        }
+        
+        if (moodleRoom != undefined){
+            canvas.isMoodleRoom = true;
+            
+            var moodleWwwRoot = lz.Browser.getInitArg('wwwroot');
+            var moodleUserId = lz.Browser.getInitArg('user_id');
+            var moodlePicture = lz.Browser.getInitArg('picture');
+            
+            if (moodleWwwRoot != undefined) {
+                canvas.moodleWwwRoot = moodleWwwRoot;
+            }
+            if (moodleUserId != undefined) {
+                canvas.moodleUserId = Number(moodleUserId);
+            }
+            if (moodlePicture != undefined) {
+                canvas.moodlePicture = moodlePicture;
+            }
+        }
+        
+        var scopeRoomId = lz.Browser.getInitArg('scopeRoomId');
+        if (scopeRoomId != undefined){
+            hib.userScope = scopeRoomId;
+        }
+        
+       	canvas.setAttribute('wicketsid', null);
+        var wicketsid = lz.Browser.getInitArg('wicketsid');
+        var wicketroomid = lz.Browser.getInitArg('wicketroomid');
+        if (wicketsid != undefined && wicketroomid != undefined && !isNaN(wicketroomid)) {
+        	canvas.setAttribute('wicketsid', wicketsid);
+        	canvas.setAttribute('wicketroomid', Number(wicketroomid));
+        	hib.userScope = wicketroomid;
+        }
+        this.setBaseColors();
+    
+        //Debug.write("rtmphostlocal,rtmphost: ",canvas.rtmphostlocal,canvas.rtmphost); 
+        var src = hib.getUrl();
+        
+        canvas.thishib.setAttribute('src',src);
+        canvas.thishib.loaderVar = new lz.autoLoader(canvas);
+        canvas.thishib.loaderVar._src.setAttribute('text',src);
+        canvas.thishib.connect();
+        ]]>
+    </method>
+    
+	<netRemoteCallHib name="logicalRoomLeave" funcname="logicalRoomLeave" remotecontext="$once{ canvas.thishib }" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("############# logicalRoomLeave: ",value);
+			canvas.currentBaseConferenceRoom._screenSharingAdapter.closeAllScreenSharings();
+			if (canvas.appointmentNotificationPopUp != null) {
+				canvas.appointmentNotificationPopUp.destroy();
+			}
+			canvas.doActionmenu('quit');
+		</handler>
+	</netRemoteCallHib>
+	
+    <method name="getLabelName" args="id">
+        //if($debug) Debug.write("main.lzx/getLabelName()",id);
+        return getLabelTag(id);
+    </method>
+    
+    <!--
+        exportFilePNG exportFileJPG exportFilePDF exportFileSVG exportFileTIF
+     -->
+     
+    <method name="doWhiteboardActionmenu" args="action">
+        if (action == "exportFilePNG") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","png");
+        } else if (action == "exportFileJPG") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","jpg");
+        } else if (action == "exportFilePDF") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","pdf");
+        } else if (action == "exportFileSVG") {
+            canvas._drawarea.confirmSaveAsImageExport("image");
+        } else if (action == "exportFileTIF") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","tif");
+        }
+    </method>
+
+	<method name="quit">
+		canvas.videoComp_lc.exitRoom = null;
+		canvas.thishib.src = null;
+		canvas.thishib.reconnectionAction = false;
+		canvas.thishib.reconnectAfterRoomleft = false;
+		canvas.thishib.counterror = 100;
+		canvas.thishib.disconnect();
+		canvas.thishib._nc.close();
+		flash.external.ExternalInterface.call("roomExit");
+	</method>
+	
+	<!---
+		Actions connected to the shortcuts
+	 -->
+    <method name="doActionmenu" args="stringSub">
+        <![CDATA[
+            if($debug) Debug.write("doActionmenu: ",stringSub);
+            if (canvas._conferencemenu.visibility == 'visible'){
+            	 if (stringSub == "invitation") {
+				    canvas.inviteMainWindow.setAttribute('visibility', 'visible');
+			    } else if (stringSub=='editWhiteboardDefault') {
+                    new lz.editWhiteboardDefault(canvas.main_content._content.inner);
+                } else if (stringSub=='createPoll') {
+                    new lz.createPollWin(canvas.main_content._content.inner);
+                } else if (stringSub=='pollResults') {
+                    this.getVotes.doCall();
+                } else if (stringSub=='checkPollVoted') {
+                    this.checkHasVoted.doCall();
+                } else if (stringSub=='importFile') {
+                    new lz.uploadWindowExplorer(canvas.main_content._content.inner,{
+                            x:60,uploadmodule:canvas.uploadmoduleimg,
+                            parentFolderId:0,
+                            isOwner:false,
+                            fileExplorerRef:null,
+                            isOnlyImage:true,
+                            servletName:'file.upload'
+                        });
+                } else if (stringSub=='applyForMod') {
+                    if ($debug) Debug.info("Apply For Mod through doActionmenu");
+                    //new lz.applyForModeration(canvas.main_content._content.inner);
+                    canvas.thishib.applyForModeration.doCall();
+                } else if (stringSub=='editCamMicSettings') {
+                    canvas._videocontainer._videoviewcontent.changeDevice();
+                } else if (stringSub=='showSipDialer') {
+                    new lz.sipDialer(canvas.main_content._content.inner);
+                } else if (stringSub=='quit') {
+					canvas.quit();
+                } else if( stringSub == "browser_open" ){
+                    var browserPanelWidth  = canvas.browserPanelWidth;
+                    var browserPanelHeight = canvas.browserPanelHeight;
+
+                    if ($debug) Debug.write( "is browser[open] ? ", canvas.main_content._content.inner.conferenceBrowser );
+                    if ($debug) Debug.write( "is browser[browserPanelWidth] ? ", browserPanelWidth );
+                    if ($debug) Debug.write( "is browser[browserPanelHeight] ? ", browserPanelHeight );
+
+                    if( !canvas.conferenceBrowserIsinited ){
+                        new lz.conferenceBrowser( canvas.main_content._content.inner,{
+                                                         name:'conferenceBrowser',y:30,
+                                                         width:canvas.width-220, 
+                                                         height:canvas.height-100,
+                                                         width:browserPanelWidth, 
+                                                         height:browserPanelHeight
+                                                     });
+                    } else{
+                    with( canvas.main_content._content.inner ){
+                            conferenceBrowser.htmlviewer.setVisible( true );
+                            conferenceBrowser.setVisible( true );
+                    }
+                }
+             } else if( stringSub == "browser_close" ){
+                if ($debug) Debug.write( "is browser[close] ? ", canvas.main_content._content.inner.conferenceBrowser );
+                with( canvas.main_content._content.inner ){
+                    if( conferenceBrowser  != undefined ){
+                            conferenceBrowser.htmlviewer.setVisible( false );
+                            conferenceBrowser.setVisible( false );
+                    }
+                }
+            }
+          }
+        ]]>
+    </method> 
+    
+    <method name="startBrowser" args="objMessage">
+        <![CDATA[
+            if( !canvas.conferenceBrowserIsinited ){
+                        if ($debug) Debug.write( "if this" );
+                new lz.conferenceBrowser(canvas.main_content._content.inner,{
+                                             name:'conferenceBrowser',y:30,
+                                             width:canvas.width-220, 
+                                             height:canvas.height-100,
+                                             initedByUser:false,
+                                             initURL:objMessage[1]
+                                        });
+            } else{Debug.write( "else this" );
+                with( canvas.main_content._content.inner ){
+                        conferenceBrowser.htmlviewer.setVisible( true );
+                        conferenceBrowser.setVisible( true );
+                        conferenceBrowser.newBrowserURL(objMessage[1]);
+                }
+            }
+        ]]>
+    </method>   
+    
+    <method name="closeBrowser" args="objMessage">
+        <![CDATA[
+            if( canvas.conferenceBrowserIsinited ){
+                with( canvas.main_content._content.inner ){
+                        conferenceBrowser.close();
+                }
+            }
+        ]]>
+    </method>
+    
+    <netRemoteCallHib name="getVotes" funcname="pollservice.getVotes" remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            new lz.resultPollWin(canvas.main_content._content.inner, {roomPoll: value});
+        </handler>   
+    </netRemoteCallHib>  
+        
+    <netRemoteCallHib name="checkHasVoted" funcname="pollservice.checkHasVoted" remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                      if (value==1){
+                        parent.getPoll.doCall();
+                      } else if (value==-1){
+                        new lz.messageWin(canvas.main_content._content.inner,{labeliderror:31});
+                      } else if (value==-2){
+                            new lz.messageWin(canvas.main_content._content.inner,{labeliderror:41});
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="getPoll" funcname="pollservice.getPoll" remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if (value!=null){
+                    if ($debug) Debug.write(":: getPoll: ", value);
+                     new lz.answerPoll(
+                        canvas.main_content._content.inner
+                        , {
+                            createdBy: value.createdBy.login
+                            , pollDate: value.created
+                            , pollQuestion: value.pollQuestion
+                            , pollTypeId: value.pollType.pollTypesId
+                            , roomPollAnswerList: value.roomPollAnswerList
+                            , roomPollId: value.roomPollId
+                            , roomScopeName: value.roomScopeName
+                        }
+                     );
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+    
+    <method name="setRoomValues" args="roomTypeId,roomId,roomObj">
+    
+        if ($debug) Debug.warn("setRoomValues ",roomTypeId,roomId,roomObj);
+        if (roomTypeId==1){
+                canvas.isConference = true;
+            } else {
+                canvas.isConference = false;
+        }
+        
+        //this is needed cause in the rpc-method *getCurrentModeratorList* we check if its roomtype_id == 3
+        //and if roomtype_id == 3 we will not show any *There is no Moderator* Warning Dialog
+        canvas.currentRoomObject = roomObj;
+
+        hib.currentroomid = roomId;
+        if (roomObj!=null){
+            if (roomTypeId==1){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.conferenceRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==2){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:roomObj});
+                new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+                 
+            } else if (roomTypeId==3){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==4){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.interviewRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==5){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.customRoomModule,roomObj:roomObj});
+                 
+            } 
+        }
+    </method>
+    
+	<method name="roomClosed">
+	    <![CDATA[
+	        if ($debug) Debug.write("canvas.currentRoomObject ",canvas.currentRoomObject);
+	        new lz.redirectBox(canvas,{redirectURL:canvas.currentRoomObject.redirectURL});
+	    ]]>
+	</method>
+                 
+        
+
+	
+	<method name="parseLanugageObject" args="obj">
+	
+	    ////Debug.write('parseLanugageObject: ',obj);
+	    ////Debug.write('parseLanugageObject: ',obj.childNodes);
+	    <![CDATA[
+	    var t = new Array();
+	    for (var i=0;i<obj.childNodes.length;i++){
+	        for (var k=0;k<obj.childNodes[i].childNodes.length;k++){
+	            ////Debug.write(obj.childNodes[i].childNodes[k]);
+	            var t2 = new Array();
+	            t2[obj.childNodes[i].childNodes[k].childNodes[0].nodeName]=obj.childNodes[i].childNodes[k].childNodes[0].childNodes[0].data;
+	            t2[obj.childNodes[i].childNodes[k].childNodes[1].nodeName]=obj.childNodes[i].childNodes[k].childNodes[1].childNodes[0].data;
+	            t.push(t2);
+	        }
+	    }
+	    setLabelObject(t);
+	    canvas.initScreen();
+	    //Debug.write(t);
+	    ]]>
+	</method>
+	
+	<method name="addBrowserTabHistory" args="value">
+	    <![CDATA[
+	    //Debug.write("addBrowserTabHistory: ",value);
+	    _browserhistory.addItem(value);
+	    this.browserTabHistory.push(value);
+	    ]]>
+	</method>
+	  
+	<!---
+	@doc The function does compare the new moderator list with the old and prepares the list 
+		the removeModeratorList is used in the performance optimized user list of the restricted 
+		room type to re-render the list items only if really something has changed in any 
+		of the user list items
+	 -->
+	<method name="analyzeModerationList" args="newList">
+	    <![CDATA[
+	    
+	       canvas.newModeratorList = new Array();
+	       canvas.removeModeratorList = new Array();
+	       
+	       if (canvas.currentModeratorList != null) {
+	           for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                canvas.currentModeratorList[i].found = false;
+	           }
+	       
+	           for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                
+	                for (var k=0;k<newList.length;k++) {
+	                    if (newList[k].publicSID == canvas.currentModeratorList[i].publicSID) {
+	                        canvas.currentModeratorList[i].found = true;
+	                    }
+	                }
+	            }
+	        }
+	        
+	        for (var k=0;k<newList.length;k++) {
+	            newList[k].found = false;
+	        }
+	       
+	        for (var k=0;k<newList.length;k++) {
+	        	if (canvas.currentModeratorList != null) {
+	                for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                    if (newList[k].publicSID == canvas.currentModeratorList[i].publicSID) {
+	                        newList[k].found = true;
+	                    }
+	                }
+	        	}
+	        }
+	        
+	        for (var k=0;k<newList.length;k++) {
+	            if (!newList[k].found) {
+	                canvas.newModeratorList.push(newList[k]);
+	            }
+	        }
+	        
+	        if (canvas.currentModeratorList != null) {
+	            for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                
+	                if (!canvas.currentModeratorList[i].found) {
+	                    canvas.removeModeratorList.push(canvas.currentModeratorList[i])
+	                }
+	            }
+	        }
+	        
+	        if ($debug) Debug.write("newModeratorList :: ",canvas.newModeratorList);
+	        if ($debug) Debug.write("removeModeratorList :: ",canvas.removeModeratorList);
+	    ]]>
+	</method>
+	
+	<!---
+		Updates the "ismoderator" flag
+		the setAttribute method will broadcast an event to all event listeners that 
+		did subscribe using the "onismoderator" handler with reference to canvas !
+		For example in the userlist's of the roomtypes
+	 -->
+	<method name="updateModerationFlag">
+	    <![CDATA[
+	        if ($debug) Debug.write("updateModerationFlag",canvas.currentModeratorList);
+	        var isCurrentModerator = false;
+	        for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	            var item = canvas.currentModeratorList[i];
+	            if (canvas.publicSID == item.publicSID) {
+	                isCurrentModerator = true;
+	            }
+	        }
+	        
+	        //Only send this event if the current user moderators status changes
+	        if (isCurrentModerator != this.ismoderator) {
+		        canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateModerationFlag", [isCurrentModerator]);
+	        }
+	        
+	        // do always spread this event, we need to broadcast the "onismoderator" event
+	        // so that we can update the status of other users in the user list
+	        this.setAttribute('ismoderator',isCurrentModerator);
+	    ]]>
+	</method> 
+	
+	<!---
+		Checks if a certain publicSID is a moderator
+	 -->
+	<method name="getIsModeratorByPublicSID" args="publicSID">
+	    <![CDATA[
+	        for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	            var item = canvas.currentModeratorList[i];
+	            if (publicSID == item.publicSID) {
+	                return true;
+	            }
+	        }
+	        return false;
+	    ]]>
+	</method>
+	 
+	<!---
+		Sets the flags isAllowedToDraw, isAllowedToScreenShare, isAllowedToRemoteControl 
+		and broadcasts the three rights to SWF10 container
+	 -->
+	<method name="setDrawAllowStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("drawAllowStatus changes ###### ");
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("isAllowedToDraw",roomClientObj.canDraw);
+	            canvas.setAttribute("isAllowedToScreenShare",roomClientObj.canShare);
+	            canvas.setAttribute("isAllowedToRemoteControl",roomClientObj.canRemote);
+	            canvas.sendViaLocalConnection(canvas.vid_lc_name, "setDrawAllowStatus", [roomClientObj.canDraw, roomClientObj.canShare, roomClientObj.canRemote]);
+	        }
+	    ]]>
+	</method>
+	
+	<!---
+		Sets the flag for the isAllowedToGiveExclusiveAudio status and broadcasts it to the 
+		SWF10 container
+	 -->
+	<method name="setExclusiveAudioAllowStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("giveExclusiveAudioStatus changes ###### ");
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("isAllowedToGiveExclusiveAudio",roomClientObj.canGiveAudio);
+	            canvas.sendViaLocalConnection(canvas.vid_lc_name, "setExclusiveAudioAllowStatus", [roomClientObj.canGiveAudio]);
+	        }
+	    ]]>
+	</method>
+	
+	<method name="setMuteStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("setMuteStatus changes ###### ",roomClientObj.micMuted);
+	        //Check for self status
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("micMuted",roomClientObj.micMuted);
+	        }
+	        
+	        canvas._videocontainer.updateMuteStatusVideoView(roomClientObj);
+	        
+	        //Notify all Listeners for change of the item
+	        canvas.setAttribute("micMutedStatusChangedItem",roomClientObj);
+	    ]]>
+	</method>
+	
+	<method name="addFolderSequence" args="foldername">
+	    <![CDATA[
+	    this.uploadmoduleimgfolder = '/';
+	    this.uploadmoduleimgfolder += foldername;
+	    this.setAttribute('uploadmoduleimgfolder',this.uploadmoduleimgfolder);
+	    ]]>
+	</method>
+	    
+	    
+	<!-- country validation -->
+	<method name="validateCountry" args="str">
+	    ////Debug.write("validateCountry: ",str);
+	    str = str.toLowerCase();
+	    <![CDATA[
+	        if (str.length!=0){
+	            var a = new Array();
+	            for (var i=0;i<canvas.statesInitValues.length;i++){
+	                var st = canvas.statesInitValues[i].name.toLowerCase();
+	                if (st.startsWith(str))a.push(canvas.statesInitValues[i]);
+	                //this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+	            }
+	            return a;
+	        }
+	    ]]> 
+	</method>
+	    
+	<method name="getCountryRecord" args="id">
+	    return canvas.statesInitValues[id];
+	</method>
+	    
+	<handler name="onmousewheeldelta" reference="lz.Keys" args="d">
+	    var obj = getCurrentMouseWheelObject();
+	    ////Debug.write("onmousewheeldelta 12: ",d,obj);
+	    <![CDATA[
+	        if (obj!=null) {
+	            obj.step(-d);
+	        }
+	    ]]>
+	</handler>    
+	
+	<method name="reverseWordingsBySplit" args="str">
+	    <![CDATA[
+	        var words_arr = str.split( " " ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	        {
+	            str += words_arr[ words_arr.length - i - 1 ];
+	            if (words_arr.length != 1) {
+	                str += " ";
+	            }
+	        }
+	        return str;
+	        
+	    ]]>
+	</method> 
+	
+	<method name="reverseAll" args="str">
+	    <![CDATA[
+	        var words_arr = str.split( "" ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	        {
+	            str += words_arr[ words_arr.length - i - 1 ];
+	            
+	        }
+	        return str;
+	        
+	    ]]>
+	</method> 
+	    
+	<method name="reverseWords" args="str">
+	    <![CDATA[
+	        if ( str == "" || str == null ) return ""; // undefined
+	        // first char indicates the main directive of str (rtl/ltr)
+	        if ( isLTR( str.charCodeAt( 0 ) ) ) return str; // english or number
+	        var words_arr = str.split( "" ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	            str += words_arr[ words_arr.length - i - 1 ];
+	        return str;
+	    ]]>
+	</method>
+	    
+	<method name="isLTR" args="c">
+	    <![CDATA[
+	        return ( c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 );
+	    ]]>
+	</method>
+	
+	<method name="isHEB" args="c">
+	    <![CDATA[
+	        return ( c >= 224 && c <= 250 );
+	    ]]>
+	</method>    
+	
+	<method name="setTextAlign" args="obj,type">
+	    switch ( type ) {
+	        case "left" :
+	            obj.setX( 0 );
+	        break;
+	        case "center" :
+	            obj.setX( this.parent.width / 2 - this.getTextWidth() / 2 );
+	        break;
+	        case "right" :
+	            obj.setX( this.parent.width - this.getTextWidth() );
+	        break;
+	    }
+	</method>  
+	
+	<method name="initSharedObject">
+	    if (canvas.sharedObject == null) {
+	        if($debug) Debug.write("canvas.initSharedObject sharedObject IS null");
+	        canvas.sharedObject = new lz.sharedObject();
+	        canvas.sharedObject.getLocal('userdata');
+	    }
+	</method>
+	
+	<method name="getUserData">
+	    canvas.initSharedObject();
+	    var g = canvas.sharedObject.getData('userdata');
+	    if (g==null) {
+	        if($debug) Debug.write("sharedObject.getData IS null");
+	        g = new Array();
+	    }
+	    return g;
+	</method>
+	
+	<method name="setUserData" args="g">
+	    canvas.initSharedObject();
+	    canvas.sharedObject.setData('userdata', g);
+	    canvas.sharedObject.flush();
+	</method>
+	
+	<attribute name="regExpCounter" value="0" type="number" />
+	<attribute name="regExpResultArray" value="null" />
+	
+	<method name="doRegExpCheck" args="fieldValue,regExpV">
+		this.regExpCounter = this.regExpCounter +1;
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "regExpTest", [fieldValue, regExpV, this.regExpCounter]);
+		return this.regExpCounter;
+	</method>
+	
+	<method name="regExpResult" args="tId,tResult">
+		if (this.regExpResultArray == null) {
+			this.regExpResultArray = new Array();
+		}
+		this.regExpResultArray[tId] = tResult;
+		if ($debug) Debug.write("regExpResult ",tId,tResult);
+	</method>
+	
+	<method name="checkRegExpResult" args="tId">
+		return this.regExpResultArray[tId];
+	</method>
+	
+	
+	<method name="getThemeImage" args="tName">
+		//if ($debug) Debug.write("load Image by Name: ",tName);
+		var tPath = canvas.mainTheme.getPointer().xpathQuery("theme/resource[@name='"+tName+"']/@src");
+		//if ($debug) Debug.write("tPath "+tPath);
+		if (tPath == null) {
+			if ($debug) Debug.warn("getThemeImage - No Image found for config: ",tName);
+		}
+		return tPath;
+	</method>
+	
+	<method name="getThemeColor" args="tColor">
+		//if ($debug) Debug.write("load Color by Name: ",tColor);
+		var tResColor = canvas.mainTheme.getPointer().xpathQuery("theme/color[@name='"+tColor+"']/@value");
+		//if ($debug) Debug.write("tColor "+tColor);
+		if (tResColor == null) {
+			if ($debug) Debug.warn("getThemeColor - No Color found for config: ",tColor);
+		}
+		return tResColor;
+	</method>
+	
+	<method name="setBaseColors">
+		defaultstyle.setAttribute("basecolor",canvas.getThemeColor('basebgcolorizer'));
+		itemStyle.setAttribute("basecolor",canvas.getThemeColor('basebgcolorizer'));
+		menuStyle.setAttribute("basecolor",canvas.getThemeColor('styleMenuBarBaseColor'));
+		_conferencemenu.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+		_mainbgcontentNavi.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+		main_content.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+	</method>
+
+	<method name="getPictureUrl" args="pictureuri,extraParams">
+	<![CDATA[
+		var pUri = (pictureuri == null || pictureuri.length == 0) ? "d.jpg" : pictureuri;
+		var downloadurl = pUri;
+		if (!pUri.startsWith("http://") && !pUri.startsWith("https://")) {
+			pUri = "_profile_" + pUri;
+			
+			downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=' + pUri
+				+ '&parentPath=&room_id=&r=' + (new Date()).getTime()
+				+ extraParams + '&sid='+canvas.sessionId;
+		}
+		if($debug) Debug.write("getPictureUrl/downloadurl ", downloadurl);
+		return downloadurl;
+	]]>
+	</method>
+		
+	<method name="sendViaLocalConnection" args="lc_name,methodName,tArray">
+		var so:SharedObject = SharedObject.getLocal("__getObjectSizeHelper");
+		so.data.o = tArray;
+		var size:Number = so.getSize();
+		so.clear();
+		if (size > 35000) {
+			if ($debug) Debug.warn("Too big object being sent via localConnection ", size); //,tArray
+			return;
+		}
+		//if ($debug) Debug.info("sendViaLocalConnection ",lc_name,methodName); //,tArray
+		if (tArray == null || tArray.length == 0) {
+			canvas.lc.send(lc_name,methodName);
+		} else if (tArray.length == 1) {
+			canvas.lc.send(lc_name,methodName,tArray[0]);
+		} else if (tArray.length == 2) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1]);
+		} else if (tArray.length == 3) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2]);
+		} else if (tArray.length == 4) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3]);
+		} else if (tArray.length == 5) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4]);
+		} else if (tArray.length == 6) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5]);
+		} else if (tArray.length == 7) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6]);
+		} else if (tArray.length == 8) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7]);
+		} else if (tArray.length == 9) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7],tArray[8]);
+		} else if (tArray.length == 10) {
+			canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7],tArray[8],tArray[9]);
+		} else {
+			if ($debug) Debug.error("tArray in sendViaLocalConnection longer then allowed")
+		}
+	</method>
+	
+	<method name="getNotNullString" args="value">
+		return value == null ? '' : value;
+	</method>
+	
+	<method name="isRemoteUser" args="">
+		return canvas.isinitRoomDirect || canvas.remoteUserLogin || canvas.directUserLogin || canvas.secureRemoteUserLogin;
+	</method>
+</library>
diff --git a/WebContent/src/base/moduleConfiguration.lzx b/WebContent/src/base/moduleConfiguration.lzx
new file mode 100644
index 0000000..bd191eb
--- /dev/null
+++ b/WebContent/src/base/moduleConfiguration.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<library>
+<!-- 
+##########################################################
+these properties can be overwritten by public/config.xml -->  
+   
+   
+<!-- #############################################
+    Moderator Modules
+ -->
+
+<attribute name="moderatorModuleUser" value="userModerate" type="string" />
+
+<attribute name="moderatorModuleRoom" value="roomModerate" type="string" />
+
+
+<!-- #############################################
+    Conference Room
+ -->
+
+<attribute name="conferenceRoom" value="conferenceView" type="string" />
+
+
+<!-- #############################################
+    Restricted Room
+    
+    Room Layouts: flexibleRestrictedConferenceRoom,restrictedConferenceRoom
+ -->
+<attribute name="restrictedRoomModule" value="restrictedConferenceRoom" type="string" />
+
+<!-- #############################################
+    Custom Room
+ -->
+
+<attribute name="customRoomModule" value="flexibleCustomRoom" type="string" />
+
+<!-- #############################################
+    Event Room
+    
+    Room Layouts: interviewConferenceRoom
+ -->
+<attribute name="interviewRoomModule" value="interviewConferenceRoom" type="string" />
+
+</library>
diff --git a/WebContent/src/base/navi/library.lzx b/WebContent/src/base/navi/library.lzx
new file mode 100644
index 0000000..8d54b39
--- /dev/null
+++ b/WebContent/src/base/navi/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- 
+    Icon from FamFam Icon Set
+     -->
+    <resource name="bullet_arrow_down_rsc">
+    	<frame src="resources/bullet_arrow_down.png" /> 
+    	<frame src="resources/bullet_arrow_down_dark.png" /> 
+    </resource>
+    
+    <include href="mainNavi.lzx" />
+
+</library>
diff --git a/WebContent/src/base/navi/mainNavi.lzx b/WebContent/src/base/navi/mainNavi.lzx
new file mode 100644
index 0000000..48a21b3
--- /dev/null
+++ b/WebContent/src/base/navi/mainNavi.lzx
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="textBoxSubBlank" extends="text" text="$once{ parent.text }"
+    fgcolor="0x000000" fontstyle="bold"
+        fontsize="14" y="6" x="10" />
+
+
+<class name="baseDropDownMenuListItem" extends="view" height="36">
+
+    <attribute name="action" value="" type="string" />
+    <attribute name="params" value="" type="string" />
+    <attribute name="isopen" value="false" type="boolean" />
+    <attribute name="isleaf" value="false" type="boolean" />
+    <attribute name="list" value="null" />
+    <attribute name="textvalue" value="" type="string" />
+    <attribute name="selected" value="false" type="boolean" />
+    <attribute name="textToolTip" value="" type="string" />
+    
+    <attribute name="isSpacer" value="false" type="boolean" />
+    <attribute name="text" value="" type="string" />
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+
+    <view name="_bg" visibility="hidden" width="${ parent.width-2 }" y="0" x="1"
+          bgcolor="0xFFFFFF" opacity="0.5" height="36" />
+    
+    <text text="$once{ parent.text }" name="_ctext" fontstyle="bold" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"
+        	fontsize="14" y="2" x="10" />
+        	
+    <text text="$once{ parent.textToolTip }" name="_ctextTooltip" fontstyle="plain" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"
+        	fontsize="10" y="20" x="10" />	
+   
+</class>
+
+<class name="dropDownMenuListItem" extends="baseDropDownMenuListItem" >
+
+    <handler name="onclick">
+        loadContent(this,null,null);
+        parent.parent.close();
+    </handler>
+    
+</class>
+
+<class name="horizontalDropDownSpacer" x="4" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }">
+	<attribute name="isSpacer" value="true" type="boolean" />
+</class>
+
+<class name="baseDropDownMenuList" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }">
+		
+	<attribute name="list" value="null" />
+	
+	<attribute name="btnRef" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	
+	<!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+	<method name="close">
+		this.btnRef.setAttribute("selected",false);
+		lz.ModeManager.release(this);
+		this.destroy();
+	</method>
+	
+	<method name="fixWidth">
+		<![CDATA[
+            //the second round goes through the list of items, as 
+            //now the maxwidth is detected we adjust the rest to it
+            var maxWidth = 0;
+            for (var i=0;i<this._content.subviews.length;i++) {
+            	if (this._content.subviews[i].width > maxWidth) {
+            		maxWidth = this._content.subviews[i].width;
+            	}
+            }
+            //add a little bit of spacing at the end
+            maxWidth += 10;
+            
+            for (var i=0;i<this._content.subviews.length;i++) {
+            	if (this._content.subviews[i].isSpacer) {
+            		this._content.subviews[i].setAttribute("width",maxWidth-8);
+            	} else {
+            		this._content.subviews[i].setAttribute("width",maxWidth);
+            	}
+            }
+		]]>
+	</method>
+
+</class>
+
+<class name="dropDownMenuList" extends="baseDropDownMenuList"
+		height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+		
+	<handler name="oninit">
+		<![CDATA[
+			if (this.list == null) {
+				return;
+			}
+			for (var i=0;i<this.list.length;i++) {
+				if (i!=0) {
+					new lz.horizontalDropDownSpacer(this._content);
+				}
+                new lz.dropDownMenuListItem(this._content,{
+                			textvalue:this.list[i].name,
+                			text:this.list[i].label.value,
+                			isopen:this.list[i].isopen,
+                			isleaf:this.list[i].isleaf,
+                			action:this.list[i].action,
+                			params:this.list[i].params,
+                			textToolTip:list[i].tooltip.value
+               			});
+            }
+            
+            this.fixWidth();
+		]]>
+	</handler>	
+	
+	<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" />
+		
+</class>
+
+<class name="baseMenuMeetingsItem" extends="view" height="34"
+    width="${ this._ctext.width+36 }" >
+
+    <attribute name="action" value="" type="string" />
+	<attribute name="text" value="" type="string" />
+    <attribute name="textToolTip" value="" type="string" />
+    <attribute name="_menuRef" value="null" />
+    <attribute name="isopen" value="false" type="boolean" />
+    <attribute name="isleaf" value="false" type="boolean" />
+    <attribute name="list" value="null" />
+    <attribute name="textvalue" value="null" />
+    <attribute name="selected" value="false" type="boolean" />
+    
+    <attribute name="text_y_inset" value="6" type="number" />
+    <attribute name="text_fontsize" value="14" type="number" />
+    
+    <attribute name="down_y_inset" value="10" type="number" />
+    
+    <handler name="onmouseover">
+        if (!this.selected){
+            this.bgc.setAttribute('visibility','visible');
+        }
+    </handler>
+    <handler name="onmouseout">
+        if (!this.selected){
+            this.bgc.setAttribute('visibility','hidden');
+        }
+    </handler>
+    
+    <handler name="onselected" args="tSelect">
+    	this.selected = tSelect;
+    	if (tSelect) {
+    		this._icon_down.setAttribute("frame",2);
+    		this.bga.setAttribute("visibility","visible");
+    		this._ctext.setAttribute("fgcolor",0x000088);
+    	} else {
+    		this._icon_down.setAttribute("frame",1);
+    		this.bgc.setAttribute("visibility","hidden");
+    		this.bga.setAttribute("visibility","hidden");
+    		this._ctext.setAttribute("fgcolor",0xFFFFFF);
+    	}
+    </handler>
+    
+    <view width="${ parent.width-1 }" bgcolor="0xFFFFFF" opacity="0.4" height="$once{ parent.height - 2}" y="1"
+        visibility="hidden" name="bgc"/>
+        
+    <view width="${ parent.width-1 }" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" height="$once{ parent.height }" 
+        visibility="hidden" name="bga">
+        <view width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+    </view>
+    
+    <view name="_icon_down" x="${ parent.width-20 }" y="$once{ parent.down_y_inset }" 
+    			resource="bullet_arrow_down_rsc" frame="1" />  
+    
+    <view width="1" height="${ parent.height }" y="0" bgcolor="0xEEEEEE" x="${ parent.width-1 }" />
+    <text text="$once{ parent.text }" name="_ctext" fontstyle="plain" fgcolor="0xFFFFFF"
+        	fontsize="$once{ parent.text_fontsize }" y="$once{ parent.text_y_inset }" x="10" />
+
+    <labelTooltip name="_textToolTip" text="$once{ parent.textToolTip }" multiline="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/navi/resources/bullet_arrow_down.png b/WebContent/src/base/navi/resources/bullet_arrow_down.png
new file mode 100644
index 0000000..9b23c06
--- /dev/null
+++ b/WebContent/src/base/navi/resources/bullet_arrow_down.png
Binary files differ
diff --git a/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png b/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png
new file mode 100644
index 0000000..b5504f8
--- /dev/null
+++ b/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png
Binary files differ
diff --git a/WebContent/src/base/remote/datasetHelper.lzx b/WebContent/src/base/remote/datasetHelper.lzx
new file mode 100644
index 0000000..5d7cf22
--- /dev/null
+++ b/WebContent/src/base/remote/datasetHelper.lzx
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<class name="datasetHelper">
+		<attribute name="successHandler" type="object" />
+		
+		<dataset name="restdataset" type="http">
+			<handler name="ondata" args="d">
+			<![CDATA[
+				//Make sure any cursor status is reset
+				lz.Cursor.restoreCursor();
+				lz.Cursor.showHandCursor(true);
+				if ($debug) Debug.write("restdataset ondata", d);
+				
+				if (typeof parent.successHandler != undefined && parent.successHandler != undefined && parent.successHandler != null) {
+					parent.successHandler(parent.parent, d);
+				}
+			]]>
+			</handler>
+		</dataset>
+		
+		<method name="call">
+			if ($debug) Debug.write("this.restdataset ",this.restdataset);
+			this.restdataset.doRequest();
+		</method>
+		
+		<method name="setServiceSource" args="m,o">
+		<![CDATA[
+			var params = "?SID=" + canvas.sessionId;
+			if (o) {
+				for (var key in o) {
+					params += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(o[key]);
+				}
+			}
+			this.restdataset.setAttribute("src", canvas.getServicesUrl() + m + params);
+		]]>
+		</method>
+	</class> 
+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/remote/library.lzx b/WebContent/src/base/remote/library.lzx
new file mode 100644
index 0000000..e76368e
--- /dev/null
+++ b/WebContent/src/base/remote/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="datasetHelper.lzx" />
+	<include href="rtmpConnection.lzx" />
+	<include href="sharedObject.lzx" />
+    
+</library>
diff --git a/WebContent/src/base/remote/rtmpConnection.lzx b/WebContent/src/base/remote/rtmpConnection.lzx
new file mode 100644
index 0000000..120c3b8
--- /dev/null
+++ b/WebContent/src/base/remote/rtmpConnection.lzx
@@ -0,0 +1,334 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="rtmpConnection" extends="node">
+    	
+    	<attribute name="debug" value="false" type="boolean" />
+    	
+    	<event name="onconnect"/>
+    	<event name="onerror"/>
+    	<event name="ondisconnect" />
+        
+        <!-- this attribute holds a reference to the current/last called netremoteCall,
+        in case of error you can debug that way which call did fail -->
+        <attribute name="lastCalled" value="null" />
+    	
+    	<attribute name="src" value="" type="string"/>
+    	
+		<method name="connect">
+            this._nc = new NetConnection();
+
+            // local reference to rtmpconnection
+            this._nc.t = this;     
+            
+            this._nc.proxyType = canvas.proxyType;
+            
+            var ok = this._nc.connect(src == "null" ? null : src, false); //isAVClient = false
+            if (this.debug) {
+            	if($debug) Debug.write("*** debug ***");
+            }
+            
+            //canvas.currentNC is the reference to the NetConnection that is used in the NetStream
+            canvas.currentNC = this._nc;
+            
+            this._nc.onStatus = function(info){
+                this.t._onStatus(info);
+            }
+            
+    		if($debug) Debug.write("devRtmpConnection/registerMethods()");
+			//Register Methods
+			this.registerMethods();    	            
+		</method>
+		
+        <method name="_onStatus" args="info"><![CDATA[
+            if (this.debug) {
+                Debug.write("devrtmpconnection", this, "_onStatus", info.code);
+            }
+
+            var msg = "";
+
+            switch (info.code) {
+
+                case "NetConnection.Connect.Success": {
+                    // The connection attempt succeeded.
+                    msg = info.code;
+                    s = 2;
+                    break;
+                }
+
+                default: {
+                    msg = info.code;
+                    s = 0;
+                    break;
+                }
+
+            }
+
+            this.setAttribute("status", msg);
+
+            if (s == 2) {
+                this.onconnect.sendEvent();
+            } else {
+            	this.onerror.sendEvent();
+            }
+
+          ]]>
+        </method>	
+        
+        <method name="disconnect">
+            this.ondisconnect.sendEvent();
+        	canvas.currentNC = null;
+            this._nc.close();
+        </method>
+    <!--- 
+        With this function all methods are registered to the NetConnection
+        A server can invoke this Method with a call for it from the Client
+        Only subnodes of rtmpconnections which are a instance of netRemoteCallHib
+        are registered, to add dynamically methods to the remotefunction you will
+        have to invoke this method once again
+        -swagner
+     -->
+	<method name="registerMethods">
+	<![CDATA[
+		if (this.subnodes != null) {
+			//Register all methods which are instanceof netRemoteCallHib
+			for (var i = 0; i < this.subnodes.length; ++i) {
+				//If it is of Type netRemoteCallHib then register it to the NetConnection
+				if (this.subnodes[i] instanceof lz.netRemoteCallHib) {
+					this._nc[this.subnodes[i].funcname] = function(args) {
+						return hib.remoteCallMethod(arguments.callee, arguments);
+					}
+				}
+			}
+		}
+	]]>
+	</method>
+    
+    <!-- 
+        Process the RemoteCall to the Right Funtion
+        -swagner
+     -->
+    <method name="remoteCallMethod" args="callee,args">
+        <![CDATA[
+            for (var eg in this._nc){
+                if (this._nc[eg]==callee){
+                    if (this.debug) {
+                        //_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);
+                    }    
+                    if (args.length == 1) {
+                        return this.callFuntion(eg,args[0]);
+                    } else {
+                        return this.callFuntion(eg,args);
+                    }
+                    //return this.callFuntion(eg,args);
+                }
+            }
+        ]]>
+    </method>
+    
+    <!-- 
+        Map the Function to a netRemoteCallHib
+        -swagner
+     -->
+    <method name="callFuntion" args="funcname,args">
+        <![CDATA[
+            for (var i=0;i<this.subnodes.length;i++){
+                if (this.subnodes[i].funcname==funcname){
+                    return this.subnodes[i].onResult(args);
+                }
+            }
+        ]]>
+    </method>		
+    
+    <method name="callRPC" args="func, obj, params">
+    	if (this.debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);
+    	if (params.length != 0){
+	    	//does this really work?
+	    	ASSetPropFlags(_global, null, 8, 1);
+	    	//Debug.write("does it work?",arguments);
+	    	<!--
+	    	this._nc.call.apply(this._nc,arguments);
+	    	 -->
+			if (params.length==1){
+			    this._nc.call(func, obj,params[0]);
+			} else if (params.length==2){
+			    this._nc.call(func, obj,params[0],params[1]);
+			} else if (params.length==3){
+			    this._nc.call(func, obj,params[0],params[1],params[2]);
+			} else if (params.length==4){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3]);
+			} else if (params.length==5){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);
+			} else if (params.length==6){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);
+			} else if (params.length==7){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
+			} else if (params.length==8){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
+			} else if (params.length==9){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
+			} else if (params.length==10){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
+			} else if (params.length==11){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
+			} else if (params.length==12){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
+			} else if (params.length==13){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
+			} else if (params.length==14){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
+			} else if (params.length==15){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
+			} else if (params.length==16){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);
+			} else if (params.length==17){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);
+			} else if (params.length==18){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);
+			} else if (params.length==19){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);
+			} else if (params.length==20){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);
+			}	    	 
+        } else {
+            this._nc.call(func, obj);
+        }
+    </method>
+    
+</class>
+
+
+    <!---
+        Net remote call. 
+        @todo Document netremotecall class.
+    -->
+    <class name="netremotecall" extends="node">
+
+
+        <!--- Name of the remote function. -->
+        <attribute name="funcname" value="$once{null}" type="string" />
+    
+        <attribute name="remotecontext" value="null" />
+    
+        <attribute name="dataobject" value="null" />
+		
+        <!--- Data handling event. args="value" 
+        @keywords private  -->
+        <event name="ondata" />
+
+        <!--- Error handling event. -->
+        <event name="onerror"/>
+
+        <!--- Call the remote method, passing the array of params. -->
+        <method name="callRPC" args="params"><![CDATA[
+            if (this.funcname == null) {
+                //Debug.write("No funcname given");
+                if (this.onerror) this.onerror.sendEvent("No funcname given");
+                return;
+            }
+
+            if (params == null) {
+                params = [];
+
+                var subnodes = this.subnodes;
+                if (subnodes != null) {
+                    var i;
+                    var n = subnodes.length;
+                    for (i = 0; i < n; i++) {
+                        // If getValue method is declared in param, call that
+                        // instead to get value.
+                        var tsi = subnodes[i];
+                        if ((tsi["getValue"] != null) && 
+                            (tsi.getValue["prototype"] != null)) {
+                            params[i] = tsi.getValue();
+                        } else {
+                            params[i] = tsi.value;
+                        }
+                    }
+                }
+
+            } else if (params.__proto__ != Array.prototype) {
+                //Debug.write(this.name, "error: first argument (params) is not an array");
+                return -1;
+            }
+
+            //if ($debug) Debug.write("call", this, this.parent, this.parent.status);
+            var rtmpObject = null;
+            if (this.parent instanceof lz.rtmpConnection){
+        	    rtmpObject = this.parent;
+            } else if(this.remotecontext  instanceof lz.rtmpConnection){
+        	    rtmpObject = this.remotecontext;
+            } else {
+        	    if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);
+        	    return;
+            }
+        	//Debug.write('call', this, rtmpObject, rtmpObject.status);
+        	//Debug.write('call', this.remotecontext);
+            if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);
+            rtmpObject.lastCalled = this;
+            rtmpObject.callRPC(this.funcname, this, params);
+
+          ]]>
+        </method>
+
+
+        <!--- Handle the result returned from the remote method. -->
+        <method name="onResult" args="value"><![CDATA[
+            // Can be overriden.
+            // Would be great if it can be used with dataobject,
+            // but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.
+            ////Debug.write("netremotecall", this, "onResult", value);
+
+            if (this.dataobject!=null) {
+                if ( this.dataobject instanceof LzDataset ) {
+                    //Debug.write("onResult: ",this,value,dataobject);
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.setData(element.childNodes);
+                } else if ( this.dataobject instanceof LzDataElement ) {
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.appendChild( element );
+                } else {
+                    Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);
+                }
+            }
+            this.ondata.sendEvent(value);		
+          ]]>
+        </method>
+
+
+    </class>
+
+
+    <!---
+        Net parameter.
+        Element to use inside netremotecall.
+        @todo Document netparam class.
+    -->
+    <class name="netparam" extends="node">
+
+        <!--- The value of the netparam. -->
+        <attribute name="value" value="null"/>
+
+    </class>
+
+
+</library>
diff --git a/WebContent/src/base/remote/sharedObject.lzx b/WebContent/src/base/remote/sharedObject.lzx
new file mode 100644
index 0000000..36da568
--- /dev/null
+++ b/WebContent/src/base/remote/sharedObject.lzx
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="sharedObject" extends="node">
+
+	<attribute name="so" value="null" />
+	<attribute name="onStatus" value="null" />
+	
+
+	<method name="connect" args="so_Name,nc,persistant">
+
+		//Debug.write("connect SharedObject: ",nc.uri);
+		this.so = SharedObject.getRemote(so_Name,nc.uri,persistant); 
+		
+		var t = this;
+		this.so.onSync = function (evtObj){
+			if (t.onStatus)t.onStatus.sendEvent(evtObj);
+			//_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+		}
+		
+		this.so.connect(nc);
+		
+	</method>
+	
+    
+    <method name="getRemote" args="so_Name,nc,persistant">
+
+        //Debug.write("connect SharedObject: ",nc.uri);
+        this.so = SharedObject.getRemote(so_Name,nc.uri,persistant); 
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+    </method>
+    
+    <!--- create Object if not existing  -->
+    <method name="getLocal" args="name">
+
+        this.so = SharedObject.getLocal(name); 
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+        
+    </method>
+    
+    <!--- 
+        force write to disk
+        @return true(success) false(User has forbidden to store data local)
+      -->
+    <method name="flush">
+        return this.so.flush();
+    </method>
+
+    <method name="getData" args="key">
+        if (this.so.data["key"] == undefined){
+            return null;
+           //_root.Debug.write.write("key undefined",key);
+        } else {
+            return this.so.data["key"];
+        }
+    </method>
+	
+    <method name="setData" args="key,val">
+    	//Debug.write("this...... so: ",this.so);
+        this.so.data["key"] = val;
+    </method>
+
+		
+</class>
+
+</library>
diff --git a/WebContent/src/broadcast.lzx.lzr=swf8.swf b/WebContent/src/broadcast.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..95cdc24
--- /dev/null
+++ b/WebContent/src/broadcast.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/classintro.swf b/WebContent/src/classintro.swf
new file mode 100644
index 0000000..0d0ee92
--- /dev/null
+++ b/WebContent/src/classintro.swf
Binary files differ
diff --git a/WebContent/src/confintro.swf b/WebContent/src/confintro.swf
new file mode 100644
index 0000000..6b4505c
--- /dev/null
+++ b/WebContent/src/confintro.swf
Binary files differ
diff --git a/WebContent/src/main.lzx b/WebContent/src/main.lzx
new file mode 100644
index 0000000..affaa1c
--- /dev/null
+++ b/WebContent/src/main.lzx
@@ -0,0 +1,183 @@
+﻿<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas width="100%" height="100%" title="OpenMeetings">
+<switch>
+	<when property="$debug">
+		<method name="doDebugInit">
+			canvas.setAttribute('debug', true);
+		</method>
+		<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="0" height="50%" />
+	</when>
+	<otherwise>
+		<method name="doDebugInit">
+		</method>
+	</otherwise>
+</switch>    
+     
+<include href="incubator/lzcombobox.lzx" />
+<include href="incubator/shadowbox.lzx" />
+
+<include href="resources/" /> 
+<include href="base/" /><!-- attributes,methods,datasets,are moved into /base -->
+<include href="modules/" />
+<include href="plugins/" />  
+
+<silverstyle name="defaultstyle" isdefault="true" canvascolor="white" />
+
+<silverstyle name="componentStyle" basecolor="0xFFFFFF" textcolor="0x000000" />
+
+<silverstyle name="itemStyle" textcolor="0xFFFFFF" />
+
+<whitestyle name="menuStyle" textcolor="0x000000" />
+             
+
+<!-- main colors: 264269 -->
+<handler name="oninit">
+	flash.external.ExternalInterface.call("loadingComplete");
+	doDebugInit();
+    var cmenu = new LzContextMenu();
+    canvas.setDefaultContextMenu(cmenu);
+    cmenu.hideBuiltInItems();
+    if($debug) Debug.write("main.lzx/oninit:",this);
+    canvas.lc = new LocalConnection();
+
+	getTimeZoneOffset(this);
+</handler>
+
+<handler name="onerror" args="errmsg">
+	canvas.remoteLogWrite("error " + errmsg);
+</handler>
+
+<method name="callback" args="returnValue">
+    if ($debug) Debug.write("getTimeZoneOffset callback ",returnValue);
+            
+    canvas.stdTimeOffset = Number(returnValue);
+</method>
+
+<!-- View for Contents. All Windows will be loaded on this view. -->
+<view name="main_content" y="${ canvas.naviHeightDelta }" width="${canvas.width}" 
+			    height="${ canvas.height-canvas.naviHeightDelta }"
+			    visibility="hidden" showhandcursor="false">
+    
+    <handler name="onmouseover">
+        setCurrentMouseWheelObject(this._scrollbar);
+    </handler>
+    <handler name="onmouseout">
+        disableCurrentMouseWheelObject();
+    </handler>
+    
+    <view x="0" name="_content" >
+        <view name="inner" />
+        <method name="clearAll">
+            <![CDATA[
+                canvas.sendViaLocalConnection(canvas.vid_lc_name, "clearAll", null);
+                if($debug) Debug.write("main.lzx/main_content._content.inner.clearAll(): ",this.inner,this.inner.subviews.length);
+                if (this.inner.subviews != null) {
+                	if (this.inner.subviews[0] != null) {
+		                var baseContent = this.inner.subviews[0].close();
+		                for (var eg in this.inner.subviews) {
+		                    if($debug) Debug.write("main.lzx/main_content._content.inner.clearAll()-subviews: ",this.inner.subviews[eg]);
+		                    if (eg!=0) this.inner.subviews[eg].close();               
+		                }
+	                }
+                }
+                return baseContent;
+            ]]>
+        </method>
+    </view>
+    <om_hscrollbar name="_scrollbarH" id="_mainScrollHBar" visibility="hidden" />
+    <om_vscrollbar name="_scrollbar" id="_mainScrollBar" />
+</view>  
+  
+<!-- View for Navigation-bar and App-name -->
+<view name="_mainbgcontentNavi" x="0" y="0" clip="true"
+    width="100%" height="${ canvas.naviHeight }" visibility="hidden">
+    <image id="mainApplogo" visible="false" />
+    <text id="mainBaseText" visible="false"
+        fgcolor="${ canvas.fontColorHeader }" fontsize="20" fontstyle="bold">
+        <method name="setShadow" >
+            <![CDATA[
+            if (this.isinited && false){
+                this.normalMC = this.getDisplayObject();
+                this.displacementMap = new flash.filters.DropShadowFilter();
+                this.normalMC.filters = [this.displacementMap];
+            }
+            ]]>              
+        </method> 
+        <handler name="onclick">
+            lz.Browser.loadURL(canvas.currentappnameurl,"_blank");
+        </handler>  
+        <labelTooltip id="mainBaseTextLabel" />      
+    </text>
+    <handler name="oninit">
+        var cmenu = new LzContextMenu();
+        this.setContextMenu(cmenu);
+        cmenu.hideBuiltInItems();
+    </handler>     
+</view>
+
+<!-- View for Conference menu bar at the top side. Visible on conference -->
+<view name="_conferencemenu" y="0" x="0" width="100%" height="20" visibility="hidden" > 
+    <method name="removeAll">
+        <![CDATA[
+            if($debug) Debug.write("main.lzx/_coferencemenu.removeAll(): ");
+            while (this.subviews.length > 0) {
+                this.subviews[0].destroy();
+            }
+            parent._moderatormenu.removeAll();
+        ]]>
+    </method>
+</view> 
+
+<view name="_moderatormenu" y="0" x="0" width="100%" height="20">
+    <method name="removeAll">
+        <![CDATA[
+            if($debug) Debug.write("main.lzx/_moderatormenu.removeAll(): ");
+            while (this.subviews.length > 0) {
+                this.subviews[0].destroy();
+            }
+        ]]>
+    </method>
+</view>  
+    
+<!-- View for "Loading" -->
+<view name="_loadingAll" visible="false" opacity="0.7" 
+    width="${ canvas.width }" height="${ canvas.height }" 
+    bgcolor="0xFFFFFF" clickable="true" showhandcursor="false">
+    <method name="hideContentOnly">
+    	this.showLoadingAnni.setAttribute('started', true);
+        this.setAttribute("visibility","visible");
+        this._text.setAttribute("visibility","hidden");
+    </method>
+    <method name="showLoading">
+    	this.showLoadingAnni.setAttribute('started', true);
+        this.setAttribute("visibility","visible");
+        this._text.setAttribute("visibility","visible");
+    </method>
+    <method name="hideLoading">
+        this.setAttribute("visibility","hidden");
+    </method>
+    <animator name="showLoadingAnni" attribute="opacity" 
+    		from="0" to="0.7" started="false" duration="250" />
+    <text name="_text" align="right" y="56" fontsize="14" fgcolor="red">Loading...</text>
+</view>
+
+</canvas>
\ No newline at end of file
diff --git a/WebContent/src/modules/chat/chatBarMenu.lzx b/WebContent/src/modules/chat/chatBarMenu.lzx
new file mode 100644
index 0000000..92f2f30
--- /dev/null
+++ b/WebContent/src/modules/chat/chatBarMenu.lzx
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="chatBarMenu" extends="view" width="${ parent.width }" x="0" 
+    height="20" layout="axis:x;spacing:1;inset:2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+    
+    <attribute name="staticwidth" type="number" value="120" />
+    <attribute name="currentBtn" value="null" />
+    
+    <event name="onRemoveWindow" />
+    
+    <method name="getCurrentSize">
+        <![CDATA[
+            if ( ((this.subviews.length+1)*(this.staticwidth+1)) <= this.width) {
+                return this.staticwidth;
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length+1));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+                return newwidth;
+            }   
+        ]]>
+    </method>
+    
+    <handler name="onwidth">
+        <![CDATA[
+            if ( ((this.subviews.length)*(this.staticwidth+1)) <= this.width) {
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',this.staticwidth);
+                }
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+            } 
+        ]]>
+    </handler>
+    
+    <method name="removeObject" args="btn">
+    	this.removeObjectSynced(btn);
+    	if ($debug) Debug.write("removeObject :: ",btn);
+    	this.onRemoveWindow.sendEvent(btn.objRef.refObj.publicSID);
+    </method>
+    
+    <method name="removeObjectSynced" args="btn">
+    	var removeCurrent = false;
+    	if (this.currentBtn == btn){
+    		removeCurrent = true;
+    	}
+    	btn.objRef.destroy();
+        btn.destroy();
+        if (this.subviews.length != 0) {
+	        if (removeCurrent) {
+	        	this.sendActiveWindowSynced(this.subviews[this.subviews.length-1]);
+	        }
+        }
+        
+    </method>
+
+    
+    <method name="sendActiveWindow" args="btn,win">
+        if ($debug) Debug.write("sendActiveWindow: ", btn, win);
+        this.sendActiveWindowSynced(btn);
+    </method>
+    
+    <method name="sendActiveWindowSynced" args="btn">
+    	<![CDATA[
+            if (this.currentBtn != null){
+                this.currentBtn.isactive=false;
+                this.currentBtn.objRef.setAttribute("visibility", "hidden");
+                if ($debug) Debug.write("sendActiveWindow1: ",this.currentBtn);
+                this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+                this.currentBtn._minimizebtn_dn.setAttribute('visibility','hidden');
+            }
+            this.currentBtn = btn;
+            this.currentBtn.objRef.setAttribute("visibility","visible");
+        	this.currentBtn.objRef.bringToFront();
+            if ($debug)  //Debug.write("sendActiveWindow2: ",this.currentBtn);
+            this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+            this.currentBtn._minimizebtn_dn.setAttribute('visibility','visible');
+            this.currentBtn.isactive=true;
+	       	this.currentBtn.objRef.sendActiveWindow();
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/chatMiniButton.lzx b/WebContent/src/modules/chat/chatMiniButton.lzx
new file mode 100644
index 0000000..10e1bee
--- /dev/null
+++ b/WebContent/src/modules/chat/chatMiniButton.lzx
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="chatMiniButton" extends="view" width="250" height="18" y="2"
+    bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+     
+    <attribute name="btnName" value="" type="string" />
+    <attribute name="objRef" value="null" />
+
+    <attribute name="zielx" value="200" type="number" />
+    <attribute name="zielwidth" value="100" type="number" />    
+    
+    <attribute name="isactive" value="true" type="boolean" />
+    
+    <attribute name="isHidden" value="false" type="boolean" />
+    
+    <attribute name="isClosable" value="true" type="boolean" />
+    
+    <handler name="oninit">
+        this.calcTextWidth();
+        parent.onwidth.sendEvent();
+    </handler>
+    
+    <handler name="onwidth">
+        if (this.isinited){
+            this.calcTextWidth();
+        }
+    </handler>
+    
+    <method name="disableItem">
+        //if ($debug) Debug.write("disableItem :: set visibility to hidden");
+        this.isHidden = true;
+        this.setAttribute("visibility","hidden");
+        //this.destroy();
+    </method>
+    
+    <method name="enableItem">
+        this.setAttribute("visibility","visible");
+        this.isHidden = false;
+    </method>
+    
+    <method name="calcTextWidth">
+        <![CDATA[
+            if (this.isHidden) {
+                return;
+            }
+            ////////if ($debug)  //Debug.write(this,this._text,this._text.getTextWidth());
+            if (this._text.getTextWidth()>(this.width-24)) {
+                this._long.setAttribute('visibility','visible');
+                this._text.setAttribute('width',this.width-26);
+            } else {
+                this._long.setAttribute('visibility','hidden');
+                this._text.setAttribute('width',this.width-18);
+            }
+        ]]>        
+    </method>
+        
+    <handler name="onclick">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+        if ($debug) Debug.write(" :: onclick :: ");
+        this.sendActiveWindow(this.objRef);
+    </handler>
+    
+    <handler name="onmouseover">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    <handler name="onmouseout">
+        if (this.isHidden) {
+            return;
+        }
+        if (this.isactive) {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','visible');
+        } else {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','hidden');
+        }        
+    </handler>
+    <handler name="onmousedown">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','hidden');
+        this._minimizebtn_dn.setAttribute('visibility','visible');
+    </handler>
+    <handler name="onmouseup">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    
+    <method name="sendActiveWindow" args="win">
+        this.parent.sendActiveWindow(this,win);
+    </method>    
+
+	<method name="activateSynced">
+		this.parent.sendActiveWindowSynced(this,win);
+	</method>
+    
+    <view name="_minimizebtn_mo" width="${ parent.width-2 }" height="16"
+        bgcolor="0xFFFFFF" opacity="0.3" visibility="hidden" x="1" y="1" />
+
+    <view name="_minimizebtn_dn" width="${ parent.width-2 }" height="16"
+        bgcolor="0x000000" opacity="0.3" visibility="hidden" x="1" y="1" />
+    
+
+    <text text="${ parent.btnName }" fgcolor="0xFFFFFF" resize="false" 
+        x="1" fontsize="10" name="_text" />
+    
+        <view y="1" x="${ parent.width-18 }" name="_close"
+            resource="btn_presenter_close"
+            visible="$once{ parent.isClosable }" 
+            onmouseover="this.setAttribute('frame',2)"
+            onmouseout="this.setAttribute('frame',1)"
+            onmousedown="this.setAttribute('frame',3)"
+            onmouseup="this.setAttribute('frame',1)" >
+            <handler name="onclick">
+                this.setAttribute('frame',2);
+                new lz.confirmationSingle(canvas,{
+                           refObj:this,
+                           labeliderror:1497,
+                           showCheckBox:false
+                        });
+            </handler>
+            <method name="sendConfirmation" args="bool,askAgain">
+                if (bool) {
+                    this.parent.parent.removeObject(this.parent);
+                }
+            </method>
+            <method name="sendNoConfirmation">
+            	
+            </method>
+            <labelTooltip text="close" />
+        </view>     
+ 
+    <text y="1" name="_long" text="..." 
+        x="${ parent.width-28 }" fontsize="10" />
+
+    <labelTooltip text="${ parent.btnName }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/chatParticipants.lzx b/WebContent/src/modules/chat/chatParticipants.lzx
new file mode 100644
index 0000000..8a3d179
--- /dev/null
+++ b/WebContent/src/modules/chat/chatParticipants.lzx
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- it shows chat participants. -->
+<class name="chatParticipants" extends="view" height="40" clickable="true"
+	   width="$once{ parent.width }" bgcolor="$once{ canvas.bgColorMenuItems }">
+	
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="connectedSince" value="" type="string" />
+	<attribute name="publicSID" value="" type="string" />
+	
+	<attribute name="picture_uri" value="" type="string"/>
+	
+	<handler name="oninit">
+		<![CDATA[
+			if($debug) Debug.write("chatParticipants/picture_uri: ",this.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.picture_uri, '&moduleName=chat')); 
+        ]]>
+	</handler>
+	
+	<!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.rtmphostlocal; </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+    
+    <view width="$once{ parent.width }" height="$once{ parent.height-1 }" 
+    	bgcolor="0xFFFFFF" opacity="0.2" />
+	
+	<image name="_userpic" stretches="both" x="1" y="1">
+		<handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+            ]]>
+        </handler>
+	</image>
+	
+	<text text="$once{ parent.username }" x="40" resize="false"
+		  width="$once{ parent.width - 40 }" />	
+		  
+	<miniIconsImage name="add" src="$once{ canvas.getThemeImage('edit_add_rsc') }" width="16" height="16" 
+                   y="20" x="$once{ parent.width - 80 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            if (hib.userobject.user_id == parent.user_id) {
+                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+                return;
+            }
+            parent.requestUserToContactList.doCall();
+        </handler>
+        <labelTooltip labelid="1186" />
+    </miniIconsImage>
+    
+    <miniIcons name="private_message_add" resource="private_message_add_rsc" width="16" height="16" 
+                   y="20" x="$once{ parent.width - 60 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            new lz.newPrivateMessage(canvas,{
+                                x:200,y:120,
+                                refObj:null,
+                                minimizable:true,
+                                maximizable:true,
+                                userObject:null,
+                                isdragable:true,
+                                user_id:parent.user_id,
+                                width:canvas.width-300,
+                                height:canvas.height-130
+                            });
+        </handler>
+        <labelTooltip labelid="1253" />
+    </miniIcons>
+	
+	<miniIcons resource="user_profile_rsc" width="16" height="16" 
+               y="20" x="$once{ parent.width - 40 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            new lz.viewUserProfileWindow(canvas,{
+                                userId:parent.user_id
+                            });
+        </handler>
+        <labelTooltip labelid="1236" />
+    </miniIcons>    
+	
+	<miniIcons resource="start_conference2_rsc" width="16" height="16" 
+			   y="20" x="$once{ parent.width - 20 }" showhandcursor="true">
+		<handler name="onclick">
+			if ($debug) Debug.write("Start Conference");
+			new lz.chatParticipantsInviteConference(canvas,{
+            			    publicSID:parent.publicSID
+            			});
+		</handler>
+		<labelTooltip labelid="1131" />
+	</miniIcons>	 
+	
+	<labelTooltip text="$once{ parent.connectedSince }" /> 
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/emotIconsSelector.lzx b/WebContent/src/modules/chat/emotIconsSelector.lzx
new file mode 100644
index 0000000..98edc70
--- /dev/null
+++ b/WebContent/src/modules/chat/emotIconsSelector.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- view to select emoticons. size is 160x140 -->
+<class name="emotIconsSelector" extends="closableView" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" 
+    clickable="true" width="160" height="140" >
+
+    <attribute name="btnRef" value="null" />
+
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+    
+    <handler name="oninit">
+    	this.getAllPublicEmoticons.doCall();
+    </handler>
+    
+        <netRemoteCallHib name="getAllPublicEmoticons" funcname="chatservice.getAllPublicEmoticons" 
+			remotecontext="$once{ canvas.thishib }" > 
+            <handler name="ondata" args="value">
+            	<![CDATA[
+                	//The onResult-Handler will be called be the rtmpconnection
+					if($debug) Debug.write("emotIconsSelector/getAllPublicEmoticons : ",value);
+					for (var i=0;i<value.length;i++){
+						var swfurl = canvas.getUrl() + 'public/emoticons/'+value[i][0];
+						iconlabel = value[i][1];
+						if (value[i].length>4){
+							iconlabel += ", "+value[i][2];							
+						}
+						
+						if ($debug) Debug.write("swfurl "+swfurl);
+						
+						var m = new lz._chatInnerSmilyIcon(parent.inn.inn,{iconvalue:value[i][1],iconlabel:iconlabel});
+						m.setSource(swfurl);						
+					}
+                ]]>
+            </handler>   
+        </netRemoteCallHib>    
+
+    <view bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" opacity="0.8"
+    	  height="$once{ parent.height-2 }" x="1" y="1" />
+    	  
+    <labelText x="1" y="1" labelid="446" fontstyle="bold" /><!-- 446:Emoticons -->
+	<view name="inn" width="158" height="118" x="0" y="20" clip="true">
+		<view name="inn" width="$once{ parent.height }" >
+			<wrappinglayout axis="x" spacing="2" />
+		</view>
+		<om_vscrollbar name="myscrollbar" />
+	</view>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" /><!-- 430:close -->
+    </view>    
+	
+</class>	
+
+<!--- private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.-->
+<class name="_chatInnerSmilyIcon" extends="view" onmouseover="" onmouseout="">
+	<attribute name="iconlabel" value="" type="string" />
+	<attribute name="iconvalue" value="" type="string" />
+	<handler name="onclick">
+		var messageBox = parent.parent.parent.btnRef.message;
+		messageBox.setText(messageBox.getText()+" "+iconvalue+"  ");
+		if ($debug) Debug.write("messageBox TEXT: ",messageBox.text,messageBox);
+		lz.Focus.setFocus(messageBox._ctext);
+		messageBox._ctext.setSelection(messageBox.getText().length-1,messageBox.getText().length);
+		parent.parent.parent.close();
+	</handler>
+	<labelTooltip text="$once{ parent.iconlabel }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/fontOptions.lzx b/WebContent/src/modules/chat/fontOptions.lzx
new file mode 100644
index 0000000..4b11c87
--- /dev/null
+++ b/WebContent/src/modules/chat/fontOptions.lzx
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="fontOptions" extends="closableView" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"
+	clickable="true" width="130" height="42">
+
+	<attribute name="btnRef" value="null" />
+	
+	<method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+    
+    <method name="applyStyle" args="styleLeftPart, styleRightPart">
+    	var messageBox = btnRef.message;
+    	var beforeSelection = messageBox.getText().substring(0, messageBox._ctext.selPosition);
+    	var selection = messageBox.getText().substring(messageBox._ctext.selPosition, 
+    		messageBox._ctext.selPosition + messageBox._ctext.selSize);
+    	var afterSelection = messageBox.getText().substring(messageBox._ctext.selPosition + 
+    		messageBox._ctext.selSize, messageBox.getText().length);
+		messageBox.setText(beforeSelection + styleLeftPart + selection + styleRightPart + afterSelection);
+		close();
+		lz.Focus.setFocus(messageBox._ctext);
+    </method>
+        
+    <view bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" opacity="0.8"
+    	  height="$once{ parent.height-2 }" x="1" y="1" />
+    	  
+    <labelText x="1" y="1" labelid="1530" fontstyle="bold" /><!-- 1530:Font style -->
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" /><!-- 430:close -->
+    </view>
+
+	<miniIconsImage y="18" x="0" src="$once{ canvas.getThemeImage('font_bold') }"
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<b>", "</b>");
+			]]>
+		</handler>
+		<labelTooltip labelid="87" />
+	</miniIconsImage>
+	    
+	<miniIconsImage y="18" x="24" src="$once{ canvas.getThemeImage('font_italic') }" 
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<i>", "</i>");
+			]]>
+		</handler>
+		<labelTooltip labelid="86" />
+	</miniIconsImage>
+	    
+	<miniIconsImage y="18" x="48" src="$once{ canvas.getThemeImage('font_underline') }"
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<u>", "</u>");
+			]]>
+		</handler>
+		<labelTooltip labelid="1529" />
+	</miniIconsImage>
+	
+	<miniIconsImage y="18" x="72" src="$once{ canvas.getThemeImage('font_color') }" 
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<attribute name="selectedColor" type="number" value="0" />
+		<attribute name="colorBeforeOpen" type="number" />
+		<attribute name="colorPickRef" value="null"/>
+		<handler name="onclick">
+			<![CDATA[
+				this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        		x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        		y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+	        	var myColor = new Color();
+        		myColor.setRGB(0);
+	        	this.colorPickRef.doDefaultColor(myColor);
+	        	this.colorBeforeOpen = colorPickRef.selectedColor;
+	        	lz.ModeManager.makeModal(this.colorPickRef);
+			]]>
+		</handler>
+		
+		<method name="closedColorPicker">
+			// called by colorpicker
+		</method>
+		
+		<method name="setTransformedStringColor">
+		<![CDATA[
+			if (colorBeforeOpen != this.colorPickRef.selectedColor)
+				parent.applyStyle("<font color=\'#" + 
+					parseInt(this.colorPickRef.selectedColor).toString(16) + "\'>", "</font>");
+		]]>
+		</method>
+		
+		<labelTooltip labelid="1532" />
+	</miniIconsImage>
+	
+	<miniIconsImage y="18" x="96" src="$once{ canvas.getThemeImage('hyperlink') }" 
+		width="24" height="24" showhandcursor="true" stretches="none"  xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<a href=\"\">", "</a>");
+			]]>
+		</handler>
+		<labelTooltip labelid="1533" />
+	</miniIconsImage>
+    
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/chat/globalAttributes.lzx b/WebContent/src/modules/chat/globalAttributes.lzx
new file mode 100644
index 0000000..3b5283d
--- /dev/null
+++ b/WebContent/src/modules/chat/globalAttributes.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- global attributes for chat module -->
+
+<library>
+
+<!--- chat modules: chat history -->
+<attribute name="chathistory" value="null" />
+
+<!--- chat modules: chat content -->
+<attribute name="_chatcontent" value="null" />
+
+<!--- chat modules: chat content -->
+<attribute name="_currentChatPanel" value="null" />
+
+</library>
diff --git a/WebContent/src/modules/chat/globalMethods.lzx b/WebContent/src/modules/chat/globalMethods.lzx
new file mode 100644
index 0000000..9c27e46
--- /dev/null
+++ b/WebContent/src/modules/chat/globalMethods.lzx
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- global methods for chat module -->
+<library>
+
+<script>
+<![CDATA[
+
+	// global chat history array for all chat module
+	this.chathistory=new Array();
+
+var maxsize = 220;
+var textFieldtext = "";
+var startIndex = 0;
+var currentLine = 0;
+var textObject = null;
+var myTextFormat = null;
+var lineHeight = 0;
+
+function calcLineWidthByTextField(maxsizeText,textForCalcing,fontsize, fontname){
+	//check test/testLineWidth.lzx in test-directory for a detailed example calculation 
+	//Debug.write("calcLineWidthByTextField: ",textForCalcing);
+	
+	maxsize = maxsizeText;
+	startIndex = 0;
+	currentLine = 0;
+	textObject = new Array();
+	
+	textFieldtext = textForCalcing;
+	myTextFormat = new TextFormat();
+	myTextFormat.size = fontsize;
+	myTextFormat.font = fontname;
+	
+	var metrics = myTextFormat.getTextExtent(textFieldtext, 100000);
+	lineHeight = metrics.ascent+metrics.descent;
+	//Debug.write(lineHeight);
+	
+	measureLine();
+	
+	return textObject;
+}
+
+function measureLine(){
+    var remainingLength = textFieldtext.length;
+        
+    var testTxt = "";
+    var testTxt2 = "";
+    var textFieldtext2 = textFieldtext;
+    var metrics = 0;
+    var firstSpaceIndex = 0;
+    var isFirstWord = true;
+
+    //if ($debug) Debug.write("FUNC/chat Message: ", textFieldtext);
+    //if ($debug) Debug.write("FUNC/length of chat Message: ", remainingLength);
+
+    while (remainingLength > 0) {
+        testTxt = "";
+        testTxt2 = "";
+        textFieldtext2 = textFieldtext;
+        metrics = myTextFormat.getTextExtent(textFieldtext2, 100000);
+        isFirstWord = true;
+        
+        //if ($debug) Debug.write("size of the current part: ", metrics.width);
+        do {
+            firstSpaceIndex = textFieldtext2.indexOf(" ");
+            testTxt2 = testTxt;
+
+            if (firstSpaceIndex != -1) {
+                //if ($debug) Debug.write("the first space is at position: ", firstSpaceIndex);
+                if (isFirstWord) {
+                    testTxt = textFieldtext2.slice(startIndex, firstSpaceIndex);
+                    isFirstWord = false;
+                } else {
+                    testTxt = testTxt + " " + textFieldtext2.slice(startIndex, firstSpaceIndex);
+                }
+                textFieldtext2 = textFieldtext2.slice(firstSpaceIndex + 1, textFieldtext2.length);
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            } else {
+                // this is the last word
+                //if ($debug) Debug.write("this is the last word!");
+                testTxt = testTxt + " " + textFieldtext2;
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+                if (isFirstWord && metrics.width < maxsize) {
+                    testTxt2 = testTxt;
+                    isFirstWord = false;
+                }
+                break;
+            }
+        } while (metrics.width < maxsize)
+        
+        if (metrics.width < maxsize) {
+            testTxt2 = testTxt;
+        }
+
+        if (testTxt2.length == 0) {
+            // the first word is already too long
+            //if ($debug) Debug.write("the first word is already too long!");
+            testTxt = "";
+            textFieldtext2 = textFieldtext;
+            metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            isFirstWord = true;
+
+            while (metrics.width < maxsize) {
+                testTxt = testTxt + textFieldtext2.slice(startIndex, 1);
+                textFieldtext2 = textFieldtext2.slice(1, remainingLength);
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            }
+            
+            testTxt2 = testTxt;
+        }
+                
+        textObject[currentLine] = new Array();
+        textObject[currentLine]["text"] = testTxt2;
+        metrics2 = myTextFormat.getTextExtent(textObject[currentLine]["text"], 100000);
+        textObject[currentLine]["lineWidth"] = metrics2.width;
+        currentLine += 1;
+        //if ($debug) Debug.write("new line: ", textObject[currentLine]["text"]);
+               
+        textFieldtext = textFieldtext.slice(testTxt2.length, textFieldtext.length)
+        if (textFieldtext.indexOf(" ") == 0) {
+           textFieldtext = textFieldtext.slice(1, textFieldtext.length)
+        }
+        remainingLength = textFieldtext.length;
+
+        //if ($debug) Debug.write("remaining text: ", textFieldtext);
+    }
+}
+
+function getLineHeight(){
+	return lineHeight;
+}
+
+
+
+
+]]>
+</script>
+
+
+
+
+<method name="addChatHistory" args="value,client">
+<![CDATA[
+	if ($debug) Debug.write("addChatHistory: ", value,client);
+	var name = (client.firstname == null ? "" : client.firstname) + " " + (client.lastname == null ? "" : client.lastname);
+	var newmessage = "<FONT COLOR='"+value[5]+"' size='11'>"+name+"</FONT>:<FONT COLOR='0x000000' size='11'>"+value[4]+"</FONT><br />";
+	//Debug.write("newmessage: ",newmessage);
+	canvas._chatcontent.addChatItem(newmessage);  // Is "addChatItem()" used?  By what? h.kuze 2008/3/27
+	canvas._chathistory.push(newmessage);
+]]>
+</method>
+
+<method name="resetFormatedChatHistory">
+  	<![CDATA[
+  	if (this.chathistory==null) return '';
+  	var completeText = '';
+  	for (var i=0;i<chathistory.length;i++){
+  		completeText+=chathistory[i];
+  	}
+  	//Debug.write("getFormatedChatHistory: ",completeText);
+  	return completeText;
+  	]]>
+</method>
+<method name="getFormatedChatHistory">
+  	<![CDATA[
+  	if (this.chathistory==null) return '';
+  	var completeText = '';
+  	for (var i=0;i<chathistory.length;i++){
+  		completeText+=chathistory[i];
+  	}
+  	//Debug.write("getFormatedChatHistory: ",completeText);
+  	return completeText;
+  	]]>
+</method>
+
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx
new file mode 100644
index 0000000..cae4835
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteConference" extends="guiPresenter" resizeable="false"
+    width="490" height="430" y="240" x="240" closable="true" labelid="1131" >
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="user_id" value="0" type="number" />
+	
+    <view resource="messagebox_info_rsc" x="10" y="24" />
+    
+    <labelText labelid="1132" x="30" y="22" fontstyle="italic"
+               multiline="true" width="$once{ parent.width - 40 }" />
+	
+	<labelText labelid="777" x="2" y="52" fontstyle="bold" />
+	
+    <view x="4" y="72" height="150">
+                    
+        <handler name="oninit">
+            this.getRoomsPublicWithoutType.doCall();
+        </handler>
+
+        <netRemoteCallHib name="getRoomsPublicWithoutType" funcname="conferenceservice.getRoomsPublicWithoutType" 
+            remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <handler name="ondata" args="value">    
+                <![CDATA[
+                    if ($debug) Debug.write("getRoomsPublicWithoutType: ", value);
+                    if (value != null) {
+                        for (var eg = 0; eg < value.length; eg++) {
+                            var time = value[eg].starttime.getHours()
+                                    + ':' + value[eg].starttime.getMinutes()
+                                    + ' ' + value[eg].starttime.getDate()
+                                    + '.' + (value[eg].starttime.getMonth() + 1)
+                                    + '.' + value[eg].starttime.getFullYear();
+                                    
+                            new lz.roomListInviteUserItem(parent.inn.inn.inn,
+                                    {
+                                        roomType:value[eg].roomtype.roomtypes_id,
+                                        currentusers : value[eg].currentusers,
+                                        obj : value[eg],
+                                        ispublic : true,
+                                        roomid : value[eg].rooms_id,
+                                        starttime : time,
+                                        roomname : value[eg].name,
+                                        publicSID:parent.parent.publicSID,
+                                        user_id:parent.parent.user_id
+                                    });
+                        }
+                    }
+                ]]>                                     
+            </handler>  
+        </netRemoteCallHib>
+
+        <!-- inn.inn.inn view would be setted object by above ondata hander. -->
+        <view name="inn" width="480" height="${ parent.height }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+            <view name="inn" x="1" y="1" width="478" height="${ parent.height-2 }" 
+                        bgcolor="0xFFFFFF" clip="true" >
+                <view name="inn" layout="axis:y;spacing:1"/>
+                <om_vscrollbar />
+            </view>
+        </view>
+    </view>
+	
+	<labelText labelid="779" x="2" y="222" fontstyle="bold" />
+	
+    <view x="4" y="242" height="150">
+        <handler name="oninit">
+            this.getRoomsByOrganisationWithoutType.doCall();
+        </handler>    
+
+        <netRemoteCallHib name="getRoomsByOrganisationWithoutType" funcname="conferenceservice.getRoomsByOrganisationWithoutType" remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <netparam><method name="getValue">return hib.currentdomainObj.organisation_id;</method></netparam>  
+            <handler name="ondata" args="value">    
+            <![CDATA[
+                if ($debug) Debug.write("getRoomsByOrganisationWithoutType ",value);
+                if (value != null) {
+                    for (var eg = 0; eg < value.length; eg++) {
+                        new lz.roomListInviteUserItem(parent.inn.inn.inn,{
+                                    roomType:value[eg].room.roomtype.roomtypes_id,
+                                    currentusers : value[eg].room.currentusers,
+                                    obj : value[eg],
+                                    ispublic : false,
+                                    roomid : value[eg].room.rooms_id,
+                                    starttime : parseDateToStringTime(value[eg].room.starttime),
+                                    roomname : value[eg].room.name,
+                                    publicSID:parent.parent.publicSID
+                                });
+                    }
+                }
+            ]]>                                     
+            </handler>  
+        </netRemoteCallHib> 
+ 
+                <!-- inn.inn.inn view would be setted object by above ondata hander. -->
+        <view name="inn" width="480" height="${ parent.height }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+            <view name="inn" x="1" y="1" width="478" height="${ parent.height-2 }" bgcolor="0xFFFFFF" clip="true" >
+                <view name="inn" layout="axis:y;spacing:1"/>
+                <om_vscrollbar />
+            </view>
+        </view>
+    </view>
+    
+    <simpleLabelButton labelid="55" width="100" onclick="this.parent.close();"
+		   x="$once{ parent.width-104 }" y="$once{ parent.height-26 }" />    	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx
new file mode 100644
index 0000000..8d5d5a9
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteMessage" extends="guiPresenter" labelid="1138"
+    docking="true" resizeable="false" closable="true" y="260"
+    width="400" x="300" height="240">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="conferenceRoomName" value="" type="string" />
+	<attribute name="roomId" value="0" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		  
+		  var tString = canvas.firstName + ' ' + canvas.lastName + ' ' 
+		                  + canvas.getLabelName(1137) + ' ' 
+		                  + this.conferenceRoomName;
+		                  
+		  this.message.setAttribute("text",tString);
+		
+		]]>
+	</handler>
+	
+	<method name="send">
+		
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject = new Object
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["message"] = "inviteToRoom";
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["action"] = "inviteToRoom";
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["roomId"] = this.roomId;
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["usermessage"] = this.message.getText();
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["publicSID"] = canvas.publicSID;
+		
+		if ($debug) Debug.write("Send to _ ",this.publicSID);
+		if ($debug) Debug.write("Send to _ ",this.user_id);
+		
+		this.sendMessageWithClientByPublicSIDOrUser.doCall();
+		
+	</method>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSIDOrUser" funcname="sendMessageWithClientByPublicSIDOrUser" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.publicSID;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.user_id;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSIDOrUser : ",value);
+                
+                if (parent._switch.getValue()) {
+            
+                    parent.refObj.checkConditionsWhenButtonClicked(null);
+                    
+                } else {
+                	
+                	parent.refObj.doCloseWindow();
+                	
+                }
+                
+                parent.close();
+            ]]>
+        </handler>  
+    </netRemoteCallHib>	
+    
+    <labelText labelid="1136" x="2" y="22" fontstyle="bold" />
+    
+    <customScrollEdittext name="message" y="42" x="2" width="$once{ parent.width - 4 }" 
+            height="100" text="" />
+            
+    <labelCheckbox x="2" y="$once{ parent.height-48 }" fontsize="11"
+        name="_switch" labelid="1134" >
+    </labelCheckbox>  
+    
+    <simpleLabelButton labelid="1139" width="200" x="88" y="$once{ parent.height-22 }" 
+        onclick="this.parent.send();" />
+        
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx
new file mode 100644
index 0000000..4053ab6
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteNotification" extends="guiPresenter" labelid="1138"
+    docking="true" resizeable="false" closable="true" y="260"
+    width="400" x="300" height="240">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="conferenceRoomName" value="" type="string" />
+	<attribute name="usermessage" value="" type="string" />
+	<attribute name="roomId" value="0" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		  
+		  this.message.message.setAttribute("text",this.usermessage);
+		
+		]]>
+	</handler>
+	
+	<method name="accept">
+		canvas.roomJumpId = this.roomId;
+        quicklinkAct("jumpToRoom");
+		
+		this.close();
+	</method>
+	
+	<method name="deny">
+		
+		this.sendMessageWithClientByPublicSID.messageObject = new Object
+		this.sendMessageWithClientByPublicSID.messageObject["message"] = "inviteToRoomAnswer";
+		this.sendMessageWithClientByPublicSID.messageObject["action"] = "inviteToRoomAnswer";
+		this.sendMessageWithClientByPublicSID.messageObject["usermessage"] = canvas.firstName + ' ' + canvas.lastName + ' ' 
+                                                                                    + canvas.getLabelName(1140);
+		this.sendMessageWithClientByPublicSID.doCall();
+		
+	</method>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSID : ",value);
+                parent.close();
+            ]]>
+        </handler>  
+    </netRemoteCallHib>	
+    
+    <labelText labelid="1136" x="2" y="22" fontstyle="bold" />
+    
+    <view y="42" x="2" name="message" width="$once{ parent.width - 4 }" clip="true">
+    	<text name="message"  width="$once{ parent.width - 16 }"
+            height="100" text="" multiline="true" />
+    </view>
+    
+    <simpleLabelButton labelid="1141" width="100" x="86" y="$once{ parent.height-22 }" 
+        onclick="this.parent.accept();" />
+        
+    <simpleLabelButton labelid="1142" width="100" x="188" y="$once{ parent.height-22 }" 
+        onclick="this.parent.deny();" />
+        
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/library.lzx b/WebContent/src/modules/chat/inviteuser/library.lzx
new file mode 100644
index 0000000..bffbfe1
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+	<include href="roomListInviteUserItem.lzx" />
+	<include href="chatParticipantsInviteMessage.lzx" />
+	<include href="chatParticipantsInviteNotification.lzx" />
+	<include href="chatParticipantsInviteConference.lzx" />
+	
+    
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx b/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx
new file mode 100644
index 0000000..2de9ed7
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="roomListInviteUserItem" extends="view" bgcolor="$once{ canvas.bgColorMenuItems }" 
+		   height="50" onmouseover="" onmouseout="" width="478" >
+
+		<attribute name="ispublic" value="false" type="boolean" />
+		<attribute name="isaudience" value="false" type="boolean" />
+		<attribute name="obj" value="null" />
+		<attribute name="roomid" value="0" type="number" />
+		<attribute name="starttime" value="" type="string" />
+		<attribute name="roomname" value="" type="string" />
+
+		<attribute name="roomClassName" value="conferenceView" type="string" />
+		<attribute name="currentusers" value="null" />
+
+		<attribute name="maxUsers" value="4" type="number" />
+		
+		<attribute name="roomType" value="0" type="number" />
+
+		<attribute name="checkForMaxUsers" value="false" type="boolean" />
+		
+		<attribute name="publicSID" value="" type="string" />
+		<attribute name="user_id" value="0" type="number" />
+
+		<handler name="oninit">
+		<![CDATA[
+
+			//if ($debug) Debug.write("obj: ",obj);
+			if (this.ispublic) {
+				this.maxUsers = obj.numberOfPartizipants;
+			} else {
+				this.maxUsers = obj.room.numberOfPartizipants;
+			}
+			this._users.setAttribute('text', canvas.getLabelName(398) + ' '
+							+ this.currentusers.length + " / " + this.maxUsers);
+			var tString = canvas.getLabelName(401) + "<br/>";
+			for (var i = 0; i < this.currentusers.length; i++) {
+				tString += this.currentusers[i].firstname + " "
+						+ this.currentusers[i].lastname + " ("
+						+ this.currentusers[i].username + ") "
+						+ canvas.getLabelName(399)
+						+ parseDateToStringTime(this.currentusers[i].roomEnter)
+						+ " <br/>";
+			}
+			this._labeltooltip.setAttribute('text', tString);
+		]]>
+		</handler>
+
+		<handler name="onclick">
+			canvas.isConference = !this.isaudience;
+			if (this.isaudience)
+				connectedIsAudience = '_' + 'audi';
+			if (this.ispublic) {
+				hib.conferencedomain = "public";
+				hib.currentroomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				hib.conferencedomain = this.obj.organisation.organisation_id;
+				hib.currentroomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			if ($debug) Debug.write("onclick", this);
+			parent.parent.parent.parent.parent._roomlistdetails.doinit(
+					this.currentusers, this.roomid, this.roomname);
+		</handler>
+
+		<method name="checkMaxUsers">
+		<![CDATA[
+			if (this.currentusers.length < this.maxUsers) {
+				this.enterRoom();
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:99});
+				//new lz.rpcErrorDialog(canvas.main_content._content.inner, {
+				//			errorid : 30
+				//		});
+			}
+		]]>
+		</method>
+
+		<method name="enterRoom">
+			
+			var roomid = 0;
+			
+			if (this.ispublic) {
+				roomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				roomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			
+			canvas.roomJumpId = roomid;
+			quicklinkAct("jumpToRoom");
+			
+			this.doCloseWindow();
+		</method>
+
+		<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId"
+			remotecontext="$once{ canvas.thishib }" >
+			<netparam> <method name="getValue">return parent.parent.roomid;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				if ($debug) Debug.write("getRoomClientsListByRoomId: ", value);
+				parent.currentusers = value;
+				parent.oninit.sendEvent();
+				if (parent.checkForMaxUsers) {
+					parent.checkMaxUsers();
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>
+
+		<labelText text="$once{ parent.roomname }" />
+
+		<labelText name="_users" y="26" />
+		<image name="_r" src="$once{ canvas.getThemeImage('reload_rsc') }" x="130" y="26"
+			onclick="parent.getRoomClientsListByRoomId.doCall()" >
+			<labelTooltip labelid="402" />
+		</image>
+
+		<method name="checkConditionsWhenButtonClicked" args="_clicked">
+			checkForMaxUsers = true;
+			getRoomClientsListByRoomId.doCall();
+		</method>
+		
+		<method name="doCloseWindow">
+			if ($debug) Debug.write("doCloseWindow :: ");
+			parent.parent.parent.parent.parent.close();
+		</method>
+
+		<simpleLabelButton labelid="1135" x="380" width="80" height="24" y="20">
+			<handler name="onclick">
+				new lz.chatParticipantsInviteMessage(canvas,{
+    				    refObj:parent,
+    				    publicSID:parent.publicSID,
+    				    user_id:parent.user_id,
+    				    conferenceRoomName:parent.roomname,
+    				    roomId:parent.roomid
+    				});
+			</handler>
+		</simpleLabelButton>
+
+		<labelTooltip multiline="true" name="_labeltooltip" />
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/library.lzx b/WebContent/src/modules/chat/library.lzx
new file mode 100644
index 0000000..b70fa7b
--- /dev/null
+++ b/WebContent/src/modules/chat/library.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+	<include href="globalAttributes.lzx" />
+	<include href="globalMethods.lzx" />
+	
+	<include href="chatMiniButton.lzx" />
+	<include href="chatBarMenu.lzx" />
+	<include href="inviteuser/" />
+	
+	<include href="chatParticipants.lzx" />
+	<include href="fontOptions.lzx" />
+	<include href="emotIconsSelector.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/browser/conferenceBrowser.lzx b/WebContent/src/modules/conference/browser/conferenceBrowser.lzx
new file mode 100644
index 0000000..441b6b3
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/conferenceBrowser.lzx
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	-->
+	<!--
+	<include href="extensions/html.lzx"/>
+     -->
+     
+    <class name="browserButton" extends="view" width="22" height="22">
+    	
+    	<attribute name="enabled" value="true" type="boolean" />
+    	
+    	<handler name="onenabled" args="o">
+    		this.enabled = o;
+    		if (o) {
+    			this.setAttribute("opacity",1);
+    		} else {
+    			this.setAttribute("opacity",0.5);
+    		}
+    	</handler>
+    	
+    </class> 
+     
+	<class name="conferenceBrowser" extends="labelExplorerBox" labelid="749" 
+		   x="200" closable="false" resizeable="true">
+		 
+		<!--
+		      this attribute is true if the user has opened the browser on its own
+		      if the browser is opened by a Remote-Call, the user will get the Web-Site 
+		      notifications from the Moderator(s)
+		 -->
+		<attribute name="initedByUser" value="true" type="boolean" /> 
+		
+		<attribute name="initURL" value="" type="string" /> 
+		
+		<attribute name="callBackJSDelegate" value="null" /> 
+		
+		<attribute name="browserhistoryPre" value="null" />
+		<attribute name="browserhistoryPost" value="null" /> 
+		 
+		<handler name="oninit">
+			<![CDATA[
+			
+			    this.browserhistoryPre = new Array();
+			    this.browserhistoryPost = new Array();
+			    
+			    this.updateIcons();
+			
+				canvas.conferenceBrowserIsinited = true;
+				this.callBackJSDelegate = new LzDelegate(this, "updatedURLValues");
+			
+                var os = lz.Browser.getOS();
+                
+                //We have to detect Firefox, unfortunately it does not work for
+                //Windows with Firefox see: http://jira.openlaszlo.org/jira/browse/LPP-8525
+                
+                if ($debug) Debug.write("os ::",os.indexOf('Win'),os);
+                
+                //To test this you have to run the application with the index.jsp wrapper that
+                //contains the browser-detection code
+                if (false && os.indexOf("Win") >= 0) {
+                
+                    if ($debug) Debug.write("os :: version isWindows check for Firefox Bug ",os,version);
+                    
+                    getBrowserLang(this);
+                
+                }
+                
+                if (canvas.ismoderator) {
+                	
+                    this._navigation._inner._showBar.setAttribute('started', true);
+                    
+                }
+                
+                //see attribute definition for docs
+                if (this.initedByUser) {
+                	this._navigation._inner.browser.navigation.url.setAttribute("text","http://www.google.com");
+                	this._navigation._inner.browser.navigation.readStart.setURL();
+                	
+                	this.sendBrowserMessageToMembers.objMessage = new Array();
+                	this.sendBrowserMessageToMembers.objMessage[0] = "initBrowser";
+                	this.sendBrowserMessageToMembers.objMessage[1] = this._navigation._inner.browser.navigation.url.text;
+                	this.sendBrowserMessageToMembers.doCall();
+                } else {
+                	
+                	this._navigation._inner.browser.navigation.url.setAttribute("text",this.initURL);
+                	this._navigation._inner.browser.navigation.readStart.setURL();
+                	
+                }
+                
+            ]]>
+        </handler>
+        
+        <method name="callback" args="returnValue">
+        	<![CDATA[
+        	
+        	    if ($debug) Debug.write("getBrowserInfo callback ",returnValue);
+                        
+                if (returnValue.indexOf("Firefox") >= 0) {
+                    
+                    this.setAttribute("y",160);
+                    
+                    new lz.labelerrorPopup(canvas,{y:0,errorlabelid:750});
+                }
+        	
+        	]]>
+        </method>
+        
+        <method name="newBrowserURL" args="newURL">
+        	this._navigation._inner.browser.navigation.url.setAttribute("text",newURL);
+        	this._navigation._inner.browser.navigation.readStart.setURL();
+        </method>
+        
+        <method name="updatedURLValues" args="returnValue">
+        	
+        	if ($debug) Debug.write("updatedURLValues ",returnValue);
+        	
+        </method>
+        
+        <method name="getIFrameLocation">
+        	<![CDATA[
+
+                //function callbackIFrameLocation(returnValue) {
+                    
+                //    if ($debug) Debug.write("callbackIFrameLocation ",returnValue);
+                    
+                //}
+                
+                //lz.Browser.callJS("getiFrameOMSource",callbackIFrameLocation, "__lz0");   
+                
+                this.htmlviewer.callJavascript("window.location.href",this.callBackJSDelegate);
+                
+                
+                
+        	]]>
+        </method>
+        
+        <netRemoteCallHib name="sendBrowserMessageToMembers" funcname="sendBrowserMessageToMembers" 
+        				   remotecontext="$once{ canvas.thishib }" >
+        	<attribute name="objMessage" value="null" />
+            <netparam name="vars"><method name="getValue">return parent.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                	if ($debug) Debug.write("getValue : ",value);
+                	if (this.objMessage[0] == "closeBrowserURL") {
+                		parent.close();
+                	}
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <handler name="onismoderator" reference="canvas" args="m">
+            if ($debug) Debug.write("###### ismoderator ",m);
+            <![CDATA[
+                //this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+                if (m) {
+                    this._navigation._inner._showBar.setAttribute('started', true);
+                } else {
+                	this._navigation._inner.setAttribute("y",-40);
+                }
+                //throw a onx/y event to 
+                this.setAttribute("y",this.y);
+            ]]>
+        </handler>
+        
+        <method name="addLocalHistoryPre" args="url">
+        	this.browserhistoryPre.push(url);
+        	this.updateIcons();
+        </method>
+        
+        <method name="addLocalHistoryPost" args="url">
+            this.browserhistoryPost.push(url);
+            this.updateIcons();
+        </method>
+        
+        <method name="updateIcons">
+        	<![CDATA[
+            	if (this.browserhistoryPre.length > 1) {
+            		this._navigation._inner.browser.navigation._pre.setAttribute("enabled",true);
+            	} else {
+            		this._navigation._inner.browser.navigation._pre.setAttribute("enabled",false);
+            	}
+            	
+            	if (this.browserhistoryPost.length > 0) {
+                    this._navigation._inner.browser.navigation._post.setAttribute("enabled",true);
+                } else {
+                    this._navigation._inner.browser.navigation._post.setAttribute("enabled",false);
+                }
+        	]]>
+        </method>
+        
+        <method name="doPreItem">
+        	<![CDATA[
+                if (this.browserhistoryPre.length > 1) {
+                	
+                	if ($debug) Debug.write("doPreItem 1 ",this.browserhistoryPre.length);
+                	
+                	var lastItem = this.browserhistoryPre[this.browserhistoryPre.length-2];
+                	var nextItem = this.browserhistoryPre[this.browserhistoryPre.length-1];
+                	
+                	if ($debug) Debug.write("doPreItem 2 ",lastItem);
+                	
+                	this.browserhistoryPost.push(nextItem);
+                	
+                	this.browserhistoryPre.splice(this.browserhistoryPre.length-2,1);
+                	
+                	if ($debug) Debug.write("doPreItem 3 ",this.browserhistoryPre.length);
+                	
+                	this._navigation._inner.browser.navigation.url.setAttribute("text",lastItem);
+                    this._navigation._inner.browser.navigation.readStart.setURLWithoutEvent();
+                	
+                	this.updateIcons();
+                	
+                	return lastItem;
+                }
+            ]]>
+        </method>
+        
+        <method name="doPostItem">
+            <![CDATA[
+                if (this.browserhistoryPost.length > 0) {
+                    
+                    var lastItem = this.browserhistoryPost[this.browserhistoryPost.length-1];
+                    
+                    this.browserhistoryPost.splice(this.browserhistoryPost.length-1,1);
+                    
+                    this.browserhistoryPre.push(lastItem);
+                    
+                    this._navigation._inner.browser.navigation.url.setAttribute("text",lastItem);
+                    this._navigation._inner.browser.navigation.readStart.setURLWithoutEvent();
+                    
+                    this.updateIcons();
+                    
+                    return lastItem;
+                }
+            ]]>
+        </method>
+        
+        <method name="doClose">
+            if (canvas.ismoderator) {
+            
+                this.sendBrowserMessageToMembers.objMessage = new Array();
+                this.sendBrowserMessageToMembers.objMessage[0] = "closeBrowserURL";
+                this.sendBrowserMessageToMembers.doCall();
+            
+            }
+        </method>
+        
+        <handler name="onclose">
+        	canvas.conferenceBrowserIsinited = false;
+            this.htmlviewer.setVisible(false);
+        </handler>              
+        
+        <!--
+            Broadcast Message to all user
+         -->
+        <view name="_navigation" clip="true" y="22" height="38" width="${ parent.width }" >
+    		<view name="_inner" y="-40">
+    			
+    			<animator name="_showBar" attribute="y" to="0" duration="750" started="false">
+    				<handler name="onstop">
+    					lz.Focus.setFocus(parent.browser.navigation.url,true);
+    				</handler>
+    			</animator>
+    			
+    			<!-- enabled="false" -->
+        		<view name="browser" height="28" bgcolor="0xEEEEEE" x="1" >
+        			
+        			<view name="navigation" layout="axis:x;spacing:1;inset:1">
+        				
+        				<browserButton name="_pre" resource="./resources/pre.png" y="2">
+        					<handler name="onclick">
+        						if ($debug) Debug.write("PRE");
+        						parent.parent.parent.parent.parent.doPreItem();
+        					</handler>
+        					<labelTooltip labelid="751" />
+        				</browserButton>
+        				
+        				<browserButton name="_post" resource="./resources/next.png" y="2" enabled="false">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("NEXT");
+                                parent.parent.parent.parent.parent.doPostItem();
+                            </handler>
+                            <labelTooltip labelid="752" />
+                        </browserButton>
+                        
+                        <browserButton resource="./resources/refresh.png" y="2">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("RELOAD");
+                                parent.readStart.sendURL();
+                            </handler>
+                            <labelTooltip labelid="753" />
+                        </browserButton>
+                        
+                        <browserButton resource="./resources/home.png" y="2">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("HOME");
+                                parent.url.setAttribute("text","http://www.google.com");
+                                parent.readStart.sendURL();
+                            </handler>
+                            <labelTooltip labelid="754" />
+                        </browserButton>
+                        
+        				<edittext name="url" width="${classroot.width- (5*22) - 8}"> 
+        					<handler name="onkeyup" args="key">
+        						if ((key == 27) || (key == 13)) {
+        							this.parent.readStart.onclick.sendEvent();
+        						}
+        					</handler>
+        				</edittext>
+        				
+        				<browserButton name="readStart" resource="./resources/run.png" 
+        							    y="2">
+        					<handler name="onclick">
+            					this.sendURL();
+        					</handler>
+        					<method name="sendURL">
+        						this.setURL();
+        						
+        						parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage = new Array();
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage[0] = "newBrowserURL";
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage[1] = parent.url.text;
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.doCall();
+        					</method>
+        					<method name="setURL">
+        						<![CDATA[
+            						var url = parent.url.getText();
+            						if ((url.indexOf("http://") < 0)
+            								&& (url.indexOf("https://") < 0)) {
+            							url = "http://" + url;
+            						}
+            
+            						parent.parent.parent.parent.parent.htmlviewer.ignoreNextEvent = true;
+            						parent.parent.parent.parent.parent.htmlviewer.setAttribute("src",url);
+            						parent.parent.parent.parent.parent.htmlviewer.setAttribute("visible",true);
+            						
+            						parent.parent.parent.parent.parent.addLocalHistoryPre(url);
+            						
+            						parent.url.setAttribute('text', url);
+            					]]>
+        					</method>
+        					
+        					<method name="setURLWithoutEvent">
+                                <![CDATA[
+                                    var url = parent.url.getText();
+                                    if ((url.indexOf("http://") < 0)
+                                            && (url.indexOf("https://") < 0)) {
+                                        url = "http://" + url;
+                                    }
+            
+                                    parent.parent.parent.parent.parent.htmlviewer.ignoreNextEvent = true;
+                                    parent.parent.parent.parent.parent.htmlviewer.setAttribute("src",url);
+                                    parent.parent.parent.parent.parent.htmlviewer.setAttribute("visible",true);
+                                    
+                                    parent.url.setAttribute('text', url);
+                                ]]>
+                            </method>
+        					
+        				</browserButton> 
+        				
+        			</view>
+        			
+        			<view x="0" resource="./resources/browser_sub_cit.swf" 
+        				  width="${ parent.parent.parent.parent.width-2 }" stretches="width" y="28" />
+        			
+        		</view>
+        		
+            </view>
+        </view>
+        
+		<html name="htmlviewer" x="4" y="${ (canvas.ismoderator) ? 60 : 22 }" width="${ parent.width-8 }" 
+			  height="${ (canvas.ismoderator) ? (parent.height - 90) : (parent.height-52) }" >
+			
+			<attribute name="ignoreNextEvent" value="false" type="boolean" />
+			
+			<handler name="onloading" args="loading">
+				<![CDATA[
+					this.loading = loading;
+					if ($debug) Debug.write("LOADING 1 ",loading,this.src);
+					if ($debug) Debug.write("LOADING 2 ",loading,this);
+					if (canvas.ismoderator) {
+						if (!loading && !this.ignoreNextEvent) {
+							parent.getIFrameLocation();
+							
+							//parent.sendBrowserMessageToMembers.objMessage = new Object();
+		                	//parent.sendBrowserMessageToMembers.objMessage[0] = "newBrowserURL";
+		                	//parent.sendBrowserMessageToMembers.objMessage[1] = this.src;
+		                	//parent.sendBrowserMessageToMembers.doCall();
+						}
+					}
+					
+					if (!loading) {
+						this.ignoreNextEvent = false;
+					}
+				]]>
+			</handler>
+			<handler name="onsrc" args="src">
+				this.src = src;
+				//if ($debug) Debug.write("SRC ",src);
+			</handler>
+		</html>
+		
+		<labelText labelid="1006" y="${ parent.height-22 }" x="2"
+				   visibility="${ (canvas.ismoderator) ? 'visible' : 'hidden' }" />
+		
+        <simpleLabelButton labelid="61" width="100" 
+			   visibility="${ (canvas.ismoderator) ? 'visible' : 'hidden' }" 
+			   x="${ parent.width-105 }" y="${ parent.height-24 }" 
+               onclick="this.parent.doClose();" />
+    		  
+	</class>
+ 	
+</library>
diff --git a/WebContent/src/modules/conference/browser/library.lzx b/WebContent/src/modules/conference/browser/library.lzx
new file mode 100644
index 0000000..d88ffc2
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/library.lzx
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<include href="conferenceBrowser.lzx"/>
+</library>
diff --git a/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla
new file mode 100644
index 0000000..c5e5ac6
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf
new file mode 100644
index 0000000..784c5cc
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/home.fla b/WebContent/src/modules/conference/browser/resources/home.fla
new file mode 100644
index 0000000..f8d095a
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/home.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/home.png b/WebContent/src/modules/conference/browser/resources/home.png
new file mode 100644
index 0000000..39d1123
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/home.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/next.fla b/WebContent/src/modules/conference/browser/resources/next.fla
new file mode 100644
index 0000000..13c844e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/next.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/next.png b/WebContent/src/modules/conference/browser/resources/next.png
new file mode 100644
index 0000000..7241532
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/next.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/pre.fla b/WebContent/src/modules/conference/browser/resources/pre.fla
new file mode 100644
index 0000000..74da78f
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/pre.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/pre.png b/WebContent/src/modules/conference/browser/resources/pre.png
new file mode 100644
index 0000000..7e526f5
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/pre.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/read.png b/WebContent/src/modules/conference/browser/resources/read.png
new file mode 100644
index 0000000..b41fa2b
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/read.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/refresh.fla b/WebContent/src/modules/conference/browser/resources/refresh.fla
new file mode 100644
index 0000000..dce3961
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/refresh.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/refresh.png b/WebContent/src/modules/conference/browser/resources/refresh.png
new file mode 100644
index 0000000..b912672
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/refresh.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/run.fla b/WebContent/src/modules/conference/browser/resources/run.fla
new file mode 100644
index 0000000..65d073e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/run.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/run.png b/WebContent/src/modules/conference/browser/resources/run.png
new file mode 100644
index 0000000..c77b8d9
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/run.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp
new file mode 100644
index 0000000..3172abe
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp
@@ -0,0 +1,33 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+   
+      <link rel="SHORTCUT ICON" href="http://www.laszlosystems.com/favicon.ico">
+      <title>OpenLaszlo Application</title>
+	<script type="text/javascript" src="<%= request.getContextPath() %>/lps/includes/embed-compressed.js"></script>
+	</head>
+   	<body>
+	    <script type="text/javascript">
+              Lz.swfEmbed({url: 'conferenceBrowser_test.lzx?lzt=swf', bgcolor: '#ffffff', width: '100%', height: '100%', id: 'lzapp', accessible: 'false', wmode: 'transparent'});
+            </script>
+   </body>
+</html>
diff --git a/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx
new file mode 100644
index 0000000..81eed0e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas title="Browser Test" debug="true">
+	<include href="../../../../base/"/>
+	<include href="../conferenceBrowser.lzx"/>
+	
+	<conferenceBrowser name="cb" width="400" height6="800"/>
+</canvas>
diff --git a/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx b/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx
new file mode 100644
index 0000000..04ff32f
--- /dev/null
+++ b/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="commonVideoComponentAdapter" extends="node">
+	
+
+    <handler name="oninit">
+    	var t = this;
+        canvas.videoComp_lc.lc_switchMicMuted = function(publicSID, tMute) {
+            if ($debug) Debug.write("lc_switchMicMuted", publicSID, tMute);
+            canvas.thishib.switchMicMuted.setMute(publicSID, tMute);
+        };
+        canvas.videoComp_lc.lc_giveExclusiveAudio = function(publicSID) {
+            if ($debug) Debug.write("lc_giveExclusiveAudio", publicSID);
+            canvas.thishib.giveExclusiveAudio.setExclusiveAudio(publicSID);
+        };
+        canvas.videoComp_lc.as3ConnectionSuccess = function() {
+        	//FIXME: Throws a Null Pointer Exception if the parent view was already destroyed
+        	t.parent.as3ConnectionSuccess();
+        }
+		canvas.videoComp_lc.onInterviewPodCount = function(count) {
+			//if ($debug) Debug.write(":::: onInterviewPodCount", count);
+			if (canvas._drawarea["onInterviewPodCount"]) {
+				canvas._drawarea.onInterviewPodCount(count);
+			}
+		}
+    </handler>
+    
+    <!---
+        Show the popup with the possibility to choose the device settings
+        @param isSyncUpdate show the popup also if the user has clicked the "do not show again" chceckbox
+        @param interviewPodId the view id
+        @param tx x-position
+        @param ty y-position
+        @param twidth width-position
+        @param theight height-position
+     -->
+    <method name="showDevicePopUpInterview" args="isSyncUpdate,interviewPodId,tx,ty,twidth,theight">
+    	if ($debug) Debug.write("showDevicePopUpInterview ",isSyncUpdate,interviewPodId,tx,ty,twidth,theight);
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [isSyncUpdate, true, interviewPodId]);
+    </method>
+    
+    <!---
+        Show the popup with the possibility to choose the device settings
+        @param isSyncUpdate show the popup also if the user has clicked the "do not show again" chceckbox
+     -->
+    <method name="showDevicePopUp" args="isSyncUpdate">
+    	if ($debug) Debug.write("showDevicePopUp ",isSyncUpdate);
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [isSyncUpdate, false, -1]);
+    </method>
+    
+    <!---
+        Invoked after the user enters the room to connect the SWF10 app to the server via rtmp(t/s)
+     -->
+    <method name="reconnectSuccess" args="isInterview">
+    	if ($debug) Debug.write("Send reconnectSuccess to ",canvas.rtmp_lc_name);
+    	canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "reconnectSuccess", [canvas.thishib.src, canvas.publicSID
+    		, hib.userobject, isInterview, canvas.getHttpHost(), canvas.red5httpport]);
+    </method>
+    
+    <handler name="onismoderator" reference="canvas" args="m">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "ismoderatorChanged", [m]);
+    </handler>
+
+    <!---
+        Creates video object
+    -->
+    <method name="createVideo" args="publicSID,displayName,broadcastId,avsettings,interviewPodId,object">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createVideo", [publicSID, displayName, broadcastId, avsettings, interviewPodId, object]);
+    </method>
+
+    <method name="createVideoObject" args="publicSID,isBroadcasting,interviewPodId,object">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createVideoObject", [publicSID, isBroadcasting, interviewPodId,object]);
+    </method>
+
+    <!---
+        invoked whenever a User starts to Stream Video in this Room,
+        interviewPodId has only a meaning in the Room Type Interview
+     -->
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,vWidth,vHeight">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "startStream", [publicSID,broadcastId,firstname,lastname,interviewPodId,vWidth,vHeight]);
+    </method>
+
+    <!---
+        invoked remotely by Red5-notification
+        shows a green light if somebody is speaking
+        @param string broadcastId broadcastId
+        @param boolean bool show light on/off
+    -->
+    <method name="setSpeakingByPos" args="publicSID,bool">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSpeakingByPos", [publicSID, bool]);
+    </method>
+
+    <!---
+        stops the streaming but does not destroy the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="closeStreamClient" args="publicSID">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeStreamClient", [publicSID]);
+    </method>
+
+    <!---
+        stops the streaming but and destroys the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="disconnectclient" args="publicSID">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "disconnectclient", [publicSID]);
+    </method>
+
+    <method name="resetAllValues">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "resetAllValues",null);
+    </method>
+
+    <!---
+     invoked if another client logs into the room
+    after choosing devices -->
+    <method name="setAVSettingsToClient" args="rcl">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "setAVSettingsToClient", [rcl]);
+    </method>
+
+    <method name="createEditRecordStream" args="syncUpdate"><![CDATA[
+        //this.syncUpdate = syncUpdate;
+        //h.getBroadCastId.doCall();
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [syncUpdate]);
+    ]]></method>
+
+    <method name="removeVideoByUser" args="publicSID">
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "removeVideoByUser", [publicSID]);
+    </method>
+
+    <!--
+        Mutes/unmutes a sound of user's video
+        with the publicSID
+    -->
+    <method name="muteSound" args="publicSID, bool">
+    	if ($debug) Debug.write("muteSound :: ",publicSID,bool);
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "muteSound", [publicSID, bool]);
+    </method>
+
+    <method name="giveExclusiveAudio" args="publicSID">
+    	if ($debug) Debug.write("giveExclusiveAudio :: ",publicSID);
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "giveExclusiveAudio", [publicSID]);
+    </method>
+
+    <!---
+        Updates microphone's state of roomClient
+    -->
+    <method name="updateMuteStatusVideoView" args="roomClient">
+    	if ($debug) Debug.write("updateMuteStatusVideoView :: ",roomClient);
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateMuteStatusVideoView", [roomClient]);
+    </method>
+
+    <!---
+        Shows the window with device settings
+    -->
+    <method name="changeDevice">
+    	if ($debug) Debug.write("changeDevice :: ");
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "changeDevice", null);
+    </method>
+
+    <!---
+        Shows the exit dialog
+    -->
+    <method name="exitRoom">
+    	if ($debug) Debug.write("exitRoom :: ");
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "exitRoom", null);
+    </method>
+
+    <!---
+        Shows the close whiteboard dialog
+    -->
+    <method name="closeWhiteboard">
+    	if ($debug) Debug.write("closeWhiteboard :: ");
+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeWhiteboard", null);
+    </method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/commonVideoViewContent.lzx b/WebContent/src/modules/conference/commonVideoViewContent.lzx
new file mode 100644
index 0000000..6f8f018
--- /dev/null
+++ b/WebContent/src/modules/conference/commonVideoViewContent.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="commonVideoViewContent" extends="view">
+
+    <!--
+		This method returns a free position for a new video object
+		@param horizontal offset between two video objects
+	 -->
+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+        <![CDATA[
+            var newx = 20;
+            var newy = 0;
+            var posFound = false;
+            while (!posFound) {
+                posFound = true;
+                for (var i=0;i<this.subviews.length;i++){
+                    var subview = this.subviews[i];
+                    var left = subview.x;
+                    var right = subview.x + subview.width;
+                    var top = subview.y;
+                    var bottom = subview.y + subview.height;
+
+                    if( !(newx > right
+                        || (newx + videoWidth) < left
+                        || newy > bottom
+                        || (newy + videoHeight) < top ))
+                    {
+                        newx = right + offsetLength;
+                        posFound = false;
+                    }
+                    if ((newx + videoWidth) >= canvas.width) {
+                        newx = 20;
+                        newy += 10;
+                        posFound = false;
+                    }
+                }
+            }
+
+            if ((newy + videoHeight) >= canvas.height) {
+                newy = 0;
+            }
+
+            var result = [newx, newy];
+            return result;
+        ]]>
+    </method>
+
+</class>
+
+<class name="commonVideoViewContentHideWhiteboard" extends="view">
+
+    <!--
+		This method returns a free position for a new video object
+		@param horizontal offset between two video objects
+	 -->
+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+        <![CDATA[
+            var newx = 20;
+            var newy = 0;
+            var posFound = false;
+            while (!posFound) {
+                posFound = true;
+                for (var i=0;i<this.subviews.length;i++){
+                    var subview = this.subviews[i];
+                    var left = subview.x;
+                    var right = subview.x + subview.width;
+                    var top = subview.y;
+                    var bottom = subview.y + subview.height;
+
+                    if( !(newx > right
+                        || (newx + videoWidth) < left
+                        || newy > bottom
+                        || (newy + videoHeight) < top ))
+                    {
+                        newx = right + offsetLength;
+                        posFound = false;
+                    }
+                    if ((newx + videoWidth) >= this.width) {
+                        newx = 20;
+                        newy += 10;
+                        posFound = false;
+                    }
+                }
+            }
+
+            if ((newy + videoHeight) >= parent.height) {
+                newy = 0;
+            }
+
+            var result = [newx, newy];
+            return result;
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/conferenceMenubar.lzx b/WebContent/src/modules/conference/conference/conferenceMenubar.lzx
new file mode 100644
index 0000000..bfa2a61
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/conferenceMenubar.lzx
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="restrictedConferenceMenubar" extends="conferenceMenubar" viewType="restricted" />
+
+	<class name="interviewConferenceMenubar" extends="conferenceMenubar" viewType="interview"/>
+	
+	<class name="conferenceMenubar" extends="view" height="28" width="${ canvas.width }" 
+						bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+						
+		<attribute name="viewType" value="conference" type="string" />
+						
+	    <attribute name="selected" value="null" />
+    
+	    <method name="sendOpenMenu" args="menuref">
+	    	if (this.selected != null) {
+	    		this.selected.setAttribute("selected",false);
+	    	}
+	    	this.selected = menuref;
+	    	this.selected.setAttribute("selected",true);
+	    </method>
+			
+		<view name="itemlist" layout="axis:x;spacing:0" >
+			
+			<conferenceExitButton name="_exitbtn" 
+				text_y_inset="4" text_fontsize="14" down_y_inset="8" height="28" />
+				
+			<baseMenuMeetingsItem text="$once{ canvas.getLabelName(245) }" 
+						text_y_inset="4" text_fontsize="14" down_y_inset="8"
+						textToolTip="" height="28"
+						visible="${ (classroot.viewType=='interview') ? false : ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+						>
+				<handler name="onclick">
+			    	new lz.conferenceMenuFiles(canvas,{
+			    				x:this.getAttributeRelative("x",canvas),
+			    				y:this.getAttributeRelative("y",canvas)+this.height,
+			    				btnRef:this,
+			    				list:this.list
+			    			});
+			        this.parent.parent.sendOpenMenu(this);
+			    </handler>
+			</baseMenuMeetingsItem>
+			
+			<baseMenuMeetingsItem text="$once{ canvas.getLabelName(635) }" 
+						text_y_inset="4" text_fontsize="14" down_y_inset="8"
+						textToolTip="" height="28"
+						visible="${ canvas.currentRoomObj.hideActionsMenu ? false : ((classroot.viewType=='conference') ? true : (canvas.ismoderator ? true : (canvas.isAllowedToDraw ? true : false ))) }"
+						>
+				<handler name="onclick">
+			    	new lz.conferenceMenuActions(canvas,{
+			    				x:this.getAttributeRelative("x",canvas),
+			    				y:this.getAttributeRelative("y",canvas)+this.height,
+			    				btnRef:this
+			    			});
+			        this.parent.parent.sendOpenMenu(this);
+			    </handler>
+			</baseMenuMeetingsItem>
+			
+		</view>
+	
+	</class> 
+	
+	<class name="conferenceExitButton" extends="view" height="34" width="${ this._ctext.width+36 }" >
+	
+	    <attribute name="text_y_inset" value="6" type="number" />
+	    <attribute name="text_fontsize" value="14" type="number" />
+	    
+	    <attribute name="down_y_inset" value="10" type="number" />
+	    
+	    <handler name="onmouseover">
+            this.bgc.setAttribute('visibility','visible');
+	    </handler>
+	    <handler name="onmouseout">
+            this.bgc.setAttribute('visibility','hidden');
+	    </handler>
+	    
+	    <handler name="oninit">
+			<![CDATA[
+				if (canvas.isRemoteUser()) {
+	            	if ($debug) Debug.write("this mbarcontent ",this);
+	            	if (canvas.destroyExitButton) {
+	                    this.destroy();
+	            	}
+	            }
+            ]]>
+		</handler>
+		<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.exitRoom();
+		</handler>
+	    
+	    <view width="${ parent.width-1 }" bgcolor="0xFFFFFF" opacity="0.4" height="$once{ parent.height - 2}" y="1"
+	        visibility="hidden" name="bgc"/>
+	        
+	    <image src="$once{ canvas.getThemeImage( 'exit_btn_rsc' ) }" y="4" x="4" />
+	    
+	    <view width="1" height="${ parent.height }" y="0" bgcolor="0xEEEEEE" x="${ parent.width-1 }" />
+	    
+	    <labelText labelid="789" name="_ctext" fontstyle="plain" fgcolor="0xFFFFFF"
+	        	fontsize="$once{ parent.text_fontsize }" y="$once{ parent.text_y_inset }" x="30" />
+	
+	    <labelTooltip name="_textToolTip" labelid="309" multiline="false" />
+	    
+	</class>
+	
+	
+	
+	<class name="conferencDropDownMenuItem" extends="view" height="36">
+	
+		<attribute name="isSpacer" value="false" type="boolean" />
+	
+		<attribute name="enabled" type="boolean" setter="this.setEnabled(enabled)" />
+		
+		<method name="setEnabled" args="e">
+			this.enabled = e;
+			if (!this.isinited) {
+				return;
+			}
+			if (this.enabled) {
+				this._ctext.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));
+				this._ctextTooltip.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));
+			} else {
+				this._ctext.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));
+				this._ctextTooltip.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));
+			}
+			if (this.command) {
+				this.command.enabled = this.enabled;
+			}
+		</method>
+		
+		<attribute name="labelid" type="number"
+                   setter="this.setLabelId( labelid )"   when="once" />
+                   
+		<method name="setLabelId" args="id" >
+            this.labelid = id;
+            if ( this.labelid ) {
+                this._ctext.setAttribute('text', canvas.getLabelName(this.labelid));
+            }
+        </method>
+		
+		<attribute name="command" type="expression"
+                   setter="this.setCommand( command )"   when="once" />
+		
+		<method name="setCommand" args="cmd" >
+            this.command = cmd;
+            if ( this.command ) {
+                this._ctextTooltip.setAttribute('text',canvas.getLabelName(command.tipLabelId));
+            }
+        </method>
+        
+        <handler name="onclick">
+        	if (!this.enabled) {
+        		return;
+        	}
+        	this.command.execute(null);
+        	parent.parent.close();
+        </handler>
+        
+        <handler name="onmouseover">
+	        this._bg.setAttribute("visibility","visible");
+	    </handler>
+	    
+	    <handler name="onmouseout">
+	        this._bg.setAttribute("visibility","hidden");
+	    </handler>
+	
+	    <view name="_bg" visibility="hidden" width="${ parent.width-2 }" y="0" x="1"
+	          bgcolor="0xFFFFFF" opacity="0.5" height="36" />
+	    
+	    <text name="_ctext" fontstyle="bold" fgcolor="0x666666"
+	        	fontsize="14" y="2" x="10" />
+	        	
+	    <text name="_ctextTooltip" fontstyle="plain" fgcolor="0x666666"
+	        	fontsize="10" y="20" x="10" />	
+		
+	</class> 
+	
+	<class name="conferenceMenuFiles" extends="baseDropDownMenuList"
+			height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+			
+		<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" >
+			
+			<conferencDropDownMenuItem labelid="15" command="cmd_importFile"
+						enabled="${ canvas.ismoderator }" />
+			
+		</view>
+		
+	</class>
+	
+	<class name="conferenceMenuActions" extends="baseDropDownMenuList"
+			height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+			
+		<handler name="oninit">
+	        this.fixWidth();
+		</handler>
+			
+		<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" >
+			
+			<conferencDropDownMenuItem labelid="213" command="cmd_invitation"
+						enabled="${ canvas.timeZonesLoaded &amp;&amp; canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="239" command="cmd_shareDesktop" 
+						enabled="${ classroot.btnRef.classroot.viewType != 'interview' &amp;&amp; canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="784" command="cmd_applyforMod" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="785" command="cmd_applyforWhiteBoard" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="1601" command="cmd_applyforA" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="786" command="cmd_applyforAV" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="24" command="cmd_createPoll" enabled="${ canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="37" command="cmd_pollResults" enabled="true" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="42" command="cmd_checkPollVoted" enabled="${ canvas.user_id != -1 }" />
+			<horizontalDropDownSpacer
+						 visible="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }" />
+            <conferencDropDownMenuItem labelid="1447" command="cmd_showSipDialer" 
+            			 visible="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }"
+            			 enabled="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }"/>
+            <horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="1126" command="cmd_editWhiteboardDefault" enabled="true"/>
+			<!-- Save Whiteboard as Image menues are commented for now
+            <horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="560" command="cmd_exportFileSVG" enabled="true"/>
+			<conferencDropDownMenuItem labelid="561" command="cmd_exportFilePNG" enabled="true"/>
+			<conferencDropDownMenuItem labelid="562" command="cmd_exportFileJPG" enabled="true"/>
+			-->
+		</view>
+		
+	</class>
+</library>
diff --git a/WebContent/src/modules/conference/conference/library.lzx b/WebContent/src/modules/conference/conference/library.lzx
new file mode 100644
index 0000000..bc15f04
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="roomListItem.lzx" />
+	<include href="roomListDetails.lzx" />
+    <include href="conferenceMenubar.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/roomListDetails.lzx b/WebContent/src/modules/conference/conference/roomListDetails.lzx
new file mode 100644
index 0000000..1db94ba
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/roomListDetails.lzx
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="userRoomTabItem" extends="view" 
+	   width="$once{ parent.width }" >
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="cbtext" value="" type="string" />
+	
+	<handler name="oninit">
+		<![CDATA[
+	        var downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=CHAT'
+	        		+'&moduleName=chat&parentPath=&room_id='
+	        		+'&remoteUserid='+this.user_id
+	        		+'&sid='+canvas.sessionId;
+	        		
+	        if ($debug) Debug.write("downloadurl "+downloadurl);
+	        this._userpic.setAttribute('src',downloadurl);	
+	        
+	        if ($debug) Debug.write("TIME: "+this.usertime);
+	        
+        ]]>
+	</handler>
+	
+	<image name="_userpic" />
+
+	<text text="$once{ parent.username }" x="40"
+		  width="$once{ parent.width - 40 }"
+		  selectable="true" />
+	
+	<text text="$once{ parent.usertime }" x="40" y="20" />
+
+</class>
+
+<class name="roomListDetails" extends="view" >
+
+	<attribute name="roomid" value="0" type="number" />
+	<attribute name="roomname" value="" type="string" />
+	<attribute name="roomcomment" value="" type="string" />
+	<attribute name="currentusers" value="null" />
+	
+	
+	<method name="doinit" args="currentusers,roomid,roomname,roomcomment">
+		<![CDATA[
+			if ($debug) Debug.write("doinit",currentusers,roomid,roomname);
+			this.setAttribute('currentusers',currentusers);
+			this.setAttribute('roomid',roomid);
+			this.setAttribute('roomname',roomname);
+			this.setAttribute('roomcomment',roomcomment);
+			this._roomname.setAttribute('text',canvas.getLabelName(406)+" "+roomname);
+			this._roomcomment.setAttribute('text', roomcomment);
+			this._users.clearList();
+			if (this.currentusers != null) {
+				for (var i = 0;i<this.currentusers.length;i++){
+					var username = this.currentusers[i].firstname + " "
+							+ this.currentusers[i].lastname
+							+ " (" + this.currentusers[i].username + ") ";
+					 new lz.userRoomTabItem(this._users._users._cbtext,{user_id:this.currentusers[i].user_id,username:username,usertime:canvas.getLabelName(408)+parseDateToStringTime(this.currentusers[i].roomEnter)});
+				}
+			}
+			this.bdatum.setAttribute("visibility", "hidden");
+    		this.edatum.setAttribute("visibility", "hidden");
+    		this.l_bdatum.setAttribute("visibility", "hidden");
+    		this.l_edatum.setAttribute("visibility", "hidden");
+    		if (roomid > 0) {
+				this.getAppointmentData.doCall();
+			}
+		]]>
+	</method>
+	
+	<!-- Retrieving Appointmentdata for Meeting -->
+	<netRemoteCallHib name="getAppointmentData" remotecontext="$once{ canvas.thishib }" 
+		funcname="conferenceservice.getAppointMentDataForRoom" >   
+		<netparam><method name="getValue">return parent.parent.roomid;</method></netparam>
+		<handler name="ondata" args="value">	
+		    <![CDATA[
+		    	if ($debug) Debug.write("getAppointmentData: ",value);
+		    	
+		    	if(value!=null){
+		    		
+		    		if ($debug) Debug.write("Appointment Name : " + value.title);
+		    		parent.bdatum.setAttribute('text',""+value.start);
+		    		parent.edatum.setAttribute('text',""+value.end);
+		    		
+		    		
+		    		parent.bdatum.setAttribute("visibility","visible");
+		    		parent.edatum.setAttribute("visibility","visible");
+		    		parent.l_bdatum.setAttribute("visibility","visible");
+		    		parent.l_edatum.setAttribute("visibility","visible");
+		    		
+		    		if ($debug) Debug.write("Appointment Start : " + value.start);
+		    		if ($debug) Debug.write("Appointment End : " + value.end);
+		    		
+		    	} else{
+		    		
+		    		parent.bdatum.setAttribute('text','');
+		    		parent.edatum.setAttribute('text','');
+		    		
+		    		parent.bdatum.setAttribute("visibility", "hidden");
+		    		parent.edatum.setAttribute("visibility", "hidden");
+		    		parent.l_bdatum.setAttribute("visibility", "hidden");
+		    		parent.l_edatum.setAttribute("visibility", "hidden");
+		    		
+		    	}
+		    ]]>	        	          				
+		</handler>	
+	</netRemoteCallHib> 	
+	
+	<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId" 
+		remotecontext="$once{ canvas.thishib }" >   
+		<netparam><method name="getValue">return parent.parent.roomid;</method></netparam>
+		<handler name="ondata" args="value">	
+		    <![CDATA[
+		    	if ($debug) Debug.write("getRoomClientsListByRoomId: ",value);
+		    	parent.currentusers = value;
+		    	parent.doinit();
+		    ]]>	        	          				
+		</handler>	
+	</netRemoteCallHib>   	
+	
+	<labelText labelid="404" fontstyle="italic" width="200" />
+	
+	<labelText name="_roomname" labelid="406" y="20" width="200" />
+	
+	<labelText name="l_bdatum" labelid="570" y="40" width="50" visible="false" />
+	<labelText name="bdatum" y="40" x="75" width="100" text="" visible="false" /> 	            	
+
+	<labelText name="l_edatum" labelid="571" y="60" width="50" visible="false" />
+	<labelText name="edatum" y="60" x="75" width="100" text="" visible="false" />
+
+	<labelText name="_roomcomment" x="75" y="${parent.l_edatum.y + (parent.l_edatum.visible ? 30 : 0)}" width="100" text=""/>
+	<labelText labelid="270" y="${parent._roomcomment.y}" width="50" />
+
+	<labelText name="user_label" labelid="407" y="${10 + parent._roomcomment.y + parent._roomcomment.height}" width="200" />
+	<view name="_users" width="300" y="${30 + parent._roomcomment.y + parent._roomcomment.height}"
+				height="${ parent.height - parent._users.y }" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		<method name="clearList">
+			for (var eg in this._users._cbtext.subviews) 
+				this._users._cbtext.subviews[eg].destroy();
+		</method>
+		<view name="_users" width="299" height="${ parent.height - 1 }" bgcolor="0xFFFFFF" 
+			  x="1" y="1" clip="true" >
+			<view name="_cbtext" width="286" layout="axis:y;spacing:2" />
+			<om_vscrollbar />
+		</view>
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/roomListItem.lzx b/WebContent/src/modules/conference/conference/roomListItem.lzx
new file mode 100644
index 0000000..e9776d9
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/roomListItem.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="roomListItem" extends="view" bgcolor="$once{ canvas.bgColorMenuItems }" 
+		   height="50" onmouseover="" onmouseout="" width="478" >
+
+		<attribute name="ispublic" value="false" type="boolean" />
+		<attribute name="isaudience" value="false" type="boolean" />
+		<attribute name="obj" value="null" />
+		<attribute name="roomid" value="0" type="number" />
+		<attribute name="starttime" value="" type="string" />
+		<attribute name="roomname" value="" type="string" />
+		<attribute name="roomcomment" value="" type="string" />
+
+		<attribute name="roomClassName" value="conferenceView" type="string" />
+		<attribute name="currentusers" value="null" />
+
+		<attribute name="maxUsers" value="4" type="number" />
+		
+		<attribute name="roomType" value="0" type="number" />
+
+		<attribute name="checkForMaxUsers" value="false" type="boolean" />
+
+		<handler name="oninit">
+		<![CDATA[
+
+		    if (obj != null) {
+    			//if ($debug) Debug.write("obj: ",obj);
+    			if (this.ispublic) {
+    				this.maxUsers = obj.numberOfPartizipants;
+    			} else {
+    				this.maxUsers = obj.room.numberOfPartizipants;
+    			}
+    			this._users.setAttribute('text', canvas.getLabelName(398) + ' '
+    							+ this.currentusers.length + " / " + this.maxUsers);
+    			var tString = canvas.getLabelName(401) + "<br/>";
+    			for (var i = 0; i < this.currentusers.length; i++) {
+    				tString += this.currentusers[i].firstname + " "
+    						+ this.currentusers[i].lastname + " ("
+    						+ this.currentusers[i].username + ") "
+    						+ canvas.getLabelName(399)
+    						+ parseDateToStringTime(this.currentusers[i].roomEnter)
+    						+ " <br/>";
+    			}
+    			this._labeltooltip.setAttribute('text', tString);
+		    }
+		]]>
+		</handler>
+
+		<handler name="onclick">
+			if (obj != null) {
+    			canvas.isConference = !this.isaudience;
+    			if (this.isaudience)
+    				connectedIsAudience = '_' + 'audi';
+    			if (this.ispublic) {
+    				hib.conferencedomain = "public";
+    				hib.currentroomid = this.obj.rooms_id;
+    			} else {
+    				hib.conferencedomain = this.obj.organisation.organisation_id;
+    				hib.currentroomid = this.obj.room.rooms_id;
+    			}
+			}
+			parent.parent.parent.parent.parent._roomlistdetails.doinit(
+    					this.currentusers, this.roomid, this.roomname, this.roomcomment);
+		</handler>
+
+		<method name="checkMaxUsers">
+		<![CDATA[
+			if (this.currentusers == null || this.currentusers.length < this.maxUsers) {
+				this.enterRoom();
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:99});
+				//new lz.rpcErrorDialog(canvas.main_content._content.inner, {
+				//			errorid : 30
+				//		});
+			}
+		]]>
+		</method>
+		
+		<method name="enterRoom">
+			if (this.obj == null) {
+				this.getRoomByOwnerAndType.doCall();
+			} else {
+				this.initRoom();
+			}
+		</method>
+		
+		<netRemoteCallHib name="getRoomByOwnerAndType" funcname="conferenceservice.getRoomByOwnerAndType"
+            remotecontext="$once{ canvas.thishib }" >
+			<netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <netparam> <method name="getValue">return parent.parent.roomType;</method></netparam>
+            <netparam> <method name="getValue">return parent.parent.roomname;</method></netparam>
+            <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomByOwnerAndType: ", value);
+                if (value != null) {
+                    parent.obj = value;
+                    parent.enterRoom();
+                }
+            ]]>
+            </handler>
+        </netRemoteCallHib>
+
+		<method name="initRoom">
+			if ($debug) Debug.write("roomListItem::initRoom ", this);
+			
+			canvas.isConference = !this.isaudience;
+			if (this.isaudience)
+				connectedIsAudience = '_' + 'audi';
+			if (this.ispublic) {
+				var roomObj = this.obj;
+				hib.conferencedomain = "public";
+				hib.currentroomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				var roomObj = this.obj.room;
+				hib.conferencedomain = this.obj.organisation.organisation_id;
+				hib.currentroomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			
+			if (this.roomType == 1) {
+				this.roomClassName = canvas.conferenceRoomModule;
+			} else if (this.roomType == 2) {
+				new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+				this.roomClassName = canvas.restrictedRoomModule;
+			} else if (this.roomType == 3) {
+                this.roomClassName = canvas.restrictedRoomModule;
+            } else if (this.roomType == 4) {
+                this.roomClassName = canvas.interviewRoomModule;
+            } else if (this.roomType == 5) {
+                this.roomClassName = canvas.customRoomModule;
+            } else {
+				if ($debug) Debug.warn("Not known RoomType: ",this.roomType);
+			}
+			//the conferencedomain is no more interesting, swagner 07.10.2009
+			//if ($debug) Debug.write("hib.conferencedomain: ", hib.conferencedomain);
+
+			if ($debug) Debug.write("Test Setup ",this.roomClassName);
+            
+			new lz.testSetup(canvas,{roomClassName:this.roomClassName,roomObj:roomObj});
+			
+		</method>
+
+		<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId"
+			remotecontext="$once{ canvas.thishib }" >
+			<netparam> <method name="getValue">return parent.parent.roomid;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				if ($debug) Debug.write("getRoomClientsListByRoomId: ", value);
+				parent.currentusers = value;
+				parent.oninit.sendEvent();
+				if (parent.checkForMaxUsers) {
+					parent.checkMaxUsers();
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>
+
+		<labelText text="$once{ parent.roomname }" />
+
+		<labelText name="_users" y="26" />
+		<image name="_r" src="$once{ canvas.getThemeImage('reload_rsc') }" x="130" y="26"
+			onclick="parent.getRoomClientsListByRoomId.doCall()" >
+			<labelTooltip labelid="402" />
+		</image>
+  
+		<method name="checkConditionsWhenButtonClicked" args="_clicked">
+		<![CDATA[
+			if (parent.parent.parent.parent.parent.parent.parent.parent.finishedTabsQuantity < 3) {
+				parent.parent.parent.parent.parent.parent.parent.parent.clickedButton = _clicked;
+			} else {
+				checkForMaxUsers = true;
+				getRoomClientsListByRoomId.doCall();
+			}
+		]]>
+		</method>
+
+		<simpleLabelButton labelid="131" x="364" width="100" height="24" y="24"
+			onclick="parent.checkConditionsWhenButtonClicked(this)">
+		</simpleLabelButton>
+		
+		<labelTooltip multiline="true" name="_labeltooltip" />
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx
new file mode 100644
index 0000000..56e963e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx
@@ -0,0 +1,584 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="simplebaseItemActivityList" extends="view" height="40" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    
+    <attribute name="message" value="" type="string" />
+    
+    <attribute name="rcl" value="null" />
+    
+    <attribute name="tStamp" value="null" />
+    
+    <method name="removeObject">
+        this.sendClearMessage(false);
+    </method>
+    
+    <method name="closeItem">
+        this._doHide.setAttribute('started', true);
+    </method>
+    
+    <method name="destroyItem">
+        this.destroy();
+        parent.scrollToMax();
+    </method>
+    
+    <method name="sendClearMessage" args="bool">
+        canvas.thishib.sendMessageWithClient.sendAdvMessage("hideActivityObj",bool,this.tStamp);
+    </method>
+    
+    <miniIcons resource="allow_deny_icon_rsc" visible="${ canvas.ismoderator }"
+               x="$once{ parent.width - 18 }" y="0">
+        <handler name="onclick">
+            this.parent.removeObject();
+        </handler>
+        <labelTooltip labelid="154" />
+    </miniIcons>   
+    
+    <animator name="_doHide" attribute="opacity" duration="1250" to="0" started="false">
+        <handler name="onstop">
+            parent.destroyItem();
+        </handler>
+    </animator>    
+    
+</class>	
+	
+<class name="baseItemActivityList" extends="view" height="40" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+	
+	<attribute name="message" value="" type="string" />
+	
+	<attribute name="labelidToolTipOkButton" value="1360" type="number" />
+	<attribute name="labelidToolTipDenyButton" value="1361" type="number" />
+    
+    <attribute name="rcl" value="null" />
+    
+    <attribute name="tStamp" value="null" />
+    
+    <method name="removeObject">
+        this.sendClearMessage(false);
+    </method>
+    
+    <method name="closeItem">
+    	this._doHide.setAttribute('started', true);
+    </method>
+    
+    <method name="destroyItem">
+        this.destroy();
+        parent.scrollToMax();
+    </method>
+    
+    <method name="sendClearMessage" args="bool">
+		canvas.thishib.sendMessageWithClient.sendAdvMessage("hideActivityObj",bool,this.tStamp);
+    </method>
+    
+    <miniIcons resource="allow_ok_icon_rsc" visible="${ canvas.ismoderator }"
+    		   x="$once{ parent.width - 18 }" >
+        <handler name="onclick">
+            this.parent.applyObject();
+        </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelidToolTipOkButton }" />
+    </miniIcons> 
+               
+    <miniIcons resource="allow_deny_icon_rsc" visible="${ canvas.ismoderator }"
+    		   x="$once{ parent.width - 18 }" y="16">
+        <handler name="onclick">
+            this.parent.removeObject();
+        </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelidToolTipDenyButton }" />
+    </miniIcons>   
+    
+    <animator name="_doHide" attribute="opacity" duration="1250" to="0" started="false">
+        <handler name="onstop">
+            parent.destroyItem();
+        </handler>
+    </animator>    
+	
+</class>
+
+<class name="activityListRestrictedRoomAV" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.canVideo = true;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "av";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="av_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="40"
+               width="$once{ parent.width - 60 }"/>
+               
+</class>
+	
+<class name="activityListRestrictedRoomApplyForMuteOn" extends="baseItemActivityList" 
+	   labelidToolTipOkButton="1400">
+    
+    <method name="applyObject">
+        canvas.thishib.switchMicMuted.setMute(this.rcl.publicSID,true);
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="mute_btn_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="40"
+               width="$once{ parent.width - 60 }"/>
+               
+</class>
+
+<class name="activityListRestrictedRoomApplyForGiveExclusiveAudioOn" extends="baseItemActivityList"
+	   labelidToolTipOkButton="1428">
+
+    <method name="applyObject">
+        canvas.thishib.setCanGiveAudio.sendValue(this.rcl.publicSID,true);
+        this.sendClearMessage(true);
+    </method>
+
+    <view resource="participants_exclusive_audio_rsc" x="2" y="2" />
+
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+
+</class>
+	
+<class name="activityListRestrictedRoomApplyForMuteOff" extends="baseItemActivityList" 
+	   labelidToolTipOkButton="1401">
+	
+    <method name="applyObject">
+    	canvas.thishib.switchMicMuted.setMute(this.rcl.publicSID,false);
+        this.sendClearMessage(true);
+    </method>	
+	
+	<view resource="unmute_btn_rsc" x="2" y="2" />
+	
+	<labelText text="$once{ parent.message }" multiline="true" x="20"
+			   width="$once{ parent.width - 40 }"/>
+               
+</class>	
+
+<class name="activityListRestrictedRoomA" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.canVideo = false;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "a";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>
+    
+    <view resource="a_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+    
+<class name="activityListRestrictedRoomV" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "v";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="allow_video_only_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>   
+
+<class name="activityListRestrictedRoomWhiteboard" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setCanDraw.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanDraw.canDraw = true;
+        canvas.thishib.setCanDraw.doCall();
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="participants_allow_drawing_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomScreen" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        
+        canvas.thishib.setCanShare.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanShare.canShare = true;
+        canvas.thishib.setCanShare.doCall();
+        
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="screen_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomRemote" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        
+        canvas.thishib.setCanRemote.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanRemote.canRemote = true;
+        canvas.thishib.setCanRemote.doCall();
+
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="remote_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class> 
+
+<class name="activityListMessageRequest" extends="simplebaseItemActivityList">
+    
+    <method name="applyObject">
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="warning_icon_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomModeration" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.addModerator.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.addModerator.doCall();
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="participants_isMod_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityList" y="${ parent.height - 200 }" x="0"
+	   extends="basePropertyPanelWhiteboard" height="200" 
+         width="$once{ parent.width-10 }" labelid="1363" 
+         visibility="${((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 'hidden':'visible')}">
+    
+    <handler name="oninit">
+        canvas.currentActivityList = this;
+    </handler>
+    
+    <method name="addMessageRequest" args="rcl,message,tStamp">
+        <![CDATA[
+            var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] : " +
+                                   message + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            
+            new lz.activityListMessageRequest(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                        
+    </method>
+    
+    
+    <method name="addModerationRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                                   canvas.getLabelName(693) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(693) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+            
+            new lz.activityListRestrictedRoomModeration(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                        
+    </method>
+    
+    <method name="addScreenRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1070) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1070) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomScreen(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addRemoteRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1082) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1082) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomRemote(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="applyForMuteOn" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1396) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1399) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomApplyForMuteOn(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+
+    <method name="applyForGiveExclusiveAudioOn" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1427) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1426) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+
+            new lz.activityListRestrictedRoomApplyForGiveExclusiveAudioOn(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="applyForMuteOff" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1397) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1398) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomApplyForMuteOff(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addWhiteboardRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(694) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(694) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomWhiteboard(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addAudioRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1603) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1603) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                           
+            new lz.activityListRestrictedRoomA(this._list._list,{
+                                        message:txt,
+                                        width:this._list.width-14,
+                                        rcl:rcl,
+                                        tStamp:tStamp
+                                    });
+                                    
+            this._list._list.scrollToMax();                                    
+       ]]>                  
+    </method>
+    
+    <method name="addVideoRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1081) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {                
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1081) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                           
+            new lz.activityListRestrictedRoomV(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="addAudioAndVideoRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                               canvas.getLabelName(695) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(695) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+            
+            new lz.activityListRestrictedRoomAV(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="hideActivityObj" args="messageObj">
+    	<![CDATA[
+    	
+    	    for (var i=0;i<this._list._list.subviews.length;i++) {
+    	    	
+    	    	if ($debug) Debug.write("hideActivityObj:: ",this._list._list.subviews[i].tStamp,messageObj.message[2]);
+    	    	
+    	    	if (this._list._list.subviews[i].tStamp == messageObj.message[2]) {
+    	    		
+    	    		this._list._list.subviews[i].closeItem();
+    	    		
+    	    		return;
+    	    		
+    	    	}
+    	    	
+    	    }
+    	
+    	]]>
+    </method>
+    
+    <view name="_list" y="21" height="179" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }"
+    	  width="$once{ parent.width }" clip="true">
+        
+        <view name="_list">
+            
+            <method name="scrollToMax">
+                <![CDATA[
+			        if(this.height>parent.height){
+			            parent.myscrollbar.scrolltarget.setAttribute(parent.myscrollbar.scrollattr,(parent.height-this.height));
+			        }
+		        ]]>
+            </method>
+            
+            <simplelayout name="_layout" axis="y" spacing="1" />
+            
+        </view>
+        
+        <om_vscrollbar name="myscrollbar" />
+        
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx
new file mode 100644
index 0000000..4046d92
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- FamFam Icon Set -->
+    <resource name="allow_ok_icon_rsc" src="resources/tick.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="allow_deny_icon_rsc" src="resources/cross.png" />
+  
+    <include href="activityList.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png
new file mode 100644
index 0000000..1514d51
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx
new file mode 100644
index 0000000..49bbe5e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="appointmentNotificationPopUp" extends="guiPresenter" labelid="1144" y="30"
+    isdragable="false" minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="280" height="280" x="$once{ parent.width-this.width-10 }">
+	
+	<attribute name="roomobj" value="null" />
+	
+	<handler name="oninit" >
+		this.getAppointMentAndTimeZones.doCall();
+	</handler>
+	
+	<!-- Retrieving Appointmentdata for Meeting -->
+	<netRemoteCallHib name="getAppointMentAndTimeZones" remotecontext="$once{ canvas.thishib }" funcname="conferenceservice.getAppointMentDataForRoom" >
+		<netparam><method name="getValue">return parent.parent.roomobj.rooms_id;</method></netparam>
+		<handler name="ondata" args="value">	
+		<![CDATA[
+			if ($debug) Debug.write("getAppointMentAndTimeZones 1: ",parent.roomobj.rooms_id);
+			if ($debug) Debug.write("getAppointMentAndTimeZones 2: ",value);
+			
+			if (value != null) {
+				parent._appstart.setAttribute('text', value.start);
+				parent._append.setAttribute('text', value.end);
+				parent._timeZone.setAttribute('text', value.owner.timeZoneId);
+				
+				parent._appName.setAttribute('text', value.title);
+				parent._appDescr._appDescr.setAttribute('text', value.description ? value.description : "");
+				
+				parent._createdby.setAttribute('text', value.owner.firstname + ' ' + value.owner.lastname );
+			}
+		]]>	        	          				
+		</handler>	
+	</netRemoteCallHib> 
+	
+	<labelText name="appName" y="24" labelid="1145" width="50"/>
+	<labelText name="_appName" x="75" y="24" width="200" fontstyle="bold" /> 
+	
+	<labelText name="appDescr" y="46" labelid="1146" width="50"/>
+	<view name="_appDescr" x="75" y="46" width="200" height="100" bgcolor="0xFFFFFF" clip="true">
+		<labelText name="_appDescr" y="24" width="184" multiline="true" /> 
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="l_sdatum" labelid="1143" y="150" width="50" />
+	<labelText name="_timeZone" x="75" y="150" width="200" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 
+	
+	<labelText name="appstartlabel" y="170" labelid="570" width="50"/>
+	<labelText name="_appstart" x="75" y="170" width="200" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 
+	
+	<labelText name="l_edatum" labelid="571" y="190" width="50"  />
+	<labelText name="_append" y="190" x="75" width="200" text="" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 	 
+	
+	<labelText name="l_createdby" labelid="1147" y="210" width="50"  />
+	<labelText name="_createdby" y="210" x="75" width="200" text="" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 	   
+	
+    <simpleLabelButton labelid="1130" width="100" x="$once{ parent.width-105 }" 
+           y="$once{ parent.height-24 }" onclick="this.parent.close();" />	           	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
new file mode 100644
index 0000000..9c1931d
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="dtmfButton" extends="button" width="20" height="20" >
+    <attribute name="dtmf" value="" type="string"/>
+    <handler name="onclick">
+        callDTMFButton(this,this.text);
+    </handler>
+    <method name="doNextSipNumber">
+        if ($debug) Debug.write("doNextSipNumber ",this.text);
+    </method>
+</class>
+    
+<class name="debugPinCode" extends="labelExplorerBox" title="Enter PIN Code"
+    docking="true" resizeable="false" closable="true" width="100" x="14" height="120">
+    
+    
+    <view y="24">
+        
+        <dtmfButton text="1" x="20" dtmf="1"/> 
+            <dtmfButton text="2" x="40" dtmf="2"/> 
+                <dtmfButton text="3" x="60" dtmf="3"/>
+                
+        <dtmfButton text="4" x="20" y="20" dtmf="4"/> 
+            <dtmfButton text="5" x="40" y="20" dtmf="5"/> 
+                <dtmfButton text="6" x="60" y="20" dtmf="6"/>
+                
+        <dtmfButton text="7" x="20" y="40" dtmf="7"/> 
+            <dtmfButton text="8" x="40" y="40" dtmf="8"/> 
+                <dtmfButton text="9" x="60" y="40" dtmf="9"/>
+                
+        <dtmfButton text="10" x="20" y="60" dtmf="10"/>
+        
+    </view>
+    
+    
+</class>
+
+<class name="baseConferenceRoom" extends="baseContentView" destroyByMethod="true" >
+    
+    <attribute name="roomobj" value="null" />
+    
+    <attribute name="meetingTimer" value="null" />
+    
+	<handler name="oninit">
+	<![CDATA[
+		_mainScrollBar.setAttribute("visibility","hidden");
+		
+		if ($debug) Debug.write("roomobj: ",this.roomobj);
+		
+		canvas.currentRoomObject = this.roomobj;
+		var r = this.roomobj;
+		r.currentusers = ''; //this might be huge list
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name,"setRoomValues", [this.roomobj.roomtype.roomtypes_id,this.roomobj.rooms_id,r]);
+		
+		if (this.roomobj.isClosed) {
+			canvas.roomClosed();
+		}
+		
+		if (this.roomobj.waitForRecording) {
+			new lz.labelerrorPopup(canvas, {labelid: 1316, errorlabelid: 1315});
+		}
+		
+		canvas._mainbgcontentNavi.setAttribute('height',0);
+		canvas.setAttribute('naviHeightDelta',28);
+		
+		if (this._chatPanelStrict) {
+			var hideChat = this.roomobj.hideChat != null && this.roomobj.hideChat;
+			this._chatPanelStrict.setAttribute('visible', !hideChat);
+			if (hideChat) {
+				this._chatPanelStrict.setAttribute('height', 28);
+			}
+		}
+		
+		if (this.roomobj.hideTopBar == null || !this.roomobj.hideTopBar) {
+			createMenu();
+			canvas._conferencemenu.setAttribute('visibility','visible');
+		} else {
+			canvas.setAttribute('naviHeight',0);
+			canvas._conferencemenu.setAttribute('visibility','hidden');
+			canvas._mainbgcontentNavi.setAttribute('visibility','hidden');
+		}
+		
+		if ($debug) Debug.write("this.roomobj ",this.roomobj);
+
+		new lz.moderationPanel(canvas._moderatormenu,{
+				name:'_moderationPanel',align:'right',
+				allowUserQuestions:this.roomobj.allowUserQuestions,
+				roomName:this.roomobj.name
+			});
+		if (roomobj.appointment) {
+			canvas.appointmentNotificationPopUp = new lz.appointmentNotificationPopUp(this,{name:'appDetail', roomobj:this.roomobj });
+		} else {
+			if ($debug) Debug.write("no appointed meeting");
+		}
+		
+		if (this.roomobj.isDemoRoom && this.roomobj.demoTime != null) {
+			if ($debug) Debug.warn("THIS IS A DEMO ROOM THAT SHOULD CLOSE AFTER SEC: ",this.roomobj.demoTime);
+			this.meetingTimer = new lz.meetingTimer(canvas,{refObj:this,roomobj:this.roomobj});
+		}
+		
+		canvas.currentBaseConferenceRoom = this;
+		canvas._videocontainer.setAttribute("allowUserQuestions",this.roomobj.allowUserQuestions);
+	]]>
+	</handler>
+    
+	<handler name="onkeydown" reference="lz.Keys" args="keyCode">
+	<![CDATA[
+		if ($debug) Debug.write("onkeydown:: keyCode = ", keyCode);
+		// common keys are processed firstly
+		if (canvas.ARRANGE_WINDOWS_KEY == keyCode) {
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "arrangeWindows", null);
+			return;
+		}
+		if (canvas.GIVE_EXCLUSIVE_AUDIO_KEY == keyCode) {
+			if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+				canvas.thishib.giveExclusiveAudio.setExclusiveAudio(canvas.publicSID);
+			} else {
+				new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:-54});
+			}
+			return;
+		}
+		if (canvas.MUTE_AUDIO_KEY == keyCode) {
+			canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, !canvas.micMuted);
+			return;
+		}
+	]]>
+	</handler>
+
+    <screenSharingAdapter name="_screenSharingAdapter" />
+    
+    <baseTabChatPanel name="_chatPanelStrict" labelid="616"
+       height="200" x="${ parent._sidePanel.width }"  
+       y="${ canvas.height - (this.height) - ((canvas.currentRoomObj.hideTopBar) ? 0 : 28) }" 
+       width="${ canvas.width - parent._sidePanel.width }" isopen="${ !canvas.currentRoomObj.chatOpened }" />
+       <!-- isopen need to be reverted, will be toggled -->
+       
+	<handler name="ontabcontentleave">
+		if ($debug) Debug.write("################# ontabcontentleave:",this);
+		
+		this._screenSharingAdapter.closeAllScreenSharings();
+		
+		canvas.currentBaseConferenceRoom = null;
+		
+		//reset the right to draw on WHiteboard as the RoomClient Object will be destroyed also
+		//on server-Side the canDraw status will be false again when you relogin the same room
+		canvas.isAllowedToDraw = true;
+		
+		_mainScrollBar.setAttribute("visibility","visible");
+		
+		//reset rights
+		canvas.isAllowedToGiveExclusiveAudio = false;
+		
+		if (canvas._videocontainer!=null) {
+			canvas._videocontainer.resetAllValues();
+			canvas._videocontainer = null;
+		}
+		if (canvas._chatcontent!=null) {
+			canvas._chatcontent = null;
+		}
+		if (canvas._mymod!=null) {
+			canvas._mymod = null;
+		}
+		
+		if (this.meetingTimer != null) {
+			this.meetingTimer.close();
+		}
+		
+		if (canvas._drawarea.letterObjectIsActive) {
+			canvas._drawarea.currentletterObj.destroy();
+		}
+		
+		if (canvas.currentFileExplorer != null) {
+			canvas.currentFileExplorer = null;
+		}
+		
+		if (canvas.currentActivityList != null) {
+			canvas.currentActivityList = null;
+		}
+		
+		//@deprecated we will not use old screen sharing implementation
+		//canvas._screens.clearAllSessions();
+		this.logicalRoomLeave.doCall();
+		if ($debug) Debug.write("############ this.logicalRoomLeave ",this.logicalRoomLeave);
+	</handler>
+
+	<netRemoteCallHib name="logicalRoomLeave" funcname="logicalRoomLeave" remotecontext="$once{ canvas.thishib }" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("############# logicalRoomLeave: ",value);
+			//this.parent.destroy();
+			canvas.thishib.reconnectAfterRoomleft = true;
+			canvas.thishib.reconnectedRoomInstance = this.parent;
+			
+			// Reconnect User to default Scope
+			canvas.thishib.userScope = "hibernate";
+			var src = hib.getUrl();
+			canvas.thishib.setAttribute('src',src);
+			canvas.thishib.disconnect();
+			canvas._mainbgcontentNavi.setAttribute('height',canvas.naviHeight);
+			canvas.setAttribute('naviHeightDelta',canvas.naviHeight);
+			canvas._conferencemenu.removeAll();
+			canvas._conferencemenu.setAttribute('visibility','hidden');
+		</handler>
+	</netRemoteCallHib>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx
new file mode 100644
index 0000000..ed6844b
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--
+
+    This class hold a bunch method that is shared between the 
+    User List of different Room Types
+
+ -->
+
+<class name="baseRoomInnerList" extends="view" >
+	
+    <handler name="oninit">
+        <![CDATA[
+            this.initList();
+        ]]>
+    </handler>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
new file mode 100644
index 0000000..ede5029
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="flexibleConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.conferenceMenubar(canvas._conferencemenu);
+	</method>
+
+    <conferenceRoomSidebar name="_sidePanel" />
+    
+    <view name="_videoviewcontent_hideWhiteboard" y="0" x="${ parent._sidePanel.width }"
+		  width="${canvas.width-parent._sidePanel.width}" height="${canvas.height-(parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visibility == 'hidden') ? 5:28) + ((canvas.currentRoomObj.hideTopBar) ? 28:0)}" clip="true" 
+		  visibility="${((canvas.currentRoomObj.hideWhiteboard) ? 'visible':'hidden')}">
+			<view name="_inn" width="${parent.width-10}">				
+				<wrappinglayout axis="x" spacing="10"/>
+			</view>
+			<om_vscrollbar name="_attenddeescrollbar" visibility="visible"></om_vscrollbar>
+	</view>
+    
+    <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
+        y="0" x="${ parent._sidePanel.width }" 
+        width="${ canvas.width - parent._sidePanel.width }"
+        height="${ canvas.height - (parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visible) ? 28 : 6) + ((canvas.currentRoomObj.hideTopBar) ? 28:0)}" />
+    
+    <!--
+        ###############################
+        This is the container for all Videos
+     -->
+    <commonVideoViewContent name="_videoviewcontent" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx
new file mode 100644
index 0000000..72cb59e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="innerlistViewEventUserListTable" extends="view" width="258" >
+    <wrappinglayout name="_layout" axis="x" spacing="4"/>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
new file mode 100644
index 0000000..69e5a40
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.interviewConferenceMenubar(canvas._conferencemenu);
+	</method>
+	
+	<handler name="oninit">
+		canvas.currentRoomObj.hideScreenSharing = true;
+	</handler>
+	
+    <!--
+        User Panel and Participants List
+     -->
+    <interviewRoomSidebar name="_sidePanel" 
+                      listType="eventUserListTableWithNames" />
+    
+    <!--
+        Whiteboard in Interview Room Type those are the Video Pods
+     -->
+    <interviewWhiteboard name="_whiteboardInterview" x="${ parent._sidePanel.width }" 
+    	  width="${ canvas.width - parent._sidePanel.width }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx
new file mode 100644
index 0000000..17f308f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<resource name="userstatus_multiframe_rsc">
+		<frame src="resources/bullet_ball_glass_green.png"/> <!-- user -->
+		<frame src="resources/bullet_ball_glass_yellow.png"/> <!-- mod -->
+		<frame src="resources/bullet_ball_glass_red.png"/> <!-- whiteboard allow -->
+	</resource>
+	
+	<resource name="chat_message_incoming_rsc" src="resources/ledlightgreen.png" />
+	
+	<!-- FamFam Icon Set -->
+	<resource name="screen_allow_rsc" src="resources/monitor_add.png" />
+	<!-- FamFam Icon Set -->
+    <resource name="screen_deny_rsc" src="resources/monitor_delete.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="remote_allow_rsc" src="resources/mouse_add.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="remote_deny_rsc" src="resources/mouse_delete.png" />
+	
+	<!-- FamFam Icon Set -->
+	<resource name="a_allow_rsc" src="resources/micro_small_add.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="a_deny_rsc" src="resources/micro_small_no.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="av_allow_rsc" src="resources/audio_and_video.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="av_deny_rsc" src="resources/audio_and_video_no.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="start_private_chat_rsc" src="resources/page_edit.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="kick_user_rsc" src="resources/cancel_icon.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="mute_micro_btn_rsc">
+        <frame src="resources/mute_micro.png" />
+        <frame src="resources/mute_micro_red.png" />
+    </resource>
+    
+    <!-- APL author sebawagner -->
+    <resource name="mute_btn_rsc" src="resources/mute_micro.png" />
+    <!-- APL author sebawagner -->
+    <resource name="unmute_btn_rsc" src="resources/mute_micro_red.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="sidebar_tab_btn">
+		<frame src="resources/sidebar_close.png" />
+		<frame src="resources/sidebar_open.png" />
+	</resource>
+	
+	<include href="innerlistViewEventUserListTable.lzx" />
+	<include href="moderationMiniIconsEventUserList.lzx" />
+	<include href="activitylist/" />
+	<include href="roomSidebar/" />
+	<include href="appointmentNotificationPopUp.lzx" />
+	<include href="baseRoomInnerList.lzx" />
+    <include href="baseConferenceRoom.lzx" />
+    <include href="flexibleConferenceRoom.lzx" />
+    <include href="restrictedConferenceRoom.lzx" />
+    <include href="interviewConferenceRoom.lzx" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx
new file mode 100644
index 0000000..59d2214
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconsEventUserList" extends="view">
+
+    <attribute name="showAvIcons" value="true" type="boolean" />
+	
+    <handler name="oninit">
+    	this.updateIcons();
+    </handler>	
+    
+    <method name="updateIcons">
+    <![CDATA[
+        if (canvas.ismoderator) {
+            this._isMod.setAttribute("visibility","visible");
+            this._isModAddbutton.setAttribute("visibility","hidden");
+        } else {
+            this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+        }
+        
+        if (canvas.ismoderator) {
+            this._canDraw.setAttribute("visibility","visible");
+            this._canDraw.isActive = false;
+            //this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._canDrawModerator.setAttribute("visibility","hidden");
+        } else {
+            if (canvas.isAllowedToDraw) {
+                this._canDraw.setAttribute("visibility","visible");
+                this._canDraw.isActive = true;
+                //this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._canDrawModerator.setAttribute("visibility","hidden");
+            } else {
+                this._canDraw.setAttribute("visibility","hidden");
+                this._canDrawModerator.setAttribute("visibility","visible");
+            }
+        }
+        
+        if ($debug) Debug.write("canvas.isAllowedToScreenShare :: ",canvas.isAllowedToScreenShare);
+        
+        if (canvas.ismoderator) {
+            this._allowScreen.setAttribute("visibility","visible");
+            this._allowScreen.isActive = false;
+            
+            this._allowRemote.setAttribute("visibility","visible");
+            this._allowRemote.isActive = false;
+
+            this._allowExclusiveAudio.setAttribute("visibility","visible");
+            this._allowExclusiveAudio.isActive = false;
+            
+            //this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._denyScreen.setAttribute("visibility","hidden");
+            this._denyRemote.setAttribute("visibility","hidden");
+            this._denyExclusiveAudio.setAttribute("visibility","hidden");
+        } else {
+            if (canvas.isAllowedToScreenShare) {
+                this._allowScreen.setAttribute("visibility","visible");
+                this._allowScreen.isActive = true;
+                //this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._denyScreen.setAttribute("visibility","hidden");
+            } else {
+                this._allowScreen.setAttribute("visibility","hidden");
+                this._denyScreen.setAttribute("visibility","visible");
+            }
+            
+            if (canvas.isAllowedToRemoteControl) {
+            	this._allowRemote.setAttribute("visibility","visible");
+            	this._allowRemote.isActive = true;
+            	this._denyRemote.setAttribute("visibility","hidden");
+            } else {
+            	this._allowRemote.setAttribute("visibility","hidden");
+            	this._denyRemote.setAttribute("visibility","visible");
+            }
+
+            if (canvas.isAllowedToGiveExclusiveAudio) {
+                this._allowExclusiveAudio.setAttribute("visibility","visible");
+            	this._allowExclusiveAudio.isActive = true;
+            	this._denyExclusiveAudio.setAttribute("visibility","hidden");
+            } else {
+                this._allowExclusiveAudio.setAttribute("visibility","hidden");
+            	this._denyExclusiveAudio.setAttribute("visibility","visible");
+            }
+        }
+        
+        if ($debug) Debug.write("+ STATUS ICONS + ",this.showAvIcons,canvas.isBroadCasting);
+        
+        if (this.showAvIcons) {
+            this._allowDevice.setAttribute("visible", !canvas.isBroadCasting || !canvas.canVideo);
+            this._denyDevice.setAttribute("visible", canvas.isBroadCasting && canvas.canVideo);
+
+            this._allowAudio.setAttribute("visible", !canvas.isBroadCasting);
+            this._denyAudio.setAttribute("visible", canvas.isBroadCasting);
+        }
+        
+        if (canvas.micMuted) {
+            this._muteDevice.setAttribute("visibility","hidden");
+            this._unMuteDevice.setAttribute("visibility","visible");
+        } else {
+            this._muteDevice.setAttribute("visibility","visible");
+            this._unMuteDevice.setAttribute("visibility","hidden");
+        }
+	]]>
+	</method>
+    
+    <simplelayout axis="x" spacing="2" />
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(canvas.publicSID == event.publicSID) {
+                canvas.micMuted = event.mute;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+	
+    <miniIconsNew name="_isMod" x="0" width="16" innerResource="participants_isMod_rsc" 
+    		   height="16" showhandcursor="false">
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="688" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_isModAddbutton" opacity="0.5" x="0" width="16" innerResource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //Apply for Moderation
+                canvas.thishib.applyForModeration.doCall();
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="685" />
+    </miniIconsNew>
+        
+    <miniIconsNew name="_canDraw" x="20" width="16" innerResource="participants_allow_drawing_rsc" 
+               height="16" showhandcursor="false" >
+        <attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="689" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_canDrawModerator" x="20" width="16" opacity="0.5"
+               innerResource="participants_allow_drawing_rsc" height="16" showhandcursor="true">
+        <handler name="onclick">
+            //Ask for Right to Draw on Whiteboard
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForWhiteboard",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="686" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_allowScreen" x="40" width="16" height="16" 
+               innerResource="screen_allow_rsc" showhandcursor="false">
+        <attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                if ($debug) Debug.write("Deny Screen: ",canvas.publicSID);
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1071" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyScreen" x="40" width="16" height="16" opacity="0.5"
+               innerResource="screen_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Screen: ",canvas.refObj.publicSID);
+            var tDate = new Date();
+        	canvas.thishib.sendMessageWithClient.sendMessage("applyForScreen",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1072" />
+    </miniIconsNew>    
+    
+ 	<miniIconsNew name="_allowRemote" x="60" width="16" height="16" 
+               innerResource="remote_allow_rsc" showhandcursor="false">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Remote: ",canvas.publicSID);
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1081" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyRemote" x="60" width="16" height="16" opacity="0.5"
+               innerResource="remote_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Remote: ",parent.parent.parent.refObj.publicSID);
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForRemote",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1080" />
+    </miniIconsNew>      
+          
+    
+    <miniIconsNew name="_allowAudio" x="80" width="16" height="16" 
+            visible="$once{ parent.showAvIcons }" innerResource="a_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("NOTHING: ",canvas.publicSID);
+            if (canvas.ismoderator) {
+                //Do directly send confirmation to share Audio/Video to SELF! so that all users get
+                //the notification and the broadcasting Bit is set for this User
+                canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = false;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+                canvas.thishib.setBroadCastingFlag.doCall(); 
+            } else {
+                //Apply for Right to Share Audio/Video
+                var tDate = new Date();
+                canvas.thishib.sendMessageWithClient.sendMessage("applyForA",tDate.getTime());
+            }
+        </handler>
+        <labelTooltip labelid="1606" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyAudio" x="80" width="16" height="16" opacity="0.5"
+            visible="$once{ parent.showAvIcons }" innerResource="a_deny_rsc" showhandcursor="false">
+        <handler name="onclick">
+            if ($debug) Debug.write("DENY: ",canvas.publicSID);
+            //Nothing happens here
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = false;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip name="_text" labelid="1607" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_allowDevice" x="100" width="16" height="16" 
+            visible="$once{ parent.showAvIcons }" innerResource="av_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("NOTHING: ",canvas.publicSID);
+            if (canvas.ismoderator) {
+                //Do directly send confirmation to share Audio/Video to SELF! so that all users get
+                //the notification and the broadcasting Bit is set for this User
+                canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = true;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+                canvas.thishib.setBroadCastingFlag.doCall(); 
+            } else {
+                //Apply for Right to Share Audio/Video
+                var tDate = new Date();
+                canvas.thishib.sendMessageWithClient.sendMessage("applyForAV",tDate.getTime());
+            }
+        </handler>
+        <labelTooltip labelid="687" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyDevice" x="100" width="16" height="16" opacity="0.5"
+            visible="$once{ parent.showAvIcons }" innerResource="av_deny_rsc" showhandcursor="false">
+        <handler name="onclick">
+            if ($debug) Debug.write("DENY: ",canvas.publicSID);
+            //Nothing happens here
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = false;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip name="_text" labelid="690" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_muteDevice" x="120" width="16" height="16" 
+    		   innerResource="mute_btn_rsc" showhandcursor="true">
+    	<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, true);
+    	</handler>
+        <labelTooltip name="_tip" labelid="1403" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_unMuteDevice" x="120" width="16" height="16" innerResource="unmute_btn_rsc" 
+               showhandcursor="true" >
+    	<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, false);
+        </handler>
+        <labelTooltip name="_tip" labelid="1404" />
+    </miniIconsNew>
+
+    <miniIconsNew name="_allowExclusiveAudio" x="60" width="16" height="16"
+               innerResource="participants_exclusive_audio_rsc" showhandcursor="false">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Give Exclusive Audio: ",canvas.publicSID);
+                if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+	                canvas.thishib.giveExclusiveAudio.publicSID = canvas.publicSID;
+	                canvas.thishib.giveExclusiveAudio.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1433" />
+    </miniIconsNew>
+
+    <miniIconsNew name="_denyExclusiveAudio" x="60" width="16" height="16" opacity="0.5"
+               innerResource="participants_exclusive_audio_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Give Exclusive Audio: ",canvas.publicSID);
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForGiveExclusiveAudioOn",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1432" />
+    </miniIconsNew>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png
new file mode 100644
index 0000000..f02fcfa
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png
new file mode 100644
index 0000000..bd6277f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png
new file mode 100644
index 0000000..bbdcb01
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png
new file mode 100644
index 0000000..886c125
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png
new file mode 100644
index 0000000..fbf19db
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png
new file mode 100644
index 0000000..abbdd12
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png
new file mode 100644
index 0000000..2fb7ae1
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png
new file mode 100644
index 0000000..e818f4d
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png
new file mode 100644
index 0000000..a818066
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png
new file mode 100644
index 0000000..3733256
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png
new file mode 100644
index 0000000..65bcab5
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png
new file mode 100644
index 0000000..7286566
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla
new file mode 100644
index 0000000..210ddbf
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png
new file mode 100644
index 0000000..71efdbe
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla
new file mode 100644
index 0000000..287c2a0
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png
new file mode 100644
index 0000000..29e16b5
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png
new file mode 100644
index 0000000..046811e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla
new file mode 100644
index 0000000..1d5fffd
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png
new file mode 100644
index 0000000..08020fd
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla
new file mode 100644
index 0000000..0fd7f7f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png
new file mode 100644
index 0000000..e778538
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
new file mode 100644
index 0000000..6b2ae94
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.restrictedConferenceMenubar(canvas._conferencemenu);
+	</method>
+
+    <restrictedRoomSidebar name="_sidePanel" restricted="true" 
+                      listType="eventUserListTableWithNames" />
+    
+    <view name="_videoviewcontent_hideWhiteboard" y="0" x="${ parent._sidePanel.width }"
+		  width="${canvas.width-parent._sidePanel.width}" height="${canvas.height-(parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visibility == 'hidden') ? 5:28)}" clip="true" 
+		  visibility="${((canvas.currentRoomObj.hideWhiteboard) ? 'visible':'hidden')}">
+			<view name="_inn" width="${parent.width-10}">				
+				<wrappinglayout axis="x" spacing="10"/>
+			</view>
+			<om_vscrollbar name="_attenddeescrollbar" visibility="visible"></om_vscrollbar>
+	</view>
+    
+    <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
+        y="0" x="${ parent._sidePanel.width }" 
+        width="${ canvas.width - parent._sidePanel.width }"
+        height="${ canvas.height - (parent._chatPanelStrict.height) - ((parent._chatPanelStrict.visibility == 'hidden') ? 0:28) }" />
+        
+    <!--
+        ###############################
+        This is the container for all Videos
+     -->
+    <commonVideoViewContent name="_videoviewcontent" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx
new file mode 100644
index 0000000..50c898e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="conferenceRoomSidebar" extends="view" width="280" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+       height="${ canvas.height - ((canvas.currentRoomObj.hideTopBar) ? 0:28) }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+            if ($debug) Debug.write("this.selected.name ",this.selected.name);
+            
+            if (this.selected.name == "userTabButton") {
+                if ($debug) Debug.write("-- userTabButton");
+                this._files.setAttribute("visibility","hidden");
+                this._videocontainer._applyAndStatusIcons.setAttribute("visibility","visible");
+                this._videocontainer._participants.setAttribute("visibility","visible");
+            } else if (this.selected.name == "filesTabButton") {
+                if ($debug) Debug.write("-- filesTabButton");
+                this._files.setAttribute("visibility","visible");
+                this._videocontainer._applyAndStatusIcons.setAttribute("visibility","hidden");
+                this._videocontainer._participants.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <method name="toggleStatus">
+        if (this.isOpen) {
+            this._doClose.setAttribute('started', true);
+            this.isOpen = false;
+            this._minimizeSidebar._icon.setAttribute("frame",2);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",857);
+        } else {
+            this._doOpen.setAttribute('started', true);
+            this.isOpen = true;
+            this._minimizeSidebar._icon.setAttribute("frame",1);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",856);
+        }
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+		<![CDATA[
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            if (!canvas.currentRoomObj.hideFilesExplorer && canvas.currentRoomObj.filesOpened) {
+				this.filesTabButton.doSelection();
+			} else {
+				this.userTabButton.doSelection();
+			}
+		]]>
+    	</handler>
+   
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+        <tabButtonMain name="filesTabButton" currentIconRsc="files_tab_btn" height="$once{ parent.height }" 
+                labelid="614" width="$once{ (parent.width-6)/2 }"
+                visible="${(canvas.currentRoomObj.hideFilesExplorer ? false:true)}"/>
+        
+    </view>
+    
+    <fileExplorer name="_files" y="22" width="$once{ parent.width-12 }"
+               height="${ parent.height-222 }" visibility="hidden" />
+    
+    <participants name="_videocontainer" y="36" 
+                  width="$once{ parent.width-10 }" 
+               height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+               
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+          				bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        <handler name="onclick">
+            parent.toggleStatus();
+        </handler>
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+            
+        <view name="_icon" resource="sidebar_tab_btn" y="0">
+             <handler name="onclick">
+	            parent.parent.toggleStatus();
+	         </handler>
+	         <labelTooltip name="_labelTooltip" labelid="856" />
+        </view>
+        
+    </view>
+    
+    <animator name="_doOpen" attribute="width" to="$once{ parent.width }" 
+              duration="750" started="false" />
+              
+    <animator name="_doClose" attribute="width" to="10" 
+              duration="750" started="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx
new file mode 100644
index 0000000..537b473
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="conferenceRoomSidebarTabButton" extends="view" 
+	   width="$once{ (parent.width-2)/2 }" height="36" y="0">
+	
+	<attribute name="labelid" value="0" type="number" />
+	
+	<attribute name="selected" value="false" type="boolean" />
+	
+	<attribute name="textFontSize" value="14" type="number" />
+	
+	<attribute name="currentIconRsc" value="" type="string"/>
+	
+	<handler name="oninit">
+		if (this.selected) {
+			parent.parent.doSelection(this);
+		}
+	</handler>
+	
+	<handler name="onclick">
+		parent.parent.doSelection(this);
+	</handler>
+	
+	<handler name="onmouseover">
+		if (!this.selected) {
+			this._bg1.setAttribute("visibility","visible");
+		}
+	</handler>
+	
+	<handler name="onmouseout">
+        this._bg1.setAttribute("visibility","hidden");
+    </handler>
+	
+	<method name="select">
+		this.selected = true;
+		this._icon.setAttribute("opacity",1);
+        this._text.setAttribute("opacity",1);
+        this._bg1.setAttribute("visibility","hidden");
+		this._bg2.setAttribute("visibility","visible");
+		this._text.setAttribute("fontstyle","bold");
+		this._text.setAttribute("fgcolor","0xFFFFFF");
+	</method>
+     
+    <method name="deselect">
+        this.selected = false;
+        this._icon.setAttribute("opacity",0.5);
+        this._text.setAttribute("opacity",0.5);
+        this._bg2.setAttribute("visibility","hidden");
+        this._text.setAttribute("fontstyle","bold");
+        this._text.setAttribute("fgcolor","0xFFFFFF");
+    </method>       
+    
+    
+    <view name="_bg1" bgcolor="0xFFFFFF" width="$once{ parent.width }" 
+          height="$once{ parent.height }" opacity="0.7" visibility="hidden"/> 
+          
+    <view name="_bg2" bgcolor="0xFFFFFF" width="$once{ parent.width }" 
+          height="$once{ parent.height }" opacity="0.4" visibility="hidden"/>
+    
+    <view x="4" y="6" name="_icon" resource="$once{ parent.currentIconRsc }" />
+                
+    <labelText name="_text" x="28" fontsize="$once{ parent.textFontSize }" valign="middle" 
+               fgcolor="0xFFFFFF" labelid="$once{ parent.labelid }" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx
new file mode 100644
index 0000000..84e9f88
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewRoomSidebar" extends="view" width="280" 
+       height="${ canvas.height - ((canvas.currentRoomObj.hideTopBar) ? 0:28) }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <attribute name="restricted" value="true" type="boolean" />
+   
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+        ]]>
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            this.userTabButton.doSelection();
+    	</handler>
+        
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+    </view>
+    
+    <interviewUserList name="_videocontainer" y="36"
+			   width="$once{ parent.width-10 }" 
+               height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+               
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+    	bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx
new file mode 100644
index 0000000..7d1201e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="conferenceRoomSidebar.lzx" />
+    <include href="interviewRoomSidebar.lzx" />
+    <include href="restrictedRoomSidebar.lzx" />
+    <include href="conferenceRoomSidebarTabButton.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx
new file mode 100644
index 0000000..e740760
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedRoomSidebar" extends="view" width="280"
+       height="${ canvas.height - 28 }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <attribute name="restricted" value="true" type="boolean" />
+   
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+        	if (itemRef.name == "filesTabButton") {
+            	if (this.restricted) {
+            		if (!canvas.ismoderator && !canvas.isAllowedToDraw) {
+            			//Do not allow
+            			new lz.labelerrorPopup(canvas,{errorlabelid:783});
+            			return;
+            		}
+            	}
+        	}
+            	
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+            if ($debug) Debug.write("this.selected.name ",this.selected.name, this.inited);
+            
+            if (this.selected.name == "userTabButton") {
+                if ($debug) Debug.write("-- userTabButton");
+                this._files.setAttribute("visibility","hidden");
+                this._participants.setAttribute("visibility","visible");
+            } else if (this.selected.name == "filesTabButton") {
+                if ($debug) Debug.write("-- filesTabButton");
+                this._files.setAttribute("visibility","visible");
+                this._participants.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <method name="toggleStatus">
+        if (this.isOpen) {
+            this._doClose.setAttribute('started', true);
+            this.isOpen = false;
+            this._minimizeSidebar._icon.setAttribute("frame",2);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",857);
+        } else {
+            this._doOpen.setAttribute('started', true);
+            this.isOpen = true;
+            this._minimizeSidebar._icon.setAttribute("frame",1);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",856);
+        }
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+		<![CDATA[
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            if (!canvas.currentRoomObj.hideFilesExplorer && canvas.currentRoomObj.filesOpened) {
+				this.filesTabButton.doSelection();
+			} else {
+				this.userTabButton.doSelection();
+			}
+		]]>
+    	</handler>
+   
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+        <tabButtonMain name="filesTabButton" currentIconRsc="files_tab_btn" height="$once{ parent.height }" 
+                labelid="614" width="$once{ (parent.width-6)/2 }"
+                visible="${(canvas.currentRoomObj.hideFilesExplorer ? false:true)}"/>
+        
+    </view>
+    
+    <fileExplorer name="_files" y="22" width="$once{ parent.width-12 }" 
+               height="${ parent.height-222 }" visibility="hidden" />
+    
+    <restrictedUserList name="_participants" y="36" 
+			    width="$once{ parent.width-10 }" 
+			   height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+			   
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+          				bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        <handler name="onclick">
+            parent.toggleStatus();
+        </handler>
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+            
+        <view name="_icon" resource="sidebar_tab_btn" y="0">
+             <handler name="onclick">
+	            parent.parent.toggleStatus();
+	         </handler>
+	         <labelTooltip name="_labelTooltip" labelid="856" />
+        </view>
+        
+    </view>
+    
+    <animator name="_doOpen" attribute="width" to="$once{ parent.width }" 
+              duration="750" started="false" />
+              
+    <animator name="_doClose" attribute="width" to="10" 
+              duration="750" started="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx
new file mode 100644
index 0000000..0d4fc4d
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="interviewListTable" extends="view" y="60" 
+       height="${ parent.height-64-parent.moderationPanel.height }"
+        bgcolor="0xFFFFFF" x="2" clip="true" width="$once{ parent.width-4 }" >
+        <innerlistViewEventUserListTable name="innerList" />
+    <om_vscrollbar />
+</class>    
+
+<class name="interviewListInner" extends="baseRoomInnerList"  
+       width="$once{ parent.width }" height="${ parent.height }" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    
+    <attribute name="selectedItem" value="null" />
+    
+    <attribute name="sortType" value="alphabetical" type="string" />    
+    
+    <handler name="oninit">
+        <![CDATA[
+            if ($debug) Debug.write("!!!!! interviewListTable oninit: ");
+            this.initList();
+        ]]>
+    </handler>
+    
+    <!-- clip="true" -->
+    
+    <view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+        x="1" y="1" bgcolor="white" />
+
+    <method name="addItem" args="object">
+        <![CDATA[
+            if ($debug) Debug.write("interviewListTable addItem: ",object,object.publicSID);
+            var list = this._table.innerList;
+            for (var i = 0; i < list.subviews.length;i++) {
+                if (list.subviews[i].refObj.publicSID == object.publicSID) {
+                    //if ($debug) Debug.warn("Already on List, do not add twice");
+                    return;
+                }
+            }
+            var lastname = object.lastname == null ? "" : object.lastname;
+            if (object.isSuperModerator) {
+                lastname += " *";
+            }
+            
+            new lz.interviewUserListItem(list,{
+                    user_id:object.user_id,
+                    firstname: object.firstname,
+                    isSuperModerator:object.isSuperModerator,
+                    lastname: lastname,
+                    refObj:object,
+                    connectedSince:object.connectedSince,
+                    isMod:object.isMod,
+                    streamid:object.streamid,
+                    username:object.username,
+                    formatedDate:object.formatedDate
+                });
+            
+            this.sortUserList();
+            if (canvas.currentRoomObj.autoVideoSelect) {
+				if (object.publicSID == canvas.publicSID && !object.interviewPodId
+					&& (object.isMod || object.isSuperModerator || object.canDraw))
+				{
+		            for (var ii = 1; ii < 3; ++ii) {
+		            	var obj = getVideoObjectByInterviewPodId(ii);
+		            	if (!obj) {
+	            			var interviewBox = canvas._drawarea._videoviewcontent.searchImmediateSubnodes("name", "interviewVideoBox" + ii);
+	            			//if ($debug) Debug.write("!!!! interviewListInner:: interviewBox = ", ii, interviewBox);
+	           				interviewBox.sendConfirmation(canvas.publicSID);
+		            		break;
+		            	}
+					}
+				}
+			}
+        ]]>
+    </method>
+    
+    <method name="sortUserList">
+        <![CDATA[ 
+        
+           if (this.sortType == "alphabetical") {
+                function sortByName(a,b) {
+                   
+                    if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+                    else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+                    else return 0;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            } else {
+                function sortByStreamId(a,b) {
+                   
+                    if(Number(a.streamid) == Number(b.streamid)) return 0;
+                    else if(Number(a.streamid) > Number(b.streamid)) return 1;
+                    else return -1;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            }
+            
+            this._table.innerList._layout.update(); 
+        ]]>
+    </method>
+        
+    
+    <method name="initList">
+        new lz.interviewListTable(this,{name:'_table'});
+        this.moderationPanel.bringToFront();
+    </method>
+    
+    <method name="clearList">
+        this._table.destroy();
+        this.initList();
+    </method>
+    
+	<method name="disconnectclient" args="publicSID">
+	<![CDATA[
+		var item = getUserListItemByPublicSID(publicSID);
+		if (item) {
+			item.destroy();
+		}
+	]]>
+	</method>
+    
+    <!--- get a Objects List Item
+        @param string publicSID publicSID
+     -->
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		for (var i=0;i<this._table.innerList.subviews.length;i++){
+			//if ($debug) Debug.write("getUserListItemByPublicSID : this._table.innerList.subviews[i]",this._table.innerList.subviews[i]);
+			if (this._table.innerList.subviews[i].refObj.publicSID==publicSID){
+				return this._table.innerList.subviews[i];
+			}
+		}
+		return null;
+	]]>
+	</method>
+
+	<method name="getVideoObjectByInterviewPodId" args="interviewPodId">
+	<![CDATA[
+		var list = this._table.innerList.subviews;
+		for (var i = 0; i < list.length; ++i) {
+			//if ($debug) Debug.write("getVideoObjectByInterviewPodId : list[i]", list[i]);
+			if (list[i].refObj.interviewPodId == interviewPodId){
+				if ($debug) Debug.write("getVideoObjectByInterviewPodId : list[i].refObj.interviewPodId", interviewPodId, list[i].refObj.interviewPodId);
+				return list[i];
+			}
+		}
+		return null;
+	]]>
+	</method>
+
+    <method name="selectItem" args="itemObj">
+        <![CDATA[
+        if ($debug) Debug.write("selectItem ",itemObj);
+        
+        if (canvas.ismoderator) {
+            if (this.selectedItem != null && this.selectedItem != itemObj) {
+                this.selectedItem.deselect();
+            }
+            
+            this.selectedItem = itemObj;
+            if (this.selectedItem.isSelected) {
+                this.selectedItem.deselect();
+            } else {
+                this.selectedItem.select();
+            }
+        }
+        ]]>
+    </method>
+
+    <view name="userStatus" layout="axis:y">
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="1" />
+             <labelText x="16" labelid="677" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="2" />
+             <labelText x="16" labelid="678" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="3" />
+             <labelText x="16" labelid="679" />
+        </view>
+    </view>
+    
+    <moderationMiniIconsInterviewUserList name="_applyAndStatusIcons" 
+                          x="$once{ parent.width-this.width-4 }" y="2" />
+    
+    <!--
+    <eventUserListTable name="_table" /> 
+     -->
+    <view name="moderationPanel" height="0" clip="true" 
+          y="${ parent.height - this.height - 2 }">
+        
+        <handler name="onismoderator" reference="canvas" args="m">
+            if ($debug) Debug.write("###### ismoderator ",m);
+            <![CDATA[
+                //this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+                this.updateIcons();
+            ]]>
+        </handler>
+        
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            <![CDATA[
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table.innerList.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == drawObject.publicSID) {
+                        vList[i].refObj.canDraw = drawObject.canDraw;
+                        vList[i].updateIconByMod();
+                        break;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            <![CDATA[
+                
+                if (!userObject.isBroadcasting) {
+                    //Stop Broadcasting and close Dialog
+                    //Search, stop and remove video
+                    parent.parent.removeVideoByUser(userObject);
+                }
+                
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table.innerList.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == userObject.publicSID) {
+                        vList[i].refObj.isBroadcasting = userObject.isBroadcasting;
+                        vList[i].updateIconByMod();
+                        break;
+                    }
+                }
+                
+                parent._applyAndStatusIcons.updateIcons();
+            ]]>
+        </handler>
+        
+        <method name="updateIcons">
+            <![CDATA[
+                if (canvas.ismoderator) {
+                    this.showItem.setAttribute('started', true);
+                } else {
+                    this.setAttribute("height",0);
+                }
+                var vList = parent._table.innerList.subviews;
+                
+                for (var i=0;i<vList.length;i++) {
+                    vList[i].updateIconByMod();
+                }
+                parent._applyAndStatusIcons.updateIcons();
+            ]]>
+        </method>
+        
+        <labelText labelid="912" width="270" x="0" multiline="true" y="0" />
+        
+        <animator name="showItem" attribute="height" 
+                  to="60" duration="1000" started="false" />
+    </view>
+
+</class>
+
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx
new file mode 100644
index 0000000..52de0c2
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewModerationMiniIcons" extends="view" valign="bottom" height="18">
+	
+	<attribute name="isMod" value="false" type="boolean"/>
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		this.isMod = canvas.getIsModeratorByPublicSID(parent.refObj.publicSID);
+		
+		if ($debug) Debug.write("this.isMod ",this.isMod);
+		
+		if (this.isMod) {
+			this._isMod.setAttribute("visibility","visible");
+			this._isModAddbutton.setAttribute("visibility","hidden");
+		} else {
+			this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+		}
+		
+	</handler>
+        
+    <miniIcons name="_isMod" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+            
+                if (parent.isSuperModerator) {
+                    new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                    return;
+                }
+            
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Remove It");
+                    if (parent.parent.refObj.publicSID != canvas.publicSID) {
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                    } else {
+                    	new lz.labelerrorPopup(canvas,{errorlabelid:682});
+                    }
+                    //parent.parent.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="675" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Add It");
+                    hib.addModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                    hib.addModerator.doCall();
+                    //parent.parent.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="676" />
+    </miniIcons>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx
new file mode 100644
index 0000000..a42e6f1
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="interviewUserList" extends="view" width="$once{ parent.width }" 
+       height="${ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <!--- colors for each user -->
+    <attribute name="colorArray" value="null" />
+
+    <attribute name="showsVideoInSeparateComponent" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "interview";
+        
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+            canvas.thishib.setAttribute('src',src);
+            
+			if (canvas.wicketsid == null){            
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+                  
+    <method name="reconnectSuccess">
+        if ($debug) Debug.warn("User Reloged In ",canvas.becomemoderator);
+        //Send to SWF10 video-container to connect on the conference room url 
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(true);
+    </method>
+    
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+        if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+        //set default values and get already availible streams
+        //it can happen that if you click to exit the room the views are not 
+        //not cleaned up yet and you receive this event from the LocalConnection
+        if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+        }
+    </method>
+    
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                
+                for (var i=0;i<value.length;i++) {
+                    
+                    if (value[i].user.user_id == canvas.user_id) {
+                        parent.setRoomValues.applyDefaultModeration = true;
+                        canvas.becomeSuperModerator = value[i].isSuperModerator;
+                        if ($debug) Debug.info("Make this User to an Moderator");
+                        break;
+                    }
+                    
+                }
+                
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //if ($debug) Debug.write("setRoomValues1: ",value);
+            //if ($debug) Debug.write("setRoomValues2: ",hib.currentroomid);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                }
+
+                this.parent.addItem(value[i].connectedSince,value[i].isMod,value[i].streamid,value[i].username,
+                              '',value[i].formatedDate,value[i].userpos,value[i].usercolor,value[i]);
+            }
+            //this content must be inited _after_ setting the default values
+            canvas.thishib.getCurrentModeratorList.doCall(); 
+            //FIXME Issue-1076
+            canvas.thishib.checkLzRecording.doCall();
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+
+    <!-- invoked if another client logs into the room 
+    after choosing devices -->     
+    <method name="setAVSettingsToClient" args="rcl">
+         this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method> 
+    
+    <method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,object);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+                //if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+                this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, object.interviewPodId, object);
+            }
+           
+            //do add self too
+            this._participants.addItem(object);
+        ]]>
+    </method>
+    
+    <method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+        <![CDATA[
+        if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+
+        if (canvas.publicSID != object.publicSID){
+            this._videoviewcontent.createVideoObject(object.publicSID, false, object.interviewPodId, object);
+        }
+
+        //Do Add it anyway
+        this._participants.addItem(object);
+        ]]>
+    </method>
+        
+    <!--
+        invoked whenever a User starts to Stream Video in this Room,
+        interviewPodId has only a meaning in the Room Type Interview
+     -->
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <method name="setSpeakingByPos" args="publicSID,bool">
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>  
+    
+    <!--- 
+        stops the streaming but does not destroy the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+    
+    <method name="removeVideoByUser" args="userObject">
+    	if ($debug) Debug.write("removeVideoByUser ",userObject);
+        this.closeStreamClient(userObject.publicSID);
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+    
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <interviewListInner name="_participants" />
+    
+    <commonVideoComponentAdapter name="_videoviewcontent"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx
new file mode 100644
index 0000000..3cb1eae
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewUserListItem" extends="view" showhandcursor="false" 
+	   bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" width="252" height="42">
+	
+	<attribute name="connectedSince" value="" type="string" />
+    <attribute name="isMod" value="" type="string" />
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    
+    <attribute name="isSelected" value="false" type="boolean" />
+    
+	<handler name="oninit">
+        <![CDATA[
+            //This is a workaround cause in LPS-4.2.x immediatelly loading does not work
+            lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+
+            if (this.isMod) {
+            	this.userStatus.setAttribute("frame",3);
+            }
+               
+            if (canvas.publicSID == this.refObj.publicSID) {
+                //this._userName.setAttribute("fontstyle","bold");
+                this.setAttribute("bgcolor",0x00FF00);
+            }
+            
+            this.updateIconByMod();
+        ]]>
+    </handler>
+    
+    <method name="updateIconByMod">
+    	this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+    	if (this.isMod) {
+            this.userStatus.setAttribute("frame",3);
+        } else if (this.refObj.canDraw) {
+        	this.userStatus.setAttribute("frame",2);
+        } else {
+        	this.userStatus.setAttribute("frame",1);
+        }
+        
+        if (this.isSelected) {
+        	this._miniIcons.oninit.sendEvent();
+        }
+    </method>
+    
+    <method name="fadeText" args="ignore=null"> 
+        <![CDATA[
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.refObj.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+        ]]>          
+    </method>
+     
+    <handler name="onclick">
+    	parent.parent.parent.selectItem(this);
+    </handler>
+     
+    <method name="select">
+    	if (!this.isSelected) {
+	    	new lz.interviewModerationMiniIcons(this,{name:'_miniIcons',align:'right',
+                isMod:this.isMod,
+                isSuperModerator:this.isSuperModerator});
+	    	this.isSelected = true;
+	    	this._userName.text = "";
+	    	this.showItem.setAttribute('started', true);
+    	}
+    </method>
+    
+    <method name="deselect">
+    	if (this.isSelected) {
+	    	this._miniIcons.destroy();
+	    	this.isSelected = false;
+	    	this._userName.text = this.firstname+' '+this.lastname;
+	    	this.closeItem.setAttribute('started', true);
+    	}
+    </method>
+     
+    <image name="_userpic" stretches="both" x="1" y="1">
+        <handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+            ]]>
+        </handler>
+    </image>
+    
+	<method name="userTyping" args="v">
+	</method>
+    <view name="userStatus" align="right" frame="1" 
+    	  resource="userstatus_multiframe_rsc" />
+    
+    <labelText name="_userName" x="41" y="2"
+    		   text="$once{ (parent.firstname == null ? '' : parent.firstname) + ' ' + (parent.lastname == null ? '' : parent.lastname) }" />
+     
+    <animatorgroup name="showItem" started="false" process="simultaneous">
+    	<animator attribute="height" to="62" duration="750" />
+    	<animator attribute="width" to="252" duration="750" />
+    </animatorgroup>
+    
+    <animatorgroup name="closeItem" started="false" process="simultaneous">
+        <animator attribute="height" to="42" duration="750" />
+        <animator attribute="width" to="252" duration="750" />
+    </animatorgroup>
+                 
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx
new file mode 100644
index 0000000..ea3bace
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+
+<class name="interviewVideoChooseUser" extends="guiPresenter" resizeable="false"
+    width="220" height="100" closable="true" labelid="910" y="10" minimizable="false">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        this.getClientListScope.doCall();
+    </handler>
+    
+    <netRemoteCallHib name="getClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >   
+        <handler name="ondata" args="value">
+		<![CDATA[
+			if ($debug) Debug.write("+++++++++++++++++ getClientListScope : ",value);
+			for (var i = 0; i < value.length; ++i) {
+				var name = (value[i].firstname == null ? "" : value[i].firstname) + ',' + (value[i].lastname == null ? "" : value[i].lastname);
+				parent._users.addItem(name + ' [' + value[i].username + ']', value[i].publicSID);
+			}
+			parent._users.selectItemAt(0);
+		]]>
+		</handler>  
+    </netRemoteCallHib>
+    
+    <labelText labelid="911" x="2" y="22"/>
+    
+    <resetCombobox name="_users" x="2" y="42" width="$once{ parent.width-4 }"/>
+    
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>    
+    
+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            var valueCombobox = parent._users.getValue();
+            if (this.parent.refObj.sendConfirmation(valueCombobox)) {
+                this.parent.close();
+            }
+        </handler>
+    </simpleLabelButton>   
+    
+</class>
+ 
+<class name="interviewVideoBox" extends="view" width="322" height="281" bgcolor="0x000000">
+    <attribute name="interviewPodId" value="0" type="number" />
+    
+    <method name="startInterView">
+        if ($debug) Debug.write("startInterView :: ");
+        var tx = this.getAttributeRelative("x",canvas);
+        var ty = this.getAttributeRelative("y",canvas);
+        canvas._videocontainer._videoviewcontent.showDevicePopUpInterview(false,this.interviewPodId,tx,ty,this.width,this.height);
+    </method>
+
+	<method name="sendConfirmation" args="publicSID">
+		if ($debug) Debug.write("sendConfirmation :: ",publicSID);
+		
+		canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = publicSID;
+		canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+		canvas.thishib.setBroadCastingFlag.canVideo = !canvas.currentRoomObj.isAudioOnly;
+		canvas.thishib.setBroadCastingFlag.interviewPodId = this.interviewPodId;
+		canvas.thishib.setBroadCastingFlag.doCall();
+		
+		return true;
+	</method>
+    
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <attribute name="publicSID" value="" type="string" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSID : ",value);
+                
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+    
+    <simpleLabelButton labelid="910" height="30" valign="middle" align="center"
+               visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }">
+        <handler name="onclick" args="refObj">
+            new lz.interviewVideoChooseUser(canvas,{
+                           isInterview:true,
+                           x:this.getAttributeRelative("x",canvas)-10,
+                           y:this.getAttributeRelative("y",canvas)-20,
+                           width:this.width+20,
+                           refObj:parent
+                        });
+        </handler>
+    </simpleLabelButton>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx
new file mode 100644
index 0000000..64f3f53
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="interviewWhiteboard" extends="view" clip="true">
+	<attribute name="checkPodsDelegate" value="null"/>
+	        
+	<handler name="oninit">
+	<![CDATA[
+		canvas._drawarea = this;
+		if (checkPodsDelegate == null && !_recStarted.visible) {
+			checkPodsDelegate = new LzDelegate(this, "checkPods");
+			lz.Timer.addTimer(checkPodsDelegate, 1000);
+		}
+		this.reloadStatus();
+	]]>
+	</handler>
+    
+    <handler name="ondestroy">
+		stopPodChecks();
+    </handler>
+    
+    <handler name="onopenWhiteBoard" >
+        if ($debug) Debug.write("-- onOpenWhiteBoard --");
+    </handler>
+    
+	<method name="newInterviewStarting" args="refObj">
+	<![CDATA[
+		this._videoviewcontent["interviewVideoBox"+refObj.interviewPodId].startInterView();
+	]]>
+	</method>
+	
+	<method name="stopPodChecks">
+		if (checkPodsDelegate != null) {
+			lz.Timer.removeTimer(checkPodsDelegate);
+			checkPodsDelegate = null;
+		}
+	</method>
+
+	<method name="onInterviewPodCount" args="count">
+		_interview._start.setAttribute("enabled", count > 0);
+	</method>
+	
+	<method name="checkPods" args="ignore=null">
+		//if ($debug) Debug.write(":: Pods :: check :: ");
+		canvas.sendViaLocalConnection(canvas.vid_lc_name, "getVideoObjectCount", [null]);
+		lz.Timer.resetTimer(checkPodsDelegate, 1000);
+	</method>
+	
+    <method name="reloadStatus">
+        this.getInterviewRecordingStatus.doCall();
+    </method>
+    
+    <!--
+    getInterviewRecordingStatus()
+     -->
+    <netRemoteCallHib name="getInterviewRecordingStatus" funcname="getInterviewRecordingStatus" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getInterviewRecordingStatus: ",value);
+                if (value) {
+                    parent._recStarted.setAttribute("visibility","visible");
+                } else {
+                    parent._recStarted.setAttribute("visibility","hidden");
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+    
+    <simplelayout axis="y" spacing="2" />
+    
+    <commonVideoViewContent name="_videoviewcontent" x="40" >
+        <simplelayout axis="x" spacing="2" />
+        
+        <interviewVideoBox name="interviewVideoBox1" interviewPodId="1" />
+        <interviewVideoBox name="interviewVideoBox2" x="324" interviewPodId="2" />
+    </commonVideoViewContent>
+    
+    <view name="_interview" align="center" visible="${ canvas.ismoderator }">
+        <!--
+           public synchronized Boolean startInterviewRecording()
+         -->
+        <netRemoteCallHib name="startInterviewRecording" funcname="startInterviewRecording" remotecontext="$once{ canvas.thishib }" >  
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("startInterviewRecording: ",value);
+                    if (!value) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:915});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>          
+        
+        <netRemoteCallHib name="stopInterviewRecording" funcname="stopInterviewRecording" remotecontext="$once{ canvas.thishib }" >  
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("stopInterviewRecording: ",value);
+                    if (!value) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:916});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>  
+        
+        <simplelayout axis="x" spacing="2" />
+        
+        <simpleLabelButton name="_start" labelid="913" height="30" width="200">
+            <handler name="onclick">
+                if ($debug) Debug.write("Start Recording");
+                parent.startInterviewRecording.doCall();
+            </handler>
+            <view x="2" y="4" resource="interview_record_start" />
+        </simpleLabelButton>
+        
+        <simpleLabelButton name="_stop" labelid="914" height="30" width="200">
+            <handler name="onclick">
+                if ($debug) Debug.write("Stop Recording");
+                parent.stopInterviewRecording.doCall();
+            </handler>
+            <view x="2" y="4" resource="interview_record_stop" />
+        </simpleLabelButton>
+        
+    </view>
+    
+    <view name="_recStarted" align="center" visibility="hidden">
+        <labelText labelid="917" />
+    </view>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/library.lzx b/WebContent/src/modules/conference/interviewuserlist/library.lzx
new file mode 100644
index 0000000..601b2f8
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/library.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<resource name="interview_record_start" src="resources/webstart_play.png" />
+	<resource name="interview_record_stop" src="resources/webstart_stop.png" />
+	
+    <include href="interviewUserList.lzx" />
+    <include href="interviewWhiteboard.lzx" />
+    <include href="interviewVideoBox.lzx" />
+    <include href="interviewModerationMiniIcons.lzx" />
+    <include href="interviewUserListItem.lzx" />
+    <include href="interviewListInner.lzx" />
+    <include href="moderationMiniIconsInterviewUserList.lzx" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx b/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx
new file mode 100644
index 0000000..fedcea82
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconsInterviewUserList" extends="view">
+	
+    <handler name="oninit">
+    	this.updateIcons();
+    </handler>	
+    
+    <method name="updateIcons">
+        if (canvas.ismoderator) {
+            this._isMod.setAttribute("visibility","visible");
+            this._isModAddbutton.setAttribute("visibility","hidden");
+        } else {
+            this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+        }
+    </method>
+	
+    <miniIcons name="_isMod" x="0" width="16" resource="participants_isMod_rsc" 
+    		   height="16" showhandcursor="false">
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="688" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //Apply for Moderation
+                canvas.thishib.applyForModeration.doCall();
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="685" />
+    </miniIcons>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png
new file mode 100644
index 0000000..8389bf3
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png
Binary files differ
diff --git a/WebContent/src/modules/conference/library.lzx b/WebContent/src/modules/conference/library.lzx
new file mode 100644
index 0000000..9844d33
--- /dev/null
+++ b/WebContent/src/modules/conference/library.lzx
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- FamFam Icon Set -->
+    <resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />
+
+	<!-- Derivative from FamFam Icon Set, author solomax -->
+	<resource name="typing_rsc">
+		<frame src="resources/base0.png" />
+		<frame src="resources/base1.png" />
+		<frame src="resources/base2.png" />
+		<frame src="resources/base3.png" />
+	</resource>
+    
+    <!-- APL author sebawagner -->
+    <resource name="speaking" src="resources/speaking.png" />
+    
+    <!-- APL author sebawagner -->
+    <resource name="lz_recorder_play" src="resources/webstart_play.png" />
+	
+    <include href="commonVideoViewContent.lzx"/>
+    <include href="commonVideoComponentAdapter.lzx"/>
+    <include href="screenSharingAdapter.lzx" />
+    <include href="typing.lzx" />
+
+	<include href="whiteboard/" /> 
+ 	
+   	<include href="tabcontent/" />
+   	<include href="popups/" />
+   	<include href="moderation/" />
+   	<include href="polls/" />
+   	
+   	<include href="conference/" />
+   	
+    <!-- throws an Exception
+	<include href="browser/"/>  
+     -->
+    <include href="participants/" /> 
+    <include href="interviewuserlist/" /> 
+    
+    <include href="restricted/" />
+    <include href="browser/" />
+    <include href="testsetup/" />
+    <include href="sip/" />
+    
+    <include href="flexibleConferenceRoom/" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/moderation/applyForModeration.lzx b/WebContent/src/modules/conference/moderation/applyForModeration.lzx
new file mode 100644
index 0000000..1ad5de5
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/applyForModeration.lzx
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="userItem" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" width="$once{ parent.width }" height="20">
+	<attribute name="streamid" value="0" type="string" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="hasAnswered" value="false" type="boolean" />
+	<attribute name="answer" value="false" type="boolean" />
+	
+	<view name="inner" width="$once{ parent.width-2 }" height="$once{ parent.height-2 }" x="1" y="1"
+		onmouseover="this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'))"
+		onmouseout="this.setAttribute('bgcolor',0xFFFFFF)" bgcolor="0xFFFFFF">
+		<labelText text="$once{ parent.parent.streamid }" width="50" />
+		<labelText text="$once{ parent.parent.username }" x="50" width="300" />
+		<labelText name="answer" labelid="88" x="350" width="140" />
+	</view>
+</class>
+    
+<class name="applyForModeration"  extends="labelExplorerBox" labelid="81"
+	width="500" height="250" x="14" closable="true">
+	
+	<attribute name="applymessage" value="null" />
+	
+	<labelText labelid="93" y="30" x="2" />
+
+	<handler name="oninit">
+		canvas.currentModApply = this;
+		this.getClientListScope.doCall();
+		this.applymessage = new Array();
+		this.applymessage[0] = 'applyforMod';
+		this.checkRoomValues.doCall();
+	</handler>
+    
+    <!--
+        This is necessary as in some cases the user should not be allowed 
+        to apply for Moderation at all, this Function checks this
+     -->
+    
+    <netRemoteCallHib name="checkRoomValues" funcname="checkRoomValues" 
+                      remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            if (value) {
+                parent.sendMessageWithClient.doCall();
+            } else {
+                new lz.labelerrorPopup(canvas,{errorlabelid:641});
+                parent.close();
+            }
+        </handler>
+    </netRemoteCallHib>
+	
+	<method name="setUserAnswer" args="value">
+		<![CDATA[
+		if ($debug) Debug.write("*** setUserAnswer: ",value,this.userslist);
+
+		var t = this.userslist.userslist.userslist[value.client.streamid];
+		//Debug.write(" t: ",t);
+		t.hasAnswered = true;
+		var answer = value.message[1];
+		//Debug.write("answer: ",answer);
+		if (answer=='ok'){
+			t.inner.answer.setAttribute('text',canvas.getLabelName(94));
+			t.answer = true;
+		} else {
+			t.inner.answer.setAttribute('text',canvas.getLabelName(95));
+			t.answer = false;
+		}
+		]]>
+		this.checkForUpdates();
+	</method>
+	
+	<method name="rejectUser" args="value">
+		this.userslist.userslist.userslist[value.streamid].destroy();
+		this.checkForUpdates();
+	</method>
+	
+	<method name="checkForUpdates">
+		<![CDATA[
+		var b = true;
+		for (var i=0;i<this.userslist.userslist.userslist.subviews.length;i++){
+			//Debug.write("itemID : ",this.userslist.userslist.userslist.subviews[i]);
+			if (!this.userslist.userslist.userslist.subviews[i].answer){
+				b=false;
+				break;
+			}
+		}
+		if (b) this.applyButton.setAttribute('labelid',96);
+		this.applyButton.setAttribute('enabled',b);
+		]]>
+	</method>
+	
+	<netRemoteCallHib name="getClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >        
+       	<handler name="ondata" args="value">
+       		<![CDATA[
+           	//The onResult-Handler will be called be the rtmpconnection
+           	//Debug.write("INSTANCE getClientListScope : ",value);
+            for (var eg = 0; eg < value.length; ++eg) {
+				//Debug.write("value: ",eg,value,parent.userslist.userslist.userslist);
+				if (canvas.streamid!=value[eg].streamid) {
+				    new lz.userItem(parent.userslist.userslist.userslist,{name:value[eg].streamid,username:value[eg].username,streamid:value[eg].streamid});
+				}
+				//Debug.write("value: ",eg,value,parent.userslist.userslist.userslist);
+			}
+		    if (parent.userslist.userslist.userslist.subviews.length==0)
+				   parent.applyButton.setAttribute('enabled',true);
+           ]]>
+		</handler>   
+    </netRemoteCallHib> 
+     
+    <netRemoteCallHib name="sendMessageWithClient" funcname="sendMessageWithClient" remotecontext="$once{ canvas.thishib }" >  
+    	<netparam name="vars"><method name="getValue">return parent.parent.applymessage;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("sendMessageWithClient : ",value);
+
+            ]]>
+        </handler>   
+    </netRemoteCallHib>      
+	
+	<view name="userslist" y="60" x="4" height="140" clip="true" width="492" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+		<view name="userslist" y="1" x="1" height="138" clip="true" width="490" bgcolor="0xFFFFFF" >
+			<view name="userslist" layout="axis:y;spacing:2" width="$once{ parent.width }" />
+			<om_vscrollbar />
+		</view>
+	</view>	
+	
+    <simpleLabelButton name="applyButton" labelid="88" width="200" x="80" y="218" enabled="false">
+    	<handler name="onclick">
+    		//hib.setModerator.doCall();
+    		hib.addModerator.publicSIDOfNewModerator = canvas.publicSID;
+    		hib.addModerator.doCall();
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="83" width="200" x="290" y="218" 
+        onclick="this.parent.close();" />
+  
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/moderation/library.lzx b/WebContent/src/modules/conference/moderation/library.lzx
new file mode 100644
index 0000000..1affb90
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<resource name="applyformodicon_rsc" src="resources/user_add.png" />
+	
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="start_screensharing_rsc" src="resources/monitor_go.png" />
+
+   	<include href="applyForModeration.lzx" />
+   	<include href="moderationPanel.lzx" />
+   	<include href="responseForModeration.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/moderation/moderationPanel.lzx b/WebContent/src/modules/conference/moderation/moderationPanel.lzx
new file mode 100644
index 0000000..90abc25
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/moderationPanel.lzx
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="errorPopupUserInfo" extends="labelExplorerBox" labelid="204"
+    docking="true" resizeable="false" closable="true" 
+    width="224" x="300" height="230">
+
+    <attribute name="error" value="" type="string" />
+    <attribute name="user" value="null" />
+    
+    <handler name="oninit">
+        <![CDATA[
+            Debug.write(user);
+            var tString = this.error + "<BR/>"
+                    + user.username+"<BR/>" 
+                    + user.firstname + " " + user.lastname + "<BR/>"
+                    + parseDateToStringTime(user.roomEnter);
+            this.textInner._inner.setAttribute('text',tString);
+        ]]>
+    </handler>
+
+    <view name="textInner" y="24" width="218" height="200" x="2" clip="true">
+        <text name="_inner" fontsize="10" fontstyle="bold"
+            multiline="true" width="190" />
+        <om_vscrollbar />
+    </view>
+
+</class>
+
+<class name="moderationPanel" extends="view" layout="axis:x;spacing:2">
+    
+    <attribute name="recordingsName" value="" type="string" />
+    <attribute name="initial" value="true" type="boolean" />
+    <attribute name="recordingUser" value="null" />
+    <attribute name="publishingObj" value="null" />
+    
+    <attribute name="allowUserQuestions" value="true" type="boolean" />
+    <attribute name="roomName" value="" type="string" />
+    
+    <handler name="oninit">
+        <![CDATA[
+	        canvas._mymod = this;
+	        if (this.allowUserQuestions != null && !this.allowUserQuestions) {
+	            this.mod_btn.destroy();
+	        }
+	        this._roomName.setAttribute("text",this.roomName);
+	        if ($debug) Debug.write("moderationPanel.init: ", !canvas.currentRoomObj.hideScreenSharing && (canvas.ismoderator || canvas.becomemoderator || canvas.isAllowedToScreenShare), canvas.currentRoomObj);
+        ]]>
+    </handler>
+    
+    <method name="setMessage">
+        <![CDATA[
+            if ($debug) Debug.write("setMessage: ",this.recordingUser);
+            var tString = "";
+            if (this.recordingUser!=null){
+                tString += canvas.getLabelName(419)
+               		+ " " + this.recordingUser.username
+               		+ " " + this.recordingUser.firstname
+               		+ " " + this.recordingUser.lastname
+               		+ " " + parseDateToStringTime(this.recordingUser.roomEnter) + ";";
+            }
+			if (this.publishingObj != null) {
+            	tString += canvas.getLabelName(1504)
+					+ " " + this.publishingObj.user.username
+					+ " " + this.publishingObj.user.firstname
+					+ " " + this.publishingObj.user.lastname
+					+ " " + this.publishingObj.url + ";";
+            }
+			this._inner.setAttribute('text', tString);
+        ]]>
+    </method>   
+    
+	<method name="checkForApplyScreen" args="record">
+		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
+	</method>  
+    
+    <labelText name="_roomName" fgcolor="0xFFFFFF" y="4" fontstyle="bold" fontsize="12" /> 
+    
+    <miniIconsNew name="mod_btn" y="6" innerResource="applyformodicon_rsc" width="16" height="16"
+               visible="${ (canvas.ismoderator) ? false : true  }" showhandcursor="true">
+        <handler name="onclick">
+            //We do only ask the Moderator(s) to change Moderation
+            //new lz.applyForModeration(canvas.main_content._content.inner);
+            canvas.thishib.applyForModeration.doCall();
+        </handler>  
+        <labelTooltip inittwice="true" labelid="906" />      
+    </miniIconsNew>
+    
+    <miniIconsNew name="_doShare" y="6" innerResource="start_screensharing_rsc" width="16" height="16" showhandcursor="true"
+               visible="${ !canvas.currentRoomObj.hideScreenSharing &amp;&amp; (canvas.ismoderator || canvas.becomemoderator || canvas.isAllowedToScreenShare) }" >
+        <handler name="onclick">
+            this.parent.checkForApplyScreen("no");
+        </handler>
+        <labelTooltip labelid="239" />
+    </miniIconsNew>
+    
+    <labelText name="_inner" fgcolor="0xFF3300" y="4" />
+    
+    <view width="2" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/moderation/resources/monitor_go.png b/WebContent/src/modules/conference/moderation/resources/monitor_go.png
new file mode 100644
index 0000000..8af3eda
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/resources/monitor_go.png
Binary files differ
diff --git a/WebContent/src/modules/conference/moderation/resources/user_add.png b/WebContent/src/modules/conference/moderation/resources/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/resources/user_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/moderation/responseForModeration.lzx b/WebContent/src/modules/conference/moderation/responseForModeration.lzx
new file mode 100644
index 0000000..183cdf7
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/responseForModeration.lzx
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="responseForModeration"  extends="labelExplorerBox" labelid="81"
+	width="500" height="250" x="14" closable="true">
+	
+	<attribute name="applymessage" value="null" />
+    <!-- Time till automatically apply for modaration will be accepted -->
+	<attribute name="clientId" value="0" type="string" />
+	
+	<attribute name="userobject" value="null" />
+    
+    <attribute name="userautoTimerDelegate" value="null" />
+    <attribute name="userautoTimerCounter" value="31" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+            var dtString = '';
+            dtString += 'Name: '+userobject['username']+'<BR />';
+            dtString += 'Host: '+userobject['userip']+'<BR />';
+            dtString += 'Time: '+userobject['connectedSince']+'<BR />';
+            
+            this.userToAccept.setAttribute('text',dtString);
+            
+            this.userautoTimerDelegate = new LzDelegate( this, "autoResponse" );
+            lz.Timer.addTimer( this.userautoTimerDelegate, 1000 );            
+		]]>
+	</handler>
+
+    <method name="autoResponse" args="itemObj">
+        this.userautoTimerCounter--;
+        if (this.userautoTimerCounter!=0){
+            this._applyBtn.setAttribute('text',canvas.getLabelName(this._applyBtn.labelid)+" "+this.userautoTimerCounter);
+            lz.Timer.addTimer( this.userautoTimerDelegate, 1000 );
+        } else {
+            this._applyBtn.onclick.sendEvent();
+        }
+    </method>   
+	
+	<labelText labelid="89" y="20" x="2" />
+	
+	<labelText name="userToAccept" y="50" multiline="true" width="200" resize="false" />
+    
+    <simpleLabelButton labelid="90" width="200" x="80" y="218" name="_applyBtn" >
+    	<handler name="onclick">
+			parent.applymessage = new Array();
+			parent.applymessage[0] = 'applyModAnswer';
+			parent.applymessage[1] = 'ok';   
+			parent.sendMessageWithClientById.doCall();		
+    	</handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="91" width="200" x="290" y="218" >
+    	<handler name="onclick">
+			parent.applymessage = new Array();
+			parent.applymessage[0] = 'applyModAnswer';
+			parent.applymessage[1] = 'no'; 
+			parent.sendMessageWithClientById.doCall();	
+    	</handler>
+    </simpleLabelButton>
+     
+    <netRemoteCallHib name="sendMessageWithClientById" funcname="sendMessageWithClientById" remotecontext="$once{ canvas.thishib }" >  
+    	<netparam><method name="getValue">return parent.parent.applymessage;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.clientId;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[
+	            //The onResult-Handler will be called be the rtmpconnection
+	            //Debug.write("sendMessageWithClientById : ",value);
+				this.parent.close();
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/library.lzx b/WebContent/src/modules/conference/participants/library.lzx
new file mode 100644
index 0000000..5457299
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="right_isactive_rsc" src="resources/accept.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="right_notactive_rsc" src="resources/delete.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_isMod_rsc" src="resources/user_add.png" />
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_allow_drawing_rsc" src="resources/pencil_add.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_deny_drawing_rsc" src="resources/pencil_delete.png" />
+    
+    <!--  APL author sebawagner -->
+    <resource name="participants_exclusive_audio_rsc" src="resources/micro_small.png" />
+    
+    <include href="participantList.lzx" />
+    <include href="participantListItem.lzx" />
+    <include href="participants.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/participants/participantList.lzx b/WebContent/src/modules/conference/participants/participantList.lzx
new file mode 100644
index 0000000..a4084ba
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participantList.lzx
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="innerlistViewparticipantsTable" extends="view" width="258" >
+    <simplelayout name="_layout" axis="y" spacing="0" />
+</class>
+    
+<class name="participantsTable" extends="view" height="${ parent.height-20 }" 
+    	bgcolor="0xFFFFFF" x="2" y="6" clip="true" width="$once{ parent.width-4 }" >
+        <innerlistViewparticipantsTable name="innerList" />
+    <om_vscrollbar />
+</class>
+
+<class name="participantList" extends="view"  width="$once{ parent.width }" height="${ parent.height-22 }" 
+       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" y="22">
+    <!-- clip="true" -->
+    
+    <attribute name="sortType" value="alphabetical" type="string" />    
+    
+    <view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+        x="1" y="1" bgcolor="0xFFFFFF" />
+        
+    <handler name="oninit">
+        <![CDATA[
+            var items = this._table.innerList.subnodes;
+            canvas.videoComp_lc.lc_setSoundMuted = function(publicSID,isMuted) {
+                if ($debug) Debug.write("lc_setSoundMuted: publicSID, isMuted",publicSID, isMuted);
+
+                for (var i=1; i<items.length; i++) {
+                    var listItem = items[i];
+                    if (listItem.refObj.publicSID == publicSID) {
+                        var muteView = listItem._miniIcons._mute;
+                        if (isMuted) {
+                            muteView.setAttribute('frame', 2);
+                            muteView._tip.setAttribute('labelid', 1075);
+                        } else {
+                            muteView.setAttribute('frame', 1);
+                            muteView._tip.setAttribute('labelid', 1074);
+                        }
+                        break;
+                    }
+                }
+            };
+        ]]>
+    </handler>
+
+    <method name="addItem" args="object">
+        <![CDATA[
+            if ($debug) Debug.write("participantList addItem: ",object,object.publicSID);
+            
+            for (var i=0;i<this._table.innerList.subviews.length;i++) {
+                if (this._table.innerList.subviews[i].refObj.publicSID == object.publicSID) {
+                    //if ($debug) Debug.warn("Already on List, do not add twice");
+                    return;
+                }
+            }
+            
+            var lastname = object.lastname == null ? "" : object.lastname;
+            
+            if ($debug) Debug.write("object.isSuperModerator ",object.isSuperModerator);
+            
+            if (object.isSuperModerator) {
+                lastname += " *";
+            }
+            
+            new lz.participantListItem(this._table.innerList,{
+                    user_id:object.user_id,
+                    isSuperModerator:object.isSuperModerator,
+                    firstname:object.firstname,
+                    lastname:lastname,
+                    width:this.width-17,
+                    refObj:object,
+                    connectedSince:object.connectedSince,
+                    isMod:object.isMod,
+                    streamid:object.streamid,
+                    username:object.username,
+                    formatedDate:object.formatedDate
+                });
+            
+            this.sortUserList();
+        ]]>
+    </method>
+    
+    <method name="sortUserList">
+        <![CDATA[ 
+        
+            if (this.sortType == "alphabetical") {
+                function sortByName(a,b) {
+                   
+                    if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+                    else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+                    else return 0;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            } else {
+                function sortByStreamId(a,b) {
+                   
+                    if(Number(a.streamid) == Number(b.streamid)) return 0;
+                    else if(Number(a.streamid) > Number(b.streamid)) return 1;
+                    else return -1;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            }
+            
+            this._table.innerList._layout.update();  
+        ]]>
+    </method>    
+    
+    <method name="clearList">
+        this._table.destroy();
+        new lz.participantsTable(this,{name:'_table'});
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        <![CDATA[
+            for (var i=0;i<this._table.innerList.subviews.length;i++){
+                if (this._table.innerList.subviews[i].refObj.publicSID==publicSID){
+                    var item = this._table.innerList.subviews[i];
+                    item.destroy();
+                    break;
+                }
+            }
+        ]]>
+    </method>
+    
+    <!--- get a Objects List Item
+        @param string publicSID publicSID
+     -->
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		var v = null;
+		var lst = this._table.innerList;
+		for (var i = 0; i < lst.subviews.length; i++) {
+			if (lst.subviews[i].refObj.publicSID == publicSID) {
+				v = lst.subviews[i];
+				break;
+			}
+		}
+		return v;
+	]]>
+	</method>
+    
+    <participantsTable name="_table" y="20" /> 
+
+    <view name="_miniIcons" x="112" y="0" height="18">
+        
+        <view width="1" height="${ parent.parent.height }" x="0"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_mod" x="2" y="3" resource="participants_isMod_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="608" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="20"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_draw" x="22" y="3" resource="participants_allow_drawing_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="609" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="40"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_share" x="42" y="3" resource="screen_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1073" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="60"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_remote" x="62" y="3" resource="remote_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1084" />
+        </view>
+    
+        <view width="1" height="${ parent.parent.height }" x="80"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_exclusive_audio" x="82" y="3" resource="participants_exclusive_audio_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1423" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="100"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_av_allow" x="102" y="3" resource="av_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="610" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="142"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+    </view>
+    
+    <view name="headerDivisionLine" width="${ parent.width }" 
+          bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="1" y="20" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/participantListItem.lzx b/WebContent/src/modules/conference/participants/participantListItem.lzx
new file mode 100644
index 0000000..4d8df9f
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participantListItem.lzx
@@ -0,0 +1,631 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<!-- 
+    The Width of each item is set in the participantList-Class
+ -->
+<class name="participantListItem" extends="view" bgcolor="0xDADADA" height="40" 
+       showhandcursor="false">
+    
+    <attribute name="connectedSince" value="" type="string" />
+    <attribute name="isMod" value="" type="string" />
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        <![CDATA[
+            //this._userpic.setAttribute('src',downloadurl); 
+            //This is a workaround cause in LPS-4.2.x immediatelly loading does not work
+            lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+                    
+            if (canvas.publicSID == this.refObj.publicSID) {
+                this._firstName.setAttribute("fontstyle","bold");
+                this._lastName.setAttribute("fontstyle","bold");
+            }
+            
+            this.updateIcons();
+        ]]>
+    </handler>
+    
+    <method name="fadeText" args="ignore=null"> 
+        <![CDATA[
+        	if ($debug) Debug.write("fadeText :1: ",this.refObj);
+        	if ($debug) Debug.write("fadeText :2: ",this.refObj.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.refObj.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+        ]]>          
+    </method>
+    
+    <handler name="onismoderator" reference="canvas" args="m">
+        if ($debug) Debug.write("###### ismoderator ",m);
+        <![CDATA[
+            this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+            this.updateIcons();
+        ]]>
+    </handler>
+    
+    <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+        <![CDATA[
+            if (this.refObj.publicSID == drawObject.publicSID) {
+                this.refObj.canDraw = drawObject.canDraw;
+                this.refObj.canShare = drawObject.canShare;
+                this.refObj.canRemote = drawObject.canRemote;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+
+    <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+        <![CDATA[
+            if (this.refObj.publicSID == rclObject.publicSID) {
+                this.refObj.canGiveAudio = rclObject.canGiveAudio;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+    
+    <handler name="onmicMutedStatusChangedItem" reference="canvas" args="roomClientObj">
+    	<![CDATA[
+    	    if ($debug) Debug.write("onmicMutedStatusChangedItem :1: ",roomClientObj.publicSID);
+            if (this.refObj.publicSID == roomClientObj.publicSID) {
+            	if ($debug) Debug.write("onmicMutedStatusChangedItem :2: ",roomClientObj.micMuted);
+                this.refObj.micMuted = roomClientObj.micMuted;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(this.refObj.publicSID == event.publicSID) {
+                this.refObj.micMuted = event.mute;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+    
+    <!--
+        Set actions to update the User-Rights and Information what he can do
+     -->
+    <method name="updateIcons">
+        <![CDATA[
+        
+            if ($debug) Debug.write("updateByMod,",this.isMod,canvas.streamid);
+        
+            //If this is one Mod he can also draw on the Whitboard
+            if (this.isMod) {
+                
+                
+                this._miniIcons._isMod.setAttribute("visibility","visible");
+                this._miniIcons._isModAddbutton.setAttribute("visibility","hidden");
+                this._miniIcons._canDraw.setAttribute("visibility","visible");
+                //the moderator can never remove the right to draw on the whiteboard for himself
+                this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                this._miniIcons._canDraw._text.setAttribute("text","");
+                this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                
+                this._miniIcons._allowShare.setAttribute("visibility","visible");
+                this._miniIcons._allowShare.setAttribute("showhandcursor",false);
+                this._miniIcons._allowShare._text.setAttribute("text","");
+                this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                
+                this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                this._miniIcons._allowRemote.setAttribute("showhandcursor",false);
+                this._miniIcons._allowRemote._text.setAttribute("text","");
+                this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+
+                this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",false);
+                this._miniIcons._allowExclusiveAudio._text.setAttribute("text","");
+                this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                
+                if (canvas.ismoderator) {
+                	this._x._kickUser.setAttribute("visibility","visible");
+                    if (canvas.ismoderator && canvas.publicSID != this.refObj.publicSID) {
+                        this._miniIcons._isMod.setAttribute("showhandcursor",true);
+                        this._miniIcons._isMod._text.setAttribute("text",canvas.getLabelName(675));
+                    } else {
+                        this._miniIcons._isMod._text.setAttribute("text","");
+                        this._miniIcons._isMod.setAttribute("showhandcursor",false);
+                    }
+                } else {
+                	this._x._kickUser.setAttribute("visibility","hidden");
+                    this._miniIcons._isMod._text.setAttribute("text","");
+                    this._miniIcons._isMod.setAttribute("showhandcursor",false);
+                }
+                
+            } else {
+                this._miniIcons._isMod.setAttribute("visibility","hidden");
+                    
+                //if this User is the Moderator he can grant access to whiteboard to anybody
+                if (canvas.ismoderator) {
+                	this._x._kickUser.setAttribute("visibility","visible");
+                    this._miniIcons._isModAddbutton.setAttribute("visibility","visible");
+                    
+                    
+                    this._miniIcons._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                    if (this.refObj.canDraw) {
+                        //Only in THIS case you can remove the Draw-to-whiteboard right 
+                        this._miniIcons._canDraw.setAttribute("visibility","visible");
+                        this._miniIcons._canDraw.setAttribute("showhandcursor",true);
+                        this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                    } else {
+                        this._miniIcons._canDraw.setAttribute("visibility","hidden");
+                        this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                        this._miniIcons._canDraw._text.setAttribute("text","");
+                        this._miniIcons._canDrawModerator.setAttribute("visibility","visible");
+                    }
+                    
+                  	this._miniIcons._allowShare._text.setAttribute("text",canvas.getLabelName(1068));
+                    if (this.refObj.canShare) {
+                    	this._miniIcons._allowShare.setAttribute("visibility","visible");
+                        this._miniIcons._allowShare.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowShare.setAttribute("visibility","hidden");
+                        this._miniIcons._allowShare.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyShare.setAttribute("visibility","visible");
+                    }
+                    
+                    this._miniIcons._allowRemote._text.setAttribute("text",canvas.getLabelName(1079));
+                    if (this.refObj.canRemote) {
+                    	this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                        this._miniIcons._allowRemote.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowRemote.setAttribute("visibility","hidden");
+                        this._miniIcons._allowRemote.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyRemote.setAttribute("visibility","visible");
+                    }
+
+					this._miniIcons._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1425));
+                    if (this.refObj.canGiveAudio) {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                        this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","hidden");
+                        this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyExclusiveAudio.setAttribute("visibility","visible");
+                    }
+                    
+                } else {
+                	this._x._kickUser.setAttribute("visibility","hidden");
+                    this._miniIcons._isModAddbutton.setAttribute("visibility","hidden");
+                    
+                    if (this.refObj.canDraw) {
+                        this._miniIcons._canDraw.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._canDraw.setAttribute("visibility","hidden");
+                    }
+                    
+                    if (this.refObj.canShare) {
+                        this._miniIcons._allowShare.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._allowShare.setAttribute("visibility","hidden");
+                    }
+                    
+                    if (this.refObj.canRemote) {
+                        this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._allowRemote.setAttribute("visibility","hidden");
+                    }
+
+                    if (this.refObj.canGiveAudio) {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                    } else {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","hidden");
+                    }
+                    
+                    //No Update action available
+                    this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                    this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                    this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+                    this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                    this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                    this._miniIcons._canDraw._text.setAttribute("text","");
+                    this._miniIcons._allowRemote._text.setAttribute("text","");
+                    this._miniIcons._allowExclusiveAudio._text.setAttribute("text","");
+                    this._miniIcons._allowShare._text.setAttribute("text","");
+                    
+                }
+                    
+            }
+            
+            if ($debug) Debug.write("onmicMutedStatusChangedItem :3: ",this.refObj.publicSID,this.refObj.micMuted);
+            
+            if (this.refObj.micMuted) {
+            	this._x._mute._text.setAttribute("labelid",1408);
+            	this._x._mute.setAttribute("frame",2);
+            } else {
+            	this._x._mute._text.setAttribute("labelid",1407);
+            	this._x._mute.setAttribute("frame",1);
+            }
+            
+            //this Icon is only available in case its the current User 
+            if (canvas.publicSID == this.refObj.publicSID) {
+                //if ($debug) Debug.write("IS SELF !!!!!!");
+                this._miniIcons._restartDevice.setAttribute("visibility","visible");
+            } else {
+                this._miniIcons._restartDevice.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <!--
+    public Boolean setCanDraw(String SID, String publicSID, boolean canDraw)
+     -->
+     
+    <netRemoteCallHib name="setCanDraw" funcname="whiteboardservice.setCanDraw"
+                       remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue"> return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canDraw;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("whiteboardservice.setCanDraw : ",value);
+            
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+            
+    <netRemoteCallHib name="setCanShare" funcname="whiteboardservice.setCanShare"
+                       remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue"> return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canShare;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("whiteboardservice.setCanShare : ",value);
+            
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="setCanRemote" funcname="whiteboardservice.setCanRemote"
+                   remotecontext="$once{ canvas.thishib }">
+        <attribute name="publicSID" value="" type="string" />
+        <attribute name="canRemote" value="true" type="boolean" />
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canRemote;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("whiteboardservice.setCanRemote : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+
+    <netRemoteCallHib name="setCanGiveAudio" funcname="whiteboardservice.setCanGiveAudio"
+                   remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canGiveAudio;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setCanGiveAudio : ",value);
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+            
+    <handler name="onmouseover">
+        this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this.setAttribute('bgcolor',0xDADADA);
+    </handler>
+    
+    <image name="_userpic" stretches="both" x="1">
+        <handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+                if (this.width > 38) {
+                    //If bigger then containter then scale it
+                    var height = this.height/(this.width/38);
+                    this.setAttribute('height',height);
+                    this.setAttribute('width',38);
+                }
+            ]]>
+        </handler>
+    </image>
+    
+    <labelText name="_firstName" fontsize="10" x="40" text="${ parent.firstname == null ? '' : parent.firstname }" />
+    <labelText name="_lastName" fontsize="10" x="40" y="20" text="${ parent.lastname == null ? '' : parent.lastname }" />
+    
+	<typingIcon name="_user_typing" x="132" y="2" width="30" height="16" visible="false"/>
+	<method name="userTyping" args="v">
+		_user_typing.setAttribute("visible", v);
+	</method>
+	    
+	<miniIcons name="_start_private_chat_rsc" x="114" y = "2" width="16" height="16"
+		resource="start_private_chat_rsc" showhandcursor="true"
+		visible="${ (canvas.currentRoomObj.hideChat == null || !canvas.currentRoomObj.hideChat) &amp;&amp; parent.refObj.publicSID != canvas.publicSID }">
+		
+		<handler name="onclick">
+			var refObj = parent.refObj;
+			if ($debug) Debug.write("Start Private Chat: ", refObj);
+			if (refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner
+					, {errorlabelid:1495});
+				return;
+			}
+			canvas._currentChatPanel.addChat(refObj);
+		</handler>
+		<labelTooltip labelid="1493" />
+	</miniIcons>
+    
+    <view name="_x" x="132" y="2">
+	     
+	    <miniIcons name="_mute" x="82" width="16" height="16" resource="mute_micro_btn_rsc" showhandcursor="true" >
+            <handler name="onclick">
+                <![CDATA[
+                    canvas._videocontainer._videoviewcontent.muteSound(parent.parent.refObj.publicSID, !parent.parent.refObj.micMuted);
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1407" />
+        </miniIcons>  
+        
+	    <miniIcons name="_kickUser" width="16" height="16" x="100"
+	               resource="kick_user_rsc" showhandcursor="true">
+	        <handler name="onclick">
+	        	
+	        	if (parent.parent.refObj.publicSID == canvas.publicSID) {
+	                new lz.labelerrorPopup(canvas.main_content._content.inner,{
+	                            errorlabelid:1214
+	                        });
+	                return;
+	            }
+	                
+	        	if (parent.isSuperModerator) {
+	                new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1217});
+	                return;
+	            }
+	        	
+	            if ($debug) Debug.write("USER Kick: ",parent.parent.refObj.publicSID);
+	            new lz.confirmationSingle(canvas.main_content._content.inner,{
+	                                           labelid:1216,labeliderror:1215,
+	                                           refObj:this,showCheckBox:false});
+	            
+	        </handler>
+	        
+	        <method name="sendConfirmation" args="yesno" >
+	            this.kickUserByPublicSID.publicSID = parent.parent.refObj.publicSID;
+	            this.kickUserByPublicSID.doCall();
+	        </method>
+	        
+	        <netRemoteCallHib name="kickUserByPublicSID" funcname="userservice.kickUserByPublicSID" 
+	                          remotecontext="$once{ canvas.thishib }" >    
+	            <attribute name="publicSID" value="" type="string" />  
+	            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+	            <netparam><method name="getValue"> return parent.publicSID; </method></netparam>
+	            <handler name="ondata" args="value">
+	                if ($debug) Debug.write("kickUserByPublicSID: ",value);
+	                //this.parent.destroy();
+	            </handler>
+	        </netRemoteCallHib> 
+	        
+	        <labelTooltip labelid="1213" />
+	    </miniIcons>   
+    </view>
+    
+    <view name="_miniIcons" x="113" y="22" height="18" >
+        
+        <miniIcons name="_isMod" x="0" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false">
+            <handler name="onclick">
+                <![CDATA[
+                
+                    if (parent.parent.isSuperModerator) {
+                        new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                        return;
+                    }
+                
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do Remove It");
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                        //parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" />
+        </miniIcons>
+        
+        <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="right_notactive_rsc" 
+                   height="16" showhandcursor="true">
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do Add It");
+                        hib.addModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.addModerator.doCall();
+                        //parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" labelid="676" />
+        </miniIcons>
+            
+        <miniIcons name="_canDraw" x="20" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" />
+        </miniIcons>
+        
+        <miniIcons name="_canDrawModerator" x="20" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanDraw.doCall();
+            </handler>
+            <labelTooltip labelid="611" />
+        </miniIcons>
+        
+        <miniIcons name="_allowShare" x="40" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanShare.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1068" />
+        </miniIcons>
+        
+        <miniIcons name="_denyShare" x="40" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanShare.doCall();
+            </handler>
+            <labelTooltip labelid="1067" />
+        </miniIcons>
+        
+        
+        <miniIcons name="_allowRemote" x="60" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanRemote.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1079" />
+        </miniIcons>
+        
+        <miniIcons name="_denyRemote" x="60" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanRemote.doCall();
+            </handler>
+            <labelTooltip labelid="1078" />
+        </miniIcons>
+
+        <miniIcons name="_allowExclusiveAudio" x="80" width="16" resource="right_isactive_rsc"
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to give exclusive audio
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        if ($debug) Debug.write("Do it");
+                        parent.parent.setCanGiveAudio.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1425" />
+        </miniIcons>
+
+        <miniIcons name="_denyExclusiveAudio" x="80" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                parent.parent.setCanGiveAudio.doCall();
+            </handler>
+            <labelTooltip labelid="1424" />
+        </miniIcons>
+        
+        
+        <miniIcons name="_restartDevice" x="100" width="16" height="16" resource="resyncuser_rsc" showhandcursor="true">
+            <handler name="onclick">
+                //TODO: local connection call
+                if ($debug) Debug.write("parent.parent.refObj.publicSID: ",parent.parent.refObj.publicSID);
+                canvas._videocontainer._videoviewcontent.showDevicePopUp(true);
+            </handler>
+            <labelTooltip labelid="610" />
+        </miniIcons>
+        
+        <view name="_loudness" x="120" >
+            <view x="0" y="0" name="loudness" resource="speaking" opacity="0.2"
+                  onmouseover="" onmouseout="" >      
+			    <handler name="onclick">
+					<![CDATA[
+				      	if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+				            canvas.thishib.giveExclusiveAudio.setExclusiveAudio(parent.parent.parent.refObj.publicSID);
+				        } else {
+				        	new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1478});    
+				        }
+					]]>
+				</handler> 
+                <labelTooltip inittwice="true" labelid="372" />
+            </view>
+        </view>    
+    </view>
+    
+    <view name="divisionLine" width="$once{ parent.width }" 
+          bgcolor="0xFFFFFF" height="1" y="39" />
+    
+</class>
+ 
+</library>
diff --git a/WebContent/src/modules/conference/participants/participants.lzx b/WebContent/src/modules/conference/participants/participants.lzx
new file mode 100644
index 0000000..bdd0973
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participants.lzx
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="participants" extends="baseRoomInnerList" 
+       height="$once{ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "conference";
+       
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+	        if( $debug ) Debug.write("SRC is WRONG ");
+            canvas.thishib.setAttribute('src',src);
+
+			if (canvas.wicketsid == null){            
+		        if( $debug ) Debug.write("Going to reconnect ");
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+    
+    <method name="initList">
+    	//
+    </method>
+
+    <commonVideoComponentAdapter name="_videoviewcontent" />
+
+    <method name="reconnectSuccess">
+        if ($debug) Debug.write("User Reloged In");
+        //Send to SWF10 video-container to connect on the conference room url
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(false);
+    </method>
+
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+    	if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+    	//set default values and get already availible streams
+    	//it can happen that if you click to exit the room the views are not
+    	//not cleaned up yet and you receive this event from the LocalConnection
+    	if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+    	}
+    </method>
+
+
+
+    <!---
+        Returns a list of all moderators of the current room and parses 
+        if the current user should receive the supermoderator flag or not
+     -->
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                canvas.becomeSuperModerator = canvas.becomemoderator;
+                
+                if (!canvas.becomeSuperModerator) {
+    	            for (var i=0;i<value.length;i++) {
+                        
+                        if (value[i].user.user_id == canvas.user_id) {
+                            parent.setRoomValues.applyDefaultModeration = true;
+                            canvas.becomeSuperModerator = value[i].isSuperModerator;
+                            if ($debug) Debug.info("Make this User to an Moderator");
+                            break;
+                        }
+                        
+                    }
+                }
+	            
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                
+                if ($debug) Debug.write("setRoomValues CALL: ");
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <!---
+        Returns a list of all users currently in the conference room
+     -->
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("+++++++++++++++++");
+            if ($debug) Debug.write("+++++++++++++++++ setRoomValues1: ",roomStatus);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                }
+                //if ($debug) Debug.write("getClientListScope value: ",value[i]);
+                this.parent.addItem(value[i].connectedSince,value[i].isMod,value[i].streamid,value[i].username,
+                              '',value[i].formatedDate,value[i].userpos,value[i].usercolor,value[i]);
+            }
+            
+            //this content must be inited _after_ setting the default values
+            canvas.thishib.getCurrentModeratorList.doCall(); 
+            
+            canvas.thishib.checkLzRecording.doCall();
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+		]]>
+        </handler>  
+    </netRemoteCallHib>
+
+    <!---
+        invoked if another client logs into the room 
+        after choosing devices
+     -->     
+    <method name="setAVSettingsToClient" args="rcl">
+        this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method>
+
+    <method name="receiveExclusiveAudioFlag" args="publicSID">
+    <![CDATA[
+    	if ($debug) Debug.write("receiveExclusiveAudioFlag: ",publicSID);
+        var obj = this._participants.getUserListItemByPublicSID(publicSID);
+
+        for (var i=0; i<obj.parent.subviews.length; i++) {
+            var item = obj.parent.subviews[i];
+            var rcl = new Object();
+
+            rcl.publicSID = item.refObj.publicSID;
+            rcl.micMuted = !(publicSID == item.refObj.publicSID);
+            canvas.setMuteStatus(rcl);
+        }
+    ]]>
+    </method>
+    
+    <method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,object);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+            	//if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+                this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+            }
+           
+            //do add self too
+            this._participants.addItem(object);
+        ]]>
+    </method>
+
+    <method name="setSpeakingByPos" args="publicSID,bool">
+    	var tObj = this._participants.getUserListItemByPublicSID(publicSID);
+    	if (tObj != null) {
+    		tObj._miniIcons._loudness.loudness.setAttribute('opacity', bool ? 1 : 0.2);
+        }
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>
+
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <!--
+        invoked whenever a User starts to Stream Video in this Room,
+        interviewPodId has only a meaning in the Room Type Interview
+     -->
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+    
+	<method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+	<![CDATA[
+		if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+		
+		if (canvas.publicSID != object.publicSID){
+		if ($debug) Debug.write("### initializeStreams createVideoObject: ", object);
+			this._videoviewcontent.createVideoObject(object.publicSID, false, -1, object);
+		}
+		
+		//Do Add it anyway
+		this._participants.addItem(object);
+	]]>
+	</method>
+    
+    <moderationMiniIconsEventUserList name="_applyAndStatusIcons" x="2" y="2" >
+        <handler name="onismoderator" reference="canvas" args="m">
+            this.updateIcons();
+        </handler>
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onmicMutedStatusChangedItem" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+    </moderationMiniIconsEventUserList>
+    
+    <participantList name="_participants" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/resources/accept.png b/WebContent/src/modules/conference/participants/resources/accept.png
new file mode 100644
index 0000000..89c8129
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/accept.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/delete.png b/WebContent/src/modules/conference/participants/resources/delete.png
new file mode 100644
index 0000000..08f2493
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/micro_small.png b/WebContent/src/modules/conference/participants/resources/micro_small.png
new file mode 100644
index 0000000..215c831
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/micro_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/pencil_add.png b/WebContent/src/modules/conference/participants/resources/pencil_add.png
new file mode 100644
index 0000000..902bbe6
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/pencil_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/pencil_delete.png b/WebContent/src/modules/conference/participants/resources/pencil_delete.png
new file mode 100644
index 0000000..d8944e6
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/pencil_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/user_add.png b/WebContent/src/modules/conference/participants/resources/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/user_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/polls/answerPoll.lzx b/WebContent/src/modules/conference/polls/answerPoll.lzx
new file mode 100644
index 0000000..781d2b0
--- /dev/null
+++ b/WebContent/src/modules/conference/polls/answerPoll.lzx
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="answerPoll" extends="labelExplorerBox" labelid="18"
+    docking="true" resizeable="false" closable="true" width="500" x="100" height="240">
+    
+	<attribute name="createdBy" type="string" value="" />
+	<attribute name="pollDate" type="string" value="" />
+	<attribute name="pollQuestion" type="string" value="" />
+	<attribute name="pollTypeId" type="string" value="" />
+	<attribute name="roomPollAnswerList" type="string" value="" />
+	<attribute name="roomPollId" type="string" value="" />
+	<attribute name="roomScopeName" type="string" value="" />
+	
+	<labelText y="22" name="head" />
+	<labelText text="$once{ parent.pollQuestion }" y="42" x="0" height="60" width="380" multiline="true" resize="false"/>
+	
+	<handler name="oninit">
+		if ($debug) Debug.write("[answerPoll:oninit] this: ",this);
+		if (this.pollTypeId==1){
+			//Debug.write("Yes/No Question");
+			this.pollboolean.setAttribute('visible',true);
+		} else  if(this.pollTypeId==2) {
+			//Debug.write("Numeric Question");
+			this.pollnumeric.setAttribute('visible',true);
+		}
+		this.head.setAttribute('text',this.createdBy+" "+canvas.getLabelName(36));
+	</handler>
+	
+	<labelText y="102" labelid="33" />
+	
+	<radiogroup name="pollboolean" x="100" y="102" visible="false">
+	  	<labelRadioButton value="1" labelid="34" selected="true" />
+	  	<labelRadioButton value="2" labelid="35" />
+	</radiogroup>
+
+	<resetCombobox name="pollnumeric" visible="false" width="160" x="100" y="102" editable="false" itemclassname="bigTextListItem" >
+		<handler name="oninit">
+			<![CDATA[
+			for (var i=1;i<11;i++){
+				this.addItem(i,i);
+			}
+			this.selectItem('1');
+			]]>
+		</handler>
+	</resetCombobox>
+	
+    <simpleLabelButton labelid="32" width="200" x="80" y="218">
+    	<handler name="onclick">
+    		if (parent.pollTypeId==1){
+    			this.parent.vote.pollvalue = Number(parent.pollboolean.getValue());
+    		} else if (parent.pollTypeId==2){
+    			this.parent.vote.pollvalue = Number(parent.pollnumeric.getValue());
+    		}
+    		this.parent.vote.pollTypesId = parent.pollTypeId;
+    		this.parent.vote.doCall();
+    		
+    	</handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="25" width="200" x="290" y="218" 
+        onclick="this.parent.close();" />
+    
+        <netRemoteCallHib name="vote" funcname="pollservice.vote" remotecontext="$once{ canvas.thishib }" >
+            <attribute name="pollvalue" type="number" value="0" />
+            <attribute name="pollTypesId" type="number" value="0" />
+            <netparam><method name="getValue">return parent.pollvalue;</method></netparam>
+            <netparam><method name="getValue">return parent.pollTypesId;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //Debug.write("vote : ",value);
+                    this.parent.close();
+                ]]>
+            </handler>   
+        </netRemoteCallHib>      
+    
+    
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/polls/createPollWin.lzx b/WebContent/src/modules/conference/polls/createPollWin.lzx
new file mode 100644
index 0000000..1681bd8
--- /dev/null
+++ b/WebContent/src/modules/conference/polls/createPollWin.lzx
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="bigTextListItem" extends="textlistitem" fontsize="11" />
+
+	<class name="createPollWin" extends="labelExplorerBox" labelid="18"
+		docking="true" resizeable="false" closable="true" width="500" x="100"
+		height="240">
+
+		<labelText fontstyle="bold" labelid="19" y="22" />
+
+		<labelText labelid="1410" y="42" />
+		<customEdittext name="_name" multiline="false" width="390"
+			x="100" y="42" />
+
+		<labelText labelid="20" y="67" />
+		<customEdittext name="_question" multiline="true"
+			width="390" x="100" y="67" height="60" />
+
+		<netRemoteCallHib name="getPollTypeList" funcname="pollservice.getPollTypeList"
+			remotecontext="$once{ canvas.thishib }">
+			<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("getPollTypeList : ",value)
+				for (var i = 0; i < value.length; ++i) {
+					this.parent._polltypes.addItem(canvas.getLabelName(value[i].label), value[i].pollTypesId);
+				}
+				this.parent._polltypes.selectItem(value[0].pollTypesId);
+			]]>
+			</handler>
+		</netRemoteCallHib>
+
+		<labelText labelid="21" y="142" />
+		<resetCombobox name="_polltypes" width="160" x="100" y="142"
+			editable="false" itemclassname="bigTextListItem">
+			<handler name="oninit">
+				this.parent.getPollTypeList.doCall();
+			</handler>
+		</resetCombobox>
+
+		<labelText fgcolor="red" labelid="23" y="175" width="480"
+			multiline="true" resize="false" />
+
+		<netRemoteCallHib name="createPoll" funcname="pollservice.createPoll"
+			remotecontext="$once{ canvas.thishib }">
+			<attribute name="pollname" value="" type="string" />
+			<attribute name="pollquestion" value="" type="string" />
+			<attribute name="polltypesid" value="0" type="number" />
+			<netparam><method name="getValue">return parent.pollname;</method></netparam>
+			<netparam><method name="getValue">return parent.pollquestion;</method></netparam>
+			<netparam><method name="getValue">return parent.polltypesid;</method></netparam>
+			<handler name="ondata" args="value">
+				//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("createPoll : ",value);
+				this.parent.close();
+			</handler>
+		</netRemoteCallHib>
+
+		<simpleLabelButton labelid="22" width="100" x="280"
+			y="218">
+			<handler name="onclick">
+				this.parent.createPoll.pollname =
+				this.parent._name.getText();
+				this.parent.createPoll.pollquestion =
+				this.parent._question.getText();
+				this.parent.createPoll.polltypesid =
+				this.parent._polltypes.getValue();
+				//Debug.write("this.parent.createPoll.createPoll:",this.parent.createPoll.createPoll);
+				this.parent.createPoll.doCall();
+			</handler>
+		</simpleLabelButton>
+
+		<simpleLabelButton labelid="25" width="100" x="390"
+			y="218" onclick="this.parent.close();" />
+
+	</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/polls/library.lzx b/WebContent/src/modules/conference/polls/library.lzx
new file mode 100644
index 0000000..0b31a5b
--- /dev/null
+++ b/WebContent/src/modules/conference/polls/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="createPollWin.lzx" />
+    <include href="answerPoll.lzx" />
+    <include href="resultPollWin.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/polls/resultPollWin.lzx b/WebContent/src/modules/conference/polls/resultPollWin.lzx
new file mode 100644
index 0000000..b7d95bd
--- /dev/null
+++ b/WebContent/src/modules/conference/polls/resultPollWin.lzx
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="resultPollWin" extends="labelExplorerBox" labelid="37"
+		docking="true" resizeable="false" closable="true" width="454" x="100"
+		height="454">
+		 
+		<attribute name="roomPoll" value="null" />
+		<attribute name="archPolls" value="null" />
+		<attribute name="resultpollvotes" value="null" />
+ 		<attribute name="displayedPoll" value="null" />
+
+		<handler name="oninit">
+			displayResults(roomPoll);
+		</handler>
+		
+		<method name="displayResults" args="poll">
+		<![CDATA[
+			displayedPoll = poll;
+			this.content.setAttribute("visible", poll != null);
+			if (poll == null) {
+				this.head.setAttribute('text', canvas.getLabelName(41));
+				updateButtons();
+				return;
+			}
+			updateButtons();
+			this.head.setAttribute('text',
+					(canvas.user_id == poll.createdBy.user_id ? canvas
+							.getLabelName(1411) : poll.createdBy.login)
+							+ " " + canvas.getLabelName(36));
+
+			var totalVotes = poll.roomPollAnswerList.length;
+			this.content.question.text.setAttribute('text', poll.pollQuestion);
+			this.content.voteResultNum.setAttribute('text', totalVotes);
+			if (this.resultpollvotes != null) {
+				this.resultpollvotes.destroy();
+			}
+			this.resultpollvotes = new lz.view(this.content, {
+						y : 146,
+						x : 100
+					});
+
+			var isNumeric = poll.pollType.isNumericAnswer;
+			var resArray = new Array(isNumeric ? 10 : 2);
+			for (var i = 0; i < resArray.length; ++i) {
+				resArray[i] = 0;
+			}
+			for (var i = 0; i < totalVotes; ++i) {
+				var idx = isNumeric
+						? poll.roomPollAnswerList[i].pointList - 1
+						: (poll.roomPollAnswerList[i].answer ? 0 : 1);
+				resArray[idx]++;
+			}
+			if (content._chartType.getValue() == 0) {
+				new lz.simplelayout(this.resultpollvotes, {
+							axis : 'y',
+							spacing : 2
+						});
+				for (var i = 0; i < resArray.length; ++i) {
+					var pos = (totalVotes == 0) ? 0 : Math.round(100
+							* resArray[i] / totalVotes);
+					new lz.parentResultPollBalk(this.resultpollvotes, {
+								newX : pos * 2,
+								newPercent : pos + '%',
+								textA : isNumeric ? i + 1 : canvas
+										.getLabelName(i == 0 ? 34 : 35)
+							});
+				}
+			} else {
+
+				if (!isNumeric) {
+					//yes/no
+					new lz.resultPieCharPoll(this.resultpollvotes, {
+								xseries : ["yes", "no"],
+								yseries : resArray,
+								tooltipseries : ["yes ("+resArray[0]+")", "no ("+resArray[1]+")"]
+							});
+				} else {
+
+					if ($debug)
+						Debug.write("tObject 1 ", ["1", "2", "3", "4", "5",
+										"6", "7", "8", "9", "10"]);
+					if ($debug)
+						Debug.write("tObject 2 ", resArray);
+
+					var tooltipseries = new Array(resArray.length);
+					for (var i=0;i<resArray.length;i++) {
+						tooltipseries[i] = "N° "+i+" ("+ resArray[i] +")";
+					}
+						
+					//numeric [1,2,3,4,5,6,7,8,9,10]
+					new lz.resultPieCharPoll(this.resultpollvotes, {
+						xseries : ["1", "2", "3", "4", "5", "6", "7", "8", "9",
+								"10"],
+						yseries : resArray,
+						tooltipseries : tooltipseries
+					});
+				}
+
+			}
+		]]>
+		</method>
+
+		<labelText y="22" name="archPollLbl" labelid="1412" />
+		<resetCombobox name="_archPolls" width="342" x="100" y="22"
+			editable="false" itemclassname="bigTextListItem">
+			
+			<netRemoteCallHib name="getArchivedPollList"
+				funcname="pollservice.getArchivedPollList" remotecontext="$once{ canvas.thishib }">
+				<handler name="ondata" args="value">
+				<![CDATA[
+					parent.removeAll();
+					if ($debug)
+						Debug.write("getArchivedPollList ", value);
+
+					this.parent.parent.archPolls = value;
+					var noArch = (value == null || (value != null && value.length == 0));
+					parent.setAttribute("visible", !noArch);
+					parent.parent.archPollLbl.setAttribute("visible", !noArch);
+					if (noArch) {
+						return;
+					}
+					if (this.parent.parent.roomPoll != null) {
+						this.parent.addItem(
+								this.parent.parent.roomPoll.pollName + "("
+										+ canvas.getLabelName(1413) + ")", -1);
+					}
+					for (var i = 0; i < value.length; ++i) {
+						this.parent.addItem(value[i].pollName, i);
+					}
+					this.parent.selectItem(this.parent.parent.roomPoll == null
+							? 0
+							: -1);
+				]]>
+				</handler>
+			</netRemoteCallHib>
+			
+			<handler name="oninit">
+				this.getArchivedPollList.doCall();
+			</handler>
+			
+			<handler name="onselect" args="sel">
+				if ($debug)
+					Debug.write("onselect ", sel);
+				this.parent.displayResults(sel.value > -1
+						? this.parent.archPolls[sel.value]
+						: this.parent.roomPoll);
+			</handler>
+			
+			<method name="removeAll">
+			<![CDATA[
+				var currentCount = this.cblist.getNumItems();
+				if ($debug) Debug.write("currentCount = ", currentCount);
+				for (var i = 0; i < currentCount; ++i) {
+					this.removeItemAt(0);
+				}
+			]]>
+            </method>
+		</resetCombobox>
+		
+		<labelText x="2" y="42" name="head" fontstyle="bold" />
+
+		<view name="content">
+			
+			<view name="question" x="2" y="62" width="440" height="60" bgcolor="0xFFFFFF">
+				<labelText x="0" y="0" name="text" multiline="true" 
+						   resize="false" width="$once{parent.width-14}" />
+				<om_vscrollbar/>
+			</view>
+            
+			<labelText y="122" labelid="39" />
+			<labelText y="122" x="100" name="voteResultNum" />
+			<resetCombobox name="_chartType" width="302" x="140" y="122" editable="false" >
+				<labeldTextListItem labelid="1414" value="0"/>
+				<labeldTextListItem labelid="1415" value="1" selected="true" />
+				<handler name="onselect" args="sel">
+					if ($debug) Debug.write("onselect ", sel);
+					var val = parent.parent._archPolls.getValue();
+					parent.parent.displayResults(val > -1
+							? parent.parent.archPolls[val]
+							: parent.parent.roomPoll);
+				</handler>
+			</resetCombobox>
+
+			<labelText y="146" labelid="40" x="2" />
+		</view>
+		
+		<method name="updateButtons">
+		<![CDATA[
+			_deletePoll.setAttribute("visible", canvas.ismoderator && displayedPoll != null);
+			var hasArch = _archPolls.cblist.getNumItems() > 0;
+			_closePoll.setAttribute("visible", _deletePoll.visible && (!hasArch || (hasArch && _archPolls.getValue() == -1)));
+		]]>
+		</method>
+		
+		<simpleLabelButton name="_deletePoll" labelid="1420" width="100"
+			x="2" y="$once{ parent.height-22 }"
+            onclick="new lz.confirmDeleteWindow(parent, {refObj: this, labelid: 1420, messagelabelid: 1421});"
+            >
+		    <netRemoteCallHib name="deletePoll" funcname="pollservice.deletePoll" remotecontext="$once{ canvas.thishib }" >   
+		        <netparam><method name="getValue"> var poll = parent.parent.parent.displayedPoll; return poll != null ? poll.roomPollId : -1; </method></netparam> 
+		        <handler name="ondata" args="value">
+				<![CDATA[
+					var p = parent.parent;
+					var archCount = p._archPolls.cblist.getNumItems();
+		        	var hasArch = archCount > 0;
+		        	if (!hasArch || (hasArch && p._archPolls.getValue() == -1)) {
+			        	p.roomPoll = null;
+		        	}
+		        	if (archCount) {
+		        		p.displayResults(null);
+		        	}
+		        	p._archPolls.getArchivedPollList.doCall();
+				]]>
+		        </handler>
+		    </netRemoteCallHib>
+			<method name="confirmDelete">
+				deletePoll.doCall();
+			</method>
+        </simpleLabelButton>
+            
+		<simpleLabelButton name="_closePoll" labelid="1418" width="100"
+			x="104" y="$once{ parent.height-22 }"
+            onclick="new lz.confirmDeleteWindow(parent, {refObj: this, labelid: 1418, confirmlabelid: 85, messagelabelid: 1419});"
+            >
+		    <netRemoteCallHib name="closePoll" funcname="pollservice.closePoll" remotecontext="$once{ canvas.thishib }" >   
+		        <handler name="ondata" args="value">
+		        	parent.parent.roomPoll = null;
+		        	parent.parent._archPolls.getArchivedPollList.doCall();
+		        </handler>
+		    </netRemoteCallHib>
+			<method name="confirmDelete">
+				if ($debug) Debug.write("parent._archPolls.getValue(); ", parent._archPolls.getValue());
+				closePoll.doCall();
+			</method>
+        </simpleLabelButton>
+            
+		<simpleLabelButton labelid="25" width="100" x="$once{ parent.width-102 }"
+            y="$once{ parent.height-22 }" onclick="this.parent.close();" />
+		
+	</class>
+
+	<class name="parentResultPollBalk" extends="view">
+		<attribute name="newX" value="0" type="number" />
+		<attribute name="newPercent" value="0%" type="string" />
+		<attribute name="answer" value="0" type="number" />
+		<attribute name="textA" value="" type="string" />
+		<text text="$once{ parent.textA }" resize="true" />
+		<resultPollBalk x="40" />
+	</class>
+
+	<class name="resultPollBalk" extends="view" bgcolor="black"
+		height="20" width="0">
+		<view bgcolor="red" width="${ parent.width-2 }" height="${ parent.height-2 }"
+			x="1" y="1" />
+		<text text="$once{ parent.parent.newPercent }" resize="true" y="2" />
+		<animator attribute="width" to="$once{ parent.parent.newX }"
+			duration="1000" />
+	</class>
+	
+	<class name="resultPieCharPoll" extends="ompiechart" x="40" width="300" 
+		height="280" style="omchartstyle">
+    
+		<attribute name="xseries" value="null"/>
+		<attribute name="yseries" value="null"/>
+		<attribute name="tooltipseries" value="null"/>
+    
+		<handler name="oninit">
+			this.legendbox.bringToFront();
+		</handler>
+    
+		<!--- get the dataseries -->
+		<method name="getOMDataSeries">
+		<![CDATA[
+			var tObject = new Object();
+
+			tObject.xseries = this.xseries;
+			tObject.yseries = this.yseries;
+			tObject.tooltipseries = this.tooltipseries;
+
+			return tObject;
+		]]>
+		</method>  
+    
+		<strokestyle name="pieslicestyle" strokeColor="0x000000" strokeWidth="1"
+			strokeType="solid" />
+        
+		<omlegend name="legendbox" legendFontsize="14" initstage="late"
+			legendborder="true" >
+        
+			<handler name="onitemmouseover" args="item">
+				var piepiece = parent.plotarea.arrPiePieces[item.identifier];
+				piepiece.renderInnerWedge();
+			</handler>
+
+			<handler name="onitemmouseout" args="item">
+				var piepiece = parent.plotarea.arrPiePieces[item.identifier];
+				piepiece.renderWedge();
+			</handler>
+		</omlegend>
+
+	</class>    
+    
+</library>
diff --git a/WebContent/src/modules/conference/popups/autoLoader.lzx b/WebContent/src/modules/conference/popups/autoLoader.lzx
new file mode 100644
index 0000000..14af187
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/autoLoader.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="autoLoader" extends="view" align="center" valign="middle" pixellock="true">
+
+	<attribute name="maxwidth" value="400" type="number" />
+	<attribute name="maxsteps" value="22" type="number" />
+	<attribute name="currentsteps" value="0" type="number" />
+	
+	<!-- 
+	<handler name="oninit">
+		this.setAttribute("y",Math.round(this.y));
+		this.setAttribute("y",Math.round(this.y));
+	</handler>
+	 -->
+	
+	<method name="close">
+		canvas.main_content.setAttribute('visibility','visible');
+		canvas._mainbgcontentNavi.setAttribute('visibility','visible');
+		canvas.thishib.loaderVar = null;
+		this.destroy();
+	</method>
+	
+	<method name="setProgress">
+		this.currentsteps += 1;
+		if($debug) Debug.write("autoLoader/setProgress ===== ",this.currentsteps);
+		var w = Math.round(((this.maxwidth)/this.maxsteps)*this.currentsteps);
+		this.loadingbar.setAttribute('visibility','visible');
+		if($debug) Debug.write("autoLoader/setResourceNumber == ",w);
+		this.loadingbar._loading.setAttribute('width',w);
+	</method>
+    
+    <text fontsize="11" name="error" y="20" fgcolor="0x666666"/>
+    <text fontsize="11" name="_src" y="50" align="center" fgcolor="0x666666" visibility="$once{ ($debug) ? 'visible' : 'hidden' }" />
+    
+    <view name="loadingbar"  height="1" pixellock="true"
+          x="-5" y="40" width="$once{ parent.maxwidth+2 }" visibility="hidden">
+          <view x="1" y="1" width="$once{ parent.width-2 }" height="1" opacity="0.3"
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" />
+          <view name="_loading" x="1" y="1" width="0" height="1"  pixellock="true" 
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }"/>
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/chooseNickName.lzx b/WebContent/src/modules/conference/popups/chooseNickName.lzx
new file mode 100644
index 0000000..83ccfa7
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/chooseNickName.lzx
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ <class name="chooseNickName" extends="labelExplorerBox" labelid="1287"
+    docking="true" resizeable="false" closable="false" 
+    width="324" x="$once{ parent.width/2 - this.width/2 }" y="100" height="200">
+
+    <handler name="oninit">
+    	<![CDATA[
+    	
+    	   var tFirstname = "Guest"
+    	   var tLastname = "User "+getStringTimeWithSeconds();
+    	
+    	   this.firstName.setAttribute("text",tFirstname);
+    	   this.lastName.setAttribute("text",tLastname);
+    	
+    	]]>
+    </handler>
+
+    <!--
+    public Long setUserNickName(String firstname, String lastname, String email)
+     -->
+    <netRemoteCallHib name="setUserNickName" activeErrorHandler="true" 
+                        funcname="xmlcrm.setUserNickName" remotecontext="$once{ canvas.thishib }">          
+        <netparam><method name="getValue">return parent.parent.firstName.getText();</method></netparam>
+        <netparam><method name="getValue">return parent.parent.lastName.getText();</method></netparam>
+        <netparam><method name="getValue">return parent.parent.mail.getText();</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setUserNickName -1-: ",value);
+                
+                if (value<0){
+                    
+                } else {
+                    canvas.thishib.getCurrentRoomClient.doCall();
+                    parent.close();
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+
+	<labelText y="26" x="4" labelid="1288" />
+		<customEdittext name="firstName" y="24" x="120" width="200" text="" />
+		
+	<labelText y="56" x="4" labelid="1289" />
+		<customEdittext name="lastName" y="54" x="120" width="200" text="" />
+		
+	<labelText y="86" x="4" labelid="1290" />
+		<customEdittext name="mail" y="84" x="120" width="200" 
+						regexpType="email" text="" />
+
+	<simpleLabelButton name="connect" x="$once{ parent.width-this.width-10 }" 
+					   y="$once{ parent.height-30 }" labelid="1291" width="120" >
+		<handler name="onclick">
+			<![CDATA[
+    			if (parent.firstName.getText().length < 4) {
+    				new lz.labelerrorPopup(canvas,{errorlabelid:1292});
+    				return;
+    			} else if (parent.lastName.getText().length < 4) {
+                    new lz.labelerrorPopup(canvas,{errorlabelid:1292});
+                    return;
+                } else if (parent.mail.getText() == "") {
+                    new lz.labelerrorPopup(canvas,{errorlabelid:1293});
+                    return;
+                }
+            
+                this.parent.setUserNickName.doCall();
+            ]]>    
+		</handler>
+	</simpleLabelButton>
+		
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/confirmationBox.lzx b/WebContent/src/modules/conference/popups/confirmationBox.lzx
new file mode 100644
index 0000000..3d3d256
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/confirmationBox.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="confirmationBox" extends="labelExplorerBox" labelid="18"
+    docking="true" resizeable="false" closable="true" width="400" x="100" height="240">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <attribute name="doAskAgain" value="true" type="boolean" />
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+    
+    <labelCheckbox name="holddatainSO" 
+    			   visibility="$once{ (parent.doAskAgain) ? 'visible' : 'hidden' }" 
+    			   labelid="64" x="10" y="220" />
+    
+    <simpleLabelButton labelid="61" width="100" x="70" y="196">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>    
+    <simpleLabelButton labelid="65" width="100" x="180" y="196">
+    	<handler name="onclick">         
+    		var t = parent.holddatainSO.getValue();
+            this.parent.refObj.sendConfirmation(false,t);
+            this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+    <simpleLabelButton labelid="60" width="100" x="290" y="196">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+            this.parent.refObj.sendConfirmation(true,t);
+            this.parent.close();
+    	</handler>
+    </simpleLabelButton>  
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/confirmationSingle.lzx b/WebContent/src/modules/conference/popups/confirmationSingle.lzx
new file mode 100644
index 0000000..324ed4f
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/confirmationSingle.lzx
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="confirmationSingle" extends="labelExplorerBox" labelid="832"
+    docking="true" resizeable="false" closable="true" height="140" width="300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="refReturnMethod" value="null" />
+    
+    <attribute name="showCheckBox" value="true" type="boolean" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <attribute name="doCalcPosition" value="true" type="number" />
+    
+	<attribute name="iconResource" value="warning_popup_icon_rsc" type="string" />
+
+	<image x="4" src="$once{ canvas.getThemeImage(parent.iconResource) }" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+        
+    <handler name="oninit">
+        <![CDATA[
+        
+        	if (!this.doCalcPosition) {
+        		return;
+        	}
+        
+            //Set Position of Confirmation Box as Close as possible to the Mouse
+            var x = parent.getMouse("x");
+            var y = parent.getMouse("y");
+            var newx = x - (this.width/2);
+            var newy = y - (this.height/2);
+            
+            if ($debug) Debug.write("1",x,y,newx,newy);
+            
+            if (newx < 0) {
+                newx = 20;
+            }
+            if (newy < 0) {
+                newy = 20;
+            }
+            
+            //if ($debug) Debug.write("1.1",(this.width + newx + 20),parent.width,this.width);
+            
+            var relativeWidth = parent.width;
+            if (relativeWidth > canvas.width) {
+            	relativeWidth = canvas.width;
+            }
+            
+            if (this.width + newx + 20 > relativeWidth) {
+            	newx = relativeWidth-this.width-20;
+            }
+            
+            if (this.height + newy + 20 > parent.height) {
+            	newy = parent.height-this.height-20;
+            }
+            
+            if ($debug) Debug.write("2",newx,newy);
+            
+            this.setAttribute("x",newx);
+            this.setAttribute("y",newy);
+            
+        ]]>
+    </handler>
+    
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }" 
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+    
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+    		if (parent.refReturnMethod == null) {
+    			if ($debug) Debug.write("refObj ",this.parent.refObj);
+    		    this.parent.refObj.sendNoConfirmation();
+    		} else {
+    			this.parent.refObj[parent.refReturnMethod](false,t);
+    		}
+    	</handler>
+    </simpleLabelButton>    
+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+    		if (parent.refReturnMethod == null) {
+    		    this.parent.refObj.sendConfirmation(true,t);
+    		} else {
+                this.parent.refObj[parent.refReturnMethod](true,t);
+            }
+    	</handler>
+    </simpleLabelButton>    
+</class>
+
+<class name="rememberMessage" extends="labelExplorerBox" labelid="832"
+	   x="$once{ canvas.width/2 - this.width/2 }" y="100"
+	   docking="true" resizeable="false" closable="true" height="140" width="300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="showCheckBox" value="true" type="boolean" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+               width="$once{ parent.width - 40 }"
+        multiline="true" resize="false" x="30" />
+        
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }" 
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+    
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+        	var t = parent.holddatainSO.getValue();
+            this.parent.close();
+            this.parent.refObj.sendConfirmation(t);
+        </handler>
+    </simpleLabelButton>    
+     
+</class>
+	
+</library>
diff --git a/WebContent/src/modules/conference/popups/converterPopup.lzx b/WebContent/src/modules/conference/popups/converterPopup.lzx
new file mode 100644
index 0000000..76178ad
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/converterPopup.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="converterPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="true" closable="true" 
+    width="324" x="200" height="230">
+
+	<attribute name="error" value="null" />
+    
+    <handler name="oninit">
+        this.errorView.errorView.setAttribute('text',this.error);
+    </handler>
+
+	<view y="24" width="${ parent.width - 4 }" height="${ parent.height - 30 }" x="2" clip="true" name="errorView">
+		<text y="30" fontsize="10" fontstyle="bold" name="errorView"
+			multiline="true" width="${ parent.width - 14 }" selectable="true" />
+		<om_vscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx b/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx
new file mode 100644
index 0000000..59981ef
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="questionCheckbox" extends="view" width="$once{parent.width-4}" >
+	<attribute name="labelid" value="0" type="number" />
+	<attribute name="valBool"  value="false" type="boolean" />
+	<labelCheckbox name="holddatainSO" x="2" y="0" 
+		value="$once{parent.valBool}" text="" />
+    <labelText labelid="$once{ parent.labelid }" width="$once{parent.width-24}"
+    	x="18" multiline="true" resize="false">	
+    	<handler name="onclick">
+    		this.parent.holddatainSO.onclick.sendEvent();
+    	</handler>
+    </labelText>
+</class>
+
+<class name="editWhiteboardDefault" extends="labelExplorerBox" labelid="66"
+    docking="true" resizeable="false" closable="true" width="400" x="100" height="240">
+    
+    <attribute name="refObj" value="null" />
+    
+    <view name="_settings" width="$once{parent.width-4}" height="180" y="24" clip="true">
+		<view name="inner" width="$once{parent.width}" >
+			<simplelayout axis="y" spacing="2" />
+		</view>
+    	<om_vscrollbar />
+    </view>
+    <!-- 
+    63
+     -->
+    
+    <handler name="oninit" >
+		var g = canvas.getUserData();
+         if (g["image"]==null) {
+         	g["image"]=new Array();
+         	g["image"]["clearField"]=false;
+         	g["image"]["askagainclear"]=false;
+         	g["image"]["donotaskagainrdc"]=false;
+         }
+         var t = new lz.questionCheckbox(this._settings.inner,{name:"clearField",labelid:63,valBool:g["image"]["clearField"]});
+         //Debug.write("t: ",t);
+         t = new lz.questionCheckbox(this._settings.inner,{name:"askagainclear",labelid:67,valBool:g["image"]["askagainclear"]});
+		 //Debug.write("t: ",t);
+		
+         if (g["wmlfile"]==null) {
+         	g["wmlfile"]=new Array();
+         	g["wmlfile"]["clearField"]=false;
+         	g["wmlfile"]["askagainclear"]=false;
+         }
+         t = new lz.questionCheckbox(this._settings.inner,{name:"askagainclearwml",labelid:212,valBool:g["wmlfile"]["askagainclear"]});
+         
+         t = new lz.questionCheckbox(this._settings.inner,{name:"donotaskagainrdc",labelid:1127,valBool:g["image"]["donotaskagainrdc"]});
+		 
+         
+		 if (g["doShowUpdateProfileMessage"] == null) {
+		 	new lz.questionCheckbox(this._settings.inner,{name:"doShowUpdateProfileMessage",labelid:1299,valBool:false});
+		 } else {
+		 	new lz.questionCheckbox(this._settings.inner,{name:"doShowUpdateProfileMessage",labelid:1299,valBool:g["doShowUpdateProfileMessage"]});
+		 }
+         
+		 
+		 //Debug.write("t: ",t);
+    </handler>    
+    
+    <method name="storesettings" >
+		var g = canvas.getUserData();
+		
+         if (g["image"]==null) g["image"]=new Array();
+         g["image"]["clearField"]=this._settings.inner.clearField.holddatainSO.getValue();
+         g["image"]["askagainclear"]=this._settings.inner.askagainclear.holddatainSO.getValue();
+         g["image"]["donotaskagainrdc"]=this._settings.inner.donotaskagainrdc.holddatainSO.getValue();
+		
+         if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+		//always true
+         g["wmlfile"]["clearField"]=true;
+         g["wmlfile"]["askagainclear"]=this._settings.inner.askagainclearwml.holddatainSO.getValue();
+		
+         g["doShowUpdateProfileMessage"] = this._settings.inner.doShowUpdateProfileMessage.holddatainSO.getValue();
+         
+	     canvas.setUserData(g);
+    </method>
+    
+    <simpleLabelButton labelid="61" width="100" x="290" y="216">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton> 
+       
+    <simpleLabelButton labelid="60" width="100" x="180" y="216">
+    	<handler name="onclick">
+    		parent.storesettings();
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx b/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx
new file mode 100644
index 0000000..f62ad33
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="errorModeratorPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="false" closable="true" 
+    width="224" x="300" height="230">
+
+	<attribute name="error" value="" type="string" />
+
+	<view y="24" width="218" height="170" x="2" clip="true">
+		<text y="30" fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+			multiline="true" width="190" />
+		<om_vscrollbar />
+	</view>
+    
+    <simpleLabelButton x="20" labelid="906" y="200" width="200">
+		<handler name="onclick">
+			//new lz.applyForModeration(canvas.main_content._content.inner);
+			canvas.thishib.applyForModeration.doCall();
+            this.parent.close();
+		</handler>
+    </simpleLabelButton>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/errorPopup.lzx b/WebContent/src/modules/conference/popups/errorPopup.lzx
new file mode 100644
index 0000000..0ecc71c
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/errorPopup.lzx
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="errorPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="false" closable="true" y="100"
+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">
+
+	<attribute name="error" value="" type="string" />
+	<attribute name="makeModal" value="false" type="boolean" />
+	<attribute name="onCloseFunc" type="object" value="null"/>
+		
+	<handler name="oninit">
+	   if (this.makeModal) {
+	       lz.ModeManager.makeModal(this);
+	   }
+	</handler>
+	
+	<handler name="onclose">
+		if (this.makeModal) {
+			lz.ModeManager.releaseAll();
+		}
+		if (onCloseFunc != null) {
+			onCloseFunc();
+		}
+	</handler>
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">
+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+	</view>
+    
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 
+           y="$once{ parent.height-24 }" 
+           onclick="this.parent.close();" />
+
+</class>
+
+<class name="labelerrorPopup" extends="errorPopup">
+
+    <attribute name="errorlabelid" type="number" setter="setErrorLabelId(errorlabelid)" />
+    <method name="setErrorLabelId" args="errorlabelid" >
+        this.errorlabelid = errorlabelid;
+        this.setAttribute("error",canvas.getLabelName(this.errorlabelid));
+        if ($debug) Debug.write("labelerrorPopup: ",canvas.getLabelName(this.errorlabelid));
+    </method>
+    
+
+</class>
+
+<class name="singletonErrorPopup" extends="errorPopup">
+	<handler name="oninit">
+		lz.singletonErrorPopupHolder.dialogPresent = 1;
+		lz.singletonErrorPopupHolder.dialogObject = this;
+	</handler>
+	
+	<handler name="ondestroy">
+		lz.singletonErrorPopupHolder.dialogPresent = 0;
+		lz.singletonErrorPopupHolder.dialogObject = null;
+	</handler>
+</class>
+
+<class name="singletonErrorPopupHolder">
+	<attribute name="error" type="string" setter="setError(error)"/>
+	<attribute name="dialogPresent" allocation="class" value="0" />
+	<attribute name="dialogObject" allocation="class" />
+	
+	<method name="setError" args="error">
+	
+		if ( lz.singletonErrorPopupHolder.dialogPresent == 0 )
+		{
+			lz.singletonErrorPopupHolder.dialogPresent = 1;
+			lz.singletonErrorPopupHolder.dialogObject = new lz.singletonErrorPopup(canvas,{error:error});
+		}
+		else
+		{
+			lz.singletonErrorPopupHolder.dialogObject.error = error;
+		}
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/headerMenu.lzx b/WebContent/src/modules/conference/popups/headerMenu.lzx
new file mode 100644
index 0000000..c3d6932
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/headerMenu.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="headerMenu" extends="view" layout="axis:x;spacing:4;inset:4" >
+	<text fontsize="11" fontstyle="bold" text="${ canvas.firstName+' '+canvas.lastName }" resize="true" />
+	
+	<labelText labelid="58" fontsize="11" fontstyle="bold" resize="true" />
+	<text fontsize="11" fontstyle="bold" text="${ canvas.currentcourseNameLong }" resize="true" />
+	
+	<labelText labelid="59" fontsize="11" fontstyle="bold" resize="true" />
+	<text fontsize="11" fontstyle="bold" text="${ canvas.currentlanguage }" resize="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx b/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx
new file mode 100644
index 0000000..dae9101
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="incomingScreenSharing" extends="labelExplorerBox" labelid="643"
+        docking="true" resizeable="false" closable="true" width="260"
+        x="$once{ canvas.width - this.width - 10 }" y="10" height="160">
+    
+    <attribute name="messageObj" value="null" />
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        var tString = canvas.getLabelName(644) + " " 
+                + messageObj.rcl.firstName + " " + messageObj.rcl.lastName;
+        this._text.setAttribute("text",tString);
+    </handler>
+    
+    <labelText name="_text" text="" x="10" y="22"
+            width="$once{ parent.width - 20 }" multiline="true" resize="false"/>
+    
+    <simpleLabelButton labelid="645" width="100" 
+                       x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            lz.Browser.loadURL(parent.generateFileLink(),'_BLANK');  
+        </handler>
+    </simpleLabelButton>
+    
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl() + 'RtpSharerServlet?publicSID='+this.messageObj.publicSID +
+                    '&room='+this.messageObj.room +
+                    '&room_id='+hib.currentroomid +
+                    '&sid='+canvas.sessionId;  
+        ]]>
+    </method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/library.lzx b/WebContent/src/modules/conference/popups/library.lzx
new file mode 100644
index 0000000..1da3a8b
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/library.lzx
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- 
+	FamFam Icon set
+	Creative Commons 3.0
+	 -->
+	<resource name="warning_icon_rsc" src="resources/error.png" />
+    
+    <include href="rpcerrorDialog.lzx" />
+    <include href="errorPopup.lzx" />
+    <include href="messageWin.lzx" />
+    <include href="headerMenu.lzx" />
+    <include href="confirmationBox.lzx" />
+    <include href="editWhiteboardDefault.lzx" />
+	<include href="confirmationSingle.lzx" />
+    <include href="autoLoader.lzx" />
+    <include href="converterPopup.lzx" />
+    <include href="errorModeratorPopup.lzx" />
+    <include href="syncWin.lzx" />
+    <include href="meetingTimer.lzx" />
+    <include href="incomingScreenSharing.lzx" />
+    <include href="redirectBox.lzx" />
+    <include href="chooseNickName.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/popups/meetingTimer.lzx b/WebContent/src/modules/conference/popups/meetingTimer.lzx
new file mode 100644
index 0000000..7f8f8a1
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/meetingTimer.lzx
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="meetingTimer" extends="labelExplorerBox" labelid="638"
+        docking="true" resizeable="false" closable="false" width="260"
+        x="$once{ canvas.width - this.width - 10 }" y="10" height="160">
+    
+    <attribute name="roomobj" value="null" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="demoTime" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.dText = canvas.getLabelName(639);
+        this.demoTime = this.roomobj.demoTime;
+        this.fadeText(null);
+    </handler>
+    
+    <method name="fadeText" args="item">
+        <![CDATA[
+            if (this.demoTime > 0) {
+                var min = Math.floor(this.demoTime/60);
+                var restSeconds = this.demoTime - (min * 60);
+                if (restSeconds < 10) {
+                    restSeconds = "0"+restSeconds;
+                }
+                var tString = this.dText + min + "min " + restSeconds + "sec";
+                
+                this._text._text.setAttribute("text",tString);
+                this.demoTime--;
+                lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+            } else {
+                if ($debug) Debug.write("DEMO IS OVER ");
+                canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+            }
+        ]]>
+    </method>
+    
+    <!--
+    this.roomobj.demoTime
+     -->
+    
+    <view name="_text" x="2" width="$once{ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-25 }">
+        <labelText name="_text" text="" 
+            width="$once{ parent.width }" multiline="true" resize="false"/>
+    </view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/messageWin.lzx b/WebContent/src/modules/conference/popups/messageWin.lzx
new file mode 100644
index 0000000..3cedb37
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/messageWin.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="messageWin" extends="labelExplorerBox" labelid="18"
+    docking="true" resizeable="false" closable="true" 
+    width="400" x="100" height="240">
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="2" width="${ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-48 }">
+        <labelText labelid="$once{ parent.parent.labeliderror }" width="400"
+            y="22" multiline="true" resize="false"/>
+        <om_vscrollbar />
+    </view>
+	
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/redirectBox.lzx b/WebContent/src/modules/conference/popups/redirectBox.lzx
new file mode 100644
index 0000000..bb7eaf5
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/redirectBox.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="redirectBox" extends="labelExplorerBox" labelid="50"
+	   valign="middle" align="center"
+	   docking="true" resizeable="false" closable="false" width="260" height="140">
+    
+    <attribute name="timerDel" value="null" />
+    <attribute name="maxTime" value="5000" type="number" />
+    
+    <attribute name="redirectURL" value="" type="string" />
+    
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+		this.timerDel = new LzDelegate( this, "timeLineAction" );
+		this.timeLineAction();
+	</handler>
+
+	<handler name="onclose">
+		lz.ModeManager.release(this);
+	</handler>	
+		
+    <method name="timeLineAction">
+    	<![CDATA[
+    	
+    		var tString = canvas.getLabelName(1098);
+    		tString += " " + Math.round(this.maxTime/1000) + " sek";
+    		
+    	
+	    	this.messageText.setAttribute("text",tString);
+	    	
+	    	this.maxTime -= 1000;
+	    	
+	    	if (this.maxTime >= 0) {
+	    		
+	    		lz.Timer.addTimer( this.timerDel, 1000 );
+	    		
+	    	} else {
+	    		
+	            if ($debug) Debug.write("this.redirectURL ",this.redirectURL);
+	            redirectToUrl(this.redirectURL, null);
+	    	}
+    	]]>
+    </method>
+    
+    <attribute name="refObj" value="null" />
+    
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText name="messageText" text="" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/resources/error.png b/WebContent/src/modules/conference/popups/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/resources/error.png
Binary files differ
diff --git a/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx b/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx
new file mode 100644
index 0000000..ac6c304
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="baseErrorDialog" extends="labelExplorerBox" labelid="204"
+    docking="true" resizeable="false" closable="true" width="300" 
+	x="$once{ canvas.width/2-this.width/2 }" height="130">
+	
+	<handler name="oninit">
+        this.bringToFront();
+        lz.Focus.setFocus(this);
+        if (errorid != 0) {
+			this.getErrorByCode.doCall();
+		}
+    </handler>
+	
+    <attribute name="errortext" value="" type="string" />
+    <attribute name="addInfo" value="" type="string" />
+	<attribute name="errorid" value="0" type="number" />
+
+	<netRemoteCallHib name="getErrorByCode" funcname="errorservice.getErrorByCode" remotecontext="$once{ canvas.thishib }" >      
+		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.errorid; </method></netparam>
+        <netparam><method name="getValue"> return canvas.thishib.userlang; </method></netparam>
+		<handler name="ondata" args="value">
+			<![CDATA[
+    			if ($debug) Debug.write("getErrorByCode ",value);
+    			//this.parent.destroy();
+    			this.parent.setAttribute('errortext',value.errmessage+" <br/><br/>"+parent.addInfo);
+    			this.parent.setAttribute('title',value.errortype);
+			]]>
+		</handler>
+	</netRemoteCallHib>		
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">
+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.errortext }"
+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+	</view>
+	
+</class>
+	
+<class name="errorDialog" extends="baseErrorDialog">
+
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+	
+</class>
+	
+<class name="contentSaveWindow" extends="baseErrorDialog" labelid="936">
+	
+    <attribute name="saveObj" value="null" />
+    <attribute name="refObj" value="null" />
+    <attribute name="processNextIndex" value="0" type="number" />
+	<attribute name="errorid" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.setAttribute('errorid',1545);
+        this.setAttribute('errortext',canvas.getLabelName(1545));
+        lz.ModeManager.makeModal(this);
+        if ($debug) Debug.write("contentsavewindow_errorid: ",errorid);
+        if ($debug) Debug.write("contentsavewindow_errortext: ",errortext);
+        this.startSave();
+    </handler>
+    
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+    
+    <method name="startSave">
+    	<![CDATA[
+    	for (var i=0;i<this.saveObj.length;i++){
+    		this.saveObj[i].prepareCall();
+    	}
+    	this.processNext();
+    	]]>
+    </method>
+	
+	<method name="errorByCode" args="eCode">
+		this.errorid = eCode;
+		this.getErrorByCode.doCall();
+	</method>
+    
+    <method name="processNext">
+    	<![CDATA[
+    	//Debug.write("processNext: ",this.saveObj.length,this.processNextIndex);
+    	if (this.saveObj.length>this.processNextIndex){
+    		this.saveObj[this.processNextIndex].returnObj=this;
+    		this.saveObj[this.processNextIndex].doCall();
+    		this.processNextIndex++;
+    	} else {
+    		//Debug.write("update process complete");
+    		this.refObj.onsavecompleted.sendEvent();
+    		this.close();
+    	}
+    	]]>
+    </method>
+	
+	<method name="doCallBack">
+		this.close();
+	</method>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="100" x="$once{ parent.width-104 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+	
+<class name="rpcErrorDialog" extends="errorDialog" height="250">
+	
+	<method name="doCallBack">
+		this.close();
+	</method>
+	
+	<handler name="onclose">
+		if ( canvas.focusOnItem != null )
+		{
+			lz.Focus.setFocus( canvas.focusOnItem, true );
+		}
+	</handler>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="120" x="$once{ parent.width-124 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+	
+<class name="callbackRpcErrorDialog" extends="errorDialog"
+	closable="false"  height="250">
+	
+	<attribute name="callBackObject" value="null" />
+	
+	<method name="doCallBack">
+		this.callBackObject.sendCallBack.sendEvent();
+		this.close();
+	</method>
+	
+	<handler name="onclose">
+		if ( canvas.focusOnItem != null )
+		{
+			lz.Focus.setFocus( canvas.focusOnItem, true );
+		}
+	</handler>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="120" x="$once{ parent.width-124 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+   
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/syncWin.lzx b/WebContent/src/modules/conference/popups/syncWin.lzx
new file mode 100644
index 0000000..dd1b387
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/syncWin.lzx
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="syncWin" extends="labelText" multiline="true" resize="false" 
+       width="260" align="right" y="${ parent.height - this.height - 10 }" 
+       bgcolor="0xFFFFFF" fgcolor="0xFF3300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.setAttribute('text',canvas.getLabelName(this.labeliderror));
+    </handler>    
+    
+    <method name="close">
+    	this.destroy();
+    </method>
+    
+    <handler name="onclick">
+        this.destroy();
+    </handler>
+    
+    <method name="setMessage" args="mess">
+        this.setAttribute('text',mess);
+    </method>
+    
+</class>
+	
+<!--
+<class name="syncWin" extends="labelExplorerBox" labelid="558"
+        docking="true" resizeable="false" closable="true" width="250"
+        x="$once{ canvas.width/2 - this.width/2 }" height="140">
+    
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    	canvas.syncWindow = null;
+    </handler>
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="2" width="$once{ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-25 }">
+        <labelText labelid="$once{ parent.parent.labeliderror }" 
+            width="$once{ parent.width }" multiline="true" resize="false"/>
+    </view>
+
+</class>
+ -->
+
+</library>
diff --git a/WebContent/src/modules/conference/resources/arrow_refresh_small.png b/WebContent/src/modules/conference/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base0.png b/WebContent/src/modules/conference/resources/base0.png
new file mode 100644
index 0000000..d93774d
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base0.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base1.png b/WebContent/src/modules/conference/resources/base1.png
new file mode 100644
index 0000000..730666b
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base1.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base2.png b/WebContent/src/modules/conference/resources/base2.png
new file mode 100644
index 0000000..b4f3733
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base2.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base3.png b/WebContent/src/modules/conference/resources/base3.png
new file mode 100644
index 0000000..00ed840
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base3.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/speaking.png b/WebContent/src/modules/conference/resources/speaking.png
new file mode 100644
index 0000000..2ca21a7
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/speaking.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/webstart_play.png b/WebContent/src/modules/conference/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/src/modules/conference/restricted/library.lzx b/WebContent/src/modules/conference/restricted/library.lzx
new file mode 100644
index 0000000..598e945
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="restrictedUserList.lzx" />
+    <include href="restrictedUserListItem.lzx" />
+    <include href="restrictedUserListInner.lzx" />
+    <include href="moderationMiniIconRestricted.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx b/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx
new file mode 100644
index 0000000..2fd42f4
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconRestricted" extends="view" y="20" x="2" height="18">
+	
+	<attribute name="isMod" value="false" type="boolean"/>
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+	<![CDATA[
+		this.isMod = parent.parent.isMod;
+		this.isSuperModerator = parent.parent.isSuperModerator;
+		
+		if ($debug) Debug.write(" :: moderationMiniIconRestricted :. ",this.isMod);
+		var refObj = parent.parent.refObj;
+		
+		if (this.isMod) {
+			this._isMod.setAttribute("visibility","visible");
+			this._isModAddbutton.setAttribute("visibility","hidden");
+		} else {
+			this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+		}
+		
+		if (this.isMod) {
+			this._canDraw.setAttribute("visibility","visible");
+            this._canDraw.isActive = false;
+            this._canDraw.setAttribute("showhandcursor",false);
+            this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._canDrawModerator.setAttribute("visibility","hidden");
+		} else {
+			if (refObj != null && refObj.canDraw) {
+                this._canDraw.setAttribute("visibility","visible");
+                this._canDraw.isActive = true;
+                this._canDraw.setAttribute("showhandcursor",true);
+                this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._canDrawModerator.setAttribute("visibility","hidden");
+            } else {
+                this._canDraw.setAttribute("visibility","hidden");
+                this._canDrawModerator.setAttribute("visibility","visible");
+            }
+		}
+		
+		if (this.isMod) {
+			this._allowScreen.setAttribute("visibility","visible");
+            this._allowScreen.isActive = false;
+            this._allowScreen.setAttribute("showhandcursor",false);
+            this._allowScreen._text.setAttribute("text",canvas.getLabelName(1069));
+            
+            this._allowRemote.setAttribute("visibility","visible");
+            this._allowRemote.isActive = false;
+            this._allowRemote.setAttribute("showhandcursor",false);
+            this._allowRemote._text.setAttribute("text",canvas.getLabelName(1083));
+
+            this._allowExclusiveAudio.setAttribute("visibility","visible");
+            this._allowExclusiveAudio.isActive = false;
+            this._allowExclusiveAudio.setAttribute("showhandcursor",false);
+            this._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1083));
+            
+            this._denyScreen.setAttribute("visibility","hidden");
+            this._denyRemote.setAttribute("visibility","hidden");
+            this._denyExclusiveAudio.setAttribute("visibility","hidden");
+		} else {
+			
+			if ($debug) Debug.write("refObj.canShare :: ", (refObj != null && refObj.canShare));
+		
+			if (refObj != null && refObj.canShare) {
+    			this._allowScreen.setAttribute("visibility","visible");
+                this._allowScreen.isActive = true;
+                this._allowScreen.setAttribute("showhandcursor",true);
+                this._allowScreen._text.setAttribute("text",canvas.getLabelName(1068));
+                this._denyScreen.setAttribute("visibility","hidden");
+			} else {
+				this._allowScreen.setAttribute("visibility","hidden");
+				this._denyScreen.setAttribute("visibility","visible");
+			}
+			
+			if (refObj != null && refObj.canRemote) {
+    			this._allowRemote.setAttribute("visibility","visible");
+                this._allowRemote.isActive = true;
+                this._allowRemote.setAttribute("showhandcursor",true);
+                this._allowRemote._text.setAttribute("text",canvas.getLabelName(1079));
+                this._denyRemote.setAttribute("visibility","hidden");
+			} else {
+				this._allowRemote.setAttribute("visibility","hidden");
+				this._denyRemote.setAttribute("visibility","visible");
+			}
+
+            if (refObj != null && refObj.canGiveAudio) {
+    			this._allowExclusiveAudio.setAttribute("visibility","visible");
+                this._allowExclusiveAudio.isActive = true;
+                this._allowExclusiveAudio.setAttribute("showhandcursor",true);
+                this._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1425));
+                this._denyExclusiveAudio.setAttribute("visibility","hidden");
+            } else {
+				this._allowExclusiveAudio.setAttribute("visibility","hidden");
+				this._denyExclusiveAudio.setAttribute("visibility","visible");
+            }
+		}
+		
+		if (refObj != null) {
+			this._allowDevice.setAttribute("visible", !refObj.isBroadcasting || !refObj.canVideo);
+			this._denyDevice.setAttribute("visible", refObj.isBroadcasting && refObj.canVideo);
+
+			this._allowAudio.setAttribute("visible", !refObj.isBroadcasting);
+			this._denyAudio.setAttribute("visible", refObj.isBroadcasting);
+		}
+		
+		if ($debug) Debug.write("Set micMuted ", (refObj != null && refObj.micMuted));
+		
+		if (refObj != null && refObj.micMuted) {
+			this._muteDevice.setAttribute("visibility","hidden");
+            this._unMuteDevice.setAttribute("visibility","visible");
+		} else {
+			this._muteDevice.setAttribute("visibility","visible");
+            this._unMuteDevice.setAttribute("visibility","hidden");
+		}
+		
+		this._start_private_chat_rsc.setAttribute('visible'
+			, (canvas.currentRoomObj.hideChat == null || !canvas.currentRoomObj.hideChat)
+				&& (refObj != null && refObj.publicSID != canvas.publicSID));
+	]]>
+	</handler>
+        
+    <miniIcons name="_isMod" x="0" width="16" showhandcursor="true"
+    		   resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+            
+                if (parent.isSuperModerator) {
+                    new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                    return;
+                }
+            
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Remove It");
+                    if (parent.parent.parent.refObj.publicSID != canvas.publicSID) {
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                    } else {
+                    	new lz.labelerrorPopup(canvas,{errorlabelid:682});
+                    }
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="675" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" showhandcursor="true"
+    		   width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Add It");
+                    hib.addModerator.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+                    hib.addModerator.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="676" />
+    </miniIcons>
+        
+    <miniIcons name="_canDraw" x="20" width="16" resource="participants_allow_drawing_rsc"
+               height="16" showhandcursor="false" >
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator && this.isActive) {
+                    //Do it 
+                    if ($debug) Debug.write("Do add draw to it");
+                    canvas.thishib.setCanDraw.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanDraw.canDraw = false;
+                    canvas.thishib.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="612" />
+    </miniIcons>
+    
+    <miniIcons name="_canDrawModerator" x="20" width="16" opacity="0.5"
+               resource="participants_allow_drawing_rsc" height="16" showhandcursor="true">
+        <handler name="onclick">
+            //Do it 
+            if (canvas.ismoderator) {
+                if ($debug) Debug.write("Do it");
+                canvas.thishib.setCanDraw.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanDraw.canDraw = true;
+                canvas.thishib.setCanDraw.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="611" />
+    </miniIcons>
+    
+    <miniIcons name="_allowScreen" x="40" width="16" height="16" 
+               resource="screen_allow_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Screen: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                	canvas.thishib.setCanShare.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanShare.canShare = false;
+                    canvas.thishib.setCanShare.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1068" />
+    </miniIcons>
+    
+    <miniIcons name="_denyScreen" x="40" width="16" height="16"  opacity="0.5"
+               resource="screen_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Screen: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanShare.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanShare.canShare = true;
+                canvas.thishib.setCanShare.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="1067" />
+    </miniIcons>  
+    
+     <miniIcons name="_allowRemote" x="60" width="16" height="16" 
+               resource="remote_allow_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Screen: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                	canvas.thishib.setCanRemote.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanRemote.canRemote = false;
+                    canvas.thishib.setCanRemote.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1079" />
+    </miniIcons>
+    
+    <miniIcons name="_denyRemote" x="60" width="16" height="16"  opacity="0.5"
+               resource="remote_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Screen: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanRemote.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanRemote.canRemote = true;
+                canvas.thishib.setCanRemote.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="1078" />
+    </miniIcons>        
+    
+    <miniIcons name="_allowAudio" x="80" width="16" height="16" resource="a_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = false;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="1604" />
+    </miniIcons>
+    <miniIcons name="_denyAudio" x="80" width="16" height="16" resource="a_deny_rsc" opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = false;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="1605" />
+    </miniIcons>
+    <miniIcons name="_allowDevice" x="100" width="16" height="16" resource="av_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = true;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="683" />
+    </miniIcons>
+    
+    <miniIcons name="_denyDevice" x="100" width="16" height="16" resource="av_deny_rsc" opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = false;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="684" />
+    </miniIcons>
+    
+    <miniIcons name="_muteDevice" x="120" width="16" height="16" resource="mute_btn_rsc" 
+    				opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("mute: ",parent.parent.parent.refObj.publicSID);
+            canvas._videocontainer._videoviewcontent.muteSound(parent.parent.parent.refObj.publicSID, true);
+        </handler>
+        <labelTooltip labelid="1384" />
+    </miniIcons>
+    
+    <miniIcons name="_unMuteDevice" x="120" width="16" height="16" resource="unmute_btn_rsc" 
+    		   showhandcursor="true" visibility="hidden">
+        <handler name="onclick">
+            if ($debug) Debug.write("unmute: ",parent.parent.parent.refObj.publicSID);
+            canvas._videocontainer._videoviewcontent.muteSound(parent.parent.parent.refObj.publicSID, false);
+        </handler>
+        <labelTooltip labelid="1385" />
+    </miniIcons>
+
+    <miniIcons name="_allowExclusiveAudio" x="136" width="16" height="16"
+               resource="participants_exclusive_audio_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Give Exclusive Audio: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                    canvas.thishib.setCanGiveAudio.sendValue(parent.parent.parent.refObj.publicSID,false);
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1425" />
+    </miniIcons>
+
+    <miniIcons name="_denyExclusiveAudio" x="136" width="16" height="16" opacity="0.5"
+               resource="participants_exclusive_audio_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Give Exclusive Audio: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanGiveAudio.sendValue(parent.parent.parent.refObj.publicSID,true);
+            }
+        </handler>
+        <labelTooltip labelid="1424" />
+    </miniIcons>
+    
+	<miniIcons name="_kickUser" x="154" width="16" height="16"
+               resource="kick_user_rsc" showhandcursor="true">
+        <handler name="onclick">
+        	
+        	if (parent.parent.parent.refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner,{
+             				errorlabelid:1214
+        				});
+				return;
+			}
+        	
+        	if (parent.isSuperModerator) {
+                new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1217});
+                return;
+            }
+        	
+            if ($debug) Debug.write("USER Kick: ",parent.parent.parent.refObj.publicSID);
+            new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1216,labeliderror:1215,
+                                           refObj:this,showCheckBox:false});
+            
+        </handler>
+        
+        <method name="sendConfirmation" args="yesno" >
+            this.kickUserByPublicSID.publicSID = parent.parent.parent.refObj.publicSID;
+            this.kickUserByPublicSID.doCall();
+        </method>
+        
+        <netRemoteCallHib name="kickUserByPublicSID" funcname="userservice.kickUserByPublicSID" 
+                          remotecontext="$once{ canvas.thishib }" >    
+            <attribute name="publicSID" value="" type="string" />  
+            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+            <netparam><method name="getValue"> return parent.publicSID; </method></netparam>
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("kickUserByPublicSID: ",value);
+            </handler>
+        </netRemoteCallHib> 
+        
+        <labelTooltip labelid="1213" />
+    </miniIcons>              
+    
+	<miniIcons name="_start_private_chat_rsc" x="172" y="2" width="16" height="16" resource="start_private_chat_rsc" showhandcursor="true">
+		
+		<handler name="onclick">
+			var refObj = parent.parent.parent.refObj;
+			if ($debug) Debug.write("Start Private Chat: ", refObj);
+			if (refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner
+					,{errorlabelid:1495});
+				return;
+			}
+			canvas._currentChatPanel.addChat(refObj);
+		</handler>
+		<labelTooltip labelid="1493" />
+	</miniIcons>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserList.lzx b/WebContent/src/modules/conference/restricted/restrictedUserList.lzx
new file mode 100644
index 0000000..876e124
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserList.lzx
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="restrictedUserList" extends="view" width="$once{ parent.width }" 
+       height="${ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <!--- colors for each user -->
+    <attribute name="colorArray" value="null" />
+    
+    <attribute name="allowUserQuestions" value="true" type="boolean" />
+
+    <attribute name="showsVideoInSeparateComponent" value="true" type="boolean" />
+    
+    <handler name="onallowUserQuestions" args="bool">
+        if (bool != null) {
+            if (!bool) {
+                this._participants._applyAndStatusIcons.destroy();
+            }
+        }
+    </handler>
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "audience";
+        
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+            canvas.thishib.setAttribute('src',src);
+            
+			if (canvas.wicketsid == null){            
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+
+    <commonVideoComponentAdapter name="_videoviewcontent"/>
+
+    <method name="reconnectSuccess">
+        if ($debug) Debug.write("User Reloged In");
+        //Send to SWF10 video-container to connect on the conference room url
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(false);
+    </method>
+
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+    	if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+    	//set default values and get already availible streams
+    	//it can happen that if you click to exit the room the views are not
+    	//not cleaned up yet and you receive this event from the LocalConnection
+    	if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+    	}
+    </method>
+
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId"
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                canvas.becomeSuperModerator = canvas.becomemoderator;
+                
+                if (!canvas.becomeSuperModerator) {
+                    for (var i=0;i<value.length;i++) {
+                        
+                        if (value[i].user.user_id == canvas.user_id) {
+                            parent.setRoomValues.applyDefaultModeration = true;
+                            canvas.becomeSuperModerator = value[i].isSuperModerator;
+                            if ($debug) Debug.info("Make this User to an Moderator");
+                            break;
+                        }
+                        
+                    }
+                }
+                
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //if ($debug) Debug.write("setRoomValues1: ",value);
+            //if ($debug) Debug.write("setRoomValues2: ",hib.currentroomid);
+            
+            //if ($debug) Debug.write("+++++++++++++++++ getClientListScope : ",value);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    value[i].selfItem = true;
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                } else {
+                    value[i].selfItem = false;
+                }
+
+                //value[i].lastname = value[i].lastname + "T: " + t;
+                
+                //if ($debug) Debug.write("getClientListScope value: ",value[i]);
+                this.parent.addItemInitial(value[i].connectedSince,value[i].isMod,value[i].streamid,value[i].username,
+                              '',value[i].formatedDate,value[i].userpos,value[i].usercolor,value[i]);
+            }
+            
+            //this content must be inited _after_ setting the default values
+            canvas.thishib.getCurrentModeratorList.doCall(); 
+            //FIXME Issue-1076
+            canvas.thishib.checkLzRecording.doCall();
+            
+            //Render and Show User-List
+            parent._participants.sortAndRenderList();
+            
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+		]]>
+        </handler>  
+    </netRemoteCallHib>
+
+    <!-- invoked if another client logs into the room 
+    after choosing devices -->     
+    <method name="setAVSettingsToClient" args="rcl">
+        this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method> 
+
+    <method name="addItemInitial" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            //if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,isMod,streamid,username,formatedDate);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+                
+                //do add others
+                this._participants.initialAddItem(object);
+                
+                //if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+                
+                if (object.isBroadcasting) {
+                    this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+                } else {
+                    this._videoviewcontent.createVideoObject(object.publicSID, false, -1, object);
+                }
+                
+            } else {
+                //do add self too
+                this._participants.initialAddItem(object);
+            }
+           
+        ]]>
+    </method>
+
+    <method name="receiveExclusiveAudioFlag" args="publicSID">
+    <![CDATA[
+        var vList = this._participants._table.renderList;
+        for (var i=0;i<vList.length;i++) {
+            var item = vList[i];
+            var rcl = new Object();
+
+            rcl.publicSID = item.publicSID;
+            rcl.micMuted = !(publicSID == item.publicSID);
+            canvas.setMuteStatus(rcl);
+        }
+    ]]>
+    </method>
+
+
+    <method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,isMod,streamid,username,formatedDate);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+                //if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+
+                this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+
+                //do add others
+                this._participants.addItem(object);
+
+                //return myvideocontainer;
+            } else {
+                //do add self too
+                this._participants.addItem(object);
+            }
+           
+        ]]>
+    </method>
+    
+    <method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+        <![CDATA[
+        if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+
+        if (canvas.publicSID != object.publicSID){
+            this._videoviewcontent.createVideoObject(object.publicSID, false, -1, object);
+        }
+
+        //Do Add it anyway
+        this._participants.addItem(object);
+        ]]>
+    </method>
+        
+    <!--
+        invoked whenever a User starts to Stream Video in this Room, 
+        interviewPodId has only a meaning in the Room Type Interview
+     -->        
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+
+    <method name="setSpeakingByPos" args="publicSID,bool">
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>
+
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <method name="removeVideoByUser" args="userObject">
+        this._videoviewcontent.removeVideoByUser(userObject.publicSID);
+    </method>
+    
+    <!--- 
+        stops the streaming but and destroys the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <restrictedUserListInner name="_participants" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx b/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx
new file mode 100644
index 0000000..12f8fe9
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx
@@ -0,0 +1,640 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedUserListInner" extends="baseRoomInnerList"  
+       width="$once{ parent.width }" height="${ parent.height }" >
+    
+    <attribute name="selectedItem" value="null" />
+    
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <attribute name="sortType" value="alphabetical" type="string" />
+    
+	<handler name="oninit">
+		this.initList();
+	</handler>
+    
+	<method name="initialAddItem" args="object">
+	<![CDATA[
+		if ($debug) Debug.write("restrictedUserListInner::initialAddItem : ",object.publicSID);
+		
+		object.firstname = object.firstname == null ? "" : object.firstname;
+		object.lastname = object.lastname == null ? "" : object.lastname;
+		if (object.isSuperModerator) {
+			object.lastname += " *";
+		}
+		
+		//Add item to list
+		if (this._table.renderList == null) {
+			this._table.renderList = new Array();
+		}
+		//Check for duplicates
+        var list = this._table.renderList;
+        for (var i = 0; i < list.length; ++i) {
+            if (list[i].publicSID == object.publicSID) {
+                //if ($debug) Debug.warn("Already on List, do not add twice");
+                return;
+            }
+        }
+		
+		object.isSelected = false;
+		this._table.renderList.push(object);
+	]]>
+	</method>
+    
+	<method name="addItem" args="object">
+	<![CDATA[
+		initialAddItem(object);
+		if ($debug) Debug.write("restrictedUserListInner::addItem: ", object.publicSID);
+		
+		object.selfItem = canvas.publicSID == object.publicSID;
+		this.sortUserList();
+		
+		this._table.scheduleRenderContent();
+		this.moderationPanel.updateIcons();
+	]]>
+	</method>
+    
+    <method name="sortAndRenderList">
+        this.sortUserList();
+        this._table.renderContent();
+    </method>
+    
+    <method name="sortUserList">
+    <![CDATA[
+    	if (!this._table.renderList) {
+    		return;
+    	}
+    	if (this.sortType == "alphabetical") {
+    		function sortByName(a,b) {
+    			if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+    			else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+    			else return 0;
+    		}
+    		this._table.renderList.sort(sortByName);
+    	} else {
+    		function sortByStreamId(a,b) {
+    			if(Number(a.streamid) == Number(b.streamid)) return 0;
+    			else if(Number(a.streamid) > Number(b.streamid)) return 1;
+    			else return -1;
+    		}
+    		this._table.renderList.sort(sortByStreamId);
+    	}
+    ]]>
+    </method>
+    
+    <method name="initList">
+        if ($debug) Debug.write("initList :: restrictedUserListInner");
+    </method>
+    
+    <method name="clearList">
+        if ($debug) Debug.write("clearList :: restrictedUserListInner");
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        <![CDATA[
+           for (var i=0;i<this._table.renderList.length;i++) {
+               if (this._table.renderList[i].publicSID == publicSID) {
+                   this._table.renderList.splice(i,1);
+                   break;
+               }
+           }
+           this._table.renderContent();
+           this.moderationPanel.updateIcons();
+        ]]>
+    </method>
+    
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		var v = null;
+		var vList = this._table._innerlist._inn._inn.subviews;
+		for (var i = 0; i < vList.length; ++i) {
+			if (vList[i].refObj.publicSID == publicSID) {
+				v = vList[i];
+				break;
+			}
+		}
+		return v;
+	]]>
+    </method>
+    
+    <view name="userStatus" layout="axis:y">
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="1" />
+             <labelText x="16" labelid="677" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="2" />
+             <labelText x="16" labelid="678" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="3" />
+             <labelText x="16" labelid="679" />
+        </view>
+    </view>
+    
+    <moderationMiniIconsEventUserList name="_applyAndStatusIcons" x="$once{ parent.width-this.width-20 }" y="2" >
+        <handler name="onismoderator" reference="canvas" args="m">
+            this.updateIcons();
+        </handler>
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onmicMutedStatusChangedItem" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+    </moderationMiniIconsEventUserList>
+    
+    
+    <turnOverListOrderedPaged name="_table" showTopBar="false" x="1"
+             height="${ parent.height-30-parent.moderationPanel.height }" 
+             y="30" itemHeight="40" listLabelId="1001" headerHeight="0"
+             listItemName="restrictedUserListItem" showHScrollbar="hidden"
+             multiselect="false" width="268">
+        
+        <attribute name="currentSelectedIndex" value="null" />
+        
+        <attribute name="resizeDelegate" value="null"/>
+        <attribute name="resizeDelegateStarted" value="false" type="boolean"/>
+        
+        <attribute name="isLoaded" value="false" type="boolean"/>
+        
+        <attribute name="renderDelegate" value="null"/>
+        <attribute name="renderDelegateStarted" value="false" type="boolean"/>
+        
+        <handler name="onheight" args="h">
+        	if (this.isLoaded) {
+        		if ($debug) Debug.write("isLoaded True onheight ",h);
+            	if (!this.resizeDelegateStarted) {
+            		this.resizeDelegateStarted = true;
+            		lz.Timer.addTimer( this.resizeDelegate, 1000 );
+            	} else {
+            		lz.Timer.resetTimer( this.resizeDelegate, 1000 );
+            	}
+        	}
+        </handler>
+        
+        <handler name="oninit">
+        	this.resizeDelegate = new LzDelegate( this, "renderByHeightChange" );
+        	this.renderDelegate = new LzDelegate( this, "renderByNewUser" );
+            this.addHeaderItem(1001,260);
+        </handler>
+        
+        <method name="scheduleRenderContent">
+        	if ($debug) Debug.warn("scheduleRenderContent ");
+        	if (!this.renderDelegateStarted) {
+                this.renderDelegateStarted = true;
+                lz.Timer.addTimer( this.renderDelegate, 1000 );
+            } else {
+            	if ($debug) Debug.warn("More then one user was arriving within 1 Second - Postpone the Rendering to prevent too much reloading");
+                lz.Timer.resetTimer( this.renderDelegate, 1000 );
+            }
+        </method>
+        
+        <method name="renderByNewUser" args="refObj">
+        	this.renderDelegateStarted = false;
+        	this.renderContent();
+        </method>
+        
+        <method name="renderByHeightChange" args="refObj">
+        	
+        	if ($debug) Debug.write("..:: renderByHeightChange ::..",refObj);
+        	
+        	lz.Timer.removeTimer( this.resizeDelegate );
+        	this.resizeDelegateStarted = false;
+        	
+        	this.clearList();
+        	this._innerlist._inn.initItems(this.listItemName);
+        	
+        	this.renderContent();
+        </method>
+        
+        <handler name="onclickedItem" args="refObj">
+            <![CDATA[
+                if ($debug) Debug.write("onclickedItem ",refObj);
+                
+                if (this.currentSelectedIndex != null) {
+                    this.renderList[this.currentSelectedIndex]["isselected"] = false;
+                }
+                
+                this.currentSelectedIndex = refObj.itemId;
+                this.renderList[refObj.itemId]["isselected"] = true;
+                
+                var list = this._innerlist._inn._inn;
+                for (var i=0;i<list.subviews.length;i++){
+                    list.subviews[i].deselect();
+                    list.subviews[i].hideModeratorIcons();
+                }
+                
+                refObj.select();
+                refObj.initModeratorIcons();
+            ]]>
+        </handler>
+        
+        <method name="renderContent">
+            <![CDATA[
+                this.isLoaded = true;
+                var list = this._innerlist._inn._inn;
+                
+                if (this.renderList == null) {
+                	this.renderList = new Array();
+                }
+                //this.renderList = records;
+                var records = this.renderList;
+                this._innerlist._inn.setAttribute("y",0);
+                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+                this._innerlist._inn.resetItems();
+                
+                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+                
+                this._records.setAttribute("text",records.length);
+                
+                for (var i=0;i<list.subviews.length;i++){
+                    if (records.length > i) {
+                        
+                        list.subviews[i].setAttribute("clickable",true);
+                        list.subviews[i].refObj = records[i];
+                        
+                        if (records[i]["isselected"] && records[i].isselected) {
+                            list.subviews[i].isselected = true;
+                            list.subviews[i].onmouseout.sendEvent();
+                            list.subviews[i].initModeratorIcons();
+                        } else {
+                            list.subviews[i].isselected = false;
+                            list.subviews[i].onmouseout.sendEvent();
+                            list.subviews[i].hideModeratorIcons();
+                        }
+                        
+                        list.subviews[i].setAttribute("user_id",records[i].user_id);
+                        list.subviews[i].setAttribute("firstname",records[i].firstname);
+                        list.subviews[i].setAttribute("isSuperModerator",records[i].isSuperModerator);
+                        list.subviews[i].setAttribute("lastname",records[i].lastname);
+                        list.subviews[i].setAttribute("connectedSince",records[i].connectedSince);
+                        list.subviews[i].setAttribute("canDraw",records[i].canDraw);
+                        list.subviews[i].setAttribute("canShare",records[i].canShare);
+                        list.subviews[i].setAttribute("canRemote",records[i].canRemote);
+                        list.subviews[i].setAttribute("canGiveAudio",records[i].canGiveAudio);
+                        list.subviews[i].setAttribute("micMuted",records[i].micMuted);
+                        list.subviews[i].setAttribute("isMod",records[i].isMod);
+                        list.subviews[i].isBroadcasting = records[i].isBroadcasting;
+                        list.subviews[i].setAttribute("selfItem",records[i].selfItem);
+                        list.subviews[i].streamid = records[i].streamid;
+                        list.subviews[i].setAttribute("username",records[i].username);
+                        list.subviews[i].setAttribute("formatedDate",records[i].formatedDate);
+                        
+                        list.subviews[i].setAttribute("itemId",i);
+                        
+                    } else {
+                        
+                        list.subviews[i].refObj = null;
+                        
+                        list.subviews[i].isselected = false;
+                        list.subviews[i].onmouseout.sendEvent();
+                        list.subviews[i].hideModeratorIcons();
+                        
+                        list.subviews[i].setAttribute("user_id","");
+                        list.subviews[i].setAttribute("firstname","");
+                        list.subviews[i].setAttribute("isSuperModerator","");
+                        list.subviews[i].setAttribute("lastname","");
+                        list.subviews[i].setAttribute("connectedSince","");
+                        list.subviews[i].setAttribute("canDraw",false);
+                        list.subviews[i].setAttribute("canShare",false);
+                        list.subviews[i].setAttribute("canRemote",false);
+                        list.subviews[i].setAttribute("canGiveAudio",false);
+                        list.subviews[i].setAttribute("micMuted",false);
+                        list.subviews[i].setAttribute("isMod",false);
+                        list.subviews[i].isBroadcasting = false;
+                        list.subviews[i].setAttribute("selfItem",false);
+                        list.subviews[i].streamid = "";
+                        list.subviews[i].setAttribute("username","");
+                        list.subviews[i].setAttribute("formatedDate","");
+                        list.subviews[i].setAttribute("itemId","");
+                        
+                        list.subviews[i].setAttribute("clickable",false);
+                    }
+                }
+            ]]>
+        </method>   
+        
+        <handler name="onScrollItem" args="item">
+            <![CDATA[
+                if (this.renderList.length > item.itemId) {
+                    item.setAttribute("clickable",true);
+                    item.refObj = this.renderList[item.itemId];
+                    
+                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+                        item.isselected = true;
+                        item.onmouseout.sendEvent();
+                        item.initModeratorIcons();
+                    } else {
+                        item.isselected = false;
+                        item.onmouseout.sendEvent();
+                        item.hideModeratorIcons();
+                    }
+                    
+                    if ($debug) Debug.write(item.itemId,this.renderList[item.itemId].isMod,this.renderList[item.itemId].publicSID);
+                    
+                    item.setAttribute("user_id",this.renderList[item.itemId].user_id);
+                    item.setAttribute("firstname",this.renderList[item.itemId].firstname);
+                    item.setAttribute("isSuperModerator",this.renderList[item.itemId].isSuperModerator);
+                    item.setAttribute("lastname",this.renderList[item.itemId].lastname);
+                    item.setAttribute("connectedSince",this.renderList[item.itemId].connectedSince);
+                    item.setAttribute("canDraw",this.renderList[item.itemId].canDraw);
+                    item.setAttribute("canShare",this.renderList[item.itemId].canShare);
+                    item.setAttribute("canRemote",this.renderList[item.itemId].canRemote);
+                    item.setAttribute("canGiveAudio",this.renderList[item.itemId].canGiveAudio);
+                    item.setAttribute("micMuted",this.renderList[item.itemId].micMuted);
+                    item.isBroadcasting = this.renderList[item.itemId].isBroadcasting;
+                    item.setAttribute("isMod",this.renderList[item.itemId].isMod);
+                    item.setAttribute("selfItem",this.renderList[item.itemId].selfItem);
+                    item.streamid = this.renderList[item.itemId].streamid;
+                    item.setAttribute("username",this.renderList[item.itemId].username);
+                    item.setAttribute("formatedDate",this.renderList[item.itemId].formatedDate);
+                    
+                    item.setAttribute("itemId",item.itemId);
+                    
+                    item.updateIconByModScroll();
+                        
+                } else {
+                    item.isselected = false;
+                    item.onmouseout.sendEvent();
+                    item.hideModeratorIcons();
+                    
+                    item.refObj = null;
+                    
+                    item.setAttribute("user_id","");
+                    item.setAttribute("firstname","");
+                    item.setAttribute("isSuperModerator","");
+                    item.setAttribute("lastname","");
+                    item.setAttribute("connectedSince","");
+                    item.setAttribute("canDraw",false);
+                    item.setAttribute("canShare",false);
+                    item.setAttribute("canRemote",false);
+                    item.setAttribute("canGiveAudio",false);
+                    item.setAttribute("micMuted",false);
+                    item.setAttribute("isMod",false);
+                    item.isBroadcasting = false;
+                    item.setAttribute("selfItem",false);
+                    item.streamid = ""
+                    item.setAttribute("username","");
+                    item.setAttribute("formatedDate","");
+                    
+                    item.setAttribute("itemId","");
+                    
+                    item.setAttribute("clickable",false);
+                }
+                
+            ]]>
+        </handler>
+        
+    </turnOverListOrderedPaged> 
+       
+    <view name="moderationPanel" clip="true" 
+          height="${ (canvas.ismoderator) ? 40 : 0 }"
+          y="${ parent.height - this.height - 2 }">
+        
+        <handler name="onismoderator" reference="canvas" args="m">
+            if ($debug) Debug.write("###### ismoderator ",m);
+            <![CDATA[
+                this.updateIcons();
+            ]]>
+        </handler>
+        
+        <handler name="onmicMutedStatusChangedItem" reference="canvas" args="roomClientObj">
+        	<![CDATA[
+        	
+        	   if ($debug) Debug.write(" :: onmicMutedStatusChangedItem :: ",roomClientObj.micMuted);
+        	   
+                var vList = parent._table.renderList;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].publicSID == roomClientObj.publicSID) {
+                        parent._table.renderList[i].micMuted = roomClientObj.micMuted;
+                        break;
+                    }
+                }
+        	   
+        	   //search for the user and update its drawStatusIcon
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == roomClientObj.publicSID) {
+                        vList[i].refObj.micMuted = roomClientObj.micMuted;
+                        vList[i].micMuted = roomClientObj.micMuted;
+                        vList[i].updateModeratorIcons();
+                        break;
+                    }
+                }
+        	   
+                if (parent._applyAndStatusIcons != null) {
+                	parent._applyAndStatusIcons.updateIcons();
+                }
+        	]]>
+        </handler>
+        
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            <![CDATA[
+            
+                if ($debug) Debug.write(" :: ondrawAllowStatus :: ",drawObject.canDraw);
+            
+            	var vList = parent._table.renderList;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].publicSID == drawObject.publicSID) {
+                        parent._table.renderList[i].canDraw = drawObject.canDraw;
+                        parent._table.renderList[i].canShare = drawObject.canShare;
+                        parent._table.renderList[i].canRemote = drawObject.canRemote;
+                        break;
+                    }
+                }
+            
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == drawObject.publicSID) {
+                        vList[i].refObj.canDraw = drawObject.canDraw;
+                        vList[i].canDraw = drawObject.canDraw;
+                        vList[i].canShare = drawObject.canShare;
+                        vList[i].canRemote = drawObject.canRemote;
+                        vList[i].updateIconByModScroll();
+                        vList[i].updateModeratorIcons();
+                        break;
+                    }
+                }
+
+                if (parent._applyAndStatusIcons != null) {
+                	parent._applyAndStatusIcons.updateIcons();
+                }
+            ]]>
+        </handler>
+
+        <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+            <![CDATA[
+
+                if ($debug) Debug.write(" :: exclusiveAudioAllowStatus :: ",rclObject.canGiveAudio);
+				
+                var vList = parent._table.renderList;
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].publicSID == rclObject.publicSID) {
+                        parent._table.renderList[i].canGiveAudio = rclObject.canGiveAudio;
+                        break;
+                    }
+                }
+				
+                //search for the user and update its exclusiveAudioStatusIcon
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].refObj.publicSID == rclObject.publicSID) {
+                        vList[i].refObj.canGiveAudio = rclObject.canGiveAudio;
+                        vList[i].canGiveAudio = rclObject.canGiveAudio;
+                        vList[i].updateIconByModScroll();
+                        vList[i].updateModeratorIcons();
+                        break;
+                    }
+                }
+
+                if (parent._applyAndStatusIcons != null) {
+                	parent._applyAndStatusIcons.updateIcons();
+                }
+            ]]>
+        </handler>
+        
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            <![CDATA[
+            
+               if ($debug) Debug.write(" :: onlastBroadCastingUser :: ");
+                
+                if (!userObject.isBroadcasting) {
+                    //Stop Broadcasting and close Dialog
+                    //Search, stop and remove video
+                    parent.parent.removeVideoByUser(userObject);
+                }
+                
+                var vList = parent._table.renderList;
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].publicSID == userObject.publicSID) {
+                        parent._table.renderList[i].isBroadcasting = userObject.isBroadcasting;
+                        break;
+                    }
+                }
+                
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].refObj.publicSID == userObject.publicSID) {
+                        vList[i].isBroadcasting = userObject.isBroadcasting;
+                        vList[i].updateModeratorIcons();
+                        break;
+                    }
+                }
+                
+                if (parent._applyAndStatusIcons != null) {
+                	parent._applyAndStatusIcons.updateIcons();
+                }
+            ]]>
+        </handler>
+        
+        <method name="updateIcons">
+            <![CDATA[
+            
+                if ($debug) Debug.write(" :: updateIcons :: ");
+                
+                for (var i=0;i<parent._table.renderList.length;i++) {
+                
+                    for (var k=0;k<canvas.newModeratorList.length;k++) {
+                        
+                        var item = canvas.newModeratorList[k];
+                        
+                        if (parent._table.renderList[i].publicSID == item.publicSID) {
+                            
+                            if (parent._table.renderList[i].isMod == false) {
+                                if ($debug) Debug.info("updateIcons Found RR ",i,item.publicSID);
+                                parent._table.renderList[i].isMod = true;
+                                
+                                var itemView = this.getItemByPublicSID(item.publicSID);
+                                if (itemView != null) {
+                                    itemView.setAttribute("isMod",true);
+                                    itemView.updateModeratorIcons();
+                                }
+                            }
+                            
+                        }
+                        
+                    }
+                    
+                    for (var k=0;k<canvas.removeModeratorList.length;k++) {
+                        
+                        var item = canvas.removeModeratorList[k];
+                        
+                        if (parent._table.renderList[i].publicSID == item.publicSID) {
+                            
+                            if (parent._table.renderList[i].isMod == true) {
+                               if ($debug) Debug.info("RE updateIcons Found RR ",i,item.publicSID);
+                               parent._table.renderList[i].isMod = false;
+                            
+                               var itemView = this.getItemByPublicSID(item.publicSID);
+                               if (itemView != null) {
+                                   itemView.setAttribute("isMod",false);
+                                   itemView.updateModeratorIcons();
+                               }
+                            }
+                            
+                        }
+                        
+                    }
+                
+                }
+                
+                if (parent._applyAndStatusIcons != null) {
+                	parent._applyAndStatusIcons.updateIcons();
+                }
+            ]]>
+        </method>
+        
+        <method name="getItemByPublicSID" args="publicSID">
+            <![CDATA[
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].refObj.publicSID == publicSID) {
+                        return vList[i];
+                    }
+                }
+                
+                return null;
+            ]]>
+        </method>
+        
+        <labelText labelid="680" width="270" x="0" multiline="true" y="0" />
+    </view>
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx b/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx
new file mode 100644
index 0000000..f1ba184
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedUserListItem" extends="basePagingListItem" showhandcursor="false" width="254" height="42">
+	
+	<attribute name="connectedSince" value="" type="string" />
+	
+    <attribute name="isMod" value="false" type="boolean" />
+    
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    
+    <attribute name="userpicURL" value="" type="string" />
+    <attribute name="userpicView" value="null" />
+    
+    <attribute name="selfItem" value="false" type="boolean"/>
+    
+    <handler name="onisMod">
+    	<![CDATA[
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj != null && this.refObj.canDraw) {
+                this._content.userStatus.setAttribute("frame",2);
+            } else {
+                this._content.userStatus.setAttribute("frame",1);
+            }
+        ]]>
+    </handler>
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(this.refObj.publicSID == event.publicSID) {
+                this.refObj.micMuted = event.mute;
+                this.updateModeratorIcons();
+            }
+        ]]>
+    </handler>
+
+	<method name="updateIconByMod">
+		if (this.clickable) {
+        	this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+        	//if ($debug) Debug.write(" :: updateIconByMod :: ",this.isMod)
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj.canDraw) {
+            	this._content.userStatus.setAttribute("frame",2);
+            } else {
+            	this._content.userStatus.setAttribute("frame",1);
+            }
+		}
+    </method>  
+    
+    <method name="updateIconByModScroll">
+    	if (this.clickable) {
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj.canDraw) {
+            	this._content.userStatus.setAttribute("frame",2);
+            } else {
+            	this._content.userStatus.setAttribute("frame",1);
+            }
+    	}
+    </method>  
+    
+    <method name="initModeratorIcons">
+    	//if ($debug) Debug.write(" :1: initModeratorIcons :: ");
+    	if (canvas.ismoderator) {
+    		//if ($debug) Debug.write(" :2: initModeratorIcons :: ");
+			this._content._iconsModerator.setAttribute("visibility","visible");
+			this._content._iconsModerator.oninit.sendEvent();
+    	}
+    </method>
+    
+    <method name="updateModeratorIcons">
+		if (this._content._iconsModerator.visibility == "visible") {
+            this._content._iconsModerator.oninit.sendEvent();
+		}
+    </method>
+    
+    <method name="hideModeratorIcons">
+    	if (this._content._iconsModerator.visibility == "visible") {
+            this._content._iconsModerator.setAttribute("visibility","hidden");
+    	}
+    </method>
+
+	<method name="userTyping" args="v">
+		this._content._user_typing.setAttribute("visible", v);
+	</method>
+	<view name="_content" width="254">
+		<view name="_contentIsCurrent" visible="${ parent.parent.selfItem }" width="254" height="40" bgcolor="0x7CFC00"/>
+          
+    	<labelText name="_userName" x="2" y="2" text="${ (parent.parent.firstname == null ? '' : parent.parent.firstname) + ' ' + (parent.parent.lastname == null ? '' : parent.parent.lastname) }" />
+    		   
+		<typingIcon name="_user_typing" x="132" y="2" width="30" height="16" visible="false"/>
+		<miniIcons name="_restartDevice" x="220" y="0" width="16" height="16" resource="resyncuser_rsc" showhandcursor="true"
+				visible="${ parent.parent.clickable &amp;&amp; parent.parent.selfItem &amp;&amp; canvas.isBroadCasting }">
+			<handler name="onclick">
+				if ($debug) Debug.write("parent.parent.refObj.publicSID: ",parent.parent.refObj.publicSID);
+				canvas._videocontainer._videoviewcontent.showDevicePopUp(true);
+			</handler>
+			<labelTooltip labelid="610" />
+		</miniIcons>
+		<view name="userStatus" visible="${ parent.parent.clickable }" x="238" frame="1" resource="userstatus_multiframe_rsc" />
+	    	
+	    <moderationMiniIconRestricted name="_iconsModerator" visibility="hidden"/>
+	</view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/screenSharingAdapter.lzx b/WebContent/src/modules/conference/screenSharingAdapter.lzx
new file mode 100644
index 0000000..24deb35
--- /dev/null
+++ b/WebContent/src/modules/conference/screenSharingAdapter.lzx
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="screenSharingAdapter" extends="node">
+
+	<!---
+		Send via LocalConnection to SWF10 container
+		to show a new screen sharing video
+		@param rcl RoomClient Object
+	 -->
+	<method name="newScreenSharing" args="rcl, h">
+		//Send via LocalConnection to SWF10 container
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "newScreenSharing", [rcl, h]);
+	</method>
+	
+	<!---
+        Send via LocalConnection to SWF10 container
+        to show multiple new screen sharing video
+        @param rcl RoomClient Object Map/list
+     -->
+    <method name="newScreenSharings" args="rcls, h">
+        //Send via LocalConnection to SWF10 container
+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "newScreenSharings", [rcls, h]);
+    </method>
+	
+	<!--- 
+		Send via LocalConnection to SWF10 container 
+		to close a single screen sharing session
+		@param rcl RoomClient Object
+	 -->
+	<method name="closeScreenSharing" args="rcl">
+		//Send via LocalConnection to SWF10 container
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "closeScreenSharing", [rcl]);
+	</method>
+	
+	<!--- 
+		Send via LocalConnection to SWF10 container 
+		to close all screen sharing viewer videos
+	 -->
+	<method name="closeAllScreenSharings" >
+		//Send via LocalConnection to SWF10 container
+		if ($debug) Debug.write("closeAllScreenSharings SEND");
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "closeAllScreenSharings", null);
+	</method>
+	
+	<!--- 
+		Send via LocalConnection to SWF10 container 
+		to update the mouse position of a certain screen sharing
+		@param cursorMap Map Object
+	 -->
+	<method name="updateCursorScreenSharing" args="cursorMap">
+		//Send via LocalConnection to SWF10 container
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "updateCursorScreenSharing", [cursorMap]);
+	</method>
+
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/sip/library.lzx b/WebContent/src/modules/conference/sip/library.lzx
new file mode 100644
index 0000000..dc5077f
--- /dev/null
+++ b/WebContent/src/modules/conference/sip/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+    <include href="sipDialer.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/sip/sipDialer.lzx b/WebContent/src/modules/conference/sip/sipDialer.lzx
new file mode 100644
index 0000000..1457347
--- /dev/null
+++ b/WebContent/src/modules/conference/sip/sipDialer.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="sipDialer" extends="window" bgcolor="gray" width="200">
+    <simplelayout axis="y" spacing="5"/>
+    <labelText labelid="1003"/>
+    <view name="phoneNumber" width="100%">
+        <inputtext name="input" width="$once{parent.width-parent.del.width}" height="20" bgcolor="white"/>
+        <button name="del" x="$once{parent.input.width}" width="30" height="20" onclick="this.del();">
+            ←
+            <method name="del">
+                var t = parent.input.text;
+                if(t.length != 0) {
+                    t = t.substr(0, t.length - 1);
+                    parent.input.setAttribute('text', t);
+                }
+            </method>
+        </button>
+    </view>
+
+    <view name="dialerButtons" align="center">
+        <vbox spacing="5">
+            <hbox spacing="5">
+                <button onclick="parent.parent.parent.parent.dial('1')" width="40">1</button>
+                <button onclick="parent.parent.parent.parent.dial('2')" width="40">2</button>
+                <button onclick="parent.parent.parent.parent.dial('3')" width="40">3</button>
+            </hbox>
+            <hbox spacing="5">
+                <button onclick="parent.parent.parent.parent.dial('4')" width="40">4</button>
+                <button onclick="parent.parent.parent.parent.dial('5')" width="40">5</button>
+                <button onclick="parent.parent.parent.parent.dial('6')" width="40">6</button>
+            </hbox>
+            <hbox spacing="5">
+                <button onclick="parent.parent.parent.parent.dial('7')" width="40">7</button>
+                <button onclick="parent.parent.parent.parent.dial('8')" width="40">8</button>
+                <button onclick="parent.parent.parent.parent.dial('9')" width="40">9</button>
+            </hbox>
+            <hbox spacing="5">
+                <button onclick="parent.parent.parent.parent.dial('*')" width="40">*</button>
+                <button onclick="parent.parent.parent.parent.dial('0')" width="40">0</button>
+                <button onclick="parent.parent.parent.parent.dial('#')" width="40">#</button>
+            </hbox>
+        </vbox>
+    </view>
+    <hbox spacing="10" align="center">
+        <simpleLabelButton labelid="1448" name="callButton">
+            <handler name="onclick">
+                parent.parent.joinToConfCall.doCall();
+                var g = canvas.getUserData();
+                g["lastsipnumber"] = parent.parent.phoneNumber.input.getText();
+                canvas.setUserData(g);
+            </handler>
+        </simpleLabelButton>
+        <simpleLabelButton labelid="85" name="closeButton">
+            <handler name="onclick">
+                canvas.sipDialer = null;
+                parent.parent.destroy();
+            </handler>
+        </simpleLabelButton>
+    </hbox>
+
+	<handler name="oninit">
+		if(canvas.sipDialer != null) {
+			canvas.sipDialer.destroy();
+		}
+		canvas.setAttribute('sipDialer', this);
+		var lastNum = canvas.getUserData()["lastsipnumber"];
+		if(lastNum != undefined) {
+			this.phoneNumber.input.setAttribute('text', lastNum);
+		}
+		this.bringToFront();
+    </handler>
+
+    <method name="dial" args="digit">
+        this.phoneNumber.input.setAttribute('text', this.phoneNumber.input.text + digit);
+    </method>
+
+    <netRemoteCallHib name="joinToConfCall" funcname="joinToConfCall" remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue">return parent.parent.phoneNumber.input.text</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            if($debug) Debug.write("joinToConfCall : ",value);
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx b/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx
new file mode 100644
index 0000000..9bbb34d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- 
+	#################################################
+	Provides functions to chat and extends the chat with the panel for blinking
+	when new messages arrive when the tab is closed
+	#################################################
+	 -->
+
+	<class name="baseTabChatPanel" extends="basePropertyPanel" >
+
+		<attribute name="fadeDelegate" value="null" />
+		<attribute name="doBlink" value="false" type="boolean" />
+
+		<handler name="oninit">
+			canvas._currentChatPanel = this;
+			this.fadeDelegate = new LzDelegate( this, "showText" );
+		</handler>
+
+        <method name="newprivatechat" args="refObj">
+            this.addChatSync(refObj[1],true);
+        </method>
+        
+        <method name="closeprivatechat" args="value">
+            if ($debug) Debug.write("closeprivatechat _1a_ ",value);
+            var publicSID = value[1];
+            if ($debug) Debug.write("closeprivatechat _1b_ ",publicSID);
+            
+			for (var eg in this.content.chatbar.subviews) {
+				if(typeof this.content.chatbar.subviews[eg].objRef.refObj == 'undefined') {
+					continue;
+				}
+				if ($debug) Debug.write("closeprivatechat _2A_ ",this.content.chatbar.subviews[eg].objRef);
+				if ($debug) Debug.write("closeprivatechat _2B_ ",this.content.chatbar.subviews[eg].objRef.refObj);
+				if ($debug) Debug.write("closeprivatechat _2C_ ",this.content.chatbar.subviews[eg].objRef.refObj.publicSID);
+				    
+				if (this.content.chatbar.subviews[eg].objRef.refObj.publicSID == publicSID ) {
+					this.content.chatbar.removeObjectSynced(this.content.chatbar.subviews[eg]);
+					return;
+				}
+            }
+        </method>
+        
+        <method name="privatechat" args="value,client">
+            if ($debug) Debug.write("privatechat A ",client.publicSID);
+            if ($debug) Debug.write("privatechat B ",value[6]);
+            
+            for (var eg in this.content.subviews) {
+                if (this.content.subviews[eg].refObj != null) {
+                    
+                    if ($debug) Debug.write("privatechat _1_ ",this.content.subviews[eg].refObj);
+                    if ($debug) Debug.write("privatechat _2_ ",this.content.subviews[eg].refObj.publicSID);
+                    
+                    if (this.content.subviews[eg].refObj.publicSID == client.publicSID 
+                            || this.content.subviews[eg].refObj.publicSID == value[6] ) {
+                        this.content.subviews[eg]._chatoutputborder._chatoutput.addChatHistory(value,client);
+                    }
+                }
+            }
+        </method>
+        
+        <method name="addChat" args="refObj">
+            this.addChatSync(refObj,false);
+        </method>
+        
+        <method name="addChatSync" args="refObj,remoteOpen">
+            if (this.content.visibility == "hidden") {
+                this.toggleopen();
+            }
+            
+            for (var eg in this.content.subviews) {
+                if (this.content.subviews[eg].refObj != null) {
+                    if (this.content.subviews[eg].refObj.publicSID == refObj.publicSID) {
+                        new lz.labelerrorPopup(canvas.main_content._content.inner,{
+                                    errorlabelid:1496
+                                });
+                        return;
+                    }
+                }
+            }
+            
+            if ($debug) Debug.write("addChat :: ",refObj);
+            for (var eg in this.content.chatbar.subviews) {
+                this.content.chatbar.subviews[eg].isactive = false;
+                this.content.chatbar.subviews[eg].onmouseout.sendEvent(null);
+                this.content.chatbar.subviews[eg].objRef.setAttribute("visibility","hidden");
+            }
+            
+            var chatTabPrivateRef = new lz.chatTabPrivateChat(this.content,{
+                                                refObj:refObj,
+                                                remoteOpen:remoteOpen
+                                                
+                                            });
+            var tempWidth = this.content.chatbar.getCurrentSize();
+            
+            var tabname = (refObj.firstname == null ? "" : refObj.firstname) + " " + (refObj.lastname == null ? "" : refObj.lastname);
+            var tWhiteboardBtn = new lz.chatMiniButton(this.content.chatbar,{
+                                       objRef:chatTabPrivateRef,
+                                       width:tempWidth,
+                                       isactive:true,
+                                       btnName: tabname
+                                    });
+            
+            this.content.chatbar.currentBtn = tWhiteboardBtn;                       
+                                    
+            tWhiteboardBtn.onmouseout.sendEvent(null);
+        </method>
+        
+        <handler name="onisopen" args="o">
+			if ($debug) Debug.write("onisopen",o);
+			canvas.chatHeight = o ? 200 : 222;  
+			canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "hideChatContent", [!o]);
+			if (o) {
+				if ('doInitByOpen' in canvas._chatcontent) {
+					canvas._chatcontent.doInitByOpen();
+				}
+				if (canvas.currentRoomObject != null) {
+					content._content1._chattabbottom.updatefontbuttonvisible();
+				}
+				this.doBlink = false;
+				this._newMessage.setAttribute("visibility","hidden");
+				this._newMessage.setAttribute( "opacity", 0 );
+				this.content.setAttribute("visibility","visible");
+			} else {
+				this.content.setAttribute("visibility","hidden");
+			}
+		</handler>
+
+		<method name="startBlink">
+			if ($debug) Debug.write("startBlink",this.opacity);
+			if (this.isopen) return;
+			if (this.doBlink) {
+				if ($debug) Debug.write("doBlink already started !!!");
+			} else {
+				if ($debug) Debug.write("doBlink");
+				this.doBlink = true;
+				this._newMessage.setAttribute("visibility","visible");
+				lz.Timer.addTimer( this.fadeDelegate , 1000 );
+			}
+		</method>
+
+		<method name="showText" args="refObj">
+			if (this.doBlink) {
+				lz.Timer.addTimer( this.fadeDelegate , 1000 );
+				if (this._newMessage.opacity == 0) {
+					this._newMessage.animate( "opacity", 1.0, 400 );
+				} else {
+					this._newMessage.animate( "opacity", 0, 400 );
+				}
+			} else {
+				this._newMessage.setAttribute("visibility","hidden");
+			}
+		</method>
+
+        <view name="content" visibility="hidden" y="22"
+              height="${ parent.height-22 }" width="${ parent.width }">
+            <chatBarMenu name="chatbar">
+                <attribute name="refObj" value="null" />
+                <attribute name="objMessage" value="null" />
+                <attribute name="publicSID" value="" type="string" />
+                
+                <handler name="oninit">
+                    this.currentBtn = this._button1;
+                </handler>
+                
+                <handler name="onRemoveWindow" args="publicSID">
+                    <![CDATA[
+                    
+                        if ($debug) Debug.write("onRemoveWindow :: ",publicSID);
+                        
+                        this.publicSID = publicSID;
+                    
+                        this.objMessage = new Array();
+                        this.objMessage[0] = 'closeprivatechat';
+                        this.objMessage[1] = canvas.publicSID;
+                        
+                        this.sendMessageWithClientByPublicSID.doCall();
+                    ]]>
+                </handler>
+                
+                <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                    remotecontext="$once{ canvas.thishib }" > 
+                    <netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+                    <netparam><method name="getValue"> return parent.parent.publicSID; </method></netparam>
+                    <handler name="ondata" args="value">
+                        <![CDATA[
+                            //The onResult-Handler will be called be the rtmpconnection
+                            if ($debug) Debug.write("sendMessageWithClientByPublicSID getValue : ",value);
+                        ]]>
+                    </handler>   
+                </netRemoteCallHib>
+                
+                <chatMiniButton name="_button1" isactive="true" isClosable="false" >
+                    <handler name="oninit">
+                        this.setAttribute("btnName", canvas.getLabelName(1494) + " 1");
+                        this.objRef = parent.parent._content1;
+                        this.onmouseout.sendEvent(this);
+                    </handler>
+                </chatMiniButton>
+                
+            </chatBarMenu>
+            
+            <chatTab name="_content1" />
+            
+        </view>
+			
+		<labelText labelid="1199" x="${ parent.width - this.width }" bgcolor="0xFFFFFF"
+        		   y="2" fontsize="10" fontstyle="bold" fgcolor="0xFF3300" />
+
+		<view name="_newMessage" y="0" x="${ parent.width-this.width }"
+			visibility="hidden">
+			<view x="1" y="2" resource="chat_message_incoming_rsc" />
+			<labelText x="22" y="2" fgcolor="0x008000" fontstyle="bold"
+				labelid="1417" />
+		</view>
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx
new file mode 100644
index 0000000..b3a312a
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!--- chat output specialized for video-conference -->
+<class name="chatOutput" extends="view" height="${ parent.height-1 }" 
+            clip="true" width="${ parent.width-1 }" bgcolor="0xFFFFFF">
+
+    <attribute name="isAlreadyLoaded" value="false" type="boolean"/>
+<!---
+ Invoked from VideoContainer cause domain/room must be set first
+ -->
+    <method name="doInitByOpen">
+        <![CDATA[
+            if (!this.isAlreadyLoaded) {
+            	this.isAlreadyLoaded = true;
+            	this._cbtext.clearChatOutput();
+                this.getRoomChatHistory.doCall();
+            }
+        ]]>
+    </method>
+    
+    <method name="reload">
+        <![CDATA[
+        	this._cbtext.clearChatOutput();
+            this.getRoomChatHistory.doCall();
+        ]]>
+    </method>    
+    
+    <netRemoteCallHib name="getRoomChatHistory" funcname="chatservice.getRoomChatHistory" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if($debug) Debug.write("chatOutput/getRoomChatHistory: ",value);
+                for (var i=0;i<value.length;i++){
+                    if($debug) Debug.write(value[i].message,value[i].client);
+                    parent.addChatHistory(value[i].message,value[i].client);
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+    
+    <method name="getLog">
+    	<![CDATA[
+    		var tString = "";
+    		
+    		for (var i=0;i<this._cbtext.subviews.length;i++) {
+    			
+    			if (i!=0) {
+    				tString += "<br/>";
+    			}
+    			
+    			tString += this._cbtext.subviews[i].username + ': '
+    					+ this._cbtext.subviews[i].message;
+    			
+    		}
+    		
+    		return tString;
+    	
+    	]]>
+    </method>     
+    
+    <method name="addChatHistory" args="value,client">
+        <![CDATA[
+            //if($debug) Debug.write("chatOutput/addChatHistory: ",value,client);
+            canvas.currentBaseConferenceRoom._chatPanelStrict.startBlink();
+            var username = (client.firstname == null ? "" : client.firstname) + " " + (client.lastname == null ? "" : client.lastname);
+            var messageObj = value[value.length - 1];
+            var usercolor = value[5];
+            
+            var isDirectLink = null;
+            if (value[8] > 0) {
+            	isDirectLink = false;
+            } else {
+            	isDirectLink = true;
+            }
+            
+            if (canvas.isRemoteUser()) {
+                isDirectLink = true;               	
+            }
+            if ( usercolor==null || usercolor==0 || (usercolor !=null && usercolor.length==0) )usercolor=0xCCCCCC;
+            
+            
+            
+            if ($debug) Debug.write("addChatHistory userID: ",value[8],isDirectLink);
+            
+            new lz.chatTabItemEmoticons(this._cbtext,{
+            			rawMessage: value,
+		                messageObj:messageObj,
+	                    user_id:value[8],
+	                    publicSID:value[6],
+	                    message:value[4],
+	                    picture_uri:client.picture_uri,
+		                usercolor:usercolor,
+		                username:username,
+		                isDirectLink:isDirectLink,
+		                usertime:value[1]
+	                });
+            
+            this.setScrollToMax();              
+        ]]>
+    </method>           
+    
+    <method name="setScrollToMax">
+        <![CDATA[
+        if(_cbtext.height>this.height){
+            myscrollbar.scrolltarget.setAttribute(myscrollbar.scrollattr,(this.height-_cbtext.height));
+        }
+        
+        ]]>
+    </method>
+    
+    <view name="_cbtext" width="${ parent.width }" layout="axis:y;spacing:0" >
+    	<method name="clearChatOutput">
+    		<![CDATA[
+    			while (this.subviews.length>0){
+    				this.subviews[0].destroy();
+    			}
+    		]]>
+    	</method>
+    </view>
+    
+    <om_vscrollbar name="myscrollbar" />
+
+</class>
+    
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx
new file mode 100644
index 0000000..beb93d3
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+-->
+<class name="chatTab" extends="simpleBaseTabpane" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" x="0">
+	<view name="_chatoutputborder" height="${ parent.height-48 }" width="${ parent.width-2 }" 
+				bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		
+		<chatOutput name="_chatoutput" x="1" y="1" >
+			<handler name="oninit">
+				canvas._chatcontent = this;
+			</handler>
+		</chatOutput>
+	</view>
+	
+	<chatTabBottom name="_chattabbottom" 
+				   y="${ parent.height-46 }" x="0" width="${ parent.width-2 }" />
+				   
+</class>
+
+<class name="chatTabPrivateChat" extends="simpleBaseTabpane" y="22" height="${ parent.height-22 }" 
+                 width="${ parent.width }">
+
+	<attribute name="refObj" value="null"/>
+	<attribute name="objMessage" value="null"/>
+	<attribute name="remoteOpen" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		<![CDATA[
+			if (this.remoteOpen) {
+				return;
+			}
+			this.objMessage = new Array();
+			this.objMessage[0] = 'newprivatechat';
+			var u = canvas.thishib.userobject;
+			this.objMessage[1] = {
+				publicSID: canvas.publicSID
+				, firstname: u.firstname
+				, lastname: u.lastname
+				};
+			
+			this.sendMessageWithClientByPublicSID.doCall();
+			
+			if (canvas.currentRoomObject != null) {
+				_chattabbottom.updatefontbuttonvisible();
+			}
+		]]>
+	</handler>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.refObj.publicSID; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendMessageWithClientByPublicSID getValue : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+	
+	<view name="_chatoutputborder" height="${ parent.height-48 }"
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  width="${ parent.width-2 }">
+		
+		<chatOutput name="_chatoutput" x="1" y="1" />
+	</view>
+	
+	<chatTabBottom name="_chattabbottom" isPrivate="true" 
+				   y="${ parent.height-46 }" x="0" width="${ parent.width-2 }" />
+</class>
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
new file mode 100644
index 0000000..451ee05
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- View of the buttom area of chat. It contains buttons of message,emoticons,clear. -->
+	<class name="chatTabBottom" extends="view" height="42">
+		<attribute name="isPrivate" value="false" type="boolean" />
+		
+		<view x="0" y="0" height="20" width="${ parent.width-2 }" name="message"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<method name="getText">
+				return this._ctext.getText();
+			</method>
+			<method name="setText" args="txt">
+				this._ctext.setAttribute('text',txt);
+			</method>
+			<customInputtext name="_ctext" width="${ parent.width-2 }"
+				height="$once{ parent.height-2 }" x="1" y="1" bgcolor="white">
+				<handler name="onkeyup" args="key">
+	                <![CDATA[
+	                var reverse = canvas.reverseAll(parent.getText());
+	                
+	                // parent.setText(reverse);
+	                // 13 is return
+	                if ((key==27) || (key==13)) {
+	                	this.parent._button.onclick.sendEvent();
+	                }
+	                ]]>
+				</handler>
+			</customInputtext>
+
+			<attribute name="objMessage" value="null" />
+			
+			<simpleLabelButton name="_button" labelid="220"
+				height="21" width="80" x="$once{ parent.width-80 }">
+				<handler name="onclick">
+				<![CDATA[
+					var message = this.parent.getText();
+					if (message.length != 0) {
+						parent.objMessage = new Array();
+						var om = parent.objMessage;
+						om[0] = parent.parent.isPrivate ? 'privatechat' : 'chat';
+						//The server side will put time here
+						om[1] = "";
+						//if ($debug) Debug.write("Setting Message");
+						om[2] = 'newtextmessage';
+						om[3] = hib.userobject.login;
+						//if (parent.parent._inverseWording.getValue()) message = canvas.reverseAll(message)
+						om[4] = message;
+						om[5] = canvas.currentusercolor;
+						om[6] = parent.parent.isPrivate ? parent.parent.parent.refObj.publicSID : canvas.publicSID;
+						om[7] = canvas.isrtl;
+						om[8] = hib.userobject.user_id;
+						om[9] = canvas.currentRoomObject.chatModerated && !canvas.ismoderator;
+						if ($debug) Debug.write("send: ", parent.parent.parent);
+						if (parent.parent.isPrivate) {
+							parent.sendMessageWithClientByPublicSID.doCall();
+						} else {
+							hib.sendChatMessageWithClient.sendMessage(om);
+						}
+						this.parent.setText('');
+					}
+				]]>
+				</handler>
+			</simpleLabelButton>
+
+			<netRemoteCallHib name="sendMessageWithClientByPublicSID"
+				funcname="chatservice.sendMessageWithClientByPublicSID" remotecontext="$once{ canvas.thishib }">
+				<netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+				<netparam><method name="getValue">return parent.parent.parent.parent.refObj.publicSID;</method></netparam>
+				<handler name="ondata" args="value">
+					//The onResult-Handler will be called be the rtmpconnection
+					if ($debug) Debug.write("chatservice.sendMessageWithClientByPublicSID getValue : ",value);
+				</handler>
+			</netRemoteCallHib>
+		</view>
+
+		<labelCheckbox name="_inverseWording" x="2" y="24"
+			labelid="580">
+			<attribute name="doUpdate" value="false" type="boolean" />
+			<handler name="oninit">
+				var g = canvas.getUserData();
+				var save = g["rtlCheckbox"];
+				//if ($debug) Debug.write("oninit doUpdate",save,g);
+				if(save) {
+					this.doUpdate = false;
+					this.setValue(true);
+				}
+				this.doUpdate = true;
+			</handler>
+			<handler name="onvalue" args="v">
+				if (this.doUpdate) {
+					//if ($debug) Debug.write("onvalue doUpdate",this.getValue());
+					var g = canvas.getUserData();
+					g["rtlCheckbox"]=this.getValue();
+					//if ($debug) Debug.write("onvalue doUpdate",g["rtlCheckbox"]);
+					canvas.setUserData(g);
+				}
+			</handler>
+			<labelTooltip labelid="581" />
+		</labelCheckbox>
+
+		<method name="updatefontbuttonvisible">
+			if ($debug) Debug.write("chatTabBottom updatefontbuttonvisible allowFontStyles",
+						canvas.currentRoomObject.allowFontStyles);
+			_button.fontbutton.setVisible(canvas.currentRoomObject.allowFontStyles == true ||
+			    			   canvas.currentRoomObject.allowFontStyles == null);
+		</method>
+
+		<view name="_button" width="140" y="22" align="right">
+
+			<miniIconsImage name="fontbutton" y="2" x="62" width="16" height="16" 
+				showhandcursor="true" src="$once{ canvas.getThemeImage('font_style') }" >
+        		<handler name="onclick">
+        			var pick = new lz.fontOptions(canvas,{
+						btnRef:this.parent.parent,
+						x:(this.getAttributeRelative('x',canvas)-130),
+						y:(this.getAttributeRelative('y',canvas)-42)
+					});
+					lz.ModeManager.makeModal(pick);   
+        		</handler>
+        		<handler name="onmouseover">
+        			<!-- lost selection workaround -->
+        			parent.parent.message._ctext.saveselection();
+        		</handler>
+        		<labelTooltip labelid="1530" />
+        	</miniIconsImage>
+
+			<miniIcons y="2" x="82" resource="smile_chat_log_rsc"
+				width="16" height="16" showhandcursor="true">
+				<handler name="onclick">
+					var pick = new lz.emotIconsSelector(canvas,{
+						btnRef:this.parent.parent,
+						x:(this.getAttributeRelative('x',canvas)-140),
+						y:(this.getAttributeRelative('y',canvas)-140)
+					});
+					lz.ModeManager.makeModal( pick );
+				</handler>
+				<labelTooltip labelid="445" />
+			</miniIcons>
+
+			<miniIcons y="2" x="102" resource="copy_chat_log_rsc"
+				width="16" height="16" showhandcursor="true" visible="$once{ !parent.parent.isPrivate }">
+				<handler name="onclick">
+                <![CDATA[
+                    var tString = canvas._chatcontent.getLog();
+                    new lz.showChatLog(canvas,{
+                                    error:tString
+                                });
+                ]]>
+				</handler>
+				<labelTooltip labelid="1200" />
+			</miniIcons>
+
+			<miniIconsImage src="$once{ canvas.getThemeImage('button_cancel_rsc') }"
+				y="2" x="122" width="16" height="16" showhandcursor="true"
+				visible="$once{ !parent.parent.isPrivate }">
+				<handler name="onclick">
+					if (!canvas.ismoderator) {
+					//Do not allow
+						new lz.labelerrorPopup(canvas,{errorlabelid:783});
+						return;
+					}
+					parent.clearChat.doCall();
+				</handler>
+				<labelTooltip labelid="442" />
+			</miniIconsImage>
+
+			<view width="1" />
+
+			<netRemoteCallHib name="clearChat" funcname="chatservice.clearChat"
+				remotecontext="$once{ canvas.thishib }">
+				<handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("clearChat : ",value);
+                ]]>
+				</handler>
+			</netRemoteCallHib>
+
+		</view>
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx
new file mode 100644
index 0000000..a9d61aa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="chatTabItem" extends="view" 
+	   width="240" >
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="usercolor" value="0" type="string" />
+	<attribute name="cbtext" value="" type="string" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			if($debug) Debug.write("chatTabItem/WIDTH: "+this.width);
+			if($debug) Debug.write("chatTab Item on init");
+	        var downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=CHAT'
+	        		+'&moduleName=chat&parentPath=&room_id='
+	        		+'&remoteUserid='+this.user_id
+	        		+'&sid='+canvas.sessionId;
+	        //Debug.write("downloadurl "+downloadurl);
+	        this._userpic.setAttribute('src',downloadurl);	
+	        
+	        if(canvas.isrtl == 'true'){
+	        	this.header_user.stAttribute('textalign', 'right');
+	        	this.header_time.setAttribute('align', 'left');
+	        	this.multi.setAttribute('textalign', 'right');
+	        }
+	        
+	        
+	        
+	        
+	        //Debug.write("TIME: "+this.usertime);
+        ]]>
+	</handler>
+	
+	<image name="_userpic" />
+	
+	
+	<text text="$once{ parent.username }" x="40" resize="false" fontsize="10"
+		  width="$once{ parent.width - 40 }" bgcolor="$once{ parent.usercolor }"
+		  selectable="true" name="header_user">
+		  
+	</text>
+	<text text="$once{ parent.usertime }" align="right" fontsize="10" selectable="true" name="header_time" >
+		
+	</text>
+	
+	
+	
+	<text multiline="true" x="40" y="20" fontsize="10" text="$once{ parent.cbtext }"
+		  width="220" selectable="true" name="multi">
+		 
+	</text>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
new file mode 100644
index 0000000..d3201cf
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="chatTabItemEmoticons" extends="view" width="$once{ parent.width }" bgcolor="$once{ this.usercolor }">
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="usercolor" value="0" type="string" />
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="messageObj" value="null" />
+	<attribute name="isDirectLink" value="false" type="boolean" />
+	<attribute name="message" value="" type="string" />
+	<attribute name="picture_uri" value="" type="string"/>
+	<attribute name="rawMessage" value="null" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		    if ($debug) Debug.write("this.picture_uri :: ",this.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+	        
+	        if(canvas.isrtl == 'true'){
+	         	if($debug) Debug.write("chatTabItemEmoticons RTL is set");
+	       
+	        	this.header_user.setAttribute('textalign', 'right');
+	        	this.header_time.setAttribute('align', 'left');
+	        	this.header_time.setAttribute('x', '40');
+	        	this.multi.setAttribute('textalign', 'right');
+	        	this.multi.setAttribute('align', 'right');
+	        }
+	        
+	        //Debug.write("TIME: "+this.usertime);
+        ]]>
+	</handler>
+	
+	<view name="bg" width="179" height="$once{ parent.height-1 }" bgcolor="0xFFFFFF" 
+		opacity="0.1">
+	</view>
+	
+	<image name="_userpic" stretches="both" x="1" y="1">
+		<handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+                if (this.width > 38) {
+                	var height = this.height/(this.width/38);
+                	this.setAttribute('height',height);
+                    this.setAttribute('width',38);
+                }
+            ]]>
+        </handler>
+	</image>
+	
+	<text text="$once{ parent.username }" x="40" resize="false" fontsize="11" multiline="true"
+		  width="140" height="$once{ parent.height }"
+		  name="header_user">
+	</text>
+	
+	<state applied="$once{ parent.rawMessage[9] }">
+		<miniIcons resource="allow_ok_icon_rsc" width="16" height="16"
+			y="2" x="$once{ parent.width - 140 }" showhandcursor="true" >
+			<handler name="onclick">
+				this.setAttribute('visible', false);
+				parent.setAttribute('visible', false);
+				parent.rawMessage.length = parent.rawMessage.length - 1;
+				parent.rawMessage[parent.rawMessage.length - 1] = false;
+				//if ($debug) Debug.write("!!!!!!!!!!!!! allow message ", parent, parent.rawMessage);
+				hib.sendChatMessageWithClient.sendMessage(parent.rawMessage);
+			</handler>
+			<labelTooltip labelid="1514" />
+		</miniIcons> 
+	</state>
+	
+	<state applied="$once{ !parent.isDirectLink }">
+	
+	    <miniIconsImage name="add" src="$once{ canvas.getThemeImage('edit_add_rsc') }" width="16" height="16" 
+	                   y="2" x="$once{ parent.width - 122 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            if (hib.userobject.user_id == parent.user_id) {
+	                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+	                return;
+	            }
+	            parent.requestUserToContactList.doCall();
+	        </handler>
+	        <labelTooltip labelid="1186" />
+	    </miniIconsImage>
+    
+    </state>
+    
+    <!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+	
+	<!-- space between each line of text -->
+	<attribute name="leading" value="5" type="number" />
+	
+	<view name="bg_main" x="180" width="$once{ parent.width - 180 }" height="$once{ parent.height-1 }"  
+		opacity="0.3" bgcolor="0xFFFFFF">
+	</view>
+	
+	<text multiline="true" x="180" width="$once{ parent.width - 306 }" fontsize="11" selectable="true" name="multi" >
+		<handler name="oninit">
+			<![CDATA[
+				
+				if(canvas.isrtl!='true'){
+					this.sprite.__LZtextclip.wordWrap = false;
+					if($debug) Debug.write("New Text");
+					//Debug.write(this.sprite.getTextFormat());
+					tFormat = this.sprite.__LZtextclip.getTextFormat();
+					//Debug.write(this.sprite.__LZtextclip.getTextFormat());
+					tFormat.leading = 4;
+					this.sprite.__LZtextclip.setTextFormat(tFormat);
+					var items = parent.messageObj;
+					var t = "";
+					//items[0] = ["text","hello your are the hero lets check accomodation today i need some input"];
+					for (var i=0;i<items.length;i++) {
+						
+						//if ($debug) Debug.write("Item :0: ",items[i][0]);
+						
+						if (items[i][0]=="text"){
+							//if ($debug) Debug.write("Text :1: ",items[i][1]);
+							
+							t += items[i][1];
+						} else {
+							if (t.length!=0){
+								var tempString = calcLineWidthByTextField(this.width, t,this.fontsize,this.font);
+								var x = tempString[tempString.length-1]["lineWidth"];
+								var y = (tempString.length-1)*(getLineHeight()+parent.leading-1);
+							}else {
+								var x = 0;
+								var y = 0;
+							}
+							t += items[i][2];
+							
+							var swfurl = canvas.getUrl() + 'public/emoticons/'+items[i][1];
+							var m = new lz.chatInnerSmily(parent,{x:x+this.x,y:y+this.y,iconlabel:items[i][3]});
+							
+							//if ($debug) Debug.write("Smily :2: ",swfurl);
+							
+							m.setSource(swfurl);
+						}
+					}
+					//Debug.write("TTTT: ",t);"Verdana"
+					var tString = calcLineWidthByTextField(this.width, t,this.fontsize,this.font);
+					
+					for (var k = 0;k<tString.length;k++){
+						this.setAttribute('text',this.getText()+textObject[k]["text"]+"\r");
+						//if ($debug) Debug.write("text: ",k,textObject[k]["lineWidth"],textObject[k]["text"]);
+					}	
+					
+					//if ($debug) Debug.write("text: ",this.getText());
+					
+					//Debug.write(this.sprite.__LZtextclip.getTextFormat());
+					tFormat.leading = parent.leading;
+					this.sprite.__LZtextclip.setTextFormat(tFormat);
+					//Debug.write(this.sprite.__LZtextclip.textHeight);
+					//Debug.write(getLineHeight());
+					//Debug.write(this.sprite.__LZtextclip.textHeight+12);
+					this.setAttribute('height',this.sprite.__LZtextclip.textHeight+12);
+				}
+				else{
+					var t = "";
+					var items = parent.messageObj;
+					
+					for (var i=0;i<items.length;i++) {
+						if (items[i][0]=="text"){
+							t += items[i][1];
+						} 
+					}
+					
+					this.setAttribute('text',this.getText()+ t);
+				}
+				
+				parent.setAttribute('height',this.height);
+				parent.header_user.setAttribute('height',this.height);
+				parent.bg.setAttribute('height',this.height-1);
+				parent.bg_main.setAttribute('height',this.height-1);
+				
+			]]>
+		</handler>	
+		
+	</text>
+	
+	<state applied="$once{ !parent.isDirectLink }">
+	
+	    <miniIcons name="private_message_add" resource="private_message_add_rsc" width="16" height="16" 
+	                   y="0" x="$once{ parent.width - 104 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.newPrivateMessage(canvas,{
+	                                x:200,y:120,
+	                                refObj:null,
+	                                minimizable:true,
+	                                maximizable:true,
+	                                userObject:null,
+	                                isdragable:true,
+	                                user_id:parent.user_id,
+	                                width:canvas.width-300,
+	                                height:canvas.height-130
+	                            });
+	        </handler>
+	        <labelTooltip labelid="1253" />
+	    </miniIcons>
+	    
+	    <miniIcons resource="user_profile_rsc" width="16" height="16" 
+	               y="0" x="$once{ parent.width - 84 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.viewUserProfileWindow(canvas,{
+	                                userId:parent.user_id
+	                            });
+	        </handler>
+	        <labelTooltip labelid="1236" />
+	    </miniIcons>    		  
+			  
+	    <miniIcons y="0" x="$once{ parent.width - 64 }"
+	    		   resource="start_conference2_rsc" width="16" height="16" 
+	               showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.chatParticipantsInviteConference(canvas,{
+	                            publicSID:parent.publicSID,
+	                            user_id:parent.user_id
+	                        });
+	        </handler>
+	        <labelTooltip labelid="1131" />
+	    </miniIcons>  
+    
+    </state>
+    		  
+	<text text="$once{ parent.usertime+'   ' }" align="right" fgcolor="0xAAAAAA"
+		  fontsize="10" name="header_time" />
+
+</class>						
+
+<class name="chatInnerTextBox" extends="text" resize="true" bgcolor="red" />
+
+<class name="chatInnerSmily" extends="view" onmouseover="" onmouseout="">
+	<attribute name="iconlabel" value="" type="string" />
+	<labelTooltip text="$once{ parent.iconlabel }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/library.lzx b/WebContent/src/modules/conference/tabcontent/chat/library.lzx
new file mode 100644
index 0000000..88b92ed
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<resource name="delete_chat_log_rsc" src="resources/cancel.png" />
+	<resource name="copy_chat_log_rsc" src="resources/edit-copy.png" />
+	<resource name="smile_chat_log_rsc" src="resources/smile.swf" />
+	<resource name="start_conference2_rsc" src="resources/connect.png" />
+	
+	<include href="simpleBaseTabpane.lzx" />
+	<include href="showChatLog.lzx" />
+	<include href="baseTabChatPanel.lzx" />
+	<include href="chatTabItem.lzx" />
+	<include href="chatTabItemEmoticons.lzx" />
+	<include href="chatOutput.lzx" />
+	<include href="chatTabBottom.lzx" />
+	<include href="chatTab.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png b/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png
new file mode 100644
index 0000000..a432b49
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png b/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png
new file mode 100644
index 0000000..024138e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png b/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png
new file mode 100644
index 0000000..8dd48c4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/font.png b/WebContent/src/modules/conference/tabcontent/chat/resources/font.png
new file mode 100644
index 0000000..fddeb4d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/font.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf b/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf
new file mode 100644
index 0000000..7578e2e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png
new file mode 100644
index 0000000..76fb17b
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png
new file mode 100644
index 0000000..a9468a0
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx b/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx
new file mode 100644
index 0000000..4294a4d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+-->
+<class name="showChatLog" extends="labelExplorerBox" labelid="1201"
+	    docking="true" resizeable="true" closable="true" width="500" 
+	    x="$once{ parent.width/2 - this.width/2 }" height="240">
+    
+    <attribute name="error" value="" type="string" />
+    
+    <view x="2" width="${ parent.width - 4 }" clip="true"
+        				y="24" height="${ parent.height-50 }">
+        <labelText text="$once{ parent.parent.error }" width="${ parent.width - 18 }"
+        		   multiline="true" resize="false" selectable="true" />
+        <om_vscrollbar />
+    </view>
+	
+    <simpleLabelButton labelid="891" width="100" onclick="this.parent.close();" 
+		   x="${ parent.width-104 }" y="${ parent.height-24 }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx b/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx
new file mode 100644
index 0000000..3e5492a
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- Tabpane. it used by chat. -->
+	<class name="simpleBaseTabpane" extends="view" height="$once{ parent.height-20 }" 
+		   width="$once{ parent.width }" y="24" x="2" >
+		
+	</class>  
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx
new file mode 100644
index 0000000..99d73b1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dragItemFileExplorer" extends="view">
+	
+	<attribute name="refObj" value="null"/>
+	
+	<attribute name="dragItemResource" value="" type="string"/>
+	
+	<attribute name="overItem" value="null"/>
+	
+	<attribute name="alreadySent" value="false" type="boolean" />
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	<attribute name="newParentFileExplorerItemId" value="0" type="number" />
+    <attribute name="isOwner" value="false" type="boolean" />
+    <attribute name="moveToHome" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		lz.Track.activate(canvas.currentImagesListdraw.currentTrackGroupName);
+		canvas.currentImagesListdraw.currentDragItem = this;
+		lz.Cursor.showHandCursor(false);
+		lz.ModeManager.globalLockMouseEvents();
+		this.dragger.apply();
+	</handler>
+	
+	<method name="sendOverItem" args="itemRef">
+		<![CDATA[
+    		if (this.refObj != itemRef) {
+    			
+    			if (this.refObj.isFolder) {
+    				if (!itemRef.isTrashCan && !itemRef.isFolder) {
+    					//No Folders to the whiteboard please
+    					return;
+    				}
+    			}
+    			
+        		this.overItem = itemRef;
+        		this._dragIcon.setAttribute("frame",2);
+    		}
+		]]>
+	</method>
+	
+	<method name="sendOutItem" args="itemRef">
+        this.overItem = null;
+        this._dragIcon.setAttribute("frame",1);
+    </method>
+	
+	<handler name="onmouseup" reference="lz.GlobalMouse" args="who">
+        this.close();
+    </handler>
+    
+    <method name="close">
+    <![CDATA[
+    	//This can happen when the confirmation pops up
+    	if (this.alreadySent) {
+    		return;
+    	}
+    	this.alreadySent = true;
+    	if ($debug) Debug.write("close Drag Item");
+    	lz.Cursor.showHandCursor(true);
+    	lz.Track.deactivate(canvas.currentImagesListdraw.currentTrackGroupName);
+    	lz.ModeManager.globalUnlockMouseEvents();
+    	canvas.currentImagesListdraw.currentDragItem = null;
+    	this.dragger.remove();
+    	
+    	if (this.overItem != null) {
+    		
+    		if ($debug) Debug.write("this.overItem ",this.overItem);
+    		
+    		if (this.overItem["isTrashCan"] && this.overItem.isTrashCan) {
+    			if ($debug) Debug.write("SEND TO GARBAGE");
+    			this.fileExplorerItemId = this.refObj.fileExplorerItemId;
+    			new lz.confirmationSingle(canvas,{
+            			   refObj:this,
+            			   labelid:710,
+            			   labeliderror:713,
+            			   showCheckBox:false,
+                           refReturnMethod:"sendConfirmation"
+            			});
+    		} else if (this.overItem["isFolder"] && this.overItem.isFolder){
+    			if ($debug) Debug.write("MOVE ITEM",this.refObj.fileExplorerItemId);
+    			if ($debug) Debug.write("MOVE TO PARENT",this.overItem.fileExplorerItemId);
+    			this.fileExplorerItemId = this.refObj.fileExplorerItemId;
+    			this.newParentFileExplorerItemId = this.overItem.fileExplorerItemId;
+    			if (this.overItem.fileExplorerItemId == 0) {
+    			    this.isOwner = this.overItem.isOwner;
+    			}
+    			
+    			//check if this is a home folder or not
+    			var checkForOwer = this.overItem.checkForIsOwner();
+    			if ($debug) Debug.write("checkForOwer ::",checkForOwer);
+    			this.moveToHome = checkForOwer;
+    			
+    			//check that the file is not moved inside itself
+    			if (this.overItem.checkForIsChild(this.refObj.fileExplorerItemId)) {
+    				new lz.labelerrorPopup(canvas,{errorlabelid:922});
+    				this.destroy();
+    				return;
+    			}
+    			
+    			this.moveFile();
+    		} else {
+    			if ($debug) Debug.warn("Drag to whiteboard !!! ");
+    			if (this.refObj.isVideo) {
+    				this.refObj.playVideo();
+    			} else if (this.refObj.isPresentation) {
+    			    this.refObj.loadDocumentToWhiteboard();
+    			} else if (this.refObj.isImage) {
+    				this.refObj.loadImageToWhiteboard();
+    			} else if (this.refObj.isWmlFile) {
+    				this.refObj.loadWmlFile();
+    			} else {
+    				if ($debug) Debug.warn("Should never happen dragItemFileExplorer unhandled case");
+    			}
+    			this.destroy();
+    		}
+    	} else {
+    		this.destroy();
+    	}
+    ]]>	
+    </method>
+    
+    <method name="sendConfirmation" args="bool,askAgain">
+    	if (bool) {
+    		this.deleteFileOrFolder();
+    	} else {
+    		this.destroy();
+    	}
+    </method>
+    
+    <method name="deleteFileOrFolder">
+        <![CDATA[
+            if ($debug) Debug.write("deleteFileOrFolder HTTP 2: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/deleteFileOrFolderSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId;
+            
+            this.deleteFileOrFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("deleteFileOrFolderSelf doRequest ",downloadurl);
+            this.deleteFileOrFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="deleteFileOrFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("deleteFileOrFolder: ",d);
+                parent.refObj.parent.parent.doOpen();
+                parent.destroy();
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+    <netRemoteCallHib name="deleteFileOrFolder" funcname="fileservice.deleteFileOrFolder" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam>
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("deleteFileOrFolder: ",value);
+            parent.refObj.parent.parent.doOpen();
+            parent.destroy();
+        </handler>
+    </netRemoteCallHib> 
+     -->
+    
+    <!--
+    public Long moveFileSelf(String SID, Long fileExplorerItemId,
+            Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+            Boolean moveToHome)
+     -->
+     
+    <method name="moveFile">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/moveFileSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId
+                            +'&newParentFileExplorerItemId='+this.newParentFileExplorerItemId
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner
+                            +'&moveToHome='+this.moveToHome;
+            
+            this.moveFileSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("moveFileSelf doRequest ",downloadurl);
+            this.moveFileSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="moveFileSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("moveFileSelf: ",d);
+                parent.overItem.doOpen();
+                parent.refObj.parent.parent.doOpen();
+                parent.destroy();
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+    <netRemoteCallHib name="moveFile" funcname="fileservice.moveFile" 
+        remotecontext="$once{ canvas.thishib }" > 
+        
+        <attribute name="fileExplorerItemId" value="0" type="number" />
+        
+        
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam>
+        <netparam><method name="getValue">return parent.newParentFileExplorerItemId;</method></netparam>  
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>         
+        <netparam><method name="getValue">return parent.isOwner;</method></netparam>
+        <netparam><method name="getValue">return parent.moveToHome;</method></netparam>
+          
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("moveFile: ",value);
+            parent.overItem.doOpen();
+            parent.refObj.parent.parent.doOpen();
+            parent.destroy();
+        </handler>
+    </netRemoteCallHib>   
+     -->  
+   
+	<view name="_dragFileSymbol" x="10" y="10"
+		resource="$once{ parent.dragItemResource }" />
+	
+	<view name="_dragIcon" x="18" y="14" 
+		  resource="drag_n_drop_rsc" frame="1" />
+	
+	<dragstate name="dragger"/>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx
new file mode 100644
index 0000000..033f205
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dynamicFileName" extends="customInputtext" 
+	   fontsize="10" bgcolor="0xFFFFFF">
+	
+	<attribute name="isNew" value="false" type="boolean" />
+	
+	<!-- Only used in case its an update -->
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	
+	<attribute name="parentFileExplorerItemId" value="0" type="number" />
+	<attribute name="isOwner" value="false" type="boolean" />
+	
+	<attribute name="refObj" value="null" />
+	
+	<handler name="onblur">
+		lz.ModeManager.release(this);
+		if ($debug) Debug.write("Store and Destroy ",this.parentFileExplorerItemId);
+		if (this.isNew) {
+		    this.addFolder();
+		} else {
+			this.updateFileOrFolderName();
+		}
+	</handler>
+	
+	<handler name="onkeydown" args="k">
+		<![CDATA[
+    		if (k == 13 || k == 27) {
+    			this.onblur.sendEvent();
+    		}
+		]]>
+	</handler>
+	
+	<!--
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+            String fileName, Long room_id, Boolean isOwner)
+     -->
+	
+	<method name="addFolder">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/addFolderSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&parentFileExplorerItemId='+this.parentFileExplorerItemId
+                            +'&fileName='+this.text
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner;
+            
+            this.addFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("addFolderSelf doRequest ",downloadurl);
+            this.addFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="addFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("addFolderSelf: ",d);
+                parent.completed();
+            ]]>
+        </handler>
+    </dataset>
+	
+	<!--
+	<netRemoteCallHib name="addFolder" funcname="fileservice.addFolder" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.parentFileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.text;</method></netparam>   
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>  
+        <netparam><method name="getValue">return parent.parent.isOwner;</method></netparam>         
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("addFolder: ",value);
+            parent.completed(value);
+        </handler>
+    </netRemoteCallHib>  
+     -->
+	
+	<!--
+    public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+            String fileName)
+     -->
+    <method name="updateFileOrFolderName">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/updateFileOrFolderNameSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId
+                            +'&fileName='+this.text;
+            
+            this.updateFileOrFolderNameSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("updateFileOrFolderNameSelf doRequest ",downloadurl);
+            this.updateFileOrFolderNameSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="updateFileOrFolderNameSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("updateFileOrFolderNameSelf: ",d);
+                parent.completedRename();
+            ]]>
+        </handler>
+    </dataset>
+    
+	<!--
+	<netRemoteCallHib name="updateFileOrFolderName" funcname="fileservice.updateFileOrFolderName" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.text;</method></netparam>   
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("updateFileOrFolderName: ",parent.fileExplorerItemId);
+            parent.completedRename();
+        </handler>
+    </netRemoteCallHib>
+     -->
+    
+	<method name="completed">
+		//this.refObj.fileExplorerItemId = fileExplorerItemId;
+		this.refObj.setAttribute("fileName",this.getText());
+		this.refObj.parent.parent.doOpen();
+		this.destroy();
+	</method>
+	
+	<method name="completedRename">
+		this.refObj.setAttribute("fileName",this.getText());
+		this.destroy();
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx
new file mode 100644
index 0000000..07e0640
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx
@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!-- ###################
+    Class fileExplorer
+ -->
+<class name="fileExplorer" extends="view" >
+    
+    <attribute name="parentFolderId" value="-2" type="number" />
+    
+    <attribute name="_selected" value="null" />
+    
+    <event name="onClose"/>
+    
+    <handler name="oninit">
+    	canvas.currentFileExplorer = this;
+        lz.Track.register(this._trashBar._trashIcon, canvas.currentImagesListdraw.currentTrackGroupName);
+    </handler>
+    
+    <handler name="onvisible">
+    	if ($debug) Debug.write("fileExplorer::onvisible this._selected ",this._selected);
+        //This is thrown whenever an uploaded Document has completed
+        if (this._selected == null) {
+            this.loadFiles();
+        } else {
+        	if (this._selected.isFolder) {
+            	this._selected.refresh();
+        	} else {
+        		this.loadFiles();
+        	}
+        }
+    </handler>
+    
+    <method name="selectItem" args="itemRef">
+        if (this._selected != null) {
+            this._selected.deselectItem();
+        }
+        
+        this._selected = itemRef;
+        this._selected.selectItem();
+        
+        //Set parent folder id for next Folder or uploaded file
+        if (this._selected.fileExplorerItemId == 0) {
+            if (this._selected.isOwner) {
+                this.parentFolderId = -2;
+            } else {
+                this.parentFolderId = 0;
+            }
+        } else {
+            this.parentFolderId = this._selected.fileExplorerItemId;
+        }
+        
+    </method>
+    
+    <method name="addFile">
+    	<![CDATA[
+	    	if ($debug) Debug.write("addFile :: ",this._selected,this.parentFolderId);
+	    	
+	    	if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	
+	    	var isOwner = 0;
+	    	if (this.parentFolderId == -2) {
+	    		isOwner = 1;
+	    	} else {
+	    		//Check if its a subfolder of a Owners Dir
+	    		if (this._selected != null) {
+	    			var checkForOwer = this._selected.checkForIsOwner();
+	    			if ($debug) Debug.write("checkForOwer ::",checkForOwer);
+	    			if (checkForOwer) {
+	    				isOwner = 1;
+	    			}
+	    		}
+	    	}
+	    	
+	    	if ($debug) Debug.write("addFile :: ",isOwner);
+	    	
+	        new lz.uploadWindowExplorer(canvas.main_content._content.inner,{
+	                            x:60,uploadmodule:canvas.uploadmoduleimg,
+	                            parentFolderId:this.parentFolderId,
+	                            isOwner:isOwner,
+	                            fileExplorerRef:this,
+	                            isOnlyImage:true,
+	                            servletName:'file.upload'
+	                        });
+        ]]>
+    </method>
+    
+    <method name="addFolder">
+    	<![CDATA[
+    		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+    
+	        if (this._selected == null) {
+	        	if ($debug) Debug.write("addFolder ::1 ",this._selected);
+	            this._filearea._contentarea.subviews[0].addFolder();
+	        } else {
+	            if (this._selected.isFolder) {
+	            	if ($debug) Debug.write("-1 this._selected.isFolder ",this._selected);
+	                this._selected.addFolder();
+	            } else {
+	            	if ($debug) Debug.write("-2 !this._selected.isFolder ",this._selected);
+	                this._selected.parent.parent.addFolder();
+	            }
+	        }
+	    ]]>
+    </method>
+    
+    <method name="loadWmlFile" args="itemObj">
+		this.selectItem(itemObj);
+		canvas._drawarea.prepareLoadWMLFile(itemObj); 
+		//canvas._drawarea.loadObjectList(itemObj); 
+	</method>
+
+    
+    <method name="loadDocument" args="itemObj">
+        this.selectItem(itemObj);
+        this._documentsTabs.setAttribute("height",20);
+        this._documentsTabs.setAttribute("visibility","visible");
+        this._documentsTabs.hideAll();
+        var t = new lz.presentationPreview(this,{
+                        documentObj:itemObj,
+                        refObjList:this
+                    });
+        //t.sendToBack();
+        //this._bg1.sendToBack();
+        //this._bg2.sendToBack();
+        this._documentsTabs.bringToFront();
+        return t;
+    </method>
+    
+    <method name="playVideo" args="itemObj">
+    	this.selectItem(itemObj);
+    	canvas._drawarea.playVideoSynced(itemObj.fileExplorerItemId,itemObj.fileName,itemObj.flvWidth,itemObj.flvHeight);
+    </method>
+    
+    <method name="loadFiles">
+    	<![CDATA[
+    	    if (this["getFileExplorerByRoomSelf"]) {
+                //this.getFileExplorerByRoom.doCall();
+                var downloadurl = canvas.getUrl()+'services/FileService/getFileExplorerByRoomSelfInternal?'
+                                +'SID='+canvas.sessionId
+                                +'&roomId='+hib.currentroomid;
+                
+                this.getFileExplorerByRoomSelf.setAttribute("src",downloadurl);
+                if ($debug) Debug.write("getFileExplorerByRoomSelf doRequest 1 ",downloadurl);
+                this.getFileExplorerByRoomSelf.doRequest();
+    	    }
+        ]]>
+    </method>
+    
+    <dataset name="getFileExplorerByRoomSelf" type="http" >
+    	<handler name="ondata" args="d">
+    		<![CDATA[
+    			if ($debug) Debug.write("ondata 1 ",this.src);
+                if ($debug) Debug.write("ondata 2 ",d);
+                parent.parseRootItems(parent.parseRootToRoomObject(d));
+            ]]>
+    	</handler>
+    </dataset>
+    
+    <method name="parseParentToRoomObject" args="dObj">
+        <![CDATA[
+            
+            var filesObject = new Array();
+            
+            var tFiles = dObj.childNodes[0].childNodes;
+            
+            if ($debug) Debug.write("parseParentToRoomObject tFiles ",tFiles);
+            
+            for (var i=0;i<tFiles.length;i++) {
+                
+                filesObject.push(this.parseToFileObj(tFiles[i].childNodes));
+                
+            }
+        
+            return filesObject;
+        ]]>
+    </method>
+    
+    <method name="parseRootToRoomObject" args="dObj">
+        <![CDATA[
+            
+            var roomObject = new Object();
+            
+            roomObject.userHome = new Array();
+            roomObject.roomHome = new Array();
+            roomObject.userHomeSize = 0;
+            roomObject.roomHomeSize = 0;
+            
+            var tFiles = dObj.childNodes[0].childNodes[0].childNodes;
+            
+            //if ($debug) Debug.write("tFiles ",tFiles);
+            
+            for (var i=0;i<tFiles.length;i++) {
+                
+                //if ($debug) Debug.write("nodeName",tFiles[i].nodeName);
+                
+                if (tFiles[i].nodeName == "userHomeSize") {
+                    if ($debug) Debug.write("roomHomeSize",tFiles[i].childNodes[0].data);
+                    roomObject.userHomeSize = Number(tFiles[i].childNodes[0].data);
+                } else if (tFiles[i].nodeName == "roomHomeSize") {
+                    if ($debug) Debug.write("roomHomeSize",tFiles[i].childNodes[0].data);
+                    roomObject.roomHomeSize = Number(tFiles[i].childNodes[0].data);
+                } else if (tFiles[i].nodeName == "roomHome") {
+                    roomObject.roomHome.push(this.parseToFileObj(tFiles[i].childNodes));
+                } else if (tFiles[i].nodeName == "userHome") {
+                    roomObject.userHome.push(this.parseToFileObj(tFiles[i].childNodes));
+                }
+                
+            }
+        
+            return roomObject;
+        ]]>
+    </method>
+    
+    <method name="parseToFileObj" args="dObj">
+        <![CDATA[
+        
+            var tFileObj = new Object();
+        
+            var type = "string";
+            
+            for (var i=0;i<dObj.length;i++) {
+                
+                type = "string";
+            
+                switch (dObj[i].nodeName){
+                    case "externalFileId":
+                        type = "int";
+                        break;
+                    case "fileExplorerItemId":
+                        type = "int";
+                        break;
+                    case "fileSize":
+                        type = "int";
+                        break;
+                    case "flvHeight":
+                        type = "int";
+                        break;
+                    case "flvWidth":
+                        type = "int";
+                        break;
+                    case "insertedBy":
+                        type = "int";
+                        break;
+                    case "isChart":
+                        type = "boolean";
+                        break;
+                    case "isFolder":
+                        type = "boolean";
+                        break;
+                    case "isImage":
+                        type = "boolean";
+                        break;
+                    case "isPresentation":
+                        type = "boolean";
+                        break;
+                    case "isStoredWmlFile":
+                        type = "boolean";
+                        break;
+                    case "isVideo":
+                        type = "boolean";
+                        break;
+                    case "ownerId":
+                        type = "int";
+                        break;
+                    case "parentFileExplorerItemId":
+                        type = "int";
+                        break;
+                    case "room_id":
+                        type = "int";
+                        break;
+                    default:
+                        break;
+                }
+                
+                //if ($debug) Debug.write("Obj attr ",dObj[i].nodeName,type);
+                
+                if (dObj[i].childNodes.length > 0) {
+                    switch (type) {
+                        case "int":
+                            tFileObj[dObj[i].nodeName] = Number(dObj[i].childNodes[0].data);
+                            break;
+                        case "boolean":
+                            tFileObj[dObj[i].nodeName] = (dObj[i].childNodes[0].data == "true") ? true : false;
+                            break;
+                        default:
+                            tFileObj[dObj[i].nodeName] = dObj[i].childNodes[0].data;
+                            break;
+                    }
+                } else {
+                    tFileObj[dObj[i].nodeName] = null;
+                }
+                
+                //if ($debug) Debug.write("Obj attr ",dObj[i].nodeName,tFileObj[dObj[i].nodeName]);
+                
+            }
+        
+            return tFileObj;
+            
+        ]]>
+    </method>
+    
+    <!--
+        Parse Items and generate Output
+     --> 
+    <method name="parseRootItems" args="roomObject">
+        <![CDATA[
+            this.clearContent();
+            
+            var homeSizeInMBytes = Math.round( (roomObject.userHomeSize / 1024 / 1024) * 100) / 100;
+            
+            this._userSpace._userHomeSize.setAttribute("text","" + homeSizeInMBytes + " MBytes");
+            
+            var roomHomeSizeInMBytes = Math.round( (roomObject.roomHomeSize / 1024 / 1024) * 100) / 100;
+            
+            this._userSpace._roomHomeSize.setAttribute("text","" + roomHomeSizeInMBytes + " MBytes");
+            
+            var homeIcon = new lz.rootFileExplorerItem(this._filearea._contentarea,{
+                                        open:true,
+                                        fileName:canvas.getLabelName(706),
+                                        name:'_home',
+                                        isRoot:true,
+                                        fileIcon:'file_explorer_folder_home_rsc',
+                                        isOwner:true,
+                                        refObjListRoot:this
+                                    });
+                                    
+            homeIcon.content.setAttribute("visibility","visible");
+            homeIcon.icon_folder_pre.setAttribute("frame",2);
+            homeIcon._folderIcon.setAttribute("frame",2);
+            
+            //Home area
+            for (var i=0; i<roomObject.userHome.length; i++) {
+                var fileExplorerItem = roomObject.userHome[i];
+                //if ($debug) Debug.write("fileExplorerItem, ",fileExplorerItem);
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(homeIcon.content,{
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                  new lz.wmlFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            isChart:true,
+                                            refObjListRoot:this                 
+                          });
+
+            	}
+            }
+            //Public - Room Area
+            var roomHome = new lz.rootFileExplorerItem(this._filearea._contentarea,{
+                                        open:true,
+                                        fileName:canvas.getLabelName(707),
+                                        name:'_roomHome',
+                                        isRoot:true,
+                                        fileIcon:'file_explorer_folder_network_rsc',
+                                        refObjListRoot:this
+                                    });
+                                    
+            roomHome.content.setAttribute("visibility","visible");
+            roomHome.icon_folder_pre.setAttribute("frame",2);
+            roomHome._folderIcon.setAttribute("frame",2);
+            
+            //Public area
+            for (var i=0; i<roomObject.roomHome.length; i++) {
+                var fileExplorerItem = roomObject.roomHome[i];
+                //if ($debug) Debug.write("fileExplorerItem.fileExplorerItemId, ",fileExplorerItem.fileExplorerItemId);
+                //if ($debug) Debug.write("fileExplorerItem, ",fileExplorerItem);
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(roomHome.content,{
+                                            fileName:fileExplorerItem.fileName,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                  new lz.wmlFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            isChart:true,
+                                            refObjListRoot:this                 
+                          });
+           		}
+            }
+        ]]>
+    </method>
+    
+    <method name="clearContent">
+        <![CDATA[
+            for (var eg in this._filearea._contentarea.subviews) {
+                this._filearea._contentarea.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <!--
+        Borders
+     -->
+               
+    <view name="_border2" x="0" y="${ 33 + parent._documentsTabs.height }" width="$once{ parent.width }" 
+          height="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />     
+    
+    <!--
+        Documents - Tabbar
+     --> 
+    <documentsTabBar name="_documentsTabs" y="14" width="$once{ parent.width }"
+                    visibility="hidden" />
+    	
+    
+    <!--
+        File Tree Content Tabbar
+     --> 
+     
+    <view name="_fileBar" layout="axis:x" x="0" y="${ 14 + parent._documentsTabs.height }">
+        <baseChooseIconView labelid="702" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_add_file_rsc">
+            <handler name="onclick">
+                if ($debug) Debug.write("Upload File");
+                parent.parent.addFile();
+            </handler>
+        </baseChooseIconView>
+        <baseChooseIconView labelid="703" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_add_folder_rsc" >
+            <handler name="onclick">
+                if ($debug) Debug.write("Add Folder");
+                parent.parent.addFolder();
+            </handler>
+        </baseChooseIconView>
+        <baseChooseIconView labelid="704" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_reload_rsc" >
+            <handler name="onclick">
+                if ($debug) Debug.write("Refresh Folder");
+                parent.parent.loadFiles();
+            </handler>
+        </baseChooseIconView>
+        <view bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="20" width="1" />
+    </view>
+    
+    <!--
+        File Tree Content Trashbar
+     --> 
+     
+    <view name="_trashBar" layout="axis:x" x="$once{ parent.width - 20 }" 
+          y="${ 14 + parent._documentsTabs.height }">
+        <baseChooseIconView name="_trashIcon" labelid="705" height="20" width="19" 
+                         resourceN="file_explorer_trash_rsc" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+            <attribute name="isTrashCan" value="true" type="boolean" />
+            <handler name="onclick">
+                if ($debug) Debug.write("Delete Folder and Files");
+            </handler>
+            <handler name="onmousetrackover">
+                //if ($debug) Debug.write("onmousetrackover");
+                canvas.currentImagesListdraw.currentDragItem.sendOverItem(this);
+                this.onmouseover.sendEvent();
+            </handler>
+            <handler name="onmousetrackout">
+                //if ($debug) Debug.write("onmousetrackout");
+                canvas.currentImagesListdraw.currentDragItem.sendOutItem(this);
+                this.onmouseout.sendEvent();
+            </handler>
+            <handler name="onmousetrackup">
+                if ($debug) Debug.write("onmousetrackup");
+                this.onmouseout.sendEvent();
+            </handler> 
+        </baseChooseIconView>
+        <view bgcolor="0xE0E0E0" height="20" width="1" />
+    </view>
+    
+    <!--
+        File Tree Content
+     --> 
+    
+    <view name="_filearea" x="1" y="${ 34 + parent._documentsTabs.height }" clip="true"
+          height="${ parent.height - 35 - parent._documentsTabs.height - parent._userSpace.height }" 
+          width="$once{ parent.width }">
+        
+        <attribute name="currentTrackGroupName" value="fileExplorer" type="string" />
+        
+        <attribute name="currentDragItem" value="null" />
+        
+        <handler name="oninit">
+            canvas.currentImagesListdraw = this;
+        </handler>
+        
+        <view name="_contentarea" layout="axis:y;inset:1" />
+        
+        <om_vscrollbar name="_scrollbar" />
+        <om_hscrollbar name="_hscrollbar" />
+    </view>
+    
+    <view name="_userSpace" height="40" valign="bottom" width="$once{ parent.width }">
+    	
+    	<labelText name="_userHomeSizeLabel" labelid="923" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_userHomeSize" align="right" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_roomHomeSizeLabel" labelid="924" y="20" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_roomHomeSize" align="right" y="20" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx
new file mode 100644
index 0000000..d7ec4ec
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="presentations/" />
+    <include href="tabbar/" />
+    
+    <include href="treeitems/" />
+    <include href="dynamicFileName.lzx" />
+    <include href="dragItemFileExplorer.lzx" />
+    <include href="fileExplorer.lzx" />
+
+    <resource name="drag_n_drop_rsc">
+    	<!-- APL Author sebawagner --> 
+        <frame src="resources/icon_drag_no.png" />
+        <!-- APL Author sebawagner --> 
+        <frame src="resources/icon_drag_add.png" />
+    </resource>    
+
+    <resource name="icon_folder_pre_rsc">
+    	<!-- APL Author sebawagner --> 
+        <frame src="resources/icon_folder_pre_closed_rsc.png" />
+        <!-- APL Author sebawagner --> 
+        <frame src="resources/icon_folder_pre_open_rsc.png" />
+    </resource>
+    
+    <resource name="icon_folder_rsc">
+    	<!-- FamFam Icon Set -->
+        <frame src="resources/folder.png" />
+        <frame src="resources/folder.png" />
+    </resource>
+    
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_video_rsc" src="resources/film.png" />	
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_add_file_rsc" src="resources/add.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_add_folder_rsc" src="resources/folder_add.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_reload_rsc" src="resources/arrow_refresh_small.png" />
+    <!-- 
+    WPZOOM Creative Commons Attribution-ShareAlike 3.0 Unported License.
+    http://www.wpzoom.com/wpzoom/new-freebie-wpzoom-developer-icon-set-154-free-icons/
+     -->
+    <resource name="file_explorer_trash_rsc" src="resources/trash.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="file_explorer_close_rsc" src="resources/remove_item.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_view_tree_rsc" src="resources/folder_explore.png" />   
+    
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_image_rsc" src="resources/photo.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_document_rsc" src="resources/report.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_wml_rsc" src="resources/map.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_chart_rsc" src="resources/chart_pie.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_rsc" src="resources/folder.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_network_rsc" src="resources/world_link.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_home_rsc" src="resources/house_link.png" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx
new file mode 100644
index 0000000..361ca67
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="baseListPresentationItemExplorer" extends="view" height="110" width="$once{ parent.width }" 
+    bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" focusable="true">
+    
+    <attribute name="uploadmodul" value="" type="string"/>
+    <attribute name="selectable" value="true" type="boolean" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="isoriginal" value="false" type="boolean" />
+    
+    <attribute name="uploadmoduleimgfolder" value="$once{ canvas.uploadmoduleimgfolder }" type="string" />
+    
+	<method name="formatURL" args="filename">
+	<![CDATA[
+		var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+			'fileName=' + encodeURIComponent(filename) +
+			'&moduleName=' + this.uploadmodul +
+			'&parentPath=' + encodeURIComponent(this.uploadmoduleimgfolder + '/') +
+			'&room_id=files' +
+			'&sid=' + canvas.sessionId;
+		////Debug.write("downloadurl: ",downloadurl);
+		return downloadurl;
+	]]>
+	</method>    
+
+    <handler name="onmouseover">
+        setCurrentMouseWheelObject(this.parent.parent._scrollbar);
+        if (!this.isselected){
+            this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+        }
+    </handler> 
+    <handler name="onmouseout">
+        disableCurrentMouseWheelObject();
+        if (!this.isselected){
+            this.setAttribute('bgcolor',canvas.getThemeColor('mainBackgroundColor'));
+        }
+    </handler>  
+       
+    <handler name="onfocus">
+        this.selectItem();
+    </handler>
+    <handler name="onblur">
+        this.disselectItem();
+    </handler>
+
+    <handler name="onkeyup" args="k"> 
+        //Debug.write("key " + k + " up");
+    </handler>
+    
+    <method name="selectItem">
+        //this.parent.selectItem(this);
+    </method>
+    <method name="disselectItem">
+        //this.parent.selectItem(this);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx
new file mode 100644
index 0000000..43aded1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="imageListInnerTableExplorer" extends="view" width="${ parent.width-2 }" 
+    height="${ parent.height-2 }" 
+	bgcolor="white" x="1" y="1" clip="true">
+    
+    <view name="_listcontent" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" width="$once{ parent.width }" >
+        <simplelayout name="_layout" axis="y" spacing="2" inset="1" />
+        
+        <!--
+	  	<netRemoteCallHib name="deleteFile" funcname="fileservice.deleteFile" remotecontext="$once{ canvas.thishib }" >   
+			<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+	  		<netparam><method name="getValue">return parent.String1;</method></netparam>
+        	<netparam><method name="getValue">return canvas.uploadmoduleimg;</method></netparam>
+			<netparam><method name="getValue">return parent.String2;</method></netparam>
+			<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        	
+	        <handler name="ondata" args="value">	
+	        	//Debug.write("  deleteFile: ",value);  
+				//Debug.write("  deleteFile: ",this.String1);    
+				//Debug.write("  deleteFile: ",this.String2);   
+		  		var tempSendArray = new Array ();
+		  		tempSendArray[0] = 'fileslist';
+		  		var nowTime = new Date();
+		  		var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+		  		tempSendArray[1] = datumsString;
+	  			//Debug.write("Setting Message");
+	  			tempSendArray[2] = 'newfile';
+	  			tempSendArray[3] = canvas.currentusename;
+		  		//Debug.write("send: ",tempSendArray);
+		  		canvas.objMessage = tempSendArray;
+		  		hib.sendMessage.doCall();         	          				
+	        </handler>	
+	  	</netRemoteCallHib> 
+	  	 -->	
+		
+		<method name="getconfirmationscode">
+			var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) {
+				 g["wmlfile"]=new Array();
+				 g["wmlfile"]["clearField"]=false;
+				 g["wmlfile"]["askagainclear"]=true;
+				 canvas.setUserData(g);
+			 }
+			 return g["wmlfile"];
+		</method>
+		
+		<method name="resetDefaultConfirmations">
+			var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+			 g["wmlfile"]["clearField"]=false;
+			 g["wmlfile"]["askagainclear"]=true;
+			 canvas.setUserData(g);
+	
+		</method>	
+		
+		<method name="sendConfirmation" args="yesno,askagain" >
+			
+			//Debug.write("clear yesno,askagain: ",yesno,askagain);
+			//can only be true in this case
+		
+			 var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+			 g["wmlfile"]["clearField"]=yesno;
+			 g["wmlfile"]["askagainclear"]=!askagain;
+			 canvas.setUserData(g);
+	
+			 if (yesno){
+				 //Debug.write("clear field!!");
+				canvas._drawarea.setModus('plain');
+				this.loadWmlObject.doCall();
+			 }
+		</method>				
+		
+		<method name="loadWmlObjectConfirm">
+			<![CDATA[
+			var storedImageDate = this.getconfirmationscode();
+			//Debug.write(" g[wmlfile] ",storedImageDate);
+			if (storedImageDate["clearField"] && !storedImageDate["askagainclear"]){
+				canvas._drawarea.setModus('plain');
+				this.loadWmlObject.doCall();
+			} else if (!storedImageDate["askagainclear"] && !storedImageDate["clearField"]){
+				//this case will never happen
+				this.loadWmlObject.doCall();
+			} else if (storedImageDate["askagainclear"]){
+				new lz.confirmationSingle(canvas.main_content._content.inner,{labelid:210,labeliderror:211,refObj:this});
+			} else {
+				new lz.confirmationSingle(canvas.main_content._content.inner,{labelid:210,labeliderror:211,refObj:this});
+			}
+			]]>
+		</method>
+		
+	  	<netRemoteCallHib name="loadWmlObject" funcname="fileservice.loadWmlObject" remotecontext="$once{ canvas.thishib }" >   
+			<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+			<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        	
+			  <netparam><method name="getValue">return parent.String1;</method></netparam>
+	        <handler name="ondata" args="value">	
+				<![CDATA[
+					if ($debug) Debug.write("  loadwmlObjectToStage ",value); 
+					canvas._drawarea.loadwmlObjectToStage(value,this.String1,hib.currentroomid,hib.conferencedomain,true,false);
+				]]>       	     				
+	        </handler>	
+	  	</netRemoteCallHib>
+        
+        
+        <method name="loadSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+            if ($debug) Debug.write("loadSWFPresentation");
+            canvas._drawarea.loadSWFPresentationSynced(url,fileName,moduleName,parentPath,room,domain,slideNumber,"");
+        </method>
+        
+        <method name="checkSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+            if ($debug) Debug.write("checkSWFPresentation");
+            return canvas._drawarea.checkSWFPresentation(url,fileName,moduleName,parentPath,room,domain,slideNumber);
+        </method>
+        
+        <method name="checkForOriginal" args="slideNumber">
+            <![CDATA[
+                var tWhiteBoard = false;
+                for (var i=0;i<this.subviews.length;i++){
+                    if (this.subviews[i].isoriginal){
+                        tWhiteBoard = this.subviews[i].checkSWFPresentation(slideNumber);
+                        if (!tWhiteBoard) {
+                            this.subviews[i].addSWFPresentation(slideNumber);
+                            break;
+                        }
+                    }
+                }
+                if ($debug) Debug.write("tWhiteBoard: ",tWhiteBoard);
+            ]]>
+        </method>
+		 	 
+    </view>
+
+    <om_vscrollbar name="_scrollbar" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx
new file mode 100644
index 0000000..c302cc9
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+	<include href="imageListInnerTableExplorer.lzx" />
+    
+    <include href="baseListPresentationItemExplorer.lzx" />
+    <include href="listPresentationThumbExplorer.lzx" />
+    <include href="listPresentationFilePDFExplorer.lzx" />
+    <include href="listPresentationFileOrigExplorer.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx
new file mode 100644
index 0000000..da90cb4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="listPresentationFileOrigExplorer" extends="listPresentationFilePDFExplorer">
+    
+    <attribute name="originalName" value="" type="string"/>
+    
+    <view name="_filesave_icon_original" x="120" y="6" resource="_filesave_icon_original_rsc"
+        onmouseover="" onmouseout="">
+        <handler name="onclick">
+            this.parent.loadFileByName(this.parent.originalName.filename);
+        </handler>
+        <labelTooltip labelid="247" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx
new file mode 100644
index 0000000..658ecb7
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="listPresentationFilePDFExplorer" extends="baseListPresentationItemExplorer" selectable="false">
+    
+    
+    <attribute name="pdfname" value="null" />
+    <attribute name="swfName" value="null" />
+    
+    <attribute name="fileExplorerItemId" value="-1" type="number" />
+    
+    <method name="loadFileByName" args="filename">
+    	<![CDATA[
+    		var lzURLToLoad = this.formatURL(filename)+"&fileExplorerItemId="+this.fileExplorerItemId;
+    		if ($debug) Debug.write("lzURLToLoad ",lzURLToLoad);
+        	lz.Browser.loadURL(lzURLToLoad,'_parent');
+        ]]>
+    </method>
+
+    <handler name="onclick">
+        this.parent.loadSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,1);
+    </handler>
+    
+    <method name="checkSWFPresentation" args="slideNumber">
+        return this.parent.checkSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,slideNumber);
+    </method>    
+    
+    <method name="addSWFPresentation" args="slideNumber">
+        this.parent.loadSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,slideNumber);
+    </method>    
+    
+    <view name="_filesave_icon_pdf" x="150" y="6" resource="_filesave_icon_pdf_rsc">
+        <handler name="onclick">
+            //Debug.write("this.parent.pdfname: ",this.parent.pdfname.filename);
+            //Debug.write("this.parent: ",this.parent);
+            this.parent.loadFileByName(this.parent.pdfname.filename);
+        </handler>
+        <labelTooltip labelid="248" />
+    </view>
+        
+    <labelText name="_Text" y="40" labelid="249" width="240" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx
new file mode 100644
index 0000000..2640814
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="listPresentationThumbExplorer" extends="baseListPresentationItemExplorer">
+    
+    <attribute name="thumbname" value="" type="string"/>
+    <attribute name="no" value="" type="string"/>
+    
+    <handler name="oninit">
+        this._thumb.setAttribute('src',this.formatURL(this.thumbname));
+    </handler>
+    
+    <handler name="onclick">
+        this.parent.checkForOriginal(Number(no));
+    </handler>    
+    
+    <image name="_thumb" x="10" y="1"/>
+    <text name="_thumbText" x="120" text="$once{ this.parent.no }" fontsize="10"
+        width="240" multiline="true"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx
new file mode 100644
index 0000000..9cf7dd1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="items/" />
+	<include href="presentationFilesList.lzx" />
+    <include href="presentationPreview.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx
new file mode 100644
index 0000000..bddaf0e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<!--  -->
+
+<class name="presentationFilesList" extends="view" 
+       x="0" y="40" height="${ parent.height-40 }" 
+        width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    
+    <event name="onclose" />
+    
+	<view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+		  x="1" y="1" bgcolor="white" />
+
+	<attribute name="uploadmodul" value="$once{ canvas.uploadmoduleimg }" type="string" />
+
+    <method name="addPresentationThumb" args="thumbName,no">
+        new lz.listPresentationThumbExplorer(this._table._listcontent,{isExplorer:true,
+        					uploadmodul:this.uploadmodul,thumbname:thumbName,no:no});
+    </method>
+    
+    <method name="addListpresentationFileOrig" args="originalName,pdfname,swfName,fileExplorerItemId">
+    	if ($debug) Debug.write("addListpresentationFileOrig ",originalName,pdfname,swfName,fileExplorerItemId);
+        new lz.listPresentationFileOrigExplorer(this._table._listcontent,{
+	        				isExplorer:true,
+	        				isoriginal:true,
+	        				uploadmodul:this.uploadmodul,
+	        				originalName:originalName,
+	        				pdfname:pdfname,
+	        				swfName:swfName,
+	        				fileExplorerItemId:fileExplorerItemId
+        				});
+    </method>
+    
+    <method name="addListpresentationFilePDF" args="pdfname,swfName,fileExplorerItemId">
+    	if ($debug) Debug.write("addListpresentationFilePDF ",originalName,pdfname,swfName,fileExplorerItemId);
+        new lz.listPresentationFilePDFExplorer(this._table._listcontent,{
+	        				isExplorer:true,
+	        				isoriginal:true,
+	        				uploadmodul:this.uploadmodul,
+	        				pdfname:pdfname,
+	        				swfName:swfName,
+	        				fileExplorerItemId:fileExplorerItemId
+        				});
+    </method>
+	    
+    <method name="resetList">
+    	this._table.destroy();
+    	new lz.imageListInnerTableExplorer(this,{name:'_table'});
+    	this._hideForNonMods.bringToFront();
+    </method>
+    
+    <method name="highlightItem" args="obj">
+    	<![CDATA[
+    		for (var i=0;i<this._table._listcontent.subviews.length;i++){
+    			if (!this._table._listcontent.subviews[i].isPpt){
+                    //Debug.write("this._table._listcontent.subviews[i]: ",this._table._listcontent.subviews[i]);
+    				this._table._listcontent.subviews[i]._thumbText.setAttribute('text','<font>'+this._table._listcontent.subviews[i].filenamePure+'</font>');
+                }
+    		}
+    		obj._thumbText.setAttribute('text','<font><b>'+obj.filenamePure+'</b></font>');
+    	]]>
+    </method>
+    
+	<imageListInnerTableExplorer name="_table" y="20"
+						 height="${ parent.height-22 }" />
+	
+    <view name="_trashBar" layout="axis:x" x="$once{ parent.width - 20 }" y="0">
+        <baseChooseIconView name="_trashIcon" labelid="718" height="20" width="19" 
+                         resourceN="file_explorer_close_rsc">
+            <handler name="onclick">
+                parent.parent.onclose.sendEvent();
+            </handler>
+        </baseChooseIconView>
+        <view bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" height="20" width="1" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx
new file mode 100644
index 0000000..fed200f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="presentationPreview" extends="view" x="1" y="33" clip="true"
+        height="${ parent.height - 34 }" width="$once{ parent.width - 2 }">
+	
+	
+	<attribute name="documentObj" value="null" />
+	<attribute name="refObjList" value="null" />
+	
+	<attribute name="miniButton" value="null" />
+	
+	<handler name="oninit">
+		this.addFolderSequence();
+		if ($debug) Debug.write("presentationPreview 1 ",this.width);
+		if ($debug) Debug.write("presentationPreview 2 ",this.height);
+		this.miniButton = this.refObjList._documentsTabs.addItem(this);
+	</handler>
+	
+	<method name="addFolderSequence">
+        <![CDATA[
+        if ($debug) Debug.write("foldername 1 ",this.documentObj.fileHash);
+        if ($debug) Debug.write("foldername 2 ",this.documentObj.fileExplorerItemId);
+        canvas.uploadmoduleimgfolder = '/'+this.documentObj.fileHash;
+        this.getPresentationPreviewFileExplorer.doCall();
+        ]]>
+    </method>
+    
+    <netRemoteCallHib name="getPresentationPreviewFileExplorer" funcname="fileservice.getPresentationPreviewFileExplorer" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue">return parent.parent.documentObj.fileHash;</method></netparam>
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("getPresentationPreviewFileExplorer -1-: ",value);
+            if ($debug) Debug.write("getPresentationPreviewFileExplorer -3-: ",parent.documentObj.fileHash);
+            parent.renderItems(value);
+        </handler>
+    </netRemoteCallHib>     
+    
+    <method name="renderItems" args="presentationObject" >
+        if ($debug) Debug.write("this: ",this);
+        if ($debug) Debug.write("presentationObject: ",presentationObject);
+        <![CDATA[
+            
+            if ($debug) Debug.write("presentationObject: ",presentationObject);
+        
+            if (presentationObject.pdfDocument==null){
+                //Is PDF only
+                //Debug.write("Is PDF only");
+                this._imageslistdraw.addListpresentationFilePDF(presentationObject.originalDocument,presentationObject.swfDocument,this.documentObj.fileExplorerItemId);
+            } else {
+                //Is original Document + PDF-Document
+                //Debug.write("Is original Document + PDF-Document");
+                this._imageslistdraw.addListpresentationFileOrig(presentationObject.originalDocument,presentationObject.pdfDocument,presentationObject.swfDocument,this.documentObj.fileExplorerItemId);
+            }
+        
+            for (var eg=0;eg<presentationObject.thumbs.thumbs.length;eg++){
+                ////Debug.write(presentationObject.thumbs.thumbs[eg].filename);
+                this._imageslistdraw.addPresentationThumb(presentationObject.thumbs.thumbs[eg].filename,(eg+1));
+            }
+        
+        ]]>   
+    </method> 
+    
+    <presentationFilesList name="_imageslistdraw" x="0" y="0" width="$once{ parent.width }"
+    				height="${ parent.height }" >
+    	<handler name="onclose">
+    		parent.miniButton.close();
+    	</handler>
+    </presentationFilesList>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png
new file mode 100644
index 0000000..fe00fa0
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png
new file mode 100644
index 0000000..b0ce7bb
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png
new file mode 100644
index 0000000..2c55c56
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png
new file mode 100644
index 0000000..0ba9391
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png
new file mode 100644
index 0000000..be2c271
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png
new file mode 100644
index 0000000..a12ae41
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png
new file mode 100644
index 0000000..784df30
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png
new file mode 100644
index 0000000..a72275c
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png
new file mode 100644
index 0000000..1e1b042
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png
new file mode 100644
index 0000000..f90ef25
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png
new file mode 100644
index 0000000..6c2aaaa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png
new file mode 100644
index 0000000..5031ff4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png
new file mode 100644
index 0000000..779ad58
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png
new file mode 100644
index 0000000..b92592b
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx
new file mode 100644
index 0000000..5b4e828
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseChooseIconView" extends="view" width="24" height="24" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  >
+    
+    <attribute name="resourceN" value="" type="string" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="labelid" value="0" type="number" />
+    
+    <handler name="oninit">
+        if (this.isselected){
+            this.onclick.sendEvent();
+        }
+    </handler> 
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+    </handler>
+    
+    <view name="_bg" x="1" y="1" width="$once{ parent.width-1 }" 
+          height="$once{ parent.height-2 }" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+    
+    <view x="2" y="2" resource="$once{ parent.resourceN }" />
+             
+    <labelTooltip labelid="$once{ parent.labelid }" inittwice="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx
new file mode 100644
index 0000000..60c8787
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="documentsLoaderIcon" extends="view" height="20" width="19" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  >
+    
+    <attribute name="resourceN" value="" type="string" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="labeltext" value="" type="string" />
+    
+    <attribute name="refObj" value="null" />
+    
+    <method name="hide">
+        this._bg.setAttribute("height",this.height-2);
+        parent.parent.hideSelection(this);
+    </method>
+    
+    <method name="setSelection">
+    	this._bg.setAttribute("height",this.height);
+    </method>
+    
+    <handler name="onclick">
+        parent.parent.sendSelection(this);
+    </handler>
+    
+    <handler name="oninit">
+        if (this.isselected){
+            this.onclick.sendEvent();
+        }
+    </handler> 
+    
+    <method name="close">
+    	parent.parent.close(this);
+    </method>
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("bgcolor",0xFFFFFF);
+    </handler>
+    
+    <view name="_bg" x="1" y="1" width="$once{ parent.width-1 }" 
+          height="$once{ parent.height-2 }" bgcolor="0xFFFFFF" />
+    
+    <view x="2" y="2" resource="$once{ parent.resourceN }" />
+             
+    <labelTooltip text="$once{ parent.labeltext }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx
new file mode 100644
index 0000000..3f4d6fc
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="documentsTabBar" extends="view" height="0" y="14" layout="axis:x" >
+    
+    <attribute name="currentItem"/>
+    
+    <method name="sendSelection" args="itemRef">
+        this.hideAll();
+        itemRef.setSelection();
+        if (itemRef.refObj == null) {
+            parent._filearea.setAttribute("visibility","visible");
+            parent._trashBar.setAttribute("visibility","visible");
+            parent._fileBar.setAttribute("visibility","visible");
+            parent._border2.setAttribute("visibility","visible");
+        } else {
+        	//if ($debug) Debug.write(itemRef.refObj);
+            itemRef.refObj.setAttribute("visibility","visible");
+        }
+    </method>
+    
+    <method name="hideSelection" args="itemRef">
+        if (itemRef.refObj == null) {
+            parent._filearea.setAttribute("visibility","hidden");
+            parent._trashBar.setAttribute("visibility","hidden");
+            parent._fileBar.setAttribute("visibility","hidden");
+            parent._border2.setAttribute("visibility","hidden");
+        } else {
+            itemRef.refObj.setAttribute("visibility","hidden");
+        }
+    </method>
+    
+    <method name="close" args="buttonRef">
+    	buttonRef.refObj.destroy();
+    	buttonRef.destroy();
+    	this._content.subviews[this._content.subviews.length-1].onclick.sendEvent();
+    </method>
+    
+    <method name="hideAll">
+        <![CDATA[
+            for (var eg in this._content.subviews) {
+                this._content.subviews[eg].hide();
+            }
+        ]]>
+    </method>
+    
+    <method name="addItem" args="tab">
+        var t = new lz.documentsLoaderIcon(this._content,{
+                   resourceN:tab.documentObj.fileIcon,
+                   refObj:tab,
+                   labeltext:tab.documentObj.fileName
+                });
+        t.onclick.sendEvent();
+        return t;
+    </method>
+    
+    <view name="_border2" x="0" y="19" options="ignorelayout: true"
+          width="$once{ parent.width }" height="2" 
+          bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" /> 
+           
+    <view name="_content" layout="axis:x">  
+        <documentsLoaderIcon name="_explorerTreeView" 
+            resourceN="file_explorer_view_tree_rsc" height="20" width="19" 
+            labeltext="$once{ canvas.getLabelName(717) }" />
+    </view>    
+    <view name="_border" height="20" width="1" 
+        bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx
new file mode 100644
index 0000000..7810c74
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="baseChooseIconView.lzx" />
+    <include href="documentsLoaderIcon.lzx" />
+    <include href="documentsTabBar.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx
new file mode 100644
index 0000000..647c45d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx
@@ -0,0 +1,579 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseFileExplorerItem" extends="view">
+	
+	<attribute name="refObjListRoot" value="null"/>
+	
+	<attribute name="isRoot" value="false" type="boolean" />
+	
+	<attribute name="fileIcon" type="string" value="string" />
+	
+	<attribute name="open" value="false" type="boolean" />
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	<attribute name="isOwner" value="false" type="boolean" />
+	
+	<attribute name="isFolder" value="true" type="boolean" />
+	<attribute name="isImage" value="false" type="boolean" />
+	<attribute name="isPresentation" value="false" type="boolean" />
+	<attribute name="isVideo" value="false" type="boolean" />
+	
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="fileHash" value="" type="string" />
+	
+	<attribute name="selected" value="false" type="boolean"/>
+	
+	<attribute name="singleClickDelegate" value="null" />
+	<attribute name="singleClickStarted" value="false" type="boolean" />
+	
+	<attribute name="isMouseDownDragAction" value="false" type="boolean"/>
+	
+	<!-- If this is true, then this item has been drag-n-droped and it makes no 
+	       sense to handle any single or double click event -->
+	<attribute name="mouseDownClickUsed" value="false" type="boolean" />
+	<attribute name="mouseDownClickDelegate" value="null" />
+	
+	<attribute name="isTrashCan" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		this.singleClickDelegate = new LzDelegate( this, "doSingleClick" );
+		this.resetClickDelegate = new LzDelegate( this, "doResetSingleClick" );
+		this.mouseDownClickDelegate = new LzDelegate( this, "doMouseDownClick" );
+		if (this.isFolder) {
+		    lz.Track.register(this._fileName, canvas.currentImagesListdraw.currentTrackGroupName);
+		}
+	</handler>
+	
+	<method name="doOpen">
+		this.open = true;
+		if (this.isFolder) {
+    		this.icon_folder_pre.setAttribute("frame",2);
+    		this.content.setAttribute("visibility","visible");
+			this._folderIcon.setAttribute("frame",2);
+		    this.loadFiles();
+		}
+	</method>
+	
+	<method name="doClose">
+		this.open = false;
+		if (this.isFolder) {
+            this.icon_folder_pre.setAttribute("frame",1);
+            this.content.setAttribute("visibility","hidden");
+            this._folderIcon.setAttribute("frame",1);
+		}
+	</method>
+	
+    <method name="doMouseDownClick" args="itemObj">
+    	<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	this.mouseDownClickUsed = true;
+	    	if ($debug) Debug.write("mouseDown CLICK Start Drag And Drop");
+	    	new lz.dragItemFileExplorer(canvas,{
+	    		        dragItemResource:this.fileIcon,
+	            	    refObj:this,
+	                    x:canvas.getMouse('x'),
+	                    y:canvas.getMouse('y')
+	            	});
+        ]]>
+    </method>
+    
+    <!--
+    	Check if this is the Owner
+     -->
+    <method name="checkForIsOwner">
+    	if (this.isRoot) {
+    		return this.isOwner;
+    	} else {
+    		return parent.parent.checkForIsOwner();
+    	}
+    </method>
+    
+    <!--
+    	Check if the user tries to move a file in its own tree,
+    	see moveFile
+     -->
+    <method name="checkForIsChild" args="compareFileExplorerItemId">
+    	if (this.isRoot) {
+    		return false;
+    	} else {
+    		if (this.fileExplorerItemId == compareFileExplorerItemId) {
+    			return true;
+    		} else {
+    			return parent.parent.checkForIsChild(compareFileExplorerItemId);
+    		}
+    	}
+    </method>
+    
+    <method name="deleteFile" args="labelid">
+    	<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	new lz.confirmationSingle(canvas,{
+	                           refObj:this,
+	                           labelid:labelid,
+	                           labeliderror:713,
+	                           showCheckBox:false
+	                        });
+    	]]>
+    </method>
+    
+    <method name="sendConfirmation" args="bool,askAgain">
+        if (bool) {
+            this.deleteFileOrFolder();
+        }
+    </method>
+    
+    <method name="deleteFileOrFolder">
+        <![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	
+            if ($debug) Debug.write("deleteFileOrFolder HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/deleteFileOrFolderSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId;
+            
+            this.deleteFileOrFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("deleteFileOrFolderSelf doRequest ",downloadurl);
+            this.deleteFileOrFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="deleteFileOrFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("deleteFileOrFolder: ",d);
+                parent.parent.parent.doOpen();
+                parent.refObjListRoot._selected = null;
+                parent.refObjListRoot.parentFolderId = -2;
+            ]]>
+        </handler>
+    </dataset>
+    
+	<method name="doSingleClick" args="itemObj">
+		this.singleClickStarted = false;
+		//Cannot change name for Root Icons
+		if (this.isRoot) {
+            return;
+        }
+		this.addOrUpdateFolderName(this.fileExplorerItemId,false);
+	</method>
+	
+	<method name="doResetSingleClick" args="itmeObj">
+		this.singleClickStarted = false;
+	</method>
+	
+	<method name="addFile">
+		this.refObjListRoot.selectItem(this);
+		this.refObjListRoot.addFile();
+	</method>
+	
+	<method name="addFolder">
+		<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	
+			if (this.isFolder) {
+				if ($debug) Debug.write("NEW this.fileExplorerItemId INTO ",this);
+				if ($debug) Debug.write("NEW this.fileExplorerItemId ",this.fileExplorerItemId);
+				if (this["icon_folder_pre"]) {
+	    			this.icon_folder_pre.setAttribute("frame",2);
+	                this.content.setAttribute("visibility","visible");
+	                this._folderIcon.setAttribute("frame",2);
+	        		var t = new lz.folderFileExplorerItem(this.content,{
+	        			            isOwner:this.isOwner,
+	        			            isFolder:true,
+	                    		    fileIcon:'icon_folder_rsc',
+	                                refObjListRoot:this.refObjListRoot,
+	                    		    fileName:canvas.getLabelName(712)
+	                    		});
+	                t.addOrUpdateFolderName(this.fileExplorerItemId,true);
+				}
+			}
+		]]>
+	</method>
+	
+	<method name="refresh">
+		this.doOpen();
+	</method>
+	
+	<method name="playVideo">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.playVideo(this);
+	]]>
+	</method>
+	
+	<method name="editFolderName">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.addOrUpdateFolderName(this.fileExplorerItemId,false);
+	]]>
+	</method>
+	
+	<method name="loadDocument">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadDocument(this);
+	]]>
+	</method>
+	
+	<method name="loadWmlFile">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadWmlFile(this);
+	]]>
+	</method>
+
+	<method name="loadChart">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadChart(this);
+	]]>
+	</method>
+	
+	<method name="addOrUpdateFolderName" args="fileExplorerItemId,isNew">
+		<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+		
+    		if ($debug) Debug.write("addOrUpdateFolderName ",fileExplorerItemId);
+    		var tWidth = this._fileName.width;
+    		if (tWidth < 160) {
+    			tWidth = 160;
+    		}
+    		var _y = this._fileName.getAttributeRelative("y",canvas);
+    		var _x = this._fileName.getAttributeRelative("x",canvas);
+    		if (isNew) {
+    			_y = 65; 
+    			_x += 10;
+    		}
+    		
+    		var t = new lz.dynamicFileName(canvas,{
+    			        parentFileExplorerItemId:fileExplorerItemId,
+    			        fileExplorerItemId:this.fileExplorerItemId, //Only used at update Name
+    			        isOwner:this.isOwner,
+    			        text:this.fileName,
+    			        isNew:isNew, //false means its a renaming
+    			        refObj:this,width:tWidth+10,
+            		    x:_x,
+            		    y:_y
+            		});
+            		
+            lz.Focus.setFocus(t,true);
+            lz.ModeManager.makeModal(t);
+            
+        ]]>
+	</method>
+	
+	<method name="toggleOpen" args="setSelection">
+		<![CDATA[
+			if (this.mouseDownClickUsed) {
+				if ($debug) Debug.write("mouseDownClickUsed RESET TO DEFAULT BUT DO NO ACTION Cause its a Drag and Drop Event");
+				this.mouseDownClickUsed = false;
+				return;
+			}
+			
+			if (this.singleClickStarted) {
+	            if ($debug) Debug.write("Is this selected => Double Click !!!");
+	            this.singleClickStarted = false;
+	            lz.Timer.removeTimer( this.singleClickDelegate );
+	            
+	            if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+		    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+		    		return;
+		    	}
+	            
+	            if (this.isVideo) {
+	            	this.playVideo();
+	            } else if (this.isWmlFile){
+					this.loadWmlFile();
+				} else if (this.isFolder) {
+	                this.doSingleClick(null);
+	            } else if (this.isPresentation) {
+	                this.loadDocument();
+	            }
+	        } else {
+	        	
+	        	if (this.isFolder){
+	        		if (!this.open) {
+	        			this.doOpen();
+	        		} else {
+	        			if (setSelection) {
+	            			if (this.selected) {
+	            				if ($debug) Debug.write("Is this selected => Do Edit !!!");
+	            				this.singleClickStarted = true;
+	            			    lz.Timer.addTimer( this.singleClickDelegate, 300 );
+	            			} else {
+	            				
+	            				this.singleClickStarted = true;
+	            				lz.Timer.addTimer( this.resetClickDelegate, 300 );
+	            			}
+	        			} else {
+	        				this.doClose();
+	        			}
+	        		}
+	        	} else {
+	        		if (setSelection) {
+	                    if (this.selected) {
+	                        if ($debug) Debug.write("Is this selected => Do Edit !!!");
+	                        this.singleClickStarted = true;
+	                        lz.Timer.addTimer( this.singleClickDelegate, 300 );
+	                    } else {
+	                        this.singleClickStarted = true;
+	                        lz.Timer.addTimer( this.resetClickDelegate, 300 );
+	                    }
+	                }
+	        	}
+			}
+			
+			if (setSelection) this.refObjListRoot.selectItem(this);
+		]]>
+	</method>
+	
+	<method name="selectItem">
+		this.selected = true;
+		this._fileName.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+	</method>
+	
+	<method name="deselectItem">
+		this.selected = false;
+		if (this["_fileName"]) {
+            this._fileName.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        } else {
+            if ($debug) Debug.warn("deselectItem:: _fileName is NULL ",this);
+        }
+    </method>
+	
+	<method name="clearContent">
+        <![CDATA[
+            for (var eg in this.content.subviews) {
+                this.content.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <method name="loadFiles">
+    	<![CDATA[
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/getFileExplorerByParentSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&parentFileExplorerItemId='+this.fileExplorerItemId
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner;
+            
+            this.getFileExplorerByParentSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("getFileExplorerByParentSelf doRequest ",downloadurl);
+            this.getFileExplorerByParentSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="getFileExplorerByParentSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                parent.renderFilesAndFolders(canvas.currentFileExplorer.parseParentToRoomObject(d));
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+        parent.parseRootItems(canvas.currentFileExplorer.parseToRoomObject(d));
+	 -->
+	<!--
+	   public List<FileExplorerItem> getFileExplorerByParent(String SID, Long parentFileExplorerItemId, 
+	               Long room_id, Boolean isOwner) {
+	<netRemoteCallHib name="getFileExplorerByParent" funcname="fileservice.getFileExplorerByParent" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam>  
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>  
+        <netparam><method name="getValue">return parent.parent.isOwner;</method></netparam>         
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("getFileExplorerByParent: ",value);
+            parent.renderFilesAndFolders(value);
+        </handler>
+    </netRemoteCallHib> 
+     --> 
+    
+    <method name="renderFilesAndFolders" args="roomHome">
+        <![CDATA[
+            this.clearContent();
+            
+            // Folder area
+            for (var i=0; i<roomHome.length; i++) {
+                var fileExplorerItem = roomHome[i];
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(this.content,{
+                                            fileName:fileExplorerItem.fileName,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this.refObjListRoot                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                	new lz.chartFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            refObjListRoot:this.refObjListRoot                	
+            							});
+
+            	}
+            }
+        ]]>
+    </method>
+    
+	
+	<view name="icon_folder_pre" 
+		  visibility="$once{ (parent.isFolder) ? 'visible' : 'hidden' }"
+		  resource="icon_folder_pre_rsc" frame="1" >
+		<handler name="onclick">
+			parent.toggleOpen(false);
+		</handler>
+	</view>
+	
+	<view name="_folderIcon" resource="$once{ parent.fileIcon }" x="16" y="2" >
+		<handler name="onmousedown">
+			if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+			parent.toggleOpen(false);
+		</handler>
+	</view>
+	
+	<method name="getDownloadURL" args="fName, parentPath">
+	<![CDATA[
+		var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+			'fileName=' + fName +
+			'&moduleName=videoconf1' +
+			'&parentPath=/' + parentPath +
+			'&room_id=files'+
+			'&sid=' + canvas.sessionId +
+			"&fileExplorerItemId=" + this.fileExplorerItemId;
+		if ($debug) Debug.write("formatURL: ", this, downloadurl);
+		return downloadurl;
+	]]>
+	</method>
+
+	<method name="downloadDocumentByName">
+	<![CDATA[
+		var fName = this.fileHash;
+		var pos = this.fileName.lastIndexOf(".");
+		var strlen = this.fileName.length;
+		if (pos != -1 && strlen != pos + 1) {
+			var ext = this.fileName.split(".");
+			var len = ext.length;
+			var extension = ext[len - 1].toLowerCase();
+			fName += "." + extension;
+		}
+		lz.Browser.loadURL(this.getDownloadURL(fName, this.fileHash + '/'), '_parent');
+	]]>
+	</method>
+	
+	<method name="downloadImageByName">
+		lz.Browser.loadURL(this.getDownloadURL(this.fileHash, ''), '_parent');
+	</method>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx
new file mode 100644
index 0000000..bd2d17f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+  <class name="chartFileExplorerItem" extends="baseFileExplorerItem"
+    isFolder="true">
+
+    <attribute name="isChartFile" type="boolean" value="true" />
+
+    <text name="_fileName" x="36" text="${ parent.fileName }"
+      fontsize="10" resize="true" y="1">
+      <contextmenu>
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(711) }"
+          onselect="parent.parent.parent.editFolderName()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(708) }"
+          separatorbefore="true" onselect="parent.parent.parent.addFile()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(709) }"
+          onselect="parent.parent.parent.addFolder()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(710) }"
+          onselect="parent.parent.parent.deleteFile(719)" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(1314) }"
+          onselect="parent.parent.parent.loadChart()" />
+
+      </contextmenu>
+
+      <handler name="onmousetrackover">
+        Debug.write("onmousetrackover");
+        canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+        this.setAttribute("bgcolor",0x93FE92);
+      </handler>
+
+      <handler name="onmousetrackout">
+        Debug.write("onmousetrackout");
+        canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+        this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+      </handler>
+
+      <handler name="onmousetrackup">
+        if ($debug) Debug.write("onmousetrackup");
+        this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+      </handler>
+
+      <handler name="onmousedown">
+        if (parent.isRoot) {
+          return;
+        }
+        lz.Timer.addTimer(parent.mouseDownClickDelegate, 300);
+      </handler>
+      <handler name="onmouseup">
+        if (parent.isRoot) {
+          return;
+        }
+        lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+      </handler>
+      <handler name="onclick">
+        parent.toggleOpen(true);
+      </handler>
+    </text>
+
+    <view name="content" x="12" y="18" layout="axis:y;inset:1"
+      visibility="hidden">
+    </view>
+  </class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx
new file mode 100644
index 0000000..3760c1e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="documentFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<method name="formatURL" args="filename">
+        <![CDATA[
+            var uploadmoduleimgfolderVar = '/' + this.fileHash;
+            var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                'fileName=' + encodeURIComponent(this.fileHash + ".swf") +
+                '&moduleName=' + 'videoconf1' + 
+                '&parentPath=' + encodeURIComponent(uploadmoduleimgfolderVar + '/' )+
+                '&room_id=files'+ 
+                '&sid='+canvas.sessionId;
+            ////Debug.write("downloadurl: ",downloadurl);
+            return downloadurl;
+        ]]>
+    </method>    
+    
+	<method name="loadDocumentToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var uploadmoduleimgfolderVar = '/' + this.fileHash;
+            
+            if ($debug) Debug.write("loadDocumentToWhiteboard ",this.fileName);
+            
+    		canvas._drawarea.loadSWFPresentationSynced(this.formatURL(this.fileHash),this.fileHash + ".swf",
+    		              "videoconf1",uploadmoduleimgfolderVar,"files",hib.conferencedomain,1,
+                          this.fileName);
+		} else {
+			new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+		}
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" onselect="parent.parent.parent.editFolderName()" />
+			
+            <!-- Load File To Whiteboard missing -->
+			<contextmenuitem name="_openDocument" caption="$once{ canvas.getLabelName(716) }" separatorbefore="true" onselect="parent.parent.parent.loadDocument()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" onselect="parent.parent.parent.deleteFile(719)" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(867) }" onselect="parent.parent.parent.downloadDocumentByName()" />
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx
new file mode 100644
index 0000000..4973ecc
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="folderFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(708) }" 
+            				 separatorbefore="true"
+            				 onselect="parent.parent.parent.addFile()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(709) }" 
+            				 onselect="parent.parent.parent.addFolder()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(710) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx
new file mode 100644
index 0000000..c89b673
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="imageFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl()+'DownloadHandler?' +
+            		'fileName='+ this.fileHash + 
+                    '&moduleName='+ "videoconf1" +
+                    '&parentPath='+ '/' +
+                    '&room_id=files' +
+                    '&sid='+canvas.sessionId;
+        ]]>
+    </method>
+    
+	<method name="loadImageToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var mouse_x = canvas._drawarea.getMouse("x");
+    		var mouse_y = canvas._drawarea.getMouse("y");
+    		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(),mouse_x,mouse_y,
+    		          canvas.getUrl()+'DownloadHandler',
+    		          this.fileHash,"videoconf1","/","files",hib.conferencedomain);
+		} else {
+            new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+        }
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" onselect="parent.parent.parent.editFolderName()" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" onselect="parent.parent.parent.deleteFile(719)" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(867) }" onselect="parent.parent.parent.downloadImageByName()" />
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx
new file mode 100644
index 0000000..ad858e9
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="baseFileExplorerItem.lzx" />
+    <include href="folderFileExplorerItem.lzx" />
+    <include href="imageFileExplorerItem.lzx" />
+    <include href="videoFileExplorerItem.lzx" />
+    <include href="documentFileExplorerItem.lzx" />
+    <include href="rootFileExplorerItem.lzx" />
+    <include href="wmlFileExplorerItem.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx
new file mode 100644
index 0000000..4ecb0ef
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="rootFileExplorerItem" extends="baseFileExplorerItem" isFolder="true" isRoot="true">
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+                              				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(708) }" 
+            				 separatorbefore="true"
+            				 onselect="parent.parent.parent.addFile()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(709) }" 
+            				 onselect="parent.parent.parent.addFolder()" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx
new file mode 100644
index 0000000..72586d3
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="videoFileExplorerItem" extends="baseFileExplorerItem" isFolder="true" isVideo="true">
+	
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl()+'DownloadHandler?' +
+            		'fileName='+ this.fileHash + 
+                    '&moduleName='+ "videoconf1" +
+                    '&parentPath='+ '/' +
+                    '&room_id=files' +
+                    '&sid='+canvas.sessionId;
+        ]]>
+    </method>
+    
+	<method name="loadImageToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var mouse_x = canvas._drawarea.getMouse("x");
+    		var mouse_y = canvas._drawarea.getMouse("y");
+    		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(),mouse_x,mouse_y,
+    		          canvas.getUrl()+'DownloadHandler',
+    		          this.fileHash,"videoconf1","/","files",hib.conferencedomain);
+		} else {
+            new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+        }
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(1358) }" 
+							 onselect="parent.parent.parent.playVideo()" />
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx
new file mode 100644
index 0000000..4cf5907
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="wmlFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<attribute name="isWmlFile" type="boolean" value="true"/>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            	
+            			 
+			<contextmenuitem caption="$once{ canvas.getLabelName(1314) }" 
+							 onselect="parent.parent.parent.loadWmlFile()" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/library.lzx b/WebContent/src/modules/conference/tabcontent/library.lzx
new file mode 100644
index 0000000..edee094
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- FamFam Icon Set -->
+	<resource name="messagebox_info_rsc" src="resources/information.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="_filesave_icon_pdf_rsc" src="resources/page_white_acrobat.png" />
+	<!-- APL Author sebawagner -->
+	<resource name="_filesave_icon_original_rsc" src="resources/download.png" />
+
+	<include href="fileexplorer/"/>
+	<include href="chat/" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/resources/download.png b/WebContent/src/modules/conference/tabcontent/resources/download.png
new file mode 100644
index 0000000..0c9013e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/download.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/resources/information.png b/WebContent/src/modules/conference/tabcontent/resources/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/information.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png b/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png
new file mode 100644
index 0000000..8f8095e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png
Binary files differ
diff --git a/WebContent/src/modules/conference/testsetup/library.lzx b/WebContent/src/modules/conference/testsetup/library.lzx
new file mode 100644
index 0000000..93469dd
--- /dev/null
+++ b/WebContent/src/modules/conference/testsetup/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="testSetup.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/testsetup/testSetup.lzx b/WebContent/src/modules/conference/testsetup/testSetup.lzx
new file mode 100644
index 0000000..382e155
--- /dev/null
+++ b/WebContent/src/modules/conference/testsetup/testSetup.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+#########################################
+
+Test the setup values before you enter a room => is moved to the SWF10 app
+
+The only thing remaining here to do, is to load the correct server 
+RTMP-host, RTMP/RTMPT-port for the session
+
+ -->
+ 
+<class name="testSetup" extends="view" 
+    x="$once{ parent.width/2 - 300 }" y="100" 
+    width="600" height="400">
+
+    <attribute name="roomClassName" type="string" value="" />
+    
+    <attribute name="roomObj" value="null"/>
+    
+    <attribute name="forceTest" value="false" type="boolean" />
+    
+    <attribute name="isDirectLink" value="false" type="boolean" />
+    
+    <!--- @keywords private if doJustClose is true the confirmation will be wait and 
+    then the window just closed -->
+    <attribute name="doJustClose" value="false" type="boolean" />
+    
+	<handler name="oninit">
+	<![CDATA[
+		clearStageContent();
+		if ($debug) Debug.warn("roomClassname : ", this.roomClassName);
+		if ($debug) Debug.warn("canvas.currentRoomObj will be : ", this.roomObj);
+		canvas.currentRoomObj = this.roomObj;
+		
+		new lz[this.roomClassName](canvas.main_content._content.inner, {
+					roomobj:this.roomObj
+					});
+		this.destroy();
+	]]>
+	</handler>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/typing.lzx b/WebContent/src/modules/conference/typing.lzx
new file mode 100644
index 0000000..d8a0505
--- /dev/null
+++ b/WebContent/src/modules/conference/typing.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="typingIcon" extends="view" width="30" height="16" resource="typing_rsc">
+	<attribute name="timerDelegate" value="null"/>
+	<attribute name="frm" value="0" type="number" />
+	          
+    <handler name="oninit">
+		//if ($debug) Debug.write("typingIcon::oninit ");
+    	startTyping();
+    </handler>
+    
+    <handler name="ondestroy">
+		//if ($debug) Debug.write("typingIcon::ondestroy ");
+		stopTyping();
+    </handler>
+    
+	<handler name="onvisible">
+		//if ($debug) Debug.write("typingIcon::onvisible ", this.visible);
+		toggle(this.visible);
+	</handler>
+	
+	<method name="startTyping">
+	<![CDATA[
+		//if ($debug) Debug.write("typingIcon::startTyping ");
+		if (timerDelegate == null && this.visible) {
+			frm = 0;
+			this.timerDelegate = new LzDelegate(this, "changeFrame");
+			lz.Timer.addTimer(this.timerDelegate, 1000);
+		}
+	]]>
+	</method>
+
+	<method name="stopTyping">
+		//if ($debug) Debug.write("typingIcon::stopTyping ");
+		if (timerDelegate != null) {
+			lz.Timer.removeTimer(timerDelegate);
+			timerDelegate = null;
+		}
+	</method>
+	 
+	<method name="toggle" args="v">
+		//if ($debug) Debug.write("typingIcon::toggle ", this.visible);
+		if (v) {
+			startTyping();
+		} else {
+			stopTyping();
+		}
+	</method>
+	
+	<method name="changeFrame" args="ignore=null">
+		//if ($debug) Debug.write("typingIcon::frm ", frm);
+		frm = (++frm) % 4;
+		this.setAttribute('frame', frm + 1);
+		lz.Timer.resetTimer(timerDelegate, 1000);
+		if (frm == 3) {
+			this.setAttribute('visible', false);
+		}
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx
new file mode 100644
index 0000000..d82373c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx
@@ -0,0 +1,1529 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDraw" extends="view" >
+
+	<attribute name="currentlayer" value="null" />
+	<attribute name="layers" value="null" />
+	
+	<attribute name="redolayers" value="null" />
+
+  	<attribute name="mx" type="number" value="0"/>
+  	<attribute name="my" type="number" value="0"/>
+  	<attribute name="prevx" type="number" value="0"/>
+  	<attribute name="prevy" type="number" value="0"/>
+  	
+  	<!--- If true it will try to load the ObjectIdentifier Extension from the Server -->
+  	<attribute name="isRemoteOID" value="false" type="boolean" />
+  	
+  	<attribute name="startx" value="0" type="number" />
+  	<attribute name="starty" value="0" type="number" />
+  	<attribute name="endx" value="0" type="number" />
+  	<attribute name="endy" value="0" type="number" />
+  	
+  	<attribute name="restricted" value="false" type="boolean"/>
+  	
+  	<!-- This Counter just adds, it dosen't shows the absolute number of items
+  		(ask this.layers.length to get the number of drawings) -->
+  	<attribute name="counter" value="0" type="number" />
+  	
+  	<event name="onupdateScale" />
+  	
+  	<attribute name="showGrid" type="boolean" value="false"/>
+  	<attribute name="isSnapToGrid" type="boolean" value="false"/>
+	<attribute name="gridWidth" value="24" type="number" />
+	
+	<attribute name="copyObject" value="null"/>
+	<attribute name="selectedObjects" value="null"/>
+	
+	<attribute name="ObjectByName" value="null" />
+
+  	<method name="getCounter">
+		//Debug.write("### getCounter :",this.counter);
+		var now = new Date();
+		return "_"+now.getTime();
+  	</method>
+  	
+  	<!--
+  	 not needed anymore, Issue 507
+    <netRemoteCallHib name="getOID" funcname="getOID" showLoading="false"
+    				  remotecontext="$once{ canvas.thishib }" > 
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if($debug) Debug.write("getOID: ",value);
+                parent.counter = value;
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+     -->
+	
+	<method name="compareAndSetCounter" args="c">
+		<![CDATA[
+			if (c>this.counter) this.counter = c;
+		]]>
+	</method>
+  	
+	<attribute name="mousetracker_del" value="$once{ new LzDelegate(this, 'trackmouse' )}" />
+	
+	<!-- 
+	This is the very basic decision what to do
+	the modus pointer is only  a temp modus which is inited while draging
+	a new selected object
+	 -->
+	<attribute name="drawmodus" value="hand" type="string" />
+	
+	<!-- This List holds all ActionObject
+		currently paintings
+				  letters -->
+	<attribute name="baseactionobjectList" value="null" />
+	<attribute name="baseredoactionobjectList" value="null" />
+	
+	<!-- This List hold a reference to all 
+		Array of Drawing Action, it is needed for coping the view and undo/redo -->
+	<attribute name="basetempactionobjectList" value="null" />
+	
+	<attribute name="basdrawredoView" value="null" />
+	
+	<attribute name="hasprevious" value="false" type="boolean" />
+	<attribute name="hasenext" value="false" type="boolean" />
+	
+	<attribute name="doClearAll" value="false" type="boolean" />
+	<attribute name="doClearSlide" value="false" type="boolean" />
+	
+	<!-- For the dragging resizeing there is a bounding box -->
+	<attribute name="boundingIsActive" value="false" type="boolean" />
+	<attribute name="boundingref" value="null" />
+	
+	<!-- For sending messages in shared modus -->
+	<method name="onsharedMessage" args="action,obj" />
+	
+	<!-- this event must be triggered AFTER
+		the nesseccary room + domain for this conferenceView is set
+		-->
+	<event name="onopenWhiteBoard" />
+	
+	<attribute name="isDragging" value="false" type="boolean"/>
+	
+	<attribute name="last_x" value="0" type="number" />
+	<attribute name="last_y" value="0" type="number" />
+	
+	<!-- ############
+		init
+	 -->
+	<handler name="oninit">
+		if (this.isRemoteOID){
+            //wrong reference, swagner 20.09.2008
+			//this.getOID.doCall();
+		}
+        //Debug.write("********** this oninit: ",this);
+		this.basdrawredoView = new LzView(canvas,{visible:false,y:440});
+		this.layers = new Array();
+		this.last_x = this.x;
+		this.last_y = this.y;
+		this.redolayers = new Array();
+		this.baseactionobjectList = new Array();
+		this.baseredoactionobjectList = new Array();
+	</handler>
+      
+    <method name="clearSlideOnly">
+    	<![CDATA[
+            
+            var itemsToDelete = this.getCurrentSlideAnnotations();
+            
+            this.onsharedMessage('clearSlide',itemsToDelete); 
+            
+            this.clearSlideRemote(itemsToDelete);
+        ]]>
+    </method>  
+            
+	<method name="clearAll">
+		<![CDATA[
+			this.onsharedMessage('clear',null);	
+			this.clearRemote();
+		]]>
+	</method>
+	
+	<method name="getCurrentSlideAnnotations">
+		<![CDATA[
+		
+		    var currentSlideNumber = -1;
+		
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][0] == "swf") {
+            		currentSlideNumber = this.baseactionobjectList[i][8];
+            		break;
+            	}
+            	
+            }
+            
+            var itemsToDelete = new Array();
+            
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "clipart"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                        	
+                	var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                	
+                	if (swfObj.slide == currentSlideNumber) {
+                		itemsToDelete.push(this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]);
+                	}
+                	
+                }
+            	
+            }
+            
+            return itemsToDelete;
+		]]>
+	</method>
+	
+	<method name="clearSlideRemote" args="itemsToDelete">
+        <![CDATA[
+        
+            var indexOfItemsToDelete = new Array();
+        
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+                
+            	
+            	for (var k=0;k<itemsToDelete.length;k++) {
+            	
+                    if (this.baseactionobjectList[i][this.baseactionobjectList[i].length-1] == itemsToDelete[k]) {
+                                
+                        indexOfItemsToDelete.push(i);
+                        
+                    }
+                
+            	}
+                
+            }
+            
+            for (var i=indexOfItemsToDelete.length-1;i>=0;i--) {
+                
+                var itemToDelete = this.baseactionobjectList[indexOfItemsToDelete[i]];
+                
+                var refObj = this.getObjectByName(itemToDelete[itemToDelete.length-1]);
+                
+                refObj.destroy();
+                
+                this.baseactionobjectList.splice(indexOfItemsToDelete[i],1);
+                
+            }   
+        ]]>
+    </method>        
+	
+	<method name="clearRemote">
+        <![CDATA[
+        
+            if (this.boundingref!=null) this.boundingref.removeIt();
+            while (this.subviews.length > 1) {
+                this.subviews[1].prepareForDelete.sendEvent();
+                this.subviews[1].destroy();
+            }
+            while (this.basdrawredoView.subviews.length > 0) {
+                this.basdrawredoView.subviews[0].destroy();
+            }   
+            
+            this.setAttribute("x",0);
+            this.setAttribute("y",0);
+            
+            this.getDisplayObject()._xscale = 100;
+            this.getDisplayObject()._yscale = 100;
+            
+            this.onupdateScale.sendEvent(null);
+            
+            parent.parent.zoombox.setWhiteboardValues(true,100);
+            
+            this.layers = new Array();
+            this.redolayers = new Array();
+            this.baseactionobjectList = new Array();
+            this.baseredoactionobjectList = new Array();    
+            this.checkStepLayers(); 
+            this.clearDocumentsBar();
+        ]]>
+    </method>
+	
+	<method name="doAction" args="modi">
+		if (modi=='saveobj'){
+			if (this.sendObject) this.sendObject.sendEvent();
+		} else if (modi=='loadobj'){
+		
+		}
+	</method>
+	
+	<method name="setModusWithUpdate" args="modi">
+		var paintToolBar = this.getPaintToolBar();
+		paintToolBar.updateToolSelection(modi);
+		this.setModus(modi);
+	</method>
+	
+	<method name="setModus" args="modi">
+		<![CDATA[
+		  
+		    if ($debug) Debug.write("setModus AAA: ",this.baseactionobjectList);
+		
+    		//check if previous modi has been txt, which might not be saved to the board yet
+            var previousModus = this.drawmodus;
+    		if ($debug) Debug.write("setModus: ",modi);
+    		if (this.drawmodus=='letter'){
+    			if (this.letterObjectIsActive){
+    				if ($debug) Debug.write("setModus:drawtoArray",modi);
+    				this.currentletterObj.drawtoArray();
+    			}
+    		}
+    		
+    		if (modi != 'print' && modi != 'plain') {
+    		    this.setAttribute('drawmodus',modi);
+    		} else if (modi == 'print') {
+    			var my_pj = new PrintJob();
+                var myResult = my_pj.start();
+                
+                if ($debug) Debug.write("myResult ",myResult);
+                
+                if (myResult) {
+                	
+                	var mc = this.getDisplayObject();
+                	
+                	// boolean to track whether addPage succeeded, change this to a counter
+                    // if more than one call to addPage is possible
+                    var pageAdded:Boolean = false;
+                
+                    // check the user's printer orientation setting
+                    // and add appropriate print area to print job
+                    if (my_pj.orientation == "portrait") {
+                        // Here, the printArea measurements are appropriate for an 8.5" x 11"
+                        // portrait page.
+                        pageAdded = my_pj.addPage(mc._parent,{xMin:0,xMax:600,yMin:0,yMax:800});
+                    } else {
+                        // my_pj.orientation is "landscape".
+                        // Now, the printArea measurements are appropriate for an 11" x 8.5"
+                        // landscape page.
+                        pageAdded = my_pj.addPage(mc._parent,{xMin:0,xMax:750,yMin:0,yMax:600});
+                    }
+                
+                    // send pages from the spooler to the printer
+                    if (pageAdded) {
+                        my_pj.send(); 
+                    }
+
+                	
+                	//if ($debug) Debug.write("mc ",mc);
+                	//if ($debug) Debug.write("mc.name ",mc._name);
+                	
+                    //myResult = my_pj.addPage(mc, null, {printAsBitmap:true}, 1);
+                    //my_pj.send();
+                    delete my_pj;
+                }
+    		}
+    		
+    		if (modi=='plainSlide'){
+    			this.doClearSlide = true;
+                this.doClearAll = false;
+    			new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1339,labeliderror:1359,
+                                           refObj:this,showCheckBox:false});
+    			
+    			this.setAttribute('drawmodus',previousModus);
+    		} else if (modi=='plainConfirm'){
+    			this.doClearSlide = false;
+    			this.doClearAll = true;
+                new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1339,labeliderror:1340,
+                                           refObj:this,showCheckBox:false});
+                //this.clearAll();
+                //if ($debug) Debug.write("clearAll and RESET Modus to",previousModus);
+                this.setAttribute('drawmodus',previousModus);
+            } else if (modi=='plain'){
+                this.clearAll();
+                //if ($debug) Debug.write("clearAll and RESET Modus to",previousModus);
+                this.setAttribute('drawmodus',previousModus);
+            } else if (modi=='hand' || modi=='letter' || modi=='triangle' 
+    			|| modi=='paint' || modi=='line' || modi=='uline' || modi=='clipart' 
+    			|| modi=='rectangle' || modi=='ellipse' || modi=='drawarrow'){
+    			if (this.boundingref!=null) this.boundingref.removeIt();
+    		}
+    		if (modi=='rectangle') {
+    			//Open Up Recording
+    			
+    		}
+		]]>
+	</method>
+	
+	<method name="sendConfirmation" args="yesno" >
+		if (this.doClearSlide) {
+			this.clearSlideOnly();
+		} else if (this.doClearAll) {
+            this.clearAll();
+        }
+    </method>
+    
+    <method name="sendNoConfirmation" args="ref">
+    	//Do nothing
+    </method>
+	
+	<method name="getModusItems" args="modi">
+		<![CDATA[
+		//Debug.write("getModusItems: ",modi,this.baseactionobjectList);
+		if (modi=='pointer'){
+			return this.baseactionobjectList;
+		} else {
+			var tempList = new Array();
+			//Debug.write("this.baseactionobjectList: ",modi);
+			for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+				//Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+				if (this.baseactionobjectList[eg][0]==modi) {
+					tempList.push(this.baseactionobjectList[eg]);
+				}
+			}		
+			return tempList;
+		}
+		]]>
+	</method>
+	
+	<method name="getObjectByName" args="objName">
+		if (this[objName]) {
+			return this[objName];
+		}
+		return null;
+	</method>
+	
+	<method name="getBaseObjectByName" args="bName">
+        <![CDATA[
+            //Debug.write("getModusItems: ",modi,this.baseactionobjectList);
+            //Debug.write("this.baseactionobjectList: ",modi);
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                //Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==bName) {
+                    return this.baseactionobjectList[eg];
+                }
+            }       
+            return null;
+        ]]>
+    </method>
+	
+	<method name="deleteItemByName" args="objName">
+        <![CDATA[
+            var newA = this.deleteItemByNameSync(objName);
+            if (newA[0]=='paint') newA[1] = new Array();
+            this.onsharedMessage('delete',newA);    
+        ]]>
+    </method>
+    
+	<method name="deleteItemByNameSync" args="objName">
+    	<![CDATA[
+    	    if ($debug) Debug.write("deleteItemByNameSync :: ",objName);
+    	    this[objName].prepareForDelete.sendEvent();
+    	    this[objName].destroy();
+            if (this.boundingref!=null) this.boundingref.removeIt();
+    		
+    		var pos = -1;
+    		for (var eg=0;eg<this.layers.length;eg++){
+    			if (this.layers[eg]['name']==objName) {
+    				pos = eg;
+    				//Debug.write("Found Object in Layer: ",eg);
+    				this.layers[eg].prepareForDelete.sendEvent();
+    				this.layers[eg].destroy();
+    			}
+    		}	
+    		if (pos!=-1) this.layers.splice(pos, 1);
+    		//get Item Position
+    		pos = -1;
+    		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+    			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+    				pos = eg;
+    				//Debug.write("Found Object: ",eg);
+    				break;
+    			}
+    		}
+    		
+    		if ($debug) Debug.write("deleteItemByNameSync Found Object: ",eg);
+    		
+    		var newA = this.baseactionobjectList[pos];
+    		
+    		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+    			if (this.baseactionobjectList[eg][0]!="pointerWhiteBoard") {
+		    		if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-8]>newA[newA.length-8]) {
+		    				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-8]-=1;
+					}
+    			}
+    		}
+    		
+    		if (pos!=-1) this.baseactionobjectList.splice(pos, 1);
+    		
+    		//if ($debug) Debug.write("this.baseactionobjectList.length: ",this.baseactionobjectList.length);
+    		//if ($debug) Debug.write("this.layers.length: ",this.layers.length);
+    		
+    		if ($debug) Debug.warn("deleteItemByName :: ",objName);
+    		
+    		this.checkStepLayers();
+    		
+    		if (newA[0] == "swf") {
+                this.doDeleteFromDocumentsBar(objName);
+    		}
+    		
+    		return newA;
+    	]]>
+	</method>
+	
+	<method name="UpdateByObject" args="objRef">
+		<![CDATA[
+		//Debug.write("UpdateByObject : ",objRef,objRef.name);
+		var objName = objRef.name;
+		//for (var eg=0;eg<this.layers.length;eg++){
+		//	if (this.layers[eg]['name']==objName) {
+		//		//Debug.write("Found Object in Layer: ",this.layers[eg]);
+		//	}
+		//}
+		
+		var tx = objRef.x;
+        var ty = objRef.y;
+        
+        if(this.isSnapToGrid){   
+            
+            tx = Math.round(tx/this.gridWidth)*this.gridWidth;
+            ty = Math.round(ty/this.gridWidth)*this.gridWidth;
+            
+        }
+		
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+				//Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = tx;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = ty;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = objRef.width;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = objRef.height;
+				var newA = this.baseactionobjectList[eg];
+				if (newA[0]=='paint') newA[1] = new Array();				
+				this.onsharedMessage('size',newA);	
+			    break;
+			}
+		}	
+			
+		]]>
+	</method>
+	
+	<!-- ##############
+		undo/redo
+	 -->
+	
+	<method name="undoredo">
+		<![CDATA[
+		if (this.baseactionobjectList.length>0){
+			if (this.boundingref!=null) this.boundingref.removeIt();
+			var lastActionObject = this.baseactionobjectList.pop();
+			this.deleteItemByNameSync(lastActionObject[lastActionObject.length-1]);
+			this.onsharedMessage('undo',lastActionObject);
+		}
+		]]>
+	</method>
+
+	
+	<method name="checkStepLayers">
+		if (this.layers.length==0){
+			this.setAttribute('hasprevious',false);
+		} else {
+			this.setAttribute('hasprevious',true);
+		}
+		if (this.redolayers.length==0){
+			this.setAttribute('hasenext',false);
+		} else {
+			this.setAttribute('hasenext',true);
+		}	
+		//this.setAttribute('drawmodus',this.getAttribute('drawmodus'));				
+	</method>
+	
+	<method name="onmouseoverMethod">
+		
+	</method>
+	
+	<method name="onmouseoutMethod">
+        
+    </method>
+             
+	<method name="onmousedownMethod" >
+		<![CDATA[
+		if ($debug) Debug.write("onmousedownMethod this.drawmodus: ",this.drawmodus);
+		
+		
+		if(this.selectedObjects != null && this.selectedObjects.length > 0){
+			for (var eg=0;eg<this.selectedObjects.length;eg++){
+				var  objectToUpdate = this.getObjectByName(this.selectedObjects[eg][this.selectedObjects[eg].length-1]);
+	            objectToUpdate.setAttribute('opacity', 1);
+			}
+		}
+		
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+			var knownModus = true;
+			var initialBoundingIsActive = this.boundingIsActive;
+			if (this.letterObjectIsActive){
+				this.currentletterObj.drawtoArray();
+				this.setModusWithUpdate("hand");
+				knownModus = false;
+			}
+			
+			if(this.drawmodus=="drag"){
+				this.isDragging = true;
+				this.dragger.apply();
+			} else if(this.drawmodus=="hand"){
+				this.doSetHandBodus();				
+			} else if(this.drawmodus=="paint"){
+				this.startPaint();
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="line"){
+				this.startLine(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="uline"){
+				this.startUline(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="drawarrow"){
+				this.startDrawarrowline(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if (this.drawmodus == 'rectangle') {
+				this.startRect(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'ellipse') {
+				this.startEllipse(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'letter') {
+                this.startLetter();
+                this.startx = currentlayer.getMouse('x');
+                this.starty = currentlayer.getMouse('y');               
+                mousetracker_del.register(lz.Idle,'onidle');
+            } else if (this.drawmodus == 'clipart') {
+            	this.startDrawClipArt(null);
+                this.startx = currentlayer.getMouse('x');
+                this.starty = currentlayer.getMouse('y');  
+                mousetracker_del.register(lz.Idle,'onidle');
+            } else if (this.drawmodus == 'triangle') {
+				this.startTriangle(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'paste') {
+	  	 		var paste_x = parent.getMouse('x');
+				var paste_y = parent.getMouse('y'); 				
+	            this.paste(paste_x, paste_y);
+	            
+	            if ($debug) Debug.write("paste mouse down ",this);
+	        } else {
+	        	knownModus = false;
+	        	if ($debug) Debug.write("onmousedownMethod Unkown Modus ",this.drawmodus);
+	        }
+			if (knownModus && !initialBoundingIsActive && !this.letterObjectIsActive) {
+				startTyping();
+			}
+        }
+        ]]>
+	</method>
+
+	<method name="onmouseupMethod" >
+        if ($debug) Debug.write("onmouseupMethod this.drawmodus: ",this.drawmodus);
+		<![CDATA[	
+	        if (canvas.ismoderator || canvas.isAllowedToDraw) {
+				
+				var knownModus = true;
+	        	if(this.drawmodus=="drag"){
+	        		this.isDragging = false;
+	        		this.dragger.remove();
+	        		
+	        		this.setAttribute("x",Math.round(this.x));
+	        		this.setAttribute("y",Math.round(this.y));
+	        		
+	        		if (this.last_x == this.x && this.last_x == this.x) {
+	        			if ($debug) Debug.write("No Change");
+	        			return;
+	        		}
+	        		
+	        		this.last_x = this.x;
+	        		this.last_y = this.y;
+	        		
+	        		var tArray = new Array();
+		    		tArray[0] = "moveMap";
+		    		tArray[1] = this.x;
+		    		tArray[2] = this.y;
+		    		
+		    		this.onsharedMessage('moveMap',tArray);
+	        		
+	        	} else if(this.drawmodus=="paint"){
+					this.endPaint();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="line"){
+					this.endLine();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="drawarrow"){
+					this.endDrawarrowline();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="uline"){
+					this.endUline();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="letter"){
+					this.endLetter();
+					mousetracker_del.unregisterAll();
+				} else if (this.drawmodus == 'rectangle') {
+					this.endRect();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'ellipse') {
+					this.endEllipse();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'pointer') {
+		        	this.setAttribute('drawmodus','hand');
+					if (this.boundingIsActive){
+						this.boundingref._innerDrag.onmouseup.sendEvent();
+					}
+		        } else if (this.drawmodus == 'pointerWhiteboard') {
+                    if ($debug) Debug.write("pointerWhiteboard set New Point ");
+                    this.endPointerWhiteBoard();
+                } else if(this.drawmodus=="clipart"){
+                    this.endDrawClipArt();
+                    mousetracker_del.unregisterAll();
+                } else if (this.drawmodus == 'triangle') {
+					this.endTriangle();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'hand') {
+					this.endSelect();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'paste') {
+		        } else {
+					knownModus = true;
+		        	if ($debug) Debug.write("onmouseupMethod Unkown Modus ",this.drawmodus);
+		        }
+				if (knownModus && !this.boundingIsActive && !this.letterObjectIsActive) {
+					endTyping();
+				}
+	                
+				this.checkStepLayers();
+	        } else {
+	        	if (!this.restricted) {
+                    this.endPointerWhiteBoard();
+	        	}
+            }
+		]]>
+	</method>  
+    
+    <method name="startTyping">
+		if ($debug) Debug.info("Start typing ..... ", canvas.publicSID);
+		var msg = new Array();
+		msg[0] = 'typingActivity';
+		msg[1] = true;
+		msg[2] = canvas.publicSID;
+		canvas.objMessage = msg;
+		canvas.thishib.sendMessage.doCall();
+    </method>
+    
+    <method name="endTyping">
+		if ($debug) Debug.info("..... end typing ", canvas.publicSID);
+		var msg = new Array();
+		msg[0] = 'typingActivity';
+		msg[1] = false;
+		msg[2] = canvas.publicSID;
+		canvas.objMessage = msg;
+		canvas.thishib.sendMessage.doCall();
+    </method>
+    
+    <!--
+    <handler name="onclick" args="obj">
+        //Debug.write("click on whiteBoard ",obj);
+    </handler>
+     -->
+
+  	<method name="trackmouse" args="item">
+    	<![CDATA[
+
+    	this.mx = currentlayer.getMouse('x');
+    	this.my = currentlayer.getMouse('y');   
+	    	    	
+    	if (this.drawmodus=="paint"){	    	
+		    if (mx != prevx || my != prevy) {
+		        if (prevx == null) {
+		            prevx = mx;
+		        }
+		        if (prevy == null) {
+		            prevy = my;
+		        }
+	            var mmx = this.mx;
+	            var mmy = this.my;
+	            var px = this.prevx;
+	            var py = this.prevy;
+
+	            this.drawline(px, py, mmx, mmy);
+	            this.drawlineRegisterPaint(px, py, mmx, mmy);
+	            
+	            this.prevx  = this.mx;
+	            this.prevy = this.my;            
+	        } 
+	    } else if (this.drawmodus=="line"){	 
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startLine(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+            this.drawline(this.startx, this.starty, this.endx, this.endy);
+	    } else if (this.drawmodus=="uline"){
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startUline(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+            this.drawline(this.startx, this.starty, this.endx, this.endy);
+	    } else if (this.drawmodus=="drawarrow"){	
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startDrawarrowline(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+	    } else if (this.drawmodus == 'rectangle') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startRect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+		} else if (this.drawmodus == 'triangle') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startTriangle(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawtriangle (this.startx, this.starty, this.mx, this.my);
+		} else if (this.drawmodus == 'ellipse') {
+			var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startEllipse(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawellipse (this.startx, this.starty, this.mx, this.my);			
+		} else if (this.drawmodus == 'letter') {
+			var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startLetter(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawletterBoundingBox (this.startx, this.starty, this.mx, this.my);			
+		} else if (this.drawmodus=="clipart"){ 
+            //var oid_name = this.currentlayer.name;
+            //this.currentlayer.destroy();
+            this.trackDrawClipArt();
+            this.endx = this.mx;
+            this.endy = this.my;
+        } else if (this.drawmodus == 'copy') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startSelect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+        }else if (this.drawmodus == 'hand') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startSelect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+        }
+		
+    	]]>
+    </method>
+	
+	<!-- ####################
+		Handmodus
+	 -->
+	<method name="doSetHandBodus" >
+		<![CDATA[
+		////Debug.write("doSetHandBodus: ");
+		var objList = this.getObjectInBounds(this.getMouse('x'),this.getMouse('y'));
+		if(objList.length==1){
+			this.setAttribute('drawmodus','pointer');
+			////Debug.write(objList[0][objList[0].length-1]);
+			this.doShowObjectBounds(objList[0][objList[0].length-1]);
+		} else if (objList.length>1){
+			this.setAttribute('drawmodus','pointer');
+			////Debug.write(objList[objList.length-1][objList[objList.length-1].length-1]);
+			this.doShowObjectBounds(objList[objList.length-1][objList[objList.length-1].length-1]);
+		} else {
+			this.startSelect(null);
+  	 		this.startx = currentlayer.getMouse('x');
+			this.starty = currentlayer.getMouse('y'); 				
+            mousetracker_del.register(lz.Idle,'onidle');
+            if ($debug) Debug.write("this.startSelect ",this);
+	            
+			this.setModus("hand");
+		}
+		]]>
+	</method>
+	
+    <method name="doShowObjectBounds" args="val">
+    <![CDATA[
+    	if (val !=null && val!=''){
+	    	this.ObjectByName = this.getObjectByName(val);
+	    	//FIXME: Set Corrent Value to Document Toolbar or use another var
+               
+            var boundingDoUpdateOnInit = true;
+            if (this.ObjectByName instanceof lz.swfResourceView){
+                //Debug.write("is swf Presentation");
+                boundingDoUpdateOnInit=false;
+            }
+            
+            //if ($debug) Debug.write("this.ObjectByName ",val,this.ObjectByName);
+                
+	    	var x = this.ObjectByName.x;
+	    	var y = this.ObjectByName.y;
+            //if ($debug) Debug.write("doShowObjectBounds: ",x,y);
+	    	var width = this.ObjectByName.width;
+	    	var height = this.ObjectByName.height;
+	    	if (this.boundingref!=null)this.boundingref.removeIt();
+	    	this.boundingref = new lz.boundingBoxAll(this.parent.parent._drawareaMask._drawarea,{whiteboardRef:this,
+                    objRef:this.ObjectByName,x:x-200,y:y-200,width:width+400,height:height+400,
+                    canBeDragged:boundingDoUpdateOnInit,canBeResized:boundingDoUpdateOnInit,
+                    ex:x,ey:y,ewidth:width,eheight:height,boundingDoUpdateOnInit:boundingDoUpdateOnInit});
+	    	this.setAttribute('boundingIsActive',true);
+        
+            //if (!boundingDoUpdateOnInit) {
+            //    this.boundingref._inner._inner.setAttribute('width',this.ObjectByName._swfView.width);
+            //    this.boundingref._inner._inner.setAttribute('height',this.ObjectByName._swfView.height);
+            //    if ($debug) Debug.write("NEW WIDTH AND HEIGHT OF SWF ",this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+            //    this.boundingref._inner.setAttribute('visible',true);
+            //    parent.parent.changeMenu(2,true);
+            //    this.doUpdateDocumentToolBar();
+            //} else {
+            //    parent.parent.changeMenu(1,true);
+            //}
+             
+    	}
+    ]]>
+    </method>   
+    
+    <method name="reselectShowObjectBounds" args="val">
+    <![CDATA[
+        if (val !=null && val!=''){
+            this.ObjectByName = this.getObjectByName(val);
+            //FIXME: Set Corrent Value to Document Toolbar or use another var
+               
+            
+            //if ($debug) Debug.write("this.ObjectByName ",val,this.ObjectByName);
+                
+            var x = this.ObjectByName.x;
+            var y = this.ObjectByName.y;
+            //if ($debug) Debug.write("doShowObjectBounds: ",x,y);
+            var width = this.ObjectByName.width;
+            var height = this.ObjectByName.height;
+            if (this.boundingref!=null)this.boundingref.removeIt();
+            this.boundingref = new lz.boundingBoxAll(this.parent.parent._drawareaMask._drawarea,{
+                                whiteboardRef:this,
+                                objRef:this.ObjectByName,
+                                x:x-200,y:y-200,
+                                width:width+400,height:height+400,
+                                canBeDragged:true,canBeResized:false,
+                                ex:x,ey:y,ewidth:width,eheight:height,
+                                boundingDoUpdateOnInit:false
+                            });
+            this.setAttribute('boundingIsActive',true);
+        
+            //if (!boundingDoUpdateOnInit) {
+            //    this.boundingref._inner._inner.setAttribute('width',this.ObjectByName._swfView.width);
+            //    this.boundingref._inner._inner.setAttribute('height',this.ObjectByName._swfView.height);
+            //    if ($debug) Debug.write("NEW WIDTH AND HEIGHT OF SWF ",this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+            //    this.boundingref._inner.setAttribute('visible',true);
+            //    parent.parent.changeMenu(2,true);
+            //    this.doUpdateDocumentToolBar();
+            //} else {
+            //    parent.parent.changeMenu(1,true);
+            //}
+             
+        }
+    ]]>
+    </method>   
+	
+	<method name="updateObjectBounds">
+		if (this.boundingref!=null) this.boundingref.resetValues();
+	</method>
+	
+	<method name="removeObjectBounds">
+		if (this.boundingref!=null) this.boundingref.removeIt();
+	</method>
+    
+	<method name="getObjectInBounds" args="x,y">
+		<![CDATA[
+		var tempList = new Array();
+		if ($debug) Debug.write("getObjectInBounds this.baseactionobjectList1: ",x,y,this.baseactionobjectList);
+		
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			
+			
+			//if ($debug) Debug.write("c1 ",this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5],"<",x);
+            //if ($debug) Debug.write("c2 ",(this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3]),">",x);
+            //if ($debug) Debug.write("c3 ",this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4],"<",y);
+            //if ($debug) Debug.write("c4 ",( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] ),">",y);
+        
+			
+			if ( ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]<=x 
+				&& ( (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3]) >=x ) ) 
+				&& ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]<=y 
+				&& ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] )>=y  ) ) {
+					
+				if (this.baseactionobjectList[eg][0] != "mindMapNode"
+				        && this.baseactionobjectList[eg][0] != "mindMapCenter")	{
+    				if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-7] == null) {
+        				tempList.push(this.baseactionobjectList[eg]);
+    		        } else {
+    		        	var swfObject = this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-7];
+    		        	
+    		        	if ($debug) Debug.write("getObjectInBounds :: swfObject ",swfObject.isVisible);
+    		        	
+    		        	if(swfObject.isVisible) {
+    	        	        tempList.push(this.baseactionobjectList[eg]);
+    		        	}
+    		        }
+		        }
+				////Debug.write("found obj: ",this.baseactionobjectList[eg]);
+			}
+		}		
+		return tempList;
+		]]>
+	</method>
+	
+	
+	<method name="getZIndex">
+		<![CDATA[
+			if ($debug) Debug.write("getZIndex ",this.subviews.length-1);
+			return this.subviews.length-1;
+		]]>
+	</method>
+	
+	
+	
+	<!-- ##################
+		SharedModus
+		action => type of action
+		actionObject => necessary information to reproduce the event
+		isWmlLoader => true means this object is loaded through a stored wml-file
+		so do not spread any update-notifications to connected clients for each 
+		object cause the file loading will make a seperate notification
+	 -->
+	<method name="sendWatchObject" args="action,actionObject,isWmlLoader">
+		if ($debug) Debug.write("sendWatchObject: ",action,actionObject);
+		<![CDATA[
+		if (action=='draw' || action=='redo'){
+			var lastactionObject = actionObject;
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(lastactionObject,this);
+			} else if(action,actionObject[0]=='letter'){
+				this.drawactionHistory(lastactionObject,this);
+			} else if(actionObject[0]=='image'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addImageToLayerHistorySynced(lastactionObject,this);
+			} else if(actionObject[0]=='swf'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addSWFToLayerHistorySynced(lastactionObject,this);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='triangle'){
+				this.drawtriangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='pointerWhiteBoard'){
+                this.drawPointerToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='flv'){
+                this.drawFlvToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='mindMapCenter'){
+                this.drawMindMapCenterToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='mindMapNode'){
+                this.drawMindMapNodeToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='clipart'){
+                this.drawClipArtToHistory(lastactionObject,this);
+            }
+			//set counter to maximum otherwise trouble in naming conventions
+			//the 6th array index count from the end of each object is always the counter of the
+			//object
+			this.compareAndSetCounter(lastactionObject[lastactionObject.length-6]);
+			this.baseactionobjectList.push(lastactionObject);
+			
+			//Send a notifcation for the library loader sothat it can show progress
+			//and Browser does not hangUp and images can be proceed
+			//only send if type ain#t image cause image will send its own one after 
+			// it has been loaded completely
+			if (isWmlLoader && actionObject[0]!='image' && isWmlLoader && actionObject[0]!='swf') {
+				if (this.onwmlLoaderSend) this.onwmlLoaderSend.sendEvent(actionObject[0]);
+			}
+         
+        } else if(action=='clear'){
+            
+            this.clearRemote();
+            
+        } else if(action=='clearSlide'){
+            
+            this.clearSlideRemote(actionObject);
+            
+        } else if(action=='moveMap'){
+			
+			this.setAttribute("x",actionObject[1]);
+			this.setAttribute("y",actionObject[2]);
+			
+        } else if(actionObject[0]=='whiteboardObj'){
+            this.doUpdateFullFitAndZoomRemote(actionObject);
+		} else if(action=='flv'){
+			
+			this.playFLVRemote(actionObject);
+			
+		} else if(action=='addBrainStorming'){
+            
+            this.brainStormingIdeasGathering(actionObject);
+        
+        } else if(action=='addBrainStormingIdeaPhase2'){
+            
+        	//Adding Idea in Phase 2
+            this.addIdeaToPhase2(actionObject);
+        
+        } else if(action=='deleteBrainStorming'){
+			
+			this.brainStormingClose(actionObject);
+			
+		} else if(action=='updateBrainStormingPhase'){
+            
+            this.brainStormingPhase2(actionObject);
+            
+        } else if(action=='updateBrainStormingPhase'){
+            
+            this.brainStormingPhase2(actionObject);
+            
+        } else if(action=='updatePrioBrainStormingIdea'){
+            
+            this.updatePrioBrainStormingIdea(actionObject);
+        
+        } else if(action=='updateTextBrainStormingIdeaColor'){
+            
+            this.updateTextBrainStormingIdeaColor(actionObject);
+        
+        } else if(action=='updateBrainStormingGroupName'){
+            
+            this.updateBrainStormingGroupName(actionObject);
+            
+        } else if(action=='deleteBrainStormingGroup'){
+            
+            this.deleteBrainStormingGroup(actionObject);
+			
+		} else if(action=='deleteBrainStormingIdea'){
+            
+            this.deleteBrainStormingIdea(actionObject);
+			
+		} else if(action=='addBrainStormingGroup'){
+            
+            this.addNewGroupRemote(actionObject,false);
+            
+		} else if(action=='updateGroupBrainStormingIdea'){
+            
+			if (actionObject[3] == "") {
+                this.moveIdeaToResultListRemote(actionObject);
+			} else {
+                this.moveIdeaToGroupRemote(actionObject);
+			}
+			
+		} else if(action=='delete' || action=='undo'){
+			
+			var lastactionObject = actionObject;	
+			this.deleteItemByNameSync(lastactionObject[lastactionObject.length-1]);
+			
+		} else if(action=='size'){
+			
+			var lastactionObject = actionObject;	
+			
+			if (lastactionObject[0] == "clipart") {
+				
+				var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+                obj.destroy();
+                
+                this.drawClipArtToHistory(lastactionObject,this);
+                
+                for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                    if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==lastactionObject[lastactionObject.length-1]) {
+                        
+                        //if ($debug) Debug.write("Found Object 1: ",this.baseactionobjectList[eg]);
+                        
+                        this.baseactionobjectList[eg] = lastactionObject;
+                        
+                        break;
+                    }
+                }   
+                
+                if (this.boundingIsActive) {
+                    this.reselectShowObjectBounds(lastactionObject[lastactionObject.length-1]);
+                }
+				
+			} else {
+			
+    			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+    			
+    			if ($debug) Debug.write("Set Size for Object ",obj);
+    			obj.setAttribute('x',lastactionObject[lastactionObject.length-5]);
+    			obj.setAttribute('y',lastactionObject[lastactionObject.length-4]);
+    			obj.setAttribute('width',lastactionObject[lastactionObject.length-3]);
+    			obj.setAttribute('height',lastactionObject[lastactionObject.length-2]);
+    			
+    			this.updateBaseObjectByName(lastactionObject[lastactionObject.length-1],
+    			                         lastactionObject[lastactionObject.length-5],
+    			                         lastactionObject[lastactionObject.length-4],
+    			                         lastactionObject[lastactionObject.length-3],
+    			                         lastactionObject[lastactionObject.length-2]);
+    			                         
+    			//if ($debug) Debug.write("BaseObject List ?? ",this.baseactionobjectList);
+    			
+                if (this.boundingIsActive) {
+                	this.boundingref.sendRemoteUpdate(obj)
+                }
+            
+			}
+			                         
+		} else if (action=="loadwml"){
+			//Debug.write(actionObject,actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+			this.remoteWmlLoader(actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+		} else if (action=="editText"){
+            this.editTextByHistory(actionObject,this);
+		}else if (action=="editTextMindMapFontColor") {
+            this.editTextMindMapFontColor(actionObject,this);
+        } else if (action=="editTextMindMapColor"){
+            this.editTextMindMapColor(actionObject,this);   
+        } else if (action=="editTextMindMapNode"){
+            this.editTextMindMapNode(actionObject,this);
+        } else if (action=="sendItemToFront"){
+            this.bringItemToFrontByName(actionObject[1]);
+        } else if (action=="initgetVars"){
+			//Debug.write("initUser isMod ",canvas.ismoderator,actionObject);
+			if (canvas.ismoderator){
+				//Debug.write("send all whiteBoard objects to new user");
+				var obj = new Array();
+			    obj[0] = 'whiteboard';
+			    obj[1] = 'inituser';
+			    obj[2] = this.baseactionobjectList;
+				this.oninitUser(actionObject,obj);
+			}
+		} else if (action=="swf"){
+			this.remoteObjectUpdate(actionObject);	
+		}
+		]]>
+	</method>
+	
+	
+	<method name="updateBaseObjectByName" args="tName,x,y,width,height">
+		<![CDATA[
+		
+		    
+		
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][this.baseactionobjectList[i].length-1] == tName) {
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-5] = x;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-4] = y;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-3] = width;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-2] = height;
+            		return;
+            	}
+            	
+            }
+		    
+            
+            if ($debug) Debug.warn("Could Not Find Item on List ",tName);
+		]]>
+	</method>
+	
+	<method name="sendRecordedObject" args="action,actionObject,isWmlLoader">
+		//Debug.write("sendWatchObject: ",action,actionObject);
+		<![CDATA[
+		if (action=='draw' || action=='redo'){
+			var lastactionObject = actionObject;
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(lastactionObject,this);
+			} else if(action,actionObject[0]=='letter'){
+				this.drawactionHistory(lastactionObject,this);
+			} else if(actionObject[0]=='image'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addImageToLayerHistoryRecorded(lastactionObject,this,isWmlLoader);
+			} else if(actionObject[0]=='swf'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addSWFToLayerHistoryRecording(lastactionObject,this,isWmlLoader);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(lastactionObject,this);
+			}
+			//set counter to maximum otherwise trouble in naming conventions
+			//the 6th array index count from the end of each object is always the counter of the
+			//object
+			this.compareAndSetCounter(lastactionObject[lastactionObject.length-6]);
+			this.baseactionobjectList.push(lastactionObject);
+			
+			//Send a notifcation for the library loader sothat it can show progress
+			//and Browser does not hangUp and images can be proceed
+			//only send if type ain#t image cause image will send its own one after 
+			// it has been loaded completely
+			if (isWmlLoader && actionObject[0]!='image' && isWmlLoader && actionObject[0]!='swf') {
+				if (this.onwmlLoaderSend) this.onwmlLoaderSend.sendEvent(actionObject[0]);
+			}
+            
+		} else if(action=='clear'){
+			this.clearAll();
+		} else if(action=='delete' || action=='undo'){
+			var lastactionObject = actionObject;	
+			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+			obj.destroy();
+		} else if(action=='size'){
+			var lastactionObject = actionObject;	
+			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+			obj.setAttribute('x',lastactionObject[lastactionObject.length-5]);
+			obj.setAttribute('y',lastactionObject[lastactionObject.length-4]);
+			obj.setAttribute('width',lastactionObject[lastactionObject.length-3]);
+			obj.setAttribute('height',lastactionObject[lastactionObject.length-2]);
+		} else if (action=="loadwml"){
+			//Debug.write(actionObject,actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+			this.remoteWmlLoaderRecording(actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+		} else if (action=="editText"){
+			this.editTextByHistory(actionObject,this);
+		} else if (action=="initgetVars"){
+			//Debug.write("initUser isMod ",canvas.ismoderator,actionObject);
+			if (canvas.ismoderator){
+				//Debug.write("send all whiteBoard objects to new user");
+				var obj = new Array();
+			    obj[0] = 'whiteboard';
+			    obj[1] = 'inituser';
+			    obj[2] = this.baseactionobjectList;
+				this.oninitUser(actionObject,obj);
+			}
+		} else if (action=="swf"){
+			this.remoteObjectUpdate(actionObject);	
+		}
+		]]>
+	</method>
+	
+  	<method name="getSWFDocumentStatus">
+  		<![CDATA[
+  		
+  		    for (var i=0;i<this.baseactionobjectList.length;i++) {
+  		    	
+  		    	if (this.baseactionobjectList[i][0] == "swf") {
+  		    		
+  		    		var tSWF = new Object();
+  		    		
+  		    		tSWF.name = this.baseactionobjectList[i][this.baseactionobjectList[i].length-1];
+  		    		tSWF.slide = this.baseactionobjectList[i][8];
+  		    		tSWF.isVisible = true;
+  		    		
+  		    		return tSWF;
+  		    	}
+  		    	
+  		    }
+  		    
+  		    return null;
+  		]]>
+  	</method>
+
+    <method name="checkSWFDocumentStatus" args="swfObj">
+        <![CDATA[
+        
+            if (swfObj != null) {
+        
+                var swfBaseObj = this.getBaseObjectByName(swfObj.name);
+                
+                if (swfBaseObj != null) {
+            
+                    if (swfObj.slide == swfBaseObj[8]) {
+                    	return true;
+                    } else {
+                    	return false;
+                    }
+                    
+                }
+            
+            }
+            
+            return true;
+        ]]>
+    </method>
+
+    <method name="doSWFDocumentStatus" args="refObj,swfObj">
+        <![CDATA[
+        
+            if (swfObj != null) {
+        
+                if (swfObj.isVisible) {
+                	
+                	refObj.setAttribute("visibility","visible");
+                	
+                } else {
+                	
+                	refObj.setAttribute("visibility","hidden");
+                	
+                }
+            
+            } else {
+            	
+            	refObj.setAttribute("visibility","visible");
+            	
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="updateObjectsToSlideNumber" args="baseObject">
+    	<![CDATA[
+    	
+            var baseObjectName = baseObject[baseObject.length-1];
+            var slidesNumber = baseObject[8];
+    	   
+            if ($debug) Debug.write("updateObjectsToSlideNumber :: ",baseObjectName,slidesNumber)
+    	
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+    	   	
+                if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "clipart"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                	
+                	var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                	if ($debug) Debug.write("swfObj :: ",swfObj);
+                	
+                	if (swfObj != null) {
+                		
+                		if (swfObj.name == baseObjectName) {
+                			
+                			if (swfObj.slide == slidesNumber) {
+                				
+                				swfObj.isVisible = true;
+                				
+                				this.baseactionobjectList[i][this.baseactionobjectList[i].length-7] = swfObj; 
+                				
+                				this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","visible");
+                				
+                			} else {
+                				
+                				swfObj.isVisible = false;
+                				
+                				this.baseactionobjectList[i][this.baseactionobjectList[i].length-7] = swfObj; 
+                				
+                				this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","hidden");
+                				
+                			}
+                			
+                		}
+                		
+                	}
+                	
+                }
+    	   	
+            }
+    	
+    	]]>
+    </method>
+    
+    <method name="updateAllObjectsToSlideNumber">
+        <![CDATA[
+        
+            if ($debug) Debug.write(" :: updateAllObjectsToSlideNumber :: ")
+        
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            
+                if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                    
+                    var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                    if ($debug) Debug.write("swfObj :: ",swfObj);
+                    
+                    if (swfObj != null) {
+                        
+                            
+                        if (swfObj.isVisible) {
+                            
+                            this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","visible");
+                            
+                        } else {
+                            
+                            this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","hidden");
+                            
+                        }
+                            
+                        
+                    }
+                    
+                }
+            
+            }
+        
+        ]]>
+    </method>
+
+    <dragstate name="dragger"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx
new file mode 100644
index 0000000..5e883a7
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawImage" extends="baseDrawLetter">
+	
+  	<!-- attribute shows if this image is loaded as part of a wml-file-object
+		if true it will send a onwmlLoaderSend message and NO extra loading bar
+		if false it will show a loading abr for that image
+	-->
+	<attribute name="isWmlLoaderImage" value="false" type="boolean" />
+    
+    <!-- indicates if this client is still loading an old image for the screenViwer -->
+    <attribute name="isScreenImageLoading" value="false" type="boolean" />
+    <attribute name="screenImageRefNumber" value="1" type="number" />
+    <attribute name="screenImageRef1" value="null" />
+    <attribute name="screenImageRef2" value="null" />
+	
+    <event name="setNewScreenUserName" />
+  	
+  	<!-- invoked by clicking on the confirmation dialog after 
+  		clicking on an image in the Library -->
+  	<method name="addNewSyncImage" args="urlname,posx,posy,baseurl,fileName,moduleName,parentPath,room,domain">
+  		if ($debug) Debug.write("urlname: ",urlname);
+  		var now = new Date();
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = true;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = fileName + now.getTime();
+  		this.startNewObjectSyncProcess.doCall();
+  		this.addNewImage(urlname,posx,posy,baseurl,fileName,
+  			moduleName,parentPath,room,domain,
+  			this.startNewObjectSyncProcess.uniqueObjectSyncName,false);
+  	</method>
+  	
+  	<!-- standard add Function -->
+  	<method name="addNewImage" args="urlname,posx,posy,baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync">
+  		if ($debug) Debug.write("urlname posx: ",urlname,posx);
+  		this.addImageToLayer(this,'image'+this.getCounter(),urlname,
+  			posx,posy,0,0,
+  			true,
+  			baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync);
+  	</method>
+  	
+	<!--
+		alterModus => this is added by the mod not remotely
+		
+	 -->
+  	<method name="addImageToLayer" args="obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync">
+        <![CDATA[
+			//only show if it is not part of wml-file-object
+			//do not show at all as this is handled via the remote Object
+			//if (!this.isWmlLoaderImage) {
+			//	this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+			//	this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+			//}
+			
+            if ($debug) Debug.write("addImageToLayer ",urlname);
+        	//if ($debug) Debug.write("addImageToLayer ",obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain);
+			//if ($debug) Debug.write("addImageToLayer posx ",posx);
+        	
+	  		if ($debug) Debug.write("addImageToLayer urlname : ", canvas.getUrl() + 'DownloadHandler');
+			var src = canvas.getUrl() + 'DownloadHandler' + '?fileName=' + encodeURIComponent(fileName) + 
+				'&moduleName=' + moduleName +
+				'&parentPath=' + encodeURIComponent(parentPath) +
+				'&room_id=' + room + 
+				'&sid=' + canvas.sessionId;
+	
+	        if ($debug) Debug.write("addImageToLayer -src- ",src);
+		      
+			if ($debug) Debug.write("alterModus: ",alterModus);
+			
+	  		this.currentlayer = new lz.imageForDrawView(obj,{
+	  			src:src,refObj:this,name:nameing,x:posx,y:posy,
+	  			remotewidth:width,remoteheight:height,
+	  			downloadurl:urlname,alterModus:alterModus,
+	  			baseurl:baseurl,fileName:fileName,moduleName:moduleName,
+	  			parentPath:parentPath,room:room,domain:domain,
+	  			uniqueObjectSyncName:uniqueObjectSyncName,
+	  			isLocalSync:isLocalSync});	
+			
+			//this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+			//this.parent._loading.setAttribute('visible',true);
+			
+			//Add Layer to global Layer  	
+		    return this.currentlayer;
+		]]>
+  	</method>
+  	
+  	<!--
+  	    @deprecated
+  	 -->
+  	<method name="addImageToLayerRecorded" args="obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain">
+        <![CDATA[
+			//only show if it is not part of wml-file-object
+			if (!this.isWmlLoaderImage) {
+				this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+				this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+			}
+			var src = baseurl+'?fileName='+fileName+'&moduleName='+moduleName+'&parentPath='+parentPath+'&room_id='+room+'&sid='+canvas.sessionId;
+	
+			this.currentlayer = new lz.imageForDrawView(obj,{
+				src:src,refObj:this,name:nameing,x:posx,y:posy,
+				downloadurl:urlname,remotewidth:width,remoteheight:height,
+				alterModus:alterModus,baseurl:baseurl,fileName:fileName,
+				moduleName:moduleName,parentPath:parentPath,
+				room:room,domain:domain,recorderModus:true});
+
+			this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+			//this.parent._loading.setAttribute('visible',true);
+			//Add Layer to global Layer  	
+		    return this.currentlayer;
+		]]>
+  	</method>
+  	
+  	<method name="incomingScreenSharing" args="value">
+        <![CDATA[
+		//only do if last image has been loading successfully
+            if (!this.isScreenImageLoading){
+                this.isScreenImageLoading = true;
+                var downloadurl = canvas.getUrl() + 'ScreenViewHandler?'
+                    +'fileName='+encodeURIComponent(value.fileName)
+                    +'&room='+hib.currentroomid
+                    +'&domain='+hib.conferencedomain
+                    +'&sid='+canvas.sessionId;
+            
+                //Debug.write("incomingScreenSharing URL: ",downloadurl);
+                if (this.screenImageRefNumber==1){
+                    this.screenImageRef1 = new lz.imageForScreenViewer(this,{visible:false,src:downloadurl,refObj:this,name:'screen1',x:0,y:0,downloadurl:downloadurl});
+                    this.screenImageRefNumber = 2;
+                } else if (this.screenImageRefNumber==2){
+                    this.screenImageRef2 = new lz.imageForScreenViewer(this,{visible:false,src:downloadurl,refObj:this,name:'screen2',x:0,y:0,downloadurl:downloadurl});
+                    this.screenImageRefNumber = 1;
+                }
+                this.setNewScreenUserName.sendEvent('Screen of User: '+value.user.firstname+','+value.user.lastname);
+            } else {
+                //Debug.write("frame dropped!");
+                Debug.warn("frame dropped!");
+                (new lz.singletonErrorPopupHolder()).setError(canvas.getLabelName(240));
+            }
+		]]>
+  	</method>   
+    
+    <!--
+    TODO: Make new Base Class including the Screen sharing Functions
+     -->
+    <method name="toggleVisibleScreenSharing">
+        if (this.screenImageRefNumber==1){
+            if (this.screenImageRef1) this.screenImageRef1.destroy();
+            this.screenImageRef2.setAttribute('visible',true);
+        } else if (this.screenImageRefNumber==2){
+            this.screenImageRef1.setAttribute('visible',true);
+            if (this.screenImageRef2) this.screenImageRef2.destroy();
+        }
+        this.isScreenImageLoading = false;
+    </method> 
+	
+	<!--
+		actionObject => attributes neccessary for loading image
+		refObj = drawarea
+		isWmlLoader => (true)is loaded as part of wml-object
+		
+		-->
+		
+	<!-- method adds a new Image to the Layer,
+	but without making an Update-Event, 
+	Image added by remote host -->	
+  	<method name="addImageToLayerHistorySynced" args="actionObject,refObj">
+  		if ($debug) Debug.write("addImageToLayerHistory: ",actionObject,refObj);
+  		//start sync process using the remote uniqueObjectSyncName as identifier
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = false;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = actionObject[8];
+  		this.startNewObjectSyncProcess.doCall();
+  		this.addImageToLayer(refObj,actionObject[actionObject.length-1],actionObject[1],
+		  		actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		  		actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		  		false,
+		  		actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+		  		actionObject[6],actionObject[7],actionObject[8],false);
+		  		
+  		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+  	</method>
+  			
+  	<!--- 
+		invoke by the initial Loading process in remoteWhiteboard.lzx, 
+		does not invoke any Update Handler
+		once this object is loaded, it will throw an Update event of kind
+		addImageToLayerHistoryToLocalLoaded		
+  	 -->
+  	<method name="addImageToLayerHistoryToLocal" args="actionObject,refObj">
+  		if ($debug) Debug.write("addImageToLayerHistoryToLocal: ",actionObject,refObj);
+  		this.addImageToLayer(refObj,actionObject[actionObject.length-1],actionObject[1],
+		  		actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		  		actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		  		false,
+		  		actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+		  		actionObject[6],actionObject[7],actionObject[8],true);
+  	</method>
+  	
+  	<!-- 
+  		this handler is implemented also in remoteWhiteboard.lzx to sync a Local Object list
+  		but throws NO Update Event, cause its only needed Locally, the whole Sync Process
+  		has a different Sync-Object for Loading the complete Object List from the Sever.
+  		Each Object is loaded Locally, once all Objects are loaded the Complete-Event is broadcasted
+  		to the server, but every Item on the List is only controlled locally
+  	-->
+  	<handler name="addImageToLayerHistoryToLocalLoaded" args="objRef">
+  		if ($debug) Debug.write("addImageToLayerHistoryToLocal: ",objRef);
+		this.syncImageRefObj = objRef;
+		
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			false,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());
+  	</handler>
+  	
+  	<!--- @keywords deprecated
+  	TODO: uniqueObjectSyncName missing
+  	 -->
+  	<method name="addImageToLayerHistoryRecorded" args="actionObject,refObj,isWmlLoader">
+		this.isWmlLoaderImage = isWmlLoader;
+  		this.addImageToLayerRecorded(refObj,
+  			actionObject[actionObject.length-1],actionObject[1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+  			actionObject[6],actionObject[7]);
+  	</method>
+  	
+  	<method name="registerNewImage" args="urlname,posx,posy,width,height,baseurl,fileName,moduleName,parentPath,room,domain,doCallUpdate,uniqueObjectSyncName,swfObj,zIndex">
+		if ($debug) Debug.write("registerNewImage doCallUpdate: ",doCallUpdate);
+		if ($debug) Debug.write("registerNewImage swfObj: ",swfObj);
+		var actionObject = new Array();
+	    actionObject.push('image');
+	    actionObject.push(urlname);
+		actionObject.push(baseurl);
+		actionObject.push(fileName);
+		actionObject.push(moduleName);
+		actionObject.push(parentPath);
+		actionObject.push(room);
+		actionObject.push(domain);
+		actionObject.push(uniqueObjectSyncName);
+		actionObject.push(zIndex);//-8
+		actionObject.push(swfObj);//-7
+		actionObject.push(this.counter);//-6
+	    actionObject.push(posx);//-5
+	    actionObject.push(posy);//-4
+	    actionObject.push(width);//-3
+	    actionObject.push(height);//-2
+	    actionObject.push(this.currentlayer.name);//-1
+	    this.baseactionobjectList.push(actionObject);	
+	    this.checkStepLayers();
+	    if (doCallUpdate) this.onsharedMessage('draw',actionObject);	
+  	</method>
+	
+	<!-- 
+		adds the Image to the Layers and throws a onsharedMessage,
+		this can only happen _after_ loading the Image cause you do not know its 
+		width and height 
+	-->
+	<method name="storeTempValsAndLoadSyncList" args="objRef">
+		if ($debug) Debug.write("storeTempValsAndLoadSyncList: ",objRef);
+		this.syncImageRefObj = objRef;
+		
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+		
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			true,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());		
+	
+	</method>
+	
+	<!--- @keywords deprecated
+  	TODO: check Recorder Modus
+  	 -->
+	<method name="storeTempValsAndLoadSyncListRecording" args="objRef">
+		if ($debug) Debug.write("########### storeTempValsAndLoadSyncListRecording: ",objRef);
+		this.syncImageRefObj = objRef;
+		this.doRegisterAfterLoadingOrRecording();
+		this.sendCompleteImageSync();
+	</method>
+	
+	<method name="sendLoadNotificationImage" args="objRef" >
+		if ($debug) Debug.write("sendLoadNotificationImage: ",objRef);
+		this.syncImageRefObj = objRef;
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			false,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());	
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>
+    
+    <!--- @keywords deprecated
+    TODO: Check recorder Modus
+     -->
+    <method name="doRegisterAfterLoadingOrRecording">
+    	if ($debug) Debug.write("########### doRegisterAfterLoadingOrRecording");
+		this.imageSyncMessageText = canvas.getLabelName(this.imageSyncMessageId);
+		//now send notifications to connected clients
+		this.setAttribute('drawmodus','image');
+		this.registerNewImage(this.syncImageRefObj.src,
+		              this.syncImageRefObj.x,this.syncImageRefObj.y,
+		              this.syncImageRefObj.width,this.syncImageRefObj.height,
+		              this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+		              this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+		              this.syncImageRefObj.room,this.syncImageRefObj.domain,
+		              this.getSWFDocumentStatus(),
+                      this.getZIndex());		
+    </method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
new file mode 100644
index 0000000..13106d2
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="whiteBoardTextField" extends="text" >
+	<handler name="prepareForDelete" args="tRef">
+		//Nothing
+	</handler>
+	<attribute name="typeOfObject" value="text" type="string" />
+	<method name="setTextEncoded" args="tString">
+		<![CDATA[
+		
+		    while (tString.indexOf("<") > 0) {
+		    	tString = tString.replace("<","&#60;");
+		    }
+    		
+		    while (tString.indexOf(">") > 0) {
+                tString = tString.replace(">","&#62;");
+		    }
+    		
+    		this.setAttribute("text",tString);
+		]]>
+	</method>
+</class>
+
+<class name="baseDrawLetter" extends="baseDrawObject">
+
+	<attribute name="currentletterObj" value="null" />
+	
+	<attribute name="letterObjectIsActive" value="false" type="boolean" />
+	
+	<attribute name="edittextLetterObject" value="null" />
+	
+	<attribute name="edittextLetter" value="false" type="boolean" />
+	
+	<method name="letterObjectFree" args="obj">
+		this.setAttribute('letterObjectIsActive',false);
+		if (this.edittextLetter){
+			this.edittextLetter = false;
+			this.setModus('hand');
+		}
+	</method>
+	<method name="letterObjectClose" args="obj">
+		this.setAttribute('letterObjectIsActive',true);
+	</method>
+	
+    <!-- The Color of the letter Object  -->
+  	<attribute name="currentlayerletter" value="0x000000" setter="this.setNewLayerLetter(currentlayerletter)" />
+    
+    <!-- The Size of the Letter Object -->
+  	<attribute name="currentlayersize" value="12" type="number" setter="this.setNewLayerSize(currentlayersize)" />
+  	
+  	<!-- "plain", "bold" , "italic" or "bolditalic". -->
+  	<attribute name="currentlayerstyle" value="plain" type="string" setter="this.setNewLayerStyle(currentlayerstyle)" />
+    
+    <method name="setNewLayerLetter" args="cl">
+        this.currentlayerletter=cl;
+        this.sendNewStyle.sendEvent();
+    </method>
+    
+    <method name="setNewLayerSize" args="cs">
+        this.currentlayersize=cs;
+        this.sendNewStyle.sendEvent();
+    </method>
+    
+    <method name="setNewLayerStyle" args="cs">
+        this.currentlayerstyle=cs;
+        this.sendNewStyle.sendEvent();
+    </method>
+  	
+    <!-- Send Update Events to current Letter Object -->
+    <handler name="sendNewStyle">
+        if (this.letterObjectIsActive){
+            this.currentletterObj.newStyleEvent.sendEvent()
+        }
+    </handler>
+    
+  	<attribute name="italic" value="false" type="boolean" setter="this.setitalic(italic)" />
+  	<attribute name="bold" value="false" type="boolean" setter="this.setbold(bold)" />
+  	<method name="setitalic" args="b">
+  		this.italic = b;
+  		this.doalterStyle();
+  	</method>
+  	<method name="setbold" args="b">
+  		this.bold = b;
+  		this.doalterStyle();
+  	</method>
+  	<method name="doalterStyle">
+  		<![CDATA[
+  		if (this.isinited){
+	  		if (this.bold && this.italic){
+	  			this.setAttribute('currentlayerstyle','bolditalic');
+	  		} else if(!this.bold && this.italic){
+	  			this.setAttribute('currentlayerstyle','italic');
+	  		} else if(this.bold && !this.italic){
+	  			this.setAttribute('currentlayerstyle','bold');
+	  		} else if(!this.bold && !this.italic){
+	  			this.setAttribute('currentlayerstyle','plain');
+	  		}
+	  		//Debug.write("d: ",this.getAttribute('currentlayerstyle'));
+  		}
+  		]]>
+  	</method>
+	
+	<method name="editTextByValues" args="obj,txtName,txt,x,y,width,height">
+		<![CDATA[
+			if (!this.letterObjectIsActive){
+			    //Debug.write("editTextByValues",height); 
+			    this.edittextLetterObject = obj;
+				this.currentletterObj = new lz.baseDrawWords(this,{refObj:this,x:x,y:y,
+					initTextName:txtName,inittext:txt,width:width,height:height});
+				this.edittextLetter = true;
+			}	
+		]]>
+	</method>
+  	
+		<method name="drawTextField" args="textforfield,width,height,x,y" >
+
+			//Debug.write("drawTextField: ",textforfield,width,x,y);
+			var tempO = this.newTextField(this, 'letter' + this.getCounter(),
+					textforfield, width, height, x, y, this.currentlayersize,
+					this.currentlayerletter, this.currentlayerstyle);
+			this.layers.push(tempO);
+			this.drawTextFieldregister(textforfield, width, x, y,
+					this.currentlayersize, this.currentlayerletter,
+					this.currentlayerstyle, tempO.height, this
+							.getSWFDocumentStatus(), this.getZIndex());
+		</method>
+	
+	<!-- editModus -->
+	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height" >
+		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y);
+		//this.checkForChanges(txtName,textforfield,width,x,y,height);
+		this.edittextLetterObject.setAttribute('text',textforfield);
+		this.edittextLetterObject.setTextEncoded(textforfield);
+		this.edittextLetterObject.setAttribute('width',width);
+		this.edittextLetterObject.setAttribute('height',height);
+		this.edittextLetterObject.setAttribute('visible',true);
+		this.edittextLetterObject.setAttribute('fontsize',this.currentlayersize);
+		this.edittextLetterObject.setAttribute('fgcolor',this.currentlayerletter);
+		this.edittextLetterObject.setAttribute('fontstyle',this.currentlayerstyle);
+		this.updateObjectBounds();
+		this.updateByEditLetterObject();
+		//this.setModus('hand');
+	</method>	
+	
+	<method name="startLetter" args="oid_name">
+		if (oid_name == null) {
+			oid_name = 'letterTemp'+this.getCounter();
+		}		
+    	this.currentlayer = new lz.drawViewNew(this,{name:oid_name,width:this.width+2,height:this.height+2});
+	</method>
+	
+	<method name="drawletterBoundingBox" args="x1,y1,x2,y2">
+   		<![CDATA[
+    		
+    		currentlayer.lineWidth = 1;
+    		currentlayer.beginPath();
+    		currentlayer.moveTo(x1,y1);
+    		currentlayer.lineTo(x1,y2);
+    		currentlayer.lineTo(x2,y2);
+    		currentlayer.lineTo(x2,y1);
+    		currentlayer.lineTo (x1,y1);
+    		currentlayer.closePath();
+    		
+    		currentlayer.strokeStyle = 0x000000;
+    		currentlayer.stroke();
+    		
+    	]]>   
+  	</method>    
+  	
+	<method name="endLetter">
+		<![CDATA[
+			if ($debug) Debug.write("endLetter: ", this.currentlayer);
+			this.currentlayer.destroy();
+			var xProp = 0;
+			var yProp = 0;
+			if (this.startx <= this.endx) {
+				var stx = this.startx;
+			} else {
+				var stx = this.endx;
+			}
+			if (this.starty <= this.endy) {
+				var sty = this.starty;
+			} else {
+				var sty = this.endy;
+			}
+			var width = Math.abs(this.startx - this.endx);
+			var height = Math.abs(this.starty - this.endy);
+			if (width < 20 && height < 20) {
+				width = 160;
+				height = 30;
+			}
+
+			this.currentletterObj = new lz.baseDrawWords(this, {
+						refObj : this,
+						x : xProp + stx,
+						y : yProp + sty,
+						width : width,
+						height : height
+					});
+
+			if ($debug) Debug.write("currentletterObj: ", this.currentletterObj.x, this.currentletterObj.y);
+		]]>
+	</method>
+	
+	
+	<method name="updateByEditLetterObject" >
+		<![CDATA[
+		if ($debug) Debug.write("UpdateByObject : ",this.edittextLetterObject,this.edittextLetterObject.name);
+		var objName = this.edittextLetterObject.name;
+
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+				if ($debug) Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+			    this.baseactionobjectList[eg][1] = this.edittextLetterObject.text;
+			    this.baseactionobjectList[eg][2] = this.edittextLetterObject.fgcolor;
+			    this.baseactionobjectList[eg][3] = this.edittextLetterObject.fontsize;
+			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;			
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.edittextLetterObject.x
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.edittextLetterObject.y;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.edittextLetterObject.width;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = this.edittextLetterObject.height;
+				var newA = this.baseactionobjectList[eg];
+				if (newA[0]=='paint') newA[1] = new Array();				
+				this.onsharedMessage('editText',newA);	
+			    break;
+			}
+		}	
+			
+		]]>
+	</method>	
+	
+	<method name="editTextByHistory" args="actionObject,obj">
+		var editObj = this.getObjectByName(actionObject[actionObject.length-1]);
+		//Debug.write("editTextByHistory: ",editObj,actionObject,actionObject.length);
+		editObj.setAttribute('text',actionObject[1]);
+		editObj.setTextEncoded(actionObject[1]);
+		editObj.setAttribute('width',actionObject[actionObject.length-3]);
+		editObj.setAttribute('height',actionObject[actionObject.length-2]);
+		editObj.setAttribute('fontsize',actionObject[3]);
+		editObj.setAttribute('fgcolor',actionObject[2]);
+		editObj.setAttribute('fontstyle',actionObject[4]);
+	</method>
+	
+	<method name="checkForChanges" args="txtName,textforfield,width,x,y,height">
+		<![CDATA[
+			//Debug.write("checkForChanges: 1 ",txtName,textforfield,width,x,y,height);
+			//Debug.write("checkForChanges: 2 ",this.edittextLetterObject.name,this.edittextLetterObject.text,this.edittextLetterObject.width,this.edittextLetterObject.x,this.edittextLetterObject.y,this.edittextLetterObject.height);
+			//there is always a change
+			
+		]]>
+	</method>	
+	
+	<method name="drawactionHistory" args="actionObject,obj">
+		this.newTextField(obj,actionObject[actionObject.length-1],actionObject[1],
+		              actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		              actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		              actionObject[3],actionObject[2],actionObject[4]);
+		              
+		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+	</method>
+	
+		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle">
+			this.currentlayer = new lz.whiteBoardTextField(obj, {
+						name : naming,
+						x : x,
+						y : y,
+						height : height,
+						multiline : true,
+						width : width,
+						text : textforfield,
+						fontsize : fontsize,
+						fgcolor : fgcolor,
+						fontstyle : fontstyle
+					});
+			this.currentlayer.setTextEncoded(textforfield);
+			//Add Layer to global Layer  	
+			return this.currentlayer;
+		</method>
+	
+	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex">
+		var actionObject = new Array();
+	    actionObject[0] = "letter";
+	    actionObject[1] = textforfield;
+	    actionObject[2] = fgcolor;
+	    actionObject[3] = fontsize;
+	    actionObject[4] = fontstyle;
+	    actionObject[5] = zIndex;//-8
+	    actionObject[6] = swfObj;//-7
+		actionObject[7] = this.counter;//-6
+	    actionObject[8] = x;//-5
+	    actionObject[9] = y;//-4
+	    actionObject[10] = width;//-3
+	    actionObject[11] = height;//-2
+	    actionObject[12] = this.currentlayer.name;//-1	    	    
+	    this.baseactionobjectList.push(actionObject);	
+	    this.checkStepLayers();
+	    this.onsharedMessage('draw',actionObject);	
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx
new file mode 100644
index 0000000..4e2a238
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx
@@ -0,0 +1,862 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawObject" extends="baseDrawPointer">
+    
+    <!-- it uses some of the attribute's defined in baseDrawImage -->
+    <attribute name="newSlideNumber" value="1" type="number" />
+    
+    <attribute name="fullFit" value="true" type="boolean" />
+    
+    <attribute name="modernToolbar" value="false" type="boolean" />
+
+    <!-- 
+    	Invoked by the Library directly
+    	Loads a SWFPresenation to the whiteBoard
+     -->
+    <method name="loadSWFPresentationSynced" args="url,fileName,moduleName,parentPath,room,domain,slideNumber,standardFileName">
+  		var now = new Date();
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = true;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = fileName + now.getTime();
+  		this.startNewObjectSyncProcess.doCall();
+        //if ($debug) Debug.write("loadSWFPresentationSynced",url,fileName,moduleName,parentPath,room,domain,slideNumber,standardFileName);
+        this.addPresentationToLayer(this,url,'swfpresentationobject'+this.getCounter(),
+        	0,0,0,0,
+        	true,
+        	url,fileName,moduleName,parentPath,room,domain,slideNumber,
+        	100,0,0,0,0,
+        	this.startNewObjectSyncProcess.uniqueObjectSyncName,
+            standardFileName,this.fullFit);
+            
+        
+    </method>
+    
+    <method name="setCurrentScaleByFullFit" args="scaleFactor">
+    	<![CDATA[
+    	
+    		var tScale = Math.round(scaleFactor*100);
+    		
+    		this.getDisplayObject()._xscale = tScale;
+    		this.getDisplayObject()._yscale = tScale;
+    		
+    		this.setAttribute("x",0);
+    		this.setAttribute("y",0);
+    		
+    		//Already send by x,y change
+    		//this.onupdateScale.sendEvent(null);
+    		if ($debug) Debug.write("setCurrentScaleByFullFit -1- ",tScale);
+    		
+    		parent.parent.zoombox.setCurrentScaleByFullFit(tScale);
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateFullFit" args="fullFit,zoom">
+    	<![CDATA[
+    	
+            if (canvas.ismoderator) {
+	    		if ($debug) Debug.write("doUpdateFullFit ",fullFit,zoom);
+	    	
+	    		var actionObject = new Array();
+	    		actionObject.push("whiteboardObj");
+	    		actionObject.push(fullFit);
+	    		
+	    		this.doFullFit(fullFit);
+	    		
+	    		actionObject.push(this.getDisplayObject()._xscale);
+	    		
+	    		if ($debug) Debug.write("doUpdateFullFit ",fullFit,this.getDisplayObject()._xscale);
+	    		this.onsharedMessage('whiteboardObj',actionObject);
+    		}	
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateZoom" args="fullFit,zoom">
+    	<![CDATA[
+    	
+    		if ($debug) Debug.write("doUpdateZoom ",this.fullFit,zoom);
+    		
+    		this.getDisplayObject()._xscale = zoom;
+    		this.getDisplayObject()._yscale = zoom;
+    		
+    		if ($debug) Debug.write("doUpdateZoom is moderator ", canvas.ismoderator);
+            if (canvas.ismoderator) {
+	    		var actionObject = new Array();
+	    		actionObject.push("whiteboardObj");
+	    		actionObject.push(fullFit);
+	    		actionObject.push(zoom);
+    		
+	    		this.onupdateScale.sendEvent(null);
+	    		this.onsharedMessage('whiteboardObj',actionObject);	
+            }
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateFullFitAndZoomRemote" args="actionObject">
+    	<![CDATA[
+    		parent.parent.zoombox.setWhiteboardValues(actionObject[1],actionObject[2]);
+    		if ($debug) Debug.write("doUpdateFullFitAndZoomRemote ",actionObject[1],actionObject[2]);
+
+    		this.doFullFit(actionObject[1]);
+    		
+    		if (!actionObject[1]) {
+	    		this.getDisplayObject()._xscale = actionObject[2];
+	    		this.getDisplayObject()._yscale = actionObject[2];
+	    		this.onupdateScale.sendEvent(null);
+    		}
+    	
+    	]]>
+    </method>
+    
+    <method name="doFullFit" args="v">
+        <![CDATA[
+        	if ($debug) Debug.write("Do Full Fit ? doFullFit: ", v);
+        	if ($debug) Debug.write(this.ObjectByName);
+        
+        	this.fullFit = v;
+        	
+            if (this.ObjectByName && this.ObjectByName.typeOfObject=="swf") {    
+                if (v) {
+                    if ($debug) Debug.write("Do Full Fit !");
+                    this.ObjectByName._swfView.initialLoadFullFit();
+                }
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="checkSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+        //this.addPresentationToLayer(this,url,'swfpresentationobject'+this.getCounter(),0,0,0,0,true,url,fileName,moduleName,parentPath,room,domain,slideNumber);
+        <![CDATA[
+            for (var i=0;i<this.baseactionobjectList.length;i++){
+                if (fileName==this.baseactionobjectList[i][3]){
+                    var whiteBoardName = this.baseactionobjectList[i][this.baseactionobjectList[i].length-1];
+                    //Debug.write("Found File: ",whiteBoardName,this.baseactionobjectList[i]);
+                    //this.baseactionobjectList[i].bringToFront();
+                    this.doShowObjectBounds(whiteBoardName);
+                    this.newSlideNumber = slideNumber;
+                    this.doDocumentAction('setSlideNumber');
+                    return true;
+                }
+            } 
+            return false;
+        ]]>
+    </method>
+    
+	<!--
+		alterModus => this is added by the mod not remotely
+		
+		adds the SWF-Object to the Layer
+	 -->
+  	<method name="addPresentationToLayer" args="obj,urlName,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,currentzoom,innerwidth,innerheight,innerx,innery,uniqueObjectSyncName,standardFileName,fullFit">
+        <![CDATA[
+            if ($debug) Debug.write("addPresentationToLayer",standardFileName);
+            //only show if it is not part of wml-file-object
+            //if (!this.isWmlLoaderImage) {
+            //    this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+            //    this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+            //}
+        	//if ($debug) Debug.write("addPresentationToLayer uniqueObjectSyncName:",uniqueObjectSyncName,innerwidth,innerheight);
+            
+            var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileName) +
+                    '&moduleName=' + moduleName + 
+                    '&parentPath=' + encodeURIComponent(parentPath + '/') +
+                    '&room_id='+room + 
+                    '&sid='+canvas.sessionId;
+            
+            //var width= this.width;
+            //var height = this.height-200;
+            ////Debug.write("width:height: ",width,height);
+            
+            this.currentlayer = new lz.swfResourceView(obj,{refObj:this,name:nameing,
+            	x:posx,y:posy,alterModus:alterModus,
+            	baseurl:baseurl,fileName:fileName,moduleName:moduleName,parentPath:parentPath,
+            	room:room,domain:domain,slideNumber:slideNumber,
+            	currentzoom:currentzoom,fullFit:fullFit,
+                standardFileName:standardFileName,
+            	innerwidth:innerwidth,innerheight:innerheight,
+            	innerx:innerx,innery:innery,
+            	uniqueObjectSyncName:uniqueObjectSyncName});
+
+            //this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+            ////Debug.write("downloadurl. ",downloadurl);
+            this.currentlayer._swfView.setSource(downloadurl);
+            
+            this.addItemToDocumentToolBar();
+            this.doUpdateDocumentToolBar();
+		]]>
+  	</method>
+  	
+  	<!--
+  		TODO: check Recording
+  	
+  	<method name="addPresentationToLayerRecording" args="obj,urlName,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,currentzoom,innerwidth,innerheight,innerx,innery">
+        <![CDATA[
+            //Debug.write("addPresentationToLayer",obj,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber);
+            //only show if it is not part of wml-file-object
+            if (!this.isWmlLoaderImage) {
+                this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+                this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+            }
+            var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileName) +
+                    '&moduleName=' + moduleName + 
+                    '&parentPath=' + encodeURIComponent(parentPath) +
+                    '&room_id='+room + 
+                    '&sid='+canvas.sessionId;
+            var width= this.width;
+            var height = this.height;
+            
+            this.currentlayer = new lz.swfResourceView(obj,{refObj:this,name:nameing,
+            	x:posx,y:posy,
+            	alterModus:alterModus,
+            	baseurl:baseurl,fileName:fileName,moduleName:moduleName,
+            	parentPath:parentPath,room:room,domain:domain,
+            	slideNumber:slideNumber,width:width,height:height,
+            	currentzoom:currentzoom,innerwidth:innerwidth,innerheight:innerheight,
+            	innerx:innerx,innery:innery,recorderModus:true});
+
+            this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+            this.currentlayer._swfView.setSource(downloadurl);
+            
+            //Add Layer to global Layer  	
+            return this.currentlayer;
+		]]>
+  	</method>  	
+    -->
+    
+    <method name="addSWFToLayerHistory" args="actionObject,refObj,isWmlLoader">
+        this.isWmlLoaderImage = isWmlLoader;
+        this.baseactionobjectList.push(actionObject);   
+        this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+            actionObject[actionObject.length-5],actionObject[actionObject.length-4],actionObject[actionObject.length-3],
+            actionObject[actionObject.length-2],false,actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+            actionObject[6],actionObject[7],
+            actionObject[8],actionObject[16],actionObject[11],actionObject[12],actionObject[9],actionObject[10],
+            actionObject[17],actionObject[18],actionObject[19]);
+    </method>
+    
+    <!-- 
+    	Invoked by the remote Host, see sendWatchObject in baseDraw.lzx
+     -->
+    <method name="addSWFToLayerHistorySynced" args="actionObject,refObj">
+        this.baseactionobjectList.push(actionObject);	
+  		this.startNewObjectSyncProcess.isStarting = false;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = actionObject[17];
+  		this.startNewObjectSyncProcess.doCall();        
+   		this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],
+  			actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],
+  			actionObject[9],actionObject[10],actionObject[17],actionObject[18],actionObject[19]);
+  	</method>
+  	
+	<!--- 
+		invoke by the initial Loading process in remoteWhiteboard.lzx, 
+		does not invoke any Update Handler
+		once this object is loaded, it will throw an Update event of kind
+		addSWFToLayerHistoryToLocalLoaded
+  	 -->
+  	<method name="addSWFToLayerHistoryToLocal" args="actionObject,refObj">
+        this.baseactionobjectList.push(actionObject);	
+  		this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],
+  			actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],
+  			actionObject[9],actionObject[10],actionObject[17],actionObject[18],actionObject[19]);
+  	</method>
+  	
+  	<!--
+  		TODO: Check Recording Process
+  	 
+  	<method name="addSWFToLayerHistoryRecording" args="actionObject,refObj,isWmlLoader">
+		this.isWmlLoaderImage = isWmlLoader;
+        this.baseactionobjectList.push(actionObject);	
+  		this.addPresentationToLayerRecording(refObj,actionObject[1],actionObject[actionObject.length-1],actionObject[actionObject.length-5],actionObject[actionObject.length-4],actionObject[actionObject.length-3],actionObject[actionObject.length-2],false,actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],actionObject[9],actionObject[10]);
+  	</method>
+    -->
+  	
+  	<method name="registerNewSWF" args="urlname,posx,posy,width,height,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,innerx,innery,innerwidth,innerheight,zoomlevel,currentzoom,initwidth,initheight,uniquObjectSyncName,doUpdateMessage,standardFileName,fullFit,zIndex">
+		var actionObject = new Array();
+	    actionObject.push('swf');//0
+	    actionObject.push(urlname);//1
+		actionObject.push(baseurl);//2
+		actionObject.push(fileName);//3
+		actionObject.push(moduleName);//4
+		actionObject.push(parentPath);//5
+		actionObject.push(room);//6
+		actionObject.push(domain);//7
+        actionObject.push(slideNumber);//8
+        actionObject.push(innerx);//9
+        actionObject.push(innery);//10
+        actionObject.push(innerwidth);//11
+        actionObject.push(innerheight);//12
+        actionObject.push(zoomlevel);//13
+        actionObject.push(initwidth);//14
+        actionObject.push(initheight);//15
+        actionObject.push(currentzoom);//16
+        actionObject.push(uniquObjectSyncName);//17
+        actionObject.push(standardFileName);//18
+        actionObject.push(fullFit);//19
+        actionObject.push(zIndex);//-8
+        actionObject.push(null);//-7
+		actionObject.push(this.counter);//-6
+	    actionObject.push(posx);//-5
+	    actionObject.push(posy);//-4
+	    actionObject.push(width);//-3
+	    actionObject.push(height);//-2
+	    actionObject.push(this.currentlayer.name);//-1
+	    this.baseactionobjectList.push(actionObject);
+	    this.checkStepLayers();
+	    if (doUpdateMessage) this.onsharedMessage('draw',actionObject);	
+  	</method>    
+    
+	<!--
+		Invoked by the swfResource, if the alterModus = true,
+		throws an Update-Event to all connected Clients
+	 -->
+	<method name="storeTempValsAndLoadSyncListSWF" args="objRef">
+		this.syncImageRefObj = objRef;
+		this.doRegisterNewSwf(true);
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>    
+	
+	<!--
+		Invoked by the swfResource, if the alterModus = false,
+		throws NO Update-Event to all connected Clients
+	 -->
+	<method name="sendLoadNotificationSWF" args="objRef" >
+		this.syncImageRefObj = objRef;
+		this.doRegisterNewSwf(false);
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>
+	
+	<!-- 
+		TODO: Check Recording
+	-->
+	<method name="storeTempValsAndLoadSyncListSWFRecording" args="objRef">
+		this.syncImageRefObj = objRef;
+		//this.doRegisterNewSwf();
+		//this.sendCompleteSWFSync();
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>    
+    
+	
+
+	<!-- sending messages/notifications of sync process
+		syncing is now on server side implemented, swagner 12.06.2008
+	<netRemoteCallHib name="sendMessageWithClientSWF" funcname="sendMessageWithClient" remotecontext="$once{ canvas.thishib }" >   
+		<netparam name="vars"><method name="getValue">return parent.parent.imageLoadingCompleteMessage;</method></netparam>
+		<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				////Debug.write("getValue : ",value);
+			]]>
+		</handler>   
+	</netRemoteCallHib>     
+     -->
+     
+	<!-- get list of clients before loading image cause
+		we have to show the sync process
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+	
+    <netRemoteCallHib name="getSWFClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >          
+        <handler name="ondata" args="value">
+        	<![CDATA[
+				//The onResult-Handler will be called by the rtmpconnection
+				////Debug.write("getSWFClientListScope Instance: ",value);
+				parent._loadingUsersImageList = new Array();
+				for (var eg in value){
+					if (canvas.streamid != value[eg].streamid){
+						//Debug.write("parent._loadingUsersImageList value eg ",eg,value[eg]);
+						parent._loadingUsersImageList.push(value[eg]);
+					}
+				}
+				this.parent.doRegisterNewSwf();	
+				this.parent.startSWFsyncCheck();			
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+    	-->
+    
+    <method name="doRegisterNewSwf" args="doUpdateMessage">
+		//now send notifications to connected clients
+		this.setAttribute('drawmodus','hand');
+        
+		this.registerNewSWF(this.syncImageRefObj.baseurl,this.syncImageRefObj.x,
+                this.syncImageRefObj.y,this.syncImageRefObj._swfView.width,
+                this.syncImageRefObj._swfView.height,this.syncImageRefObj.baseurl,
+                this.syncImageRefObj.fileName,this.syncImageRefObj.moduleName,
+                this.syncImageRefObj.parentPath,this.syncImageRefObj.room,
+                this.syncImageRefObj.domain,this.syncImageRefObj.slideNumber,
+                this.syncImageRefObj._swfView.x,this.syncImageRefObj._swfView.y,
+                this.syncImageRefObj._swfView.width,this.syncImageRefObj._swfView.height,
+                this.syncImageRefObj.zoomlevel,this.syncImageRefObj.currentzoomFactor,
+                this.syncImageRefObj.initwidth,this.syncImageRefObj.initheight,
+                this.syncImageRefObj.uniqueObjectSyncName,doUpdateMessage,
+                this.syncImageRefObj.standardFileName,
+                this.syncImageRefObj.fullFit,
+                this.getZIndex());
+        
+		//set modus to hand so users can directly select that image
+		this.setModus('swf');
+    </method>
+	
+	<!-- after loading the objects check if all connected clients of that conference
+		have loaded the file completely, check it every 1 seconds
+		syncing is now on server side implemented, swagner 12.06.2008
+	<method name="startSWFsyncCheck">
+		<![CDATA[
+			if (this._loadingUsersImageList.length==0){
+				this.sendSyncNotificationSWF();
+			} else {
+				var txt = this.imageSyncMessageText+' '+this._loadingUsersImageList.length;
+				this.loadimageDataWinRef.setMessage(txt);
+				this.loadImageObjectTimer = new LzDelegate( this, "startImgaesyncCheck" );
+				lz.Timer.addTimer( this.loadImageObjectTimer, this.syncImageCheckTime );
+			}
+		]]>
+	</method>	
+	 -->
+
+	<method name="sendSyncNotificationSWF">
+		this.imageLoadingCompleteMessage = new Array();
+		this.imageLoadingCompleteMessage[0] = "whiteboard";
+		this.imageLoadingCompleteMessage[1] = "swfsynccomplete";
+		this.sendMessageWithClientSWF.doCall();
+	</method>	
+
+	<!-- invoked by remote client once he has completely loaded the wml-file 
+		remote client is waiting/still shows loading window untill all clients have 
+		completely loaded the object/moderator sends "synccomplete" message
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+		
+	<method name="sendCompleteSWFLoadedRClient" args="client">
+		<![CDATA[
+			//detect self messageing
+			if (client.streamid!=canvas.streamid){
+				//remove client from sync list
+				for (var i=0;i<this._loadingUsersImageList.length;i++){
+					if (this._loadingUsersImageList[i].streamid==client.streamid){
+						////Debug.write("deleteing client from list: ",this._loadingUsersImageList[i].streamid);
+						this._loadingUsersImageList.splice(i,1);
+					}
+				}
+			}
+		]]>
+	</method>
+	
+	 -->
+	
+	<!-- invoked remotely by Moderator
+		all clients have succeed in loading the image
+		loading win can be closed
+		Alert: This notification will be send from Moderator and received by ALL clients INCLUDING
+		the moderator, so the moderator needs no extra command *close* for loading bar cause he
+		gets its own *sync* complete nofification
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+			
+	<method name="sendCompleteSWFSync" args="client">
+		////Debug.write("sendCompleteSWFSync ",client);
+		this.loadimageDataWinRef.close();
+	</method>  
+     -->
+    
+    <!-- Document actions
+        this.ObjectByName is set by the method doShowObjectBounds of baseDraw and holds a reference to
+        the currently selected object on the whiteboard
+     -->
+    <method name="doDocumentAction" args="action">
+        <![CDATA[
+            if ($debug) Debug.info("doDocumentAction :1: sendCurrentSWFObject ",action);
+            if (this.ObjectByName.typeOfObject=="swf") {
+                if (action=="doc_first"){
+                    this.ObjectByName._swfView.setAttribute('frame',1);
+                } else if (action=="doc_pre"){
+                    if (this.ObjectByName._swfView.frame>1){
+                        this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.frame-1));
+                    }
+                } else if (action=="doc_next"){
+                    if (this.ObjectByName._swfView.frame<this.ObjectByName._swfView.totalframes){
+                        this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.frame+1));
+                    }
+                } else if (action=="doc_last"){
+                    this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.totalframes));
+                } else if (action=="doc_zoom_minus"){
+                	
+                	if ($debug) Debug.write("doc_zoom_minus ");
+                	return;
+                	
+                    this.ObjectByName.currentzoomFactor-=this.ObjectByName.zoomlevel;       
+                    var newwidth = (this.ObjectByName.initwidth/100)*this.ObjectByName.currentzoomFactor;
+                    var newheight = (this.ObjectByName.initheight/100)*this.ObjectByName.currentzoomFactor;
+                    this.ObjectByName._swfView.setAttribute('width',newwidth);
+                    this.ObjectByName._swfView.setAttribute('height',newheight);
+                    this.boundingref.doSetInnerObjectsBounds(newwidth,newheight);
+                } else if (action=="doc_zoom_plus"){
+                	
+                	if ($debug) Debug.write("doc_zoom_plus ");
+                	return;
+                	
+                    this.ObjectByName.currentzoomFactor+=this.ObjectByName.zoomlevel;       
+                    //Debug.write("doc_zoom_plus 1",this.ObjectByName.currentzoomFactor,this.ObjectByName.zoomlevel);
+                    var newwidth = (this.ObjectByName.initwidth/100)*this.ObjectByName.currentzoomFactor;
+                    var newheight = (this.ObjectByName.initheight/100)*this.ObjectByName.currentzoomFactor;
+                    //Debug.write(this.ObjectByName);
+                    //Debug.write("doc_zoom_plus 2",newwidth,newwidth);
+                    this.ObjectByName._swfView.setAttribute('width',newwidth);
+                    this.ObjectByName._swfView.setAttribute('height',newheight);
+                    this.boundingref.doSetInnerObjectsBounds(newwidth,newheight);
+                } else if (action=="setSlideNumber"){
+                    if (this.newSlideNumber>0 && this.newSlideNumber<=this.ObjectByName._swfView.totalframes){
+                    	if ($debug) Debug.warn("Slide New Number ",this.newSlideNumber);
+                        this.ObjectByName._swfView.setAttribute('frame',this.newSlideNumber);
+                    } else {
+                        if ($debug) Debug.warn("Slide Number out of range of that document TotalFrames: ",this.ObjectByName._swfView.totalframes);
+                    }
+                }
+                this.ObjectByName.slideNumber =  this.ObjectByName._swfView.frame;
+                this.doUpdateDocumentToolBar();
+                
+                if ($debug) Debug.info("doDocumentAction :2: sendCurrentSWFObject");
+                
+                this.sendCurrentSWFObject(this.ObjectByName);
+                
+            }
+        ]]>
+    </method>
+    
+    <method name="addItemToDocumentToolBar">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.addCurrentObject(this.currentlayer);
+    </method>
+    
+    <method name="setCurrentDocumentByToolBar" args="itemRefName">
+        if (this.boundingIsActive){
+        	if (this.boundingref.objRef.name != itemRefName) {
+        		this.boundingref._innerDrag.onmouseup.sendEvent();
+        	}
+        }
+        this.setCurrentDocument();
+    </method>
+    
+    <method name="setCurrentDocument" args="itemRefName">
+    	var t = this.getObjectByName(itemRefName);
+    	if (t==null) {
+    		return;
+    	}
+        this.ObjectByName = t;
+        this.doUpdateDocumentToolBar();
+        
+        if ($debug) Debug.write("setCurrentDocument ",itemRefName,this.ObjectByName);
+        
+        //not needed anymore
+        //this.sendItemToFront(itemRefName);
+        //this.bringItemToFrontByName(itemRefName);
+    </method>
+    
+    <method name="sendItemToFront" args="itemRefName">
+        var actionObject = new Array();
+        actionObject[0] = 'item';
+        actionObject[1] = itemRefName;
+        this.onsharedMessage('sendItemToFront',actionObject);
+    </method>    
+    
+    <method name="bringItemToFrontByName" args="itemRefName">
+        this.ObjectByName = this.getObjectByName(itemRefName);
+        this.ObjectByName.bringToFront();
+    </method>
+    
+    <method name="doUpdateDocumentToolBarByParticipant" args="itemObjName">
+        this.ObjectByName = this.getObjectByName(itemObjName);
+        this.doUpdateDocumentToolBar();
+    </method>
+    
+    <method name="doUpdateDocumentToolBar">
+    	<![CDATA[
+        	if (this.modernToolbar) {
+                //@deprecated
+                //this code is not valdi for the latest dev anymore, only inside for 
+                //backward compatibility
+    	        //this.parent.parent._documentmenu._currentSlideNo.setAttribute('text',this.ObjectByName._swfView.frame);
+    	        //this.parent.parent._documentmenu._totalSlideNo.setAttribute('text',this.ObjectByName._swfView.totalframes);
+    	        //this.parent.parent._documentmenu._zoom.setAttribute('text',this.ObjectByName.currentzoomFactor);
+        	
+            } else {
+                
+        		var docToolbar = this.getDocumentToolBar();
+        		
+                if ($debug) Debug.write("doUpdateDocumentToolBar ",docToolbar.parent.parent.ignoreUpdates);
+                docToolbar.parent.parent.ignoreUpdates = true;
+                
+        		if (this["ObjectByName"] && this.ObjectByName != null && this.ObjectByName._swfView) {
+                    
+                    if ($debug) Debug.warn("doUpdateDocumentToolBar ",this.ObjectByName.fullFit);
+                    
+        			docToolbar._currentSlideNo.setAttribute('text',this.ObjectByName._swfView.frame);
+                    docToolbar._totalSlideNo.setAttribute('text',this.ObjectByName._swfView.totalframes);
+                    //docToolbar._zoom.setAttribute('text',this.ObjectByName.currentzoomFactor);
+                    //docToolbar.parent._fullFit.setValue(this.ObjectByName.fullFit);
+        		} else {
+        			docToolbar._currentSlideNo.setAttribute('text',"0");
+                    docToolbar._totalSlideNo.setAttribute('text',"0");
+                    //docToolbar._zoom.setAttribute('text',"100");
+                    //docToolbar.parent._fullFit.setValue(false);
+        		}
+                
+                docToolbar.parent.parent.ignoreUpdates = false;
+    	        
+        	}
+    	]]>
+    </method>
+    
+    <method name="doDeleteFromDocumentsBar" args="itemRefName">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.removeDocument(itemRefName);
+    </method>
+    
+    <method name="clearDocumentsBar">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.clearDocumentsBar();
+    </method>
+    
+    <method name="sendCurrentSWFObject" args="objRef">
+		<![CDATA[
+            if ($debug) Debug.write("sendCurrentSWFObject :: ",objRef,objRef.name);
+            var objName = objRef.name;
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+                    ////Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+                    var sendSlideObjectUpdate = false;
+                    if (this.baseactionobjectList[eg][8] != objRef.slideNumber) {
+                    	sendSlideObjectUpdate = true;
+                    }
+                    this.baseactionobjectList[eg][8] = objRef.slideNumber;
+                    this.baseactionobjectList[eg][9] = objRef._swfView.x;
+                    this.baseactionobjectList[eg][10] = objRef._swfView.y;
+                    this.baseactionobjectList[eg][11] = objRef._swfView.width;
+                    this.baseactionobjectList[eg][12] = objRef._swfView.height;
+                    this.baseactionobjectList[eg][13] = objRef.zoomlevel;
+                    this.baseactionobjectList[eg][16] = objRef.currentzoomFactor;
+                    this.baseactionobjectList[eg][19] = objRef.fullFit;
+                    var newA = this.baseactionobjectList[eg];
+                    if (newA[0]=='paint') newA[1] = new Array();				
+                    this.onsharedMessage('swf',newA);	
+                    if (sendSlideObjectUpdate) {
+                        this.updateObjectsToSlideNumber(this.baseactionobjectList[eg]);
+                    }
+                    break;
+                }
+            }	
+		]]>
+	</method>
+    
+    <method name="remoteObjectUpdate" args="lastactionObject">
+        <![CDATA[
+        
+            var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+            
+            if ($debug) Debug.write("remoteObjectUpdate :: ",obj.fullFit);
+            obj._swfView.doSendChangeValue = false;
+            var sendSlideObjectUpdate = false;
+            if (obj.slideNumber != lastactionObject[8]) {
+            	sendSlideObjectUpdate = true;
+            }
+			obj.slideNumber = lastactionObject[8];
+			obj._swfView.setAttribute('x',lastactionObject[9]);
+			obj._swfView.setAttribute('y',lastactionObject[10]);
+			obj._swfView.setAttribute('width',lastactionObject[11]);
+            obj._swfView.setAttribute('height',lastactionObject[12]);
+            //obj.zoomlevel = lastactionObject[13];
+            //obj.currentzoomFactor = lastactionObject[16];
+            obj.fullFit = lastactionObject[19];
+            
+            if ($debug) Debug.write("DO initialLoadFullFit ?? ",obj.fullFit);
+            
+            if (obj.fullFit) {
+                if ($debug) Debug.write("DO initialLoadFullFit !! ");
+                obj._swfView.initialLoadFullFit();
+            }
+            
+            obj._swfView.setAttribute('frame',obj.slideNumber);
+            obj._swfView.doSendChangeValue = true;
+            
+            this.doUpdateDocumentToolBarByParticipant(obj.name);
+            
+            this.remoteUpdateBaseObjectList(lastactionObject);
+            
+            if (sendSlideObjectUpdate) {
+                this.updateObjectsToSlideNumber(lastactionObject);
+            }
+        ]]>
+    </method>
+    
+    <method name="remoteUpdateBaseObjectList" args="actionObject">
+		<![CDATA[
+            ////Debug.write("remoteUpdateBaseObjectList : ",actionObject);
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==actionObject[actionObject.length-1]) {
+                    this.baseactionobjectList[eg] = actionObject;
+                    break;
+                }
+            }	
+		]]>
+    </method>
+    
+    
+    
+    
+    
+    <method name="playVideoSynced" args="fileExplorerItemId,fileName,flv_width,flv_height">
+        <![CDATA[
+        
+            if ($debug) Debug.write("playVideoSynced : ",fileExplorerItemId,fileName,flv_width,flv_height);
+        
+            var tName = 'flv'+this.getCounter();
+            
+            this.currentlayer = new lz.whiteboardVideoPlayer(this,{
+                                            name:tName,
+                                            fileExplorerItemId:fileExplorerItemId,
+                                            title:fileName,
+                                            sendInit:true,
+                                            flv_width:flv_width,
+                                            flv_height:flv_height
+                                        });
+                                        
+            this.layers.push(this.currentlayer);  
+        ]]>
+    </method>
+    
+    <method name="sendNewVideoRemote" args="refObj">
+        <![CDATA[
+        
+            if ($debug) Debug.write("sendNewVideoRemote : ",refObj.fileExplorerItemId,refObj.title);
+        
+            this.flvregisterFinal(refObj.name,refObj.x,refObj.y,refObj.width,refObj.height,
+                                                refObj.fileExplorerItemId,refObj.title,
+                                                false, //isPlaying
+                                                refObj.flv_width,
+                                                refObj.flv_height,
+                                                this.getZIndex());
+                        
+            
+        ]]>
+    </method>
+    
+    <method name="flvregisterFinal" args="newName,x,y,width,height,fileExplorerItemId,fileName,isPlaying,flv_width,flv_height,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'flv';
+        actionObject[1] = fileExplorerItemId;
+        actionObject[2] = fileName;
+        actionObject[3] = isPlaying;
+        actionObject[4] = flv_width; 
+        actionObject[5] = flv_height;   
+        actionObject[6] = zIndex;//-8
+        actionObject[7] = null;//-7
+        actionObject[8] = this.counter;//-6
+        actionObject[9] = x;//-5
+        actionObject[10] = y;//-4
+        actionObject[11] = width;//-3
+        actionObject[12] = height;//-2
+        actionObject[13] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        this.onsharedMessage('draw',actionObject);
+    </method>     
+    
+    <method name="drawFlvToHistory" args="lastActionObject,parentView">
+        <![CDATA[
+        
+            if ($debug) Debug.write("drawFlvToHistory PLAY :: ",lastActionObject[3]);
+        
+            this.currentlayer = new lz.whiteboardVideoPlayer(this,{
+                                            name:lastActionObject[lastActionObject.length-1],
+                                            fileExplorerItemId:lastActionObject[1],
+                                            title:lastActionObject[2],
+                                            flv_width:lastActionObject[4],
+                                            flv_height:lastActionObject[5]
+                                        });
+               
+            if (lastActionObject[3]) {
+                this.currentlayer.playRemote();
+            }
+                                        
+            this.layers.push(this.currentlayer);  
+            
+        ]]>
+    </method>
+    <!-- 
+     x:lastActionObject[lastActionObject.length-5],
+     y:lastActionObject[lastActionObject.length-4],
+     width:lastActionObject[lastActionObject.length-3],
+     height:lastActionObject[lastActionObject.length-2]
+     -->
+    
+    <method name="playFLV" args="refObj,play">
+        <![CDATA[
+            
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==refObj.name) {
+                    ////Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+                    
+                    this.baseactionobjectList[eg][3] = play;
+                    
+                    if ($debug) Debug.write("playFLV :: ",this.baseactionobjectList[eg]);
+                    this.onsharedMessage('flv',this.baseactionobjectList[eg]);
+                    
+                    break;
+                }
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="playFLVRemote" args="actionObject">
+
+        var tObj = this.getObjectByName(actionObject[actionObject.length-1]);
+        
+        if (actionObject[3]) {
+            tObj.playRemote();
+        }
+        if (!actionObject[3]) {
+            tObj.stopRemote();
+        }
+
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx
new file mode 100644
index 0000000..39b894c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawSave" extends="baseDrawImage" >
+	
+	<!-- saveing a file to a wml Object -->
+	<attribute name="savefileName" value="savefileName1" type="string" />
+	<attribute name="fileData" value="null" />
+	<attribute name="savefileDataWinRef" value="null" />
+	
+	<!-- loading a file from a wml Object
+	<attribute name="loadfileData" value="null" />
+	<attribute name="loadfileDataIndex" value="0" type="number" />
+	<attribute name="loadfileDataWinRef" value="null" />
+	<attribute name="loadObjectTimer" value="null" />
+	<attribute name="loadmessageId" value="206" type="number" />
+	<attribute name="syncmessageId" value="207" type="number" />
+	<attribute name="_loadmessageTxt" value="" type="string" />
+	<attribute name="_loadingUsers" value="null" />
+	<attribute name="wmlfileName" value="" type="string" />
+	<attribute name="wmlroom" value="" type="string" />
+	<attribute name="wmldomain" value="" type="string" />
+	<attribute name="wmlspreadNews" value="false" type="boolean" />
+	<attribute name="wmlLoadingCompleteMessage" value="null" />
+	<attribute name="synccheckTime" value="1000" type="number" />
+	 -->
+	
+	<!-- loading all stage objects on init -->
+	<attribute name="isInitLoader" value="false" type="boolean" />
+    
+    <!-- Export Image Type -->
+    <attribute name="exportType" value="svg" type="string" />
+    
+	<!-- Vars for storing screenshot
+		removed cause of performance and 
+		no php backend availible anymore -->		
+    <attribute name="MCRef" value="null" />
+    
+    <attribute name="pixelArray" value="null" />
+    <attribute name="snap" value="null" />
+    <attribute name="bpData" value="null" />
+    <attribute name="MatrixValue" value="null" />
+    
+    <attribute name="w" value="0" type="number" />
+    <attribute name="h" value="0" type="number" />
+    
+    <attribute name="a" value="0" type="number" />
+    
+    <attribute name="pixel_del" value="$once{ new LzDelegate(this, 'buildPixelArray' )}" />
+    
+    <attribute name="sendpictureName" value="snapchot.jpg" type="string" />
+    
+    <attribute name="isSendPartArray" value="true" type="boolean" />
+    
+    <attribute name="isRecordingLoad" value="false" type="boolean" />
+    <attribute name="isinitRecordingLoad" value="false" type="boolean" />
+	
+	<!-- Start and Stop Event will be thrown by the loading process -->
+	<event name="onwmlloadStart" />
+	<event name="onwmlloadStop" />
+    
+    <!-- Images will be send in packages 
+    	so timeout is workaround
+     -->
+    <attribute name="sendPartURL" value="http://host/createimagefrombitmap.php" type="string" />
+    
+    <!-- create Image from whole Array
+    	Large Images will not be rendered correctly here cause
+    	there can be a timeout -->
+    <attribute name="sendURL" value="http://host/createimagefrombitmap.php" type="string" />
+    
+    <event name="onprogress" />
+    
+    <method name="catchSnapshot">
+        <![CDATA[
+        this.MCRef = this.getDisplayObject();
+        //Debug.write("this.MCRef: ",this.MCRef);
+        this.snap = new flash.display.BitmapData(this.width, this.height, false, 0 );
+        
+        //Matrix to scale the new image
+        this.MatrixValue = new flash.geom.Matrix();
+        this.MatrixValue.scale(1, 1);
+        //Copy video image
+        this.snap.draw(this.MCRef,  this.MatrixValue); 
+        
+        this.bpData = this.snap.getPixels(this.snap.rectangle);
+        
+        this.w = this.width;
+        this.h = this.height;
+        this.a = 0;
+        this.pixelArray = new Array();
+        
+        //pixel_del.register(lz.Idle,'onidle');
+        this.saveAsImage.doCall();
+        ]]>
+    </method>
+    
+	  	<netRemoteCallHib name="saveAsImage" funcname="fileservice.saveAsImage" remotecontext="$once{ canvas.thishib }" >   
+	  		<netparam><method name="getValue">return parent.parent.bpData;</method></netparam>
+	        <handler name="ondata" args="value">	
+	        	//Debug.write("  saveAsImage: ",value);              	          				
+	        </handler>	
+	  	</netRemoteCallHib>     
+    
+    <method name="buildPixelArray" args="item">
+        <![CDATA[
+        
+        for(var b=0; b<=this.h; b++){
+            var tmp = this.snap.getPixel(a, b);
+            this.pixelArray.push(tmp.toString(16));
+        }
+        var perc =  Math.round((this.a*100)/this.w);
+        if (this.onprogress) this.onprogress.sendEvent(perc);            
+        this.a++
+        if(this.a>this.w){ 
+            //Finish capturing
+            if (this.isSendPartArray){
+            	this.sendPHPData(this.pixelArray, this.h, this.w);
+            } else {
+	            this.sendPHPData(this.pixelArray, this.h, this.w);
+	        }
+            //free memory
+            this.snap.dispose();
+            pixel_del.unregisterAll();
+        }
+        
+        ]]>
+    </method>
+    
+    <method name="sendPHPData" args="pix,pixH,pixW">
+        //Debug.write("### sendPHPData: ",pix,pixH,pixW);
+        <![CDATA[
+	        //Create the LoadVars object and pass data to PHP script
+	        var output = new LoadVars();
+	        output.img = pix.toString();
+	        output.height = pixH;
+	        output.width = pixW;
+	        //The page (and this movie itself) should be in a server to work
+	        output.send(this.sendURL, "output", "POST");
+        ]]> 
+    </method>
+	
+	<!-- saving all object on whiteBoard as wml-file -->
+	
+	<handler name="sendObject">
+		if ($debug) Debug.write("sendObject doSave: ",this.baseactionobjectList);
+		this.fileData = this.baseactionobjectList;
+		this.savefileDataWinRef = new lz.saveAsWmlWindow(canvas.main_content._content.inner,{
+                                                refObj:this});
+	</handler>
+	
+	<method name="confirmSaveAsObject" args="fileName" >
+		this.savefileName = fileName;
+		this.saveAsObject.doCall();
+	</method>
+    
+  	<netRemoteCallHib name="saveAsObject" funcname="fileservice.saveAsObject" remotecontext="$once{ canvas.thishib }" >   
+  		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        				  
+		<netparam><method name="getValue"> return parent.parent.savefileName; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.fileData;</method></netparam>
+        <handler name="ondata" args="value">	
+			<![CDATA[
+				if ($debug) Debug.write("  saveAsImage: ",value);   
+			    if (value>0){
+					parent.savefileDataWinRef.close();
+					canvas.currentFileExplorer.loadFiles();
+				} else {
+					new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:value});
+				}
+			]]>  	          				
+        </handler>	
+  	</netRemoteCallHib>  
+        
+    <method name="confirmSaveAsImageTypeExport" args="fileName,type">
+        this.savefileName = fileName;
+        this.exportType = type;
+        this.fileData = this.baseactionobjectList;
+        this.addPrintList.doCall();
+    </method> 
+     
+    <method name="confirmSaveAsImageExport" args="fileName">
+        this.savefileName = fileName;
+        this.exportType = "svg";
+        this.fileData = this.baseactionobjectList;
+        this.addPrintList.doCall();
+    </method>	
+    
+        <netRemoteCallHib name="addPrintList" funcname="printservice.addPrintList" remotecontext="$once{ canvas.thishib }" > 
+          
+            <netparam><method name="getValue">return canvas.sessionId; </method></netparam>
+            <!--             
+            <netparam><method name="getValue">return parent.parent.savefileName; </method></netparam>
+             -->
+            <netparam><method name="getValue">return parent.parent.fileData;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.width;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.height;</method></netparam>
+            <handler name="ondata" args="value">    
+                <![CDATA[
+                    if ($debug) Debug.write("addPrintList: ",value);   
+                    var downloadurl = canvas.getUrl()+'ExportToImage?' +
+					                    'fileName=' + parent.savefileName +
+					                    '&hash='+value + 
+                                        '&exportType=' + parent.exportType +
+					                    '&sid='+canvas.sessionId;
+                                        
+                    lz.Browser.loadURL(downloadurl,"_BLANK");
+                ]]>                             
+            </handler>  
+        </netRemoteCallHib>     
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
new file mode 100644
index 0000000..2ea27c3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="styleableInput" extends="customInputtext" x="1" y="1" bgcolor="0xFFFFFF" multiline="true"
+		width="${ parent.width-2 }" height="${ parent.height-2 }" >
+
+	<attribute name="startAdjustHight" value="false" type="boolean" />
+	
+	<attribute name="setFocusOnInit" value="true" type="boolean" />
+	
+	<handler name="oninit">
+		if (this.setFocusOnInit) {
+		    lz.Focus.setFocus(this);	
+		}
+	</handler>
+	<handler name="ontext">
+	<![CDATA[
+		var gh = this.getTextHeight();
+		if (gh>20) {
+			if (gh+this.fontsize > this.height){
+				this.setAttribute("height",(gh+this.fontsize));
+			}
+		}
+	]]>
+	</handler>	
+	<handler name="onkeyup" args="key">
+       <![CDATA[
+       // 13 is return
+       if ((key==27) || (key==13)) {
+       		this.parent.parent.adjustHeight();
+       }
+       ]]>
+    </handler>	
+	<handler name="onheight">
+		if (this.startAdjustHight) this.parent.parent.adjustHeight();
+	</handler>
+	
+	<method name="getURLEncodedText">
+		<![CDATA[
+		
+		    var tString = this.getText();
+		    
+		    //tString = tString.replace("<","&#60;");
+		    //tString = tString.replace(">","&#62;");
+		    
+		    return tString;
+		
+		]]>
+	</method>
+	
+</class>
+
+<class name="baseDrawWords" extends="view" bgcolor="black" 
+	width="120" height="40">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="inittext" value="" type="string" />
+	<attribute name="initTextName" value="" type="string" />
+
+	<method name="drawtoArray">
+		<![CDATA[
+		if ($debug) Debug.write("drawtoArray");
+		if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length==0){
+            
+            //var scale = this.parent._drawarea.width / this.parent._drawarea.initW;
+		    var y = ( this.getAttributeRelative('y',this.refObj)-this.refObj.y+1 );
+            if ($debug) Debug.write("this.refObj.y ",this.refObj.y);
+			if ($debug) Debug.write("this.x-this.refObj.x-this.refObj.parent.x ",y);
+			var x = ( this.getAttributeRelative('x',this.refObj)-this.refObj.x+1 );
+			
+			if(canvas._drawarea.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+		    	y = Math.round(y/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+            
+            } 
+			
+        	this.refObj.drawTextField(this._textview._textview.getURLEncodedText(),
+                    this._textview._textview.width,
+                    this._textview._textview.height,x,y);
+                    
+        } else if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length!=0){
+            
+        	if ($debug) Debug.write("edit modi ",this.initTextName);
+		    var y = (this.getAttributeRelative('y',this.refObj)-this.refObj.y+1);
+			if ($debug) Debug.write("this.x-this.refObj.x-this.refObj.parent.x ",y);
+			var x = (this.getAttributeRelative('x',this.refObj)-this.refObj.x+1);
+            
+			if(canvas._drawarea.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+		    	y = Math.round(y/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+            
+            } 
+			
+        	this.refObj.setTextFieldByName(this.initTextName,
+                this._textview._textview.getURLEncodedText(),
+                this._textview._textview.width,
+                x,y,this._textview._textview.height);
+                
+        } else {
+			if ($debug) Debug.write("text smaller then 0",this._textview._textview.getURLEncodedText());
+			
+			if ($debug) Debug.write("this.gridWidth",canvas._drawarea.gridWidth);
+			if ($debug) Debug.write("this.isSnapToGrid",canvas._drawarea.isSnapToGrid);
+		}
+        this.giveup();
+		]]>
+    </method>
+    
+	<method name="giveup">
+		this.refObj.letterObjectFree(this);
+		this.destroy();
+	</method>
+	    
+	<handler name="oninit">
+		//startAdjustHight is set to true later, cause otherwise update 
+		//Events would set the height to 
+		//text field default height
+		this.refObj.letterObjectClose(this);
+        var t = new lz.styleableInput(this._textview,{
+	                name:'_textview',text:this.inittext,
+	                fontstyle:this.refObj.currentlayerstyle,
+	                fontsize:this.refObj.currentlayersize,
+	                fgcolor:this.refObj.currentlayerletter
+                });
+        //if ( this.inittext.length==0 ) this.setAttribute('height',40);
+		if ( this.inittext.length!=0 ) {
+		    this.refObj.edittextLetterObject.setAttribute('visible',false);
+		    this.refObj.setModus('letter');
+	    }
+		t.startAdjustHight = true;
+	</handler>
+    
+    <handler name="newStyleEvent">
+        this.callNew(this._textview._textview.getText());
+    </handler>
+  
+	<method name="callNew" args="txxt">
+		//if ($debug) Debug.write("callNew height-2 ");
+		
+        var h = this.getHeight();
+        
+        //if ($debug) Debug.write("callNew height-3 ",this);
+        //if ($debug) Debug.write("callNew height-4 ",this.getHeight());
+        
+		this._textview._textview.destroy();
+		var t = new lz.styleableInput(this._textview,{
+			        setFocusOnInit:false,
+                    name:'_textview',text:txxt,
+                    fontstyle:this.refObj.currentlayerstyle,
+                    fontsize:this.refObj.currentlayersize,
+                    fgcolor:this.refObj.currentlayerletter
+                });
+        this.setAttribute("height",h);
+	</method>
+	<method name="adjustHeight">
+		if ($debug) Debug.write("+++ adjustHeight +++");
+		this.setAttribute('height',this._textview._textview.height+2);
+	</method>
+    
+    <method name="_removeResizestateFromThis">
+    	this.rs.remove();
+    </method>
+    
+    <view name="_textview" width="${ parent.width }" height="${ parent.height }" />
+    
+    <resizestate name="rs" >
+    	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+    </resizestate>
+	<view resource="_boundingBoxPointerUR" x="${ parent.width-this.width }" y="${ parent.height-this.height }" 
+		onmousedown="parent.rs.apply()" onmouseup="parent._removeResizestateFromThis()" >
+		<labelTooltip text="Resize this Object" />
+	</view>    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx b/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx
new file mode 100644
index 0000000..dcfcf88
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="drawViewInner" extends="drawview" x="0" y="0" >
+	
+</class>
+
+<!--
+    this is the Base Container for all Whiteboard Objects
+ -->
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="0" y="0" >
+	
+	<attribute name="typeOfObject" value="paint" type="string" />
+
+    <attribute name="initwidth" value="0" type="number" />
+    <attribute name="initheight" value="0" type="number" />
+    
+    <event name="prepareForDelete" />
+    
+    <handler name="oninit">
+        this.initwidth=this.width;
+        this.initheight=this.height;
+    </handler>
+    
+	<handler name="onwidth">
+        <![CDATA[
+	        if (this.isinited) {
+		        if(this.name.indexOf('line')>=0 
+		        	|| this.name.indexOf('uline')>=0 
+		        	|| this.name.indexOf('drawarrow')>=0
+		        	|| this.name.indexOf('paint')>=0) {
+		        	this.getDisplayObject()._xscale = (this.width/this.initwidth)*100;
+		        } else if (this.name.indexOf('rectangle')>=0) {
+	        		parent.redrawRectItemByScaling(this);
+	        	} else if  (this.name.indexOf('ellipse')>=0) {
+	        		parent.redrawEllipseItemByScaling(this);
+	        	}	        	
+	        }
+        ]]>
+    </handler>
+    
+    <handler name="onheight">
+    	<![CDATA[
+	        if (this.isinited) {
+		        if(this.name.indexOf('line')>=0 
+		        	|| this.name.indexOf('uline')>=0 
+		        	|| this.name.indexOf('drawarrow')>=0
+		        	|| this.name.indexOf('paint')>=0) {
+		        	this.getDisplayObject()._yscale = (this.height/this.initheight)*100;  
+		        } else if (this.name.indexOf('rectangle')>=0) {
+	        		parent.redrawRectItemByScaling(this);
+	        	} else if  (this.name.indexOf('ellipse')>=0) {
+	        		parent.redrawEllipseItemByScaling(this);
+	        	}	
+	        }  	
+        ]]>   
+    </handler>
+    <!-- 
+    <dragstate name="dragger" drag_axis="both"
+	    drag_min_x="0"
+	    drag_max_x="$once{parent.width - this.width}"
+	    drag_min_y="0"
+	    drag_max_y="$once{parent.height - this.height}">
+    </dragstate>
+     -->
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx b/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx
new file mode 100644
index 0000000..9b6d544
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="imageForDrawView" extends="image" stretches="both">
+	
+	<event name="prepareForDelete" />
+	
+	<attribute name="downloadurl" value="" type="string" />
+		
+	<attribute name="alterModus" value="true" type="boolean" />
+	<attribute name="isLocalSync" value="false" type="boolean" />
+	
+	<attribute name="recorderModus" value="false" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />
+	
+	<attribute name="remotewidth" value="0" type="number" />
+	<attribute name="remoteheight" value="0" type="number" />
+	
+	<attribute name="typeOfObject" value="image" type="string" />
+	
+	<!-- holds the reference_id to the SyncProcess -->
+	<attribute name="uniqueObjectSyncName" value="" type="string" />
+	
+		<!--
+			if (this.width>this.refObj.width){
+				var height = this.height/(this.width/this.refObj.width)
+				this.setAttribute('width',this.refObj.width);
+				this.setAttribute('height',height);
+				this.setAttribute('x',0);
+			}
+			if (this.height>this.refObj.height){
+				var width = this.width/(this.height/this.refObj.height)
+				this.setAttribute('height',this.refObj.height);
+				this.setAttribute('width',width);
+				this.setAttribute('y',0);
+			}
+			if(this.y+this.height>this.refObj.height){
+				this.setAttribute('y',0);
+			}
+			if(this.x+this.width>this.refObj.width){
+				this.setAttribute('x',0);
+			}	            	
+         -->            
+	<attribute name="refObj" value="null" />
+	<handler name="onload">
+		<![CDATA[
+			//Debug.write("image loaded");
+			//this.refObj.parent._loading.setAttribute('visible',false);
+			
+			if (this.remotewidth != 0 && this.remoteheight != 0){
+				this.setAttribute('width',this.remotewidth);
+				this.setAttribute('height',this.remoteheight);
+			} else {
+				
+				if (this.width>this.refObj.width){
+					var height = this.height/(this.width/this.refObj.width)
+					this.setAttribute('width',this.refObj.width);
+					this.setAttribute('height',height);
+					this.setAttribute('x',0);
+				}
+				
+				if (this.height>this.refObj.height){
+					var width = this.width/(this.height/this.refObj.height)
+					this.setAttribute('height',this.refObj.height);
+					this.setAttribute('width',width);
+					this.setAttribute('y',0);
+				}
+				
+				if(this.y+this.height>this.refObj.height){
+					this.setAttribute('y',0);
+				}
+				
+				if(this.x+this.width>this.refObj.width){
+					this.setAttribute('x',0);
+				}
+				
+			}
+	
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this image has been loaded
+			//if this is just a recordContent-modi (recordingsViewer) then there should be no syncing
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			//this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+            //    //Debug.write("1 onwmlLoaderSend.sendEvent( image )");
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>
+	<handler name="onerror" args="error">
+		<![CDATA[
+		//Debug.write("onerror "+error);
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this iamge has been loaded
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>
+	<handler name="ontimeout" args="error">
+		<![CDATA[
+		//Debug.write("ontimeout "+error);
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this iamge has been loaded
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx b/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx
new file mode 100644
index 0000000..7e6d6a3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="imageForScreenViewer" extends="image" stretches="both" x="0" y="0">
+	
+	<attribute name="downloadurl" value="" type="string" />
+		
+	<attribute name="alterModus" value="true" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />
+    
+    <attribute name="username" value="" type="string" />
+		
+	<attribute name="refObj" value="null" />
+	<handler name="onload">
+        this.refObj.layers.push(this);	
+        this.refObj.isScreenImageLoading=false;
+	    this.sendToBack();
+        
+        var height = this.height/(this.width/this.parent.width)
+        this.setAttribute('width',this.parent.width);
+        this.setAttribute('height',height);
+        this.setAttribute('x',0);
+            
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>
+	<handler name="onerror" args="error">
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>
+	<handler name="ontimeout" args="error">
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>	
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/library.lzx b/WebContent/src/modules/conference/whiteboard/base/library.lzx
new file mode 100644
index 0000000..ab3ee19
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/library.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="drawViewNew.lzx" />
+	<include href="baseDraw.lzx" />
+    
+    <!-- extends basedraw with drawing Tools -->
+    <include href="tools/" /> 
+    
+	<include href="swfResourceView.lzx" />
+	<include href="baseDrawObject.lzx" />
+	<include href="baseDrawLetter.lzx" />
+	<include href="imageForDrawView.lzx" />
+	<include href="imageForScreenViewer.lzx" />
+	<include href="baseDrawImage.lzx" />
+	<include href="baseDrawSave.lzx" />
+	<include href="baseDrawWords.lzx" />
+	<include href="whiteboardVideoPlayer.lzx" />
+	<include href="remoteWhiteboard.lzx" />
+	<include href="whiteBoardPointer.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx b/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx
new file mode 100644
index 0000000..bb47ca1
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="remoteWhiteboard" extends="baseDrawSave">
+	
+	<attribute name="loadingObjectListId" value="0" type="number" />
+	<attribute name="loadingObjectList" value="null" />
+	
+	<attribute name="loadObjectDelegate" value="null" />
+	
+	<method name="loadObjectList" args="whiteBoardObject">
+		<![CDATA[
+		
+			if ($debug) Debug.info("loadObjectList :1: ",whiteBoardObject,whiteBoardObject.fullFit,whiteBoardObject.zoom);
+		
+			if (parent.parent["zoombox"]) {
+			    parent.parent.zoombox.setWhiteboardValues(whiteBoardObject.fullFit,whiteBoardObject.zoom);
+			}
+			
+			
+			this.setAttribute("x",whiteBoardObject.x);
+			this.setAttribute("y",whiteBoardObject.y);	
+			this.last_x = this.x;
+			this.last_y = this.y;
+			
+			/*
+			if (whiteBoardObject.brainStorming != null) {
+                this.loadBrainStormingObject(whiteBoardObject.brainStorming);
+            }
+            */
+			
+			this.fullFit = whiteBoardObject.fullFit;
+			
+			this.getDisplayObject()._xscale = whiteBoardObject.zoom;
+    		this.getDisplayObject()._yscale = whiteBoardObject.zoom;
+    		
+    		this.onupdateScale.sendEvent(null);
+			
+			this.loadingObjectList = new Array();
+			
+			for (var eg in whiteBoardObject.roomItems) {
+				this.loadingObjectList.push(whiteBoardObject.roomItems[eg]);
+			}
+			
+			//return;
+			//if ($debug) Debug.write("loadObjectList :2: ",this.loadingObjectList);
+			
+			function sortItemByIndex(a,b){
+                var a1 = a[a.length-8];
+                var b1 = b[b.length-8];
+                //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+                if(a1==b1){
+                    return 0;
+                } else if(a1>b1){
+                    return 1;
+                } else {
+                    return -1;
+                }
+            }
+            
+            //for (var i=0;i<this.loadingObjectList.length;i++) {
+            //	if ($debug) Debug.write(" 1 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            //}
+            
+            this.loadingObjectList.sort(sortItemByIndex);
+			
+            //for (var i=0;i<this.loadingObjectList.length;i++) {
+            //    if ($debug) Debug.write(" 2 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            //}
+            
+			this.loadingObjectListId = 0;
+			//this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+			//if (this.loadingObjectList.length != 0){
+			//	lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+			//}
+			//for (var i=0;i<this.loadingObjectList.length;i++){
+			//	if ($debug) Debug.write("i this.loadingObjectList[i] ",i,this.loadingObjectList[i]);
+			//}
+			
+			if ($debug) Debug.write("Number of Whiteboard Objects ",this.loadingObjectList.length);
+			
+			if (this.loadingObjectList != null && this.loadingObjectList.length != 0){
+				this.startNewSyncprocess.doCall();
+			}
+		]]>
+	</method>
+	
+	<method name="loadSavedObjectList" args="objList">
+        <![CDATA[
+            
+            var tempArray = new Array();            
+            tempArray[0] = "loadSavedWhiteboard";
+            ///tempArray[1] = itemObj;
+            tempArray[1] = objList;
+            hib.sendMessageWithClient.sendMessage("whiteboard", tempArray);
+        
+            this.loadingObjectList = objList;
+            
+            if ($debug) Debug.write("loadObjectList :: ",this.loadingObjectList);
+            
+            function sortItemByIndex(a,b){
+                var a1 = a[a.length-8];
+                var b1 = b[b.length-8];
+                //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+                if(a1==b1){
+                    return 0;
+                } else if(a1>b1){
+                    return 1;
+                } else {
+                    return -1;
+                }
+            }
+            
+            for (var i=0;i<this.loadingObjectList.length;i++) {
+                if ($debug) Debug.write(" 1 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            }
+            
+            this.loadingObjectList.sort(sortItemByIndex);
+            
+            for (var i=0;i<this.loadingObjectList.length;i++) {
+                if ($debug) Debug.write(" 2 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            }
+            
+            this.loadingObjectListId = 0;
+            //this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+            //if (this.loadingObjectList.length != 0){
+            //  lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+            //}
+            //for (var i=0;i<this.loadingObjectList.length;i++){
+            //  if ($debug) Debug.write("i this.loadingObjectList[i] ",i,this.loadingObjectList[i]);
+            //}
+            if (this.loadingObjectList != null && this.loadingObjectList.length != 0){
+                this.startSavedSyncprocess.doCall();
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="prepareLoadWMLFile" args="itemObj">
+        if ($debug) Debug.write("loadWMLFile: ",itemObj);
+        
+        this.loadWMLFile.setAttribute('fileExplorerItemId', itemObj.fileExplorerItemId);
+                  
+        if ($debug) Debug.write("prepareLoadWMLFile 1: ",parent.parent.whiteboardId);
+        
+        this.loadWMLFile.doCall();
+    </method>
+    
+    
+    <netRemoteCallHib name="loadWMLFile" funcname="fileservice.loadWmlObject"
+        remotecontext="$once{ canvas.thishib }" >
+        <attribute name="fileExplorerItemId" type="number" value="0"/>
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam> 
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.parent.parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("loadWMLFile: ",value);
+                //canvas._drawarea.clearAll();
+                //parent.loadSavedObjectList(value);
+                
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <method name="loadWmlToWhiteboardById" args="roomItems">
+    	this.clearRemote();
+    	this.loadSavedObjectList(roomItems);
+    </method>
+	
+    <netRemoteCallHib name="startNewSyncprocess" funcname="whiteboardservice.startNewSyncprocess"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("startNewSyncprocess: ",value);
+            	if (value.publicSID == canvas.publicSID){
+            		if ($debug) Debug.write("currentLoadingItem IS mine");
+                    //TODO: Check usage of currentLoadingItem
+            		//if (value.currentLoadingItem){
+            			parent.startInitialLoadinProcess();
+            		//}
+            	}
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+     <netRemoteCallHib name="startSavedSyncprocess" funcname="whiteboardservice.startNewSyncprocess"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("startNewSyncprocess: ",value);
+                //if (value.publicSID == canvas.publicSID){
+                    if ($debug) Debug.write("currentLoadingItem IS mine");
+                    //TODO: Check usage of currentLoadingItem
+                    //if (value.currentLoadingItem){
+                        parent.startInitialLoadinProcess();
+                    //}
+                //}
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="sendCompletedSyncEvent" funcname="whiteboardservice.sendCompletedSyncEvent"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendCompletedSyncEvent: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     	
+    
+    <method name="startInitialLoadinProcess">
+		this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+		if (this.loadingObjectList.length != 0){
+			lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+		}
+    </method>
+	
+	<method name="loadRemoteObject" args="ref">
+		<![CDATA[
+			this.sendRemoteWatchObject(this.loadingObjectList[this.loadingObjectListId]);
+			this.loadingObjectListId++;
+			if (this.loadingObjectListId < this.loadingObjectList.length){
+				lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+			} else {
+				this.sendCompletedSyncEvent.doCall();
+				this.updateAllObjectsToSlideNumber();
+				this.setModusWithUpdate("hand");
+				this.onupdateScale.sendEvent(null);
+			}
+		]]>
+	</method>
+	
+	<method name="sendRemoteWatchObject" args="actionObject">
+		if ($debug) Debug.write("[sendRemoteWatchObject]: ",actionObject);
+		<![CDATA[
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(actionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(actionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(actionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(actionObject,this);
+			} else if(actionObject[0]=='letter'){
+				this.drawactionHistory(actionObject,this);
+			} else if(actionObject[0]=='image'){
+				this.addImageToLayerHistoryToLocal(actionObject,this);
+			} else if(actionObject[0]=='swf'){
+				this.addSWFToLayerHistory(actionObject,this,true);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(actionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(actionObject,this);
+			} else if(actionObject[0]=='flv'){
+                this.drawFlvToHistory(actionObject,this);
+            } else if(actionObject[0]=='mindMapCenter'){
+                this.drawMindMapCenterToHistory(actionObject,this);
+            } else if(actionObject[0]=='mindMapNode'){
+                this.drawMindMapNodeToHistory(actionObject,this);
+            } else if(actionObject[0]=='clipart'){
+                this.drawClipArtToHistory(actionObject,this);
+            }
+			
+			if ($debug) Debug.write("[store actionObject] ",actionObject);
+			
+			this.baseactionobjectList.push(actionObject);
+				
+		]]>
+	</method>	
+	
+	<!-- methods for syncing events -->
+    <netRemoteCallHib name="startNewObjectSyncProcess" funcname="whiteboardservice.startNewObjectSyncProcess"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="isStarting" value="false" type="boolean" />
+    	<attribute name="uniqueObjectSyncName" value="" type="string" />
+    	<netparam><method name="getValue">return parent.uniqueObjectSyncName;</method></netparam>
+        <netparam><method name="getValue">return parent.isStarting;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("startNewImagesSyncprocess: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="sendCompletedObjectSyncEvent" funcname="whiteboardservice.sendCompletedObjectSyncEvent"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="uniqueObjectSyncName" value="" type="string" />
+    	<netparam><method name="getValue">return parent.uniqueObjectSyncName;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendCompletedImagesSyncEvent: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>   
+    
+    
+    <method name="startStreaming" args="messageObj">
+        new lz.incomingScreenSharing(canvas,{messageObj:messageObj});
+    </method>
+    
+    <method name="stopStreaming" args="messageObj">
+        
+    </method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx b/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx
new file mode 100644
index 0000000..ed48e33
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="swfResourceView" extends="view" >
+	
+	<event name="prepareForDelete" />
+    
+    <attribute name="refObj" value="null" />
+	<attribute name="alterModus" value="true" type="boolean" />
+    
+    <attribute name="standardFileName" value="" type="string"/>
+	
+	<attribute name="recorderModus" value="false" type="boolean" />
+    
+    <attribute name="fullFit" value="true" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />    
+    <attribute name="slideNumber" value="1" type="number" /> 
+    
+    <attribute name="currentzoomFactor" value="100" type="number" />
+    <attribute name="zoomlevel" value="20" type="number" />
+    <attribute name="initwidth" value="0" type="number" />
+    <attribute name="initheight" value="0" type="number" />
+    
+    <!-- for wml-loaded SWF's
+        attribute only set on init
+     -->
+    <attribute name="innerwidth" value="0" type="number" />
+    <attribute name="innerheight" value="0" type="number" />
+    <attribute name="innerx" value="0" type="number" />
+    <attribute name="innery" value="0" type="number" />
+    <attribute name="currentzoom" value="0" type="number" />
+    
+    <attribute name="typeOfObject" value="swf" type="string" />
+    
+	<!-- holds the reference_id to the SyncProcess -->
+	<attribute name="uniqueObjectSyncName" value="" type="string" />    
+    
+    <view name="_swfView" play="false">
+    	
+    	<!--
+    	<attribute name="timeisInited" value="false" type="boolean" />
+        <attribute name="sendObjectDel" value="null" />
+         -->
+        
+        <!-- Do not send update events in case 
+            this is sync event broadcasted by another user -->
+        <attribute name="doSendChangeValue" value="false" type="boolean" />
+        
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            ////Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            ////Debug.write("onstop",i);
+        </handler>
+        
+        <!--
+        <handler name="oninit">
+            this.sendObjectDel = new LzDelegate( this, "sendObject" );
+        </handler>
+        
+        <handler name="onx" args="x">
+        	if (!this.doSendChangeValue) {
+        		return;
+        	}
+        	
+            if (!this.timeisInited){
+                this.timeisInited=true;
+                lz.Timer.addTimer( this.sendObjectDel, 250 );
+            } else {
+                lz.Timer.resetTimer( this.sendObjectDel, 250 );
+            }
+        </handler>
+        <handler name="ony" args="y">
+        	if (!this.doSendChangeValue) {
+                return;
+            }
+            
+            if (!this.timeisInited){
+                this.timeisInited=true;
+                lz.Timer.addTimer( this.sendObjectDel, 250 );
+            } else {
+                lz.Timer.resetTimer( this.sendObjectDel, 250 );
+            }
+        </handler>        
+        
+        <method name="sendObject" args="itemRef">
+            if ($debug) Debug.info("sendObject :: sendCurrentSWFObject");
+            this.parent.parent.sendCurrentSWFObject(this.parent);
+            this.timeisInited=false;
+        </method>
+         -->
+        
+        <method name="initialLoadFullFit">
+            <![CDATA[
+            
+            	if ($debug) Debug.write(" -- fullFit -- ",parent.parent.fullFit);
+            
+                if (parent.parent.fullFit) {
+                    
+                    if ($debug) Debug.write(" -- fullFit -2- ",this.width,this.height);
+                    if ($debug) Debug.write(" -- fullFit -3- ",parent.parent.width,parent.parent.height);
+                    
+                    //Scale to container width/height
+                    var xScale = (parent.parent.parent.width-16)/this.width;
+                    var yScale = (parent.parent.parent.height-16)/this.height;
+                    
+                    if ($debug) Debug.write(" -- fullFit -4- ",xScale,yScale);
+                    
+                    if (xScale < yScale) {
+                    	parent.parent.setCurrentScaleByFullFit(xScale);
+                    } else {
+                    	parent.parent.setCurrentScaleByFullFit(yScale);
+                    }
+                    
+                }
+            
+            ]]>
+        </method>
+        
+        <handler name="onload">
+            <![CDATA[
+                if ($debug) Debug.info("onload: ",this.width,this,height);
+                
+                ////Debug.write("onload: ",this.stop);
+                this.stop();
+                this.setAttribute('play',false);             
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                
+                this.setAttribute('frame',parent.slideNumber);
+                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    
+                    //this code is invoked when the Moderator loads the Document
+                    
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                    if ($debug) Debug.write("==> doShowObjectBounds MOD ");
+                    
+                    this.initialLoadFullFit();
+                    
+                    this.parent.refObj.doShowObjectBounds(this.parent.name);
+                    this.parent.refObj.doUpdateDocumentToolBar();
+                } else {
+                    
+                    //this code is invoked when any participants syncronizes and loads the document
+                    //because a Moderator has loaded it
+                    
+                    if ($debug) Debug.write("==> doShowObjectBounds Participant ");
+                    
+                    this.initialLoadFullFit();
+                    
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                    
+                    this.parent.refObj.doUpdateDocumentToolBarByParticipant(this.parent.name);
+                    
+                }
+                
+                if ($debug) Debug.write("swf loaded -2- ",this.parent.refObj.isWmlLoaderImage);
+                if (this.parent.refObj.isWmlLoaderImage){
+                    if ($debug) Debug.write("swf loaded ",this.parent.innerwidth,this.parent.innerheight);
+                	if (this.parent.innerwidth != 0 && this.parent.innerheight != 0) {
+	                    this.setAttribute('width',this.parent.innerwidth);
+	                    this.setAttribute('height',this.parent.innerheight);
+	                    this.setAttribute('x',this.parent.innerx);
+	                    this.setAttribute('y',this.parent.innery);
+                	}
+                    this.parent.currentzoomFactor = this.parent.currentzoom;
+                }
+
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.doSendChangeValue = true;
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler>
+        <handler name="onerror" args="error">
+            <![CDATA[
+            ////Debug.write("onerror "+error);
+            
+            
+                new lz.errorPopup(canvas,{error:"onerror SWF!! "+error});
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                } else {
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                }
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this.parent);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler>
+        <handler name="ontimeout" args="error">
+            <![CDATA[
+            ////Debug.write("ontimeout "+error);
+            
+                new lz.errorPopup(canvas,{error:"ontimeout SWF!! "+error});
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                } else {
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                }
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this.parent);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler> 
+        
+        <handler name="onwidth" args="w">
+            if ($debug) Debug.write("onwidth ",w);
+        </handler>
+        
+        <handler name="onheight" args="h">
+            if ($debug) Debug.write("onheight ",h);
+        </handler>
+        
+    </view>    
+    
+    <!--
+    <om_vscrollbar name="_scrollstv"
+                visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }" /> 
+    <om_hscrollbar name="_scrollsth"
+                visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }" />
+     -->   
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx
new file mode 100644
index 0000000..a904886
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseDrawArrow" extends="baseDrawULine" >
+    
+    <!-- for drawing drawarrow -->
+    <attribute name="currentdrawarrowlinestroke" value="0x000000" />
+    <attribute name="currentdrawarrowlinestrokeDis" value="1" type="number" />
+    <attribute name="currentdrawarrowlinestrokeFill" value="0xFF6600" />
+    <attribute name="currentdrawarrowlinestrokeFillDis" value="1" type="number" />
+    
+    <attribute name="currentdrawarrowlinelineWidth" value="4" type="number" />   
+    <attribute name="currentdrawarrowOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+    drawarrow
+     -->
+     
+    
+    <method name="startDrawarrowline" args="oid_name">
+        <![CDATA[
+	        if (oid_name == null) {
+	            oid_name = 'drawarrow'+this.getCounter();
+	        }
+	        
+	        this.currentlayer = new lz.drawViewNew(this,{
+		            name:oid_name,width:this.width,height:this.height,
+		            opacity:this.currentdrawarrowOpacity});
+            
+            var pArrowStart = new flash.geom.Point(this.startx,this.starty);
+            var pArrowEnd = new flash.geom.Point(this.endx,this.endy);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth,
+                    this.currentdrawarrowlinestrokeDis,this.currentdrawarrowlinestroke,
+                    this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeFillDis);
+        ]]>
+    </method> 
+    
+    <method name="endDrawarrowline">
+        <![CDATA[
+            //if ($debug) Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+	        var tempName = this.currentlayer.name;
+	        //Debug.write("tempName: ",tempName);
+	        this.currentlayer.destroy();
+	        
+	        //GetBounds of that Object
+	        var minx = this.width+2000;
+	        var miny = this.height+2000;
+	        var maxx = -2;
+	        var maxy = -2;
+	
+	        if (this.startx<minx) minx=this.startx;
+	        if (this.endx<minx) minx=this.endx;
+	        
+	        if (this.startx>maxx) maxx=this.startx;
+	        if (this.endx>maxx) maxx=this.endx;
+	        
+	        if (this.starty<miny) miny=this.starty;
+	        if (this.endy<miny) miny=this.endy;
+	        
+	        if (this.starty>maxy) maxy=this.starty;
+	        if (this.endy>maxy) maxy=this.endy;
+	        
+	        var width = maxx-minx;
+	        var height = maxy-miny;
+	        
+	        //if ($debug) Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+            //if ($debug) Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+            	                
+	        
+            if (minx == this.startx) {
+                var x1 = 0;
+                var x2 = width;
+            } else {
+                var x1 = width;
+                var x2 = 0;
+            }
+            if (miny == this.starty) {
+                var y1 = 0;
+                var y2 = height;
+            } else {
+                var y1 = height;
+                var y2 = 0;
+            }
+            
+            if(this.isSnapToGrid){        	
+	        	minx = Math.round(minx/this.gridWidth)*this.gridWidth;
+			    miny = Math.round(miny/this.gridWidth)*this.gridWidth;
+			    
+			    //x1 = Math.round(x1/this.gridWidth)*this.gridWidth;
+			    //y1 = Math.round(y1/this.gridWidth)*this.gridWidth;
+			    
+			    //x2 = Math.round(x2/this.gridWidth)*this.gridWidth;
+			    //y2 = Math.round(y2/this.gridWidth)*this.gridWidth;
+	        		        	
+        	}
+			                        
+	        this.currentlayer = new lz.drawViewNew(this,{
+	            name:tempName,x:minx,y:miny,width:width,height:height,
+	            opacity:this.currentdrawarrowOpacity});
+	            
+	        var pArrowStart = new flash.geom.Point(x1,y1);
+            var pArrowEnd = new flash.geom.Point(x2,y2);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth,
+                    this.currentdrawarrowlinestrokeDis,this.currentdrawarrowlinestroke,
+                    this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeFillDis);
+	            
+	        //Add Layer to global Layer     
+	        this.layers.push(this.currentlayer);
+	        this.drawarrowlineregisterFinal(this.currentlayer.name,
+                this.currentdrawarrowlinestroke,this.currentdrawarrowlinelineWidth,
+                this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeDis,
+                this.currentdrawarrowlinestrokeFillDis,this.currentdrawarrowOpacity,
+                minx,miny,width,height,
+                x1,y1,x2,y2,true,this.getSWFDocumentStatus(),
+                this.getZIndex());
+	        //Debug.write("t: ",t);
+        ]]>
+    </method> 
+       
+    <method name="drawarrowlineregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'drawarrow';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = opacity;
+        actionObject[7] = x1;  
+        actionObject[8] = y1;  
+        actionObject[9] = x2;    
+        actionObject[10] = y2;
+        actionObject[11] = zIndex;//-8
+        actionObject[12] = swfObj;//-7
+        actionObject[13] = this.counter;//-6 
+        actionObject[14] = x;//-5
+        actionObject[15] = y;//-4
+        actionObject[16] = width;//-3
+        actionObject[17] = height;//-2
+        actionObject[18] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>  
+    
+    <method name="drawarrowlineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+            //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+            
+            var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[6]});
+            
+            var pArrowStart = new flash.geom.Point(lastActionObject[7],lastActionObject[8]);
+            var pArrowEnd = new flash.geom.Point(lastActionObject[9],lastActionObject[10]);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(tmpCurrentlayer,pArrowStart,pArrowEnd,lastActionObject[2],
+                    lastActionObject[4],lastActionObject[1],
+                    lastActionObject[3],lastActionObject[5]);
+                
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);
+
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+        ]]>
+    </method>
+    
+    <method name="drawArrow" args="graphics,start,end,thickness,strokeDis,stroke,fill,fillDis">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            if (strokeDis!=-1){
+                graphics.strokeStyle = stroke;
+                graphics.stroke();
+            }
+
+            if (fillDis!=-1){
+                graphics.fillStyle = fill;
+                graphics.fill();
+            }
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx
new file mode 100644
index 0000000..59b71b6
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx
@@ -0,0 +1,650 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+
+<class name="drawClipArtWhiteBoard" >
+    
+    <attribute name="clipArtEndx" value="0" type="number" />
+    <attribute name="clipArtEndy" value="0" type="number" />
+    
+    <!-- Not needed anymore, use LzView.setColor instead
+    <method name="setTint" args="color, brightness">
+        <![CDATA[
+        if (color != "" && color != null){
+            if (brightness == null) { brightness = 0; }
+            var rgb = color;
+            var red=(rgb >> 16) & 0xFF;
+            var green=(rgb >> 8) & 0xFF;
+            var blue=rgb & 0xFF;
+
+            this.setColorTransform( { ra : red, ga : green, ba : blue,
+                                        rb : 0, gb : 0, bb : 100 } );
+        }
+        ]]>
+    </method>
+     -->
+     
+</class>	
+    
+<class name="baseDrawClipArt" extends="baseDrawArrow" >
+	
+	<attribute name="minClipArtx" value="0" type="number" />
+	<attribute name="maxClipArtx" value="0" type="number" />
+	<attribute name="minClipArty" value="0" type="number" />
+    <attribute name="maxClipArty" value="0" type="number" />
+    <attribute name="deltaClipArtx" value="0" type="number" />
+    <attribute name="deltaClipArty" value="0" type="number" />
+    
+    <attribute name="clipArtEndx" value="0" type="number" />
+    <attribute name="clipArtEndy" value="0" type="number" />
+	
+	<attribute name="currentClipArtRessourceName" value="idea.png" type="string"/>
+	    
+    <method name="startDrawClipArt" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'clipart'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+                                    name:oid_name,width:this.width,height:this.height,
+                                    opacity:this.currentdrawarrowOpacity});
+         
+        this.startx = this.currentlayer.getMouse('x');
+        this.starty = this.currentlayer.getMouse('y');
+                                    
+        var imageurl = canvas.getUrl() + 'public/cliparts/'+this.currentClipArtRessourceName;
+        
+        if ($debug) Debug.write("imageurl :: ",imageurl);
+        
+        new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        	                width:100,height:100,stretches:'both',
+                            x:this.startx,y:this.starty,
+                            //bgcolor:0xFF3300,
+                            resource:imageurl,name:'clipart'});
+
+        this.minClipArtx = this.startx;
+        this.minClipArty = this.starty;
+        this.maxClipArtx = this.startx+100;
+        this.maxClipArty = this.starty+100;
+        this.clipArtEndx = this.maxClipArtx;
+        this.clipArtEndy = this.maxClipArty;
+        this.deltaClipArtx = 0;
+        this.deltaClipArty = 0;
+            
+                            
+        ]]>
+    </method>
+    
+    <method name="setStartPoint" args="sx,sy">
+    	this.startx = sx;
+        this.starty = sy;
+    </method>
+     
+    <method name="trackDrawClipArt">   
+        <![CDATA[
+        //Add Resource
+        //var t = new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        //                    resource:imageurl,x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        //t.setColor(this.currentdrawarrowlinestroke);
+        var tEndX = this.currentlayer.getMouse('x');
+        var tEndY = this.currentlayer.getMouse('y');
+        
+        this.trackDrawClipArtDraw(tEndX,tEndY,this.currentlayer.clipart);
+        
+        ]]>
+    </method>    
+        
+    <method name="trackDrawClipArtDraw" args="tEndX,tEndY,t">   
+        <![CDATA[
+        //Add Resource
+        //var t = new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        //                    resource:imageurl,x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        //t.setColor(this.currentdrawarrowlinestroke);
+        
+        //if ($debug) Debug.write("trackDrawClipArtDraw ",tEndX,tEndY,t);
+        
+        this.clipArtEndx = tEndX;
+        this.clipArtEndy = tEndY;
+        
+        var tx = tEndX-this.startx;
+        var ty = tEndY-this.starty;
+        
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var palpha = Math.asin(sinAlpha);
+        var alpha = palpha/(Math.PI/180);
+        
+        var tLength = Math.sqrt(2)/2*hypothenuse;
+        
+        //if ($debug) Debug.write("tx,ty,alpha,sinAlpha,tLength "+tx+" "+ty+" "+alpha+" "+sinAlpha+" "+tLength);
+        
+        //if ($debug) Debug.write("CALC tx,ty",tx,ty);
+        
+        if (Math.abs(tx) < 2 && Math.abs(ty) < 2) {
+        	
+        	this.minClipArtx = this.startx;
+            this.minClipArty = this.starty;
+            this.maxClipArtx = this.startx+100;
+            this.maxClipArty = this.starty+100;
+            this.clipArtEndx = this.maxClipArtx;
+            this.clipArtEndy = this.maxClipArty;
+            t.setAttribute('rotation',0);
+            
+            this.deltaClipArtx = 0;
+            this.deltaClipArty = 0;
+            
+            //if ($debug) Debug.write(" IS ZERO ",this.startx,this.starty);
+        	
+        } else if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx2 = this.startx+ankathete_2;
+            var ty2 = this.starty+gegenkathete_2;
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx2,ty2);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var ankathete_4 = Math.sin(pRotate2)*tLength;
+            var gegenkathete_4 = Math.cos(pRotate2)*tLength;
+            var tx4 = this.startx-gegenkathete_4;
+            var ty4 = this.starty+ankathete_4;
+            
+            this.minClipArtx = tx4;
+            if (this.startx < tx4) {
+            	this.minClipArtx = this.startx;
+            }
+            
+            this.minClipArty = this.starty;
+            if (ty2 < this.starty) {
+            	this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (tEndX > tx2) {
+            	this.maxClipArtx = tEndX;
+            }
+            
+            this.maxClipArty = tEndY;
+            if (ty4 > tEndY) {
+            	this.maxClipArty = ty4;
+            }
+            
+            if (gegenkathete_4 > 0) {
+                this.deltaClipArtx = gegenkathete_4;
+                this.deltaClipArty = 0;
+            } else {
+            	this.deltaClipArtx = 0;
+            	this.deltaClipArty = Math.abs(gegenkathete_2);
+            }
+            
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_4,gegenkathete_2);
+            
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx4,ty4);
+            
+            //if ($debug) Debug.write("_2 ",pRotate2,tRotate2,Math.sin(pRotate2),gegenkathete_4);
+            //if ($debug) Debug.write("_1  ",this.starty,ty4,ankathete_4,"tRotate2,tLength",tRotate2,tLength);
+            
+        } else if (tx<0 && ty>=0){
+            t.setAttribute('rotation',(90+45)-(alpha));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx-ankathete_2;
+            var ty4 = this.starty+gegenkathete_2;
+            
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx4,ty4);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx+ankathete_4;
+            var ty2 = this.starty+gegenkathete_4;
+            
+            //if ($debug) Debug.write("_1  x,y",this.startx,this.starty,"tx2,ty2",tx2,ty2,"tx4,ty4",tx4,ty4);
+            
+            this.minClipArtx = tx4;
+            if (tEndX < tx4) {
+                this.minClipArtx = tEndX;
+            }
+            
+            this.minClipArty = this.starty;
+            if (ty4 < this.starty) {
+                this.minClipArty = ty4;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (this.startx > tx2) {
+                this.maxClipArtx = this.startx;
+            }
+            
+            this.maxClipArty = tEndY;
+            if (ty2 > tEndY) {
+                this.maxClipArty = ty2;
+            }
+            
+            if (gegenkathete_2 > 0) {
+                this.deltaClipArtx = ankathete_2;
+                this.deltaClipArty = 0;
+            } else {
+                this.deltaClipArtx = this.maxClipArtx-this.minClipArtx;
+                this.deltaClipArty = Math.abs(gegenkathete_2);
+            }
+            
+        } else if (tx<0 && ty<0){
+            t.setAttribute('rotation',180+(alpha-45));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx-ankathete_2;
+            var ty4 = this.starty-gegenkathete_2;
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx+ankathete_4;
+            var ty2 = this.starty-gegenkathete_4;
+            
+            this.minClipArtx = tx4;
+            if (tEndX < tx4) {
+                this.minClipArtx = tEndX;
+            }
+            
+            this.minClipArty = tEndY;
+            if (ty2 < tEndY) {
+                this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (this.startx > tx2) {
+                this.maxClipArtx = this.startx;
+            }
+            
+            this.maxClipArty = ty4;
+            if (this.starty > ty4) {
+                this.maxClipArty = this.starty;
+            }
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_2);
+            
+            if (gegenkathete_2 < 0) {
+                this.deltaClipArtx = this.maxClipArtx-this.minClipArtx;
+                this.deltaClipArty = gegenkathete_4;
+            } else {
+                this.deltaClipArtx = ankathete_2;
+                this.deltaClipArty = this.maxClipArty-this.minClipArty;
+            }
+            
+            
+        } else if (tx>0 && ty<=0){
+            t.setAttribute('rotation',((270+45)-alpha));
+            
+            //if ($debug) Debug.write("alpha :: ",alpha);
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_2);
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx+ankathete_2;
+            var ty4 = this.starty-gegenkathete_2;
+            
+            //if ($debug) Debug.write("gegenkathete_2 :: ",gegenkathete_2);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx-ankathete_4;
+            var ty2 = this.starty-gegenkathete_4;
+            
+            //if ($debug) Debug.write("ankathete_4 :: ",ankathete_4);
+            
+            this.minClipArtx = tx2;
+            if (this.startx < tx2) {
+                this.minClipArtx = this.startx;
+            }
+            
+            this.minClipArty = tEndY;
+            if (ty2 < tEndY) {
+                this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tEndX;
+            if (tx4 > tEndX) {
+                this.maxClipArtx = tx4;
+            }
+            
+            this.maxClipArty = this.starty;
+            if (ty4 > this.starty) {
+                this.maxClipArty = ty4;
+            }
+            
+            //if ($debug) Debug.write("_1  ",ankathete_4);
+            
+            if (ankathete_4 < 0) {
+                this.deltaClipArtx = 0;
+                this.deltaClipArty = gegenkathete_4;
+            } else {
+                this.deltaClipArtx = ankathete_4;
+                this.deltaClipArty = this.maxClipArty-this.minClipArty;
+                
+                //this.deltaClipArtx = 0;
+                //this.deltaClipArty = 0;
+            }
+            
+        }
+        
+        //if (tx)
+        
+        //Scaling
+        //var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        //t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        //t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+        //if ($debug) Debug.write("hypothenuse "+hypothenuse);
+        
+        
+        
+        t.setAttribute("width",tLength);
+        t.setAttribute("height",tLength);
+
+        //Set previous to null
+        this.prevx = this.currentlayer.getMouse('x');
+        this.prevy = this.currentlayer.getMouse('y');  
+        
+        ]]>
+    </method> 
+    
+    <method name="drawClipArtToHistory" args="lastActionObject,parentView">
+    	<![CDATA[
+    	
+    	   var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[4]
+                });
+    	
+           new lz.drawClipArtWhiteBoard(tmpCurrentlayer,{
+                                    width:lastActionObject[7],
+                                    height:lastActionObject[8],
+                                    stretches:'both',
+                                    x:lastActionObject[5],
+                                    y:lastActionObject[6],
+                                    rotation:lastActionObject[3],
+                                    resource:lastActionObject[2],
+                                    clipArtEndx:lastActionObject[9],
+                                    clipArtEndy:lastActionObject[10],
+                                    name:'clipart'
+                                });
+             
+            if ($debug) Debug.write("x,y ",tmpCurrentlayer.x,tmpCurrentlayer.y,tmpCurrentlayer.width,tmpCurrentlayer.height);
+                                
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);                                
+              
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    	]]>
+    </method>
+    
+    <method name="endDrawClipArtDrag" args="cLayer">
+        <![CDATA[
+        
+            var oid_name = cLayer.name;
+            var tSource = cLayer.clipart.resource;
+            var tRotation = cLayer.clipart.rotation;
+            var tX = cLayer.clipart.x;
+            var tY = cLayer.clipart.y;
+            var tWidth = cLayer.clipart.width;
+            var tHeight = cLayer.clipart.height;
+               
+            //if ($debug) Debug.write("END 0 ",tY);
+            
+            cLayer.destroy();
+           
+            //if ($debug) Debug.write("END 1 ",this.minClipArty,this.starty);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                                        x:this.minClipArtx,
+                                        y:this.minClipArty,
+                                        name:oid_name,
+                                        width:this.maxClipArtx-this.minClipArtx,
+                                        height:this.maxClipArty-this.minClipArty
+                                        //bgcolor:0x0033FF
+                                    });
+            
+            //if ($debug) Debug.write(" IS ZERO END1 ",this.currentlayer.x,this.currentlayer.y);                        
+                                    
+            new lz.drawClipArtWhiteBoard(this.currentlayer,{
+                                    width:tWidth,height:tHeight,
+                                    stretches:'both',
+                                    x:this.deltaClipArtx,
+                                    y:this.deltaClipArty,
+                                    rotation:tRotation,
+                                    resource:tSource,
+                                    clipArtEndx:this.clipArtEndx-this.minClipArtx,
+                                    clipArtEndy:this.clipArtEndy-this.minClipArty,
+                                    name:'clipart'
+                                    //bgcolor:0xFF3300
+                                });
+        
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==oid_name) {
+                    
+                    //if ($debug) Debug.write("Found Object 1: ",this.baseactionobjectList[eg]);
+                    
+                	//actionObject[3] = tRotation;
+        //actionObject[5] = deltaClipArtx;
+        //actionObject[6] = deltaClipArty;
+        //actionObject[7] = deltaClipWidth;
+        //actionObject[8] = deltaClipHeight;
+        //actionObject[9] = deltaClipEndx;
+        //actionObject[10] = deltaClipEndy;
+        //actionObject[14] = x;//-5
+        //actionObject[15] = y;//-4
+        //actionObject[16] = width;//-3
+        //actionObject[17] = height;//-2
+        
+            	    this.baseactionobjectList[eg][3] = tRotation;
+                	this.baseactionobjectList[eg][5] = this.deltaClipArtx;
+                	this.baseactionobjectList[eg][6] = this.deltaClipArty;
+                	this.baseactionobjectList[eg][7] = tWidth;
+                	this.baseactionobjectList[eg][8] = tHeight;
+                	this.baseactionobjectList[eg][9] = this.clipArtEndx-this.minClipArtx;
+                	this.baseactionobjectList[eg][10] = this.clipArtEndy-this.minClipArty;
+                	
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.minClipArtx;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.minClipArty;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.maxClipArtx-this.minClipArtx;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = this.maxClipArty-this.minClipArty;
+                    
+                    var newA = this.baseactionobjectList[eg];
+                    
+                    this.onsharedMessage('size',newA);
+                    
+                    break;
+                }
+            }   
+                           
+            //Set previous to null
+            this.prevx = null;
+            this.prevy = null;  
+        
+        ]]>
+    </method>
+    
+    <method name="endDrawClipArt">
+    	<![CDATA[
+    	
+            var oid_name = this.currentlayer.name;
+    	    var tSource = this.currentlayer.clipart.resource;
+    	    var tRotation = this.currentlayer.clipart.rotation;
+    	    var tX = this.currentlayer.clipart.x;
+    	    var tY = this.currentlayer.clipart.y;
+    	    var tWidth = this.currentlayer.clipart.width;
+    	    var tHeight = this.currentlayer.clipart.height;
+    	
+    	    //if ($debug) Debug.write("END 0 ",tY);
+    	    
+    	    this.currentlayer.destroy();
+    	       	        	    
+    	    //if ($debug) Debug.write("END 1 ",this.minClipArty,this.starty);
+    	    
+	     	if(this.isSnapToGrid){        		
+	    		if ($debug) Debug.write("####  this.minClipArtx y ",this.minClipArtx,this.minClipArty);
+	    	
+		    	//this.minClipArtx = Math.round(this.minClipArtx/this.gridWidth)*this.gridWidth;
+		    	//this.minClipArty = Math.round(this.minClipArty/this.gridWidth)*this.gridWidth;
+		    	
+		    	tX = Math.round(tX/this.gridWidth)*this.gridWidth;
+		    	tY = Math.round(tY/this.gridWidth)*this.gridWidth;
+		    	
+		    	this.currentlayer = new lz.drawViewNew(this,{
+    	                                x:tX,
+    	                                y:tY,
+                                        name:oid_name,
+                                        width:this.maxClipArtx-this.minClipArtx,
+                                        height:this.maxClipArty-this.minClipArty
+                                        //bgcolor:0x0033FF
+                                    });
+		    	
+            }else{
+    	    
+	    	    this.currentlayer = new lz.drawViewNew(this,{
+	    	                                x:this.minClipArtx,
+	    	                                y:this.minClipArty,
+	                                        name:oid_name,
+	                                        width:this.maxClipArtx-this.minClipArtx,
+	                                        height:this.maxClipArty-this.minClipArty
+	                                        //bgcolor:0x0033FF
+	                                    });
+            
+            //if ($debug) Debug.write(" IS ZERO END1 ",this.currentlayer.x,this.currentlayer.y);                        
+            }                                                
+            new lz.drawClipArtWhiteBoard(this.currentlayer,{
+                                    width:tWidth,height:tHeight,
+                                    stretches:'both',
+                                    x:this.deltaClipArtx,
+                                    y:this.deltaClipArty,
+                                    rotation:tRotation,
+                                    resource:tSource,
+                                    clipArtEndx:this.clipArtEndx-this.minClipArtx,
+                                    clipArtEndy:this.clipArtEndy-this.minClipArty,
+                                    name:'clipart'
+                                    //bgcolor:0xFF3300
+                                });
+    	
+            //if ($debug) Debug.write(" IS ZERO END2 ",this.deltaClipArtx,this.deltaClipArty);                        
+            
+            //if ($debug) Debug.write("END 2 ",this.currentlayer.y,this.currentlayer.clipart.y);
+            
+    	    this.drawClipArtRegisterFinal(
+    	                   oid_name,
+    	                   tSource,
+    	                   tRotation,
+    	                   1,
+    	                   this.minClipArtx,
+    	                   this.minClipArty,
+    	                   this.maxClipArtx-this.minClipArtx,
+    	                   this.maxClipArty-this.minClipArty,
+    	                   this.deltaClipArtx,
+    	                   this.deltaClipArty,
+    	                   tWidth,
+    	                   tHeight,
+    	                   this.clipArtEndx-this.minClipArtx,
+                           this.clipArtEndy-this.minClipArty,
+    	                   true,
+    	                   this.getSWFDocumentStatus(),
+    	                   this.getZIndex());
+    	     
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();    	                   
+    	                   
+            //Set previous to null
+            this.prevx = null;
+            this.prevy = null;  
+    	
+    	]]>
+    </method>
+    
+    <method name="drawClipArtRegisterFinal" args="newName,tSource,tRotation,opacity,x,y,width,height,deltaClipArtx,deltaClipArty,deltaClipWidth,deltaClipHeight,deltaClipEndx,deltaClipEndy,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'clipart';
+        actionObject[1] = newName;
+        actionObject[2] = tSource;
+        actionObject[3] = tRotation;
+        actionObject[4] = opacity;
+        actionObject[5] = deltaClipArtx;
+        actionObject[6] = deltaClipArty;
+        actionObject[7] = deltaClipWidth;
+        actionObject[8] = deltaClipHeight;
+        actionObject[9] = deltaClipEndx;
+        actionObject[10] = deltaClipEndy;
+        actionObject[11] = zIndex;//-8
+        actionObject[12] = swfObj;//-7
+        actionObject[13] = this.counter;//-6 
+        actionObject[14] = x;//-5
+        actionObject[15] = y;//-4
+        actionObject[16] = width;//-3
+        actionObject[17] = height;//-2
+        actionObject[18] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>      
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx
new file mode 100644
index 0000000..6107959
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawEllipse" extends="baseDrawRect" >
+    
+    <!-- 
+        for drawing ellipse the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentellipsestroke" value="0xFF6600" />
+    <attribute name="currentellipsestrokeDis" value="1" type="number" />
+    <attribute name="currentellipsestrokeFill" value="0xFFFF33" />
+    <attribute name="currentellipsestrokeFillDis" value="1" type="number" />
+    <attribute name="currentellipselineWidth" value="4" />
+    <attribute name="currentellipseOpacity" value="1" type="number" />
+  
+    <!-- ################
+    Ellipse
+     -->
+    <method name="startEllipse" args="oid_name">
+        //Debug.write("startEllipse");
+        if (oid_name == null) {
+            oid_name = 'ellipse'+this.getCounter();
+        }
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            opacity:this.currentellipseOpacity});
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>    
+    
+    <method name="endEllipse">
+        <![CDATA[
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentellipseOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerEllipse',x:0,y:0,width:width,height:height});
+                
+            //this.drawellipse(0,0,width,height);
+            //Debug.write("this.currentellipsestroke,this.currentellipselineWidth: ",this.currentellipsestroke,this.currentellipselineWidth);
+            
+            this.drawellipseHistory(this.currentlayer,
+                0,0,width,height,
+                this.currentellipsestroke,this.currentellipselineWidth,
+                this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+                this.currentellipsestrokeFillDis)
+            
+            //Draw On Object    
+                
+            this.drawellipseregisterFinal(this.currentlayer.name,
+                this.currentellipsestroke,this.currentellipselineWidth,
+                this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+                this.currentellipsestrokeFillDis,
+                x,y,width,height,this.getSWFDocumentStatus(),this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+        ]]>
+    </method>
+    
+    <method name="drawellipseToHistory"  args="lastActionObject,parentView">
+
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+            
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerEllipse',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+                
+        //Debug.write("lastActionObject[1],lastActionObject[2]: ",lastActionObject[1],lastActionObject[2]);
+        this.drawellipseHistory(tmpCurrentlayer,
+            0,0,lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],
+            lastActionObject[3],lastActionObject[4],
+            lastActionObject[5]);
+
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="redrawEllipseItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawRectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerEllipse.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerEllipse',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawellipseHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentellipsestroke,this.currentellipselineWidth,
+            this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+            this.currentellipsestrokeFillDis);
+    </method> 
+    
+    <method name="drawellipseHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+        
+            //Debug.write("stroke,line: ",stroke,line);
+            var rx = (x1+x2)/2;
+            var ry = (y1+y2)/2;
+            var xradius = Math.abs(rx-x1);
+            var yradius = Math.abs(ry-y1);
+            
+            parentObj._innerEllipse.lineWidth = line;
+            parentObj._innerEllipse.oval(rx,ry,xradius,yradius);
+            
+            if (strokeDis!=-1){
+                parentObj._innerEllipse.strokeStyle = stroke;
+                parentObj._innerEllipse.stroke();
+            }
+
+            if (fillDis!=-1){
+                parentObj._innerEllipse.fillStyle = fill;
+                parentObj._innerEllipse.fill();
+            }
+
+        ]]>   
+    </method>   
+     
+    <method name="drawellipse" args="x1,y1,x2,y2">
+        <![CDATA[
+            //Debug.write("stroke,line: ",this.currentellipsestroke,this.currentellipselineWidth);
+            var rx = (x1+x2)/2;
+            var ry = (y1+y2)/2;
+            var xradius = Math.abs(rx-x1);
+            var yradius = Math.abs(ry-y1);
+            
+            currentlayer.lineWidth = this.currentellipselineWidth;
+            currentlayer.oval(rx,ry,xradius,yradius);
+            
+            if (this.currentellipsestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentellipsestroke;
+                currentlayer.stroke();
+            }
+            
+            if (this.currentellipsestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentellipsestrokeFill;
+                currentlayer.fill(); 
+            }
+    
+        ]]>   
+    </method>
+    
+    <method name="drawellipseregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        var actionObject = new Array();
+        actionObject[0] = 'ellipse';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentellipseOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2 
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx
new file mode 100644
index 0000000..ce91a74
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="baseDrawLine" extends="baseDrawPaint" >
+      
+		<!-- for drawing line -->
+		<attribute name="currentlinestroke" value="0xFF6600" />
+		<attribute name="currentlinelineWidth" value="2" type="number" />   
+		<attribute name="currentlineOpacity" value="1" type="number" />
+        
+		<!-- ###########################
+			Line
+			 -->
+    
+		<method name="startLine" args="oid_name">
+
+			//Debug.write("startLine ",this.startx,this.starty);
+			if (oid_name == null) {
+				oid_name = 'line' + this.getCounter()
+			}
+			this.currentlayer = new lz.drawViewNew(this, {
+						name : oid_name,
+						width : this.width + 2,
+						height : this.height + 2,
+						x : -1,
+						y : -1,
+						opacity : this.currentlineOpacity
+					});
+			this.drawlineOnObject(this.currentlayer, -1, -1, 0, 0);
+			this.drawlineOnObject(this.currentlayer, this.width, this.height,
+					this.width + 1, this.height + 1);
+
+			//Set previous to null
+			this.prevx = null;
+			this.prevy = null;
+
+			currentlayer.strokeStyle = this.currentlinestroke;
+			currentlayer.lineWidth = this.currentlinelineWidth;
+			//currentlayer.fillstyle = '0x000000';
+
+		</method>
+    
+		<method name="endLine">
+        ////Debug.write("endLine",this.startx,this.starty,this.endx,this.endy);
+		<![CDATA[
+			var tempName = this.currentlayer.name;
+			this.currentlayer.destroy();
+
+			//GetBounds of that Object
+			var minx = this.width + 2;
+			var miny = this.height + 2;
+			var maxx = -2;
+			var maxy = -2;
+
+			if (this.startx < minx)
+				minx = this.startx;
+			if (this.endx < minx)
+				minx = this.endx;
+
+			if (this.startx > maxx)
+				maxx = this.startx;
+			if (this.endx > maxx)
+				maxx = this.endx;
+
+			if (this.starty < miny)
+				miny = this.starty;
+			if (this.endy < miny)
+				miny = this.endy;
+
+			if (this.starty > maxy)
+				maxy = this.starty;
+			if (this.endy > maxy)
+				maxy = this.endy;
+
+			var width = maxx - minx;
+			var height = maxy - miny;
+
+			var x1 = this.startx - minx + (this.currentlinelineWidth / 2);
+			var y1 = this.starty - miny + (this.currentlinelineWidth / 2);
+			var x2 = this.endx - minx + (this.currentlinelineWidth / 2);
+			var y2 = this.endy - miny + (this.currentlinelineWidth / 2);
+
+			if (this.isSnapToGrid) {
+
+				xgrid = Math.round((minx - 1 - (this.currentlinelineWidth / 2))
+						/ this.gridWidth)
+						* this.gridWidth;
+				ygrid = Math.round((miny - 1 - (this.currentlinelineWidth / 2))
+						/ this.gridWidth)
+						* this.gridWidth;
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : xgrid,
+							y : ygrid,
+							width : (width + this.currentlinelineWidth),
+							height : (height + this.currentlinelineWidth),
+							opacity : this.currentlineOpacity
+						});
+
+			} else {
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : (minx - 1 - (this.currentlinelineWidth / 2)),
+							y : (miny - 1 - (this.currentlinelineWidth / 2)),
+							width : (width + this.currentlinelineWidth),
+							height : (height + this.currentlinelineWidth),
+							opacity : this.currentlineOpacity
+						});
+			}
+			//this.currentlayer.fillstyle = '0x000000';
+			this.currentlayer.lineWidth = this.currentlinelineWidth;
+			this.currentlayer.strokeStyle = this.currentlinestroke;
+
+			this.drawline((x1), (y1), (x2), (y2));
+
+			//Add Layer to global Layer     
+			this.layers.push(this.currentlayer);
+
+			this.lineregisterFinal(this.currentlayer.name,
+					this.currentlinestroke, this.currentlinelineWidth,
+					this.currentlineOpacity, this.currentlayer.x,
+					this.currentlayer.y, this.currentlayer.width,
+					this.currentlayer.height, x1, y1, x2, y2, true, this
+							.getSWFDocumentStatus(), this.getZIndex());
+		]]>
+		</method> 
+    
+    
+		<method name="lineregisterFinal" args="newName,stroke,line,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+			var actionObject = new Array();
+			actionObject[0] = 'line';
+			actionObject[1] = stroke;
+			actionObject[2] = line;
+			actionObject[3] = opacity;
+			actionObject[4] = x1
+			actionObject[5] = y1;
+			actionObject[6] = x2;
+			actionObject[7] = y2;
+			actionObject[8] = zIndex;//-8
+			actionObject[9] = swfObj;//-7
+			actionObject[10] = this.counter;//-6
+			actionObject[11] = x;//-5
+			actionObject[12] = y;//-4
+			actionObject[13] = width;//-3
+			actionObject[14] = height;//-2
+			actionObject[15] = newName;//-1
+			this.baseactionobjectList.push(actionObject);
+			if (doCall)
+				this.onsharedMessage('draw', actionObject);
+		</method>       
+    
+    
+		<method name="lineactionHistory" args="lastActionObject,parentView">
+		<![CDATA[
+
+			//Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+
+			var tmpCurrentlayer = new lz.drawViewNew(parentView, {
+						name : lastActionObject[lastActionObject.length - 1],
+						x : lastActionObject[lastActionObject.length - 5],
+						y : lastActionObject[lastActionObject.length - 4],
+						width : lastActionObject[lastActionObject.length - 3],
+						height : lastActionObject[lastActionObject.length - 2],
+						opacity : lastActionObject[3]
+					});
+
+			//this.currentlayer.fillstyle = lastActionObject[1];
+			tmpCurrentlayer.lineWidth = lastActionObject[2];
+			tmpCurrentlayer.strokeStyle = lastActionObject[1];
+
+			this.drawlineOnObject(tmpCurrentlayer, lastActionObject[4],
+					lastActionObject[5], lastActionObject[6],
+					lastActionObject[7]);
+
+			//Add Layer to global Layer     
+			this.layers.push(tmpCurrentlayer);
+
+			this.doSWFDocumentStatus(tmpCurrentlayer,
+					lastActionObject[lastActionObject.length - 7]);
+		]]>
+		</method>
+    
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx
new file mode 100644
index 0000000..00af3e9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="baseDrawPaint" extends="baseDraw" >
+    
+		<!-- paint -->
+		<attribute name="currentlayerstroke" value="0xFF6600" />
+		<attribute name="currentlayerlineWidth" value="2" type="number" />
+		<attribute name="currentlayerOpacity" value="1" type="number" />
+    
+		<!-- TODO: Check if needed, seems to have no reference -->
+		<attribute name="painttrans" value="false" type="boolean" />
+          
+		<!-- #####################
+				Paint
+			 -->
+    
+		<method name="drawline" args="x1,y1,x2,y2">
+		<![CDATA[
+			currentlayer.beginPath();
+			currentlayer.moveTo(x1, y1);
+			currentlayer.lineTo(x2, y2);
+			currentlayer.stroke();
+		]]>
+		</method>
+    
+		<method name="drawlineOnObject" args="obj,x1,y1,x2,y2">
+		<![CDATA[
+			obj.beginPath();
+			obj.moveTo(x1, y1);
+			obj.lineTo(x2, y2);
+			obj.stroke();
+		]]>
+		</method>
+        
+    
+		<method name="drawlineRegisterPaint" args="x1,y1,x2,y2">
+			var actionObject = new Array();
+			actionObject[0] = 'point';
+			actionObject[1] = x1;
+			actionObject[2] = y1;
+			actionObject[3] = x2;
+			actionObject[4] = y2;
+			this.basetempactionobjectList.push(actionObject);
+		</method> 
+         
+		<method name="startPaint">
+
+			//Debug.write("startPaint ",this.startx,this.starty);
+			this.currentlayer = new lz.drawViewNew(this, {
+						name : 'paint' + this.getCounter(),
+						width : this.width + 2,
+						height : this.height + 2,
+						x : -1,
+						y : -1,
+						opacity : this.currentlayerOpacity
+					});
+			this.drawlineOnObject(this.currentlayer, -1, -1, 0, 0);
+			this.drawlineOnObject(this.currentlayer, this.width, this.height,
+					this.width + 1, this.height + 1);
+
+			this.startx = this.currentlayer.getMouse('x');
+			this.starty = this.currentlayer.getMouse('y');
+
+			//Set previous to null
+			this.prevx = null;
+			this.prevy = null;
+
+			currentlayer.strokeStyle = this.currentlayerstroke;
+			currentlayer.lineWidth = this.currentlayerlineWidth;
+			currentlayer.fillstyle = '0x000000';
+
+			this.basetempactionobjectList = new Array();
+
+			//beginFill( the_colorpicker.selectedColor );
+		</method>
+
+		<method name="endPaint">
+        ////Debug.write("endPaint");
+		<![CDATA[
+			var tempName = this.currentlayer.name;
+			this.currentlayer.destroy();
+
+			//GetBounds of that Object
+			var minx = this.width + 2;
+			var miny = this.height + 2;
+			var maxx = -2;
+			var maxy = -2;
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++) {
+				////Debug.write(this.basetempactionobjectList[eg][1],this.basetempactionobjectList[eg][3]);
+				if (this.basetempactionobjectList[eg][1] < minx)
+					minx = this.basetempactionobjectList[eg][1];
+				if (this.basetempactionobjectList[eg][3] < minx)
+					minx = this.basetempactionobjectList[eg][3];
+
+				if (this.basetempactionobjectList[eg][1] > maxx)
+					maxx = this.basetempactionobjectList[eg][1];
+				if (this.basetempactionobjectList[eg][3] > maxx)
+					maxx = this.basetempactionobjectList[eg][3];
+
+				if (this.basetempactionobjectList[eg][2] < miny)
+					miny = this.basetempactionobjectList[eg][2];
+				if (this.basetempactionobjectList[eg][4] < miny)
+					miny = this.basetempactionobjectList[eg][4];
+
+				if (this.basetempactionobjectList[eg][2] > maxy)
+					maxy = this.basetempactionobjectList[eg][2];
+				if (this.basetempactionobjectList[eg][4] > maxy)
+					maxy = this.basetempactionobjectList[eg][4];
+			}
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++) {
+
+				this.basetempactionobjectList[eg][1] -= minx;
+				this.basetempactionobjectList[eg][2] -= miny;
+				this.basetempactionobjectList[eg][3] -= minx;
+				this.basetempactionobjectList[eg][4] -= miny
+
+			}
+
+			var width = maxx - minx;
+			var height = maxy - miny;
+			//if ($debug) Debug.info("## 1 ## NEW x,y ",minx,miny," width,height: ",width,height);
+
+			if (width < 2 && height < 2) {
+
+				//if ($debug) Debug.info("Add minimum size of Painting Line");
+
+				if (this.basetempactionobjectList.length > 0) {
+
+					var lastPoint = this.basetempactionobjectList[this.basetempactionobjectList.length
+							- 1];
+
+					var actionObject = new Array();
+					actionObject[0] = 'point';
+					actionObject[1] = lastPoint[3];
+					actionObject[2] = lastPoint[4];
+					actionObject[3] = lastPoint[3] + 2;
+					actionObject[4] = lastPoint[4] + 2;
+					this.basetempactionobjectList.push(actionObject);
+
+				} else {
+
+					//if ($debug) Debug.info("## 2 ## CURRENT width,height ",this.width,this.height);
+
+					minx = this.startx;
+					miny = this.starty;
+
+					var actionObject = new Array();
+					actionObject[0] = 'point';
+					actionObject[1] = 0;
+					actionObject[2] = 0;
+					actionObject[3] = 2;
+					actionObject[4] = 2;
+					this.basetempactionobjectList.push(actionObject);
+
+					width = 2;
+					height = 2;
+
+				}
+
+			}
+
+			if (this.isSnapToGrid) {
+
+				xgrid = Math.round((minx - 1) / this.gridWidth)
+						* this.gridWidth;
+				ygrid = Math.round((miny - 1) / this.gridWidth)
+						* this.gridWidth;
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : xgrid,
+							y : ygrid,
+							width : width,
+							height : height,
+							opacity : this.currentlayerOpacity
+						});
+			} else {
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : minx - 1,
+							y : miny - 1,
+							width : width,
+							height : height,
+							opacity : this.currentlayerOpacity
+						});
+			}
+
+			this.currentlayer.fillstyle = '0x000000';
+			this.currentlayer.lineWidth = this.currentlayerlineWidth;
+			this.currentlayer.strokeStyle = this.currentlayerstroke;
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++)
+				this.drawline(this.basetempactionobjectList[eg][1],
+						this.basetempactionobjectList[eg][2],
+						this.basetempactionobjectList[eg][3],
+						this.basetempactionobjectList[eg][4]);
+
+			//this.currentlayer.setAttribute('stretches','both');
+
+			//Add Layer to global Layer     
+			this.layers.push(this.currentlayer);
+
+			this.registerFinal(this.getSWFDocumentStatus(), this.getZIndex());
+		]]>
+		</method>    
+
+		<method name="registerFinal" args="swfObj,zIndex">
+			var actionObject = new Array();
+			actionObject[0] = 'paint';
+			actionObject[1] = this.basetempactionobjectList;
+			actionObject[2] = currentlayer.fillstyle;
+			actionObject[3] = currentlayer.lineWidth;
+			actionObject[4] = currentlayer.strokeStyle;
+			actionObject[5] = this.currentlayerOpacity;
+			actionObject[6] = zIndex;//-8
+			actionObject[7] = swfObj;//-7
+			actionObject[8] = this.counter;//-6
+			actionObject[9] = currentlayer.x;//-5
+			actionObject[10] = currentlayer.y;//-4
+			actionObject[11] = currentlayer.width;//-3
+			actionObject[12] = currentlayer.height;//-2
+			actionObject[13] = this.currentlayer.name;//-1
+			if ($debug)
+				Debug.write("registerFinal :: ", actionObject);
+			this.baseactionobjectList.push(actionObject);
+			this.onsharedMessage('draw', actionObject);
+		</method>      
+    
+    
+		<method name="paintactionHistory" args="lastActionObject,parentView">
+		<![CDATA[
+			if ($debug) Debug.write("## paintactionHistory", parentView, " opacity:",
+						lastActionObject[5]);
+
+			var tmpCurrentlayer = new lz.drawViewNew(parentView, {
+						name : lastActionObject[lastActionObject.length - 1],
+						x : lastActionObject[lastActionObject.length - 5],
+						y : lastActionObject[lastActionObject.length - 4],
+						width : lastActionObject[lastActionObject.length - 3],
+						height : lastActionObject[lastActionObject.length - 2],
+						opacity : lastActionObject[5]
+					});
+					
+			if ($debug) ("paintactionHistory 1 ",tmpCurrentlayer.x,tmpCurrentlayer.y,tmpCurrentlayer.opacity);
+
+			tmpCurrentlayer.fillstyle = lastActionObject[2];
+			tmpCurrentlayer.lineWidth = lastActionObject[3];
+			tmpCurrentlayer.strokeStyle = lastActionObject[4];
+			
+			if ($debug) ("paintactionHistory 2 ",tmpCurrentlayer.fillstyle,tmpCurrentlayer.lineWidth,tmpCurrentlayer.strokeStyle);
+
+			for (var eg = 0; eg < lastActionObject[1].length; eg++) {
+				if ($debug) ("paintactionHistory 3 ",lastActionObject[1][eg][1], lastActionObject[1][eg][2],
+										lastActionObject[1][eg][3], lastActionObject[1][eg][4]);
+				this.drawlineOnObject(tmpCurrentlayer,
+						lastActionObject[1][eg][1], lastActionObject[1][eg][2],
+						lastActionObject[1][eg][3], lastActionObject[1][eg][4]);
+			}
+
+			//tmpCurrentlayer.setAttribute('stretches','both');
+			this.doSWFDocumentStatus(tmpCurrentlayer,
+					lastActionObject[lastActionObject.length - 7]);
+		]]>
+		</method>
+    
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx
new file mode 100644
index 0000000..e95316d
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawPointer" extends="baseDrawEllipse" >
+      
+    <!-- Pointers -->
+    
+    <method name="endPointerWhiteBoard">
+        this.drawPointerWhiteBoardFinal(
+                "pointer"+this.getCounter(),
+                this.getMouse('x'),this.getMouse('y'),
+                0,0
+            )
+    </method>
+
+    <method name="drawPointerToHistory" args="actionObject,parentObj">
+        new lz.whiteBoardPointer(parentObj,{
+            x:actionObject[actionObject.length-5],
+            y:actionObject[actionObject.length-4],
+            userName:actionObject[1]
+        })
+    </method>
+
+    <method name="drawPointerWhiteBoardFinal" args="newName,x,y,width,height" >
+    	var displayedName = canvas.currentuser;
+    	if (canvas.firstName.length > 0) {
+    		displayedName = canvas.firstName;
+    	}
+    	if (canvas.lastName.length > 0) {
+    		if (canvas.firstName.length > 0) {
+    			displayedName += " " + canvas.lastName;
+    		} else {
+    			displayedName = canvas.lastName;
+    		}
+    	}
+    	
+        var actionObject = new Array();
+        actionObject[0] = 'pointerWhiteBoard';
+        actionObject[1] = displayedName;
+        actionObject[2] = this.counter;//-6
+        actionObject[3] = x;//-5
+        actionObject[4] = y;//-4
+        actionObject[5] = width;//-3
+        actionObject[6] = height;//-2
+        actionObject[7] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+        this.drawPointerToHistory(actionObject,this);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx
new file mode 100644
index 0000000..c3fcd4e
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawRect" extends="baseDrawSelect" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentrectanglestroke" value="0xFF6600" />
+    <attribute name="currentrectanglestrokeDis" value="1" type="number" />
+    <attribute name="currentrectanglestrokeFill" value="0xFFFF33" />
+    <attribute name="currentrectanglestrokeFillDis" value="1" type="number" />
+    <attribute name="currentrectangleineWidth" value="4" type="number" />
+    <attribute name="currentrectangleOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+        Rectangle
+     -->
+    
+    <method name="startRect" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'rectangle'+this.getCounter();
+        }
+        //Debug.write("startRect");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentrectangleOpacity});
+
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endRect">
+        <![CDATA[        
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentrectangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerRect',x:0,y:0,width:width,height:height});
+                
+            this.drawrectangleHistory(this.currentlayer,0,0,width,height,
+                this.currentrectanglestroke,this.currentrectangleineWidth,
+                this.currentrectanglestrokeFill,this.currentrectanglestrokeDis,
+                this.currentrectanglestrokeFillDis);
+            //this.currentlayer.setAttribute('stretches','both');
+            this.drawrectregisterFinal(this.currentlayer.name,this.currentrectanglestroke,
+                this.currentrectangleineWidth,this.currentrectanglestrokeFill,
+                this.currentrectanglestrokeDis,this.currentrectanglestrokeFillDis,
+                x,y,width,height,this.getSWFDocumentStatus(),
+                this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+        ]]>
+    </method> 
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+    <method name="drawrectangle" args="x1,y1,x2,y2">
+        <![CDATA[
+            
+            currentlayer.lineWidth = this.currentrectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(x1,y1);
+            currentlayer.lineTo(x1,y2);
+            currentlayer.lineTo(x2,y2);
+            currentlayer.lineTo(x2,y1);
+            currentlayer.lineTo (x1,y1);
+            currentlayer.closePath();
+            
+            if (this.currentrectanglestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentrectanglestroke;
+                currentlayer.stroke();
+            }
+
+            if (this.currentrectanglestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentrectanglestrokeFill;
+                currentlayer.fill();
+            }
+            
+        ]]>   
+    </method>   
+    
+    <method name="redrawRectItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawRectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerRect.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerRect',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawrectangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentrectanglestroke,this.currentrectangleineWidth,
+            this.currentrectanglestrokeFill,this.currentrectanglestrokeDis,
+            this.currentrectanglestrokeFillDis);
+    </method> 
+    
+    <method name="drawrectangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerRect',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawrectangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawrectangleHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawrectangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerRect.lineWidth = line;
+            parentObj._innerRect.beginPath();
+            parentObj._innerRect.moveTo(x1,y1);
+            parentObj._innerRect.lineTo(x1,y2);
+            parentObj._innerRect.lineTo(x2,y2);
+            parentObj._innerRect.lineTo(x2,y1);
+            parentObj._innerRect.lineTo (x1,y1);
+            
+            if (strokeDis!=-1){
+                parentObj._innerRect.strokeStyle = stroke;
+                parentObj._innerRect.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerRect.fillStyle = fill;
+                parentObj._innerRect.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawrectregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        Debug.write("drawrectregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'rectangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentrectangleOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2  
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx
new file mode 100644
index 0000000..932dded
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawSelect" extends="baseDrawTriangle" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentSelectanglestroke" value="0x8e8986" />
+    <attribute name="currentSelectanglestrokeDis" value="1" type="number" />
+    <attribute name="currentSelectanglestrokeFill" value="0x8e8986" />
+    <attribute name="currentSelectanglestrokeFillDis" value="1" type="number" />
+    <attribute name="currentSelectangleineWidth" value="4" type="number" />
+    <attribute name="currentSelectangleOpacity" value="0.2" type="number" />
+    
+    <method name="copyWhiteboardObjects">
+        this.doCopyWhiteboardObjects();
+    </method>
+    
+    <method name="cutWhiteboardObjects">
+    	<![CDATA[
+        	this.doCopyWhiteboardObjects();
+        	for (var eg=0;eg<this.copyObject.length;eg++){                
+                var itemToDelete = this.copyObject[eg][this.copyObject[eg].length-1];
+                this.deleteItemByName(itemToDelete);
+                
+                if ($debug) Debug.write("cut name ", this.copyObject[eg][this.copyObject[eg].length-1]);
+            }
+            
+            //if (this.boundingIsActive){
+            //    this.boundingref._innerDrag.onmouseup.sendEvent();
+            //}
+        ]]>
+    </method>
+    
+    <method name="doCopyWhiteboardObjects">
+        <![CDATA[  
+            if ($debug) Debug.write("tCopyObject :0: ",this.boundingIsActive);
+        
+            if (this.boundingIsActive) {
+            	
+            	this.copyObject = new Array();
+            	
+            	var tObject = new Array();
+                var tCopyObject = this.getBaseObjectByName(this.boundingref.objRef.name);
+                
+                if ($debug) Debug.write("tCopyObject :1: ",this.boundingref.objRef.name);
+                if ($debug) Debug.write("tCopyObject :2: ",tCopyObject);
+                
+                for (var i=0;i<tCopyObject.length;i++) {
+                    var tItemObject = tCopyObject[i];
+                    
+                    if (tItemObject instanceof Array) {
+                        
+                        var storingItemObject = new Array();
+                        
+                        for (var k=0;k<tItemObject.length;k++) {
+                            var kItemObject = tItemObject[k];
+                            
+                            if (kItemObject instanceof Array) {
+                                
+                                var subStoringItemObject = new Array();
+                                
+                                for (var l=0;l<kItemObject.length;l++) {
+                                    var lItemObject = kItemObject[l];
+                                    subStoringItemObject.push(lItemObject);
+                                }
+                                
+                                storingItemObject.push(subStoringItemObject);
+                            } else {
+                                storingItemObject.push(kItemObject);
+                            }
+                            
+                            
+                        }
+                        
+                        tObject[i] = storingItemObject;
+                        
+                    } else {
+                        tObject[i] = tItemObject;
+                    }
+                    
+                }
+                
+                this.copyObject.push(tObject);
+            	
+            } else {
+        
+            	this.copyObject = this.selectedObjects;
+            
+            }
+            
+            if ($debug) Debug.write("to this.copyObject ", this.copyObject);
+            
+        ]]>
+    </method>
+    
+    
+    
+    <method name="paste" args="paste_x, paste_y">
+        <![CDATA[       
+            //if ($debug) Debug.write("paste name ", this.copyObject[eg][this.copyObject[eg].length-1]);
+            if ($debug) Debug.write("paste copyObject", this.copyObject);
+            
+            if(this.isSnapToGrid){ 
+                paste_x = Math.round(paste_x/this.gridWidth)*this.gridWidth;
+                paste_y = Math.round(paste_y/this.gridWidth)*this.gridWidth;
+            }
+            
+            var shift_x = this.width+1;
+            var shift_y = this.height+1;
+            
+            for (var eg=0;eg<this.copyObject.length;eg++){
+            	
+            	var tx = this.copyObject[eg][this.copyObject[eg].length-5];
+            	var ty = this.copyObject[eg][this.copyObject[eg].length-4];  
+            	
+            	if (tx < shift_x) {
+            		shift_x = tx;
+            	}
+            	
+            	if (ty < shift_y) {
+                    shift_y = ty;
+                }
+            	
+            }
+            
+            if ($debug) Debug.write("paste_x,paste_y,shift_x,shift_y", paste_x,paste_y,shift_x,shift_y);
+            
+            for (var eg=0;eg<this.copyObject.length;eg++){
+                
+                //var itemToDelete = this.copyObject[eg][this.copyObject[eg].length-1];
+                //this.deleteItemByName(itemToDelete);
+                
+                //this.baseactionobjectList[eg][10] = this.baseactionobjectList[eg][10] + paste_x;
+                //this.baseactionobjectList[eg][11] = this.baseactionobjectList[eg][11] + paste_y;
+                
+                //this.copyObject[eg][10] = this.copyObject[eg][10] + paste_x -50;
+                //this.copyObject[eg][11] = this.copyObject[eg][11] + paste_y-50;
+                
+                var tempArr = this.copyObject[eg].slice(0);
+                
+                tempArr[tempArr.length-1] += tempArr[0]+this.getCounter(); //Math.round(Math.random()*10000);
+                
+                tempArr[tempArr.length-5] =  paste_x - shift_x + tempArr[tempArr.length-5];
+                tempArr[tempArr.length-4] = paste_y - shift_y + tempArr[tempArr.length-4];               
+                
+                //this.sendWatchObject("draw", this.copyObject[eg], false);
+                
+                if ($debug) Debug.write("paste tempArr :x,y: ", tempArr[tempArr.length-5],tempArr[tempArr.length-4]);
+                
+                this.sendWatchObject("draw", tempArr, false);
+                //this.sendRemoteWatchObject(tempArr);
+                
+                this.onsharedMessage('draw',tempArr);
+                
+                if ($debug) Debug.write("paste name ", this.copyObject[eg]);
+                
+                //if ($debug) Debug.write("paste this.copyObject[eg][10]", this.copyObject[eg][10]);
+                //if ($debug) Debug.write("paste this.copyObject[eg][11] ", this.copyObject[eg][11]);
+                //if ($debug) Debug.write("paste paste_x ", paste_x);
+                //if ($debug) Debug.write("paste paste_y ", paste_y);
+                
+            }
+        ]]>
+    </method>
+    
+      
+    <!-- ###########################
+        Select tool
+     -->
+    
+    <method name="startSelect" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'select'+this.getCounter();
+        }
+        //Debug.write("startselect");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentSelectangleOpacity});
+        this.currentlayer
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endSelect">
+        <![CDATA[        
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if (width < 2 && height < 2) {
+            	return;
+            }
+            
+            //if(this.isSnapToGrid){        		
+	    			        	   
+	          //  x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	//y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            //} 
+            
+            if(this.selectedObjects != null && this.selectedObjects.length > 0){
+                for (var eg=0;eg<this.selectedObjects.length;eg++){
+                        
+                    var  objectToUpdate = this.getObjectByName(this.selectedObjects[eg][this.selectedObjects[eg].length-1]);
+                    objectToUpdate.setAttribute('opacity', 1);
+                    
+                }
+            }
+            
+            this.selectedObjects = new Array();
+            
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                //Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+                //if ($debug) Debug.write("############## baseactionobjectList select : ", this.baseactionobjectList[eg]);
+                //if ($debug) Debug.write("############## baseactionobjectList select x: ", this.baseactionobjectList[eg][10]);
+                //if ($debug) Debug.write("############## baseactionobjectList select y: ", this.baseactionobjectList[eg][11]);
+                //if ($debug) Debug.write("############## baseactionobjectList select opacity: ", this.baseactionobjectList[eg][6]);
+                //if ($debug) Debug.write("############## baseactionobjectList select name: ", this.baseactionobjectList[eg][14]);
+                
+                //if ($debug) Debug.write("############## baseactionobjectList select this x: ", x);
+                //if ($debug) Debug.write("############## baseactionobjectList select this y: ", y);
+                
+                //if ($debug) Debug.write("############## baseactionobjectList select this x+width: ", x+width);
+                //if ($debug) Debug.write("############## baseactionobjectList select this y+height: ", y+height);
+                
+                //if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==bName) {
+                    //return this.baseactionobjectList[eg];
+                //}
+                
+                if (
+                    (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] >= x && this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] >= y) &&
+                    (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] <= x+width && this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] <= y+height)
+                   ) {
+                    //return this.baseactionobjectList[eg];
+                    //this.baseactionobjectList[eg][6] = 0.2;
+                    
+                   	var tObject = new Array();
+                   	var tCopyObject = this.baseactionobjectList[eg];
+                   	
+                   	for (var i=0;i<tCopyObject.length;i++) {
+                   		var tItemObject = tCopyObject[i];
+                   		
+                   		if (tItemObject instanceof Array) {
+                   			
+               			    var storingItemObject = new Array();
+                   			
+               			    for (var k=0;k<tItemObject.length;k++) {
+           				        var kItemObject = tItemObject[k];
+           				        
+           				        if (kItemObject instanceof Array) {
+           				        	
+           				        	var subStoringItemObject = new Array();
+           				        	
+           				        	for (var l=0;l<kItemObject.length;l++) {
+           				        		var lItemObject = kItemObject[l];
+           				        		subStoringItemObject.push(lItemObject);
+           				        	}
+           				        	
+           				        	storingItemObject.push(subStoringItemObject);
+           				        } else {
+           				        	storingItemObject.push(kItemObject);
+           				        }
+                   				
+                   				
+                   			}
+                   			
+                   			tObject[i] = storingItemObject;
+                   			
+                   		} else {
+                   			tObject[i] = tItemObject;
+                   		}
+                   		
+                   	}
+                   	
+                   	
+                   	
+                    this.selectedObjects.push(tObject);
+                    
+                    objectToUpdate = this.getObjectByName(this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]);
+                    objectToUpdate.setAttribute('opacity', 0.7);
+                    
+                    //this.baseactionobjectList[eg][14] += '_copy';
+                    //this.sendRemoteWatchObject(this.baseactionobjectList[eg]);
+                    //this.sendRemoteWatchObject(this.baseactionobjectList[eg]);                  
+                    
+                    if ($debug) Debug.write("############## objectToUpdate: ", objectToUpdate);
+                    if ($debug) Debug.write("############## baseactionobjectList select opacity if: ", this.baseactionobjectList[eg][6]);
+                }
+            }  
+            
+            /*
+            if(whiteboardObjects.length > 0){
+            	 = whiteboardObjects;
+            }
+            */
+            
+            if ($debug) Debug.write("############## endSelect this.selectedObjects: ",  this.selectedObjects);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentSelectangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerSelect',x:0,y:0,width:width,height:height});
+                
+            //this.drawSelectangleHistory(this.currentlayer,0,0,width,height,
+              //  this.currentSelectanglestroke,this.currentSelectangleineWidth,
+                //this.currentSelectanglestrokeFill,this.currentSelectanglestrokeDis,
+                //this.currentSelectanglestrokeFillDis);
+           
+            //this.drawSelectregisterFinal(this.currentlayer.name,this.currentSelectanglestroke,
+              //  this.currentSelectangleineWidth,this.currentSelectanglestrokeFill,
+                //this.currentSelectanglestrokeDis,this.currentSelectanglestrokeFillDis,
+                //x,y,width,height,this.getSWFDocumentStatus(),
+                //this.getZIndex());
+            //this.layers.push(this.currentlayer);
+            //this.checkStepLayers();
+        ]]>
+    </method> 
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+     <!--
+    <method name="drawSelectangle" args="x1,y1,x2,y2">
+        <![CDATA[
+            
+            currentlayer.lineWidth = this.currentSelectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(x1,y1);
+            currentlayer.lineTo(x1,y2);
+            currentlayer.lineTo(x2,y2);
+            currentlayer.lineTo(x2,y1);
+            currentlayer.lineTo (x1,y1);
+            this.closePath();
+            
+            if (this.currentSelectanglestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentSelectanglestroke;
+                currentlayer.stroke();
+            }
+
+            if (this.currentSelectanglestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentSelectanglestrokeFill;
+                currentlayer.fill();
+            }
+            
+        ]]>   
+    </method>   
+    -->
+    <method name="redrawSelectItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawSelectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerSelect.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerSelect',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawSelectangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentSelectanglestroke,this.currentSelectangleineWidth,
+            this.currentSelectanglestrokeFill,this.currentSelectanglestrokeDis,
+            this.currentSelectanglestrokeFillDis);
+    </method> 
+    
+    <method name="drawSelectangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerSelect',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawSelectangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawSelectangleHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawSelectangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerSelect.lineWidth = line;
+            parentObj._innerSelect.beginPath();
+            parentObj._innerSelect.moveTo(x1,y1);
+            parentObj._innerSelect.lineTo(x1,y2);
+            parentObj._innerSelect.lineTo(x2,y2);
+            parentObj._innerSelect.lineTo(x2,y1);
+            parentObj._innerSelect.lineTo (x1,y1);
+            
+            if (strokeDis!=-1){
+                parentObj._innerSelect.strokeStyle = stroke;
+                parentObj._innerSelect.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerSelect.fillStyle = fill;
+                parentObj._innerSelect.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawSelectregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        Debug.write("drawSelectregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'Selectangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentSelectangleOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2  
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx
new file mode 100644
index 0000000..56baab0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawTriangle" extends="baseDrawClipArt" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currenttrianglestroke" value="0xFF6600" />
+    <attribute name="currenttrianglestrokeDis" value="1" type="number" />
+    <attribute name="currenttrianglestrokeFill" value="0xFFFF33" />
+    <attribute name="currenttrianglestrokeFillDis" value="1" type="number" />
+    <attribute name="currenttriangleineWidth" value="4" type="number" />
+    <attribute name="currenttriangleOpacity" value="1" type="number" />
+     
+      
+    <!-- ###########################
+        triangle
+     -->
+    
+    <method name="startTriangle" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'triangle'+this.getCounter();
+        }
+        //Debug.write("startTriangle");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currenttriangleOpacity});
+        this.currentlayer
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endTriangle">
+        <![CDATA[        	
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            
+            var tTriangle = this.getTrianglePointByRect(this.startx,this.starty,this.endx,this.endy);
+            
+            var max_x = Math.max(this.startx,this.endx,tTriangle.x);
+            var min_x = Math.min(this.startx,this.endx,tTriangle.x);
+            var max_y = Math.max(this.starty,this.endy,tTriangle.y);
+            var min_y = Math.min(this.starty,this.endy,tTriangle.y);
+            
+            
+            var x = min_x;
+            var width = max_x - min_x;
+            var y = min_y;
+            var height = max_y - min_y;
+            
+            var tx1 = this.startx-x;
+            var ty1 = this.starty-y;
+            var tx2 = this.endx-x;
+            var ty2 = this.endy-y;
+            var tx3 = tTriangle.x-x;
+            var ty3 = tTriangle.y-y;
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currenttriangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerTriangle',x:0,y:0,width:width,height:height});
+                
+            this.drawtriangleHistory(this.currentlayer,0,0,width,height,
+            	tx1,ty1,tx2,ty2,tx3,ty3,
+                this.currenttrianglestroke,this.currenttriangleineWidth,
+                this.currenttrianglestrokeFill,this.currenttrianglestrokeDis,
+                this.currenttrianglestrokeFillDis);
+            //this.currentlayer.setAttribute('stretches','both');
+            this.drawTriangleregisterFinal(this.currentlayer.name,this.currenttrianglestroke,
+                this.currenttriangleineWidth,this.currenttrianglestrokeFill,
+                this.currenttrianglestrokeDis,this.currenttrianglestrokeFillDis,
+                x,y,width,height,
+                tx1,ty1,tx2,ty2,tx3,ty3,
+                this.getSWFDocumentStatus(),
+                this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+            if ($debug) Debug.write("############## this.endx : ", this.endx);
+        ]]>
+    </method> 
+    
+    <method name="getTrianglePointByRect" args="x1,y1,x2,y2">
+    	<![CDATA[
+    		if (x2 >= x1 && y1 >= y2) {
+
+               var a = y1 - y2;
+               var b = x2 - x1;
+               
+               return {'x':x2 + a,'y':y2 + b};
+
+           } else if (x2 >= x1 && y1 <= y2) {
+
+               var a = y2 - y1;
+               var b = x2 - x1;
+
+               return {'x':x2 - a,'y':y2 + b};
+
+           } else if (x2 <= x1 && y1 <= y2) {
+
+               var a = y2 - y1;
+               var b = x1 - x2;
+
+               return {'x':x2 - a,'y':y2 - b};
+               
+           } else if (x2 <= x1 && y1 >= y2) {
+
+               var a = y1 - y2;
+               var b = x1 - x2;
+
+               return {'x':x2 + a,'y':y2 - b};
+               
+           } else {
+
+               if ($debug) Debug.warn("DEFAULT drawtriangle ",x1,y1,x2,y2);
+
+           }
+           
+       ]]>
+    </method>
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+    <method name="drawtriangle" args="x1,y1,x2,y2">
+       <![CDATA[
+
+           var tTriangle = this.getTrianglePointByRect(x1,y1,x2,y2);
+
+		   this.drawtriangleByCord(x1,y1,x2,y2,tTriangle.x,tTriangle.y)
+       ]]>   
+   </method> 
+   
+    <method name="drawtriangleByCord" args="tx1,ty1,tx2,ty2,tx3,ty3">
+       <![CDATA[
+
+		   currentlayer.lineWidth = this.currenttriangleineWidth;
+           currentlayer.beginPath();
+           currentlayer.moveTo(tx1, ty1);
+           currentlayer.lineTo(tx2, ty2);
+           currentlayer.lineTo(tx3, ty3);
+           currentlayer.lineTo(tx1, ty1);
+           currentlayer.closePath();
+
+           if (this.currenttrianglestrokeDis != -1) {
+               currentlayer.strokeStyle = this.currenttrianglestroke;
+               currentlayer.stroke();
+           }
+
+           if (this.currenttrianglestrokeFillDis != -1) {
+               currentlayer.fillStyle = this.currenttrianglestrokeFill;
+               currentlayer.fill();
+           }
+       ]]>   
+   </method> 
+    
+    <method name="redrawTriangleItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawTriangleItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerTriangle.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerTriangle',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawtriangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currenttrianglestroke,this.currenttriangleineWidth,
+            this.currenttrianglestrokeFill,this.currenttrianglestrokeDis,
+            this.currenttrianglestrokeFillDis);
+    </method> 
+    
+    <method name="drawtriangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerTriangle',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawtriangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[7],lastActionObject[8], //tx1,ty1
+            lastActionObject[9],lastActionObject[10], //tx2,ty2
+            lastActionObject[11],lastActionObject[12], //tx3,ty3
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawtriangleHistory" args="parentObj,x1,y1,x2,y2,tx1,ty1,tx2,ty2,tx3,ty3,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawtriangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerTriangle.lineWidth = line;
+            parentObj._innerTriangle.beginPath();
+            parentObj._innerTriangle.moveTo(tx1,ty1);
+            parentObj._innerTriangle.lineTo(tx2,ty2);
+            parentObj._innerTriangle.lineTo(tx3,ty3);
+            parentObj._innerTriangle.lineTo (tx1,ty1);
+            parentObj._innerTriangle.closePath();
+            
+            if (strokeDis!=-1){
+                parentObj._innerTriangle.strokeStyle = stroke;
+                parentObj._innerTriangle.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerTriangle.fillStyle = fill;
+                parentObj._innerTriangle.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawTriangleregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,tx1,ty1,tx2,ty2,tx3,ty3,swfObj,zIndex" >
+        Debug.write("drawTriangleregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'triangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currenttriangleOpacity;
+        actionObject[7] = tx1;
+        actionObject[8] = ty1;
+        actionObject[9] = tx2;
+        actionObject[10] = ty2;
+        actionObject[11] = tx3;
+        actionObject[12] = ty3;
+        actionObject[13] = zIndex;//-8
+        actionObject[14] = swfObj;//-7
+        actionObject[15] = this.counter;//-6
+        actionObject[16] = x;//-5
+        actionObject[17] = y;//-4
+        actionObject[18] = width;//-3
+        actionObject[19] = height;//-2  
+        actionObject[20] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx
new file mode 100644
index 0000000..dfa7e5b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawULine" extends="baseDrawLine" >
+    
+    <!-- for drawing uline -->
+    <attribute name="currentulinestroke" value="0xFF6600" />
+    <attribute name="currentulinelineWidth" value="20" type="number" />  
+    <attribute name="currentulineOpacity" value="0.5" type="number" />
+      
+    
+    <!-- ###########################
+    Underline
+     -->
+    <method name="startUline" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'uline'+this.getCounter();
+        }
+        //Debug.write("startUline ",this.startx,this.starty);
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            x:-1,y:-1,
+            opacity:this.currentulineOpacity});
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        currentlayer.strokeStyle = this.currentulinestroke;
+        currentlayer.lineWidth = this.currentulinelineWidth;
+        currentlayer.fillstyle = '0x000000';
+    </method>  
+    
+    <method name="endUline">
+        //Debug.write("endUline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+            var tempName = this.currentlayer.name;
+            //Debug.write("tempName: ",tempName);
+            this.currentlayer.destroy();
+            
+            //GetBounds of that Object
+            var minx = this.width+2;
+            var miny = this.height+2;
+            var maxx = -2;
+            var maxy = -2;
+    
+            if (this.startx<minx) minx=this.startx;
+            if (this.endx<minx) minx=this.endx;
+            
+            if (this.startx>maxx) maxx=this.startx;
+            if (this.endx>maxx) maxx=this.endx;
+            
+            if (this.starty<miny) miny=this.starty;
+            if (this.endy<miny) miny=this.endy;
+            
+            if (this.starty>maxy) maxy=this.starty;
+            if (this.endy>maxy) maxy=this.endy;
+            
+            var width = maxx-minx;
+            var height = maxy-miny;
+            
+            var x1 = this.startx-minx+(this.currentulinelineWidth/2);
+            var y1 = this.starty-miny+(this.currentulinelineWidth/2);
+            var x2 = this.endx-minx+(this.currentulinelineWidth/2);
+            var y2 = this.endy-miny+(this.currentulinelineWidth/2);
+            
+            //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tempName,x:(minx-1-(this.currentulinelineWidth/2)),
+                y:(miny-1-(this.currentulinelineWidth/2)),
+                width:(width+this.currentulinelineWidth),
+                height:(height+this.currentulinelineWidth),
+                opacity:this.currentulineOpacity});
+                
+            //this.currentlayer.fillstyle = '0x000000';
+            this.currentlayer.lineWidth = this.currentulinelineWidth;
+            this.currentlayer.strokeStyle = this.currentulinestroke;
+    
+            this.drawline((x1),(y1),(x2),(y2));
+    
+            //Add Layer to global Layer     
+            this.layers.push(this.currentlayer);  
+            this.ulineregisterFinal(this.currentlayer.name,this.currentulinestroke,
+                this.currentulinelineWidth,this.currentulineOpacity,
+                this.currentlayer.x,this.currentlayer.y,
+                this.currentlayer.width,this.currentlayer.height,
+                x1,y1,x2,y2,true,this.getSWFDocumentStatus(),
+                this.getZIndex());
+        ]]>
+    </method> 
+    
+    
+    <method name="ulineregisterFinal" args="newName,stroke,line,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'uline';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = opacity;
+        actionObject[4] = x1  
+        actionObject[5] = y1;  
+        actionObject[6] = x2;    
+        actionObject[7] = y2;  
+        actionObject[8] = zIndex;//-8
+        actionObject[9] = swfObj;//-7
+        actionObject[10] = this.counter;//-6 
+        actionObject[11] = x;//-5
+        actionObject[12] = y;//-4
+        actionObject[13] = width;//-3
+        actionObject[14] = height;//-2
+        actionObject[15] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>       
+    
+    
+    <method name="ulineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+        //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+        
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[3]});
+            
+            //this.currentlayer.fillstyle = lastActionObject[1];
+            tmpCurrentlayer.lineWidth = lastActionObject[2];
+            tmpCurrentlayer.strokeStyle = lastActionObject[1];
+    
+            this.drawlineOnObject(tmpCurrentlayer, lastActionObject[4],lastActionObject[5],lastActionObject[6],lastActionObject[7]);
+            
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);  
+            
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx
new file mode 100644
index 0000000..c84782b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="baseDrawPaint.lzx" />
+    <include href="baseDrawLine.lzx" />
+    <include href="baseDrawULine.lzx" />
+    <include href="baseDrawClipArt.lzx" />
+    <include href="baseDrawArrow.lzx" />
+    <include href="baseDrawRect.lzx" />
+    <include href="baseDrawEllipse.lzx" />
+    <include href="baseDrawPointer.lzx" />
+    <include href="baseDrawTriangle.lzx" />
+    <include href="baseDrawSelect.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx b/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx
new file mode 100644
index 0000000..c95beab
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="whiteBoardPointer" extends="view"
+           resource="pointer_whiteboard_rsc" width="20" height="20" >
+        <attribute name="userName" value="" type="string" />
+        <attribute name="fadeDelegate" value="null" />
+        <labelText x="20" text="$once{ parent.userName }" />
+        <handler name="oninit">
+            this.play();
+            this.fadeDelegate = new LzDelegate( this, "fadeText" );
+            lz.Timer.addTimer( this.fadeDelegate, 5000 );
+        </handler>
+        <method name="fadeText" args="itemObj">
+            this.destroy();
+        </method>
+    </class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx b/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx
new file mode 100644
index 0000000..461b341
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardVideoPlayer" extends="labelExplorerBox" allowDragging="false"
+    docking="false" resizeable="false" closable="false" 
+    x="0" y="0" width="${ parent.width }" height="${ parent.height }">
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	
+    <attribute name="timerDelegateStarted" value="false" type="boolean" />
+    
+    <attribute name="deltaInSeconds" value="0" type="number" />
+    
+    <attribute name="currentTime" value="0" type="number" /> 	
+    
+    <attribute name="recordingName" value="" type="string" />
+    
+    <attribute name="isLoaded" value="false" type="boolean" />
+	
+	<attribute name="sendInit" value="false" type="boolean" />
+	
+	<attribute name="flv_width" value="0" type="number" /> 
+	
+    <attribute name="flv_height" value="0" type="number" /> 
+    
+    <attribute name="isPaused" value="true" type="boolean" />
+    
+	<handler name="oninit">
+		if ($debug) Debug.write("whiteboardVideoPlayer :: ",this.fileExplorerItemId);
+		
+		this.recordingName = "UPLOADFLV_" + this.fileExplorerItemId + ".flv";
+		calcVideoWidthHeight();
+		this.copyFileToCurrentRoom.doCall();
+		
+		var t = this;
+		canvas.videoComp_lc.stopRecordingStream = function(tName) {
+            if (t.name == tName) {
+            	t.stopStream();
+            }
+        }
+        canvas.videoComp_lc.metaWhiteboardPlaybackStream = function(tName,duration) {
+            if (t.name == tName) {
+                t.deltaInSeconds = duration;
+                t.setDuration();
+            }
+        }
+        canvas.videoComp_lc.updateWhiteboardStreamTime = function(tName,time) {
+            if (t.name == tName) {
+                t.currentTime = time;
+                t.calcProgressBar();
+            }
+        }
+		
+	</handler>
+	
+	<handler name="prepareForDelete" args="tRef">
+		if ($debug) Debug.write("--- prepareForDelete ");
+		this.stopStream();
+	</handler>
+	
+	<handler name="onclose">
+		this.stopStreamPlay();
+	</handler>
+	
+	<handler name="onwidth" args="w">
+		calcVideoWidthHeight();
+	</handler>
+	
+	<handler name="onheight" args="h">
+		calcVideoWidthHeight();
+	</handler>
+	
+	<!--
+	public Long copyFileToCurrentRoom(String SID, Long flvFileExplorerId)
+	 -->
+    <netRemoteCallHib name="copyFileToCurrentRoom" funcname="fileservice.copyFileToCurrentRoom" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[    
+	            if ($debug) Debug.write("deleteFileOrFolder: ",value);
+	            parent.isLoaded = true;
+	            
+	            var downloadurl = canvas.getUrl()+'DownloadHandler?fileName=UPLOADFLV_'+parent.fileExplorerItemId+'.jpg'
+                                +'&moduleName=lzRecorderApp&parentPath=&room_id='
+                                +'&sid='+canvas.sessionId;
+	            
+                parent._content._preview.imagePreview.setAttribute("src",downloadurl)
+                    
+                parent._content._preview.bringToFront();
+                                
+	            if (parent.sendInit) {
+	                parent.parent.sendNewVideoRemote(parent);
+	            }
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+    <method name="startStreamPlay">
+    	parent.playFLV(this,true);
+    	this.startStream();
+    </method>
+    
+    <method name="stopStreamPlay">
+    	parent.playFLV(this,false);
+    	this.stopStream();
+    </method>
+    
+    <method name="playRemote">
+    	this.startStream();
+    </method>
+    
+    <method name="stopRemote">
+        this.stopStream();
+    </method>
+    
+    <method name="startStream">
+    	<![CDATA[
+	    	if (!this.isLoaded) {
+	    		return;
+	    	}
+	    	
+	    	if ($debug) Debug.write("startStream ",this.recordingName);
+	    	
+	    	if (this.recordingName != "") {
+	    		
+	    		this.isPaused = false;
+	    		
+	    		if (!this.timerDelegateStarted) {
+	    			this.timerDelegateStarted = true;
+	            }
+	            
+	        	if ($debug) Debug.write("PLAY STREAM ",this.recordingName);
+	        	
+	        	var tObjectDimension = calcVideoWidthHeight();
+	        	
+	        	if ($debug) Debug.write("SEND ",this.recordingName,0,tObjectDimension.x,tObjectDimension.y,tObjectDimension.width,tObjectDimension.height);
+	        	
+	            // this._content._videostream.playStream(this.recordingName,0,tObjectDimension.x,tObjectDimension.y,tObjectDimension.width,tObjectDimension.height);
+	            
+	        	var tx = this.getAttributeRelative("x",canvas)+tObjectDimension.x+this._content.x;
+	        	var ty = this.getAttributeRelative("y",canvas)+tObjectDimension.y+this._content.y;
+	        	
+	            canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "playbackWhiteboardVideo", [this.name,this.recordingName,0,tx,ty,tObjectDimension.width,tObjectDimension.height]);
+	    	}
+    	]]>
+    </method>   
+    
+    <!---
+        calculates the new x, y, width and height of the video so that it is 100% 
+        visible in the container
+     -->
+    <method name="calcVideoWidthHeight">
+        <![CDATA[
+        
+            if ($debug) Debug.write("calcVideoWidthHeight ",this.flv_width,this.flv_height);
+        
+            var ratio = this.flv_width / this.flv_height;
+            
+            //max height of container is new height of video;
+            //calc new width and x-position of video
+            var newHeight = this._content.height;
+            var newWidth = ratio * newHeight; 
+            var newx = (this._content.width - newWidth) / 2;
+            var newy = 0;
+            
+            if ($debug) Debug.write("calcVideoWidthHeight",ratio,this._content.width,this._content.height,newWidth,newHeight,newx,newy);
+         
+            if (newWidth > this._content.width) {
+                newWidth = this._content.width;
+                newHeight = newWidth / ratio;
+                newx = 0;
+                newy = (this._content.height - newHeight) / 2;
+            }
+            
+            var t = {'x':newx,'y':newy,'width':newWidth,'height':newHeight};
+            
+            if ($debug) Debug.write("t",t);
+            
+            this._content._preview.setAttribute("x",newx);
+            this._content._preview.setAttribute("y",newy);
+            this._content._preview.setAttribute("width",newWidth);
+            this._content._preview.setAttribute("height",newHeight);
+            
+            return {'x':newx,'y':newy,'width':newWidth,'height':newHeight};
+        ]]>
+    </method>
+    
+    <method name="setDuration">
+    	<![CDATA[
+           if ($debug) Debug.write("setDuration ",this.deltaInSeconds);
+           var tString = "";
+           if (this.deltaInSeconds > 60) {
+               var minutes = Math.floor(this.deltaInSeconds/60);
+               var restSeconds = Math.round(this.deltaInSeconds) - ( minutes * 60 );
+               tString = minutes + " min " + restSeconds + " sec";
+           } else {
+               tString = Math.round(this.deltaInSeconds) + " sec";
+           }
+           this._progress._progressbar._duration.setAttribute("text",tString);
+        ]]>
+    </method>
+    
+    <method name="calcProgressBar">
+    	<![CDATA[
+    	   if ($debug) Debug.write("calcProgressBar ",this.currentTime);
+    	   this._progress._progressbar._pointer.setAttribute("visibility","visible");
+    	   var tString = "";
+    	   if (this.currentTime > 60) {
+    	   	   var minutes = Math.floor(this.currentTime/60);
+    	   	   var restSeconds = Math.round(this.currentTime) - ( minutes * 60 );
+    	   	   tString = minutes + " min " + restSeconds + " sec";
+    	   } else {
+    	   	   tString = Math.round(this.currentTime) + " sec";
+    	   }
+    	   var tNewX = Math.round((this._progress._progressbar.width / this.deltaInSeconds) * this.currentTime);
+    	   this._progress._progressbar._time.setAttribute("text",tString);
+    	   this._progress._progressbar._pointer.setAttribute("x",tNewX);
+    	]]>
+    </method> 
+	
+	<method name="stopStream">
+    	if (this.timerDelegateStarted) {
+    		this.timerDelegateStarted = false;
+        }
+        this._progress._progressbar._time.setAttribute("text","");
+        this._progress._progressbar._pointer.setAttribute("x",0);
+        if ($debug) Debug.write("SEND stopWhiteboardVideo ",this.name);
+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "stopWhiteboardVideo",[this.name]);
+        this.isPaused = true;
+    </method>
+    
+    <method name="toggleStream">
+    	if (canvas.ismoderator &amp;&amp; this.isPaused) {
+   			this.startStreamPlay();
+    	}
+    </method>
+	
+	<view name="_content" height="${ parent.height-62 }" bgcolor="0x000000"
+		  y="22" x="1" width="${ parent.width-1 }">
+		
+		<view name="_preview" width="0" height="0" >
+        	<image name="imagePreview" stretches="both"
+        		   width="${parent.width}" height="${parent.height}" />
+            <handler name="onclick">
+            	if ($debug) Debug.write("onclick -- toggleStream");
+                parent.parent.toggleStream();
+            </handler>		   
+            <view width="60" height="40" valign="middle" opacity="0.7"
+            	  align="center" bgcolor="0xFFFFFF">
+            	<view resource="lz_recorder_play" valign="middle" align="center" />
+            </view>
+        </view>
+	
+	</view>
+
+    <view name="_progress" height="18" y="${ parent.height - 40 }" width="${ parent.width-2 }"
+    	                  x="1" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    	
+    	<view resource="flv_recorder_play_small_rsc" y="1" height="16" width="16"
+    		      bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		<handler name="onmouseover">
+                this.setAttribute("bgcolor",0xFFFFFF);
+            </handler>
+            <handler name="onmouseout">
+                this.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+            </handler>
+    		<handler name="onclick">
+    			if (canvas.ismoderator &amp;&amp; parent.parent.isPaused) {
+    			     parent.parent.startStreamPlay();
+    			}
+    		</handler>
+    		<labelTooltip labelid="875" />
+    	</view>
+    	
+    	<view name="_progressbar" x="16" width="${ parent.width - 32 }" y="1" 
+    		  height="16" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		
+    		<view x="0" width="${ parent.width }" y="0" height="16" bgcolor="0xFFFFFF" opacity="0.5" /> 
+    		
+    		<handler name="onclick">
+    			//parent.parent.seekStream(this.getMouse("x"));
+    		</handler>
+    		
+    		<view name="_pointer" resource="flv_progress_pointer_rsc" visibility="hidden" />
+    		
+    		<text name="_time" resize="true" fontsize="10" />
+    		
+    		<text name="_duration" align="right" resize="true" fontsize="10" />
+    		
+    	</view>
+    	
+    	<view resource="flv_recorder_stop_small_rsc" align="right" y="1" height="16" width="16"
+    		  bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		<handler name="onmouseover">
+    			this.setAttribute("bgcolor",0xFFFFFF);
+    		</handler>
+    		<handler name="onmouseout">
+                this.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+            </handler>
+            <handler name="onclick">
+            	if (canvas.ismoderator) {
+                    parent.parent.stopStreamPlay();
+            	}
+            </handler>
+            <labelTooltip labelid="876" />
+        </view>
+    	
+    </view>	
+    
+    <simpleLabelButton labelid="85" width="100" x="${ parent.width-118 }" 
+    				   y="${ parent.height-20 }" >
+        <handler name="onclick">
+            if (canvas.ismoderator) {
+            	this.parent.stopRemote();
+                this.parent.parent.deleteItemByName(this.parent.name);
+                this.parent.parent.deleteItemByNameSync(this.parent.name);
+            }
+        </handler>
+    </simpleLabelButton>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx b/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx
new file mode 100644
index 0000000..9c10d3f
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePropertyPanelWhiteboard" extends="view" >
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />		
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	
+	<!--- if the box is allowed to be minimized  -->
+	<attribute name="allowToggle" value="true" type="boolean" />	
+		
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute("title",canvas.getLabelName(this.labelid));
+	</method>
+	
+	<method name="toggleopen">
+		if (!this.allowToggle) {
+			return;
+		}
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){		
+			this.setAttribute('height',this.initheight);
+			this.setAttribute('height',this.initheight);
+		} else {	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+    <handler name="oninit">
+    	this.initheight=this.height;
+    </handler>
+	
+    <view x="0" y="1" width="${ this.parent.width }" height="20" bgcolor="0xE0E1EB" />
+    
+    <view x="0" y="0" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+    
+    <view x="0" y="19" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+	
+	<handler name="onclick">
+        this.toggleopen();
+    </handler>
+    
+    <text fontsize="11" height="17" x="2" y="1" text="${ this.parent.title }" 
+						fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" resize="true" fontstyle="bold" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
new file mode 100644
index 0000000..b73230c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+############################
+
+    Class newWhiteBoard
+    
+    
+    @keywords deprecated
+    
+ -->
+
+
+<class name="fixedFileExplorerWhiteBoard" extends="view" showhandcursor="false">
+    
+    <attribute name="baseurl" value="" type="string" />
+    <attribute name="fileName" value="" type="string" />
+    <attribute name="moduleName" value="" type="string" />
+    <attribute name="parentPath" value="" type="string" />
+    <attribute name="room" value="" type="string" />
+    <attribute name="domain" value="" type="string" />
+    
+    <attribute name="downloadurl" value="" type="string" />
+    <attribute name="iamgex" value="" type="string" />
+    <attribute name="imagey" value="" type="string" />
+    
+    <attribute name="restricted" value="false" type="boolean" />
+    
+    <event name="onsharedMessage" />
+    
+    <attribute name="sendObject" value="null" />
+    <attribute name="sendObjectToClientID" value="0" type="number"  />
+    
+    <attribute name="confirmdialog" value="null" />
+    
+    <attribute name="documentmenuIsInited" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        if ($debug) Debug.info("Init Whiteboard ",this.restricted);
+    </handler>
+
+    <handler name="ondestroy">
+		//if ($debug) Debug.write("############## fixedFileExplorerWhiteBoard::ondestroy : ", this);
+		this._drawareaMask._drawarea.clearRemote();
+    </handler>
+
+    <method name="sendConfirmation" args="yesno,askagain" >
+        
+        ////Debug.write("clear yesno,askagain: ",yesno,askagain);
+    
+         var g = canvas.getUserData();
+         if (g["image"]==null) g["image"]=new Array();
+         g["image"]["clearField"]=yesno;
+         g["image"]["askagainclear"]=!askagain;
+         canvas.setUserData(g);
+
+         if (yesno){
+            ////Debug.write("clear field!!");
+            canvas._drawarea.setModus('plain');
+            canvas._drawarea.addNewSyncImage(this.downloadurl,this.iamgex,this.imagey,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+         } else {
+            ////Debug.write("don't clear field!!");
+            canvas._drawarea.addNewSyncImage(this.downloadurl,this.iamgex,this.imagey,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+         }
+         this.confirmdialog.close();
+    </method>
+    
+    <method name="getconfirmationscode">
+        var g = canvas.getUserData();
+        if (g["image"]==null) {
+            g["image"]=new Array();
+            g["image"]["clearField"]=false;
+            g["image"]["askagainclear"]=true;
+            canvas.setUserData(g);
+        }
+        return g["image"];
+    </method>
+    
+    <method name="resetDefaultConfirmations">
+        var g = canvas.getUserData();
+        if (g["image"]==null) g["image"]=new Array();
+        g["image"]["clearField"]=false;
+        g["image"]["askagainclear"]=true;
+        canvas.setUserData(g);
+    </method>   
+    
+    <method name="clearAreaAndAddImage" args="downloadurlVal,xVal,yVal,baseurl,fileName,moduleName,parentPath,room,domain">
+        <![CDATA[
+        ////Debug.write("clearAreaAndAddImage: ",downloadurlVal,xVal,yVal,baseurl,fileName,moduleName,parentPath,room,domain);
+        this.downloadurl=downloadurlVal;
+        this.iamgex=xVal;
+        this.imagey=yVal;   
+        this.baseurl=baseurl;
+        this.fileName=fileName;
+        this.moduleName=moduleName;
+        this.parentPath=parentPath;
+        this.room=room;
+        this.domain=domain;
+        var storedImageDate = this.getconfirmationscode();
+        ////Debug.write(" g[image] ",storedImageDate);
+        if (storedImageDate["clearField"] && !storedImageDate["askagainclear"]){
+            canvas._drawarea.setModus('plain');
+            if ($debug) Debug.write(" canvas._drawarea.addNewImage 1 ",this.downloadurl,this.x,this.y);
+            canvas._drawarea.addNewImage(this.downloadurl,this.x,this.y,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+        } else if (!storedImageDate["askagainclear"] && !storedImageDate["clearField"]){
+            canvas._drawarea.addNewImage(this.downloadurl,this.x,this.y,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+            if ($debug) Debug.write(" canvas._drawarea.addNewImage 2 ",this.downloadurl,this.x,this.y);
+        } else if (storedImageDate["askagainclear"]){
+            this.confirmdialog = new lz.confirmationBox(canvas.main_content._content.inner,{labelid:62,labeliderror:63,refObj:this});
+        } else {
+            this.confirmdialog = new lz.confirmationBox(canvas.main_content._content.inner,{labelid:62,labeliderror:63,refObj:this});
+        }
+        ]]> 
+    </method>
+    
+    <event name="isloadingImage" />
+    <event name="isloadedImage" />
+    
+    
+    <text fontsize="11" x="10" y="2" 
+        name="_sharingClientName" fontstyle="bold" />    
+    
+    
+	<method name="checkForApplyScreen">
+		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
+	</method> 
+	
+    <!-- 
+        The Content Area    
+     -->
+    <view width="${ parent.parent.width-2 }" 
+          height="${ (canvas.ismoderator) ? (parent.parent.height-42-parent._propertyPanel.height) : ((canvas.isAllowedToDraw) ? (parent.parent.height-42-parent._propertyPanel.height) : (parent.parent.height-42)) }" 
+          y="0" name="_drawareaMask" clip="true" bgcolor="0xFFFFFF" >
+    	
+    	<handler name="oninit">
+            if ($debug) Debug.info("lz.Track.register ",canvas.currentImagesListdraw.currentTrackGroupName);
+            lz.Track.register(this, canvas.currentImagesListdraw.currentTrackGroupName);
+        </handler>
+    	
+    	<handler name="onmousedown">
+            this._drawarea.onmousedownMethod();
+        </handler>
+        
+        <handler name="onmouseup">
+            this._drawarea.onmouseupMethod();
+        </handler>
+        
+        <handler name="onmouseover">
+        	lz.Cursor.restoreCursor();
+        	lz.Cursor.showHandCursor(false);
+            this._drawarea.onmouseoverMethod();
+        </handler>
+        
+        <handler name="onmouseout">
+        	lz.Cursor.showHandCursor(true);
+        	lz.Cursor.unlock();
+            this._drawarea.onmouseoutMethod();
+        </handler>
+        
+        <handler name="onmousetrackover">
+            if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(this);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(this);
+            this.setAttribute("bgcolor",0xFFFFFF);
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",0xFFFFFF);
+        </handler>   
+    	
+    	<remoteWhiteboard y="0" name="_drawarea" isRemoteOID="true" height="${parent.height}" width="${parent.height}"
+                          restricted="$once{ parent.parent.restricted }" >
+    		
+    		<attribute name="sendUpdate" value="true" type="boolean"/>
+    		
+    		<handler name="onx" args="x">
+                if (this.sendUpdate) {
+                    if ($debug) Debug.write("# x",x);
+					if ('scrollContainer' in parent.parent) {
+	                    parent.parent.scrollContainer.calcScrollContent();
+					}
+                }
+            </handler>
+            
+            <handler name="ony" args="y">
+                if (this.sendUpdate) {
+                    if ($debug) Debug.write("# y",y);
+					if ('scrollContainer' in parent.parent) {
+                    	parent.parent.scrollContainer.calcScrollContent();
+					}
+                }
+            </handler>
+            
+            <handler name="onheight" args="h">
+                if ($debug) Debug.write("# height",h);
+                //this.dragger.drag_min_x = parent.width - w;
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+                parent.parent.zoombox.sendUpdate(null);
+            </handler>
+            
+            <handler name="onwidth" args="w">
+                if ($debug) Debug.write("# width",w);
+                //this.dragger.drag_min_y = parent.height - h;
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+            </handler>
+            
+            <handler name="onupdateScale" args="tRef">
+                if ($debug) Debug.write("# updateScale",this.getDisplayObject()._xscale);
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+            </handler>
+    		
+            <attribute name="initH"/>
+            <attribute name="initW"/>
+            <handler name="oninit">
+                canvas._drawarea = this; 
+            </handler>
+            
+            <handler name="onprogress" args="perc">
+                //Debug.write("onprogress: ",perc);
+                this.parent.parent._progress.setProgress(perc);
+            </handler>
+            <!--
+            <handler name="onmousedown" >
+                //Debug.write("onprogress: ",perc);
+            </handler>
+             -->
+            <handler name="ondrawmodus" args="d">
+                this.drawmodus = d;
+                //change Enabled Status of Toolbar Menu Button
+                parent.parent._propertyPanel.loadPanelByModus(this);
+            </handler>
+            <handler name="setNewScreenUserName" args="value">
+                this.parent.parent._sharingClientName.setAttribute('text',value);
+            </handler>
+            <!-- @overwrite -->
+            <method name="onsharedMessage" args="action,obj">
+                
+                if ($debug) Debug.write("###### onsharedMessage",action,obj);
+    
+                var tempSendArray = new Array ();
+                tempSendArray[0] = 'whiteboard';
+                tempSendArray[1] = new Date();
+                tempSendArray[2] = action;
+                tempSendArray[3] = obj;
+                     
+                parent.parent.onsharedMessage.sendEvent(tempSendArray);
+            </method>
+            
+            <handler name="onopenWhiteBoard" >
+                //parent.parent.getRoomItems.doCall();
+            </handler>
+            
+            <!-- clientid  = streamid of the user -->
+            <method name="oninitUser" args="clientid,objectList">
+                this.parent.parent.sendObjectToClientID = clientid;
+                this.parent.parent.sendObject = objectList;
+                this.parent.parent.sendMessageWithClientById.doCall();
+            </method>
+            
+            <handler name="onboundingIsActive" args="b">
+                if ($debug) Debug.write("boundingIsActive: ",b);
+                if (b){
+                    var boundingDoUpdateOnInit = true;
+                    if (this.ObjectByName instanceof lz.swfResourceView){
+                        //Debug.write("is swf Presentation");
+                        boundingDoUpdateOnInit=false;
+                    }
+                    if (!boundingDoUpdateOnInit) {
+                        parent.parent._propertyPanel.setObjectBounds(
+                            this.ObjectByName.x,this.ObjectByName.y,
+                            this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+                    } else {
+                        parent.parent._propertyPanel.setObjectBounds(
+                            this.ObjectByName.x,this.ObjectByName.y,
+                            this.ObjectByName.width,this.ObjectByName.height);
+                    }
+                }
+            </handler>
+            
+            <!--  bounding Box (selection Box) -->
+            <handler name="onBoundingBox" args="boundingBoxRef">
+                var boundingDoUpdateOnInit = true;
+                if (boundingBoxRef.objRef instanceof lz.swfResourceView){
+                //Debug.write("is swf Presentation");
+                    boundingDoUpdateOnInit=false;
+                }
+                if (!boundingDoUpdateOnInit) {
+                    parent.parent._propertyPanel.setObjectBounds(
+                    boundingBoxRef.objRef.x,boundingBoxRef.objRef.y,
+                    boundingBoxRef.objRef._swfView.width,boundingBoxRef.objRef._swfView.height);
+                } else {
+                    parent.parent._propertyPanel.setObjectBounds(
+                    boundingBoxRef.objRef.x,boundingBoxRef.objRef.y,
+                    boundingBoxRef.objRef.width,boundingBoxRef.objRef.height);
+                }
+            </handler>
+            
+            <method name="getDocumentToolBar">
+                return parent.parent.panelArea.getDocumentsToolbar();
+            </method>
+            
+            <method name="getPaintToolBar">
+                return parent.parent.panelArea._mainToolsPanel;
+            </method>
+            
+            <view name="_grid" x="-2" y="-2" height="${parent.height}" width="${parent.height}" 
+                  visibility="${ (parent.showGrid) ? 'visible' : 'hidden'}"/>
+        </remoteWhiteboard>   
+    	
+    </view>
+    
+    
+    <view name="scrollContainer" width="${ parent.parent.width-2 }" 
+          visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+          height="${ (canvas.ismoderator) ? (parent.parent.height-42-parent._propertyPanel.height) : ((canvas.isAllowedToDraw) ? (parent.parent.height-33-parent._propertyPanel.height) : (parent.parent.height-33)) }" >
+        
+        <attribute name="sendUpdate" value="true" type="boolean"/>
+        
+        <method name="calcScrollContent">
+            var rHeight = Math.round(parent._drawareaMask._drawarea.height * (parent._drawareaMask._drawarea.getDisplayObject()._xscale / 100));
+            var rWidth = Math.round(parent._drawareaMask._drawarea.width * (parent._drawareaMask._drawarea.getDisplayObject()._yscale / 100));
+            this.sendUpdate = false;
+            this.scrollview.setAttribute("x",parent._drawareaMask._drawarea.x);
+            this.scrollview.setAttribute("y",parent._drawareaMask._drawarea.y);
+            this.scrollview.setAttribute("height", Math.max(rHeight, parent._drawareaMask._drawarea.getDisplayObject()._height));
+            this.scrollview.setAttribute("width", Math.max(rWidth, parent._drawareaMask._drawarea.getDisplayObject()._width));
+            this.sendUpdate = true;
+        </method>
+        
+        <view name="scrollview">
+            
+            <attribute name="timeisInited" value="false" type="boolean" />
+            <attribute name="sendObjectDel" value="null" />
+            
+            <handler name="oninit">
+                this.sendObjectDel = new LzDelegate( this, "sendObject" );
+            </handler>
+            
+            <handler name="onx" args="x">
+                if (parent.sendUpdate) {
+                    if ($debug) Debug.write("# scrollview x",x);
+                    parent.parent._drawareaMask._drawarea.setAttribute("x",x);
+                    
+                    if (!this.timeisInited){
+                        this.timeisInited=true;
+                        lz.Timer.addTimer( this.sendObjectDel, 250 );
+                    } else {
+                        lz.Timer.resetTimer( this.sendObjectDel, 250 );
+                    }
+                }
+            </handler>
+            <handler name="ony" args="y">
+                if (parent.sendUpdate) {
+                    if ($debug) Debug.write("# scrollview y",y);
+                    parent.parent._drawareaMask._drawarea.setAttribute("y",y);
+                    
+                    if (!this.timeisInited){
+                        this.timeisInited=true;
+                        lz.Timer.addTimer( this.sendObjectDel, 250 );
+                    } else {
+                        lz.Timer.resetTimer( this.sendObjectDel, 250 );
+                    }
+                }
+            </handler>
+            
+            <method name="sendObject" args="itemRef">
+                if ($debug) Debug.info("sendObject :: scrollview");
+                
+                var tArray = new Array();
+                tArray[0] = "moveMap";
+                tArray[1] = Math.round(this.x);
+                tArray[2] = Math.round(this.y);
+                
+                this.parent.parent._drawareaMask._drawarea.onsharedMessage('moveMap',tArray);
+                this.timeisInited=false;
+            </method>
+        </view>
+    
+        <om_vscrollbar name="_scrollstv"/> 
+        <om_hscrollbar name="_scrollsth" /> 
+    
+    </view>    
+    
+    
+        <netRemoteCallHib name="sendMessageWithClientById" funcname="sendMessageWithClientById"
+            remotecontext="$once{ canvas.thishib }" >
+            <netparam><method name="getValue">return parent.parent.sendObject;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.sendObjectToClientID;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //Debug.write("sendMessageWithClientById : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>     
+    
+    <view name="panelArea" width="${ parent.parent.width }" 
+          height="${ parent.parent.height-42-parent._propertyPanel.height }">
+        
+        <attribute name="objectRef" value="null" />
+        
+        <!--- @deprecated -->
+        <method name="_setSelection" args="obj">
+            parent._drawareaMask._drawarea.removeObjectBounds();
+            if (obj.setSelectionToItem){            
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef._area.setAttribute('bgcolor',0xFFFFFF);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef._area.setAttribute('bgcolor',canvas.getThemeColor('basebgcolorizer'));
+                parent._drawareaMask._drawarea.setModus(this.objectRef.modi);
+            }
+        </method>
+        
+        <method name="setSelection" args="obj">
+            if ($debug) Debug.write("setSelection ",obj);
+            parent._drawareaMask._drawarea.removeObjectBounds();
+            if (obj.setSelectionToItem){            
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef.setAttribute('enabled',true);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef.setAttribute('enabled',false);
+            }
+            if (obj.modi=="saveobj"){
+                parent._drawareaMask._drawarea.doAction(obj.modi);
+            } else {
+                parent._drawareaMask._drawarea.setModus(obj.modi);
+            }
+        </method>
+        
+        <method name="setSelectionWithoutEvent" args="obj">
+            if (obj.setSelectionToItem){         
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef.setAttribute('enabled',true);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef.setAttribute('enabled',false);
+            }
+        </method>
+        
+        <!--
+                                
+         -->
+         
+        <method name="sendNewPropertyHeight" args="objRef">
+            <![CDATA[
+                for (var i=0;i<this.subviews.length;i++) {
+                    if (this.subviews[i].y != 0) {
+                        if (this.subviews[i] instanceof lz.mainToolsTopPanel) {
+                            if (objRef.height<=22){
+                                if (this.subviews[i].y+this.subviews[i].height+5>=parent.parent.height-objRef.initheight-21){
+                                    if ($debug) Debug.write("mainToolsTopPanel");
+                                    this.subviews[i].setAttribute('y',objRef.y-this.subviews[i].height);
+                                }
+                            } else {
+                                if (this.subviews[i].y+this.subviews[i].height+5>=objRef.y){
+                                    if ($debug) Debug.write("mainToolsTopPanel");
+                                    this.subviews[i].setAttribute('y',objRef.y-this.subviews[i].height);
+                                }
+                            }
+                        }   
+                    }
+                }
+            ]]>
+        </method>
+        
+        <method name="getDocumentsToolbar">
+            return parent._propertyPanel._content._documentsPanel;
+        </method>
+        
+        <mainToolsTopPanel x="100" y="0" name="_mainToolsPanel" 
+             visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"/>
+        
+        <mainToolsLeftPanelPointer y="20" name="_mainToolsLeftPanelPointer" 
+             visible="${ (parent.parent.restricted) ? false : (((canvas.ismoderator) ? false : ((canvas.isAllowedToDraw) ? false : true ))) }"/>
+    </view> 
+    
+    <view name="zoombox" y="0" x="${ parent.parent.width-this.width-14 }" layout="axis:x;spacing:2">
+        
+        <attribute name="ignoreUpdates" value="false" type="boolean" />
+        
+        <handler name="onx" args="x">
+        	if (this._fullFit.getValue()) {
+        		if ($debug) Debug.write("on x sendUpdate ",x);
+        		lz.Timer.addTimer( new LzDelegate( this, "sendUpdate" ), 100 );
+        	}
+        </handler>
+        
+        <method name="sendUpdate" args="refObj">
+            if ($debug) Debug.write("fixedFileExplorer sendUpdate ",refObj);
+        	parent._drawareaMask._drawarea.doFullFit(true);
+        </method>
+        
+        <method name="setWhiteboardValues" args="fullFit,zoom">
+            if ($debug) Debug.write("setWhiteboardValues -1- ",fullFit,zoom);
+            this.ignoreUpdates = true;
+			if ('_zoom' in this) {
+	            this._zoom.setSliderValue(zoom);
+			}
+            this._fullFit.setValue(fullFit);
+            this.ignoreUpdates = false;
+        </method>
+        
+        <method name="setCurrentScaleByFullFit" args="tScale">
+            if ($debug) Debug.write("setCurrentScaleByFullFit -2- ",tScale);
+            this.ignoreUpdates = true;
+			if ('_zoom' in this) {
+	            this._zoom.setSliderValue(tScale);
+			}
+            this.ignoreUpdates = false;
+        </method>
+        
+        <labelCheckbox x="344" name="_fullFit" labelid="847" y="4" fontstyle="bold" bgcolor="0xFFFFFF"
+        		visible="${ ((canvas.becomemoderator) ? true : false ) }">
+            <handler name="onvalue" args="v">
+                if (parent.ignoreUpdates) {
+                    return;
+                }
+                if ($debug) Debug.warn("onvalue Full Fit ",v);
+                
+				if ('_zoom' in parent) {
+                	parent.parent._drawareaMask._drawarea.doUpdateFullFit(v,parent._zoom.initialNumber);
+				}
+            </handler>
+            <labelTooltip labelid="1212" multiline="true" />
+        </labelCheckbox>
+        
+        <changeWidthSlider name="_zoom" initialNumberInit="50" labelid="1328"
+	            boxPosition="down" initialNumber="50" maximum="200">
+            <handler name="oninitialNumber" args="i">
+                if (parent.ignoreUpdates) {
+                    return;
+                }
+                
+                if ($debug) Debug.warn("onvalue Zoom Fit ",this.initialNumber);
+                
+                parent._fullFit.setValue(false);
+				parent.parent._drawareaMask._drawarea.doUpdateZoom(parent._fullFit.getValue(),this.initialNumber);
+            </handler>
+        </changeWidthSlider>
+        
+        <view width="2" />
+        
+    </view>    
+    
+    <propertyPanel name="_propertyPanel" x="0" y="${ parent.parent.height-this.height-42 }" 
+                    visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }">
+        <handler name="onheight" args="h">
+            this.height = h;
+            if ($debug) Debug.write("onheight: ",h);
+            parent.panelArea.sendNewPropertyHeight(this);
+        </handler>
+    </propertyPanel>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
new file mode 100644
index 0000000..81da29d
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="multiWhiteboardPanel" extends="fixedFileExplorerWhiteBoard" y="42" x="1">
+	
+	<attribute name="whiteboardId" value="0" type="number" />
+	<attribute name="objWhiteboard" value="null" />
+	<attribute name="objMessage" value="null" />
+	
+    <handler name="onsharedMessage" args="obj">
+        //Debug.write("send: ",obj);
+        this.objWhiteboard = obj;
+        if (this.sendVarsByWhiteboardId != null){
+        	this.sendVarsByWhiteboardId.doCall();
+        }
+    </handler>
+    
+    <netRemoteCallHib name="sendVarsByWhiteboardId" funcname="sendVarsByWhiteboardId" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objWhiteboard;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+            	//if ($debug) Debug.write("sendVarsByWhiteboardId : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <handler name="onvisible" args="v">
+    	<![CDATA[
+	    	if ($debug) Debug.write("onvisible :: ",v);
+    	]]>
+    </handler>
+    
+    <method name="sendActiveWindow">
+    	if ($debug) Debug.warn("sendActiveWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		if ($debug) Debug.warn("DO sendActiveWindow :: ");
+    		canvas._drawarea = this._drawareaMask._drawarea;
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "activateWhiteboard";
+    		this.objMessage[1] = this.whiteboardId;
+    		this.sendMessageToMembers.doCall();
+    	}
+    </method>
+    
+    <netRemoteCallHib name="sendMessageToMembers" funcname="sendMessageToMembers" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendMessageToMembers :: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+</class>
+    
+<class name="fixedFileExplorerWhiteboardPanel" extends="basePropertyPanelWhiteboard" allowToggle="false"
+	   labelid="615" visible="${((canvas.currentRoomObj.hideWhiteboard) ? false:true)}">
+	<attribute name="whiteboardCount" value="0" type="number" />	
+	<!--
+	
+	 -->
+	<handler name="oninit">
+		canvas._drawarea = this;
+	</handler>
+	
+	<handler name="onopenWhiteBoard" >
+        if ($debug) Debug.write(".. onopenWhiteBoard ..");
+        this.loadInitObject()
+    </handler>
+            
+    <!--
+    	##########################################
+    	Add, remove and change Focus of Whiteboard
+    	##########################################
+     -->
+     
+    <method name="addNewItem">
+    	this.getNewWhiteboardId.doCall();
+    </method>
+    
+    <!--
+    public Long getNewWhiteboardId() {
+     -->
+    <netRemoteCallHib name="getNewWhiteboardId" funcname="whiteboardservice.getNewWhiteboardId"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("############## getNewWhiteboardId : ",value);
+                parent.addNewItemSynced(value);
+                parent.sendNewWindow(value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>       
+    
+    <method name="addNewItemSynced" args="whiteboardId">
+    	for (var eg in this._bar.subviews) {
+    		this._bar.subviews[eg].isactive = false;
+    		this._bar.subviews[eg].onmouseout.sendEvent(null);
+    		this._bar.subviews[eg].objRef.setAttribute("visibility","hidden");
+    	}
+    	
+    	var whiteboard = new lz.multiWhiteboardPanel(this,{
+								    		whiteboardId:whiteboardId
+								    	});
+    	var tempWidth = this._bar.getCurrentSize();
+    	
+    	var whiteboardName = canvas.getLabelName(615) + (whiteboardCount > 0 ? " " + whiteboardCount : "");
+    	whiteboardCount++;
+    	var tWhiteboardBtn = new lz.whiteboardMiniButton(this._bar,{
+                            	   objRef:whiteboard,
+                            	   width:tempWidth,
+                            	   isactive:true,
+                            	   btnName: whiteboardName
+                            	});
+        
+        this._bar.currentBtn = tWhiteboardBtn;                    	
+                            	
+    	tWhiteboardBtn.onmouseout.sendEvent(null);
+        this.addNewItemButton.updatePosition();
+        canvas.whiteboardCount++;
+        return whiteboard;
+    </method>
+    
+    <method name="sendNewWindow" args="whiteboardId">
+    	if ($debug) Debug.warn("sendNewWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		if ($debug) Debug.warn("DO sendActiveWindow :: ");
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "newWhiteboard";
+    		this.objMessage[1] = whiteboardId;
+    		this.sendMessageToMembers.doCall();
+    	}
+    </method>
+    
+    <method name="newWhiteboard" args="obj">
+    	if ($debug) Debug.write("newWhiteboard :: ",obj);
+    	this.addNewItemSynced(obj[1]);
+    </method>
+    
+    
+    <!--
+        ##########################################
+        Removal of Whiteboards
+        ##########################################
+     -->
+    <method name="sendRemoveWindow" args="whiteboardId">
+    	if ($debug) Debug.warn("sendRemoveWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		this.deleteWhiteboard.whiteboardId = whiteboardId;
+    		this.deleteWhiteboard.doCall();
+    		if ($debug) Debug.warn("DO sendRemoveWindow :: ");
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "removeWindow";
+    		this.objMessage[1] = whiteboardId;
+    		this.sendMessageToMembers.doCall();
+	        canvas.whiteboardCount--;
+    	}
+    </method>
+    
+    <!--
+    public Boolean deleteWhiteboard(Long whiteBoardId)
+     -->
+    <netRemoteCallHib name="deleteWhiteboard" funcname="whiteboardservice.deleteWhiteboard"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="whiteboardId" value="0" type="number" />
+        <netparam><method name="getValue">return parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("############## deleteWhiteboard : ", value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>       
+    
+    <method name="removeWindow" args="obj">
+    	if ($debug) Debug.write("removeWindow :: ",obj);
+    	for (var eg in this._bar.subviews) {
+    		
+    		if (this._bar.subviews[eg].objRef.whiteboardId == obj[1]) {
+    			
+    			this._bar.removeObjectSynced(this._bar.subviews[eg]);
+    			return;
+    			
+    		}
+    		
+    	}
+    </method>
+    
+    <netRemoteCallHib name="sendMessageToMembers" funcname="sendMessageToMembers" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendMessageToMembers :: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <method name="sendWatchObjectByWhiteboard" args="obj">
+    	if ($debug) Debug.write("sendWatchObjectByWhiteboard :: ",obj);
+    	for (var eg in this.subviews) {
+    		if (obj.id == this.subviews[eg].whiteboardId) {
+    			this.subviews[eg]._drawareaMask._drawarea.sendWatchObject(obj.param[2],obj.param[3],false);
+    			return;
+    		}
+    	}
+    </method>
+    
+    <method name="loadWmlToWhiteboardById" args="obj">
+        if ($debug) Debug.write("loadWmlToWhiteboardById :: ",obj);
+        for (var eg in this.subviews) {
+            if (obj.id == this.subviews[eg].whiteboardId) {
+                this.subviews[eg]._drawareaMask._drawarea.loadWmlToWhiteboardById(obj.roomitems);
+                return;
+            }
+        }
+    </method>
+    
+    <method name="activateWhiteboard" args="obj">
+    	if ($debug) Debug.write("activateWhiteboard :: ",obj);
+    	for (var eg in this._bar.subviews) {
+    		
+    		if (this._bar.subviews[eg].objRef.whiteboardId == obj[1]) {
+    			
+    			this._bar.subviews[eg].activateSynced();
+    			return;
+    			
+    		}
+    		
+    	}
+    </method>
+    
+    <!--
+    	##########################################
+    	StarUp Loading Of Objects
+    	##########################################
+     -->
+    
+    <method name="loadInitObject">
+    	this.getRoomItemsBy.doCall();
+    </method>
+    
+	<netRemoteCallHib name="getRoomItemsBy" funcname="whiteboardservice.getRoomItemsBy"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("############## getRoomItemsBy : ",value);
+            	parent.loadWhiteboards(value.whiteboardObjects);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>   
+    
+    <method name="loadWhiteboards" args="whiteboardObjects">
+    	<![CDATA[
+    	   if ($debug) Debug.write("whiteboardObjects :: ",whiteboardObjects.length);
+    	   var mainArray = new Array();
+    	   for (var eg in whiteboardObjects) {
+    	   	   mainArray.push(whiteboardObjects[eg]);
+    	   }
+    	   mainArray.reverse();
+    	   
+    	   for (var eg=0;eg<mainArray.length;eg++) {
+    	   	  var whiteBoard = this.addNewItemSynced(mainArray[eg].whiteBoardId);
+    	   	  
+    	   	  whiteBoard._drawareaMask._drawarea.loadObjectList(mainArray[eg]);
+    	   }
+    	]]>
+    </method>
+      
+    
+    <whiteboardBarMenu name="_bar" height="20" y="21">
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    	
+    	<handler name="onsubview" args="newSub">
+    		parent.addNewItemButton.updatePosition();
+    	</handler>
+    	<handler name="onwidth" args="newSub">
+            parent.addNewItemButton.updatePosition();
+        </handler>
+    </whiteboardBarMenu>
+    
+    <view name="addNewItemButton" y="24" 
+    	  visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+    	  >
+    	
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    	
+    	<method name="updatePosition">
+    		if (parent._bar.subviews.length != 0) {
+        		var borderItem = parent._bar.subviews[parent._bar.subviews.length-1];
+        		this.setAttribute("x",borderItem.x + borderItem.width + 2);
+    		} else {
+    			this.setAttribute("x",2);
+    		}
+    	</method>
+    	
+    	<handler name="onmouseover" args="refOb">
+    		this.bg.setAttribute("visibility","visible");
+    	</handler>
+    	
+    	<handler name="onmouseout" args="refOb">
+            this.bg.setAttribute("visibility","hidden");
+        </handler>
+        
+        <handler name="onclick" args="refOb">
+            parent.addNewItem();
+        </handler>
+        
+        <view name="bg" bgcolor="0xEEEEEE" opacity="0.5" 
+        	  width="18" height="18" visibility="hidden" />
+    	
+    	<view resource="add_whiteboard_rsc" y="0" x="0" />
+    	
+    	<labelTooltip labelid="1596" />
+    </view>
+    
+    <view width="${ parent.width }" height="1" y="41"
+    	  bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx b/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx
new file mode 100644
index 0000000..b6d91a0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx
@@ -0,0 +1,519 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<include href="utils/states/resizestatemin.lzx"/>
+
+<!--
+    The order of views is important in this class
+    otherwise the scrollbar of the swfPresentation would be not visible or partly overlayed
+    
+    
+    this is the selection Box for all Whiteboard Objects
+ -->
+ 
+<class name="boundingBoxAllRotationMarger" extends="view" 
+	   width="24" height="24" resource="bounding_item_rsc">
+	
+	<attribute name="dragStarted" value="false" type="boolean"/>
+	
+	<handler name="onmouseover">
+        lz.Cursor.setCursorGlobal("arrow_rotate_panel_cursor");
+    </handler>
+    <handler name="onmouseout">
+        lz.Cursor.unlock();
+    </handler>
+    
+    <handler name="onx" args="x">
+    	this.doMoveDragPoint();
+    </handler>
+    <handler name="ony" args="y">
+        this.doMoveDragPoint();
+    </handler>
+    
+    <method name="doMoveDragPoint">
+    	if (!this.dragStarted) {
+    		return;
+    	}
+    	parent.doMoveDragPoint(this.x+12,this.y+12);
+    </method>
+    
+    <handler name="onmousedown">
+    	this.dragStarted = true;
+    	parent.doStartDragPoint();
+        this.dragger.apply();
+    </handler>
+    <handler name="onmouseup">
+    	this.dragStarted = false;
+        this.dragger.remove();
+        parent.endDrawClipArtDrag();
+        lz.Cursor.unlock();
+    </handler>
+    
+    <dragstate name="dragger" />  
+    
+</class> 
+    
+<class name="boundingBoxAll" extends="view" focusable="true">
+    
+<!-- 
+	<method name="removeIt">
+		canvas._drawarea.setAttribute('boundingIsActive',true);
+	</method>
+ -->	
+	<method name="removeIt">
+		//Debug.write("removeIt +**********",this.isinited);
+		this.whiteboardRef.setAttribute('boundingIsActive',false);
+		if (this.rs) this.rs.remove();
+		if (this.dragger) this.dragger.remove();
+		this.destroy();
+	</method>
+
+	<attribute name="ex" value="0" type="number" />
+	<attribute name="ey" value="0" type="number" />
+	<attribute name="ewidth" value="0" type="number" />
+	<attribute name="eheight" value="0" type="number" />
+	
+	<attribute name="innerInsetScrollbars" value="0" type="number"/>
+	
+	<attribute name="startdragX" value="0" type="number" />
+	<attribute name="startdragY" value="0" type="number" />
+	<attribute name="startdragWidth" value="0" type="number" />
+	<attribute name="startdragHeight" value="0" type="number" />
+	
+	<attribute name="objRef" value="null" />
+	<attribute name="whiteboardRef" value="null" />
+	<attribute name="doHandlerUpdates" value="false" type="boolean" />	
+    <attribute name="boundingDoUpdateOnInit" value="true" type="boolean" />	 
+    
+    <attribute name="canBeDragged" value="true" type="boolean" />
+    <attribute name="canBeResized" value="true" type="boolean" />
+    
+    <!--- Minimum width for the windowy, default: 60.
+          @keywords final -->
+    <attribute name="minwidth" value="2"/>
+
+    <!--- Minimum height for the window, default: 50.
+          @keywords final -->
+    <attribute name="minheight" value="2"/>    
+	
+	<method name="__LZRemoveItem" args="itemRef">
+		this.whiteboardRef.deleteItemByName(this.objRef.name);
+		//Debug.write("__LZRemoveItem");
+	</method>
+	
+	<handler name="oninit">
+		<![CDATA[
+		    if (!this.boundingDoUpdateOnInit) {
+		    	if ($debug) Debug.write("DESTROY the clickable view");
+		    	//this._innerDrag.destroy();
+		    }
+		    
+		    if (!this.canBeResized) {
+		    	this._gripperNoResize.setAttribute("visibility","visible");
+		    	this._gripperResize.setAttribute("visibility","hidden");
+		    }
+		
+			this.setAttribute('x',this.ex);
+			this.setAttribute('y',this.ey);
+			this.setAttribute('width',this.ewidth);
+			this.setAttribute('height',this.eheight);	
+			this.setStartValues();		
+			if ($debug) Debug.write("Update Property Panel Settings to Object Properties ",this.objRef.name);
+			
+			lz.Focus.setFocus(this, false); 
+			
+			if (this.objRef.typeOfObject == "text") {
+				this._editText.setAttribute("visibility","visible");
+			}
+			
+            //FIXME - Add Ellipse, Line and Free Draw Tool to it
+            if (this.objRef.name.indexOf('rectangle') >= 0){
+				if ($debug) Debug.write("this.objRef._innerRect ",this.objRef._innerRect);
+				
+				if ($debug) Debug.write("strokeStyle: ",this.objRef._innerRect.strokeStyle);
+				if (this.objRef._innerRect.strokeStyle == '#000000') {
+					if ($debug) Debug.write("strokeStyle EMPTY ");
+					this.whiteboardRef.currentrectanglestrokeDis = -1;
+				} else {
+					this.whiteboardRef.currentrectanglestroke = this.objRef._innerRect.strokeStyle;
+					this.whiteboardRef.currentrectanglestrokeDis = 1;
+				}
+				
+				if ($debug) Debug.write("fillStyle: ",this.objRef._innerRect.fillStyle);
+				if (this.objRef._innerRect.fillStyle == '#000000') {
+					if ($debug) Debug.write("fillStyle EMPTY ");
+					this.whiteboardRef.currentrectanglestrokeFillDis = -1;
+				} else {
+					this.whiteboardRef.currentrectanglestrokeFill = this.objRef._innerRect.fillStyle;
+					this.whiteboardRef.currentrectanglestrokeFillDis = 1;
+				}
+				
+				if ($debug) Debug.write("lineWidth: ",this.objRef._innerRect.lineWidth);
+				this.whiteboardRef.currentrectangleineWidth = this.objRef._innerRect.lineWidth;
+				
+			} else if (this.objRef.name.indexOf('swf') >= 0) {
+                this.setAttribute("innerInsetScrollbars",16);
+            } else if (this.objRef.name.indexOf('clipart') >= 0) {
+            	this.canBeResized = false;
+            	this._gripperNoResize.setAttribute("visibility","visible");
+		    	this._gripperResize.setAttribute("visibility","hidden");
+            	
+            	new lz.boundingBoxAllRotationMarger(this,{
+                    	       x:this.objRef.clipart.clipArtEndx-12,
+                    	       y:this.objRef.clipart.clipArtEndy-12
+                        	});
+            	
+            }
+            
+            
+            this.whiteboardRef.parent.parent._propertyPanel.loadPanelByBoundingBox(this.whiteboardRef,this.objRef);
+            
+			this.doUpdateAction();
+		]]>
+	</handler>
+	
+	<method name="doStartDragPoint">
+		this.whiteboardRef.setStartPoint(this.objRef.clipart.x+this.x,this.objRef.clipart.y+this.y);
+	</method>
+	
+	<method name="doMoveDragPoint" args="x,y">
+		this.whiteboardRef.trackDrawClipArtDraw(this.x+x,this.y+y,this.objRef.clipart);
+	</method>
+	
+	<method name="endDrawClipArtDrag">
+        this.whiteboardRef.endDrawClipArtDrag(this.objRef);
+        this.whiteboardRef.reselectShowObjectBounds(this.objRef.name);
+    </method>
+    
+	<!--
+	   Do update the Selection-Box, in case another Moderator or User has moved the Object
+	   while you have it in focus
+	 -->
+    <method name="sendRemoteUpdate" args="obj">
+        <![CDATA[
+           
+           if (this.objRef.name == obj.name) {
+           	   
+           	    this.resetValues();
+           	
+           }
+        
+        ]]>
+    </method>
+    
+	
+	<method name="resetValues">
+		this.ex = this.objRef.x;
+		this.ey = this.objRef.y;
+		this.ewidth = this.objRef.width;
+		this.eheight = this.objRef.height;			
+		this.setAttribute('x',this.objRef.x);
+		this.setAttribute('y',this.objRef.y);
+		this.setAttribute('width',this.objRef.width);
+		this.setAttribute('height',this.objRef.height);	
+		this.setStartValues();	
+	</method>
+
+    <method name="doUpdateAction" >
+    	this.setAttribute('doHandlerUpdates',true);
+    	if (this.boundingDoUpdateOnInit) {
+    	    this._innerDrag.onmousedown.sendEvent();
+    	}
+    </method>
+    
+    <handler name="onheight">
+    	if(this.doHandlerUpdates){
+    		this.objRef.setAttribute('height',this.height);
+    	}
+    </handler>
+    
+    <handler name="onwidth">
+    	if(this.doHandlerUpdates){
+    		this.objRef.setAttribute('width',this.width);
+    	}
+    </handler>
+    
+    <handler name="onx">
+        if(this.doHandlerUpdates){
+            
+            var tx = this.getAttributeRelative('x',objRef);
+        
+            if(this.objRef.parent.isSnapToGrid){   
+                tx = Math.round(tx/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth;
+                this.setAttribute("x",Math.round(this.x/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth)
+            }
+            
+            this.objRef.setAttribute('x',tx);
+        }
+    </handler>
+    
+    <handler name="ony">
+        if(this.doHandlerUpdates){
+            
+            var ty = this.getAttributeRelative('y',objRef);
+        
+            if(this.objRef.parent.isSnapToGrid){   
+                ty = Math.round(ty/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth;
+                this.setAttribute("y",Math.round(this.y/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth)
+            }
+            
+            this.objRef.setAttribute('y',ty);
+        }
+    </handler>
+    
+    <handler name="onkeydown" args="key">
+        if ($debug) Debug.write("onkeydown ",key);
+
+        //this.objRef.parent.UpdateByObject(this.objRef);
+
+        if (key == 46) {
+        	this.__LZRemoveItem(this.objRef);
+        } else if (key == 40) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	if ($debug) Debug.write("shiftPressed ",shiftPressed);
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("y",this.y+(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 38) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("y",this.y-(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 39) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("x",this.x+(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 37) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("x",this.x-(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        }
+    </handler>
+	
+	<method name="setStartValues">
+		this.startdragX = this.x;
+		this.startdragY = this.y;
+		this.startdragWidth = this.width;
+		this.startdragHeight = this.height;			
+	</method>
+
+    <method name="_applyResizestateFromThis">
+    	lz.Focus.setFocus(this, true); 
+    	if ($debug) Debug.write("Apply resize State");
+    	if (!this.canBeResized) {
+            return;
+        }
+		this.setStartValues();		
+		this.rs.apply()
+	</method>
+    
+    <method name="_removeResizestateFromThis">
+		<![CDATA[
+		if (!this.canBeResized) {
+            return;
+        }
+    	this.rs.remove();
+		
+		if (this.startdragX != this.x || this.startdragY != this.y || this.startdragWidth != this.width || this.startdragHeight != this.height){
+			//Debug.write("value changed 1");
+			this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+		}
+		if (parent.onBoundingBox) parent.onBoundingBox.sendEvent(this);
+			
+		]]>
+    </method>
+	
+	<method name="_applyDragstateFromThis">
+		lz.Focus.setFocus(this, true); 
+		if (!this.canBeDragged) {
+			return;
+		}
+		this.setStartValues();
+		this.dragger.apply()
+	</method>	
+    
+    <method name="_removeDragstateFromThis">
+		<![CDATA[
+		if (!this.canBeDragged) {
+            return;
+        }
+    	this.dragger.remove();
+		
+    	if (this.startdragX != this.x || this.startdragY != this.y || this.startdragWidth != this.width || this.startdragHeight != this.height){
+			//Debug.write("value changed 2");
+			this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+		}
+		if (parent.onBoundingBox) parent.onBoundingBox.sendEvent(this);
+		
+		]]>			
+    </method>
+
+    <method name="doSetInnerObjectsBounds" args="w,h">
+        this._inner._inner.setAttribute('width',w);
+        this._inner._inner.setAttribute('height',h);
+    </method>
+    
+    <method name="applyScrollbarToObject">
+        <![CDATA[
+            //if ($debug) Debug.write("-- applyScrollbarToObject --",this.objRef.typeOfObject);
+	        if (this.objRef.typeOfObject == 'swf'){
+	            if (canvas.ismoderator || canvas.isAllowedToDraw) {
+                    //if ($debug) Debug.write("-- setCurrentMouseWheelObject --",this.objRef._scrollstv);
+                    //setCurrentMouseWheelObject(this.objRef._scrollstv);
+                }
+	        }
+        ]]>
+    </method>
+    
+    <method name="removeScrollbarToObject">
+        if (this.objRef.typeOfObject == 'swf'){
+            //Well disable, you can always disable without any problem
+            //and in case you do exactly switch the moderation now
+            //it will remove it in any case
+            disableCurrentMouseWheelObject();
+        }
+    </method>
+        
+    <resizestatemin name="rs"> 	
+    	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+    </resizestatemin>
+    
+   	<dragstate name="dragger">    
+		<text x="2" y="2" text="${ 'x: '+parent.getAttributeRelative('x',parent.objRef)+' y: '+parent.getAttributeRelative('y',parent.objRef) }" bgcolor="white"/>   	
+   	</dragstate>
+	
+	<view name="_innerDrag" width="${ parent.width-parent.innerInsetScrollbars }" 
+		  height="${ parent.height-parent.innerInsetScrollbars }" 
+		  onmouseover="parent.applyScrollbarToObject()" 
+          onmouseout="parent.removeScrollbarToObject()"
+		  onmousedown="parent._applyDragstateFromThis()" 
+    	  onmouseup="parent._removeDragstateFromThis()">
+    	
+    	<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(80) }" 
+							 onselect="parent.parent.parent.__LZRemoveItem()" />
+        </contextmenu>
+		 
+		<handler name="ondblclick">
+
+			//Debug.write("ondblclick: ",this.parent.objRef.typeOfObject);
+			if (this.parent.objRef.typeOfObject == "text") {
+				var x = this.parent.objRef.x; //this.parent.objRef.getAttributeRelative('x', canvas);
+				var y = this.parent.objRef.y; //this.parent.objRef.getAttributeRelative('y', canvas);
+				//Debug.write("x,y ",x,y);
+				this.parent.whiteboardRef
+						.editTextByValues(this.parent.objRef,
+								this.parent.objRef.name,
+								this.parent.objRef.text, x, y,
+								this.parent.objRef.width,
+								this.parent.objRef.height);
+			}
+		</handler>	
+		
+		<handler name="onmouseover">
+			if (this.parent.objRef.typeOfObject != "swf") {
+	           lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+			}
+		</handler>
+		
+		<handler name="onmouseout">
+			lz.Cursor.unlock();
+		</handler>
+		
+		
+	</view>
+	
+	<image src="$once{ canvas.getThemeImage('bounding_box_textedit_item_rsc') }" y="2"  width="16" height="16" stretches="both"
+				name="_editText" visibility="hidden" x="${ parent.width-this.width-parent.innerInsetScrollbars-18 }" >
+		<handler name="onclick">
+			this.parent.whiteboardRef
+						.editTextByValues(this.parent.objRef,
+								this.parent.objRef.name,
+								this.parent.objRef.text, 
+								this.parent.x, 
+								this.parent.y,
+								this.parent.objRef.width,
+								this.parent.objRef.height);
+		</handler>
+		<handler name="onmouseover">
+	        lz.Cursor.restoreCursor();
+	        lz.Cursor.showHandCursor(true);
+	    </handler>
+	    <handler name="onmouseout">
+	    	lz.Cursor.showHandCursor(false);
+	        lz.Cursor.unlock();
+	    </handler>
+    
+		<labelTooltip labelid="1463" />
+	</image>	
+	
+	<image src="$once{ canvas.getThemeImage('bounding_box_delete_item_rsc') }" y="2"  width="16" height="16"
+					x="${ parent.width-this.width-parent.innerInsetScrollbars-2 }" stretches="both">
+		<handler name="onclick">
+			//Debug.write("this.parent.objRef.name: ",this.parent.objRef.name);
+			//this.parent.whiteboardRef.deleteItemByName(this.parent.objRef.name);
+			parent.__LZRemoveItem(this.parent.objRef);
+		</handler>
+		<handler name="onmouseover">
+	        lz.Cursor.restoreCursor();
+	        lz.Cursor.showHandCursor(true);
+	    </handler>
+	    <handler name="onmouseout">
+	    	lz.Cursor.showHandCursor(false);
+	        lz.Cursor.unlock();
+	    </handler>
+    
+		<labelTooltip labelid="80" />
+	</image>	    
+    
+    <view resource="_boundingBoxPointerTL" x="0" y="0" />
+    <view resource="_boundingBoxPointerTR" x="${ parent.width-this.width }" y="0" />
+    <view name="_gripperResize" visibility="visible"
+        resource="_boundingBoxPointerUR" x="${ parent.width-this.width }" y="${ parent.height-this.height }" 
+        onmousedown="parent._applyResizestateFromThis()" onmouseup="parent._removeResizestateFromThis()" >
+    	<handler name="onmouseover">
+	        lz.Cursor.setCursorGlobal("arrow_resize_panel_cursor");
+	    </handler>
+	    <handler name="onmouseout">
+	        lz.Cursor.unlock();
+	    </handler>
+        <labelTooltip labelid="252" />
+    </view>
+    <view name="_gripperNoResize" visibility="hidden" 
+        resource="_boundingBoxPointerURNoGripper" x="${ parent.width-this.width }" y="${ parent.height-this.height }" />
+    <view resource="_boundingBoxPointerUL" x="0" y="${ parent.height-this.height }" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/library.lzx b/WebContent/src/modules/conference/whiteboard/helper/library.lzx
new file mode 100644
index 0000000..04b6215
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL author sebawagner -->
+	<resource name="bounding_item_rsc" src="resources/bounding_item.png" />
+
+    <include href="boundingBoxAll.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla
new file mode 100644
index 0000000..23ecab3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png
new file mode 100644
index 0000000..638f9d4
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/library.lzx b/WebContent/src/modules/conference/whiteboard/library.lzx
new file mode 100644
index 0000000..95beb27
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/library.lzx
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerTR" src="resources/boundingBoxTR.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerTL" src="resources/boundingBoxTL.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerUR" src="resources/boundingBoxUR.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerURNoGripper" src="resources/boundingBoxULNoGripper.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerUL" src="resources/boundingBoxUL.png" />
+	<!-- APL author sebawagner -->
+	<resource name="pointer_whiteboard_rsc" src="resources/pointer.swf" />
+	<!-- FamFam Icon Set -->
+	<resource name="bold" src="resources/text_bold.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="italic" src="resources/text_italic.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="add_whiteboard_rsc" src="resources/add.png" />
+	
+	<include href="incubator/lzcombobox.lzx"/> 
+	<include href="base/" />
+	<include href="windows/" />
+	<include href="helper/" />
+	
+	<include href="panels/" />
+	
+	<include href="basePropertyPanelWhiteboard.lzx" />
+    <include href="fixedFileExplorerWhiteBoard.lzx" />
+    <include href="fixedFileExplorerWhiteboardPanel.lzx" />
+    <include href="whiteboardMiniButton.lzx" />
+    <include href="whiteboardBarMenu.lzx" />
+
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/library.lzx
new file mode 100644
index 0000000..7c30379
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="maintoolspanel/" />
+	<include href="propertypanel" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx
new file mode 100644
index 0000000..b18b8fa
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!--  APL author sebawagner -->
+    <resource name="sub_menu_tools_panel_rsc" src="resources/sub_menu.png" />
+    <!--  APL author sebawagner -->
+    <resource name="sub_menu_top_grip_colored_rsc" src="resources/sub_menu_top_grip.swf" />	
+    
+    <!--
+        How to create image map:
+        $imageMagick/montage *.png -tile 20x -geometry 22x22+2+2 all_images.jpg
+     -->
+
+	<include href="mainToolsPanelItem.lzx" />  
+	<include href="mainToolsPanel.lzx" />  
+	<include href="subMenuIconToolsToUpload.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx
new file mode 100644
index 0000000..8188076
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="verticalMenuIconBar" extends="view" y="22" x="4" clickable="true">
+	<simplelayout axis="y" spacing="2" />
+	<mainToolsPanelItem name="plain" modi="plainConfirm" labelid="69" resourceItem="plain" setSelectionToItem="false" />
+	<mainToolsPanelItem name="plainSlide" modi="plainSlide" labelid="1005" resourceItem="plainSlides" setSelectionToItem="false" />
+	
+	<!--
+	<mainToolsPanelItem name="drag" modi="drag" labelid="1113" resourceItem="arrow_draw_panel_tool_cursor" />
+	 -->
+
+	<mainToolsPanelItem name="saveobj" modi="saveobj" labelid="197" resourceItem="saveobj" setSelectionToItem="false" />
+	
+	<mainToolsHPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsHPanelSeperator>
+	<redoUndoToolsPanelItem name="revert" doredo="false" labelid="70" resourceItem="revert" />
+	<mainToolsHPanelSeperator>
+		<attribute name="modi" value="" type="string"/>
+	</mainToolsHPanelSeperator>
+	<mainToolsPanelItem name="hand" modi="hand" labelid="72" _isselected="true" 
+						resourceItem="menupointer_rsc" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" 
+                        labelid="557" x_insetResource="1" y_insetResource="1"
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+	<mainToolsPanelItem name="letter" modi="letter" labelid="73" resourceItem="letter" />
+	<mainToolsPanelItem name="paint" modi="paint" labelid="74" resourceItem="paint" />
+	<mainToolsPanelItem name="line" modi="line" labelid="75" resourceItem="line_rsc" />
+	<mainToolsPanelItem name="uline" modi="uline" labelid="76" resourceItem="uline_rsc" />
+	<mainToolsPanelItem name="rectangle" modi="rectangle" labelid="77" resourceItem="rectangle" />
+	<mainToolsPanelItem name="ellipse" modi="ellipse" labelid="78" resourceItem="ellipse" />
+	<mainToolsPanelItem name="drawarrow" modi="drawarrow" labelid="79" resourceItem="drawarrowicon_rsc" />
+
+    <mainToolsPanelItem name="clipart" modi="clipart" labelid="1323" >
+        
+        <handler name="oninit">
+            this._bgIcon.setAttribute("visibility","hidden");
+            var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'
+                                           + canvas._drawarea.currentClipArtRessourceName;
+            
+            this._rscIcon.setSource(imageurl);
+        </handler>
+        
+        <!--
+        <view x="$once{ parent.x_insetResource }" y="$once{ parent.x_insetResource }" 
+              height="18" width="18" stretches="both" name="_bgIconIcon" />      
+         -->
+              
+        <view resource="sub_menu_tools_panel_rsc"
+              x="$once{ parent.width - 10 }" y="$once{ parent.height - 10 }">
+            <handler name="onclick">
+            	<![CDATA[
+                if ($debug) Debug.write("Show Sub Menu");
+                new lz.subMenuIconToolsToUpload(canvas,{
+                                x:500,
+                                y:82,
+                                refToolbar:parent
+                            });
+                ]]>
+            </handler>
+            <labelTooltip labelid="1335" />
+        </view>
+        
+    </mainToolsPanelItem>
+
+</class>
+
+<class name="horizontalMenuIconBar" extends="view" y="22" x="4" clickable="true">
+	<simplelayout axis="x" spacing="2" />
+	<mainToolsPanelItem name="plain" modi="plainConfirm" labelid="69" resourceItem="plain" setSelectionToItem="false" />
+	<mainToolsPanelItem name="plainSlide" modi="plainSlide" labelid="1005" resourceItem="plainSlides" setSelectionToItem="false" />
+	<!--
+	<mainToolsPanelItem name="drag" modi="drag" labelid="1113" resourceItem="arrow_draw_panel_tool_cursor" />
+     -->
+	<mainToolsPanelItem name="saveobj" modi="saveobj" labelid="197" resourceItem="saveobj" setSelectionToItem="false" />
+	
+	<mainToolsVPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsVPanelSeperator>
+	<redoUndoToolsPanelItem name="revert" doredo="false" labelid="70" resourceItem="revert" />
+	<mainToolsVPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsVPanelSeperator>	
+	<mainToolsPanelItem name="hand" modi="hand" labelid="72" _isselected="true" 
+						resourceItem="menupointer_rsc" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" 
+                        labelid="557" resourceItem="pointer_whiteboard_menu_rsc" />
+	<mainToolsPanelItem name="letter" modi="letter" labelid="73" resourceItem="letter" />
+	<mainToolsPanelItem name="paint" modi="paint" labelid="74" resourceItem="paint" />
+	<mainToolsPanelItem name="line" modi="line" labelid="75" resourceItem="line_rsc" />
+	<mainToolsPanelItem name="uline" modi="uline" labelid="76" resourceItem="uline_rsc" />
+	<mainToolsPanelItem name="rectangle" modi="rectangle" labelid="77" resourceItem="rectangle" />
+	<mainToolsPanelItem name="ellipse" modi="ellipse" labelid="78" resourceItem="ellipse" />
+	<mainToolsPanelItem name="drawarrow" modi="drawarrow" labelid="79" resourceItem="drawarrowicon_rsc" />
+	<mainToolsPanelItem name="clipart" modi="clipart" labelid="1323" >
+        
+        <handler name="oninit">
+            if (this["_bgIcon"]) {
+        	   this._bgIcon.setAttribute("visibility","hidden");
+        	}
+            var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'
+                                           + canvas._drawarea.currentClipArtRessourceName;
+            
+            this._rscIcon.setSource(imageurl);
+        </handler>
+        
+        <view x="$once{ parent.x_insetResource }" y="$once{ parent.x_insetResource }" 
+              height="18" width="18" stretches="both" name="_bgIconIcon" />      
+        
+        <view resource="sub_menu_tools_panel_rsc"
+              x="$once{ parent.width - 10 }" y="$once{ parent.height - 10 }">
+            <handler name="onclick">
+                if ($debug) Debug.write("Show Sub Menu");
+                new lz.subMenuIconToolsToUpload(canvas,{
+                                x:500,
+                                y:82,
+                                refToolbar:parent
+                            });
+            </handler>
+            <labelTooltip labelid="1335" />
+        </view>
+        
+    </mainToolsPanelItem>
+</class>
+
+
+<class name="mainToolsTopPanel" extends="baseTopPanel" 
+	   width="420" height="33" title="" docking="true"
+	   activationClassBounding="mainToolsLeftPanel"
+	   activationVClassBounding="mainToolsTopPanel"
+	   leftClassPanel="mainToolsLeftPanel"
+	   topClassPanel="mainToolsTopPanel"
+	   bottomClassPanel="mainToolsTopPanel"
+	   rightClassPanel="mainToolsLeftPanel"
+	   verticalClassActive="true"
+	   hWidth="33" hHeight="420">
+	
+    <method name="updateToolSelection" args="modi">
+    	<![CDATA[
+            if ($debug) Debug.write("-updateToolSelection-  ",modi);
+            
+            for (var i=0;i<this._tools.subviews.length;i++){
+                
+            	if (this._tools.subviews[i].modi == modi) {
+            		
+            		this._tools.subviews[i].setSelectionWithoutEvent();
+            		return;
+            	}
+            	
+            }
+            
+        ]]>
+    </method>
+    
+	<horizontalMenuIconBar name="_tools" x="20" y="4" />
+</class>	
+	
+<class name="mainToolsLeftPanel" extends="baseLeftPanel" 
+	   width="33" height="420" title="" docking="true"
+	   activationClassBounding="mainToolsLeftPanel"
+	   activationVClassBounding="mainToolsTopPanel"
+	   topClassPanel="mainToolsTopPanel"
+	   bottomClassPanel="mainToolsTopPanel"
+	   leftClassPanel="mainToolsLeftPanel"
+	   rightClassPanel="mainToolsLeftPanel"
+	   verticalClassActive="false"
+	   vWidth="420" vHeight="33">
+	
+    <method name="updateToolSelection" args="modi">
+        <![CDATA[
+            if ($debug) Debug.write("-updateToolSelection-  ",modi);
+            
+            for (var i=0;i<this._tools.subviews.length;i++){
+                
+                if (this._tools.subviews[i].modi == modi) {
+                    
+                    this._tools.subviews[i].setSelectionWithoutEvent();
+                    return;
+                }
+                
+            }
+            
+        ]]>
+    </method>	
+	
+	<verticalMenuIconBar name="_tools" x="3" y="20" />
+</class>
+
+<!-- ################
+    Non Moderator Tools
+-->
+
+<class name="verticalMenuIconBarPointer" extends="view" y="22" x="4" clickable="true">
+    <simplelayout axis="y" spacing="2" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" labelid="557" 
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+</class>
+
+<class name="horizontalMenuIconBarPointer" extends="view" y="22" x="4" clickable="true">
+    <simplelayout axis="x" spacing="2" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" labelid="557" 
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+</class>
+
+<class name="mainToolsTopPanelPointer" extends="baseTopPanel" 
+       width="52" height="32" title="" docking="true"
+       activationClassBounding="mainToolsLeftPanelPointer"
+       activationVClassBounding="mainToolsTopPanelPointer"
+       leftClassPanel="mainToolsLeftPanelPointer"
+       topClassPanel="mainToolsTopPanelPointer"
+       bottomClassPanel="mainToolsTopPanelPointer"
+       rightClassPanel="mainToolsLeftPanelPointer"
+       verticalClassActive="true"
+       hWidth="32" hHeight="52">
+    
+    <horizontalMenuIconBarPointer x="20" y="4" />
+</class>    
+
+<class name="mainToolsLeftPanelPointer" extends="baseLeftPanel" 
+       width="32" height="52" title="" docking="true"
+       activationClassBounding="mainToolsLeftPanelPointer"
+       activationVClassBounding="mainToolsTopPanelPointer"
+       topClassPanel="mainToolsTopPanelPointer"
+       bottomClassPanel="mainToolsTopPanelPointer"
+       leftClassPanel="mainToolsLeftPanelPointer"
+       rightClassPanel="mainToolsLeftPanelPointer"
+       verticalClassActive="false"
+       vWidth="52" vHeight="32">
+    
+    <verticalMenuIconBarPointer x="2" y="20" />
+</class>	
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx
new file mode 100644
index 0000000..565c710
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+<class name="mainToolsPanelItem" extends="blueButton" 
+	   width="26" height="26">
+	
+	<attribute name="modi" value="" type="string" />
+	<attribute name="labelid" value="0" type="number" />
+	
+	<attribute name="setSelectionToItem" value="true" type="boolean" />
+	<attribute name="_isselected" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		if (this._isselected) parent.parent.parent.setSelection(this);
+	</handler>
+	
+	<method name="setSelectionWithoutEvent">
+        parent.parent.parent.setSelectionWithoutEvent(this);
+    </method>
+	
+	<handler name="onmouseup">
+		//if ($debug) Debug.write("parent.parent.parent",parent.parent.parent);
+		parent.parent.parent.setSelection(this);
+	</handler>
+	<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
+</class>
+
+<class name="redoUndoToolsPanelItem" extends="mainToolsPanelItem" setSelectionToItem="false">
+	<attribute name="doredo" value="true" type="boolean" />
+	<handler name="onclick">	  
+          if(this.doredo){
+            this.parent.parent.parent.parent._drawareaMask._drawarea.doredo();
+          } else {
+            this.parent.parent.parent.parent._drawareaMask._drawarea.undoredo();
+          }
+        </handler>
+</class>
+
+<class name="mainToolsHPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+	   width="26" height="1" ></class>
+	   
+<class name="mainToolsVPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+	   width="1" height="26" ></class>
+
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla
new file mode 100644
index 0000000..cb6f4f5
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png
new file mode 100644
index 0000000..e189bc9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla
new file mode 100644
index 0000000..64344b2
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf
new file mode 100644
index 0000000..01de566
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx
new file mode 100644
index 0000000..e154f51
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="miniIconSmybolExtraIcons" extends="view" width="22" height="22">
+	
+	<attribute name="modi" value="" type="string"/>
+	
+	<handler name="onclick">
+		parent.sendNewIcon(this,"");
+	</handler>
+	
+	<handler name="ondblclick">
+		parent.sendNewIcon(this,"");
+		parent.chooseSelect();
+	</handler>
+	
+	<labelTooltip text="$once{ parent.modi }" />
+	
+</class>
+
+<class name="miniIconSmybolExtraIconsImageMap" extends="view" >
+    
+    <handler name="onclick">
+        parent.parent.sendImageMapNewIcon(this);
+    </handler>
+    
+    <handler name="ondblclick">
+        parent.parent.sendImageMapNewIcon(this);
+        parent.chooseSelect();
+    </handler>
+    
+    <handler name="onmouseover" args="tObj">
+    	parent.onmouseover.sendEvent(tObj);
+    </handler>
+    
+    <handler name="onmouseout" args="tObj">
+    	parent.onmouseout.sendEvent(tObj);
+	</handler>
+    
+</class>
+
+<class name="miniIconSmybolExtraIconsSeparator" extends="view" width="$once{ parent.width }" 
+	   height="22">
+	
+	<attribute name="title" type="string" value="title" />
+	
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<method name="toggleopen">
+		this.setAttribute("isopen",!this.isopen);
+	</method>
+	
+	<handler name="onclick">
+		this.toggleopen();
+	</handler>
+	
+	<view width="${ this.parent.parent.width }" y="0" stretches="width"
+                resource="presenter_thumb_rsc" >
+        <handler name="oninit">
+            <![CDATA[
+                this.setTintRGB(canvas.getThemeColor('basebgcolorizer'),90);
+            ]]>
+        </handler>
+        <method name="setTintRGB" args="color, brightness">
+            <![CDATA[
+            if (color != "" && color != null){
+                
+                if (brightness == null) { brightness = 0; }
+                var rgb = color;
+                var red=(rgb >> 16) & 0xFF;
+                var green=(rgb >> 8) & 0xFF;
+                var blue=rgb & 0xFF;
+    
+                this.setColorTransform( { ra : red, ga : green, ba : blue,
+                                            rb : 0, gb : 0, bb : 0 } );
+                                            
+                if($debug) Debug.write("explorerBox/setTintRGB",this);
+                if($debug) Debug.write("explorerBox/setTintRGB", { ra : red, ga : green, ba : blue, rb : 0, gb : 0, bb : 0 } );
+            }
+            ]]>
+        </method>            
+    </view>	
+    
+    <view visible="${ !this.parent.isopen }" x="2" y="2" resource="conferenceBox_button_min_small_rsc" />
+    <view visible="${ this.parent.isopen }" x="2" y="2" resource="conferenceBox_button_max_small_rsc" />
+
+    <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.title }" 
+            fgcolor="0xFFFFFF" resize="true" />
+            
+</class>
+
+<class name="miniIconSmybolExtraIconsContainer" extends="text" width="$once{ parent.width }">
+	
+	<attribute name="fName" value="" type="string"/>
+	<attribute name="folderName" value="" type="string"/>
+	<attribute name="iconList" value="null"/>
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<method name="sendNewIcon" args="tObj">
+        parent.sendNewIcon(tObj,this.folderName);
+    </method>
+    
+    <method name="calcImageMapNewIcon">
+    	var tX = Math.floor(this._content.getMouse('x')/26);
+    	var tY = Math.floor(this._content.getMouse('y')/26);
+    	
+    	var tNumber = tX + (tY * 20);
+    	
+    	if (tNumber > this.iconList.length) {
+    		return "";
+    	}
+    	
+    	return this.iconList[tNumber];
+    </method>
+    
+    <method name="sendImageMapNewIcon">
+        var tObj = new Object();
+        tObj["modi"] = this.calcImageMapNewIcon();
+        if (tObj["modi"] == "") {
+        	return;
+        }
+        this._content.clearToolTipReference();
+        parent.sendNewIcon(tObj,this.folderName);
+    </method>
+    
+    <method name="chooseSelect">
+    	this._content.clearToolTipReference();
+        parent.chooseSelect();
+    </method>
+
+	
+	<miniIconSmybolExtraIconsSeparator title="$once{ parent.fName }" isopen="$once{ parent.isopen }">
+		<handler name="onisopen" args="o">
+			if (o) {
+				parent._content.setAttribute("visibility","visible");
+			} else {
+				parent._content.setAttribute("visibility","hidden");
+			}
+		</handler>
+	</miniIconSmybolExtraIconsSeparator>
+	
+	<view name="_content" y="22" width="$once{ parent.width }">
+		
+		<attribute name="calcItem" value="false" type="boolean" />
+		
+		<attribute name="toolTipReference" value="null" />
+		
+		<method name="clearToolTipReference">
+			if (this.toolTipReference != null) {
+				this.toolTipReference.destroy();
+				this.toolTipReference = null;
+			}
+		</method>
+		
+		<handler name="onmouseover">
+			this.stillDownDelegate = new LzDelegate( this, "stillDownEventGenerator" );
+			this.calcItem = true;
+			this.toolTipReference = new lz.toolTipCustomPic(canvas);
+			lz.Timer.addTimer( this.stillDownDelegate, 100 );
+		</handler>
+		
+		<method name="stillDownEventGenerator" args="ignore" >
+			if (!this.calcItem) {
+				return;
+			}
+			var tString = parent.calcImageMapNewIcon();
+			this.toolTipReference.setAttribute("x", this.getAttributeRelative("x",canvas)+this.getMouse("x")+20);
+			this.toolTipReference.setAttribute("y", this.getAttributeRelative("y",canvas)+this.getMouse("y")+20);
+			this.toolTipReference.setAttribute("text", tString);
+			lz.Timer.removeTimer( this.stillDownDelegate );
+			lz.Timer.addTimer( this.stillDownDelegate, 100 );
+		</method>
+		
+		<handler name="onmouseout">
+			this.clearToolTipReference();
+			lz.Timer.removeTimer( this.stillDownDelegate );
+            this.calcItem = false;
+        </handler>
+		
+		<method name="sendNewIcon" args="tObj">
+            parent.sendNewIcon(tObj);
+        </method>
+        
+        <method name="chooseSelect">
+            parent.chooseSelect();
+        </method>
+
+	</view>
+	
+</class>
+
+<class name="toolTipCustomPic" extends="text" bgcolor="0xFFFFFF">
+	
+</class>
+	
+	
+<class name="subMenuIconToolsToUpload" extends="guiPresenter" labelid="1335" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="340" height="280" >
+	
+	<attribute name="currentSelected" value="null" />
+	<attribute name="refToolbar" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+    <method name="sendNewIcon" args="refObj,folderName">
+    	if ($debug) Debug.write("sendNewIcon :: ",refObj.modi);
+    	this.currentSelected = refObj;
+    	
+    	if (folderName != "") {
+    		folderName += "/";
+    	}
+    	
+    	var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'+refObj.modi;
+    	
+        if ($debug) Debug.write("this.refToolbar :: ",this.refToolbar);        
+                                        
+    	this.refToolbar._rscIcon.setSource(imageurl);
+    	
+    	this.refToolbar.parent.parent.parent.setSelection(this.refToolbar);
+    	
+    	canvas._drawarea.currentClipArtRessourceName = folderName + refObj.modi;
+    	
+    	this.close();
+    </method>
+    
+    <method name="chooseSelect">
+    	if ($debug) Debug.write("chooseSelect :: ",this.currentSelected);
+    	this.close();
+    </method>
+    
+    <!--
+    <view resource="sub_menu_top_grip_colored_rsc" y="-14">
+    </view>
+     -->
+    
+    <view x="1" y="22" width="$once{ parent.width-4 }" clip="true" showhandcursor="false"
+    	  height="$once{ parent.height - 23 }" clickable="true">
+    	
+    	<view width="$once{ parent.width-15 }" x="1">
+    		
+    		<handler name="oninit">
+    			this.getClipArtIcons.doCall();
+    		</handler>
+    		
+		    <method name="sendNewIcon" args="tObj,folderName">
+                parent.parent.sendNewIcon(tObj,folderName);
+            </method>
+            
+            <method name="chooseSelect">
+                parent.parent.chooseSelect();
+            </method>
+
+    		
+    		<attribute name="currentContainer" value="null" />
+    		
+    		<!--
+    		getClipArtIcons()
+    		 -->
+            <netRemoteCallHib name="getClipArtIcons" funcname="whiteboardservice.getClipArtIcons"
+                remotecontext="$once{ canvas.thishib }" >
+                <handler name="ondata" args="value">
+                    <![CDATA[
+                        //The onResult-Handler will be called be the rtmpconnection
+                        //if ($debug) Debug.write("############## getClipArtIcons : ",value);
+                        parent.loadIconThumbs(value.generalList,"");
+                    ]]>
+                </handler>   
+            </netRemoteCallHib> 
+            
+            <method name="loadIconThumbs" args="list,folderName">
+            	<![CDATA[
+            	
+                    var imageurl = canvas.getUrl() + 'public/cliparts/thumb/';
+                    
+                    //if ($debug) Debug.write("imageurl :: ",imageurl);            	
+                        	
+                    for (var i=0;i<list.length;i++) {
+                    	
+                    	//if ($debug) Debug.write("list[i].indexOf() ",list[i],list[i].indexOf("."));
+                    	
+                    	if (list[i].indexOf(".") > 1 ) {
+                    	
+                            var iconresourceName = imageurl + list[i];
+                          
+                            new lz.miniIconSmybolExtraIcons(this,{
+                                          modi:list[i],
+                                          resource:iconresourceName,
+                                          stretches:'both'
+                                      });
+                                  
+                    	}
+                      
+                    }
+                
+                ]]>
+            </method>    		 
+    		
+    		<wrappinglayout axis="x" spacing="2" xinset="2" />
+    	</view> 
+    	
+    	<om_vscrollbar />
+    </view>
+    
+</class>
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
new file mode 100644
index 0000000..5fa1425
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+	<class name="drawDocumentPanelItem" extends="blueButton" 
+		   width="26" height="26" 
+		   x_insetResource="2" y_insetResource="2"
+		   width_insetResource="22" height_insetResource="22">
+		
+		<attribute name="modi" value="" type="string" />
+		<attribute name="labelid" value="0" type="number" />
+		
+		<handler name="onclick">
+			//if ($debug) Debug.write("parent.parent.parent.parent: ",parent.parent.parent.parent);
+			if (parent.parent.parent.ignoreUpdates) {
+	            return;
+	        }
+	        parent.parent.parent.parent._drawareaMask._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
+	        parent.parent.parent.parent._drawareaMask._drawarea.doDocumentAction(this.modi);
+		</handler>
+		
+		<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
+	    
+	</class>    
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx
new file mode 100644
index 0000000..4bb685a
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="_button_rsc_letter_rsc" src="resources/button_rsc.swf" />
+	
+	<include href="propertyPanelLetterButton.lzx" />  
+	<include href="drawDocumentPanelItem.lzx" />  
+	<include href="propertyPanel.lzx" />  
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx
new file mode 100644
index 0000000..162dfbf
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="propertyPanel" extends="basePropertyPanel" 
+	   width="${ parent.parent.width-1 }" height="80" labelid="843" >
+	
+	<attribute name="ignoreUpdates" value="false" type="boolean" />
+    
+	<method name="setObjectBounds" args="x,y,width,height">
+		if ($debug) Debug.write("setObjectBounds: ",x,y,width,height);
+		this._content._xvalue.setAttribute('text',x);
+		this._content._yvalue.setAttribute('text',y);
+		this._content._widthvalue.setAttribute('text',width);
+		this._content._heightvalue.setAttribute('text',height);
+	</method>
+	
+	<method name="onUpdateBoundByText">
+		if (canvas._drawarea.boundingref!=null){
+			if ($debug) Debug.write("onUpdateBoundByText boundingref: ",canvas._drawarea.boundingref);
+			canvas._drawarea.boundingref.setAttribute('x',Number(this._content._xvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('y',Number(this._content._yvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('width',Number(this._content._widthvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('height',Number(this._content._heightvalue.getText()));
+		}
+	</method>
+	
+	<method name="loadPanelByModus" args="drawArea">
+		if ($debug) Debug.write("loadPanelByModus drawmodus: ",drawArea.drawmodus);
+		this.ignoreUpdates = true;
+		if (drawArea.drawmodus == 'paint') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlayerstroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlayerlineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentlayerOpacity*100);
+		} else if (drawArea.drawmodus == 'line') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlinestroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlinelineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentlineOpacity*100);
+		} else if (drawArea.drawmodus == 'uline') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentulinestroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentulinelineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentulineOpacity*100);
+		} else if (drawArea.drawmodus == 'drawarrow') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentdrawarrowlinestroke,
+                drawArea.currentdrawarrowlinestrokeDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentdrawarrowlinelineWidth);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentdrawarrowlinestrokeFill,
+                drawArea.currentdrawarrowlinestrokeFillDis);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentdrawarrowOpacity*100);
+		} else if (drawArea.drawmodus == 'rectangle') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentrectanglestroke,
+				drawArea.currentrectanglestrokeDis);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentrectanglestrokeFill,
+				drawArea.currentrectanglestrokeFillDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentrectangleineWidth);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentrectangleOpacity*100);
+		} else if (drawArea.drawmodus == 'ellipse') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentellipsestroke,
+				drawArea.currentellipsestrokeDis);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentellipsestrokeFill,
+				drawArea.currentellipsestrokeFillDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentellipselineWidth);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentellipseOpacity*100);
+		} else if (drawArea.drawmodus == 'letter') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlayerletter);
+			this._content.fillColorChoose.setEnabled(false);
+			if ($debug) Debug.write("drawArea.currentlayersize ",drawArea.currentlayersize);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlayersize);
+			this._content.changeOpacitySlider.setEnabled(false);
+			this._content._italic.setValue(canvas._drawarea.italic);
+			this._content._bold.setValue(canvas._drawarea.bold);
+		} else {
+			if ($debug) Debug.warn("Not known drawmodus",drawArea.drawmodus);
+			this._content.lineColorChoose.setEnabled(false);
+			this._content.changeWidthSlider.setEnabled(false);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setEnabled(false);
+		}
+		
+		if (drawArea.drawmodus == 'letter'){
+            this._content._italic.setAttribute('enabled',true);
+            this._content._bold.setAttribute('enabled',true);           
+        } else {
+            this._content._italic.setAttribute('enabled',false);
+            this._content._bold.setAttribute('enabled',false);
+        }
+		
+		this.ignoreUpdates = false;
+	</method>
+	
+	<method name="loadPanelByBoundingBox" args="drawArea,objRef">
+		if ($debug) Debug.write("loadPanelByBoundingBox objRef: ",objRef);
+		
+        this.loadPanelByModus(drawArea);
+        
+        this.ignoreUpdates = true;
+        
+        if (objRef.name.indexOf('swf') >= 0) {
+            
+            this._content._documentsPanel._currentSlideNo.setAttribute("text",objRef.slideNumber);
+            //this._content._documentsPanel._zoom.setAttribute("text",objRef.currentzoomFactor);
+            //this._content._fullFit.setValue(objRef.fullFit);
+            
+        }
+		
+		this.ignoreUpdates = false;
+	</method>
+		
+	<method name="updateProperties">
+		if (!this.ignoreUpdates){
+			if (canvas._drawarea.drawmodus == 'paint'){
+				canvas._drawarea.currentlayerstroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentlayerlineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentlayerOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'line'){
+				canvas._drawarea.currentlinestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentlinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentlineOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'uline'){
+				canvas._drawarea.currentulinestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentulinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentulineOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'drawarrow'){
+				canvas._drawarea.currentdrawarrowlinestroke = this._content.lineColorChoose.selectedColor;
+                canvas._drawarea.currentdrawarrowlinestrokeDis = this._content.lineColorChoose.selectedColorDis;
+                canvas._drawarea.currentdrawarrowlinestrokeFill = this._content.fillColorChoose.selectedColor;
+                canvas._drawarea.currentdrawarrowlinestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+                canvas._drawarea.currentdrawarrowlinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentdrawarrowOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'rectangle'){
+				canvas._drawarea.currentrectanglestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentrectanglestrokeDis = this._content.lineColorChoose.selectedColorDis;
+				canvas._drawarea.currentrectanglestrokeFill = this._content.fillColorChoose.selectedColor;
+				canvas._drawarea.currentrectanglestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+				canvas._drawarea.currentrectangleineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentrectangleOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'ellipse'){
+				canvas._drawarea.currentellipsestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentellipsestrokeDis = this._content.lineColorChoose.selectedColorDis;
+				canvas._drawarea.currentellipsestrokeFill = this._content.fillColorChoose.selectedColor;
+				canvas._drawarea.currentellipsestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+				canvas._drawarea.currentellipselineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentellipseOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'letter'){
+				canvas._drawarea.setAttribute('currentlayerletter',this._content.lineColorChoose.selectedColor);
+				canvas._drawarea.setAttribute('currentlayersize',this._content.changeWidthSlider.initialNumber);
+				canvas._drawarea.italic = this._content._italic.getValue();
+				canvas._drawarea.bold = this._content._bold.getValue();
+				canvas._drawarea.doalterStyle();
+			} else {
+				if ($debug) Debug.warn("Not known drawmodus",canvas._drawarea.drawmodus);
+			}
+		}
+	</method>
+
+	<view name="_content" visible="${this.parent.isopen}" >
+		
+		<labelTextWidthTooltip name="_xvalueLabel" x="4" y="24"
+			labelid="545" labelLabelid="546"  /> 
+		<customEdittext name="_xvalue" x="24" y="24" regexpType="number" 
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_yvalueLabel" x="4" y="52"
+			labelid="547" labelLabelid="548"  /> 
+		<customEdittext name="_yvalue" x="24" y="52" regexpType="number"
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_widthvalueLabel" x="68" y="24"
+			labelid="549" labelLabelid="550" /> 
+		<customEdittext name="_widthvalue" x="88" y="24" regexpType="number" 
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_heightvalueLabel" x="68" y="52"
+			labelid="551" labelLabelid="552" /> 
+		<customEdittext name="_heightvalue" x="88" y="52" regexpType="number"
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+			
+			
+		<lineColorChoose x="132" y="24" name="lineColorChoose" boxPosition="up" >
+			<handler name="onselectedColor" args="sel">
+				if ($debug) Debug.write("lineColorChoose sel: ",sel);
+				parent.parent.updateProperties();			
+			</handler>
+		</lineColorChoose>
+		
+		<fillColorChoose x="132" y="52" name="fillColorChoose" boxPosition="up" >
+			<handler name="onselectedColor" args="sel">
+				if ($debug) Debug.write("fillColorChoose sel: ",sel);
+				parent.parent.updateProperties();	
+			</handler>
+		</fillColorChoose>
+		
+		<changeWidthSlider x="222" y="24" name="changeWidthSlider" boxPosition="up" 
+			initialNumber="2" >
+			<handler name="oninitialNumber" args="i">
+				//this.parent.parent.parent._drawareaMask._drawarea.setAttribute('currentlayersize',i);
+				if ($debug) Debug.write("changeWidthSlider oninitialNumber sel: ",i);
+				parent.parent.updateProperties();	
+			</handler>
+		</changeWidthSlider> 
+		
+		<changeWidthSlider x="222" y="52" name="changeOpacitySlider" labelid="553" boxPosition="up"
+			initialNumber="100" >
+			<handler name="oninitialNumber" args="i">
+				//this.parent.parent.parent._drawareaMask._drawarea.setAttribute('currentlayersize',i);
+				if ($debug) Debug.write("changeOpacitySlider oninitialNumber sel: ",i);
+				parent.parent.updateProperties();	
+			</handler>
+		</changeWidthSlider> 
+
+	    <propertyPanelLetterButton name="_italic" x="286" y="24" labelid="86"
+                                   itemResourceName="italic" />
+	    
+	    <propertyPanelLetterButton name="_bold" x="312" y="24" labelid="87"
+                                   itemResourceName="bold" />
+		
+		<view name="_delemiter" width="2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" 
+			  height="$once{ parent.height - this.y - 4 }" y="20" x="338"/>
+		
+		<labelText labelid="721" y="26" x="344" />
+		
+		<resetCombobox name="currentDocument" width="300" height="24" fontsize="11"
+                           editable="false" shownitems="7" x="480" y="24">
+            <attribute name="sendSelection" value="true" type="boolean"/>
+            <handler name="onselect" args="sel">
+                if (this.sendSelection) {
+                    parent.parent.parent._drawareaMask._drawarea.setCurrentDocument(sel.value);
+                }
+            </handler>
+        </resetCombobox>
+        <!--
+	    <labelCheckbox x="344" y="54" name="_fullFit" labelid="847" >
+            <handler name="onvalue" args="v">
+                if (parent.parent.ignoreUpdates) {
+                    return;
+                }
+                if ($debug) Debug.write("onvalue Full Fit ",v);
+                
+                parent.parent.parent._drawareaMask._drawarea.doFullFit(v);
+            </handler>
+            <labelTooltip labelid="1212" multiline="true" />
+	    </labelCheckbox> 
+	     -->       
+		
+		<view name="_documentsPanel" x="480" y="52" layout="axis:x;spacing:2">
+			
+			<handler name="oninit">
+                //if ($debug) Debug.write("oninit: ",this);
+                this._currentSlideNo.setAttribute('text',canvas.currentSlideNo);
+                this._totalSlideNo.setAttribute('text',canvas.currentSlideTotal);
+                //this._zoom.setAttribute('text',canvas.currentSlideZoom);
+            </handler>
+            <handler name="preclose">
+                //if ($debug) Debug.write("onclose: ",this);
+                canvas.currentSlideNo = Number(this._currentSlideNo.getText());
+                canvas.currentSlideTotal = Number(this._totalSlideNo.getText());
+                //canvas.currentSlideZoom = Number(this._zoom.getText());
+            </handler>
+			
+			<method name="addCurrentObject" args="itemObj">
+                //if ($debug) Debug.write("addCurrentObject ",itemObj.fileName,itemObj.name);
+                var docName = itemObj.standardFileName;
+		        if (docName.length == 0) {
+		            docName = itemObj.fileName;
+		        }
+		        
+		        parent.currentDocument.addItem(docName,itemObj.name);
+                parent.currentDocument.sendSelection = false;
+                parent.currentDocument.selectItem(itemObj.name);
+                parent.currentDocument.sendSelection = true;
+                
+                parent._clickLayer.setAttribute("visibility","hidden");
+            </method>
+            
+            <method name="removeDocument" args="refItemName">
+            	
+            	if ($debug) Debug.warn("removeDocument ",refItemName);
+            	
+                parent.currentDocument.removeItem(refItemName);
+                if (parent.currentDocument.getNumItems() != 0) {
+                    parent.currentDocument.selectItemAt(0);
+                    parent._clickLayer.setAttribute("visibility","hidden");
+                } else {
+                	parent.currentDocument.clearSelection(); 
+                	parent._clickLayer.setAttribute("visibility","visible");
+                }
+            </method>
+            
+            <method name="clearDocumentsBar">
+                parent.currentDocument.reset();
+                parent._clickLayer.setAttribute("visibility","visible");
+            </method>
+            
+            <drawDocumentPanelItem name="b3" modi="doc_first" resourceItem="doc_first" 
+                labelid="255" />        
+            <drawDocumentPanelItem name="b4" modi="doc_pre" resourceItem="doc_pre" 
+                labelid="256" />            
+            <drawDocumentPanelItem name="b5" modi="doc_next" resourceItem="doc_next" 
+                labelid="257" />        
+            <drawDocumentPanelItem name="b6" modi="doc_last" resourceItem="doc_last" 
+                labelid="258" />        
+        
+            <customEdittext name="_currentSlideNo" width="40" height="24" regexpType="number" >
+                <handler name="onblur">
+                    if (parent.parent.parent.ignoreUpdates) {
+                    	if ($debug) Debug.write("ignoreUpdates -- ");
+                        return;
+                    }
+                    parent.parent.parent.parent._drawareaMask._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
+                    parent.parent.parent.parent._drawareaMask._drawarea.newSlideNumber = Number(this.getText());
+                    parent.parent.parent.parent._drawareaMask._drawarea.doDocumentAction("setSlideNumber");         
+                </handler>
+            </customEdittext>    
+            <labelText y="6" labelid="254" />     
+            <labelText name="_totalSlideNo" y="6" width="40" />  
+            
+		</view>
+		
+		<!-- 340 -->
+		<view name="_clickLayer" clickable="true" opacity="0.75" x="340"
+			  width="460" height="$once{ parent.height - this.y }" 
+			  y="20" showhandcursor="false" bgcolor="0xFFFFFF" />
+		
+	</view>
+
+</class>
+     
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx
new file mode 100644
index 0000000..0cdf38b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="propertyPanelLetterButton" extends="view" resource="_button_rsc_letter_rsc"  
+	   x="312" y="24" height="23" width="24" 
+	bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" >
+	<attribute name="itemResourceName" value="" type="string" />
+	<attribute name="currentVal" value="false" type="boolean" />
+	
+    <attribute name="labelid" value="87" type="number"/>
+    
+	<attribute name="enabled" value="false" type="boolean"/>
+	
+	<handler name="onmouseover">
+		this.setAttribute('bgcolor',0xFFFFFF);
+	</handler>
+	<handler name="onmouseout">
+		this.updateByVal();
+	</handler>
+    <handler name="onclick">
+    	this.currentVal = !this.currentVal;
+    	this.updateByVal();
+        parent.parent.updateProperties();	
+    </handler>
+    <method name="getValue">
+    	return this.currentVal;
+    </method>
+    <method name="setValue" args="bool">
+    	this.currentVal = bool;
+    	this.updateByVal();
+    </method>
+    <method name="updateByVal">
+		if (this.currentVal){
+    		this.setAttribute('bgcolor',canvas.getThemeColor('basebgcolorizer'));
+    	} else {
+    		this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'));
+    	}    	
+    </method>
+    <view x="2" y="2" resource="$once{ parent.itemResourceName }" />
+    
+    <view name="_clickEnabled" width="$once{ parent.width }" height="$once{ parent.height }" 
+    	  visibility="${ (parent.enabled) ? 'hidden' : 'visible' }"
+    	  opacity="0.5" bgcolor="0xFFFFFF" clickable="true" showhandcursor="false" />
+    
+    <labelTooltip x="2" y="2" labelid="$once{ parent.labelid }" />
+    
+</class>
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf
new file mode 100644
index 0000000..027e6d0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/add.png b/WebContent/src/modules/conference/whiteboard/resources/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png
new file mode 100644
index 0000000..1c4b812
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png
new file mode 100644
index 0000000..1c4b812
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png
new file mode 100644
index 0000000..0ae7230
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png
new file mode 100644
index 0000000..68f95ad
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png
new file mode 100644
index 0000000..fd428c9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla
new file mode 100644
index 0000000..516062b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png
new file mode 100644
index 0000000..61a2482
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/pointer.fla b/WebContent/src/modules/conference/whiteboard/resources/pointer.fla
new file mode 100644
index 0000000..96068e9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/pointer.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/pointer.swf b/WebContent/src/modules/conference/whiteboard/resources/pointer.swf
new file mode 100644
index 0000000..97742bb
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/pointer.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/text_bold.png b/WebContent/src/modules/conference/whiteboard/resources/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/text_bold.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/text_italic.png b/WebContent/src/modules/conference/whiteboard/resources/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/text_italic.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx b/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx
new file mode 100644
index 0000000..5760a69
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardBarMenu" extends="view" width="${ parent.width }" x="0" y="21" 
+    height="20" layout="axis:x;spacing:1;inset:2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+    
+    <attribute name="staticwidth" type="number" value="120" />
+    <attribute name="currentBtn" value="null" />
+    
+    <method name="getCurrentSize">
+        <![CDATA[
+            if ( ((this.subviews.length+1)*(this.staticwidth+1)) <= this.width) {
+                return this.staticwidth;
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length+1));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+                return newwidth;
+            }   
+        ]]>
+    </method>
+    
+    <handler name="onwidth">
+        <![CDATA[
+            if ( ((this.subviews.length)*(this.staticwidth+1)) <= this.width) {
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',this.staticwidth);
+                }
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+            } 
+        ]]>
+    </handler>
+    
+    <method name="removeObject" args="btn">
+    	var whiteboardId = btn.objRef.whiteboardId;
+    	this.removeObjectSynced(btn);
+    	parent.sendRemoveWindow(whiteboardId);
+    </method>
+    
+    <method name="removeObjectSynced" args="btn">
+    <![CDATA[
+    	var removeCurrent = false;
+    	if (this.currentBtn == btn){
+    		removeCurrent = true;
+    	}
+    	btn.objRef.destroy();
+        btn.destroy();
+        if (this.subviews.length != 0 && removeCurrent) {
+        	this.sendActiveWindowSynced(this.subviews[this.subviews.length-1]);
+        }
+        parent.addNewItemButton.updatePosition();
+    ]]>
+    </method>
+
+    
+    <method name="sendActiveWindow" args="btn,win">
+        if ($debug) Debug.write("sendActiveWindow: ",btn,win);
+        this.sendActiveWindowSynced(btn);
+        this.currentBtn.objRef.sendActiveWindow();
+    </method>
+    
+    <method name="sendActiveWindowSynced" args="btn">
+    	<![CDATA[
+            if (this.currentBtn != null){
+                this.currentBtn.isactive=false;
+                if (this.currentBtn._minimizebtn_mo != null) this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+                if (this.currentBtn._minimizebtn_dn != null) this.currentBtn._minimizebtn_dn.setAttribute('visibility','hidden');
+            }
+            this.currentBtn = btn;
+            this.currentBtn.objRef.setAttribute("visibility","visible");
+        	this.currentBtn.objRef.bringToFront();
+            ////if ($debug)  //Debug.write("sendActiveWindow2: ",this.currentBtn);
+            this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+            this.currentBtn._minimizebtn_dn.setAttribute('visibility','visible');
+            this.currentBtn.isactive=true;
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx b/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx
new file mode 100644
index 0000000..adee5e0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardMiniButton" extends="view" width="250" height="18" y="2"
+    bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+     
+    <attribute name="btnName" value="" type="string" />
+    <attribute name="objRef" value="null" />
+
+    <attribute name="zielx" value="200" type="number" />
+    <attribute name="zielwidth" value="100" type="number" />    
+    
+    <attribute name="isactive" value="true" type="boolean" />
+    
+    <attribute name="isHidden" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        this.calcTextWidth();
+        parent.onwidth.sendEvent();
+    </handler>
+    
+    <handler name="onwidth">
+        if (this.isinited){
+            this.calcTextWidth();
+        }
+    </handler>
+    
+    <method name="disableItem">
+        //if ($debug) Debug.write("disableItem :: set visibility to hidden");
+        this.isHidden = true;
+        this.setAttribute("visibility","hidden");
+        //this.destroy();
+    </method>
+    
+    <method name="enableItem">
+        this.setAttribute("visibility","visible");
+        this.isHidden = false;
+    </method>
+    
+    <method name="calcTextWidth">
+        <![CDATA[
+            if (this.isHidden) {
+                return;
+            }
+            ////////if ($debug)  //Debug.write(this,this._text,this._text.getTextWidth());
+            if (this._text.getTextWidth()>(this.width-24)) {
+                this._long.setAttribute('visibility','visible');
+                this._text.setAttribute('width',this.width-26);
+            } else {
+                this._long.setAttribute('visibility','hidden');
+                this._text.setAttribute('width',this.width-18);
+            }
+        ]]>        
+    </method>
+        
+    <handler name="onclick">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+        if ($debug) Debug.write(" :: onclick :: ");
+        this.sendActiveWindow(this.objRef);
+    </handler>
+    
+    <handler name="onmouseover">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    <handler name="onmouseout">
+        if (this.isHidden) {
+            return;
+        }
+        if (this.isactive) {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','visible');
+        } else {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','hidden');
+        }        
+    </handler>
+    <handler name="onmousedown">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','hidden');
+        this._minimizebtn_dn.setAttribute('visibility','visible');
+    </handler>
+    <handler name="onmouseup">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    
+    <method name="sendActiveWindow" args="win">
+        this.parent.sendActiveWindow(this,win);
+    </method>    
+
+	<method name="activateSynced">
+		this.parent.sendActiveWindowSynced(this);
+	</method>
+    
+    <view name="_minimizebtn_mo" width="${ parent.width-2 }" height="16"
+        bgcolor="white" opacity="0.3" visibility="hidden" x="1" y="1" />
+
+    <view name="_minimizebtn_dn" width="${ parent.width-2 }" height="16"
+        bgcolor="black" opacity="0.3" visibility="hidden" x="1" y="1" />
+    
+
+    <text text="${ parent.btnName }" fgcolor="0xFFFFFF" resize="false" 
+        x="1" fontsize="10" name="_text" />
+    
+        <view y="1" x="${ parent.width-18 }" name="_close"
+            resource="btn_presenter_close"
+            opacity="${ ((canvas.ismoderator) ? 1 : ((canvas.isAllowedToDraw) ? 1 : 0.5 )) }" 
+            onmouseover="this.setAttribute('frame',2)"
+            onmouseout="this.setAttribute('frame',1)"
+            onmousedown="this.setAttribute('frame',3)"
+            onmouseup="this.setAttribute('frame',1)" >
+            <handler name="onclick">
+	            <![CDATA[
+	                this.setAttribute('frame',2);
+	                canvas._videocontainer._videoviewcontent.closeWhiteboard();
+	                var t = this;
+                    canvas.videoComp_lc.closeWhiteboard = function(confirm) {
+                        if ($debug) Debug.write("confirm closeWhiteboard:", confirm);
+                        if (confirm) {
+                            t.parent.parent.removeObject(t.parent);
+                        }
+                    }
+                ]]>
+            </handler>
+            <labelTooltip labelid="1364" />
+        </view>  
+        
+    <text y="1" name="_long" text="..." fgcolor="0xFFFFFF"
+        x="${ parent.width-28 }" fontsize="10" />
+
+    <labelTooltip text="${ parent.btnName }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/library.lzx b/WebContent/src/modules/conference/whiteboard/windows/library.lzx
new file mode 100644
index 0000000..1002108
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="saveAsWmlWindow.lzx" />
+	<include href="loadWhiteboardWindow.lzx" />
+	
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx b/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx
new file mode 100644
index 0000000..c2da202
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="loadWhiteboardWindow" extends="labelText" multiline="true" resize="false" 
+	   width="260" align="right" y="${ parent.height - this.height - 10 }" 
+	   bgcolor="0xFFFFFF" fgcolor="0xFF3300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="onclick">
+    	this.destroy();
+    </handler>
+    
+    <method name="close">
+        this.destroy();
+    </method>    
+    
+    <method name="setMessage" args="mess">
+        this.setAttribute('text',mess);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx b/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx
new file mode 100644
index 0000000..823c9cf
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="saveAsWmlWindow" extends="labelExplorerBox" labelid="199"
+    docking="true" closable="true" width="260" x="200" y="0" height="220">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+    	lz.ModeManager.makeModal(this);
+    </handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <labelText y="22" labelid="201" width="200" />
+    <customEdittext name="_savefileName1" y="42" x="4" width="240" text="filename" />
+    
+    <!--
+    <labelText x="4" y="72" labelid="561" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"png");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="92" labelid="562" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"jpg");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="112" labelid="563" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"pdf");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="132" labelid="560" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageExport(this.parent._savefileName1.getText());
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="152" labelid="564" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"tif");
+            this.parent.close();
+        </handler>
+    </labelText>
+     -->
+    
+	<simpleLabelButton name="_confirm" x="40" y="190" 
+			labelid="203" width="100" height="20">
+		<handler name="onclick">
+			this.parent.refObj.confirmSaveAsObject(this.parent._savefileName1.getText());
+		</handler>
+	</simpleLabelButton>	
+    
+	<simpleLabelButton name="_cancel" x="150" y="190" 
+			labelid="202" width="100" height="20">
+		<handler name="onclick">
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/dashboard/library.lzx b/WebContent/src/modules/dashboard/library.lzx
new file mode 100644
index 0000000..76f3047
--- /dev/null
+++ b/WebContent/src/modules/dashboard/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="tabButtonMain.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/dashboard/tabButtonMain.lzx b/WebContent/src/modules/dashboard/tabButtonMain.lzx
new file mode 100644
index 0000000..08ae57f
--- /dev/null
+++ b/WebContent/src/modules/dashboard/tabButtonMain.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="tabButtonMain" extends="view" focusable="true"
+	   width="$once{ (parent.width-2)/2 }" height="36" y="2">
+	
+	<attribute name="labelid" value="0" type="number" />
+	
+	<attribute name="selected" value="false" type="boolean" />
+	
+	<attribute name="textFontSize" value="14" type="number" />
+	
+	<attribute name="currentIconRsc" value="" type="string"/>
+	
+	<attribute name="showIcon" value="true" type="boolean" />
+	
+	<handler name="oninit">
+		if (this.selected) {
+			this.doSelection();
+		}
+	</handler>
+	
+	<handler name="onclick">
+		this.doSelection();
+	</handler>
+	
+	<method name="doSelection">
+		parent.parent.doSelection(this);
+	</method>
+	
+	<handler name="onmouseover">
+		if (!this.selected) {
+			this._bg2.setAttribute("visibility","visible");
+		}
+	</handler>
+	
+	<handler name="onmouseout">
+		if (!this.selected) {
+        	this._bg2.setAttribute("visibility","hidden");
+        }
+    </handler>
+	
+	<method name="select">
+		this.selected = true;
+		if (this.showIcon) this._icon.setAttribute("opacity",1);
+        this._selectedView.setAttribute("visibility","visible");
+        this._deselectedView.setAttribute("visibility","hidden");
+		this._bg2.setAttribute("visibility","hidden");
+		this._text.setAttribute("fontstyle","bold");
+		this._text.setAttribute("y",6);
+		if (this.showIcon) this._icon.setAttribute("y",6);
+		this._text.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));
+	</method>
+     
+    <method name="deselect">
+        this.selected = false;
+        if (this.showIcon) this._icon.setAttribute("opacity",0.5);
+        this._selectedView.setAttribute("visibility","hidden");
+        this._deselectedView.setAttribute("visibility","visible");
+        this._text.setAttribute("y",8);
+        if (this.showIcon) this._icon.setAttribute("y",8);
+        this._text.setAttribute("fontstyle","plain");
+        this._text.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));
+    </method>       
+    
+    <view name="_selectedView" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" width="$once{ parent.width }" 
+            height="$once{ parent.height }" visibility="visible">
+        <view name="borderRight" width="1" x="0"
+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  
+        <view name="borderTop" width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+        <view name="borderLeft" width="1" x="$once{ parent.width-1 }"
+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  
+    </view>
+    
+    <view name="_deselectedView" bgcolor="0xFAFAFA" 
+    		width="$once{ parent.width }" y="2"
+            height="$once{ parent.height-3 }" visibility="visible">
+        <view name="borderRight" width="1" x="0"
+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  
+        <view name="borderTop" width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+        <view name="borderLeft" width="1" x="$once{ parent.width-1 }"
+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  
+    </view>       
+          
+    <view name="_bg2" bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" y="3" x="1"
+          height="$once{ parent.height-4 }" opacity="1" visibility="hidden"/>
+    
+    <state applied="$once{ parent.showIcon }" >
+	    <image x="6" y="6" name="_icon" src="$once{ canvas.getThemeImage( parent.currentIconRsc ) }" 
+    				width="20" height="20" stretches="both" />
+    </state>
+                
+    <labelText name="_text" x="$once{ (parent.showIcon) ? 28 : 6 }" fontsize="$once{ parent.textFontSize }" 
+    		valign="middle" fgcolor="0xFFFFFF" labelid="$once{ parent.labelid }" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/invitation/autoloaderBarOnly.lzx b/WebContent/src/modules/invitation/autoloaderBarOnly.lzx
new file mode 100644
index 0000000..7222483
--- /dev/null
+++ b/WebContent/src/modules/invitation/autoloaderBarOnly.lzx
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="autoloaderBarOnly" extends="view" x="400" valign="middle" pixellock="true">
+
+	<attribute name="maxwidth" value="400" type="number" />
+	<attribute name="maxsteps" value="22" type="number" />
+	<attribute name="currentsteps" value="0" type="number" />
+	
+	<method name="close">
+		canvas.thishib.loaderVar = null;
+		this.destroy();
+	</method>
+	
+	<method name="setProgress">
+		this.currentsteps += 1;
+		if($debug) Debug.write("autoLoader/setProgress ===== ",this.currentsteps);
+		var w = Math.round(((this.maxwidth)/this.maxsteps)*this.currentsteps);
+		this.loadingbar.setAttribute('visibility','visible');
+		if($debug) Debug.write("autoLoader/setResourceNumber == ",w);
+		this.loadingbar._loading.setAttribute('width',w);
+	</method>
+      
+    <view name="loadingbar"  height="1" pixellock="true"
+          x="-5" y="40" width="$once{ parent.maxwidth+2 }" visibility="hidden">
+          <view x="1" y="1" width="$once{ parent.width-2 }" height="1" opacity="0.3"
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" />
+          <view name="_loading" x="1" y="1" width="0" height="1"  pixellock="true" 
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }"/>
+    </view>  
+          
+    <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" 
+		remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="start" value="0" type="number" />
+    	<attribute name="step" value="100" type="number" /> 
+    	<attribute name="max" value="1600" type="number" />    
+        <netparam><method name="getValue">return canvas.thishib.userlang;</method></netparam> 
+        <netparam><method name="getValue">return parent.start;</method></netparam> 
+        <netparam><method name="getValue">return parent.step;</method></netparam> 
+        <handler name="ondata" args="value">
+        	<![CDATA[
+        		//if ($debug) Debug.write("getLanguageByIdAndMax: ",value);
+        		setLabelObjectByHundred(this.start,value);
+	            //The onResult-Handler will be called be the rtmpconnection
+	            if (this.start <= max){
+	            	this.start += this.step;
+					canvas.thishib.loaderVar.setProgress();
+					this.doCall();
+	            } else {
+            		parent.setProgress();
+		            canvas.thishib.getTimeZones.doCall();
+		            parent.getUserSalutations.doCall();
+				}
+			]]>
+        </handler>  
+    </netRemoteCallHib>	 
+    
+    <netRemoteCallHib name="getUserSalutations" funcname="userservice.getUserSalutations" 
+		remotecontext="$once{ canvas.thishib }" >  
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue"> return hib.userlang; </method></netparam> 
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getUserSalutations ",value);
+            canvas.salutationsInitValues = value;
+            parent.setProgress();
+            parent.getRoomTypes.doCall();
+        </handler>  
+    </netRemoteCallHib>   
+    
+    <netRemoteCallHib name="getRoomTypes" funcname="conferenceservice.getRoomTypes" 
+		remotecontext="$once{ canvas.thishib }" >  
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getRoomTypes ",value);
+            canvas.roomTypesInitValues = value;
+            parent.setProgress();
+            parent.setUsernameAndSession.doCall();
+        </handler>  
+    </netRemoteCallHib>    	 
+	 
+    <netRemoteCallHib name="setUsernameAndSession" funcname="setUsernameAndSession" remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+        <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+        <netparam><method name="getValue">return canvas.lastName;</method></netparam>      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setUsername: value, ",canvas.thishib.currentInvitation.room.roomtype.roomtypes_id);
+            clearStageContent();		
+            parent.close();
+            
+			if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==1){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.conferenceRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==2){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==3){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==4){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.interviewRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+                
+            } else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==5){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.customRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+                
+            }                 
+        </handler>  
+    </netRemoteCallHib>     
+          
+</class>
+
+</library>
diff --git a/WebContent/src/modules/invitation/invitationQuickLoader.lzx b/WebContent/src/modules/invitation/invitationQuickLoader.lzx
new file mode 100644
index 0000000..8ebf2c0
--- /dev/null
+++ b/WebContent/src/modules/invitation/invitationQuickLoader.lzx
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!---
+	-->
+	<!-- label: data loading, please wait -->
+	<class name="invitationQuickLoader" extends="labelExplorerBox" labelid="230"
+			docking="true" resizeable="false" closable="false" width="324" 
+			x="$once{ canvas.width/2 - this.width/2 }" y="0" height="120">
+		 
+		<attribute name="userlang" value="1" type="number" />
+		
+		<handler name="oninit">
+			this.setRoomValues();
+			if (canvas.thishib.currentInvitation.passwordProtected){
+				if ($debug) Debug.write("Is Password Protected");
+				this.pass_label.setAttribute('visibility','visible');
+				this._password.setAttribute('visibility','visible');
+				this.invitation_pass.setAttribute('visibility','visible');
+			} else {
+				this.showLoginStep();
+                if ($debug) Debug.write("invitationQuickLoader:oninit userlang = [",userlang,"]; canvas.lang = [",canvas.language_id,"]");
+                if (canvas.language_id > 0) {
+                    this.isRoomFull.doCall();
+                } else {
+                    this.showLoginStep();
+                }
+			}
+		</handler>
+		
+		<method name="showLoginStep">
+			this.pass_label.setAttribute('visibility','hidden');
+			this._password.setAttribute('visibility','hidden');
+			this.invitation_pass.setAttribute('visibility','hidden');		
+			this.labellanguages.setAttribute('visibility','visible');
+			this.languages.setAttribute('visibility','visible');
+			this.connect.setAttribute('visibility','visible');
+		</method>
+		
+		<method name="checkPWD">
+			this.checkInvitationPass.doCall();
+		</method>
+		
+		<netRemoteCallHib name="isRoomFull" funcname="conferenceservice.isRoomFull" 
+							remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >  	
+        	<netparam name="pass"><method name="getValue">return canvas.thishib.currentInvitation.room.rooms_id;</method></netparam>
+        	<handler name="ondata" args="value">
+        		<![CDATA[
+            		//The onResult-Handler will be called be the rtmpconnection
+            		if ($debug) Debug.write(canvas.thishib.currentInvitation.room.rooms_id);
+					if ($debug) Debug.write("isRoomFull: ",value);
+					
+					if (value) {
+						new lz.labelerrorPopup(canvas,{errorlabelid:618});
+						parent.close();
+					} else {
+						parent.login();
+					}
+            	]]>
+        	</handler>   
+    	</netRemoteCallHib> 
+		
+		<netRemoteCallHib name="checkInvitationPass" funcname="invitationservice.checkInvitationPass" 
+							remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >  	
+	      	<netparam name="invitationHash"><method name="getValue">return canvas.invitationHash;</method></netparam>
+        	<netparam name="pass"><method name="getValue">return parent.parent._password.getText();</method></netparam>
+	        	
+        	<handler name="ondata" args="value">
+        		<![CDATA[
+            		//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("checkInvitationPass : ",value);
+				if (value<0){
+				} else {
+					parent.showLoginStep();
+				}
+            ]]>
+        	</handler>   
+    	</netRemoteCallHib>  	
+	    
+		<method name="setRoomValues">
+			if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==1){
+	    		canvas.isConference = true;
+	    	} else {
+	    		canvas.isConference = false;
+		    }
+	    	var roomObj = canvas.thishib.currentInvitation.room;
+        	hib.currentroomid = roomObj.rooms_id;
+        	
+		</method>
+		
+		<method name="login">
+		<![CDATA[
+			this.userlang = Number(this.languages.getValue());
+			this.labellanguages.setAttribute('visibility','hidden');
+			this.languages.setAttribute('visibility','hidden');
+			this.connect.setAttribute('visibility','hidden');
+			this.labelloading.setAttribute('visibility','visible');
+			
+			parent.userlang = Number(this.userlang);
+			
+			var invitee = canvas.thishib.currentInvitation.invitee;
+			var email = invitee.adresses.email;
+			var fName = invitee.firstname == null ? "" : invitee.firstname;
+			var lName = invitee.lastname == null || invitee.lastname == "" ? email : invitee.lastname;
+			//if ($debug) Debug.write("!!!!!!!!!!! invitee :: ", invitee);
+			
+			canvas.setAttribute('currentuser', email);
+			canvas.setAttribute('user_id', -invitee.user_id);
+			canvas.setAttribute('firstName', fName);
+			canvas.setAttribute('lastName', lName);
+			canvas.setAttribute('mail', email);
+			canvas.setAttribute('lastLogin', invitee.lastlogin);
+			canvas.setAttribute('official_code','');
+			canvas.setAttribute('picture_uri', invitee.pictureuri);
+			canvas.setAttribute('language', invitee.language_id);
+			
+			hib.userobject = invitee;
+			hib.userobject.firstname = fName;
+			hib.userobject.lastname = lName;
+			
+			hib.userlang = Number(this.userlang);
+			canvas.thishib.loaderVar = new lz.autoloaderBarOnly(canvas);
+			canvas.thishib.loaderVar.setProgress();
+			this.close();
+			//if (canvas.language == canvas.thishib.userlang && canvas.thishib.initlanguageLoaded) { TODO  canvas.language seems to be dropped
+			if (canvas.language_id == canvas.thishib.userlang && canvas.thishib.initlanguageLoaded) {
+				if (!canvas.timeZonesLoaded) {
+					canvas.thishib.loaderVar.getTimeZones.doCall();
+				}
+				canvas.thishib.loaderVar.getUserSalutations.doCall();
+			} else {
+				canvas.thishib.loaderVar.getLanguageByIdAndMax.doCall();
+			}
+		]]>         
+		</method>
+		 
+		<!-- label: password -->
+	    	<labelText name="pass_label" labelid="536" visibility="hidden" width="200" y="30" resize="false" x="10" />  
+		<customEdittext name="_password" password="true" visibility="hidden" width="170" y="30" x="120" />
+		
+		<!-- label: Check password -->
+	 	<simpleLabelButton name="invitation_pass" y="80" x="120" text="start" visibility="hidden" labelid="537"
+	 					   	width="170" height="20" onclick="parent.checkPWD();" />
+		
+		<!-- label: language -->
+		<labelText name="labellanguages" labelid="227" visibility="hidden" width="200" y="30" resize="false" x="10" />     
+		<resetCombobox name="languages" width="170" y="30" x="120" visibility="hidden" editable="false">
+	      	<netRemoteCallHib name="getLanguages" funcname="languageservice.getLanguages" remotecontext="$once{ canvas.thishib }" >      
+	            <handler name="oninit">
+                 	this.doCall();
+	            </handler>
+	            <handler name="ondata" args="value">
+	            	//The onResult-Handler will be called be the rtmpconnection
+                  	<![CDATA[
+                        var selVal = canvas.language_id;
+                        var found = false;
+                  		for (var i=0;i<value.length;i++){
+	                  		this.parent.addItem(value[i].name,value[i].language_id);
+                            if (value[i].language_id == selVal) {
+                                found = true;
+                            }
+		                }
+                		this.parent.selectItem((found) ? selVal : value[0].language_id);
+		            ]]>
+				</handler>  
+			</netRemoteCallHib>
+		</resetCombobox>		 
+
+		<!-- label: loading -->	
+		<labelText name="labelloading" y="30" x="10" fontstyle="bold" labelid="229" visibility="hidden" />
+		
+		<!-- label: enter -->
+		<simpleLabelButton name="connect" y="80" x="120" text="start" 
+						   visibility="hidden" labelid="228" width="170" height="20" 
+						   onclick="parent.isRoomFull.doCall();" />
+	</class>
+</library>
diff --git a/WebContent/src/modules/invitation/inviteMainWindow.lzx b/WebContent/src/modules/invitation/inviteMainWindow.lzx
new file mode 100644
index 0000000..e32ee88
--- /dev/null
+++ b/WebContent/src/modules/invitation/inviteMainWindow.lzx
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!---
+		This class shows a invitation window with clicking button which is located in video and audio panel.
+	-->
+	<!-- placeholder
+		label: send invitation
+	-->
+	<class name="inviteMainWindow" extends="labelExplorerBox" labelid="214" 
+			docking="true" closable="false" width="464" x="200" y="100" height="465">
+		
+		<attribute name="roomType" value="conference" type="string" />
+		<attribute name="baseUrl" value="" type="string" />
+		<attribute name="currentHash" value="" type="string" />
+		<attribute name="display" value="false" type="boolean" />
+		<attribute name="addTimezoneItemsDelegate" value="null"/>
+		<attribute name="firstname" value="null"/>
+		<attribute name="lastname" value="null"/>
+		<attribute name="email" value="null"/>
+    	
+		<handler name="oninit">
+		<![CDATA[
+    		this.setAttribute('visibility', 'hidden');
+			this.baseUrl = canvas.getAppBaseUrl();
+			if( $debug ) Debug.write("this.baseUrl: ", this.baseUrl);
+			if (addTimezoneItemsDelegate == null) {
+				addTimezoneItemsDelegate = new LzDelegate(this, "addTimezoneItems");
+				lz.Timer.addTimer(addTimezoneItemsDelegate, 2000);
+			}
+		]]>
+		</handler>
+		
+		<method name="addTimezoneItems" args="ignore=null">
+		<![CDATA[
+			var itemCount = _timeZone.cblist.getNumItems();
+			if ( itemCount < canvas.timeZones.length) {
+				for (var i = itemCount; i < Math.min(itemCount + 30, canvas.timeZones.length); ++i) {
+					_timeZone.addItem(canvas.timeZones[i], canvas.timeZones[i]);
+				}
+			} else {
+				lz.Timer.removeTimer(addTimezoneItemsDelegate);
+				addTimezoneItemsDelegate = null;
+				canvas.setAttribute("timeZonesLoaded", true);
+			}
+			if ($debug) Debug.write(":: addTimezoneItems :: ", itemCount);
+			lz.Timer.resetTimer(addTimezoneItemsDelegate, 500);
+		]]>
+		</method>
+
+        <handler name="onvisible" args="v">
+    	<![CDATA[
+    		if (v) {
+			    this.setOffset(canvas.stdTimeOffset);
+				this._recipient.setAttribute('text', '');
+				this._message.setAttribute('text', '');
+				this._password.setAttribute('text', '');
+				this._ispasswordProtected.setValue(false);
+				this._timeFrom.setAttribute('text', getStringTime());
+				this._timeTo.setAttribute('text', getStringTime());
+				this.firstname = "";
+				this.lastname = "";
+				this.email = "";
+				this.display = false;
+				lz.ModeManager.makeModal(this);
+				if (!canvas.isConference){
+					this.roomType = "restricted"; //FIXME
+				}
+                for (var eg in this.subviews) {
+                    this.subviews[eg].setAttribute('enabled', true);
+                }
+                _password.setAttribute('enabled', _ispasswordProtected.value);
+                var period = _valid.value == 2;
+                _valid_from.setAttribute('enabled', period);
+                _timeFrom.setAttribute('enabled', period);
+                _valid_to.setAttribute('enabled', period);
+                _timeTo.setAttribute('enabled', period);
+                _timeZone.setAttribute('enabled', period);
+                _url.setAttribute('enabled', false);
+			} else {
+	    		lz.ModeManager.release(this);
+			}
+    	]]>
+	    </handler>
+        
+		<method name="setOffset" args="std_time_offset">
+		<![CDATA[
+			var std_time_offset = Math.round(std_time_offset);
+			var timeZoneJavaFormat = "Etc/GMT";
+			if (std_time_offset > 0) {
+				timeZoneJavaFormat += "-"+std_time_offset;
+			} else {
+				timeZoneJavaFormat += "+"+std_time_offset;
+			}
+			
+			if ($debug) Debug.write("timeZoneJavaFormat :: ",timeZoneJavaFormat);
+			
+			var tItem =  this._timeZone.getItem(timeZoneJavaFormat);
+			if (tItem != null) {
+				this._timeZone.selectItem(timeZoneJavaFormat);
+			} else {
+				this._timeZone.selectItemAt(0);
+			}
+			this._languages.selectItem(canvas.language_id);
+		]]>
+		</method> 
+		
+		<!-- label: recipient -->
+		<labelTextWidthTooltip name="_recepientLbl" y="24" width="120" labelid="216" labelLabelid="1597"  />
+		<customEdittext name="_recipient" width="340" x="120" y="22" regexpLabelid="1597">
+			<handler name="onblur">
+			<![CDATA[
+				var addr = parent.replaceAll(parent.replaceAll(getText(), "'", ""), "\"", "");
+				if ($debug) Debug.write("addr: ", addr);
+				parent.firstname = "";
+				parent.lastname = "";
+				var idx1 = addr.indexOf("<"), idx2 = addr.indexOf(">");
+				if (idx1 > -1 && idx2 > -1 && idx2 > idx1) {
+					parent.email = parent.trim(addr.substring(idx1 + 1, idx2));
+					var s = parent.trim(addr.substring(0, idx1));
+					var idx = s.indexOf(" ");
+					if (idx > -1) {
+						parent.firstname = s.substring(0, idx);
+						parent.lastname = s.substring(idx + 1);
+					} else {
+						parent.firstname = s;
+					}
+				} else {
+					parent.email = addr;
+				}
+				if ($debug) Debug.write("[first, last, email]: ", getText(), idx1, idx2, parent.firstname, parent.lastname, parent.email);
+				this.regExpCheckId = canvas.doRegExpCheck(parent.email, this.emailRegEx);
+				if(this.callDelegate == null) {
+					this.callDelegate = new LzDelegate(this, "checkRegExpResult");
+				}
+				lz.Timer.resetTimer(this.callDelegate, 50);
+			]]>
+			</handler>
+			<handler name="onafterCheck">
+				if (!isvalidInput) {
+					parent.email = null;
+					parent.firstname = null;
+					parent.lastname = null;
+				}
+			</handler>
+		</customEdittext>
+		
+		<method name="trim" args="s">
+		<![CDATA[
+			var str = "" + s, begin = 0, end = str.length - 1;
+			while (begin <= end && str.charCodeAt(begin) == 32) { ++begin; }
+			while (end > begin && str.charCodeAt(end) == 32) { --end; }
+			return str.substr(begin, end - begin + 1);
+		]]>
+		</method>
+		
+		<method name="replaceAll" args="s,f,r">
+		<![CDATA[
+			var str = s;
+			while (str.indexOf(f) > -1) { str = str.replace(f, r); }
+			return str;
+		]]>
+		</method>
+	
+		<!-- label: subject -->
+		<labelText labelid="215" y="52" width="120" />
+		<customEdittext name="_subject" labelid="532" width="340" enabled="false" x="120" y="52" />	
+		
+		<!-- label: message -->
+		<labelText labelid="217" y="82" width="120" />
+		<customScrollEdittext name="_message" width="340" x="120" y="82" height="100" />	
+		
+							  
+		<!-- label: password protected -->
+		<labelCheckbox name="_ispasswordProtected" y="192" fontsize="11" x="4" labelid="524"  />
+			
+		<!-- label: password -->
+		<labelText labelid="525" y="220" x="4" fgcolor="${ ((!parent._ispasswordProtected.value) ? 0xCCCCCC : 0x000000 ) }" />
+		<customEdittext name="_password" enabled="${ parent._ispasswordProtected.value }" password="true"
+						width="340" x="120" y="218" />
+		
+		<!-- label: validity period -->
+		<labelText labelid="526" y="252" width="120" />
+	
+		<radiogroup name="_valid" x="120" y="256" layout="class:simplelayout; axis:x">
+			<!-- label: endless -->
+	            <labelRadioButton value="1" labelid="527" fontsize="11" />
+			<!-- label: period -->
+	            <labelRadioButton value="2" labelid="528" fontsize="11" />
+			<!-- label: one-time -->
+	        	<labelRadioButton value="3" labelid="529" fontsize="11" />
+		</radiogroup>
+
+		<!-- label: valid from -->		
+		<labelText x="4" labelid="530" y="284" fgcolor="${ ((parent._valid.value==2) ? 0x000000 : 0xCCCCCC ) }" />
+		<dateField x="120" y="282" name="_valid_from" setDefaultToday="true" enabled="${ parent._valid.value == 2 }" />
+		<customEdittext name="_timeFrom" enabled="${ parent._valid.value == 2 }"
+					width="50" x="232" y="282" text="$once{ getStringTime() }" regexpType="time" />	   
+		
+		<!-- label: valid to -->			
+		<labelText x="4" labelid="531" y="314" fgcolor="${ ((parent._valid.value==2) ? 0x000000 : 0xCCCCCC ) }" />
+		<dateField x="120" y="314" name="_valid_to" setDefaultToday="true" additionalDay="1" enabled="${ (parent._valid.value == 2) }" />		
+		<customEdittext name="_timeTo" enabled="${ parent._valid.value == 2 }"
+						width="50" x="232" y="314" text="$once{ getStringTime() }" regexpType="time" />				   
+
+		<labelText labelid="1143" width="200" y="344" fgcolor="${ ((parent._valid.value==2) ? 0x000000 : 0xCCCCCC ) }"  x="4" />
+		<resetCombobox name="_timeZone" editable="false" y="344" width="270" x="120"
+				enabled="${ parent._valid.value == 2 }" fontsize="11" style="componentStyle"/>
+         
+		<labelText labelid="59" width="200" y="374" x="4" />
+        <resetCombobox name="_languages" editable="false" y="374" width="270" x="120" fontsize="11" style="componentStyle">
+            <labeldTextListItem datapath="languagesSet:/item" text="$path{ 'name/text()' }" value="$path{ 'language_id/text()' }"/>
+        </resetCombobox>
+
+		<customEdittext name="_url" enabled="false" width="$once{ parent.width - 10 }" x="5" y="405" text=""/>
+		
+		<simpleLabelButton name="generate" labelid="1526" x="$once{ parent.width-440 }" width="170" y="$once{ parent.height-26 }">
+			<handler name="onclick">
+			<![CDATA[
+				if (parent.email == null) {
+					return;
+				}
+        		parent.display = true;
+				parent.sendInvitationHash.doCall();
+			]]>
+			</handler>
+		</simpleLabelButton>
+		
+        <!-- label: send -->
+		<simpleLabelButton name="send" labelid="218" x="$once{ parent.width-260 }" width="120" y="$once{ parent.height-26 }">
+			<handler name="onclick">
+			<![CDATA[
+				if (parent.email == null) {
+					return;
+				}
+                for (var eg in this.parent.subviews) {
+                    this.parent.subviews[eg].setAttribute('enabled', false);
+                }
+                if (parent.display) {
+                    parent.sendInvitationByHash.doCall();
+                } else {
+                    parent.sendInvitationHash.doCall();
+                }
+				]]>
+			</handler>
+		</simpleLabelButton>
+	
+		<!-- label: cancel -->
+		<simpleLabelButton labelid="219" x="$once{ parent.width-130 }" width="120" y="$once{ parent.height-26 }">
+			<handler name="onclick">
+	    		parent.setAttribute('visibility', 'hidden');
+			</handler>
+		</simpleLabelButton>
+	   
+		<netRemoteCallHib name="sendInvitationByHash" funcname="invitationservice.sendInvitationByHash" remotecontext="$once{ canvas.thishib }" >
+			<netparam name="SID"><method name="getValue">return canvas.sessionId;</method></netparam>
+			<netparam name="invitationHash"><method name="getValue">return this.parent.parent.currentHash;</method></netparam>
+			<netparam name="message"><method name="getValue">return this.parent.parent._message.getText();</method></netparam>
+			<netparam name="subject"><method name="getValue">return this.parent.parent._subject.getText();</method></netparam>
+			<netparam name="language_id"><method name="getValue">return parent.parent._languages.getValue();</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				if (value != null) {
+		    		parent.setAttribute('visibility', 'hidden');
+				} else {
+					new lz.errorPopup(canvas.main_content._content.inner,{error:value});
+				}
+			]]>
+			</handler>   
+		</netRemoteCallHib>
+			
+		<netRemoteCallHib name="sendInvitationHash" funcname="invitationservice.sendInvitationHash" remotecontext="$once{ canvas.thishib }" >
+			<netparam name="sid"><method name="getValue">return canvas.sessionId;</method></netparam>
+			<netparam name="firstname"><method name="getValue">return parent.parent.firstname</method></netparam>
+			<netparam name="lastname"><method name="getValue">return parent.parent.lastname</method></netparam>
+			<netparam name="message"><method name="getValue">return this.parent.parent._message.getText();</method></netparam>
+			<netparam name="email"><method name="getValue">return parent.parent.email;</method></netparam>
+			<netparam name="subject"><method name="getValue">return this.parent.parent._subject.getText();</method></netparam>
+			<netparam name="roomid"><method name="getValue">return hib.currentroomid;</method></netparam>
+			<netparam name="conferencedomain"><method name="getValue">return hib.conferencedomain;</method></netparam>
+			<netparam name="ispasswordProtected"><method name="getValue">return parent.parent._ispasswordProtected.value;</method></netparam>
+			<netparam name="password"><method name="getValue">return parent.parent._password.getText();</method></netparam>
+			<netparam name="valid"><method name="getValue">return parent.parent._valid.value;</method></netparam>
+			<netparam name="validFromDate"><method name="getValue">return parent.parent._valid_from.getText();</method></netparam>
+			<netparam name="validFromTime"><method name="getValue">return parent.parent._timeFrom.getText();</method></netparam>
+			<netparam name="validToDate"><method name="getValue">return parent.parent._valid_to.getText();</method></netparam>
+			<netparam name="validToTime"><method name="getValue">return parent.parent._timeTo.getText();</method></netparam>
+			<netparam name="language_id"><method name="getValue">return parent.parent._languages.getValue();</method></netparam>
+			<netparam name="jNameTimeZone"><method name="getValue">return parent.parent._timeZone.getValue();</method></netparam>
+			<netparam name="sendMail"><method name="getValue">return !parent.parent.display;</method></netparam>
+			
+			<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("sendInvitationHash : ",value);
+				if ($debug) Debug.write("sendInvitationHash : ", (typeof value));
+				if (typeof value == "object") {
+					if (parent.display) {
+						parent.send.setAttribute('enabled', true);
+						parent._message.setAttribute('enabled', true);
+						parent._subject.setAttribute('enabled', true);
+						parent._languages.setAttribute('enabled', true);
+						parent.currentHash = value.hash;
+						parent._url.setAttribute('text', parent.baseUrl + "?invitationHash=" + parent.currentHash + "&language=" + parent._languages.getValue());
+					} else {
+			    		parent.setAttribute('visibility', 'hidden');
+					}
+				} else {
+					new lz.errorPopup(canvas.main_content._content.inner,{error:value});
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>
+	</class>
+</library>
diff --git a/WebContent/src/modules/invitation/library.lzx b/WebContent/src/modules/invitation/library.lzx
new file mode 100644
index 0000000..df5c4ee
--- /dev/null
+++ b/WebContent/src/modules/invitation/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="autoloaderBarOnly.lzx" />
+	<include href="invitationQuickLoader.lzx" />
+	<include href="inviteMainWindow.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/library.lzx b/WebContent/src/modules/library.lzx
new file mode 100644
index 0000000..dd6fe01
--- /dev/null
+++ b/WebContent/src/modules/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="conference/" />
+	<include href="chat/" />
+	<include href="settings/" />
+	<include href="invitation/" />
+	<include href="dashboard/" />
+    <include href="sipintegration/" />
+	<include href="lzrecordcontent" />
+</library>
diff --git a/WebContent/src/modules/lzrecordcontent/library.lzx b/WebContent/src/modules/lzrecordcontent/library.lzx
new file mode 100644
index 0000000..eb17847
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!-- APL author sebawagner -->
+	<resource name="flv_recorder_play_small_rsc" src="resources/webstart_play_small.png" />
+	<resource name="flv_progress_pointer_rsc" src="resources/progress_pointer.swf" />
+	<resource name="flv_recorder_stop_small_rsc" src="resources/webstart_stop_small.png" />
+</library>
diff --git a/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf b/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf
new file mode 100644
index 0000000..06eeb13
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf
Binary files differ
diff --git a/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png b/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png
new file mode 100644
index 0000000..a9a33ed
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png
Binary files differ
diff --git a/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png b/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png
new file mode 100644
index 0000000..6388bd8
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png
Binary files differ
diff --git a/WebContent/src/modules/settings/library.lzx b/WebContent/src/modules/settings/library.lzx
new file mode 100644
index 0000000..3b48897
--- /dev/null
+++ b/WebContent/src/modules/settings/library.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="image_loading_placeholder_rsc" 
+			  src="resources/loading_symbol.swf" />
+	
+	<!-- APL Author sebawagner -->
+	<resource name="private_message_select_part_rsc" 
+			  src="resources/select_part.png" />	
+		
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_send_rsc" 
+			  src="resources/email_go.png" />	 
+		
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_add_rsc" 
+			  src="resources/email_add.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_trash_rsc" 
+			  src="resources/email_delete.png" />	
+	
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_folder_add_rsc" 
+			  src="resources/folder_add.png" />		
+	
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_folder_rsc" 
+			  src="resources/folder.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_inbox_rsc" 
+			  src="resources/basket_put.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="user_contact_calendar_add_rsc" 
+              src="resources/calendar_add.png" />  
+	
+	<!-- FamFam Icon Set -->		  
+	<resource name="user_contact_calendar_delete_rsc" 
+              src="resources/calendar_delete.png" /> 
+      
+    <!-- FamFam Icon Set -->	        
+    <resource name="user_contact_calendar_system_undo_rsc" 
+              src="resources/arrow_undo.png" />   
+   
+    <include href="privatemessages/" />
+    <include href="usercontacts/" />
+    
+    <include href="viewUserProfile.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/privatemessages/library.lzx b/WebContent/src/modules/settings/privatemessages/library.lzx
new file mode 100644
index 0000000..c8cf80f
--- /dev/null
+++ b/WebContent/src/modules/settings/privatemessages/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="newPrivateMessage.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx b/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx
new file mode 100644
index 0000000..82f5413
--- /dev/null
+++ b/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="newPrivateMessage" extends="guiPresenter" labelid="1209" isdragable="false" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="250" height="154" >
+	
+	<attribute name="refObj" value="null"/>
+	
+	<attribute name="userObject" value="null" />
+	
+	<attribute name="user_id" value="0" type="number"/>
+	
+	<attribute name="parentMessageId" value="0" type="number" />
+	
+	<attribute name="receipents" value="null" />
+	
+	<attribute name="saveRefObj" value="null" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			if (this.userObject != null) {
+				
+				var tString = this.userObject.firstname + ' ' + this.userObject.lastname  + ' ' 
+							+ '<' + this.userObject.adresses.email + '>';
+				
+				this._to.sendUpdateText = false;
+				this._to.setAttribute("text",tString);
+				this._to.sendUpdateText = true;
+			} else if (this.user_id != 0) {
+				this.getUserById.doCall();
+			}
+		]]>
+	</handler>
+	
+	<netRemoteCallHib name="getUserById" funcname="userservice.getUserById" remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue">return parent.parent.user_id;</method></netparam>
+        <handler name="ondata" args="value">
+       	<![CDATA[
+            if($debug) Debug.write("[admin]userValueForm/getUserById: ",value.lastname);
+            parent.userObject = value;
+            var tString = value.firstname + ' ' + value.lastname  + ' ' 
+                            + '<' + value.adresses.email + '>';
+                
+            parent._to.sendUpdateText = false;
+            parent._to.setAttribute("text",tString);
+            parent._to.sendUpdateText = true;
+        ]]>
+        </handler>
+    </netRemoteCallHib>
+	
+	<handler name="onclose">
+		if (this.refObj != null) {
+		    this.refObj.newMessageActive = false;
+		}
+	</handler>
+	
+	<method name="send">
+		<![CDATA[
+		
+			var tAString = this._to.getText().split(",");
+			
+			this.receipents = new Array();
+			
+			for (var i=0;i<tAString.length;i++) {
+				
+				var sString = tAString[i];
+				
+				var t1 = sString.indexOf("<");
+				var t2 = sString.indexOf(">");
+				
+				if ($debug) Debug.write("++ ",i,sString,t1,t2);
+				
+				var email = sString;
+				if (t1 > -1 && t2 > -1) {
+					email = sString.substring(t1 + 1, t2);
+				}
+				
+				if ($debug) Debug.write("++ ",email);
+				
+				this.receipents.push(email);
+				
+			}
+			
+			if ($debug) Debug.write("receipents :: ",this.receipents);
+			if ($debug) Debug.write("receipents :: ",this._richText.getText());
+			if ($debug) Debug.write("composeMail, parentId :: ",this.parentMessageId);
+		
+			this.composeMail.doCall();
+		]]>
+	</method>
+	
+	<!--
+	public Long composeMail(String SID, Map receipents, String subject, String message, Boolean bookedRoom, 
+    		Date validFromDate, String validFromTime, Date validToDate, String validToTime,
+    		Long parentMessageId, Long roomtype_id)
+	 -->
+	<netRemoteCallHib name="composeMail" funcname="userservice.composeMail" remotecontext="$once{ canvas.thishib }" >    
+    		
+    		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		    <netparam><method name="getValue">return parent.parent.receipents</method></netparam>
+            <netparam><method name="getValue">return parent.parent._subject.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent._richText.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent._bookRoom.getValue();</method></netparam>
+            <netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent._valid_from.getDate());</method></netparam>
+            <netparam><method name="getValue">return parent.parent._timeFrom.getText();</method></netparam>
+            <netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent._valid_to.getDate());</method></netparam>
+            <netparam><method name="getValue">return parent.parent._timeTo.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent.parentMessageId;</method></netparam>
+            <netparam><method name="getValue">return Number(parent.parent._roomtype.getValue());</method></netparam>
+            <!--String domain, String port, String webapp-->
+            <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+            <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+            <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+            <handler name="ondata" args="value">
+            	<![CDATA[
+                	//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("composeMail : ",value);
+			if (parent.saveRefObj != null) {
+				parent.saveRefObj.saveNotification(parent._bookRoom.getValue());
+			}
+			parent.close();
+           ]]>
+		</handler>   
+	</netRemoteCallHib>	
+	
+	<labelText name="_labelTo" x="2" labelid="1210" y="24"/>
+	
+	<customScrollEdittext name="_to" y="22" x="80" width="$once{ parent.width-82 }" 
+						  text="" height="60">
+		
+		<attribute name="sendUpdateText" value="true" type="boolean"/>
+		<attribute name="sendSingleUpdateText" value="true" type="boolean"/>
+		
+		<handler name="oninit">
+			this.closeDelegate = new LzDelegate( this, "onblurFunction" );
+			this._list.refObj = this;
+			this._list.setAttribute("width",this.width);
+		</handler>
+		
+		<handler name="ontextChange" args="t">
+			<![CDATA[
+				if ($debug) Debug.write("-- ontextChange ",this.sendUpdateText,t);
+				
+				if (!this.sendUpdateText) {
+					return;
+				}
+				
+				var tAString = t.split(",");
+				
+				var tString = tAString[tAString.length-1];
+				
+				if ($debug) Debug.write("-1- tString ",tString);
+				
+				tString = tString.split(' ').join('');
+				
+				if ($debug) Debug.write("-2- tString ",tString);
+				
+				if (tString != "") {
+					
+					this.startSearch(tString);
+					
+				}
+				
+			]]>
+		</handler>
+		
+		<method name="addText" args="txt">
+			<![CDATA[
+			
+				if ($debug) Debug.write("-- addText ",txt);
+				
+				var t = this.getText();
+				var tAString = t.split(",");
+				
+				var nString = "";
+				
+				if ($debug) Debug.write("-- tAString.length ",tAString.length);
+				
+				for (var i=0; i<tAString.length-1; i++) {
+					if (i!=0) {
+						nString += ", ";
+					}
+					nString += tAString[i];
+					if ($debug) Debug.write("-- nString 1 ",nString);
+				}
+				
+				if ($debug) Debug.write("-- nString 2 ",nString);
+				
+				if (nString != "") {
+					nString += ", "
+				}
+				
+				nString += txt;
+				
+				if ($debug) Debug.write("-- nString 3 ",nString);
+				
+				this.sendUpdateText = false;
+				this.setAttribute("text",nString);
+				this.sendUpdateText = true;
+			
+			]]>
+		</method>
+		
+		<handler name="onblur">
+			<![CDATA[
+			
+				if (!this.sendUpdateText) {
+					return;
+				}
+				
+				lz.Timer.addTimer( this.closeDelegate, 10 );
+				
+			]]>
+		</handler>				
+				
+		<method name="onblurFunction" args="refObj" >
+			<![CDATA[
+				if ($debug) Debug.write("-- onblur");
+				
+				if (!this.sendSingleUpdateText) {
+					this.sendSingleUpdateText = true;
+					return;
+				}
+				
+				if (this._list.visibility == "visible") {
+					this._list.setAttribute("visibility","hidden");
+				}
+				
+				var t = this.getText();
+				var tAString = t.split(", ");
+				
+				var lastString = tAString[tAString.length-1];
+				
+				var lastChar = lastString.charAt(lastString.length-1);
+
+				if (lastChar != ">") {
+					var nString = "";
+					
+					for (var i=0;i<tAString.length-1;i++) {
+						if (i!=0) {
+							nString += ",";
+						}
+						nString += tAString[i];
+					}
+					
+					this.sendUpdateText = false;
+					this.setAttribute("text",nString);
+					this.sendUpdateText = true;
+					
+				}
+				
+			]]>
+		</method>
+		
+		<method name="startSearch" args="tString">
+			<![CDATA[
+			
+				if ($debug) Debug.write("startSearch :: ",tString);
+				var tResultA = new Array();
+				
+				for (var i=0; i<canvas.userContacts.length; i++) {
+					
+					if (canvas.userContacts[i].contact.firstname.startsWith(tString) 
+						|| canvas.userContacts[i].contact.lastname.startsWith(tString) 
+						|| canvas.userContacts[i].contact.adresses.email.startsWith(tString) ) {
+					
+						tResultA.push(canvas.userContacts[i]);
+							
+					}
+					
+				}
+				
+				if (tResultA.length > 0) {
+					this._list.removeAllItems();
+					
+					for (var k=0;k<tResultA.length;k++) {
+						
+						this._list.addItem(tResultA[k].contact.firstname +' '+ tResultA[k].contact.lastname + ' &#60;' + tResultA[k].contact.adresses.email + '&#62;', tResultA[k].contact.firstname +' '+ tResultA[k].contact.lastname + ' <' + tResultA[k].contact.adresses.email + '>'); 
+						
+					}
+					
+					
+				} else {
+					
+					this._list.removeAllItems();
+					
+					this._list.addItem("No Contact Found","0");
+					
+				}
+				
+				this.sendUpdateText = false;
+				this._list.sendUpdateAttr = false;
+				this._list.selectItemAt(0);
+				this._list.sendUpdateAttr = true;
+				
+				//lz.Focus.setFocus(this._list, true);
+				this.sendUpdateText = true;
+				
+				//this._list.setHilite(this._list.getItemAt(0));
+				this._list.setAttribute("visibility","visible");
+				
+				if ($debug) Debug.write("LIST :1: ",this._list.sendUpdateAttr);
+			
+			]]>
+		</method>
+		<floatinglist name="_list" width="100" 
+					  attach="bottom" visibility="hidden">
+			<attribute name="sendUpdateAttr" value="true" type="boolean"/>
+			<attribute name="refObj" value="null"/>
+			<handler name="onfocus">
+				if ($debug) Debug.write("onfocus");
+				this.refObj.sendSingleUpdateText = false;
+			</handler>
+			<handler name="onselect" args="sel">
+				if ($debug) Debug.write("onselect :1: ",this.sendUpdateAttr);
+				if (this.sendUpdateAttr) {
+					if ($debug) Debug.write("onselect :2: ",sel.value);
+					if (sel.value != "0") {
+						if ($debug) Debug.write("this.parent :: ",this.parent);
+						this.refObj.addText(sel.value);
+						this.setAttribute("visibility","hidden");
+					}
+				}
+			</handler>
+            <textlistitem text="one"/>
+            <textlistitem text="two"/>
+        </floatinglist>
+	</customScrollEdittext>
+	
+	<labelText name="_labelSubject" x="2" labelid="1211" y="86"/>
+	
+	<customEdittext name="_subject" y="84" x="80" width="$once{ parent.width-82 }" />
+
+	<customScrollEdittext name="_richText" y="108" clip="true" x="1"
+		width="$once{ parent.width-2 }" height="$once{ parent.height-225 }">
+		
+	</customScrollEdittext> 	
+	
+	<labelCheckbox name="_bookRoom" labelid="1218"
+				   width="270" y="$once{ parent.height-120 }" x="4">
+		<handler name="onvalue" args="v">
+			if ($debug) Debug.write("onvalue ",v);
+			if (parent._hideRoomConfig != null) {
+				parent._hideRoomConfig.setAttribute("visibility", v ? "hidden" : "visible");
+			}
+		</handler>
+	</labelCheckbox>
+	
+	<view name="_roomConfigBG" width="290" height="76" bgcolor="0xDDDDDD" 
+		   opacity="0.1" y="$once{ parent.height-104 }" x="2">
+	</view>
+	
+	<labelText labelid="194" width="200" y="$once{ parent.height-100 }" resize="false" x="4"/>  
+    <resetCombobox name="_roomtype" width="164" y="$once{ parent.height-100 }" x="120" editable="false" fontsize="11">
+        <handler name="oninit" >
+        <![CDATA[
+            for (var i=0;i<canvas.roomTypesInitValues.length;i++){
+                this.addItem(canvas.roomTypesInitValues[i].label.value,canvas.roomTypesInitValues[i].roomtypes_id);
+            }
+            this.selectItemAt(0);
+        ]]>
+        </handler> 
+    </resetCombobox> 
+        
+	<labelText labelid="1219" width="200" y="$once{ parent.height-76 }" resize="false" x="4"/>  
+	<dateField x="120" y="$once{ parent.height-76 }" name="_valid_from" 
+			   setDefaultToday="true" additionalDay="1" />		
+	<customEdittext name="_timeFrom" 
+					width="50" x="232" y="$once{ parent.height-76 }" 
+					regexpType="time">
+		<handler name="oninit">
+			<![CDATA[
+				var tDate = new Date();
+				var hour = tDate.getHours();
+				if (hour < 10) {
+					hour = "0"+hour;
+				}
+				
+				var minutes = tDate.getMinutes();
+				if (minutes < 15) {
+					minutes = "00";
+				} else if (minutes < 30) {
+					minutes = "15";
+				} else if (minutes < 45) {
+					minutes = "30";
+				} else {
+					minutes = "45";
+				}
+				
+				var hour2 = tDate.getHours()+1;
+				if (hour2 < 10) {
+					hour2 = "0"+hour2;
+				} else if (hour2 > 25) {
+					hour2 = 24;
+				}
+				
+				this.setAttribute("text",hour+":"+minutes);
+				parent._timeTo.setAttribute("text",hour2+":"+minutes);
+			]]>
+		</handler>
+	</customEdittext>
+        
+    <labelText labelid="1220" width="200" y="$once{ parent.height-52 }" resize="false" x="4"/>  
+	<dateField x="120" y="$once{ parent.height-52 }" name="_valid_to" 
+			   setDefaultToday="true" additionalDay="1" />		
+	<customEdittext name="_timeTo" 
+					width="50" x="232" y="$once{ parent.height-52 }" 
+					regexpType="time">
+	</customEdittext>
+	
+	<!-- allowUserQuestions Description -->          
+    <view resource="messagebox_info_rsc" x="302" y="$once{ parent.height-96 }" />
+    
+    <labelText labelid="1221" x="324" y="$once{ parent.height-96 }" fontstyle="italic"
+               multiline="true" width="$once{ parent.width-332 }" /> 
+	
+	<view name="_hideRoomConfig" width="290" height="76" bgcolor="0xFFFFFF" 
+		   opacity="0.6" y="$once{ parent.height-104 }" x="2">
+		<handler name="onclick">
+			parent._bookRoom.setValue(true);
+		</handler>
+	</view>
+		   
+	<!-- label: send -->
+	<simpleLabelButton labelid="218" x="$once{ parent.width-260 }" width="120" y="$once{ parent.height-26 }">
+		<handler name="onclick">
+			<![CDATA[
+                parent.baseUrl = canvas.getAppBaseUrl();
+				
+				parent.send();
+			]]>
+		</handler>
+	</simpleLabelButton>
+
+	<!-- label: cancel -->
+	<simpleLabelButton labelid="219" x="$once{ parent.width-130 }" width="120" y="$once{ parent.height-26 }">
+		<handler name="onclick">
+			parent.close();
+		</handler>
+	</simpleLabelButton>
+	   		   
+						  
+</class>	
+	
+</library>
diff --git a/WebContent/src/modules/settings/resources/arrow_undo.png b/WebContent/src/modules/settings/resources/arrow_undo.png
new file mode 100644
index 0000000..6972c5e
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/arrow_undo.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/basket_delete.png b/WebContent/src/modules/settings/resources/basket_delete.png
new file mode 100644
index 0000000..1349974
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/basket_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/basket_put.png b/WebContent/src/modules/settings/resources/basket_put.png
new file mode 100644
index 0000000..be62faa
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/basket_put.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/calendar_add.png b/WebContent/src/modules/settings/resources/calendar_add.png
new file mode 100644
index 0000000..17679db
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/calendar_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/calendar_delete.png b/WebContent/src/modules/settings/resources/calendar_delete.png
new file mode 100644
index 0000000..69a3b10
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/calendar_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_add.png b/WebContent/src/modules/settings/resources/email_add.png
new file mode 100644
index 0000000..6c93368
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_delete.png b/WebContent/src/modules/settings/resources/email_delete.png
new file mode 100644
index 0000000..a9932b1
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_go.png b/WebContent/src/modules/settings/resources/email_go.png
new file mode 100644
index 0000000..4a6c5d3
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_go.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/folder.png b/WebContent/src/modules/settings/resources/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/folder.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/folder_add.png b/WebContent/src/modules/settings/resources/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/folder_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/loading_symbol.fla b/WebContent/src/modules/settings/resources/loading_symbol.fla
new file mode 100644
index 0000000..59efc05
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/loading_symbol.fla
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/loading_symbol.swf b/WebContent/src/modules/settings/resources/loading_symbol.swf
new file mode 100644
index 0000000..703fae7
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/loading_symbol.swf
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/select_part.fla b/WebContent/src/modules/settings/resources/select_part.fla
new file mode 100644
index 0000000..57b97e3
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/select_part.fla
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/select_part.png b/WebContent/src/modules/settings/resources/select_part.png
new file mode 100644
index 0000000..fbd6488
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/select_part.png
Binary files differ
diff --git a/WebContent/src/modules/settings/usercontacts/library.lzx b/WebContent/src/modules/settings/usercontacts/library.lzx
new file mode 100644
index 0000000..80e47c5
--- /dev/null
+++ b/WebContent/src/modules/settings/usercontacts/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="userContacts.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/usercontacts/userContacts.lzx b/WebContent/src/modules/settings/usercontacts/userContacts.lzx
new file mode 100644
index 0000000..9e25868
--- /dev/null
+++ b/WebContent/src/modules/settings/usercontacts/userContacts.lzx
@@ -0,0 +1,530 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="userContacts" extends="view" height="${ parent.height }"
+	   width="276" x="$once{ canvas.width-this.width + 2 }">
+	
+	<method name="reload">
+		this._pendingContacts._table.getPendingUserContacts.doCall();
+		this._availableContacts._table.getUserContacts.doCall();
+	</method>
+	
+	<!--
+	public Long changePendingStatusUserContacts(
+		String SID, Long userContactId, Boolean pending) {
+	 -->
+	<view name="_pendingContacts" height="$once{ parent.height/2 }" >
+		
+		<!--
+		public List<UserContacts> getPendingUserContacts(String SID)
+		 -->
+		<handler name="oninit">
+			this._table.getPendingUserContacts.doCall();
+		</handler> 
+	    		 
+		
+		<labelText name="_labelPendingUsers" x="2" labelid="1189" fontstyle="bold" />
+		
+		<turnOverListOrderedPaged name="_table" showTopBar="false" x="2" 
+					  height="$once{ parent.height }" 
+		             y="0" itemHeight="40" listLabelId="1184" headerHeight="22" 
+		             listItemName="pendingContactsListItem" menuBarXIndent="100"
+		             multiselect="false" width="270">
+			
+			<netRemoteCallHib name="getPendingUserContacts" funcname="userservice.getPendingUserContacts" 
+					  remotecontext="$once{ canvas.thishib }" >      
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("getPendingUserContacts: ",value);
+			    		
+			    		this.parent.initValues(value.length);
+			    		
+			    		if (value.length == 0) {
+			    			parent.parent.setAttribute("height",20);
+			    			parent.setAttribute("visibility","hidden");
+			    		}
+			    		
+			    		this.parent.parent._labelPendingUsers.setAttribute("text",canvas.getLabelName(this.parent.parent._labelPendingUsers.labelid)+' <i>( '+value.length+' </i>)');  
+			    		
+			    		var tResult = new Array();
+			    		for (var t=0;t<value.length;t++) {
+			    			for (var i=0;i<canvas.salutationsInitValues.length;i++){
+			    				if (canvas.salutationsInitValues[i].salutations_id == value[t].owner.salutations_id) {
+					                value[t].owner["title"] = canvas.salutationsInitValues[i].label.value;
+					                break;
+			    				}
+				            }
+			    			tResult.push(value[t]);
+			    		}
+			    		
+			    		this.parent.renderContent(tResult);
+			    		
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		
+			<handler name="oninit">
+	            this.addHeaderItem(1180,190);
+	            this.addHeaderItem(1185,60);
+	        </handler>
+	        
+	        <handler name="onclickedItem" args="refObj">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("onclickedItem ",refObj.refObj.userContactId);
+	                
+	            ]]>
+	        </handler>
+	        
+	        <method name="setPendingStatus" args="userContactId,pending">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("setPendingStatus ",userContactId,pending);
+	                
+	                this.changePendingStatusUserContacts.pending = pending;
+	                this.changePendingStatusUserContacts.userContactId = userContactId;
+	                this.changePendingStatusUserContacts.doCall();
+	            ]]>
+	        </method>
+	        
+	        <!--
+			public Long changePendingStatusUserContacts(String SID, Long userContactId, Boolean pending)
+			 -->
+		    <netRemoteCallHib name="changePendingStatusUserContacts" funcname="userservice.changePendingStatusUserContacts" 
+						  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+				<attribute name="userContactId" value="0" type="number" />
+				<attribute name="pending" value="true" type="boolean" />
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+				<netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+		    	<netparam><method name="getValue"> return parent.pending; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("changePendingStatusUserContacts: ",value);
+			    		parent.parent.parent.reload();
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+	        
+	        <method name="updatePendingStatus" args="itemId">
+	        	this.renderList[itemId]["pending"] = true;
+	        </method>
+	        
+	        <method name="renderContent" args="rList">
+	            <![CDATA[
+	            
+	            	this.renderList = rList;
+	            
+	                this.isLoaded = true;
+	                var list = this._innerlist._inn._inn;
+	                
+	                if (this.renderList == null) {
+	                	this.renderList = new Array();
+	                }
+	                //this.renderList = records;
+	                var records = this.renderList;
+	                this._innerlist._inn.setAttribute("y",0);
+	                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+	                this._innerlist._inn.resetItems();
+	                
+	                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+	                
+	                this._records.setAttribute("text",records.length);
+	                
+	                for (var i=0;i<list.subviews.length;i++){
+	                    
+	                    //if (i % 2 == 0) {
+	                    //    list.subviews[i].setIsSecond(true);
+	                    //} else {
+	                    //    list.subviews[i].setIsSecond(false);
+	                    //}
+	                    
+	                    if (records.length > i) {
+	                    	
+	                    	//if ($debug) Debug.write("Render Item ",records[i]);
+	                        
+	                        list.subviews[i].setAttribute("clickable",true);
+	                        list.subviews[i].refObj = records[i];
+	                        
+	                        if (records[i]["isselected"] && records[i].isselected) {
+	                            list.subviews[i].isselected = true;
+	                        } else {
+	                            list.subviews[i].isselected = false;
+	                        }
+	                        
+	                        list.subviews[i].setAttribute("username",records[i].owner.title + ' ' + records[i].owner.firstname+' '+records[i].owner.lastname);
+	                        
+	                        list.subviews[i].setAttribute("itemId",i);
+	                        
+	                    } else {
+	                        
+	                        list.subviews[i].refObj = null;
+	                        
+	                        list.subviews[i].isselected = false;
+	                        list.subviews[i].onmouseout.sendEvent();
+	                        
+	                        list.subviews[i].setAttribute("username",'');
+	                        
+	                        list.subviews[i].setAttribute("itemId","");
+	                        
+	                        list.subviews[i].setAttribute("clickable",false);
+	                        
+	                    }
+	                    
+	                }
+	                
+	                
+	                this.sendInitialWidthUpdate();
+	                
+	            ]]>
+	        </method>   
+		        
+	        <handler name="onScrollItem" args="item">
+	            <![CDATA[
+	                if (this.renderList.length > item.itemId) {
+	                    item.setAttribute("clickable",true);
+	                    item.refObj = this.renderList[item.itemId];
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+	                        item.isselected = true;
+	                        item.onmouseout.sendEvent();
+	                    } else {
+	                        item.isselected = false;
+	                        item.onmouseout.sendEvent();
+	                    }
+	                    
+	                    //if ($debug) Debug.write(item.itemId);
+	                    
+	                    item.setAttribute("username",this.renderList[item.itemId].owner.title + ' ' + this.renderList[item.itemId].owner.firstname+' '+this.renderList[item.itemId].owner.lastname);
+	                        
+	                    item.setAttribute("itemId",item.itemId);
+	                    
+	                } else {
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    item.isselected = false;
+	                    item.onmouseout.sendEvent();
+	                    
+	                    item.refObj = null;
+	                    
+	                    item.setAttribute("username","");
+	                    
+	                    item.setAttribute("itemId","");
+	                    
+	                    item.setAttribute("clickable",false);
+	                }
+	                
+	            ]]>
+	        </handler>
+	        
+			
+		</turnOverListOrderedPaged>
+		
+	</view> 
+	
+	<view name="_availableContacts" y="${ parent._pendingContacts.height + 2 }"
+		  height="${ parent.height - parent._pendingContacts.height - 4 }">
+		
+		
+		<!--
+		public List<UserContacts> getPendingUserContacts(String SID)
+		 -->
+		<handler name="oninit">
+			this._table.getUserContacts.doCall();
+		</handler> 
+		
+		<handler name="onheight" args="h">
+			this._table.renderByHeightChange();
+		</handler>
+	    		 
+		
+		<labelText name="_labelPendingUsers" x="2" labelid="1188" fontstyle="bold" />
+		
+		<turnOverListOrderedPaged name="_table" showTopBar="false" x="2" height="${ parent.height }" 
+		             y="0" itemHeight="40" listLabelId="1184" headerHeight="22" 
+		             listItemName="contactsListItem" menuBarXIndent="100"
+		             multiselect="false" width="270">
+			
+	        <method name="renderByHeightChange" >
+        	
+	        	this.clearList();
+	        	this._innerlist._inn.initItems(this.listItemName);
+	        	
+	        	this.renderContent(this.renderList);
+	        </method>
+			
+			<netRemoteCallHib name="getUserContacts" funcname="userservice.getUserContacts" 
+					  remotecontext="$once{ canvas.thishib }" >      
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("getUserContacts: ",value);
+			    		
+			    		canvas.userContacts = value;
+			    		
+			    		this.parent.initValues(value.length);
+			    		
+			    		this.parent.parent._labelPendingUsers.setAttribute("text",canvas.getLabelName(this.parent.parent._labelPendingUsers.labelid)+' <i>( '+value.length+' </i>)')
+			    		
+			    		var tResult = new Array();
+			    		for (var t=0;t<value.length;t++) {
+			    			value[t].contact["shareCalendar"] = value[t].shareCalendar;
+			    			value[t].contact["pending"] = value[t].pending;
+			    			value[t].contact["userContactId"] = value[t].userContactId;
+			    			for (var i=0;i<canvas.salutationsInitValues.length;i++){
+			    				if (canvas.salutationsInitValues[i].salutations_id == value[t].contact.salutations_id) {
+					                value[t].contact["title"] = canvas.salutationsInitValues[i].label.value;
+					                break;
+			    				}
+				            }
+			    			tResult.push(value[t].contact);
+			    		}
+			    		
+			    		this.parent.renderContent(tResult);
+			    		
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		
+			<handler name="oninit">
+	            this.addHeaderItem(1180,170);
+	            this.addHeaderItem(1185,80);
+	        </handler>
+	        
+	        <handler name="onclickedItem" args="refObj">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("onclickedItem ",refObj.refObj.userContactId);
+	                
+	            ]]>
+	        </handler>
+	        
+	        <method name="addMessage" args="userObject">
+	        	parent.parent.parent._privateMessages.newMessage(userObject);
+	        </method>
+	        
+	        <method name="removeContactUserMethod" args="userContactId">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("removeUser ",userContactId,pending);
+	                
+	                this.removeContactUser.userContactId = userContactId;
+	                this.removeContactUser.doCall();
+	            ]]>
+	        </method>
+	        
+	        <!--
+			public Integer removeContactUser(String SID, Long userContactId)
+			 -->
+		    <netRemoteCallHib name="removeContactUser" funcname="userservice.removeContactUser" 
+						  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+				<attribute name="userContactId" value="0" type="number" />
+				<attribute name="pending" value="true" type="boolean" />
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+				<netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("removeContactUser: ",value);
+			    		parent.parent.parent.reload();
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		    
+		    <method name="setCalendarSharing" args="userContactId,doShare">
+                <![CDATA[
+                
+                    if ($debug) Debug.write("setPendingStatus ",userContactId,doShare);
+                    
+                    this.shareCalendarUserContact.doShare = doShare;
+                    this.shareCalendarUserContact.userContactId = userContactId;
+                    this.shareCalendarUserContact.doCall();
+                ]]>
+            </method>
+            
+            <!--
+            public void shareCalendarUserContact(String SID, Long userContactId, Boolean shareCalendar)
+             -->
+            <netRemoteCallHib name="shareCalendarUserContact" funcname="userservice.shareCalendarUserContact" 
+                          remotecontext="$once{ canvas.thishib }"  >      
+                <attribute name="userContactId" value="0" type="number" />
+                <attribute name="doShare" value="true" type="boolean" />
+                <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+                <netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+                <netparam><method name="getValue"> return parent.doShare; </method></netparam>
+                <handler name="ondata" args="value">
+                    <![CDATA[
+                        if ($debug) Debug.write("changePendingStatusUserContacts: ",value);
+                        parent.parent.parent.reload();
+                    ]]>
+                </handler>
+            </netRemoteCallHib> 
+	        
+	        <method name="renderContent" args="rList">
+	            <![CDATA[
+	            
+	            	this.renderList = rList;
+	            
+	                this.isLoaded = true;
+	                var list = this._innerlist._inn._inn;
+	                
+	                if (this.renderList == null) {
+	                	this.renderList = new Array();
+	                }
+	                //this.renderList = records;
+	                var records = this.renderList;
+	                this._innerlist._inn.setAttribute("y",0);
+	                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+	                this._innerlist._inn.resetItems();
+	                
+	                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+	                
+	                this._records.setAttribute("text",records.length);
+	                
+	                for (var i=0;i<list.subviews.length;i++){
+	                    
+	                    //if (i % 2 == 0) {
+	                    //    list.subviews[i].setIsSecond(true);
+	                    //} else {
+	                    //    list.subviews[i].setIsSecond(false);
+	                    //}
+	                    
+	                    if (records.length > i) {
+	                    	
+	                    	//if ($debug) Debug.write("Render Item ",records[i]);
+	                        
+	                        list.subviews[i].setAttribute("clickable",true);
+	                        list.subviews[i].refObj = records[i];
+	                        
+	                        if (records[i]["isselected"] && records[i].isselected) {
+	                            list.subviews[i].isselected = true;
+	                        } else {
+	                            list.subviews[i].isselected = false;
+	                        }
+	                        
+	                        var shareCalendar = records[i].shareCalendar;
+                            if (shareCalendar == null) {
+                                shareCalendar = false;
+                            }
+                        
+	                        list.subviews[i].setAttribute("shareCalendar",shareCalendar);
+	                        list.subviews[i].setAttribute("username",records[i].title + ' ' + records[i].firstname+' '+records[i].lastname);
+	                        
+	                        list.subviews[i].setAttribute("itemId",i);
+	                        
+	                    } else {
+	                        
+	                        list.subviews[i].refObj = null;
+	                        
+	                        list.subviews[i].isselected = false;
+	                        list.subviews[i].onmouseout.sendEvent();
+	                        
+	                        list.subviews[i].setAttribute("shareCalendar",false);
+	                        list.subviews[i].setAttribute("username",'');
+	                        
+	                        list.subviews[i].setAttribute("itemId","");
+	                        
+	                        list.subviews[i].setAttribute("clickable",false);
+	                        
+	                    }
+	                    
+	                }
+	                
+	                
+	                this.sendInitialWidthUpdate();
+	                
+	            ]]>
+	        </method>   
+		        
+	        <handler name="onScrollItem" args="item">
+	            <![CDATA[
+	                if (this.renderList.length > item.itemId) {
+	                    item.setAttribute("clickable",true);
+	                    item.refObj = this.renderList[item.itemId];
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+	                        item.isselected = true;
+	                        item.onmouseout.sendEvent();
+	                    } else {
+	                        item.isselected = false;
+	                        item.onmouseout.sendEvent();
+	                    }
+	                    
+	                    //if ($debug) Debug.write(item.itemId);
+	                    var shareCalendar = this.renderList[item.itemId].shareCalendar;
+	                    if (shareCalendar == null) {
+	                    	shareCalendar = false;
+	                    }
+	                    
+	                    item.setAttribute("shareCalendar",shareCalendar);
+	                    item.setAttribute("username",this.renderList[item.itemId].title + ' ' + this.renderList[item.itemId].firstname+' '+this.renderList[item.itemId].lastname);
+	                        
+	                    item.setAttribute("itemId",item.itemId);
+	                    
+	                } else {
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    item.isselected = false;
+	                    item.onmouseout.sendEvent();
+	                    
+	                    item.refObj = null;
+	                    
+	                    item.setAttribute("shareCalendar",false);
+	                    item.setAttribute("username","");
+	                    
+	                    item.setAttribute("itemId","");
+	                    
+	                    item.setAttribute("clickable",false);
+	                }
+	                
+	            ]]>
+	        </handler>
+	        
+			
+		</turnOverListOrderedPaged>
+		
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/settings/viewUserProfile.lzx b/WebContent/src/modules/settings/viewUserProfile.lzx
new file mode 100644
index 0000000..9a76378
--- /dev/null
+++ b/WebContent/src/modules/settings/viewUserProfile.lzx
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="viewUserProfileWindow" extends="guiPresenter" labelid="1235" isdragable="true" 
+    minimizable="true" maximizable="false" fullToolBar="true" y="100" x="$once{ (parent.width-this.width)/2 }"
+    resizeable="false" width="470" height="$once{ parent.height-this.y-10 }" >
+	
+	<attribute name="userId" value="0" type="number"/>
+	
+	<handler name="oninit">
+		this.getUserById.doCall();
+	</handler>
+	
+	<!--
+	public Users getUserById(String SID, long user_id)
+	 -->
+	<netRemoteCallHib name="getUserById" funcname="userservice.getUserById" 
+			  remotecontext="$once{ canvas.thishib }" >      
+		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.userId; </method></netparam>
+    	<handler name="ondata" args="value">
+   		<![CDATA[
+    		parent.setAttribute("title",parent.title+" "+value.firstname+" "+value.lastname);
+    		this.parent.viewUserProfile.viewUserProfile.initFields(value);
+   		]]>
+    	</handler>
+    </netRemoteCallHib>	
+	
+    <!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.viewUserProfile.viewUserProfile.userObject.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+	
+	<view name="viewUserProfile" y="24" height="$once{ parent.height-60 }" 
+		  width="$once{ parent.width-2 }" clip="true">
+		
+		<viewUserProfile name="viewUserProfile" />
+		
+		<om_vscrollbar />
+		
+	</view>
+	
+	<simpleLabelButton labelid="1253" width="190" x="5" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            new lz.newPrivateMessage(canvas,{
+                                x:200,y:120,
+                                refObj:null,
+                                minimizable:true,
+                                maximizable:true,
+                                isdragable:true,
+                                userObject:null,
+                                user_id:parent.viewUserProfile.viewUserProfile.userObject.user_id,
+                                width:canvas.width-300,
+                                height:canvas.height-130
+                            });
+        </handler>
+    </simpleLabelButton>  
+	
+	<simpleLabelButton labelid="1186" width="160" x="$once{ parent.width - 270 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		if (hib.userobject.user_id == parent.viewUserProfile.viewUserProfile.userObject.user_id) {
+                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+                return;
+            }
+            parent.requestUserToContactList.doCall();
+    	</handler>
+    </simpleLabelButton>   
+	
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+	
+</class>	
+	
+<!--- User Profile Setting Panel -->
+<class name="viewUserProfile" extends="view" >
+	
+	<attribute name="userObject" value="null" />
+			
+	<method name="initFields" args="obj">
+    	<![CDATA[
+    	    this.userObject = obj;
+	        this._userpic.setAttribute('src', canvas.getPictureUrl(obj.pictureuri
+				, '&moduleName=remoteuserprofile&remoteUserid='+obj.user_id));
+	        
+	        var tUserName = "<u><FONT color='#0000CC'><a href='asfunction:_root.searchUsers,"+ this.removeWhitespace(obj.firstname) +"'>" + this.removeWhitespace(obj.firstname) + "</a></FONT></u>";
+    			
+	        tUserName += " <u><FONT color='#0000CC'><a href='asfunction:_root.searchUsers,"+ this.removeWhitespace(obj.lastname) +"'>" + this.removeWhitespace(obj.lastname) + "</a></FONT></u>";
+
+    		this.timezone.setAttribute("text",this.userObject.timeZoneId);
+    	
+    		this.username.setAttribute("text",tUserName);
+    		
+    		this.memberSince.setAttribute("text",parseDateToString(this.userObject.starttime));
+    		
+    		var aOfferings = obj.userOffers.split(",");
+    		
+    		var tOfferings = "";
+    		
+    		for (var t=0;t<aOfferings.length;t++) {
+    			
+    			tOfferings += "<u><FONT color='#0000CC'><a href='asfunction:_root.searchOffers,"+ this.removeWhitespace(aOfferings[t]) +"'>" + this.removeWhitespace(aOfferings[t]) + "</a></FONT></u>";
+    			
+    			if (t+1 < aOfferings.length) {
+    				tOfferings += ", ";
+    			}
+    		}
+    		
+    		this.userOffers._text.setAttribute("text",tOfferings);
+    		
+    		
+    		var aSearchs = obj.userSearchs.split(",");
+    		
+    		var tSearchs = "";
+    		
+    		for (var t=0;t<aSearchs.length;t++) {
+    			
+    			tSearchs += "<u><FONT color='#0000CC'><a href='asfunction:_root.searchInterest,"+ this.removeWhitespace(aSearchs[t]) +"'>" + this.removeWhitespace(aSearchs[t]) + "</a></FONT></u>";
+    			
+    			if (t+1 < aSearchs.length) {
+    				tSearchs += ", ";
+    			}
+    		}
+    		
+    		this.userSearchs._text.setAttribute("text",tSearchs);
+    		
+    		if (hib.userobject.user_id == this.userObject.user_id) {
+    			//Self always show
+    			this.showUserContactData();
+    		} else if (obj.showContactData) {
+    			this.showUserContactData();
+    		}  else if (obj.showContactDataToContacts) {
+                this.checkUserIsInContactList.doCall();
+            } else {
+    			this.userContactData.setAttribute("text",canvas.getLabelName(1268));
+    		}
+    		
+    	
+    	]]>
+	</method>
+	
+	<!--
+	public Boolean checkUserIsInContactList(String SID, Long user_id)
+	 -->
+	<netRemoteCallHib name="checkUserIsInContactList" funcname="userservice.checkUserIsInContactList" 
+              remotecontext="$once{ canvas.thishib }" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.userObject.user_id; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("checkUserIsInContactList: ",value);
+                
+                if (value){
+                    parent.showUserContactData();
+                } else {
+                    parent.userContactData.setAttribute("text",canvas.getLabelName(1269));
+                }
+                
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+
+	<method name="showUserContactData">
+		<![CDATA[
+		
+			var tString = canvas.getNotNullString(this.userObject.adresses.street) + " " + canvas.getNotNullString(this.userObject.adresses.additionalname) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.zip) + " " + canvas.getNotNullString(this.userObject.adresses.town) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.states.name) + "<br/><br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.email) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.phone) + "<br/><br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.comment) + "<br/>";
+
+			this.userContactData.setAttribute("text",tString);
+
+		]]>
+	</method>
+	
+	<method name="removeWhitespace" args="str">
+		<![CDATA[
+		
+			//if ($debug) Debug.write("removeWhitespace 1 ",str);
+			//if ($debug) Debug.write("removeWhitespace 2 ",str.length);
+		
+			var tResultingString = "";
+			
+			for (var i=0;i<str.length;i++) {
+				
+				var tChar = str.substring(i,i+1);
+				
+				if (tChar != " ") {
+					tResultingString = str.substring(i,str.length);
+					break;
+				}
+				
+			}
+			
+			for (var i=tResultingString.length;i>0;i--) {
+				
+				var tChar = tResultingString.substring(i-1,i);
+				
+				if (tChar != " ") {
+					tResultingString = tResultingString.substring(0,i);
+					break;
+				}
+				
+			}
+			
+			
+			return tResultingString;
+			
+		
+		]]>
+	</method>
+	
+	<image y="10" x="10" name="_userpic" />
+	
+	<view x="180" width="260" y="10" height="120" bgcolor="0xFFFFFF" />
+	
+	<labelText name="usernameLabel" x="180" y="10" labelid="1164" />
+	<labelText name="username" x="260" y="10" />
+	
+	<labelText name="timezoneLabel" x="180" y="30" labelid="1165" />
+	<labelText name="timezone" x="260" y="30" />
+	
+	<labelText name="memberSinceLabel" x="180" y="50" labelid="1296" />
+    <labelText name="memberSince" x="260" y="50" />
+	
+	<labelText name="userFields" x="10" y="140" labelid="1166" fontstyle="bold" />
+	
+	<labelText name="userOffersLabel" x="10" y="160" labelid="1162" />
+	
+	<view name="userOffers" x="120" y="160" height="100" width="320" clip="true" bgcolor="0xFFFFFF">
+		<labelText name="_text" multiline="true" width="$once{ parent.width- 16 }" />
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="userSearchsLabel" x="10" y="270" labelid="1163" />
+	
+	<view name="userSearchs" x="120" y="270" height="100" width="320" clip="true" bgcolor="0xFFFFFF">
+		<labelText name="_text" multiline="true" width="$once{ parent.width- 16 }" />
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="userContact" x="10" y="380" labelid="1167" fontstyle="bold" />
+	
+	<labelText x="10" y="400" labelid="1270" />
+	
+	<labelText name="userContactData" x="120" y="400" multiline="true" width="320" 
+			   selectable="true" bgcolor="0xFFFFFF" resize="false" />
+	    	
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/sipintegration/library.lzx b/WebContent/src/modules/sipintegration/library.lzx
new file mode 100644
index 0000000..a0c1e01
--- /dev/null
+++ b/WebContent/src/modules/sipintegration/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="sipLoader.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/sipintegration/sipLoader.lzx b/WebContent/src/modules/sipintegration/sipLoader.lzx
new file mode 100644
index 0000000..e948029
--- /dev/null
+++ b/WebContent/src/modules/sipintegration/sipLoader.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="sipLoader" extends="view" bgcolor="0xFFFFFF"
+	   align="center" valign="middle" 
+	   width="${ this._label.width + 50 }" height="40">
+
+    <view resource="warning_icon_rsc" x="10" y="10" />
+
+    <labelText labelid="900" name="_label"
+    		   fontsize="11" y="10" x="40" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/plugins/library.lzx b/WebContent/src/plugins/library.lzx
new file mode 100644
index 0000000..417d2c6
--- /dev/null
+++ b/WebContent/src/plugins/library.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <!-- Add the Folder and Entry for your Plugin here -->
+
+    <!--
+    <include href="livewall/"/>
+     -->
+	
+</library>
diff --git a/WebContent/src/resources/library.lzx b/WebContent/src/resources/library.lzx
new file mode 100644
index 0000000..37cd9c5
--- /dev/null
+++ b/WebContent/src/resources/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- FamFam Icon Set -->
+<resource name="user_moderator_list_apply_rsc" src="tick.png" />
+
+<!-- add for calendar -->
+<!-- FamFam Icon Set -->
+<resource name="user_profile_rsc" src="user.png" />
+
+</library>
diff --git a/WebContent/src/resources/tick.png b/WebContent/src/resources/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/WebContent/src/resources/tick.png
Binary files differ
diff --git a/WebContent/src/resources/user.png b/WebContent/src/resources/user.png
new file mode 100644
index 0000000..79f35cc
--- /dev/null
+++ b/WebContent/src/resources/user.png
Binary files differ
diff --git a/WebContent/src/rest/rest-testclient.lzx b/WebContent/src/rest/rest-testclient.lzx
new file mode 100644
index 0000000..2702425
--- /dev/null
+++ b/WebContent/src/rest/rest-testclient.lzx
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" height="100%" title="REST Test-Application">
+	
+<debug width="450" x="460" y="600" height="100" />
+  
+<include href="incubator/lzcombobox.lzx" />
+
+<attribute name="_baseUrlRestTestGate" value="" type="string" />
+
+<method name="setBaseUrlGateway" args="txt">
+	if ($debug) Debug.write("setBaseUrlGateway: ",txt);
+	this.setAttribute("_baseUrlRestTestGate",txt);
+	var tString1 = txt+"/AddressBookService/findEntry";
+	if ($debug) Debug.write("tString1: ",tString1);
+	this.dset.setSrc(tString1);
+	this.dset.setQueryType("POST");
+	this.dset.setQueryParam("param1","awe");
+	this.dset.doRequest();
+	if ($debug) Debug.write("dset: ",this.dset);
+</method>
+
+<dataset name="dset" request="false" type="post" ondata="Debug.write('ondata: ',val,this.data,this)" >
+</dataset>
+
+<datapointer xpath="dset:/">
+	<handler name="ondata">
+		Debug.write('ondata: ',this);
+	</handler>
+</datapointer>
+
+<view layout="axis:y;spacing:4" width="450" x="0">
+	<text fontstyle="bold" text="Connection - Settings (user for both BroadCasting and Subscribing)" />
+	<view width="450">
+		<text text="BaseURL:" />
+		<edittext align="right" width="350" id="url" text="http://127.0.0.1:5080/openmeetings/services" />
+	</view>
+	<button align="right" width="200" text="connectRtmpConnection" 
+			onclick="canvas.setBaseUrlGateway(url.text)" />
+</view>
+
+
+<!-- some description -->
+<text fontstyle="italic" y="0" width="450" multiline="true" x="450">
+	Test-Client for Testing the WebService-Gateway (Axis2)<br/>
+	This uses the REST-Gateway, not the SOAP Gateway as OpenLaszlo does not<br/>
+	Understand/speak SOAP 1.2<br/>
+</text>
+
+
+</canvas>
diff --git a/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf b/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..e617ce9
--- /dev/null
+++ b/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/subscribe.lzx.lzr=swf8.swf b/WebContent/src/subscribe.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..13e11e1
--- /dev/null
+++ b/WebContent/src/subscribe.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test-setup.lzx.lzr=swf8.swf b/WebContent/src/test-setup.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..4998ea1
--- /dev/null
+++ b/WebContent/src/test-setup.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/Tutorat.swf b/WebContent/src/test/Tutorat.swf
new file mode 100644
index 0000000..317e163
--- /dev/null
+++ b/WebContent/src/test/Tutorat.swf
Binary files differ
diff --git a/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx b/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx
new file mode 100644
index 0000000..baafd01
--- /dev/null
+++ b/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx
@@ -0,0 +1,611 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseDrawArrow" extends="baseDrawULine" >
+    
+    <!-- for drawing drawarrow -->
+    <attribute name="currentdrawarrowlinestroke" value="0x000000" />
+    <attribute name="currentdrawarrowlinestrokeDis" value="1" type="number" />
+    <attribute name="currentdrawarrowlinestrokeFill" value="0xFF6600" />
+    <attribute name="currentdrawarrowlinestrokeFillDis" value="1" type="number" />
+    
+    <attribute name="currentdrawarrowlinelineWidth" value="4" type="number" />   
+    <attribute name="currentdrawarrowOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+    drawarrow
+     -->
+     
+    
+    <method name="startDrawarrowline" args="oid_name">
+        <![CDATA[
+	        if (oid_name == null) {
+	            oid_name = 'drawarrow'+this.getCounter();
+	        }
+	        
+	        this.currentlayer = new lz.drawViewNew(this,{
+		            name:oid_name,width:this.width,height:this.height,
+		            opacity:this.currentdrawarrowOpacity});
+            
+            var pArrowStart = new flash.geom.Point(this.startx,this.starty);
+            var pArrowEnd = new flash.geom.Point(this.endx,this.endy);
+            
+            if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+        ]]>
+    </method> 
+    
+    <method name="endDrawarrowline">
+        //Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+        var tempName = this.currentlayer.name;
+        //Debug.write("tempName: ",tempName);
+        this.currentlayer.destroy();
+        
+        //GetBounds of that Object
+        var minx = this.width+2;
+        var miny = this.height+2;
+        var maxx = -2;
+        var maxy = -2;
+
+        if (this.startx<minx) minx=this.startx;
+        if (this.endx<minx) minx=this.endx;
+        
+        if (this.startx>maxx) maxx=this.startx;
+        if (this.endx>maxx) maxx=this.endx;
+        
+        if (this.starty<miny) miny=this.starty;
+        if (this.endy<miny) miny=this.endy;
+        
+        if (this.starty>maxy) maxy=this.starty;
+        if (this.endy>maxy) maxy=this.endy;
+        
+        var width = maxx-minx;
+        var height = maxy-miny;
+        
+        //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:tempName,x:minx,y:miny,width:width,height:height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.currentlayer.fillstyle = '0x000000';
+        this.currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        this.currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        
+        //Debug.write("this.currentlayer: ",this.currentlayer);
+
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.endx-this.startx;
+        var ty = this.endy-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        var newx = 0;
+        var newy = 0;
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            newx = width;
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            newy = height;
+            newx = width;
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            newy = height;
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        t.setAttribute('x',newx);
+        t.setAttribute('y',newy);
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        //Add Layer to global Layer     
+        this.layers.push(this.currentlayer);  
+        ]]>
+        this.drawarrowlineregisterFinal();
+        this.currentlayer = new LzView();
+        //Debug.write("t: ",t);
+    </method> 
+       
+    
+    
+    <method name="drawArrow" args="graphics,start,end,thickness">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            if (this.currentdrawarrowlinestrokeDis!=-1){
+                graphics.strokeStyle = this.currentdrawarrowlinestroke;
+                graphics.stroke();
+            }
+
+            if (this.currentdrawarrowlinestrokeFillDis!=-1){
+                graphics.fillStyle = this.currentdrawarrowlinestrokeFill;
+                graphics.fill();
+            }
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>    
+    
+     
+    
+    
+    <method name="drawarrowlineregisterFinal">
+        var actionObject = new Array();
+        actionObject[0] = 'drawarrow';
+        actionObject[1] = currentlayer.fillstyle;
+        actionObject[2] = currentlayer.lineWidth;
+        actionObject[3] = currentlayer.strokeStyle;
+        actionObject[4] = this.startx;  
+        actionObject[5] = this.starty;  
+        actionObject[6] = this.endx;    
+        actionObject[7] = this.endy;
+        actionObject[8] = this.currentdrawarrowOpacity;
+        actionObject[9] = this.counter;   
+        actionObject[10] = currentlayer.x;
+        actionObject[11] = currentlayer.y;
+        actionObject[12] = currentlayer.width;
+        actionObject[13] = currentlayer.height;  
+        actionObject[14] = this.currentlayer.name;
+        this.baseactionobjectList.push(actionObject);       
+        this.onsharedMessage('draw',actionObject);
+    </method>       
+    
+    
+    <method name="drawarrowlineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+            //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+            
+            this.currentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[8]});
+            
+            var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+            
+            //t.setTint(lastActionObject[3],60);
+            t.setColor(lastActionObject[3]);
+            
+            var tx = lastActionObject[6]-lastActionObject[4];
+            var ty = lastActionObject[7]-lastActionObject[5];
+    
+            var gegenkathete = Math.abs(ty);
+            var ankathete = Math.abs(tx); 
+            var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+            var sinAlpha = (gegenkathete/hypothenuse);
+            var alpha = Math.asin(sinAlpha);
+            var alpha = alpha/(Math.PI/180);
+                
+            var newx = 0;
+            var newy = 0;
+            if (tx>=0 && ty>=0){    
+                t.setAttribute('rotation',(alpha-45));
+            } else if (tx<0 && ty>=0){
+                newx = lastActionObject[lastActionObject.length-3];
+                t.setAttribute('rotation',(45+90-alpha));
+            } else if (tx<0 && ty<0){
+                newy = lastActionObject[lastActionObject.length-2];
+                newx = lastActionObject[lastActionObject.length-3];
+                t.setAttribute('rotation',(alpha+45+90));
+            } else if (tx>0 && ty<=0){
+                newy = lastActionObject[lastActionObject.length-2];
+                t.setAttribute('rotation',(45-alpha-90));
+            }
+            
+            t.setAttribute('x',newx);
+            t.setAttribute('y',newy);
+            
+            //Scaling
+            var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+            t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+            t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+            
+            this.currentlayer.fillstyle = lastActionObject[1];
+            this.currentlayer.lineWidth = lastActionObject[2];
+            this.currentlayer.strokeStyle = lastActionObject[3];
+
+        ]]>
+    </method>
+    
+    
+    
+    
+    
+    
+    <!--
+        @keywords deprecated
+     -->
+    <method name="_startDrawarrowline" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'drawarrow'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+        
+        //Add Resource
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.currentlayer.getMouse('x')-this.startx;
+        var ty = this.currentlayer.getMouse('y')-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        currentlayer.fillstyle = '0x000000';
+        ]]>
+    </method> 
+    
+    <!--
+        @keywords deprecated
+     -->
+    <method name="__startDrawarrowline" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'drawarrow'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            opacity:this.currentdrawarrowOpacity});
+            
+        var distance_x = Math.abs(this.startx - this.endx);
+        var distance_y = Math.abs(this.starty - this.endy);
+        
+        var point_distance_x = Math.round( distance_x/10 );
+        var point_distance_y = Math.round( distance_y/10 );
+        
+        if (this.startx <= this.endx && this.starty >= this.endy) {
+            
+            currentlayer.lineWidth = this.currentrectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(this.startx,this.starty); //1
+            currentlayer.lineTo(this.startx-point_distance_x,this.starty-point_distance_y); //2
+            currentlayer.lineTo(this.endx-point_distance_x*3,this.endy+point_distance_y); //3
+            currentlayer.lineTo(this.endx-point_distance_x*4,this.endy); //4
+            currentlayer.lineTo(this.endx,this.endy); //5
+            currentlayer.lineTo(this.endx,this.endy+point_distance_y*4); //6
+            currentlayer.lineTo(this.endx-point_distance_x,this.endy+point_distance_y*3); //7
+            currentlayer.lineTo(this.startx+point_distance_x,this.starty+point_distance_y); //8
+            currentlayer.lineTo(this.startx,this.starty); //9
+            this.closePath();
+            
+            currentlayer.strokeStyle = 0x000000;
+            currentlayer.stroke();
+
+            currentlayer.fillStyle = this.currentdrawarrowlinelineWidth;
+            currentlayer.fill();
+            
+        }
+        
+        ]]>
+    </method>
+    <!--
+        @keywords deprecated
+     -->
+    <method name="_endDrawarrowline">
+        //Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+        var tempName = this.currentlayer.name;
+        //Debug.write("tempName: ",tempName);
+        this.currentlayer.destroy();
+        
+        //GetBounds of that Object
+        var minx = this.width+2;
+        var miny = this.height+2;
+        var maxx = -2;
+        var maxy = -2;
+
+        if (this.startx<minx) minx=this.startx;
+        if (this.endx<minx) minx=this.endx;
+        
+        if (this.startx>maxx) maxx=this.startx;
+        if (this.endx>maxx) maxx=this.endx;
+        
+        if (this.starty<miny) miny=this.starty;
+        if (this.endy<miny) miny=this.endy;
+        
+        if (this.starty>maxy) maxy=this.starty;
+        if (this.endy>maxy) maxy=this.endy;
+        
+        var width = maxx-minx;
+        var height = maxy-miny;
+        
+        //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:tempName,x:minx-1,y:miny-1,width:width,height:height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.currentlayer.fillstyle = '0x000000';
+        this.currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        this.currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        
+        //Debug.write("this.currentlayer: ",this.currentlayer);
+
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.endx-this.startx;
+        var ty = this.endy-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        var newx = 0;
+        var newy = 0;
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            newx = width;
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            newy = height;
+            newx = width;
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            newy = height;
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        t.setAttribute('x',newx);
+        t.setAttribute('y',newy);
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        //Add Layer to global Layer     
+        this.layers.push(this.currentlayer);  
+        ]]>
+        this.drawarrowlineregisterFinal();
+        this.currentlayer = new LzView();
+        //Debug.write("t: ",t);
+    </method> 
+    
+</class>
+
+</library>
diff --git a/WebContent/src/test/content/audioTest.lzx b/WebContent/src/test/content/audioTest.lzx
new file mode 100644
index 0000000..511582c
--- /dev/null
+++ b/WebContent/src/test/content/audioTest.lzx
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<!--
+	exmple class definition
+	
+	as soon as you see possibility try to make usage of classes
+	
+	in general: 
+	usage of layout is nice but it needs more views just for layouting.
+	in a simple scenario thats okay,
+	but in the openmeetings app itself most of the views are set *absolute* by x and y
+	cause this reduces the total amount of views
+	instancing (=making views dynamically like we do) is time critical .. if you create or destroy too many
+	views at one time the browser hangs and cpu will be at 100%
+	so in the openmeetings app try to use as less views as possible
+	use at less constraints as possible
+	use $once{ .. } instead of ${ .. } or use setters and getters
+	don't use canvas.setAttribute('myvar','foo') just use canvas.myvar='foo' 
+	whenever it is not necessary (it will throw some 
+	events which are useless if you don't have any constraints pointing to 'myvar' and which will cost 
+	performance)
+	
+	 
+	
+ -->
+
+	<!-- define resources once at one place instead of
+		linking with the path every time you want it
+		-->
+<resource name="_btn_play_rsc" src="../resources/play.png" />
+<resource name="_btn_stop_rsc" src="../resources/stop.png" />
+<resource name="_btn_volume_rsc" src="../resources/mix_volume.png" />
+<resource name="_btn_audio_scrubtrack_rsc" src="../resources/audio_scrubtrack.png" />
+<resource name="_btn_audio_scrubber_rsc" src="../resources/audio_scrubber.png" />
+	
+<class name="audioTest" extends="view" play="false" y="40">
+	
+	<!-- please write layout definition always on 
+		top or on bottom of the view content
+		or write it directly into the view definition -->
+	<simplelayout axis="y" spacing="5"/>
+	
+	   <view id="audioplayer" play="false" y="40" resource="http:resources/Star_in_the_east_solfege.mp3" 
+		   oninit="this.stop();">
+		   
+		   <!-- follow a structure by defining view contents:
+			   1.) define attributes
+			   2.) define handlers (event handlers oninit for example if not already in view definition)
+			   3.) define methods
+			   4.) define layout (if not already in view definition)
+			   5.) define content 
+			   -->
+		   
+		   <!-- comment about this attribute and don't forget type definition in attribute's:
+			   this attribute is volume-level -->
+			<attribute name="vol" value="100" type="number" />
+		   
+		    <simplelayout axis="x" spacing="10"/>
+		   
+			<view>
+				<simplelayout axis="x" spacing="-1"/>
+				<button width="40" onclick="audioplayer.stop()">
+					<view resource="_btn_stop_rsc" y="6" align="center"/>
+				</button>
+				<button width="40" onclick="audioplayer.play()">
+					<view resource="_btn_play_rsc" y="5" align="center"/>
+				</button>
+			</view>	 
+		          
+			<view>
+				<simplelayout axis="x" spacing="-1"/>
+				<button width="40" text="-"
+					onclick="audioplayer.setVolume( audioplayer.getVolume() -10)">
+					<view resource="_btn_volume_rsc" y="5" align="right"/>
+				</button>
+				<button width="40" text="+" 
+					onclick="audioplayer.setVolume( audioplayer.getVolume() +10)">
+					<view resource="_btn_volume_rsc" y="5" align="right"/>
+				</button>
+			</view>
+					        
+			
+			<view name="background" bgcolor="black" width="202" height="15" 
+					y="50" options="ignorelayout;">
+				<view name="loadbar" resource="_btn_audio_scrubtrack_rsc" 
+						width="${audioplayer.loadperc * 200}">
+					<view name="playbar" resource="_btn_audio_scrubber_rsc" 
+							y="1" x="${Math.round(180 * audioplayer.frame/audioplayer.totalframes)}"/>
+				</view>
+			</view>
+		   
+		</view>
+		
+		<!--
+			think about contraints ... if they really need to be updated always
+			${ canvas.myvar } => value will be updated every time 
+								myvar changes by canvas.setAttribute('myvar','foo')
+								normally this is not needed
+								high performance/cpu usage
+			$once{ canvas.myvar } => value will be only set once .. oninit of this attribute/view
+									lower perfomance/cpu usage 
+			try to use $once whenever possible
+			-->
+		<text text="$once{mess.listen_sound}" multiline="true" width="${this.parent.width - 20}" />
+
+		<view>
+			
+			<simplelayout axis="x" spacing="10"/>
+			
+			<button text="$once{ mess.no }">					                
+			</button>
+			<button text="$once{ mess.yes }">					                
+			</button>
+			
+		</view>
+	
+	<nextButton nextTabpane="$once{ this.parent.parent.parent.microTab }" text="$once{mess.next}" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/test/content/library.lzx b/WebContent/src/test/content/library.lzx
new file mode 100644
index 0000000..46f0847
--- /dev/null
+++ b/WebContent/src/test/content/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="audioTest.lzx" />
+
+</library>
diff --git a/WebContent/src/test/html.lzx b/WebContent/src/test/html.lzx
new file mode 100644
index 0000000..2418fef
--- /dev/null
+++ b/WebContent/src/test/html.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+                <edittext name="url" width="400"> 
+                    <handler name="onkeyup" args="key">
+                        if ((key == 27) || (key == 13)) {
+                            this.parent.readStart.onclick.sendEvent();
+                        }
+                    </handler>
+                </edittext>
+                
+                <button name="readStart" width="200" x="400" text="LOAD"
+                                y="2">
+                    <handler name="onclick">
+                        <![CDATA[
+                            var url = parent.url.getText();
+                            if ((url.indexOf("http://") < 0)
+                                    && (url.indexOf("https://") < 0)) {
+                                url = "http://" + url;
+                            }
+    
+                            parent.htmlviewer.setAttribute("src",url);
+                            parent.htmlviewer.setAttribute("visible",true);
+    
+                        ]]>
+                    </handler>
+                </button>
+                
+        <html name="htmlviewer" x="4" y="60" width="600" height="500" bgcolor="0xCCCCCC" >
+            <handler name="onloading" args="loading">
+                this.loading = loading;
+                if ($debug) Debug.write("LOADING ",loading);
+            </handler>
+            <handler name="onsrc" args="src">
+                this.src = src;
+                if ($debug) Debug.write("SRC ",loading);
+            </handler>
+        </html>
+	
+</canvas>
diff --git a/WebContent/src/test/html.lzx.swf8.swf b/WebContent/src/test/html.lzx.swf8.swf
new file mode 100644
index 0000000..2263944
--- /dev/null
+++ b/WebContent/src/test/html.lzx.swf8.swf
Binary files differ
diff --git a/WebContent/src/test/html.lzx.swf9.swf b/WebContent/src/test/html.lzx.swf9.swf
new file mode 100644
index 0000000..22d8cd7
--- /dev/null
+++ b/WebContent/src/test/html.lzx.swf9.swf
Binary files differ
diff --git a/WebContent/src/test/iFrame.lzx b/WebContent/src/test/iFrame.lzx
new file mode 100644
index 0000000..cdabb9b
--- /dev/null
+++ b/WebContent/src/test/iFrame.lzx
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- 
+
+Requirements :
+the html must contain the following in the HEAD :
+
+			function createIFrame(n,id,src,x,y,w,h){
+				var newChild = document.createElement('iframe');
+				newChild.style.visibility='hidden';
+				newChild.style.position='absolute';
+				newChild.style.top='0px';
+				newChild.id=id;
+				newChild.name=n;
+				newChild.src=src;
+				newChild.style.border='0px';
+				newChild.style.left=x+"px";
+				newChild.style.top=y+"px";
+				newChild.width=w+"px";
+				newChild.height=h+"px";
+				document.body.appendChild(newChild);
+			}
+			function centerIframe(iid,x,y,w,h) {
+				var frameRef=document.getElementById(iid);
+				frameRef.style.left=x+"px";
+				frameRef.style.top=y+"px";
+				frameRef.width=w+"px";
+				frameRef.height=h+"px";
+			}
+			function hideIFrame(){
+			    document.getElementById("ifrm1_id").style.visibility="hidden";
+			}
+			function showIFrame(){
+			    document.getElementById("ifrm1_id").style.visibility="visible";
+			}
+
+Attributes :
+ - isrc         : url for the iframeView
+ - iname        : name for the iframeView
+ - iid          : id for the iframeView
+ - callbackTimerDelay           : optional
+ - createIFrame_callbackCounter : optional
+ - createIFrame_callbackMax     : optional
+
+Exemple :
+
+      <canvas debug="true" >
+        
+        <include href="library/iFrame.lzx" />
+        
+        
+        <window id="w" x="100" y="50" width="350" height="250" resizable="true" >
+        
+          <handler name="oninit">
+            new LzDelegate(ifrm,"centerIframe",this,"onx");
+            new LzDelegate(ifrm,"centerIframe",this,"ony");
+          </handler>
+          
+          <iframeView name="ifrm"
+            width = "${immediateparent.width  }"
+            height= "${immediateparent.height }"
+            isrc  = "http://www.google.fr/"
+            iid   = "myIframeId"
+            iname = "myIfrName"
+          />
+          
+        </window>
+          
+        
+      </canvas>
+
+-->
+
+<library>
+
+  <class name="iframeView" extends="view" >
+  
+    <attribute name="isrc" type="string" setter="setIsrc(isrc)"/>
+    <attribute name="iname" type="string" />
+    <attribute name="iid" type="string" />
+    
+    <method name="display">
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').style.visibility='visible'";
+      lz.Browser.loadJS(s);
+    </method>
+    
+    <method name="hide">
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').style.visibility='hidden'";
+      //Debug.write("on hide l'iframe",iid," :",s);
+      lz.Browser.loadJS(s);
+    </method>    
+    
+    <method name="setIsrc" args="s">
+      if (!this.isinited || this.isrc== null) {                      //catch the case where this.time is being 
+        this.isrc = s;                                               //initialized during object instantiation
+        return;
+      }      
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').src='"
+                        + s
+                        + "'";
+      lz.Browser.loadJS(s);
+    </method>
+    
+    <handler name="oninit" >
+      // First initialize the iFrame loading detection mechanism :
+      //initCreateIFrameDone();
+      // Now creating the iframeView :
+      //createIFrame();
+    </handler>
+
+    <method name="createIFrame" >
+    	//Debug.write("create IFRAME !!!!!!!!!!!!!!");
+      var s = "javascript:createIFrame('"
+                        + iname  + "','"
+                        + iid + "','"
+                        + isrc + "','"
+                        + this.getAttributeRelative("x",canvas)      + "','"
+                        + this.getAttributeRelative("y",canvas)      + "','"
+                        + (width +1) + "','"
+                        + (height+1)
+                        + "')";
+      // the browser must also tell our laszlo when the iframeView has been loaded :
+      s = s + ";document.getElementById('"
+                        + iid 
+                        + "').style.visibility='visible'";
+      s = s + ";lzSetCanvasAttribute('" + createIFrameDone_attr + "', true)";
+      ////Debug.write("Calling createIFrame ; loadJS : " + s);//
+      lz.Browser.loadJS(s);
+      // initializing the scheduled check of this iFrame's load state
+      if(typeof this.createIFrame_callbackDelegate == 'undefined') {
+         this.createIFrame_callbackDelegate = new LzDelegate( this, "createIFrame_callback" );
+      }
+      lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay );
+    </method>
+    
+    <!-- Iframe load state detection state and initialization -->
+    <attribute name="createIFrameDone_attr" type="string"/><!-- is initialized in oninit() -->
+    <method name="initCreateIFrameDone">
+      // Initializes the iFrame loading detection mechanism.
+      // computing and setting the name of this iframeView's own
+      // load state attribute on the canvas :
+      this.createIFrameDone_attr = 'iFrame.createIFrameDone_' + this.iid;
+      // initializing this iframeView's own load state on the canvas :
+      canvas.setAttribute(createIFrameDone_attr, false);
+      ////Debug.write('createIFrameDone_attr='+this.createIFrameDone_attr);//
+      ////Debug.write('createIFrameDone='+this.createIFrameDone+canvas.getAttribute(createIFrameDone_attr));//
+	</method>
+	
+    <!-- IFrame load state scheduled check -->
+    <attribute name="callbackTimerDelay" type="number" value="100" />
+    <attribute name="createIFrame_callbackCounter" type="number" value="0" />
+    <attribute name="createIFrame_callbackMax" type="number" value="1000" />
+    <method name="createIFrame_callback">
+      ////Debug.write("createIFrame_callback : createIFrame_done=" + canvas.getAttribute(createIFrameDone_attr));//
+      if(!canvas.getAttribute(createIFrameDone_attr)) {
+         if (this.createIFrame_callbackCounter * callbackTimerDelay &lt; createIFrame_callbackMax) {
+            this.createIFrame_callbackCounter = this.createIFrame_callbackCounter + 1;
+            lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay );
+         }
+      } else {
+         // creating iframeView moves listeners :
+         //Debug.write('createListeners');//
+         createListeners();
+         // now let's make sure the iframeView has been toggled by moving it
+         if (this.iFrameJsStack == 'javascript:') {
+            ////Debug.write('createListeners.move');//
+            // there's no javascript stack yet, so let's simply move the iframeView :
+            centerIframe();
+         } else {
+            ////Debug.write('createListeners.stacked '+this.iFrameJsStack);//
+            // some javascript has been scheduled to be loaded, so let's do it :
+            lz.Browser.loadJS(this.iFrameJsStack);
+         }
+      }
+    </method>
+    
+    <!-- Stackable javascript execution mechanisme -->
+    <attribute name="iFrameJsStack" type="string" value="javascript:" />
+    <method name="executeJs" args="s">
+      ////Debug.write("executeJs", s);//
+      if (canvas.getAttribute(createIFrameDone_attr)) {
+         ////Debug.write("executeJs.direct", s);//
+         lz.Browser.loadJS(s); // iframeView is loaded, so direct execution
+      } else {
+         ////Debug.write("executeJs.stacked", s);//
+         // else the iframeView has not yet been loaded, so let's stack it :
+         this.iFrameJsStack = this.iFrameJsStack + ';' + s ;
+      }
+    </method>
+	
+    <method name="createListeners" >
+      this.myDelx = new LzDelegate(this, "centerIframe", this, "onx");
+      this.myDely = new LzDelegate(this, "centerIframe", this, "ony");
+      this.myDelw = new LzDelegate(this, "centerIframe", this, "onwidth");
+      this.myDelh = new LzDelegate(this, "centerIframe", this, "onheight");
+    </method>
+    
+    <method  name="centerIframe">
+      // we use a timer in order to avoid too many js call (slow)
+      //Debug.write("centerIframe request");
+      if(typeof this.centerIframe_Delegate == 'undefined') {
+         this.centerIframe_Delegate = new LzDelegate( this, "centerIframe_jsCall" );
+      }
+      lz.Timer.resetTimer( this.centerIframe_Delegate, 20 );
+    </method>
+    
+    <method  name="centerIframe_jsCall">
+      var s = "javascript:centerIframe('"
+            + this.iid   + "','"
+            + this.getAttributeRelative("x",canvas)      + "','"
+            + this.getAttributeRelative("y",canvas)      + "','"
+            + (width +1) + "','"
+            + (height+1) + "')";
+      this.executeJs(s); // using the stackable js exec mechanism
+    </method>
+    
+  </class>
+
+</library>
+ 
diff --git a/WebContent/src/test/images/maindebug.lzx b/WebContent/src/test/images/maindebug.lzx
new file mode 100644
index 0000000..62b4f0d
--- /dev/null
+++ b/WebContent/src/test/images/maindebug.lzx
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" title="Geo Map Portal">
+    
+    <debug fontsize="11" oninit="Debug.showInternalProperties = true" />
+
+<handler name="oninit">
+    <![CDATA[
+    
+        LzLoadQueue.maxOpen = 100;
+
+    
+	    //
+        var url = new Array();
+	    
+	    
+        
+        url[5] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSide.jpg";
+		url[4] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+		url[3] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/VideoClass.png";
+		url[2] = "http://openmeetings.googlecode.com/svn/docs/LanguageNavigationErrors.png";
+		url[1] = "http://openmeetings.googlecode.com/svn/docs/OpenMeetingsSOAPGateway.png";
+		url[0] = "http://openmeetings.googlecode.com/svn/docs/OpenmeetingsAllTables.png";
+        url[6] = "http://openmeetings.googlecode.com/svn/docs/SOAPFlowDirectLogin.png";
+        url[7] = "http://openmeetings.googlecode.com/svn/docs/UserDiagram.png";
+        url[8] = "http://openmeetings.googlecode.com/svn/docs/UserGroupsOrganizationsAndRooms.png";
+        url[9] = "http://openmeetings.googlecode.com/svn/docs/architecture.jpg";
+        url[10] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_audience.png";
+        url[11] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_conference.png";
+        url[12] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard.PNG";
+        url[13] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard2.PNG";
+        url[14] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard3.PNG";
+        url[15] = "http://openmeetings.googlecode.com/svn/docs/test_application_audio_video.png";
+        
+        
+        
+        
+        for (var i=0;i<16;i++) {
+            var d = new Date();
+            new layerImage(canvas.myView,{srcImage:url[i]+"?time="+i+d.getTime()});
+        }
+        
+        
+        for (var i=0;i<40;i++) {
+            var d = new Date();
+            new layerImage(canvas.myView,{srcImage:"http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg?time="+i+d.getTime()});
+        }
+
+    ]]>
+</handler>
+
+<class name="layerImage" extends="image">
+    <attribute name="layerid" value="0" type="number" />
+    <attribute name="type" value="" type="string" />
+    <attribute name="isLayerImage" value="true" type="boolean" />
+    <attribute name="srcImage" value="" type="string" setter="this.setImageSource(srcImage)" />
+    <method name="setImageSource" args="srcImage">
+        if ($debug) Debug.write("setImageSource",srcImage);
+        //var mcRef = this.getDisplayObject();
+        //mcRef.loadMovie(srcImage);
+        this.setSource(srcImage);
+    </method>
+</class>  
+
+<view name="myView" />
+  
+</canvas>
diff --git a/WebContent/src/test/images/maindebugTimer.lzx b/WebContent/src/test/images/maindebugTimer.lzx
new file mode 100644
index 0000000..95abcee
--- /dev/null
+++ b/WebContent/src/test/images/maindebugTimer.lzx
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" title="Geo Map Portal">
+    
+    <debug fontsize="11" oninit="Debug.showInternalProperties = true" />
+
+<attribute name="url" value="" type="string" />
+<attribute name="currentIndex" value="0" type="number" />
+
+<handler name="oninit">
+    <![CDATA[
+    
+	    LzLoadQueue.maxOpen = 100;
+	    
+	    this.url = new Array();
+	    
+	    this.url[5] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSide.jpg";
+	    this.url[4] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+	    this.url[3] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/VideoClass.png";
+	    this.url[2] = "http://openmeetings.googlecode.com/svn/docs/LanguageNavigationErrors.png";
+	    this.url[1] = "http://openmeetings.googlecode.com/svn/docs/OpenMeetingsSOAPGateway.png";
+	    this.url[0] = "http://openmeetings.googlecode.com/svn/docs/OpenmeetingsAllTables.png";
+	    this.url[6] = "http://openmeetings.googlecode.com/svn/docs/SOAPFlowDirectLogin.png";
+	    this.url[7] = "http://openmeetings.googlecode.com/svn/docs/UserDiagram.png";
+	    this.url[8] = "http://openmeetings.googlecode.com/svn/docs/UserGroupsOrganizationsAndRooms.png";
+	    this.url[9] = "http://openmeetings.googlecode.com/svn/docs/architecture.jpg";
+	    this.url[10] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_audience.png";
+	    this.url[11] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_conference.png";
+	    this.url[12] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard.PNG";
+	    this.url[13] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard2.PNG";
+	    this.url[14] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard3.PNG";
+	    this.url[15] = "http://openmeetings.googlecode.com/svn/docs/test_application_audio_video.png";
+	    this.url[16] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+	    
+	    for (var k = 16;k<40;k++) {
+            this.url[k] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+        }
+	    
+	    this.fadeDelegate = new LzDelegate( this, "sendImage" );
+	    LzTimer.addTimer( this.fadeDelegate, 50 );
+        
+    ]]>
+</handler>
+
+<method name="sendImage">
+    <![CDATA[
+    
+        var d = new Date();
+        
+        new layerImage(canvas.myView,{srcImage:this.url[this.currentIndex]+"?time="+d.getTime()});
+        
+        this.currentIndex ++;
+        
+        if (this.currentIndex < 40) {
+            LzTimer.addTimer( this.fadeDelegate, 50 );
+        }
+
+    ]]>
+</method>
+
+<class name="layerImage" extends="image">
+    <attribute name="layerid" value="0" type="number" />
+    <attribute name="type" value="" type="string" />
+    <attribute name="isLayerImage" value="true" type="boolean" />
+    <attribute name="srcImage" value="" type="string" setter="this.setImageSource(srcImage)" />
+    <method name="setImageSource" args="srcImage">
+        if ($debug) Debug.write("setImageSource",srcImage);
+        //var mcRef = this.getDisplayObject();
+        //mcRef.loadMovie(srcImage);
+        this.setSource(srcImage);
+    </method>
+</class>  
+
+<view name="myView" />
+  
+</canvas>
diff --git a/WebContent/src/test/lang/en.lzx b/WebContent/src/test/lang/en.lzx
new file mode 100644
index 0000000..28d7146
--- /dev/null
+++ b/WebContent/src/test/lang/en.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<script>
+<![CDATA[
+
+var mess = {};
+
+mess.home = "Home";
+mess.welcome = "Welcome !<br />We now determine if your configuration is good to have the best experience with OpenMeetings.";
+mess.sound = "Sound";
+mess.micro = "Micro";
+mess.webcam = "Webcam";
+mess.bandwidth = "Bandwidth";
+mess.latency = "Latency";
+mess.synthesis = "Synthesis";
+mess.next = "Next >";
+mess.listen_sound = "Do you hear the voice ?";
+mess.yes = "Yes";
+mess.no = "No";
+mess.microRecord = "Record your voice and click on \"Play\" button to hear if your micro works.";
+mess.webcamText = "Your webcam :";
+mess.bandwidthText = "We are testing the capacity of your Internet connexion.";
+mess.latencyText = "We are testing the delay between your computer and our server.";
+mess.synthesisText = "Your results :";
+]]>
+</script>
+</library>
diff --git a/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf
new file mode 100644
index 0000000..ff0815c
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf
Binary files differ
diff --git a/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf
new file mode 100644
index 0000000..d0d857e
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf
Binary files differ
diff --git a/WebContent/src/test/lazslo-rtltext/resources.lzx b/WebContent/src/test/lazslo-rtltext/resources.lzx
new file mode 100644
index 0000000..c39f8ed
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/resources.lzx
@@ -0,0 +1,35 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- Fonts -->
+    <font name="default">
+      <face src="fonts/hebrew/arial.ttf"/>
+      <face src="fonts/hebrew/arialbd.ttf" style="bold"/>
+	</font>
+
+</library>
+<!--                                                                       -->
+<!-- Copyright 2001-2004 Laszlo Systems, Inc.  All Rights Reserved.        -->
+<!-- Use is subject to license terms.                                      -->
+<!--                                                                       -->
+<!--                                                                       -->
+<!-- Laszlo Presentation Server version 3.0b1 001227                     -->
+<!--                                                                       -->
diff --git a/WebContent/src/test/lazslo-rtltext/rtlText.lzx b/WebContent/src/test/lazslo-rtltext/rtlText.lzx
new file mode 100644
index 0000000..caf1e73
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/rtlText.lzx
@@ -0,0 +1,82 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- CLASS: rtlText ============================================ --> 
+	<!-- use this on dynamic data text tags. -->
+	<class name="rtlText" extends="text">
+		
+		<!-- ATTRIBUTES -->
+		<!-- text alignment: default is right -->
+    <attribute name="textAlign" value="right" type="string" /> 
+    
+    <method name="getTextAlign">    
+    	return this.textAlign;
+    </method>
+    
+    <method name="setTextAlign">
+    	switch ( this.getTextAlign() ) {
+				case "left" :
+					this.setX( 0 );
+				break;
+				case "center" :
+					this.setX( this.parent.width / 2 - this.getTextWidth() / 2 );
+				break;
+				case "right" :
+					this.setX( this.parent.width - this.getTextWidth() );
+				break;
+			}
+    </method>
+    
+    <method name="isLTR" args="c">
+		<![CDATA[
+			return ( c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 );
+		]]>
+	</method>
+    
+    <method name="isHEB" args="c">
+		<![CDATA[
+			return ( c >= 224 && c <= 250 );
+		]]>
+	</method>
+    
+    <method name="reverseWords" args="str">
+		<![CDATA[
+			if ( str == "" || str == null ) return ""; // undefined
+			// first char indicates the main directive of str (rtl/ltr)
+			if ( isLTR( str.charCodeAt( 0 ) ) ) return str; // english or number
+			var words_arr = str.split( "" ); // an array of chars
+			for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+				str += words_arr[ words_arr.length - i - 1 ];
+			return str;
+		]]>
+	</method>
+		
+	<method name="applyData" args="rtl_str">
+		this.setAttribute('text', reverseWords( rtl_str ) );
+	</method>
+	
+	<handler name="ontext">
+		setTextAlign();
+	</handler>
+		
+	</class>
+
+</library>
diff --git a/WebContent/src/test/lazslo-rtltext/rtldata.xml b/WebContent/src/test/lazslo-rtltext/rtldata.xml
new file mode 100644
index 0000000..1d2f7d4
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/rtldata.xml
@@ -0,0 +1,56 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- Persons Data -->
+<dataset name="personsData">
+	<myXML>
+    <person>
+        <name>אריאל שרון</name>
+        <title>ראש הממשלה</title>
+    </person>
+    <person>
+        <name>גל פרידמן</name>
+        <title>מדליסט אולימפי</title>
+    </person>
+     <person>
+        <name>פיני גרשון</name>
+        <title>מאמן מכבי תל-אביב</title>
+    </person>
+    <person>
+        <name>שרי אריסון</name>
+        <title>מיליארדרית</title>
+    </person>
+    <person>
+        <name>שלמה ארצי</name>
+        <title>זמר</title>
+    </person>
+    <person>
+        <name>מיקי ברקוביץ</name>
+        <title>כדורסלן עבר</title>
+    </person>
+    <person>
+        <name>יוסי בניון</name>
+        <title>שחקן כדורגל</title>
+    </person>
+   <person>
+        <name>ביל גייטס</name>
+        <title>בעל חברת מיקרוסופט</title>
+    </person>
+	</myXML>
+</dataset>
diff --git a/WebContent/src/test/lazslo-rtltext/test.lzx b/WebContent/src/test/lazslo-rtltext/test.lzx
new file mode 100644
index 0000000..572932d
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/test.lzx
@@ -0,0 +1,42 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="false">     
+
+	<!-- DATASETS -->
+	<include href="rtldata.xml"/>
+
+	<!-- RESOURCES [FONTS] -->
+  <include href="resources.lzx"/> 
+
+	<!-- RTLTEXT CLASS DEFINITION -->
+  <include href="rtlText.lzx"/> 
+
+	
+	<view x="200" y="20">
+    <simplelayout axis="y" />
+    <view datapath="personsData:/myXML[1]/person" width="300" bgcolor="#cccccc">
+      <simplelayout axis="y" />
+    	<rtlText name="txtName" textAlign="center" fontsize="10" font="default" fontstyle="bold" datapath="name/text()"/>
+    	<rtlText name="txtTitle" fontsize="10" font="default" datapath="title/text()"/> 
+    	<text></text>
+    </view>
+  </view>
+
+</canvas>
diff --git a/WebContent/src/test/lib/library.lzx b/WebContent/src/test/lib/library.lzx
new file mode 100644
index 0000000..3f4ad02
--- /dev/null
+++ b/WebContent/src/test/lib/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="nextButton.lzx" />
+
+</library>
diff --git a/WebContent/src/test/lib/nextButton.lzx b/WebContent/src/test/lib/nextButton.lzx
new file mode 100644
index 0000000..2885230
--- /dev/null
+++ b/WebContent/src/test/lib/nextButton.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="nextButton" extends="button" onclick="changeNextTabpane()">
+    
+    <attribute name="align" value="right" />
+    <attribute name="isdefault" value="true" />
+
+	<attribute name="nextTabpane" required="true" />
+
+    <method name="changeNextTabpane">
+      var object = this.getAttribute('nextTabpane');
+      object.setAttribute("selected","true");
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/test/main.lzx b/WebContent/src/test/main.lzx
new file mode 100644
index 0000000..42784da
--- /dev/null
+++ b/WebContent/src/test/main.lzx
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+<include href="lang/en.lzx"/>
+
+<include href="lib/"/>
+<include href="content/"/>
+
+            <tabs name="mainTabs">
+               <tabpane selected="true" text="${mess.home}">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.welcome}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.soundTab}" text="${mess.next}" />
+                </tabpane>
+
+                <tabpane text="${mess.sound}" name="soundTab" onselect="//Debug.write('focus'); audioplayer.play();">
+					
+					<!-- define content areas which are 
+						kind of component in classes -->
+					 <audioTest name="_audiotest" />
+					
+                </tabpane>                
+                
+                <tabpane text="${mess.micro}" name="microTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.microRecord}" multiline="true" width="${this.parent.width - 20}" />
+					        <view>
+					            <simplelayout axis="x" spacing="-1"/>
+					           <button width="40" onclick="audioplayer.stop()">
+					                <view resource="resources/play.png" y="6" align="center"/>
+					            </button>
+					            <button width="40" onclick="audioplayer.play()">
+					                <view resource="resources/record.png" y="5" align="center"/>
+					            </button>
+					        </view>
+					        
+					        <view>
+					            <simplelayout axis="x" spacing="-1"/>
+					            <button width="40" onclick="audioplayer.setVolume( audioplayer.getVolume() -10)">
+					                    -<view resource="resources/mix_volume.png" y="5" align="right"/>
+					                </button>
+					            <button width="40" onclick="audioplayer.setVolume( audioplayer.getVolume() +10)">
+					                    +<view resource="resources/mix_volume.png" y="5" align="right"/>
+					                </button>
+					        </view>
+                    <nextButton nextTabpane="${this.parent.parent.webcamTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.webcam}" name="webcamTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.webcamText}" multiline="true" width="${this.parent.width - 20}" />
+		<view id="v1" layout="axis:y; spacing:4">
+			<videoview id="live" type="rtmp" stream="$once{canvas.s1}" width="240" height="160">
+				<camera id="cam" show="true" fps="20" width="240" height="160" 
+																picturequality="0"/>
+				<microphone id="mic" capturing="false"/>
+				
+			</videoview>
+		</view>                    
+                    <nextButton nextTabpane="${this.parent.parent.messTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.bandwidth}" name="messTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.bandwidthText}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.latencyTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.latency}" name="latencyTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.latencyText}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.synthesisTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.synthesis}" name="synthesisTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.synthesisText}" multiline="true" width="${this.parent.width - 20}" />
+                </tabpane>                
+            </tabs>
+
+	
+	<rtmpconnection src="rtmp://192.168.0.1/'+canvas.webAppRootKey+'/test" autoconnect="true"/>
+	<mediastream name="s1" type="rtmp"/>
+	<mediastream name="s2" type="rtmp"/>
+	<simplelayout/>
+
+<!--	
+	<text multiline="true" width="100%"> Instructions:
+		<br/> 1. Either run a flash media server on localhost (127.0.0.1), or ssh tunnel to a
+		media server at a known host
+		<br/> 2. Press the broadcast button. (Grant camera access permission if needed.) The
+		button should change to say "stop broadcasting"
+		<br/> 3. Press the receive button. You should be receiving audio and video from
+		yourself and the button should say "stop receiving."
+		<br/> 4. Try out the audio and video mute buttons. The video mute should freeze the
+		received picture. The audio mute should silence the received sound.
+		<br/> 5. Press the receive button. The received video should freeze and the button
+		should say "stop receiving".
+		<br/> 6. Press the receive button again. The video should resume and the button should
+		say "receiving".
+		<br/> 7. Press the broadcast button. The received video should freeze and the button
+		should say "broadcast".<br/> <br/> The indicator below shows the status of the video
+		connection.
+		</text>
+-->	
+</canvas>
diff --git a/WebContent/src/test/page/main.lzx b/WebContent/src/test/page/main.lzx
new file mode 100644
index 0000000..e05088f
--- /dev/null
+++ b/WebContent/src/test/page/main.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" 
+		fontsize="14" title="OpenMeetings - Computer testing">
+
+    <image name="_image" src="Добрыйдень.jpg" />
+    
+    <button text="loadImage2">
+    	<handler name="onclick">
+    		<![CDATA[
+    		   
+    	    ]]>
+    	</handler>
+    </button>
+    
+
+</canvas>
diff --git a/WebContent/src/test/page/main.lzx.swf8.swf b/WebContent/src/test/page/main.lzx.swf8.swf
new file mode 100644
index 0000000..cfd7b01
--- /dev/null
+++ b/WebContent/src/test/page/main.lzx.swf8.swf
Binary files differ
diff --git a/WebContent/src/test/page/test.jpg b/WebContent/src/test/page/test.jpg
new file mode 100644
index 0000000..51d5e80
--- /dev/null
+++ b/WebContent/src/test/page/test.jpg
Binary files differ
diff --git a/WebContent/src/test/regexp.jsp b/WebContent/src/test/regexp.jsp
new file mode 100644
index 0000000..031b348
--- /dev/null
+++ b/WebContent/src/test/regexp.jsp
@@ -0,0 +1,92 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>OpenMeetings</title>
+	<script type="text/javascript" src="swfobject.js"></script>
+	<style type="text/css">
+		
+		/* hide from ie on mac \*/
+		html {
+			height: 100%;
+			overflow: hidden;
+		}
+		
+		#flashcontent {
+			height: 100%;
+		}
+		/* end hide */
+	
+		body {
+			height: 100%;
+			margin: 0;
+			padding: 0;
+			background-color: #ffffff;
+		}
+	
+	</style>
+	<link rel="shortcut icon" href="favicon.ico"> 
+	<script type="text/javascript">
+		function reMatch(str, reg){
+			var s = unescape(str);
+			var re = new RegExp(eval(unescape(reg)));
+			return s.replace(re,unescape(rep));
+		}
+	</script>
+</head>
+<body onLoad="focusSWF()">
+
+
+	<div id="flashcontent">
+		<strong>You need to upgrade your Flash Player</strong>
+		This is replaced by the Flash content. 
+		Place your alternate content here and users without the Flash plugin or with 
+		Javascript turned off will see this. Content here allows you to leave out <code>noscript</code> 
+		tags.
+	</div>
+	
+	<script type="text/javascript">
+		// <![CDATA[
+		
+		var so = new SWFObject("test-regExp2.lzx?lzt=swf&lzr=swf8", "lzapp", "100%", "100%", "8", "#ffffff");
+		so.addParam("quality", "high");
+		so.addParam("id", "lzapp");
+		so.addParam("allowScriptAccess", "always");
+		so.addParam("scale", "noscale");
+		so.write("flashcontent");
+		
+		function focusSWF(){
+		
+		    if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
+		    }else {
+		        document.getElementById('lzapp').focus();
+		    }
+		}   		
+		
+		// ]]>
+	</script>	
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/WebContent/src/test/resources/audio_scrubber.png b/WebContent/src/test/resources/audio_scrubber.png
new file mode 100644
index 0000000..b51da01
--- /dev/null
+++ b/WebContent/src/test/resources/audio_scrubber.png
Binary files differ
diff --git a/WebContent/src/test/resources/audio_scrubtrack.png b/WebContent/src/test/resources/audio_scrubtrack.png
new file mode 100644
index 0000000..1e7029b
--- /dev/null
+++ b/WebContent/src/test/resources/audio_scrubtrack.png
Binary files differ
diff --git a/WebContent/src/test/resources/mix_volume.png b/WebContent/src/test/resources/mix_volume.png
new file mode 100644
index 0000000..a010125
--- /dev/null
+++ b/WebContent/src/test/resources/mix_volume.png
Binary files differ
diff --git a/WebContent/src/test/resources/next.png b/WebContent/src/test/resources/next.png
new file mode 100644
index 0000000..95fc568
--- /dev/null
+++ b/WebContent/src/test/resources/next.png
Binary files differ
diff --git a/WebContent/src/test/resources/play.png b/WebContent/src/test/resources/play.png
new file mode 100644
index 0000000..b41fa2b
--- /dev/null
+++ b/WebContent/src/test/resources/play.png
Binary files differ
diff --git a/WebContent/src/test/resources/record.png b/WebContent/src/test/resources/record.png
new file mode 100644
index 0000000..d1eb150
--- /dev/null
+++ b/WebContent/src/test/resources/record.png
Binary files differ
diff --git a/WebContent/src/test/resources/stop.png b/WebContent/src/test/resources/stop.png
new file mode 100644
index 0000000..682c322
--- /dev/null
+++ b/WebContent/src/test/resources/stop.png
Binary files differ
diff --git a/WebContent/src/test/scrolledittext.lzx b/WebContent/src/test/scrolledittext.lzx
new file mode 100644
index 0000000..bc64ac5
--- /dev/null
+++ b/WebContent/src/test/scrolledittext.lzx
@@ -0,0 +1,170 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="incubator/baseedittext.lzx" />
+    <include href="lz/vscrollbar.lzx"/>
+
+    <!--- Implements visual baseedittext with scrollbar. -->
+    <class name="scrolledittext" extends="baseedittext" 
+           multiline="true" clip="true" height="100">
+
+        <attribute name="border" value="0" />
+        
+        <view name="_face" bgcolor="0xffffff" 
+              width="${parent.width-parent.border*2}" 
+              height="${parent.height-parent.border*2}" 
+              x="${parent.border}" y="${parent.border}"/>
+
+        <_newinternalinputtext name="inp" 
+            x="${parent.border}" 
+            y="${parent.border}" 
+            height="${parent.height - parent.border * 2}" 
+            width="${parent.width - parent.vscrollwidth - parent.border*2}"
+            scrollevents="true">
+            <!-- Supplied by lztext now
+                attribute name="lineheight"
+                       value="${this.getTextHeight()/this.getMaxScroll()}"/-->
+            <attribute name="maxtextheight"
+                       value="${this.lineheight * this.maxscroll}"/>
+            <attribute name="maxheight" 
+                       value="${this.height + this.maxtextheight}"/>
+            <attribute name="pos" value="0" type="number"/>
+            
+            <setter name="pos" args="p">
+                if (this.inited) {
+                    var scroll = 1 - Math.floor(p / this.lineheight);
+                    if (scroll !== this.scroll) {
+                        this.setAttribute('scroll', scroll);
+                        //Debug.info('pos', p, this.scroll)
+                    }
+                    this.pos = p;
+                    if (this.onpos) this.onpos.sendEvent(p);
+                }
+            </setter>
+            
+            <handler name="onscroll" args="IGNORE_THIS_ARG">
+                this.setAttribute('pos', -this.lineheight * (this.scroll - 1));
+            </handler>
+        </_newinternalinputtext>
+
+        <!--- Width to give for scrollbar
+              @keywords private -->
+        <attribute name="vscrollwidth" value="0"/>
+        
+        <method name="setvscrollwidthfromvisibility" args="v">
+            this.setAttribute("vscrollwidth", (v ? this._vs.width : 0));
+        </method>
+        
+<!--
+        <om_vscrollbar name="_vs" axis="y" scrollattr="pos"
+            scrolltarget="parent.inp"
+            x="${parent.width - this.width - parent.border + 1}" 
+            stepsize="${parent.inp.lineheight}" 
+            scrollmax="${parent.inp.scrollheight}">
+        </om_vscrollbar>
+-->
+
+        <!--- Name of class to instantiate for vertical scroll bar.
+              @keywords public -->
+        <attribute name="vscrollbarclassname" type="string" value="vscrollbar"/>
+        
+        <!--- Our vertical scrollbar
+              @keywords private -->
+        <attribute name="_vs" value="null"/>
+        
+        <!--- @keywords private -->
+        <method name="ensurevscrollbar">
+            if (this['_vs'] == null) {
+                var classname = this.vscrollbarclassname;
+                if (classname == "") {
+                    classname = "vscrollbar";
+                }
+                if ($debug) {
+                    if (typeof(lz[classname]) == "undefined") {
+                        Debug.warn("scrollbarclassname undefined", this);
+                    }
+                }
+                if(typeof(lz[classname]) != "undefined"){
+                    this._vs = new lz[classname](this, 
+                                                 { axis: "y",
+                                                   scrollattr: "pos",
+                                                   scrollmax: "0",
+                                                   scrolltarget: this.inp});
+                                                   
+                    var xDel = new lz.Delegate(this, 'updateX');
+                    xDel.register(this['_vs'], 'onwidth');
+                    xDel.register(this, 'onwidth');
+                    xDel.register(this, 'onborder');
+                    
+                    new lz.Delegate(this, 'updateScrollMax', this.inp, 'onscrollheight');
+                    new lz.Delegate(this, 'updateStepSize', this.inp, 'onlineheight');
+                    // call once manually
+                    this.updateX();
+                    this.updateStepSize();
+                }
+
+            }
+        </method>
+        
+        <method name="updateX" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("x", this.width - this._vs.width );
+            }
+        </method>
+        
+        <method name="updateStepSize" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("stepsize", this.inp.lineheight);
+            }
+        </method>
+        
+        <method name="updateScrollMax" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("scrollmax", this.inp.scrollheight);
+            }
+        </method>
+        
+        <method name="init">
+            super.init();
+            this.ensurevscrollbar();
+            setvscrollwidthfromvisibility(this['_vs'] ? this._vs.visible : false);
+            this.myDel = new lz.Delegate(this, "setvscrollwidthfromvisibility", this['_vs'], "onvisible");
+        </method>
+
+ <!--- Overrides a parent method which calculates y position for text
+            in a way that doesn't make sense for this class. We just trap the 
+            call and do nothing. This field is positioned in y by the constraint
+            y=${parent.border}
+            Note: although this method is a no-op, it still has to be declared,
+            so the parent class's method does not get called on instances of 
+            this class. 
+        -->
+        <method name="_placeTextY">
+        </method>
+
+    </class>
+
+</library>
+<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
+* Copyright 2006-2009 Laszlo Systems, Inc. All Rights Reserved.               *
+* Use is subject to license terms.                                            *
+* X_LZ_COPYRIGHT_END ****************************************************** -->
+<!-- @LZX_VERSION@                                                         -->
diff --git a/WebContent/src/test/simplebroadcast.lzx b/WebContent/src/test/simplebroadcast.lzx
new file mode 100644
index 0000000..fadcf2e
--- /dev/null
+++ b/WebContent/src/test/simplebroadcast.lzx
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+	<rtmpconnection src="rtmp://macbook/'+canvas.webAppRootKey+'/hibernate" autoconnect="true"/>
+	<mediastream name="s1" type="rtmp"/>
+	<mediastream name="s2" type="rtmp"/>
+	<simplelayout/>
+	
+	<text multiline="true" width="100%"> Instructions:
+		<br/> 1. Either run a flash media server on localhost (127.0.0.1), or ssh tunnel to a
+		media server at a known host
+		<br/> 2. Press the broadcast button. (Grant camera access permission if needed.) The
+		button should change to say "stop broadcasting"
+		<br/> 3. Press the receive button. You should be receiving audio and video from
+		yourself and the button should say "stop receiving."
+		<br/> 4. Try out the audio and video mute buttons. The video mute should freeze the
+		received picture. The audio mute should silence the received sound.
+		<br/> 5. Press the receive button. The received video should freeze and the button
+		should say "stop receiving".
+		<br/> 6. Press the receive button again. The video should resume and the button should
+		say "receiving".
+		<br/> 7. Press the broadcast button. The received video should freeze and the button
+		should say "broadcast".<br/> <br/> The indicator below shows the status of the video
+		connection.
+		</text>
+	<rtmpstatus/>
+	<view layout="axis:x; inset:10; spacing:10">
+		<view id="v1" layout="axis:y; spacing:4">
+			<videoview id="live" type="rtmp" stream="$once{canvas.s1}" width="240" height="160">
+				<camera id="cam" show="false" fps="20" width="240" height="160" 
+																picturequality="0"/>
+				<microphone id="mic" capturing="false"/>
+				
+			</videoview>
+			<edittext name="username">YourName</edittext>
+			<button text="broadcast">
+				<attribute name="text"
+					value="${(s1.broadcasting == false) ? 'broadcast' : 'stop broadcasting'}"/>
+				<handler name="onclick">
+					<![CDATA[
+                    if (cam.show == false) {
+                        live.stream.setAttribute('url', parent.username.text);
+                        live.stream.broadcast();
+							cam.setAttribute('show', true);
+                    } else {
+                        live.stream.stop();
+                        cam.setAttribute('show', false);
+                    }
+                  ]]>
+				</handler>
+			</button>
+			
+			<checkbox onvalue="s1.setAttribute('muteaudio', value)">Mute
+				Audio</checkbox>
+			<checkbox onvalue="s1.setAttribute('mutevideo', value)">Mute
+				Video</checkbox>
+			<button text="checkValues">
+				<handler name="onclick">
+					//Debug.write("this: ",live);
+					//Debug.write("this: ",cam);
+					//Debug.write("this: ",cam._dev);
+					//Debug.write("this: ",mic._dev);
+				</handler>
+			</button>
+		</view>
+		<view id="v2" layout="axis:y; spacing:4">
+			<videoview name="vid" type="rtmp" stream="$once{canvas.s2}"/>
+			<edittext name="username">YourName</edittext>
+			<button text="${s2.playing ? 'stop receiving' : 'receive'}"
+				onclick="s2.setAttribute('url', parent.username.text);
+                         if (s2.playing) s2.stop(); else s2.play();"/>
+		</view>
+	</view>
+	
+</canvas>
diff --git a/WebContent/src/test/simpletestedittext.lzx b/WebContent/src/test/simpletestedittext.lzx
new file mode 100644
index 0000000..ee80f95
--- /dev/null
+++ b/WebContent/src/test/simpletestedittext.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+ 
+     <button text="Show then Fade" onclick="canvas.showText()" />
+     <text name="myText" opacity="0.0" bgcolor="#CCCCCC">The Invisible Man</text>
+     <simplelayout axis="y" spacing="10" />
+	
+	<attribute name="fadeDelegate" value="null" />
+ 
+     <method name="showText">
+         this.myText.setAttribute( "opacity", 1.0 );
+         this.fadeDelegate = new LzDelegate( this, "fadeText" );
+         lz.Timer.addTimer( this.fadeDelegate, 3000 );
+     </method>
+ 
+     <method name="fadeText">
+		 //Debug.write("fadeText: ",lz.Timer.countTimers(this.fadeDelegate));
+         this.myText.animate( "opacity", 0.0, 1000 );
+     </method>
+ 
+ </canvas>
diff --git a/WebContent/src/test/simpletestvalidBox.lzx b/WebContent/src/test/simpletestvalidBox.lzx
new file mode 100644
index 0000000..e23ddfb
--- /dev/null
+++ b/WebContent/src/test/simpletestvalidBox.lzx
@@ -0,0 +1,810 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+	
+<include href="lz/textlistitem.lzx" />
+	
+<script>
+<![CDATA[
+	
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+	
+]]>
+</script>
+	
+<attribute name="statesInitValues" value="null" />
+	
+<handler name="oninit">
+	<![CDATA[
+		var tChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+		var tCharsSmall = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
+		
+		this.statesInitValues = new Array();
+		var m = 0;
+		while (m<20){
+			for (var i = 0;i<26;i++){
+				for (var r=0;r<3;r++){
+					var t = new Array();
+					t["state_id"] = i*r;
+					t["name"] = tChars.charAt(i)+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100));
+					this.statesInitValues.push(t);
+				}
+			}
+			m++;
+		}
+		//Debug.write(this.statesInitValues);
+		
+		this._validbox.addItem("Da","1");
+		this._validbox.selectItem("1",true);
+	]]>
+</handler>
+	
+<method name="validateCountry" args="str">
+	//Debug.write("validateCountry: ",str);
+	<![CDATA[
+		if (str.length!=0){
+			var a = new Array();
+			for (var i=0;i<canvas.statesInitValues.length;i++){
+				if (canvas.statesInitValues[i].name.startsWith(str))a.push(canvas.statesInitValues[i]);
+				//this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+			}
+			return a;
+		}
+	]]>	
+</method>	
+	
+
+    <include href="base/baseformitem.lzx" />
+    <include href="lz/list.lzx" />
+    <include href="lz/floatinglist.lzx" />
+	
+	<include href="lz/combobox.lzx" />
+
+    <!--- A dropdown list of selectable items. -->
+    <class name="baseValidCombobox" extends="baseformitem" focusable="false" width="100">
+        <!--- @keywords private -->
+        <attribute name="defaultplacement"  value="cblist" type="string"/>
+
+        <!-- attributes -->
+        <!--- The value of the combobox. -->
+        <attribute name="value" value="${cblist.value}"/>
+
+        <!--- Indicates whether or not the popup list is showing.  -->
+        <attribute name="isopen"       value="false"  setter="this.setOpen(isopen)" />
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />
+
+        <!--- The spacing size ( in pixels ) between items in the pop-up list.  -->
+        <attribute name="spacing"   value="0" />
+
+        <!--- The text that appears in the text field when no item is selected. -->
+        <attribute name="defaulttext"  value="" type="string" />
+
+        <!--- The number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute -->
+        <attribute name="defaultselection"  value="null" type="number"  setter="this.setDefaultSelection( defaultselection )"/>
+
+        <!--- This event is sent when the default selection is set.  -->
+        <event name="ondefaultselection" />
+
+        <!--- The class that is used to create an item in the list when
+              itemdatapath is assigned. -->
+        <attribute name="itemclassname" setter="this.setItemclassname(itemclassname)"  value="" type="string" />
+
+        <!--- Sets the height of the combobox to show 'n' items. -->
+        <attribute name="shownitems"   value="-1" />
+
+        <!--- @keywords private  -->
+        <attribute name="mousedownintext" value="false"/>
+
+        <!--- @keywords private  -->
+        <attribute name="initcomplete" value="0" />
+
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>
+
+        <!--- The initial selected item. -->
+        <attribute name="selected" value="null"/>
+
+        <!--- This event is triggered whenever the user makes a selection. It
+              may be used as a script in the combobox tag or as an event method.
+              -->
+        <event name="onselect"/>
+
+        <!--- One of "lazy", "resize", "pooling", "none". -->
+        <attribute name="dataoption" value="none" type="string"/>
+
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+
+        <!--- the x position of the text. default: 2 -->
+        <attribute name="text_x" value="2" type="number"/>
+
+        <!--- the y position of the text. default: 2 -->
+        <attribute name="text_y" value="2" type="number"/>
+
+        <!--- the width the text. default: combowidth - 19 -->
+        <attribute name="text_width" value="${this.width - 19}" type="number"/>
+
+        <!--- The minimum width this component is allowed to be.
+              Defaults to 50 pixels.
+              @keywords defaultsetter -->
+        <attribute name="min_width" value="50" type="number" />
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+
+        <!--- Since we are not focusable, defer to the inputtext's next selection,
+              so that when floatinglist is tabbed out of, we can provide a next
+              selection since we are it's owner
+              @keywords private -->
+        <method name="getNextSelection">
+            // must ensure the floatinglist is closed so that if it is being tabbed from,
+            // we can change the focus. (focus is normally not allowed to escape from
+            // a modal view).
+            this.setOpen(false);
+            return lz.Focus.getNext(interior.cbtext);
+        </method>
+
+        <!--- since we are not focusable, this provides an api for asking what child to send focus
+              to, as is the case when floatinglist is shift-tabbed back to us.
+              @keywords private -->
+        <method name="resolveSelection">
+            // must ensure the floatinglist is closed so that if it is being tabbed from,
+            // we can change the focus. (focus is normally not allowed to escape from
+            // a modal view).
+            this.setOpen(false);
+            return interior.cbtext;
+        </method>
+
+        <view name="bkgnd" width="100%" focusable="false">
+        <!--- subclasses defined the 'look' by placing views here -->
+        </view>
+
+        <view name="interior"
+            x="$once{classroot.text_x}"
+            y="$once{classroot.text_y}"
+            width="${classroot.text_width}"
+             height="${classroot.height - 2*classroot.bordersize - 2}"
+             focusable="false">
+            <!--- @keywords private -->
+            <attribute name="_dsblfield" value="null"/>
+
+            <method name="setupText" >
+                var txt = classroot.cblist.getText();
+                if ( !txt ) {
+                    if ( classroot.defaultselection ) {
+                        if ( classroot.cblist._contentview != null ) {
+                            classroot.cblist.selectItemAt( classroot.defaultselection );
+                            txt = classroot.cblist.getText();
+                        }
+                    } else {
+                        txt = classroot.defaulttext;
+                    }
+                }
+                if (this.cbtext) this.cbtext.setAttribute('text', txt );
+                if (this._dsblfield) this._dsblfield.setAttribute('text', txt );
+                parent._applystyle( parent.style );
+            </method>
+
+                <view name="editbkgnd" bgcolor="white" width="100%" height="100%" />
+                <inputtext x="2" y="1" name="cbtext" width="$once{parent.width - 4}">
+                    <attribute name="text" type="string" />
+					
+					<attribute name="initSelect" value="false" type="boolean" />
+					
+                    <attribute name="timerDelegate" value="null"/>
+                    <attribute name="typetime" type="number" value="4000"/>
+					<attribute name="timerIsInited" value="false" type="boolean"/>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+                    <handler name="onkeydown" args="key">
+                        <![CDATA[
+						//Debug.write("onkeydown: ",key);
+                        // 38 is up-arrow
+                        // 40 is down-arrow
+                        // 32 is space
+                        // 13 is return
+                            if ((key==38) || (key==40)) {
+                                if (!classroot.isopen) {
+                                    classroot.setOpen(true, true); // open, withKey
+                                }
+    
+                                // pass the key event on to the floatinglist
+                                classroot.cblist.onkeydown.sendEvent(key);
+                            } else {
+                                //Debug.write("onkeydown txt: ",this.getText());
+                                if (!this.initSelect){
+                                    ////Debug.write("onvalue: ",txt,this);
+                                    if (!this.timerIsInited){
+                                        this.timerIsInited = true;
+                                        this.timerDelegate = new LzDelegate( this, "validatedText" );
+                                        //Debug.write("+++++++++++++++++ addTimer");
+                                        //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                                        lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                                    } else {
+                                        //Debug.write("############### resetTimer NO ADDING ");
+                                        //Debug.write("############### removeTimer ",lz.Timer.countTimers());
+                                        //lz.Timer.removeTimer( this.timerDelegate );
+                                    }
+                                } else {
+                                    this.initSelect = false;
+                                }
+                            }
+                        ]]>
+                    </handler>
+
+                    <!-- pass up to component level so focus rect will be visible, and subclassers can catch -->
+                    <handler name="onfocus" args="v">
+                        if ( classroot['onfocus'] ) classroot.onfocus.sendEvent(v);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onblur" args="v">
+                        this.initSelect=true;
+                        classroot.setAttribute('text', this.getText() );
+                        if ( classroot['onblur'] ) classroot.onblur.sendEvent(v);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onkeyup" args="kc">
+                        if ( classroot['onkeyup'] ) classroot.onkeyup.sendEvent(kc);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onkeydown" args="kc">
+                        if ( classroot['onkeydown'] ) classroot.onkeydown.sendEvent(kc);
+                    </handler>
+
+                    <method name="getFocusRect"  >
+                        return classroot.getFocusRect();
+                    </method>
+
+					<method name="validatedText">
+						<![CDATA[
+                            //Debug.write("validatedText: ",this.getText());
+                            //this.reset();
+                            if (!this.initSelect){
+                                var t = classroot.validate_method(this.getText());
+                                //Debug.write('t: ',t.length);
+                                //this.parent._cblist.setAttribute('visible',true);
+                                classroot.cblist.removeAllItems();
+                                for (var i=0;i<t.length;i++){
+                                    classroot.cblist.addItem(t[i].name,t[i].state_id);
+                                }
+                                //Debug.write("############### removeTimer ",lz.Timer.countTimers());
+                                for (var eg in lz.Timer){
+                                    //Debug.write("############### lz.Timer ",eg,lz.Timer[eg]);
+                                }
+                                for (var eg in lz.Timer.timerList){
+                                    //Debug.write("############### lz.Timer.timerList ",eg,lz.Timer.timerList[eg]);
+                                }
+
+                                ////Debug.write("validateText: ",this.getText());
+                                //if (!classroot.isopen) {
+                                //    classroot.setOpen(true, true); // open, withKey
+                                //}
+                                this.timerIsInited = false;
+                            } else {
+                                this.initSelect=false;
+                                this.timerIsInited = false;
+                            }
+						]]>
+					</method>					
+
+                </inputtext>
+
+        </view>
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}"
+                      defaultselection="${owner.defaultselection ?
+                                          owner.defaultselection : (owner.defaulttext == '' ?
+                                                                    0 : null) }">
+            <!-- create a blank datapath so that it can be assigned a datapointer when combobox is assigned data -->
+               <datapath>
+                   <attribute name="datacontrolsvisibility" value="false" />
+               </datapath>
+
+            <handler name="onconstruct">
+                this.dataoption = owner.dataoption;
+            </handler>
+
+            <method name="_dokeyup" args="kc"
+                    event="onkeyup">
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </method>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>			
+        </floatinglist>
+
+
+        <!--- Sets the number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute.
+              @param Number ds: the number of items to initally select. -->
+        <method name="setDefaultSelection" args="ds" >
+            this.defaultselection = ds;
+            if ( ds == null ) return;
+            if ( defaulttext != "" ) {
+                this.defaulttext = "";
+                //Debug.write("defaultselection overrides defaulttext",this);
+            }
+            if ( this.ondefaultselection ) this.ondefaultselection.sendEvent();
+        </method>
+
+        <!--- @keywords private -->
+        <handler name="ondata" args="d">
+            this.cblist.datapath.setPointer( d );
+        </handler>
+
+        <!--- @keywords private -->
+        <event name="onitemclassname"/>
+
+        <!--- Sets the type of list items which will be created in floatinglist
+              when necessary.
+              @param String icn: the class name to use to create items with. -->
+        <method name="setItemclassname" args="icn" >
+            this.itemclassname = icn; // before anything is inited capture value
+            if ( this.isinited ) { // view is now inited so check classname with cblist
+
+               if (icn != "") {
+                  // then force this classname as the classname for cblist
+                  cblist.setAttribute('itemclassname',this.itemclassname);
+                } else {
+                  //use the default subview as the classname
+                  this.itemclassname = cblist.itemclassname;
+                }
+            }
+            if (this.onitemclassname) this.onitemclassname.sendEvent();
+        </method>
+
+        <!--- @keywords private -->
+        <event name="ontext"/>
+
+        <!--- @keywords private -->
+        <method name="determinePlacement" args="newsub, placement, iargs" >
+            if (placement == 'cblist') 
+                return this.cblist.determinePlacement(newsub, placement, iargs);
+            else 
+                return super.determinePlacement(newsub, placement, iargs);
+        </method>
+
+        <!--- @keywords private -->
+        <method name="init" >
+            this._initcomplete = true;
+			
+            super.init();
+
+            // reassign classname now that the instance is inited
+            this.setItemclassname(this.itemclassname);
+            cblist.setVisible(false);
+         </method>
+
+        <!--- @keywords private -->
+        <handler name="onblur" >
+           if ( lz.Focus.getFocus() != this.interior.cbtext )
+                this.setOpen(false);
+        </handler>
+
+        <!--- @keywords private -->
+        <method name="getFocusRect"  >
+           var fx = this.getAttributeRelative('x',canvas);
+           var fy = this.getAttributeRelative('y',canvas);
+           var fw = this.getAttributeRelative('width',canvas);
+           var fh = this.getAttributeRelative('height',canvas);
+           return [fx,fy,fw,fh];
+        </method>
+
+        <!--- Selects a specific item in the list.
+              @param Object item: the item to select. -->
+        <method name="select" args="item" >
+           this.cblist.select(item);
+        </method>
+
+        <!--- @keywords private -->
+        <attribute name="_fixseldel" value="$once{new LzDelegate(this, 'fixSelection')}"/>
+        <!--- @keywords private -->
+        <method name="fixSelection">
+            this.interior.cbtext.setSelection(_fixseldel.start, _fixseldel.end);
+        </method>
+
+        <!--- this method listens for the onselect event from the floating list
+              and then resends the onselect event to itself so that developers can easily
+              reference that without knowing the internals of combobox
+              @keywords private -->
+        <handler name="onselect" reference="this.cblist"  args="v" > 
+			<![CDATA[
+				this.interior.cbtext.initSelect=true;
+				this.setOpen(false);
+	
+				// anItem has been selected so update the input text field
+				this.selected = v;
+				if (v) this.setAttribute('text',v.text);
+				if (lz.Focus.getFocus() == this.interior.cbtext) {
+					_fixseldel.start = 0;
+					_fixseldel.end = v.text.length;
+					lz.Idle.callOnIdle( _fixseldel );
+	
+				}
+	
+				// resend the event so that developers can write thier own
+				// onselect methods without having to know the internals of
+				// this class.
+				if ( this.onselect ) this.onselect.sendEvent(v);
+            ]]>
+        </handler>
+
+        <!--- @keywords private -->
+        <method name="passModeEvent" args="eventStr,view" > <![CDATA[
+            // Once a view has been made modal, this method
+            // gets called ONLY when a user clicks on a view 'outside'
+            // the contents of this view, or clicks on a inputtext view anywhere
+            // on the screen even for a subview within this view.
+            if ( eventStr == "onmousedown"  ){
+                // first, we only care about the mousedown event.
+                // if the user has pressed the mouse down on a textfield
+                // within the component, then we will not know this unless
+                // we test it to see if it is a subview of this component.
+
+                if ( view != null ) { // view is a clickable view
+                    // view is not LITERALLY part of the class heirarchy but
+                    // it maybe part of the floatingview of this component, and if so
+                    // then treat it as if it were a child of the class.
+
+                   if ( !view.childOf(this.cblist) ) {
+                        // view is outside of combobox so close the combbobox
+                        this.setOpen(false);
+
+                   } else {
+                        // view is a child of cblist, so don't do anything.
+                   }
+
+                } else {
+                    this.setOpen(false);
+                }
+            }
+            // if we're inside a modal dialog, need to propagate event manually
+            // since floating list is a child of the canvas
+            if (view && view.childOf(this.cblist)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+           // since a combox is not strictly modal, always return
+           // true to pass the event to the object (oustide combobox)
+           // that was clicked on
+           return true;
+        ]]> </method>
+
+        <!--- Toggles the open/close state of the popup list.
+            @param Boolean withkey: (optional) if true this is triggered by
+                  keyboard and focus indicators will be turned on;
+                  if false, this is triggered by mouse action and focus
+                  indicators will be turned off;
+                  if parameter is ommitted no change in focus indicator
+        -->
+        <method name="toggle" args="withkey">
+            this.setOpen(!this.isopen, withkey)
+        </method>
+
+        <!--- Sets the open/close state of the popup list.
+              @param Boolean open: true to open the list, else false to
+              close.
+              @param Boolean withkey: (optional) if true this is triggered by
+                    keyboard and focus indicators will be turned on;
+                    if false, this is triggered by mouse action and focus
+                    indicators will be turned off;
+                    if parameter is ommitted no change in focus indicator
+          -->
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+                lz.ModeManager.makeModal( this );
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+                lz.Focus.setFocus(this.cblist, withkey);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                lz.ModeManager.release( this );
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(interior.cbtext, withkey);
+                }
+            }
+        </method>
+
+        <!--- @keywords private -->
+        <method name="applyData" args="d">
+            this.setAttribute('text', d );
+        </method>
+
+
+        <!--- Get the value for the combobox.
+              @return Object: the value selected or the value in the text
+              field, if no value was found. -->
+        <method name="getValue">
+           var rv;
+           var ra = this.cblist.getValue(); // an array of values
+           if (ra==null) {
+               rv  = this.interior.cbtext.getText();
+           } else {
+               rv = ra;
+           }
+           return rv;
+        </method>
+
+        <!--- Sets the displayed text.
+              @param String t: the text to display. -->
+        <method name="setText" args="t">
+            this.text = t;
+            this.interior.cbtext.setAttribute('text', t );
+            if (!this._enabled) interior._dsblfield.setAttribute('text', t );
+            if ( this.ontext ) this.ontext.sendEvent( t );
+        </method>
+
+        <!--- Get the displayed text.
+              @return String: the displayed text. -->
+        <method name="getText">
+           return this.interior.cbtext.getText();
+        </method>
+
+        <!--- Returns current selection.
+              @return Object: null if no selection, an item if single select
+              (default), or an array of items if multiselect. -->
+        <method name="getSelection">
+            return this.cblist.getSelection();
+        </method>
+
+        <!--- Add the specified item to list to the end of the list.
+              @param String txt: the text for the item.
+              @param Object val: the value for the item. -->
+        <method name="addItem" args="txt, val" >
+            this.cblist.addItem(txt,val);
+        </method>
+
+        <!--- Find a particular item by value. This method is not available with
+              dataoption="lazy" or dataoption="resize" (use data APIs instead).
+              @param Object value: the value for the item to get.
+              @return Object: the item found, or null, if not.
+              -->
+        <method name="getItem" args="value">
+            return this.cblist.getItem(value);
+        </method>
+
+        <!--- Find a particular item by its index. This method not available
+              with dataoption="lazy" or dataoption="resize"
+              (use data APIs instead).
+              @param Number index: the index for the item to get.
+              @return Object: the item found, or null, if not. -->
+        <method name="getItemAt" args="index">
+            return this.cblist.getItemAt(index);
+        </method>
+
+        <!--- Find the first item with the specified value and remove it from
+              the list.
+              @param Object value: the value of the item to remove. -->
+        <method name="removeItem" args="value" >
+            this.cblist.removeItem(value);
+        </method>
+
+        <!--- Remove an item by index (0 based count). This method is not
+            available with dataoption="lazy" or dataoption="resize"
+            (use data APIs instead).
+              @param Number index: the index of the item to remove. -->
+        <method name="removeItemAt" args="index" >
+            this.cblist.removeItemAt(index);
+        </method>
+
+        <!--- Select an item by value. This method is not available with
+              dataoption="lazy" or dataoption="resize".
+              @param Object value: the value of the item to select.
+			  initSelect = true will NOT throw a validating event -->
+        <method name="selectItem" args="value,initSelect">
+			if (initSelect) this.interior.cbtext.initSelect=true;
+            this.cblist.selectItem(value);
+        </method>
+
+        <!--- Select an item by index (0 based count).
+              @param Number index: the index of the item to select. -->
+        <method name="selectItemAt" args="index">
+            this.cblist.selectItemAt(index);
+        </method>
+
+        <!--- Clear the current selection in the list and sets the displayed
+            text to an empty string -->
+        <method name="clearSelection" >
+            this.cblist.clearSelection();
+            this.setAttribute('text',"");
+        </method>
+
+        <!--- @keywords private -->
+        <method name="_applystyle" args="s">
+            if (this.style != null) {
+                interior.editbkgnd.setAttribute("bgcolor", s.textfieldcolor);
+                interior.cbtext.setAttribute('bgcolor',s.textfieldcolor);
+                setTint(bkgnd, s.basecolor);
+           }
+        </method>
+
+        <!--- @keywords private -->
+        <method name="_showEnabled">
+           interior.cbtext.setVisible(this._enabled);
+            if (!this._enabled) {
+                if (interior._dsblfield == null) {
+                    var t = new LzText(interior,
+                        { name: '_dsblfield', x: 2, y: 1,
+                          width:interior.width, height:interior.height,
+                            fgcolor:this['style'] ? this.style.textdisabledcolor : null});
+                } else {
+                   interior._dsblfield.setVisible(true);
+                }
+                interior._dsblfield.setAttribute('text',this.getText());
+            } else {
+                if (interior._dsblfield) interior._dsblfield.setVisible(false);
+            }
+        </method>
+
+        <method name="setWidth" args="w">
+            super.setWidth(Math.max(w,this.min_width));
+        </method>
+    </class>
+
+
+    <!--- A dropdown list of selectable items. Can either be editable or
+          not. -->
+    <class name="validBox" extends="baseValidCombobox">
+		
+        <view name="lft" resource="lzcombobox_lft_rsc" placement="bkgnd"/>
+        <view name="mid" resource="lzcombobox_mid_rsc" stretches="width" placement="bkgnd"/>
+        <basebutton name="rgt" resource="lzcombobox_rgt_rsc" styleable="true"
+                placement="bkgnd" onclick="classroot.toggle(false)" />
+		
+        <stableborderlayout axis="x" placement="bkgnd"/>
+		
+               <!--- @keywords private -->
+        <method name="_showEnabled">
+           super._showEnabled();
+           if (_enabled) {
+				this.bkgnd.lft.setAttribute('frame', 1 );
+				this.bkgnd.mid.setAttribute('frame', 1 );
+            } else {
+				this.bkgnd.lft.setAttribute('frame', 3 );
+				this.bkgnd.mid.setAttribute('frame', 3 );
+            }
+        </method>
+
+    </class>		
+ <!--
+		<edittext name="state" width="270" y="20" x="120" fontsize="11">
+			
+			<attribute name="timerDelegate" value="null"/>
+			<attribute name="typetime" type="number" value="500"/>
+			<attribute name="timerIsInited" value="false" type="boolean"/>
+			
+			<attribute name="formervalue" value="" type="string"/>
+			<attribute name="startValidate" value="false" type="boolean"/>
+			
+			<method name="getValue"> return this.id; </method>
+			<method name="setValued" args="txt,id"> 
+				//Debug.write("setValue:",txt,id); 
+				this.id = id; this.setAttribute('text',txt); 
+			</method>
+			
+			<handler name="onfocus"> //Debug.write("onfocus ",this.getText());
+				this.startValidate = true; this.formervalue = this.getText();
+				</handler>
+			<handler name="onvalue" args="txt">
+				<![CDATA[
+				//Debug.write("onvalue: ",txt,this.startValidate);
+				if (!this.timerIsInited && this.startValidate){
+					this.timerIsInited = true;
+					this.timerDelegate = new LzDelegate( this, "validatedText" );
+					//Debug.write("############### addTimer");
+					lz.Timer.addTimer( this.timerDelegate, this.typetime );
+				} else {
+					lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+				}
+				]]>
+			</handler>
+			<method name="validatedText">
+				<![CDATA[
+					//Debug.write("validatedText: ",this.getText());
+					//this.reset();
+					var t = canvas.validateCountry(this.getText());
+					//Debug.write('t: ',t.length);
+					this._cblist.setAttribute('visible',true);
+					this._cblist.removeAllItems();
+					for (var i=0;i<t.length;i++){
+						this._cblist.addItem(t[i].name,t[i].state_id);
+					}
+					lz.Timer.removeTimer(this.timerDelegate);
+					this.timerIsInited = false;
+					//Debug.write("validateText: ",this.getText());
+
+				]]>
+			</method>
+			<handler name="onblur" args="b"> //Debug.write("onblur: ",b);
+				<![CDATA[
+					if (b!=this._cblist){
+						var t = canvas.validateCountry(this.getText());
+						//Debug.write('t: ',t.length);
+						this._cblist.removeAllItems();
+						for (var i=0;i<t.length;i++){
+							this._cblist.addItem(t[i].name,t[i].state_id);
+						}
+						this.startValidate = false;
+						//this._cblist.setAttribute('visible',false);
+					} else {
+						//Debug.write("is this._cblist");
+					}
+				]]>
+				</handler>
+			
+			<floatinglist width="${ this.owner.width }" attach="bottom"
+				name="_cblist" visible="false" autoscrollbar="true" shownitems="7"
+				scrollbarclassname="scrollbarValidBox" >
+				<method name="removeAllItems" args="index"> 
+					for (var eg in _contentview.subviews){
+						_removeitem(_contentview.subviews[eg]); 
+					} 
+				</method>
+				<handler name="onselect" args="item"> 
+					//Debug.write("onselect:",item); 
+					//this.owner. 
+					this.setAttribute('visible',false);
+					lz.Focus.setFocus(this.owner); 
+				</handler>
+			</floatinglist>
+			
+		</edittext>
+  -->
+	
+	<validBox y="20" width="270" name="_validbox" 
+        shownitems="7" validate_method="$once{ canvas.validateCountry }" />
+    
+ </canvas>
diff --git a/WebContent/src/test/simpletestvalidText.lzx b/WebContent/src/test/simpletestvalidText.lzx
new file mode 100644
index 0000000..a71f716
--- /dev/null
+++ b/WebContent/src/test/simpletestvalidText.lzx
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+	
+<include href="lz/textlistitem.lzx" />
+<include href="lz/edittext.lzx" />
+<include href="lz/button.lzx" />
+	
+<script>
+<![CDATA[
+	
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+	
+]]>
+</script>
+	
+<attribute name="statesInitValues" value="null" />
+	
+<handler name="oninit">
+	<![CDATA[
+		var tChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+		var tCharsSmall = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
+		
+		this.statesInitValues = new Array();
+		var m = 0;
+		while (m<20){
+			for (var i = 0;i<26;i++){
+				for (var r=0;r<3;r++){
+					var t = new Array();
+					t["state_id"] = i*r;
+					t["name"] = tChars.charAt(i)+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100));
+					this.statesInitValues.push(t);
+				}
+			}
+			m++;
+		}
+		//Debug.write(this.statesInitValues);
+		
+		this._validbox.addAndSelectItem("Da","1");
+	]]>
+</handler>
+	
+<method name="validateCountry" args="str">
+	//Debug.write("validateCountry: ",str);
+	<![CDATA[
+		if (str.length!=0){
+			var a = new Array();
+			for (var i=0;i<canvas.statesInitValues.length;i++){
+				if (canvas.statesInitValues[i].name.startsWith(str))a.push(canvas.statesInitValues[i]);
+				//this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+			}
+			return a;
+		}
+	]]>	
+</method>	
+	
+
+    <class name="validText" extends="edittext">
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+        
+        <!--- the id-attribute of the resultset -->
+        <attribute name="resultId" value="id" type="string" />
+        <!--- the name-attribute of the resultset -->
+        <attribute name="resultName" value="name" type="string" />        
+					
+        <attribute name="initSelect" value="false" type="boolean" />
+					
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="500"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+        
+        <!--- items to be shown in the floatinglist -->
+        <attribute name="shownitems" value="7" type="number" />          
+        <attribute name="spacing" value="1" type="number" />  
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>   
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />      
+        
+        <attribute name="currentValue" type="string" value="" />
+        
+        <!--- refernce to the current selected item -->
+        <attribute name="_selected" value="null" />    
+        
+        <method name="addAndSelectItem" args="txt,id">
+            this.cblist.addItem(txt,id);
+            this.currentValue = id;
+            this.setAttribute('text',txt);
+        </method>    
+        
+        <method name="setSelection" args="obj">
+            this._selected = obj;
+            this.currentValue = obj.value;
+            this.setAttribute('text',obj.text);
+            this.setOpen(false,true);
+            this.onselect.sendEvent();
+        </method>    
+        
+        <handler name="onselect" args="obj" />
+        
+        <method name="getValue">
+            return this.currentValue;
+        </method>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+        <handler name="onkeydown" args="key">
+            <![CDATA[
+                //Debug.write("onkeydown: ",key);
+                // 38 is up-arrow
+                // 40 is down-arrow
+                // 32 is space
+                // 13 is return
+                if ((key==38) || (key==40)) {
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    // pass the key event on to the floatinglist
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key==27){
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key!=13 && key!=9){
+                    //Don't handle Enter and Tab Events cause it will open the listItems
+                    ////Debug.write("onkeydown txt: ",this.getText());
+                    if (!this.initSelect){
+                        ////Debug.write("onvalue: ",txt,this);
+                        if (!this.timerIsInited){
+                            this.timerIsInited = true;
+                            this.timerDelegate = new LzDelegate( this, "validatedText" );
+                            ////Debug.write("+++++++++++++++++ addTimer");
+                            //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                            lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                        } else {
+                            ////Debug.write("############### resetTimer NO ADDING ");
+                            //Debug.write("############### resetTimer ",lz.Timer.countTimers());
+                            lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+                        }
+                    } else {
+                        this.initSelect = false;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <method name="validatedText">
+            <![CDATA[
+                ////Debug.write("validatedText: ",this.getText());
+                //this.reset();
+                if (!this.initSelect){
+                    var t = this.validate_method(this.getText());
+                    ////Debug.write('t: ',t.length);
+                    //this.parent._cblist.setAttribute('visible',true);
+                    this.cblist.removeAllItems();
+                    for (var i=0;i<t.length;i++){
+                        ////Debug.write(t[i][this.resultName],t[i][this.resultId]);
+                        this.cblist.addItem(t[i][this.resultName],t[i][this.resultId]);
+                    }                
+
+                    ////Debug.write("validateText: ",this.getText());
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    }
+                    this.timerIsInited = false;
+                } else {
+                    this.initSelect=false;
+                    this.timerIsInited = false;
+                }
+            ]]>
+        </method>	
+        
+        <attribute name="isopen" value="false" type="boolean" setter="this.setOpen(isopen)" />
+        
+        <handler name="onisopen" args="bool" />
+        
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(this, withkey);
+                }
+            }
+        </method>           
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}" >
+
+            <method name="_dokeyup" args="kc"
+                    event="onkeyup">
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </method>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>	
+            <handler name="onselect" args="obj">
+                ////Debug.write("obj: ",obj);
+                this.owner.setSelection(obj);
+            </handler>	            	
+        </floatinglist>        
+        
+         <handler name="onclick" reference="lz.GlobalMouse" args="who">
+           <![CDATA[ 
+               //need to use lz.GlobalMouse, since we don't get clicks if we're
+               //checked. NB that lz.GlobalMouse sends its events before the view
+               //receives the events, so we can just unlock it here, and the
+               //checkbox can do its normal onclick handling.
+               //Debug.write("onclick lz.GlobalMouse",lz.GlobalMouse,who);
+               //if (who != this.cblist && who.childOf(this.cblist)){
+               //    this.setOpen(false,false);
+               //} 
+               // LPP-3165
+           ]]>
+         </handler>        
+
+    </class>
+	
+
+	<validText y="20" width="270" name="_validbox" 
+        shownitems="7" validate_method="$once{ canvas.validateCountry }" 
+        resultId="state_id" resultName="name" />
+    
+    <button x="300" y="20" text="getValues">
+        <handler name="onclick">
+            //Debug.write(parent._validbox.getValue());
+            //Debug.write(parent._validbox.getText());
+            //Debug.write(parent._validbox._selected);
+        </handler>
+    </button>
+    
+ </canvas>
diff --git a/WebContent/src/test/simpletimertest.lzx b/WebContent/src/test/simpletimertest.lzx
new file mode 100644
index 0000000..521baba
--- /dev/null
+++ b/WebContent/src/test/simpletimertest.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+    
+    <include href="lz/button.lzx" />
+ 
+    <simplelayout axis="y" spacing="10" />
+
+    <text name="myText" opacity="0.0" bgcolor="#CCCCCC">The Invisible Man</text>
+     
+     
+    <edittext >
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="2000"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+     
+        <handler name="onvalue">
+            //Debug.write("onvalue");
+            if (!this.timerIsInited){
+                this.timerIsInited = true;
+                canvas.myText.setAttribute( "opacity", 1.0 );
+                this.timerDelegate = new LzDelegate( this, "fadeText" );
+                //Debug.write("+++++++++++++++++ addTimer");
+                lz.Timer.addTimer( this.timerDelegate, this.typetime );
+            } else {
+                //Debug.write("############### resetTimer NO ADDING ");
+                lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+            }
+        </handler>
+     
+        <method name="fadeText">
+            this.timerIsInited = false;
+            //Debug.write("fadeText ");
+            canvas.myText.animate( "opacity", 0.0, 1000 );
+        </method>
+    </edittext>
+    
+    
+ 
+ </canvas>
diff --git a/WebContent/src/test/swf/Google.swf b/WebContent/src/test/swf/Google.swf
new file mode 100644
index 0000000..061e1d3
--- /dev/null
+++ b/WebContent/src/test/swf/Google.swf
Binary files differ
diff --git a/WebContent/src/test/swf/main.lzx b/WebContent/src/test/swf/main.lzx
new file mode 100644
index 0000000..2ee557a
--- /dev/null
+++ b/WebContent/src/test/swf/main.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+<button text="load SWF">
+    <handler name="onclick">
+        <![CDATA[
+	        if ($debug) Debug.write("load SWF");
+	        //parent.myView._swfView.setAttribute("src","Google.swf");
+	        parent.myView._swfView.setSource("http://localhost:5080/openmeetings/DownloadHandler?fileName=Google.swf&moduleName=videoconf1&parentPath=/Google&room_id=1&sid=a498726852b649da3cce4a5ee9cb3a9b");
+	        //parent.myView._swfView.setSource("http://localhost:5080/openmeetings/Google.swf");
+        ]]>
+    </handler>
+</button>
+
+<view name="myView" y="20">
+    <!--
+    play="false" stretches="both"
+     -->
+    <view name="_swfView" >
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            ////Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            ////Debug.write("onstop",i);
+        </handler>
+        
+        <handler name="onload">
+            <![CDATA[
+                Debug.write("onload: ",this);
+            ]]>
+        </handler>
+        <handler name="onerror" args="error">
+            <![CDATA[
+                Debug.write("onerror "+error);
+            ]]>
+        </handler>
+        <handler name="ontimeout" args="error">
+            <![CDATA[
+                Debug.write("ontimeout "+error);
+            ]]>
+        </handler> 
+    </view>
+</view>
+
+</canvas>
diff --git a/WebContent/src/test/swf/main.lzx.lzr=swf8.swf b/WebContent/src/test/swf/main.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..e766630
--- /dev/null
+++ b/WebContent/src/test/swf/main.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-arrow.lzx b/WebContent/src/test/test-arrow.lzx
new file mode 100644
index 0000000..6bcd29b
--- /dev/null
+++ b/WebContent/src/test/test-arrow.lzx
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="500" height="100%" >
+	
+	<debug oninit="Debug.showInternalProperties = true"/>
+	
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="-1" y="-1" >
+    
+</class>
+
+<drawview>
+    
+    <handler name="onconstruct">
+        <![CDATA[
+            //var pStart = {'x':100,'y':100};
+            //var pEnd = {'x':200,'y':200};
+            
+            var p = new flash.geom.Point(100,100);
+            var pEnd = new flash.geom.Point(100,200);
+            if ($debug) Debug.write("p",p);
+            
+            var normalizedPoint = new flash.geom.Point(-2, 4);
+			if ($debug) Debug.write(normalizedPoint.length); // 5
+			if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+			normalizedPoint.normalize(10);
+			if ($debug) Debug.write(normalizedPoint.length); // 10
+			if ($debug) Debug.write(normalizedPoint.toString()); // (x=6, y=8)
+            
+            
+            var normalizedPoint = new flash.geom.Point(2, -4);
+            if ($debug) Debug.write(normalizedPoint.length); // 5
+            if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+            normalizedPoint.normalize(10);
+            if ($debug) Debug.write(normalizedPoint.length); // 10
+            if ($debug) Debug.write(normalizedPoint.toString()); // (x=6, y=8)
+            
+            //normalizedPoint.normalize(5);
+            //if ($debug) Debug.write(normalizedPoint.length); // 10
+            //if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+
+            if ($debug) Debug.write("##################");
+            
+            var pArrowStart = new flash.geom.Point(100,100);
+	        var pArrowEnd = new flash.geom.Point(200,100);
+	        
+	        var obj = new lz.drawViewNew(canvas);
+	        
+	        this.drawArrow(obj,pArrowStart,pArrowEnd,4);
+        ]]>
+    </handler>
+    
+    <method name="test">
+        var p1 = p.normalize(1);
+        if ($debug) Debug.write("p1",p1);
+        
+        var p11 = flash.geom.Point.interpolate(p,pEnd,0.5);
+        if ($debug) Debug.write("p11",p11);
+        
+        
+        var p12 = pEnd.subtract(p);
+        if ($debug) Debug.write("p12",p12);
+        
+        
+        var pArrowStart = new flash.geom.Point(100,100);
+        var pArrowEnd = new flash.geom.Point(200,200);
+        
+        var obj = new lz.drawViewNew(canvas);
+        
+        this.drawArrow(obj,pArrowStart,pArrowEnd,4);
+        
+        pArrowStart = new flash.geom.Point(300,300);
+        pArrowEnd = new flash.geom.Point(200,200);
+        obj = new lz.drawViewNew(canvas);
+        this.drawArrow(obj,pArrowStart,pArrowEnd,20);
+        
+        pArrowStart = new flash.geom.Point(600,300);
+        pArrowEnd = new flash.geom.Point(200,100);
+        obj = new lz.drawViewNew(canvas);
+        this.drawArrow(obj,pArrowStart,pArrowEnd,20);
+        
+        var p1 = new flash.geom.Point(-60, -100);
+        var p2 = new flash.geom.Point(20, 50);
+        var f = 0.5;
+        
+        var p3 = flash.geom.Point.interpolate(p1,p2,f);
+        if ($debug) Debug.write("p3",p3);
+    </method>
+    
+    <method name="drawArrow" args="graphics,start,end,thickness">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            graphics.strokeStyle = 0x000000;
+            graphics.stroke();
+
+            graphics.fillStyle = 0x000000;
+            graphics.fill();
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>
+    
+    <method name="intermediatePoint" args="p1,p2,f">
+        <![CDATA[
+            
+            var d = Math.sqrt( Math.abs(p1.x - p2.x)^2 + Math.abs(p2.y - p2.y)^2 );
+        
+        ]]>
+    </method>
+    
+</drawview>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/test-baseDraw.lzx b/WebContent/src/test/test-baseDraw.lzx
new file mode 100644
index 0000000..e62cae6
--- /dev/null
+++ b/WebContent/src/test/test-baseDraw.lzx
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" >
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<drawview x="0" y="0" width="100" height="100">
+	
+	<handler name="onwidth">
+		Debug.write(this.isinited);
+	</handler>
+	
+	<handler name="onheight">
+		Debug.write(this.isinited);
+	</handler>
+	
+</drawview>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/test-drawview.lzx b/WebContent/src/test/test-drawview.lzx
new file mode 100644
index 0000000..d447b49
--- /dev/null
+++ b/WebContent/src/test/test-drawview.lzx
@@ -0,0 +1,56 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="800">
+
+    <debug x="250" height="500" /> 
+
+    <drawview width="200" height="100">
+        
+        <handler name="oninit">
+            this.drawBody(this,0,0,this.width,this.height,0xff3300,2);
+        </handler>
+        
+        <handler name="onclick">
+            this.drawBody(this,0,0,this.width,this.height,0xff3300,2);
+        </handler>
+        
+        <method name="drawBody" args="targetObj,x1,y1,x2,y2,fill,lineWidth">
+        <![CDATA[
+            
+            if ($debug) Debug.write("drawBody: ",targetObj,lineWidth);
+        
+            targetObj.lineWidth = lineWidth;
+            targetObj.beginPath();
+            targetObj.moveTo(x1,y1);
+            targetObj.lineTo(x1,y2);
+            targetObj.lineTo(x2,y2);
+            targetObj.lineTo(x2,y1);
+            targetObj.lineTo (x1,y1);
+            targetObj.closePath();
+
+            targetObj.fillStyle = fill;
+            targetObj.fill();
+            
+        ]]>   
+    </method>   
+        
+    </drawview>
+
+</canvas>
diff --git a/WebContent/src/test/test-menubar.lzx b/WebContent/src/test/test-menubar.lzx
new file mode 100644
index 0000000..083ecdf
--- /dev/null
+++ b/WebContent/src/test/test-menubar.lzx
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+    
+    <!-- private class for conferenceMenubar class -->
+    <class name="_labelMenuItem" extends="menuitem" text="labelmenulabelmenulabelmenu">
+        <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+        <method name="setLabelId" args="_labelid" >
+            this.labelid = _labelid;
+            this.setAttribute('text',"text "+this.labelid);
+        </method>
+    </class>    
+        
+    <!-- private class for conferenceMenubar class -->
+    <class name="_labelMenu" extends="menu" text="labelmenulabelmenulabelmenu">
+        <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+        <method name="setLabelId" args="_labelid" >
+            this.labelid = _labelid;
+            this.setAttribute('text',"text "+this.labelid);
+        </method>
+    </class>  
+    
+    <class name="conferenceMenubar" extends="menubar" height="28" >
+       <!-- exit room -->
+        <_labelMenu labelid="308" width="250">
+            <_labelMenuItem labelid="309" />
+        </_labelMenu>
+        <!-- moderator menu -->
+        <_labelMenu labelid="301" width="250">
+            <_labelMenuItem labelid="302" />
+        </_labelMenu>
+        <!-- file menu -->
+        <_labelMenu labelid="245" width="250">
+            <_labelMenuItem labelid="15" />
+        </_labelMenu>    
+       <!-- setteings menu --> 
+        <_labelMenu labelid="305" width="250">
+            <_labelMenuItem labelid="306" />
+            <_labelMenuItem labelid="307" />
+        </_labelMenu>   
+        <!-- poll memu -->     
+        <_labelMenu labelid="303" width="250">
+            <_labelMenuItem width="250" labelid="24" />
+            <_labelMenuItem width="250" labelid="37" />
+            <_labelMenuItem width="250" labelid="42" />
+        </_labelMenu>    
+    </class>    
+    
+    
+    <handler name="oninit">
+        new lz.conferenceMenubar(canvas);
+    </handler>
+    
+</canvas>
diff --git a/WebContent/src/test/test-regExp.lzx b/WebContent/src/test/test-regExp.lzx
new file mode 100644
index 0000000..088728e
--- /dev/null
+++ b/WebContent/src/test/test-regExp.lzx
@@ -0,0 +1,90 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" >
+  
+
+      <script when="immediate" >        
+        class LzRegExp extends Instance{
+          static var regexp_cnt = 0;
+          
+          static function initialize(){
+
+              /* if this was in the html-wrapper, would early instantiations be successful? */
+              lz.Browser.loadJS( "window.__lzregexp={};" + 
+                "window.__createRegExp=function(id,re,mod){window.__lzregexp[id]=new RegExp(re,mod);return true};" +
+                "window.__testRegExp=function(id,s){return window.__lzregexp[id].test(s)};" +
+                "window.__execRegExp=function(id,s){return window.__lzregexp[id].exec(s)};" +
+                "window.__deleteRegExp=function(id){delete window.__lzregexp[id]};" 
+              );
+
+          }
+          
+          function initialize( regexp, mod ){
+            super.initialize( this, arguments );
+
+              this.regexp_id = LzRegExp.regexp_cnt++;
+              this.__isready = true;
+              
+              var me = this;
+              lz.Browser.callJS( "window.__createRegExp", function(res){me.__isready = res == true}, this.regexp_id, regexp, mod );
+
+          }
+          
+          function test( s ){
+              if( this.__isready ){
+                return flash.external.ExternalInterface.call.apply( flash.external.ExternalInterface, ["window.__testRegExp", this.regexp_id, s] );
+              } else {
+                Debug.format( "called %w too early", arguments.callee.name );
+              }
+          }
+          
+          function exec( s ){
+              if( this.__isready ){
+                return flash.external.ExternalInterface.call.apply( flash.external.ExternalInterface, ["window.__execRegExp", this.regexp_id, s] );
+              } else {
+                Debug.format( "called %w too early", arguments.callee.name );
+              }
+          }
+          
+          function destroy(){
+            lz.Browser.callJS( "window.__deleteRegExp", null, this.regexp_id );
+          }
+        }
+      </script>
+
+  <button name="btn" text="test" />
+  
+  <handler name="oninit" reference="canvas" method="testRegExp" />
+  <handler name="onclick" reference="btn" method="testRegExp" />
+  
+  <method name="testRegExp" >
+    var regexp = new LzRegExp( ".ello" );
+    Debug.write( regexp.test( "Hello" ) );
+    Debug.write( regexp.test( "Hallo" ) );
+    regexp.destroy();
+
+    global.regexpflag = global["regexpflag"] == true;
+    if( !global.regexpflag ){
+      global.regexpflag = true;
+      lz.Timer.addTimer( new LzDelegate( canvas, "testRegExp" ), 500 );
+    }
+  </method>
+  
+</canvas>
diff --git a/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf b/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..df4a310
--- /dev/null
+++ b/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-regExp2.lzx b/WebContent/src/test/test-regExp2.lzx
new file mode 100644
index 0000000..efedaf0
--- /dev/null
+++ b/WebContent/src/test/test-regExp2.lzx
@@ -0,0 +1,77 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" >
+  <script>
+    _browserjavascriptcallback = "";
+  </script>
+  
+     <attribute name="lzappId" type="string" value="lzapp" />
+     <attribute name="timer" type="number" value="10" />
+     <attribute name="prevalue" type="string" value="_browserjavascriptcallbackprevalue" />
+     <attribute name="value" />
+     
+     <handler name="onvalue" args="v">
+     	if ($debug) Debug.write("onvalue: ",v);
+     	
+     </handler>
+     
+	<edittext name="_hand" />
+  
+  <button name="btn" y="20" text="test" onclick="canvas.testRegExp()" />
+
+  <method name="testRegExp2">
+  	<![CDATA[
+  		var regExp = "[0-9]*";
+  		
+    	var fieldValue = this._hand.getText();
+  	    
+    	var returnValue = flash.external.ExternalInterface.call("replace",fieldValue,escape(regExp),escape);
+    	if ($debug) Debug.write("returnValue: ",returnValue);
+	]]>
+ </method>
+ 
+ <method name="testRegExp" >
+ 	<![CDATA[
+	var fieldValue = "9";
+	var regExp = "[0-9]*";
+    var regex = "/^"+regExp+"$/";
+    var script = "( !( (\""+ fieldValue +"\".replace("+ regex +" ,\"\").length == 0) && ( "+ regex +".test(\""+ fieldValue +"\")) ) ) ";
+  
+	var t = script.split("'").join("\\'");
+	var s = "document.getElementById('"+ lzappId + "').SetVariable('_browserjavascriptcallback', escape((" + t + ")));"
+
+	
+		lz.Browser.loadJS(s);
+		
+		if(typeof this.callDelegate == 'undefined')
+		this.callDelegate = new LzDelegate( this, "callback" );
+		lz.Timer.resetTimer( this.callDelegate, timer );
+		]]>
+   </method>
+
+ <method name="callback">
+	if(unescape(_browserjavascriptcallback) == this.prevalue)
+	lz.Timer.resetTimer( this.callDelegate, timer );
+	else
+	setAttribute("value", unescape(_browserjavascriptcallback));
+ </method>
+
+
+</canvas>
diff --git a/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf b/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..4d97d95
--- /dev/null
+++ b/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-regexp.html b/WebContent/src/test/test-regexp.html
new file mode 100644
index 0000000..26f4890
--- /dev/null
+++ b/WebContent/src/test/test-regexp.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html>
+<head>
+	<link rel="shortcut icon" href="favicon.ico" > 
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>vMapPortal</title>
+	<script type="text/javascript" src="swfobject.js"></script>
+	<style type="text/css">
+		
+		/* hide from ie on mac \*/
+		html {
+			height: 100%;
+			overflow: hidden;
+		}
+		
+		#flashcontent {
+			height: 100%;
+		}
+		/* end hide */
+	
+		body {
+			height: 100%;
+			margin: 0;
+			padding: 0;
+			background-color: #ffffff;
+		}
+	
+	</style>
+</head>
+<body onLoad="focusSWF()">
+
+
+	<div id="flashcontent">
+		<strong>You need to upgrade your Flash Player</strong>
+		This is replaced by the Flash content. 
+		Place your alternate content here and users without the Flash plugin or with 
+		Javascript turned off will see this. Content here allows you to leave out <code>noscript</code> 
+		tags.
+	</div>
+	
+	<script type="text/javascript">
+		// <![CDATA[
+		
+		var so = new SWFObject("portal.swf", "lzapp", "100%", "100%", "8", "#ffffff");
+		so.addParam("quality", "high");
+		so.addParam("id", "lzapp");
+		so.addParam("allowScriptAccess", "always");
+		so.addParam("scale", "noscale");
+		so.write("flashcontent");
+		
+		function focusSWF(){
+		
+		    if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
+		    }else {
+		        document.getElementById('lzapp').focus();
+		    }
+		}   		
+		
+		// ]]>
+	</script>	
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/WebContent/src/test/test-scrollEdittext.lzx b/WebContent/src/test/test-scrollEdittext.lzx
new file mode 100644
index 0000000..0f820f1
--- /dev/null
+++ b/WebContent/src/test/test-scrollEdittext.lzx
@@ -0,0 +1,37 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="800">
+
+    <debug x="250" height="500" /> 
+
+    <include href="scrolledittext.lzx"/>
+
+    <scrolledittext name="_scrolledittext" y="130" x="120" width="270" height="120"
+                                  text="" />
+                                  
+                                  
+    <view width="200" height="100" y="300" x="100" bgcolor="0xFFFFFF">
+        <inputtext multiline="true" width="${ parent.width - 14 }">
+            
+        </inputtext>
+        <om_vscrollbar />
+    </view>
+
+</canvas>
diff --git a/WebContent/src/test/test-setup.lzx b/WebContent/src/test/test-setup.lzx
new file mode 100644
index 0000000..60ecfab
--- /dev/null
+++ b/WebContent/src/test/test-setup.lzx
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	you under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<canvas debug="true" height="100%" title="Audio-Video Test-Application">
+
+	<debug width="450" x="460" y="600" height="100" />
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+			    import flash.events.*;
+	            import flash.net.*;
+	            import flash.media.*
+			</passthrough>
+		</when>
+	</switch>
+	
+	<class name="myListItem" extends="textlistitem">
+	</class>
+
+	<!--- NetConnection -->
+	<attribute name="_nc" value="null" />
+
+	<!--- NetStream -->
+	<attribute name="_nsBroadCast" value="null" />
+	<attribute name="_nsPlay" value="null" />
+
+	<!--- devices - Reference -->
+	<attribute name="_camera" value="null" />
+	<attribute name="_micro" value="null" />
+
+	<method name="connectRtmpConnection">
+		this._nc = new NetConnection();
+		this._nc.proxyType = "best";
+		Debug.write("connectRtmpConnection URL:",url.getText());
+		this._nc.connect(url.getText());
+		
+		this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);
+		var clientObj = {};
+   		clientObj.setId = this.setId;
+   		
+   		this._nc.client = clientObj;
+    		
+		//this._nc.onStatus = function(info){
+		//Debug.write(info.code,info);
+		//}
+	</method>
+	
+	<method name="setId" args="tId">
+		if ($debug) Debug.write("setId ", tId);
+	</method>
+	
+    <method name="_onStatus" args="stats"><![CDATA[
+        if ($debug) {
+            Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);
+        }
+      ]]>
+    </method>
+
+	<method name="startBroadCast">
+	<![CDATA[
+	    if ($debug) Debug.write("startBroadCast 1");
+	    if (this._camera != null) {
+		  this._camera = Camera.getCamera(camDevices.getValue());
+		}
+		if ($debug) Debug.write("startBroadCast 2");
+		//sets the Mode
+		//see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html#setMode%28%29
+		if (this._camera != null) this._camera.setMode(Number(streamwidth.getText()),Number(streamheight.getText()),Number(streamfps.getText()),streamfavorarea.getValue());	
+		if ($debug) Debug.write("startBroadCast 3");
+		//sets the Quality
+		//see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html#setQuality%28%29
+		if (this._camera != null) this._camera.setQuality(Number(streambandwidth.getText()),Number(streamquality.getText()));	
+		if ($debug) Debug.write("startBroadCast 4");
+		if (useEnhancedMicrophone.getValue()) {
+			this._micro = Microphone.getEnhancedMicrophone(micDevices.getValue());
+			
+			if ($debug) Debug.write(this._micro.enhancedOptions);
+			
+		} else {
+			this._micro = Microphone.getMicrophone(micDevices.getValue());
+		}
+		if ($debug) Debug.write("startBroadCast 5");
+		this._micro.codec = SoundCodec.NELLYMOSER;
+		if ($debug) Debug.write("startBroadCast 6");
+		//sets the Microphone Rate in Khz
+		//see:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Microphone.html#rate
+		this._micro.rate = Number(streamrate.getText());
+		if ($debug) Debug.write("startBroadCast 7");
+		this._micro.gain = 50;
+		if ($debug) Debug.write("startBroadCast 8");
+		//sets wether useEchoSupression should be used or not
+		//http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Microphone.html#useEchoSuppression
+		this._micro.setUseEchoSuppression(streamuseEchoSuppression.getValue());
+		if ($debug) Debug.write("startBroadCast 9");
+		//attaches the Camera to the View
+		if (this._camera != null) broadCastVideo.attachVideo(this._camera);
+		if ($debug) Debug.write("startBroadCast 10");
+		this._nsBroadCast =  new NetStream(this._nc);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+        //according to the docs the construct to catch event has to be implemented like this.
+        var t = this;
+		var clientObject = new Object();
+		if ($debug) Debug.write("startBroadCast 11");
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		if ($debug) Debug.write("startBroadCast 12");
+		this._nsBroadCast.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._nsBroadCast.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	    if ($debug) Debug.write("startBroadCast 13");
+		if (this._camera != null) this._nsBroadCast.attachCamera(this._camera);
+	    this._nsBroadCast.attachAudio(this._micro);
+	    if ($debug) Debug.write("startBroadCast 14");
+	    this._nsBroadCast.publish(streamname.getText(),"live");
+	    if ($debug) Debug.write("startBroadCast 15");
+    ]]>
+	</method>
+	
+	<method name="onNetStatus2" args="evt">
+		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);
+	</method>
+	
+	<method name="asyncError" args="error">
+		if($debug) Debug.write("simpleNetStream asyncError",error);
+	</method>
+	
+	<method name="netStatus" args="status">
+		if($debug) Debug.write("simpleNetStream netStatus",status);
+	</method>
+	
+	<method name="ioError" args="error">
+		if($debug) Debug.write("simpleNetStream ioError",error);
+	</method>
+
+    <method name="onCuePoint" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onCuePoint",info);
+    ]]></method>
+
+    <method name="onPlayStatus" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onPlayStatus",info);
+    ]]></method>
+
+    <method name="onMetaData" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onMetaData",info);
+    ]]></method>
+
+	<method name="stopBroadCast">
+		this._nsBroadCast.publish(false);
+		broadCastVideo.attachVideo(null);
+		broadCastVideo.stopIt();
+		this._nsBroadCast.close();
+	</method>
+
+
+	<method name="playBroadCast">
+	<![CDATA[
+		//attaches the Camera to the View
+	
+		this._nsPlay =  new NetStream(this._nc);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+        //according to the docs the construct to catch event has to be implemented like this.
+        var t = this;
+		var clientObject = new Object();
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		this._nsPlay.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._nsPlay.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	
+	    //sets the Buffer for the Playing
+	    //see: http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002567.html#wp393038
+	    //this._nsPlay.setBufferTime(Number(this.streambuffer.getText())); 
+	    //=> disabled, cause this leads to Buffer-Full-Buffer-Empty-Events after re-syncing
+		playVideo.attachVideo(this._nsPlay);
+	    
+	    this._nsPlay.play(streamname.getText(),-1);
+    ]]>
+	</method>
+
+	<method name="stopPlayBroadCast">
+		this._nsPlay.pause();
+		this._nsPlay.close();
+		playVideo.attachVideo(null);
+		playVideo.stopIt();
+	</method>
+
+	<view layout="axis:y;spacing:4" width="450" x="0">
+		<text fontstyle="bold"
+			text="Connection - Settings (user for both BroadCasting and Subscribing)" />
+		<view width="450">
+			<text text="URL:" />
+			<edittext align="right" width="350" id="url"
+				text="rtmp://127.0.0.1:1935/openmeetings/testscope" />
+		</view>
+		<button align="right" width="200" text="connectRtmpConnection"
+			onclick="canvas.connectRtmpConnection()" />
+	</view>
+	<!-- some description -->
+	<text fontstyle="italic" y="0" width="450" multiline="true" x="450">
+		You can test all Settings of Audio and Video Streamings which are currently used in OpenMeetings here. <br /> 
+		Change the URL so that 127.0.0.1 points to your Red5-Installation! <br />
+		You first need to <b>connect</b> to a stream before you start to <b>broadcast</b>!<br />
+		You first need <b>broadcast</b> a stream with a name before you try to <b>subscribe</b> to it!<br />
+		If somebody already uses that streamname you get an NetStream *Bad.StreamName*, you can take an StreamName you like, but of course you have to tell the *player* that it will need to use that StreamName!
+		<br />
+	</text>
+
+	<checkbox name="modus" y="120"
+		text="Event Modus (320x240) or Conference Modus (128x96)" value="true">
+		<handler name="onvalue" args="v">
+			if (canvas.isinited) {
+				if (v){
+					broadCastVideo.setAttribute('width',320);
+					broadCastVideo.setAttribute('height',240);
+					broadCastVideo.applySizeToVid();
+					playVideo.setAttribute('width',320);
+					playVideo.setAttribute('height',240);
+					playVideo.applySizeToVid();
+				} else {
+					broadCastVideo.setAttribute('width',128);
+					broadCastVideo.setAttribute('height',96);
+					broadCastVideo.applySizeToVid();
+					playVideo.setAttribute('width',128);
+					playVideo.setAttribute('height',96);
+					playVideo.applySizeToVid();
+				}
+			}
+		</handler>
+	</checkbox>
+
+	<view bgcolor="black" width="${ canvas.width }" height="2" y="140" />
+
+	<!-- two columns left BroadCast, right Subscribe a Stream -->
+	<view y="144" height="$once{ canvas.height-this.y }" clip="true">
+		<!--- ScrollArea -->
+		<view layout="axis:x;spacing:10">
+			<!--- BroadCasting Area -->
+			<view layout="axis:y;spacing:4" width="450">
+
+				<!--- Video Area -->
+				<view id="broadCastVideo" bgcolor="black" width="320" height="240">
+				
+					<passthrough when="$as3">
+				        import flash.media.*;
+				        import flash.net.NetConnection;
+				        import flash.net.NetStream;
+				    </passthrough>
+				    
+				    <attribute name="__LZvideo" value="null" />
+								
+					<method name="init"><![CDATA[
+				        super.init();
+				        var mc = new Video(this.width, this.height);
+				        this.sprite.addChild(mc);
+				        this.__LZvideo = mc;
+				        this.applySizeToVid();
+				    ]]></method>
+					<method name="applySizeToVid">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.width = this.width;
+						vid.height = this.height;
+					</method>
+					<method name="_getflashvideo">
+						<![CDATA[
+				            //Debug.write("_getflashvideo()");
+				            return this.__LZvideo;
+				        ]]>
+				    </method>
+					<method name="stopIt">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+				    	vid.attachNetStream(null);
+						this.__LZvideo.clear();
+					</method>
+					<!--- shows the Video (can be a Cam-Instance or a NetStream) in the 
+						View -->
+					<method name="attachVideo" args="video">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.attachCamera(video);
+					</method>
+				</view>
+
+				<text fontstyle="bold" text="BroadCast - Settings" />
+				<view width="450">
+					<text text="StreamName (BroadCast):" />
+					<edittext align="right" width="150" id="streamname" text="stream1" />
+				</view>
+
+				<button align="right" width="200" text="startBroadCast"
+					onclick="canvas.startBroadCast()" />
+				<button align="right" width="200" text="stopBroadCast"
+					onclick="canvas.stopBroadCast()" />
+
+				<text fontstyle="bold" text="Video and Audio - Settings for Broad-Casting" />
+
+				<!--- Settings -->
+				<view width="450">
+					<text text="Camera:" />
+					<combobox align="right" width="350" id="camDevices"
+						editable="false" itemclassname="myListItem">
+						<switch>
+				            <when property="$as3">
+				                <passthrough>
+				                    import flash.media.Camera;
+				                </passthrough>
+				            </when>
+				        </switch>
+						<handler name="oninit">
+						<![CDATA[
+							//Get all availible Cam's
+							var tw = Camera.names;
+							var r = "";
+							for (var eg=0;eg<tw.length;eg++){
+								this.addItem(tw[eg],eg);
+								r=eg;
+							}
+							this.selectItem(String(r));  
+						]]>
+						</handler>
+					</combobox>
+				</view>
+				<!--- Width -->
+				<view width="450">
+					<text text="Width:" />
+					<edittext align="right" width="150" id="streamwidth"
+						text="$ { broadCastVideo.width }" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						width:Number [optional] - The requested capture width, in pixels. The default value is 160.
+					</text>
+				</view>
+				<!--- Height -->
+				<view width="450">
+					<text text="Height:" />
+					<edittext align="right" width="150" id="streamheight"
+						text="$ { broadCastVideo.height }" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						height:Number [optional] - The requested capture height, in pixels. The default value is 120.
+					</text>
+				</view>
+				<!-- Frames Per Second -->
+				<view width="450">
+					<text text="FPS:" />
+					<edittext align="right" width="150" id="streamfps" text="30" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						fps:Number [optional] - The requested rate at which the camera should capture data, in frames per second. The default value is 15.
+					</text>
+				</view>
+				<!--- FavorArea -->
+				<view width="450">
+					<checkbox id="streamfavorarea" text="Favorarea" value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						favorArea:Boolean [optional] - A Boolean value that specifies how to manipulate the width, height, and frame rate if the camera does
+						not have a native mode that meets the specified requirements. The default value is true, which means that maintaining capture size
+						is favored; using this parameter selects the mode that most closely matches width and height values, even if doing so
+						adversely affects performance by reducing the frame rate. To maximize frame rate at the expense of camera height and width,
+						pass false for the favorArea parameter.
+					</text>
+				</view>
+				<!--- Bandwidth -->
+				<view width="450">
+					<text text="Bandwidth:" />
+					<edittext align="right" width="150" id="streambandwidth"
+						text="0" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						bandwidth:Number [optional] - An integer that specifies the maximum amount of bandwidth that the current outgoing video feed
+						can use, in bytes per second. To specify that Flash video can use as much bandwidth as needed to maintain the value of frameQuality, pass 0 for bandwidth.
+					</text>
+				</view>
+				<!--- Quality -->
+				<view width="450">
+					<text text="Quality:" />
+					<edittext align="right" width="150" id="streamquality"
+						text="90" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						quality:Number [optional] - An integer that specifies the required level of picture quality, as determined by the amount of
+						compression being applied to each video frame. Acceptable values range from 1 (lowest quality, maximum compression) to 100 (highest
+						quality, no compression). To specify that picture quality can vary as needed to avoid exceeding bandwidth, pass 0 for quality. The
+						default value is 0.
+					</text>
+				</view>
+				<!--- Choose Microphone -->
+				<view width="450">
+					<text text="Microphone:" />
+					<combobox align="right" width="350" id="micDevices"
+						editable="false" itemclassname="myListItem">
+						<switch>
+				            <when property="$as3">
+				                <passthrough>
+				                    import flash.media.Microphone;
+				                </passthrough>
+				            </when>
+				        </switch>
+						<handler name="oninit">
+						<![CDATA[
+							//Get all availible Cam's
+							var tw = Microphone.names;
+							var r = "";
+							for (var eg=0;eg<tw.length;eg++){
+								this.addItem(tw[eg],eg);
+								r=eg;
+							}
+							this.selectItem(String(r));  
+						]]>
+						</handler>
+					</combobox>
+				</view>
+				<!--- Audio-Rate -->
+				<view width="450">
+					<text text="Rate:" />
+					<edittext align="right" width="150" id="streamrate" text="22" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						rate:Number - The rate at which the microphone should capture sound, in kHz. Acceptable values are 5, 8, 11, 22, and 44. The
+						default value is 8 kHz if your sound capture device supports this value. Otherwise, the default value is the next available capture
+						level above 8 kHz that your sound capture device supports, usually 11 kHz.
+					</text>
+				</view>
+				<!--- useEchoSupression -->
+				<view width="450">
+					<checkbox id="streamuseEchoSuppression" text="useEchoSuppression"
+						value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						public useEchoSuppression : Boolean [read-only] Property (read-only); a Boolean value of true if echo suppression is enabled, false
+						otherwise. The default value is false unless the user has selected Reduce Echo in the Flash Player Microphone Settings panel.
+						<br/><br/>
+						Echo suppression is an effort to reduce the effects of audio feedback, which is caused when sound going out the speaker is picked up by the microphone on the same system. (This is different from acoustic echo cancellation, which completely removes the feedback. The setUseEchoSuppression() method is ignored when you call the getEnhancedMicrophone() method to use acoustic echo cancellation.)
+					</text>
+				</view>
+				
+				<!--- enhanced Microphone -->
+				<view width="450">
+					<checkbox id="useEnhancedMicrophone" text="Use Enhanced Microphone"
+						value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+					To use acoustic echo cancellation, set this value to true.
+					</text>
+				</view>
+			</view>
+
+			<!--- Play Area -->
+			<view layout="axis:y;spacing:4" width="450">
+
+				<!--- Video Output -->
+				<view id="playVideo" bgcolor="black" width="320" height="240">
+				
+					<passthrough when="$as3">
+				        import flash.media.*;
+				        import flash.net.NetConnection;
+				        import flash.net.NetStream;
+				    </passthrough>
+				
+					<method name="init"><![CDATA[
+				        super.init();
+				        var mc = new Video(this.width, this.height);
+				        this.sprite.addChild(mc);
+				        this.__LZvideo = mc;
+				        this.applySizeToVid();
+				    ]]></method>
+					<method name="applySizeToVid">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.width = this.width;
+						vid.height = this.height;
+					</method>
+					<method name="_getflashvideo">
+						<![CDATA[
+				            //Debug.write("_getflashvideo()");
+				            return this.__LZvideo;
+				        ]]>
+				    </method>
+					<method name="stopIt">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+				    	vid.attachNetStream(null);
+						this.__LZvideo.clear();
+					</method>
+					<!--- shows the Video (can be a Cam-Instance or a NetStream) in the 
+						View -->
+					<method name="attachVideo" args="video">
+						var vid = this._getflashvideo();
+						vid.attachNetStream(video);
+					</method>
+				</view>
+
+				<view height="20" />
+				<text fontstyle="bold"
+					text="Play-Broadcast(Subscribe to a Live Stream) - Settings" />
+				<view width="450">
+					<text text="StreamName (Play):" />
+					<edittext align="right" width="150" id="streamname2" text="stream1" />
+				</view>
+				<!--- Buffer Time -->
+				<view width="450">
+					<text text="BufferTime:" />
+					<edittext align="right" width="150" id="streambuffer"
+						text="0.3" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						public bufferTime : Number [read-only] The number of seconds assigned to the buffer by
+						NetStream.setBufferTime(). The default value is .1(one-tenth of a second). To determine the number of seconds currently in the
+						buffer, use NetStream.bufferLength.
+					</text>
+				</view>
+				<button align="right" width="200" text="playBroadCast"
+					onclick="canvas.playBroadCast()" />
+				<button align="right" width="200" text="stopPlayBroadCast"
+					onclick="canvas.stopPlayBroadCast()" />
+			</view>
+		</view>
+		<vscrollbar />
+	</view>
+
+</canvas>
diff --git a/WebContent/src/test/test-setup.lzx.swf11.swf b/WebContent/src/test/test-setup.lzx.swf11.swf
new file mode 100644
index 0000000..5f8a758
--- /dev/null
+++ b/WebContent/src/test/test-setup.lzx.swf11.swf
Binary files differ
diff --git a/WebContent/src/test/test-soap.lzx b/WebContent/src/test/test-soap.lzx
new file mode 100644
index 0000000..d7778e3
--- /dev/null
+++ b/WebContent/src/test/test-soap.lzx
@@ -0,0 +1,51 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" height="400" width="530">
+
+    <debug x="10" y="190" width="510" height="200"/>
+
+    <soap name="fileService" wsdl="http://localhost:5080/openmeetings/services/FileService?wsdl">
+        <handler name="onload">
+            Debug.write('fileService soap service loaded');
+        </handler>
+
+        <handler name="onerror" args="error">
+            Debug.write('error:', error);
+        </handler>
+
+        <!-- See RPC chapter for details on remotecall and how dataobject is
+             used to data bind to RPC operation results. --> 
+        <remotecall name="ping" funcname="ping">
+        	<param value="1"/>
+            <handler name="ondata" args="value">
+                Debug.write('result:\n', value);
+            </handler>
+        </remotecall>
+    </soap>
+
+    <view x="10" y="10" layout="spacing: 5">
+        <view layout="axis: x; spacing: 5">
+            <edittext id="s" text="SOAP"/>
+            <button text="search" onclick="Debug.write('Invoking search...'); fileService.ping.invoke()"/>
+        </view>
+
+    </view>
+
+</canvas>
diff --git a/WebContent/src/test/testLPP4154.lzx b/WebContent/src/test/testLPP4154.lzx
new file mode 100644
index 0000000..4ca73f3
--- /dev/null
+++ b/WebContent/src/test/testLPP4154.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+    
+<class name="swfResourceView" extends="view" play="false" y="40">
+        
+        <handler name="onload">
+            //Debug.write("Resource loaded: ",this);
+            this.stop();
+            this.setAttribute('play',false);
+        </handler>
+        
+        <handler name="onclick">
+            //Debug.write("onclick: ",this.sprite);
+            //Debug.write("onclick: ",this.sprite.getDisplayObject());
+        </handler>        
+        
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            //Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            //Debug.write("onstop",i);
+        </handler>        
+        
+</class>    
+    
+<button text="setSource" onclick="xyz.setSource('Tutorat.swf')" >
+    <handler name="onclick">
+        var tempView = new lz.swfResourceView(canvas,{id:'xyz'});
+        tempView.setSource('Tutorat.swf');
+    </handler>
+</button>
+
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testLineWidth.lzx b/WebContent/src/test/testLineWidth.lzx
new file mode 100644
index 0000000..0142622
--- /dev/null
+++ b/WebContent/src/test/testLineWidth.lzx
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<!--
+	Tests for calculating the linewidth in a multinline Textbox for each line
+	the meaning of several vars can be seen here:
+	http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/js/html/wwhelp.htm
+ -->	
+    
+<script>
+<![CDATA[
+
+	var maxsize = 220;
+	var textFieldtext = "";
+	var startIndex = 0;
+	var currentLine = 0;
+	var textObject = null;
+	var myTextFormat = null;
+	var lineHeight = 0;
+	
+	function calcLineWidthByTextField(maxsizeText,textForCalcing,fontsize, fontname){
+		
+		maxsize = maxsizeText;
+		startIndex = 0;
+		textObject = new Array();
+		
+		textFieldtext = textForCalcing;
+		myTextFormat = new TextFormat();
+		myTextFormat.size = fontsize;
+		myTextFormat.font = fontname;
+		
+		var metrics = myTextFormat.getTextExtent(textFieldtext, 100000);
+		Debug.write(metrics);
+		lineHeight = metrics.ascent+metrics.descent;
+		Debug.write(lineHeight);		
+		
+		measureLine();
+		
+		for (var k = 0;k<textObject.length;k++){
+			var metrics = myTextFormat.getTextExtent(textObject[k]["text"], 100000);
+			textObject[k]["lineWidth"] = metrics.width;
+			//Debug.write("text: ",metrics,k,textObject[k]["lineWidth"],textObject[k]["text"]);
+		}
+		
+		return textObject;
+	}
+	
+	function measureLine(){		
+		//Debug.write("restString: ",textFieldtext);
+		for (var i=textFieldtext.length;i>0;i--){
+			var testTxt = textFieldtext.slice(startIndex, i);
+			var metrics = myTextFormat.getTextExtent(testTxt, 100000);
+			//Debug.write("metrics: ",testTxt,startIndex,metrics.width);
+			if (metrics.width<=maxsize){
+
+				testTxt = textFieldtext.slice(startIndex, i-1);
+				textObject[currentLine] = new Array();
+				textObject[currentLine]["text"] = testTxt;
+				textFieldtext = textFieldtext.slice(i-1, textFieldtext.length);
+				
+				if (textFieldtext.length==1){
+					textObject[currentLine]["text"]+=textFieldtext;
+					return;
+				} else {
+					currentLine+=1;
+					return measureLine();
+				}
+			}
+		}		
+	}
+	
+	
+	
+	//function getLineWidth()
+]]>
+</script>
+
+<text multiline="true" x="40" y="20" width="220" selectable="true" >
+	<handler name="oninit">
+		<![CDATA[
+			this.sprite.__LZtextclip.wordWrap = false;
+			Debug.write(this.sprite.__LZtextclip);
+			var items = new Array();
+			var t = "";
+			//items[0] = ["text","hello your are the hero lets check accomodation today i need some input"];
+			items[0] = ["text","hello "];
+			items[0] = ["text","der hat drei ecken      und warum ist meni hut der knut      ?? warumST"]; 
+			for (var i=0;i<items.length;i++) {
+				if (items[i][0]=="text"){
+					t += items[i][1];
+				} else {
+					var tempString = calcLineWidthByTextField(this.width, t,this.fontsize,"Verdana");
+					tempString[tempString.length-1]["lineWidth"];
+				}
+			}
+			var tString = calcLineWidthByTextField(this.width, t,this.fontsize,"Verdana");
+			for (var k = 0;k<tString.length;k++){
+				this.setAttribute('text',this.getText()+textObject[k]["text"]+"\r");
+				Debug.write("line,width,text: ",k,textObject[k]["lineWidth"],textObject[k]["text"]);
+			}			
+			
+		]]>
+	</handler>
+</text>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf b/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..ccb5224
--- /dev/null
+++ b/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf b/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..0700cc8
--- /dev/null
+++ b/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test_main.lzx b/WebContent/src/test/test_main.lzx
new file mode 100644
index 0000000..25e9ff8
--- /dev/null
+++ b/WebContent/src/test/test_main.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas>
+
+<text>Hello World</text>
+
+</canvas>
+
+
diff --git a/WebContent/src/test/test_onclick.lzx b/WebContent/src/test/test_onclick.lzx
new file mode 100644
index 0000000..fc93ebd
--- /dev/null
+++ b/WebContent/src/test/test_onclick.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+
+    <class name="myView" extends="drawview" bgcolor="red" clip="true" 
+        width="200" height="200" 
+        onclick="//Debug.write('onclick',this)" 
+        onmouseup="//Debug.write('onmouseup',this)" />
+    
+<myView />
+    
+</canvas>
diff --git a/WebContent/src/test/test_upload.lzx b/WebContent/src/test/test_upload.lzx
new file mode 100644
index 0000000..8a62e2a
--- /dev/null
+++ b/WebContent/src/test/test_upload.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+
+<include href="oslmon/" />
+    
+    <handler name="oninit">
+        new lz.uploadWindow(canvas);
+    </handler>
+
+</canvas>
diff --git a/WebContent/src/test/testswf/test.pdf b/WebContent/src/test/testswf/test.pdf
new file mode 100644
index 0000000..234b7bb
--- /dev/null
+++ b/WebContent/src/test/testswf/test.pdf
Binary files differ
diff --git a/WebContent/src/test/testswf/test.swf b/WebContent/src/test/testswf/test.swf
new file mode 100644
index 0000000..d4e1894
--- /dev/null
+++ b/WebContent/src/test/testswf/test.swf
Binary files differ
diff --git a/WebContent/src/test/testswf/testLoadSWF.lzx b/WebContent/src/test/testswf/testLoadSWF.lzx
new file mode 100644
index 0000000..1dab29f
--- /dev/null
+++ b/WebContent/src/test/testswf/testLoadSWF.lzx
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - SWF testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<view layout="axis:x;spacing:2">
+	<button name="_btn">
+		<handler name="onclick">
+			canvas._swfview.setAttribute('frame',canvas._swfview.frame+1);
+			//var mc = canvas._swfview.getDisplayObject();
+			//Debug.write(canvas._swfview);
+			//Debug.write(mc);
+			//mc._frame = 4;
+			//mc.play();
+		</handler>
+	</button>
+</view>
+	
+<view name="_swfview" y="20">
+	<handler name="oninit">
+		<![CDATA[
+			this.setSource("test.swf");
+		]]>
+	</handler>
+</view>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf b/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..5a03b59
--- /dev/null
+++ b/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test_main.lzx.lzr=swf8.swf b/WebContent/src/test_main.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..ed0ab9e
--- /dev/null
+++ b/WebContent/src/test_main.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/library.lzx b/WebContent/swf10/audioVideoTest/library.lzx
new file mode 100644
index 0000000..5b64b48
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/library.lzx
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL author sebawagner -->
+	<resource name="level_meter_rsc" src="resources/level_meter.png" />
+	<!-- APL author sebawagner -->
+    <resource name="test_setup_record_rsc" src="resources/webstart_record.png" />
+    <!-- APL author sebawagner -->
+    <resource name="test_setup_play_rsc" src="resources/run.png" />
+    <!-- APL author sebawagner -->
+    <resource name="test_setup_stop_rsc" src="resources/stop.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="test_setup_info_rsc" src="resources/information.png" />
+    
+    <include href="testingApplication.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/audioVideoTest/resources/information.png b/WebContent/swf10/audioVideoTest/resources/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/information.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/level_meter.fla b/WebContent/swf10/audioVideoTest/resources/level_meter.fla
new file mode 100644
index 0000000..4e1a8c8
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/level_meter.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/level_meter.png b/WebContent/swf10/audioVideoTest/resources/level_meter.png
new file mode 100644
index 0000000..78192ef
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/level_meter.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/record.fla b/WebContent/swf10/audioVideoTest/resources/record.fla
new file mode 100644
index 0000000..870b264
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/record.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/record.png b/WebContent/swf10/audioVideoTest/resources/record.png
new file mode 100644
index 0000000..99109da
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/record.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/run.png b/WebContent/swf10/audioVideoTest/resources/run.png
new file mode 100644
index 0000000..c77b8d9
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/run.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/stop.fla b/WebContent/swf10/audioVideoTest/resources/stop.fla
new file mode 100644
index 0000000..44a29f1
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/stop.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/stop.png b/WebContent/swf10/audioVideoTest/resources/stop.png
new file mode 100644
index 0000000..5b1adf3
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/stop.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/webstart_record.fla b/WebContent/swf10/audioVideoTest/resources/webstart_record.fla
new file mode 100644
index 0000000..475f9dc
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/webstart_record.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/webstart_record.png b/WebContent/swf10/audioVideoTest/resources/webstart_record.png
new file mode 100644
index 0000000..d94b7f5
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/webstart_record.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/testingApplication.lzx b/WebContent/swf10/audioVideoTest/testingApplication.lzx
new file mode 100644
index 0000000..bc986ad
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/testingApplication.lzx
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+#########################################
+
+Test the setup values before you enter a room
+
+ -->
+ 
+<class name="testingApplication" extends="view" width="600" height="400">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.media.Camera;
+                import flash.media.Microphone;
+                import flash.net.SharedObject;
+                import flash.media.SoundCodec;
+            </passthrough>
+        </when>
+    </switch>
+	
+	<attribute name="lastRecorded" value="" type="string" />
+	
+	<attribute name="isRunning" value="false" type="boolean" />
+	
+	<attribute name="recordingsCounter" value="5" type="number" />
+	
+	<attribute name="timerIsRunning" value="false" type="boolean" />
+	
+	<attribute name="counterDelegate" value="null" />
+	
+	<handler name="oninit">
+		this.counterDelegate = new LzDelegate( this, "count" );
+	</handler>
+	
+	<method name="startTimer">
+		this.timerIsRunning = true;
+		this.timerWasUnmutedTheFirstTime = true;
+		lz.Timer.addTimer( this.counterDelegate, 1000 );
+	</method>
+	
+	<method name="count" args="calleeObj">
+		if (this.recordingsCounter != 0){
+			this.recordingsCounter -= 1;
+			lz.Timer.addTimer( this.counterDelegate, 1000 );
+			
+			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
+			
+		} else {
+			this._text.setAttribute("visibility","hidden");
+			this.doStop();
+			this.timerIsRunning = false;
+			this.doPlay();
+		}
+	</method>
+	
+	<method name="startTimerToCount">
+		if (!this.timerIsRunning) {
+			this.startTimer();
+		}
+	</method>
+	
+	<method name="storeSettings">
+        <![CDATA[
+            if ($debug) Debug.write("storeSettings ");
+            var t:SharedObject = SharedObject.getLocal('userdata');
+            var g = t.data;
+            if (g==null) g = new Array();
+            g["cam"] = this.availibleCams.getValue();
+            g["mic"] = this.availibleMics.getValue();
+            t.flush();
+        ]]>
+    </method>   
+	
+	<method name="doninitalize">
+        <![CDATA[
+        
+            this._btnStartRecording.setAttribute("enabled",false);
+            
+            this.recordingsCounter = 5;
+            
+            this._text.setAttribute("visibility","visible");
+            this._text._info.setAttribute("text","5 sec");
+        
+            this.isRunning = true;
+            
+            var valCam = this.availibleCams.getValue();
+            var valMic = this.availibleCams.getValue();
+            
+            var videoview = this._publisher._chatvideoinner._videostream;
+            if ($debug) Debug.write("videoview: ",videoview);
+            if ($debug) Debug.write(valCam,valMic);
+            
+            var _micro = null;
+            var _camera = null;
+            if (valMic != null) {
+                 _micro = Microphone.getMicrophone(valMic);
+                 if (_micro != null) {
+                     _micro.codec = SoundCodec.NELLYMOSER;
+                     _micro.framesPerPacket = 1;
+                     _micro.setSilenceLevel(0, 2000);
+                     _micro.gain = 50;
+                     // this has no effect if enhanced microphone is obtained
+                    //Microphone setUseEchoSupression(bool)
+                    _micro.setUseEchoSuppression(true);
+                }
+            }
+            if (valCam != null) {
+                _camera = Camera.getCamera(valCam);
+            }
+            
+            if ($debug) Debug.write("_camera.setMode: ",videoview.width,videoview.height,canvas.framesPerSecond,true);
+
+            //Microphone.set
+            if ($debug) Debug.write("canvas.microphoneRateBest: ",canvas.microphoneRateBest);
+            if (_camera != null) {
+                if ($debug) Debug.write("_camera.setQuality BEST: ",this.isInterview,(canvas.bandwidthNeededBest*2),canvas.camQualityBest);
+                if (this.isInterview) {
+                    _camera.setMode(videoview.width,videoview.height,24,true);
+                    if ($debug) Debug.warn("IS INTERVIEW ");
+                    _camera.setQuality(0,98);
+                } else {
+                    _camera.setMode(videoview.width,videoview.height,canvas.framesPerSecond,true);
+                    if ($debug) Debug.warn("IS NO INTERVIEW ");
+                    _camera.setQuality(canvas.bandwidthNeededBest,canvas.camQualityBest);
+                }
+            }
+            
+            //The First start-timer message will come from the Flash Object
+            
+            if ($debug) Debug.warn("_camera.muted ",_camera.muted);
+            if ($debug) Debug.warn("_micro.muted ",_micro.muted);
+            
+            if (!_camera.muted) {
+                this.startTimer();
+            }
+
+            //start recording of client stream
+            
+            var t = new Date();
+            this.lastRecorded = "TEST_SETUP_"+t.getTime();
+            
+            this._publisher.setAttribute("visibility","visible");
+            this._viewer.setAttribute("visibility","hidden");
+            
+            videoview.record(this.lastRecorded,_camera,_micro);
+        ]]>
+    </method>
+    
+    <method name="doPlay">
+    	<![CDATA[
+    	
+    	   if (this.lastRecorded == "") {
+    	   	   //Error - nothing recorded yet
+    	   	   if ($debug) Debug.warn("Nothing to Play");
+    	   } else {
+    	   	   
+    	   	   this._play.setAttribute("visibility","visible");
+    	   	
+    	   	   this._publisher.setAttribute("visibility","hidden");
+               this._viewer.setAttribute("visibility","visible");
+               
+               var videoview = this._viewer._chatvideoinner._videostream;
+               
+               videoview.justPlayStream(this.lastRecorded+".flv",0);
+                
+    	   }
+    	
+    	]]>
+    </method>
+    
+    <method name="doStop">
+    	if (this.isRunning) {
+    		this.isRunning = false;
+    		
+    		var videoview = this._publisher._chatvideoinner._videostream;
+    		
+    		this._btnStartRecording.setAttribute("enabled",true);
+    		
+    		videoview._stop();
+    		
+    		this.doPlay();
+    	}
+    	
+    	var videoviewViewer = this._viewer._chatvideoinner._videostream;
+        videoviewViewer._stop();
+    </method>
+	
+	<labelText fontstyle="bold" labelid="758"
+			   width="$once{ parent.width-2 }" height="30" multiline="true" /> 
+	
+	<labelText name="availibleCamsLabel" labelid="52" fontsize="11" x="2" y="40" />
+
+    <resetCombobox fontsize="11" name="availibleCams" x="10" y="60" width="260" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Camera;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+        <handler name="oninit">
+            <![CDATA[
+                //Get all availible Cam's
+                var tw = Camera.names;
+                var r = "";
+                for (var eg=0;eg<tw.length;eg++){
+                    this.addItem(tw[eg],eg);
+                    r=eg;
+                }
+                var t:SharedObject = SharedObject.getLocal('userdata');
+                var g = t.data;
+                var cam;
+                if (g != null){
+                    cam = g["cam"];
+                    if (cam == 'undefined') {
+                        cam = r;
+                    }
+                } else {
+                    cam = r;
+                }
+                this.selectItem(String(cam));
+            ]]>
+        </handler>
+    </resetCombobox>
+    
+    <labelText name="availibleMicsLabel" labelid="53" fontsize="11" x="2" y="84" />
+
+    <resetCombobox fontsize="11" name="availibleMics"  x="10" y="104" width="260" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Microphone;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+        <handler name="oninit">
+            <![CDATA[
+                //Get all availible Mic's
+                var tw = Microphone.names;
+                var r = "";
+                for (var eg=0;eg<tw.length;eg++){
+                    r=eg;
+                    this.addItem(tw[eg],eg);
+                }
+
+                var t:SharedObject = SharedObject.getLocal('userdata');
+                var g = t.data;
+                var mic;
+                if (g != null){
+                if ($debug) Debug.write("Select mic 4: ",mic);
+                    mic = g["mic"];
+                    if (mic == 'undefined') {
+                    if ($debug) Debug.write("Select mic 3: ",mic);
+                        mic = r;
+                    }
+                } else {
+                if ($debug) Debug.write("Select mic 2: ",mic);
+                    mic = r;
+                }
+                if ($debug) Debug.write("Select mic 1: ",mic);
+                
+                this.selectItem(String(mic));
+            ]]>
+        </handler>
+    </resetCombobox>
+    
+    
+    <simpleLabelButton name="_btnStartRecording" labelid="775" 
+    				   width="170" x="100" y="150" height="28">
+    	<handler name="onclick">
+            parent._level_meter.startLevel();
+            parent.doninitalize();
+        </handler>
+        <view resource="test_setup_record_rsc" x="2" y="2" />
+    </simpleLabelButton>
+    
+	
+	<videoObjectTestBroadcast name="_publisher" x="340" y="40" width="240" height="180">
+		<handler name="sendCameraStatus" args="camStatus">
+            if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
+            if (camStatus == "Camera.Unmuted") {
+            	parent.startTimerToCount();
+            }
+        </handler>
+        
+        <handler name="sendMicroStatus" args="micStatus">
+            if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
+            if (micStatus == "Microphone.Unmuted") {
+                parent.startTimerToCount();
+            }
+        </handler>
+	</videoObjectTestBroadcast>
+	
+	<videoObjectPlayTestBroadcast name="_viewer" x="340" y="40" 
+								  width="240" height="180" visibility="hidden" />
+								  
+	<view name="_text" x="340" y="40" width="240" height="180" visibility="hidden">
+		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right"
+			  fontsize="12" fontstyle="bold" />
+	</view>
+	
+	<!--
+	<simpleLabelRoundButtonIcon name="_start" y="190" x="350" 
+				ressourceIcon="test_setup_record_rsc"
+				width="70" tlabelid="763" >
+		<handler name="onclick">
+			parent._level_meter.startLevel();
+			parent.doninitalize();
+		</handler>
+	</simpleLabelRoundButtonIcon>
+	
+	<simpleLabelRoundButtonIcon name="_stop" y="190" x="425" 
+				ressourceIcon="test_setup_stop_rsc"
+				width="70" tlabelid="766" >
+        <handler name="onclick">
+        	parent._level_meter.resetNewLevel();
+            parent.doStop();
+        </handler>
+    </simpleLabelRoundButtonIcon>
+    
+	<simpleLabelRoundButtonIcon name="_play" y="190" x="500" 
+				ressourceIcon="test_setup_play_rsc"
+				width="70" tlabelid="764" 
+				enabled="false">
+        <handler name="onclick">
+            parent.doPlay();
+        </handler>
+    </simpleLabelRoundButtonIcon>
+     -->
+     
+     <!-- ressourceIcon="test_setup_play_rsc" -->
+    <simpleLabelButton name="_play" y="190" x="490" visibility="hidden"
+                width="86" labelid="764" >
+        <handler name="onclick">
+            parent.doPlay();
+        </handler>
+    </simpleLabelButton>
+     
+    <labelText labelid="767" x="340" y="224" />
+    
+    <view name="_level_meter" x="340" y="244" width="240" height="20" clip="true" bgcolor="0x000000">
+    	
+    	 <!--- Level delegate, used to track level changes. 
+              @keywords private -->
+        <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
+    	
+    	<method name="_updateLevel" args="no">
+    		<![CDATA[
+    		    //if ($debug) Debug.write("_updateLevel",no,parent._publisher._chatvideoinner._videostream.micro);
+    		    //if ($debug) Debug.write("_updateLevel",parent._publisher._chatvideoinner._videostream.micro);
+    		    //if ($debug) Debug.write("_updateLevel",parent._publisher._chatvideoinner._videostream.micro.activityLevel);
+    		    if (parent._publisher._chatvideoinner._videostream.micro == null)
+    		    {
+    		    	return;
+    		    }
+    		    this.setNewLevel(parent._publisher._chatvideoinner._videostream.micro.activityLevel);
+    		]]>
+    	</method>
+    	
+    	<method name="startLevel">
+    		this._leveldel.register(lz.Idle, "onidle");
+    	</method>
+    	
+    	<method name="resetNewLevel">
+    		this._leveldel.unregisterAll();
+    		this.setNewLevel(0);
+    	</method>
+    	
+    	<method name="setNewLevel" args="no">
+    		<![CDATA[
+    		
+                var newLevel = (238/100) * no;
+            
+                this._over.setAttribute("width",238-newLevel);
+                this._over.setAttribute("x",1+(newLevel));
+                
+            ]]>
+    	</method>
+    	
+    	<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    	<view name="_grip" resource="level_meter_rsc" x="1" y="1" />
+    	<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    </view>
+    
+    <view y="292" resource="test_setup_info_rsc" x="16" />
+    
+    <labelText fontstyle="bold" labelid="765" x="39" y="290"
+               width="$once{ parent.width-50 }" multiline="true" />
+    
+</class>
+	
+</library>
+ 
diff --git a/WebContent/swf10/base/components/button/library.lzx b/WebContent/swf10/base/components/button/library.lzx
new file mode 100644
index 0000000..74f686a
--- /dev/null
+++ b/WebContent/swf10/base/components/button/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="simpleLabelButton.lzx" />
+
+</library>
diff --git a/WebContent/swf10/base/components/button/simpleLabelButton.lzx b/WebContent/swf10/base/components/button/simpleLabelButton.lzx
new file mode 100644
index 0000000..183ad5e
--- /dev/null
+++ b/WebContent/swf10/base/components/button/simpleLabelButton.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="simpleLabelButton" extends="button" fontstyle="bold"
+	   fontsize="11" height="20" style="componentStyle">
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/explorer/explorerBox.lzx b/WebContent/swf10/base/components/explorer/explorerBox.lzx
new file mode 100644
index 0000000..6c9aaf3
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/explorerBox.lzx
@@ -0,0 +1,400 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="explorerBox" extends="view" width="250" y="100" visibility="hidden"
+    height="400" bgcolor="0x000088" 
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+
+    <switch>
+	  <when property="$as3">
+		<passthrough>
+		  import flash.filters.DropShadowFilter;
+		</passthrough>
+	  </when>
+	</switch>
+
+    <handler name="oninit">
+    	//if($debug) Debug.write("explorerBox/oninit showWindowEffect? ",canvas.showWindowEffect);
+    	if (canvas.showWindowEffect=="y"){
+    		//if($debug) Debug.write("explorerBox/showWindowEffect == YES");
+    		new lz.boxInitEffect(parent,{x:this.x+(this.width/2)-50,y:this.y+(this.height/2)-10,zielx:this.x,ziely:this.y,zielwidth:this.width,zielheight:this.height,objRef:this});
+    	} else {
+    		this.sendAnniComplete();
+    	}
+    </handler>
+    
+    <method name="sendAnniComplete">
+    	//if($debug) Debug.write("sendAnniComplete");
+    	this.setAttribute('visibility','visible');
+    	this.setShadow(true);
+    </method>
+
+    <method name="setShadow" args="bool">
+        this.hasshadow = bool;
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+            //Debug.write(this.normalMC);
+            ////Debug.write("this.normalMC: ",this.normalMC);
+            ////Debug.write("this: ",this);
+           	this.displacementMap = new DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	
+          
+	<!--- The Title of this Box -->
+	<attribute name="title" value="defaulttitle" type="string" />
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="resizeable" value="false" type="boolean" />
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="false" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />
+	
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+	<handler name="oninit">
+		this.initheight=this.height;
+		////Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+	</handler>
+	
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+		this.doDestroy();
+	</method>
+	
+	<method name="toggleopen">
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+		//It's important to remove the dragger and do docking stuff before you check for conencted Boxes
+		dragger.remove();
+		if (obj==this){
+			if (docking) arrangePosition();
+		} else {
+			if (docking) _lookforParentOnly(obj);
+		}
+			
+		//check for connected Boxes
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._removeDragState(this);
+			}
+		}
+
+	</method>
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+		this.bringToFront();
+		_calcdockingList();
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._startDragState(this);
+			}
+		}
+		//store position cause it wasn't dragged by itself
+		if (obj!=this){
+			storeAdjustmentToParent(obj.x,obj.y);
+		}
+		dragger.apply();
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+		
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+    <animator attribute="y" to="20" duration="1000" started="false" />
+        
+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    
+    
+    <method name="doDestroy">
+        this.destroy();
+    </method>
+	
+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" 
+		  x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >
+		
+		<gradientview x="0" width="${ this.parent.width }" height="20"
+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
+				colorTo="0x000088" >
+		</gradientview>
+		
+        <text fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+	
+		<view visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-20 }" 
+			y="2" resource="btn_presenter_close"
+                onmouseover="this.setAttribute('frame',2)"
+                onmouseout="this.setAttribute('frame',1)"
+                onmousedown="this.setAttribute('frame',3)"
+                onmouseup="this.setAttribute('frame',1)" >
+			<handler name="onclick">
+				this.parent.parent.close();
+			</handler>									
+		</view>
+		<!-- 
+		<view visible="${ !this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_min_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+		<view visible="${ this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_max_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+		 -->
+	</view>
+    <handler name="onaddsubview" args="v">
+		////Debug.write("onaddsubview",v);
+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();
+    </handler>
+    <view visible="${ this.parent.resizeable }" name="_resizeview" 
+    	  x="${ this.parent.width - 17 }" y="${ this.parent.height - 17 }" 
+        resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" 
+        onmousedown="this.parent.rs.apply()"
+        onmouseup="this.parent.rs.remove()" >
+    	<handler name="oninit">
+    		//if ($debug) Debug.write("setTint");
+    		//TODO: Fix this, does not work at the moment
+    		//http://code.google.com/p/openmeetings/issues/detail?id=470
+    		this.setColor(canvas.getThemeColor('baseMousecolorizer'));
+    	</handler>  	
+    </view>
+    <resizestate name="rs"/>
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx b/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx
new file mode 100644
index 0000000..e0670ac
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelExplorerBox" extends="explorerBox" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/explorer/library.lzx b/WebContent/swf10/base/components/explorer/library.lzx
new file mode 100644
index 0000000..c16ca18
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="incubator/gradientview.lzx" /> 
+
+	<include href="resources/" />
+	
+	<include href="explorerBox.lzx" />
+	<include href="labelexplorerBox.lzx" />
+
+    
+</library>
diff --git a/WebContent/swf10/base/components/explorer/resources/close_dn.png b/WebContent/swf10/base/components/explorer/resources/close_dn.png
new file mode 100644
index 0000000..57fcf20
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/close_mo.png b/WebContent/swf10/base/components/explorer/resources/close_mo.png
new file mode 100644
index 0000000..b9d0f94
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/close_up.png b/WebContent/swf10/base/components/explorer/resources/close_up.png
new file mode 100644
index 0000000..79d3b72
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png
new file mode 100644
index 0000000..e5ae343
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png
new file mode 100644
index 0000000..093a0b0
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png
new file mode 100644
index 0000000..fca6ec8
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png
new file mode 100644
index 0000000..e05de83
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png
new file mode 100644
index 0000000..faba70d
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png
new file mode 100644
index 0000000..b4dafa3
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorerbar.png b/WebContent/swf10/base/components/explorer/resources/explorerbar.png
new file mode 100644
index 0000000..4cb2d59
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorerbar.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/library.lzx b/WebContent/swf10/base/components/explorer/resources/library.lzx
new file mode 100644
index 0000000..2c123a6
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/library.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- APL author sebawagner -->
+<resource src="explorerbar.png" name="explorer_thumb_rsc" />
+
+<!-- APL author sebawagner -->
+<resource name="explorer_button_min_rsc" >
+	<frame src="explorbar_minimize_no.png" />
+	<frame src="explorbar_minimize_mo.png" />
+	<frame src="explorbar_minimize_dn.png" />
+</resource>
+
+<!-- APL author sebawagner -->
+<resource name="explorer_button_max_rsc" >
+	<frame src="explorbar_maximize_no.png" />
+	<frame src="explorbar_maximize_mo.png" />
+	<frame src="explorbar_maximize_dn.png" />
+</resource>
+
+<!-- APL author sebawagner -->
+<resource name="explorer_resize_rsc" src="resizer.swf" />
+
+<!-- APL author sebawagner -->
+<resource name="btn_presenter_minimize" src="minimize_up.png" />
+<!-- APL author sebawagner -->
+<resource name="btn_presenter_maximize" src="maximize_up.png" />
+<!-- APL author sebawagner -->
+<resource name="btn_presenter_maximize2" src="maximize2_up.png" />
+
+<!-- APL author sebawagner -->
+<resource name="btn_presenter_close">
+    <frame src="close_up.png" />
+    <frame src="close_mo.png" />
+    <frame src="close_dn.png" />
+</resource> 
+
+<!-- APL author sebawagner -->
+<resource name="explorer_resizemouse_rsc" src="resizemouse.png" />
+
+</library>
diff --git a/WebContent/swf10/base/components/explorer/resources/maximize2_up.png b/WebContent/swf10/base/components/explorer/resources/maximize2_up.png
new file mode 100644
index 0000000..1edd23b
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/maximize2_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/maximize_up.png b/WebContent/swf10/base/components/explorer/resources/maximize_up.png
new file mode 100644
index 0000000..778c05c
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/maximize_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/minimize_up.png b/WebContent/swf10/base/components/explorer/resources/minimize_up.png
new file mode 100644
index 0000000..1637298
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/minimize_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizemouse.png b/WebContent/swf10/base/components/explorer/resources/resizemouse.png
new file mode 100644
index 0000000..be3164f
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizemouse.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.fla b/WebContent/swf10/base/components/explorer/resources/resizer.fla
new file mode 100644
index 0000000..07de957
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.fla
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.png b/WebContent/swf10/base/components/explorer/resources/resizer.png
new file mode 100644
index 0000000..2c951fe
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.swf b/WebContent/swf10/base/components/explorer/resources/resizer.swf
new file mode 100644
index 0000000..2e5d0da
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/labelCheckbox.lzx b/WebContent/swf10/base/components/labelCheckbox.lzx
new file mode 100644
index 0000000..8660ce8
--- /dev/null
+++ b/WebContent/swf10/base/components/labelCheckbox.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelCheckbox" extends="checkbox" style="componentStyle" fontsize="11" >
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/base/components/library.lzx b/WebContent/swf10/base/components/library.lzx
new file mode 100644
index 0000000..b79c839
--- /dev/null
+++ b/WebContent/swf10/base/components/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="resetCombobox.lzx" />
+    <include href="miniIconsPresenter.lzx" />
+    <include href="labelCheckbox.lzx" />
+    
+    <include href="text/" />
+    <include href="scrollbars/" />
+    <include href="lps/" />
+    <include href="button/" />
+    <include href="explorer/" /> 
+      
+</library>
diff --git a/WebContent/swf10/base/components/lps/basePropertySelector.lzx b/WebContent/swf10/base/components/lps/basePropertySelector.lzx
new file mode 100644
index 0000000..2d9a099
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/basePropertySelector.lzx
@@ -0,0 +1,48 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="hidePropertyView" extends="view"
+	   width="$once{ parent.width }" height="$once{ parent.height }"
+	   opacity="0.7" bgcolor="0xFFFFFF" />
+
+<class name="basePropertySelector" extends="view">
+	
+	<!--- position of the SliderWin or ColorPicker -->
+	<attribute name="boxPosition" value="down" type="string" />
+	
+	<attribute name="isEnabled" value="true" type="boolean" />
+	<attribute name="enabledView" value="null" />
+	
+	<method name="setEnabled" args="b">
+		this.setAttribute('isEnabled',b);
+		if (this.enabledView != null) {
+			this.enabledView.destroy();
+			this.enabledView = null;
+		}
+		if (!b) {
+			this.enabledView = new lz.hidePropertyView(this);
+		} 
+	</method>
+    
+    
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/lps/changeWidthSlider.lzx b/WebContent/swf10/base/components/lps/changeWidthSlider.lzx
new file mode 100644
index 0000000..dfa746a
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/changeWidthSlider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthSlider" extends="basePropertySelector" bgcolor="0xFFFFFF" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="1" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="3" type="number"/>
+    
+    <attribute name="boxPosition" value="down" type="string"/>
+    
+    <attribute name="labelid" value="429" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('tempValue',this.initialNumber);
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	if ($debug) Debug.write("setSliderValue ",v);
+    	this.setEnabled(true);
+    </method>
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+            	if (this.parent.boxPosition=="up"){
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas)-140+parent.height)
+				            			});
+            	} else {
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas))
+				            			});
+            	}
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelid }" />
+    </button>
+    
+</class>
+    
+<class name="closableView" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthSliderWin" extends="closableView" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="3" type="number"/>
+    <attribute name="maxvalue" value="100" type="number" />
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="1" maxvalue="$once{ parent.maxvalue }" 
+        initvalue="$once{ parent.initialNumber }" showrange="false" showvalue="true">
+        <handler name="onvalue" args="v">
+            //if ($debug) Debug.write("onvalue",v);
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>        
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/swf10/base/components/lps/library.lzx b/WebContent/swf10/base/components/lps/library.lzx
new file mode 100644
index 0000000..7344bcc
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- APL author sebawagner -->
+    <resource name="arrow_down_slider_rsc" src="resources/arrow_down_slider.png" /> 
+
+    <include href="basePropertySelector.lzx" />
+    <include href="vslider.lzx" /> 
+    <include href="changeWidthSlider.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png b/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png
new file mode 100644
index 0000000..f5107d7
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png
Binary files differ
diff --git a/WebContent/swf10/base/components/lps/vslider.lzx b/WebContent/swf10/base/components/lps/vslider.lzx
new file mode 100644
index 0000000..986a4f2
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/vslider.lzx
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- X_LZ_COPYRIGHT_BEGIN ************************************************
+* Copyright 2006, 2009 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Use is subject to license terms.                                       *
+* X_LZ_COPYRIGHT_END ************************************************** -->
+<!--
+    vertical slider contributed by Sebastian Wagner
+-->
+<library>
+  
+  <class name="vslidertrack" extends="view" bgcolor="0x000000">
+        <view width="${ parent.width-2}" height="${ parent.height-2 }" 
+          x="1" y="1" bgcolor="0xFFFFFF"/>
+        <view width="${ parent.width-2}" bgcolor="0xCCCCCC"
+          x="1" y="${ (this.parent.parent.switchaxis) ? 
+                parent.parent._sliderthumb.y : 1 }" 
+          visible="${ parent.parent.showrange }" 
+          height="${ (this.parent.parent.switchaxis) ? 
+        (parent.parent._vslidertrack.height - parent.parent._sliderthumb.y-1) : 
+        parent.parent._sliderthumb.y }" />
+  </class>
+  
+  <class name="vsliderthumb" extends="button" bgcolor="0x999999" 
+        height="10" width="20" 
+    onmousedown="dragger.setAttribute('applied', true)" onmouseup="dragger.setAttribute('applied', false)">
+        <attribute name="drag_min" value="0" type="number" />
+        <attribute name="showvalue" type="boolean" value="true" />
+        <attribute name="drag_max" value="0" type="number" />
+        <handler name="oninit">
+                //Setting the initVal
+                this.setAttribute('y', getPosFromValue(this.parent.initvalue));
+        </handler>
+        
+        <method name="getValueFromPos">
+                var delta1 = this.parent.maxvalue-this.parent.minvalue;
+                var perc = (this.parent.switchaxis) ? 1-(y / (this.parent.height-this.height)) : (y / (this.parent.height-this.height));
+                //Debug.write(delta1,perc);
+                return (Math.round(perc*delta1))+this.parent.minvalue;
+        </method>
+        
+        <method name="getPosFromValue" args="val">
+                var perc = (val-this.parent.minvalue) / (this.parent.maxvalue-this.parent.minvalue);
+                //Debug.write(perc);
+                var valY = (this.parent.switchaxis) ? ( (1-perc) * (this.parent.height-this.height)) : (perc * (this.parent.height-this.height));
+                //Debug.write("valY: ",Math.round(valY));
+                return Math.round(valY);
+        </method>
+        
+        <setter name="y" args="v">
+                super.setAttribute('y', v);
+                var thumbVal = getValueFromPos();
+                if (thumbVal != parent.value) {
+                        this.parent.setValue(thumbVal);
+                }               
+        </setter>
+    <dragstate name="dragger" drag_axis="y"
+        drag_min_y="${ this.drag_min }"  
+        drag_max_y="${ this.drag_max }">
+            <text name="t1" x="-24" text="${ this.parent.parent.value }" y="-4" resize="true" />
+    </dragstate>
+  </class>
+
+  <class name="vslider" extends="view" >
+        <!--- Minimum Value -->
+        <attribute name="minvalue" type="number" value="0"/>
+        
+        <!--- Maximum Value -->
+        <attribute name="maxvalue" type="number" value="100"/>
+        
+        <!--- Showrange should the slidertrack be with color while 'sliding' -->
+        <attribute name="showrange" type="boolean" value="true"/>
+        
+        <!--- showvalue should the slider show the numbers of min/max -->
+        <attribute name="showvalue" type="boolean" value="true"/>
+        
+        <!--- switchaxis true means minimum-value is 
+                t op maximum is bottom false turns around -->
+        <attribute name="switchaxis" type="boolean" value="false"/>
+        
+        <!-- Initial Value -->
+        <attribute name="initvalue" value="0" type="number" />          
+        
+    <!--- @keywords private -->
+    <event name="onvalue"/>
+        
+    <!--- @keywords private -->
+    <attribute name="value" value="0" setter="setValue(value)"/>
+    <method name="setValue" args="v">
+        if (!isinited) {
+          this.value = v;
+          return;
+        }
+        if (this.value == v) return;
+        this.value = v;
+        if (onvalue) onvalue.sendEvent(v);
+    </method>
+       
+        <vslidertrack name="_vslidertrack" x="5" 
+        width="10" height="${ parent.height }" />
+        <vsliderthumb name="_sliderthumb" 
+        drag_max="${ parent.height-this.height }" 
+        showvalue="${ parent.showvalue }" />
+        
+        <text text="${ ( (this.parent.switchaxis) ? 
+                this.parent.maxvalue : this.parent.minvalue ) }" 
+        visible="${ parent.showvalue }" 
+        y="-8" x="${ this.parent._vslidertrack.width+10 }" />
+        
+        <text text="${ ( (this.parent.switchaxis) ? 
+                this.parent.minvalue : this.parent.maxvalue ) }" 
+          visible="${ parent.showvalue }" 
+          y="${ this.parent.height-10 }" 
+          x="${ this.parent._vslidertrack.width+10 }" />
+  </class>
+  
+  
+
+</library>
diff --git a/WebContent/swf10/base/components/miniIconsPresenter.lzx b/WebContent/swf10/base/components/miniIconsPresenter.lzx
new file mode 100644
index 0000000..1d58a24
--- /dev/null
+++ b/WebContent/swf10/base/components/miniIconsPresenter.lzx
@@ -0,0 +1,51 @@
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<class name="miniIconsPresenter" extends="view">
+    
+    <attribute name="iconRessourceName" value="" type="string"/>
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",0xFFFFFF);
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <handler name="onmousedown">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('basebgcolorizer'));
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseup">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <view name="_bg" visibility="hidden" opacity="0.7"
+          width="14" height="14" x="1" y="1" bgcolor="0xFFFFFF" />
+          
+    <view name="_itemRsc" resource="$once{ parent.iconRessourceName }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/resetCombobox.lzx b/WebContent/swf10/base/components/resetCombobox.lzx
new file mode 100644
index 0000000..f95abff
--- /dev/null
+++ b/WebContent/swf10/base/components/resetCombobox.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="resetCombobox" extends="combobox" editable="false" shownitems="12"
+    	   style="componentStyle" itemclassname="labeldTextListItem">
+    
+        <method name="reset" >
+            <![CDATA[
+                var currentCount = this.cblist.getNumItems();
+                for (var i = 0; i < currentCount; i++)
+                    this.removeItemAt(0);
+                this.clearSelection();
+            ]]>
+        </method>
+    
+    </class>
+        
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/library.lzx b/WebContent/swf10/base/components/scrollbars/library.lzx
new file mode 100644
index 0000000..9ee00e1
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL Author sebawagner -->
+	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />
+	
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />
+    <!-- APL Author sebawagner -->
+   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />
+
+	<include href="om_vscrollbar.lzx"/>
+	<include href="om_hscrollbar.lzx"/>
+
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx b/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx
new file mode 100644
index 0000000..036fed6
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_hscrollbar" extends="basescrollbar" styleable="false"
+    axis="x">
+
+    <!--- @keywords private -->
+    <attribute name="height" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="rightarrow" width="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="left"
+           resource="omscrolltrack_x_rsc" stretches="width">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_xthumbleft_rsc"/>
+             <view resource="omscrollbar_xthumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_xthumbright_rsc"/>
+             <stableborderlayout axis="x"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="leftarrow" />
+    <stableborderlayout axis="x"/>
+
+</class>
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx b/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx
new file mode 100644
index 0000000..98623ed
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_vscrollbar" extends="basescrollbar" styleable="false"
+    axis="y">
+
+    <!--- @keywords private -->
+    <attribute name="width" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="toparrow" height="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="top"
+           resource="omscrolltrack_y_rsc" stretches="height">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_ythumbtop_rsc"/>
+             <view resource="omscrollbar_ythumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_ythumbbottom_rsc"/>
+             <stableborderlayout axis="y"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="bottomarrow" />
+    <stableborderlayout axis="y"/>
+
+</class>
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf
new file mode 100644
index 0000000..fd9411b
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf
new file mode 100644
index 0000000..fff3744
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf
new file mode 100644
index 0000000..74ea64a
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
new file mode 100644
index 0000000..09a370b
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf
new file mode 100644
index 0000000..af9015f
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf
new file mode 100644
index 0000000..c701740
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf b/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf
new file mode 100644
index 0000000..937dd8d
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf b/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf
new file mode 100644
index 0000000..b05b88a
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx b/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx
new file mode 100644
index 0000000..bc08ffe
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+    
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/base/components/text/borderedInputtext.lzx b/WebContent/swf10/base/components/text/borderedInputtext.lzx
new file mode 100644
index 0000000..851449e
--- /dev/null
+++ b/WebContent/swf10/base/components/text/borderedInputtext.lzx
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="borderedInputtext" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+	<attribute name="width" value="200" type="size" />
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <event name="onblur" />
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>         	
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+  		<attribute name="preText" value="" type="string" />
+  		<handler name="onfocus">
+  			this.preText = this.getText();
+  		</handler>
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t=this.preText;
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+            if (this.parent.onblur) this.parent.onblur.sendEvent();
+      	</handler>
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedMultiInputtext" extends="view">
+	<attribute name="width" value="200" type="size" />
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>         	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+            if(this.multiline) this.init();
+        </handler>       	           
+        <method name="init">
+            super.init();        
+        </method>
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedPasswordText" extends="view">
+	<attribute name="width" value="200" type="size" />
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>         	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" password="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/text/labelText.lzx b/WebContent/swf10/base/components/text/labelText.lzx
new file mode 100644
index 0000000..c5f961c
--- /dev/null
+++ b/WebContent/swf10/base/components/text/labelText.lzx
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelText" extends="text" resize="true" fontsize="11" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+
+<class name="labelTextWidthTooltip" extends="text" resize="true" 
+	   onmouseover="" onmouseout=""
+	   fontsize="11" >
+	
+	<attribute name="labelLabelid" type="number" value="-1" />
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+	<labelTooltip name="_labelTooltip" labelid="$once{ parent.labelLabelid }" />
+	
+</class>
+
+<class name="labeldTextListItem" extends="textlistitem">
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <labelTooltip initByDataPathparent="true" />
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/text/labelTooltip.lzx b/WebContent/swf10/base/components/text/labelTooltip.lzx
new file mode 100644
index 0000000..442eb3c
--- /dev/null
+++ b/WebContent/swf10/base/components/text/labelTooltip.lzx
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelTooltip" extends="view" visible="false" >
+
+	<attribute name="inittwice" value="false" type="boolean" />
+    <attribute name="multiline" value="false" type="boolean" />
+    <attribute name="ismenubuttonlabel" value="false" type="boolean" />
+    <attribute name="initByDataPathparent" value="false" type="boolean" />
+    
+    <attribute name="holder" value="null" />
+    
+    <event name="setContent" />
+        
+    <handler name="onmouseover" reference="this.parent">
+    	<![CDATA[
+            this.doonmouseover();
+        ]]>        
+    </handler>
+    <handler name="onmouseout" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    
+    <method name="doonmouseover">
+    	<![CDATA[
+            this.setContent.sendEvent();
+	    	if (this.ismenubuttonlabel){
+	    		this.parent.setLabel();
+	    	}
+	    	if (this.inittwice){
+	    		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	    	}
+	    	if (this.initByDataPathparent){
+                this.setAttribute('text',parent.text);
+            }
+	        var xVal = canvas.getMouse('x');
+	        var yVal = canvas.getMouse('y');
+			////Debug.write("mytext: ",this.mytext);
+			if (this.multiline && this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltipMulti(canvas,{text:this.text,holder:this});
+			} else if (this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltip(canvas,{text:this.text,holder:this});
+			}
+	        if (xVal<canvas.width/2){
+	            xVal += 0;
+	        } else {
+	            xVal -= this.holder.width-14;
+	        }
+	        if (yVal<canvas.height/2){
+	            yVal += 24;
+	        } else {
+	            yVal -= 24;
+	        }
+	        this.holder.setAttribute('x',xVal);
+	        this.holder.setAttribute('y',yVal);
+	        canvas.registerToolTip(this);
+        ]]>        
+    </method>
+    
+    <handler name="onmouseup" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    <handler name="onclick" reference="this.parent">
+        this.cleanHolder();
+    </handler>  
+    
+    <method name="cleanHolder">
+        if (this.holder!=null) {
+            this.holder.destroy();
+            this.holder = null; 
+            canvas.clearToolTip();
+        }
+    </method> 
+      
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <attribute name="text" value="" type="string" />
+</class>
+
+<class name="xmlCrmTooltip" extends="view" bgcolor="0x000000"
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <switch>
+	  <when property="$as3">
+		<passthrough>
+		  import flash.filters.DropShadowFilter;
+		</passthrough>
+	  </when>
+	</switch>
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" />
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method> 
+</class>
+
+<class name="xmlCrmTooltipMulti" extends="view" bgcolor="0x000000" 
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <switch>
+	  <when property="$as3">
+		<passthrough>
+		  import flash.filters.DropShadowFilter;
+		</passthrough>
+	  </when>
+	</switch>
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" multiline="true" />
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	    
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/text/library.lzx b/WebContent/swf10/base/components/text/library.lzx
new file mode 100644
index 0000000..962a736
--- /dev/null
+++ b/WebContent/swf10/base/components/text/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="borderedInputtext.lzx" />
+	<include href="labelText.lzx" />
+	<include href="labelTooltip.lzx" />
+	
+
+</library>
diff --git a/WebContent/swf10/base/functions.lzx b/WebContent/swf10/base/functions.lzx
new file mode 100644
index 0000000..7ed7d0c
--- /dev/null
+++ b/WebContent/swf10/base/functions.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!-- 
+
+NOTICE:
+All contents regarding "chat" are moved to /modules/chat/globalMethods.lzx
+Issue353. 2008.3.28 H.kuze(minamotonoason)
+
+-->
+
+
+<script>
+<![CDATA[
+
+// Load Labels from List
+var labels = new Object();
+
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+
+function setLabelObjectByHundred(no, obj){
+   	for (var i = 0; i < obj.length; ++i) {
+	    labels["id" + obj[i].id] = obj[i].value;
+   	}
+}
+
+function getLabelTag(labelid){
+	var l = labels["id" + labelid];
+	if (l == undefined) {
+		l = "Error Missing [" + labelid + "]";
+	}
+    return l;
+}
+
+]]>
+</script>
+		
+</library>
diff --git a/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx b/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx
new file mode 100644
index 0000000..307cffd
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<dataset name="myresultnavi" />
+
+<dataset name="languagesSet" />        
+
+<class name="userStatus" extends="view" width="250" height="30">
+    <attribute name="statusText" type="string" />
+    <attribute name="statusColor" type="number" value="0" />
+
+    <text name="status" width="240" height="20" x="5" y="5" fontstyle="bold" fgcolor="0" text="defaulttext" fontsize="10"/>
+
+    <handler name="oninit">
+        this.status.setAttribute("text", this.statusText);
+        this.status.setAttribute("fgcolor", this.statusColor);
+        this.setAttribute("visibility", "visible");
+        lz.Timer.addTimer( new LzDelegate( this, "selfDestroy" ), 3000 );
+    </handler>
+
+    <method name="selfDestroy" args="ignore=null">
+        this.destroy();
+    </method>
+</class>
+
+<class name="hibRtmpConnection" extends="rtmpConnection" debug="false" src="" >
+
+     <!--
+        The onconnect Method is triggered several times:
+             - When you enter a room the NetConnection will close and reconnect to the Scope of the Room
+             - When you leave the room again it will be re-connected to the default scope again
+      -->
+     <handler name="onconnect">
+		if($debug) Debug.info("hibRtmpConnection/onconnect send to LocalConnection ");
+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'as3ConnectionSuccess');
+		
+		//reset rights
+        canvas.isAllowedToGiveExclusiveAudio = false;
+        // this.overwritePublicSID.doCall();
+        //this.setUsernameReconnect.doCall();
+    </handler>
+
+    <netRemoteCallHib name="overwritePublicSID" funcname="overwritePublicSID" >
+    	<netparam><method name="getValue"> return canvas.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("overwritePublicSID: ",value);
+        </handler>
+    </netRemoteCallHib>
+
+    <handler name="onerror" args="value">
+        if ($debug) Debug.write("Connection error ",value);
+        // this.connect();
+    </handler>
+    
+</class>
+
+<hibRtmpConnection name="thishib" id="hib" />
+
+</library>
diff --git a/WebContent/swf10/base/hibernate/library.lzx b/WebContent/swf10/base/hibernate/library.lzx
new file mode 100644
index 0000000..78d99f9
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="netRemoteCallHib.lzx" />
+	<include href="hibRtmpConnection.lzx" />
+
+</library>
diff --git a/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx b/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx
new file mode 100644
index 0000000..bf28b46
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="netRemoteCallHib" extends="netremotecall">
+
+	<!-- this should be the contentSaveWindow -->
+	<attribute name="returnObj" value="null" />
+	 
+	<!-- if true this object will register at the update-observer -->
+	<attribute name="registerObject" value="false" type="boolean" />
+	
+	<!-- show Error Messages with normal Box -->
+    <attribute name="activeErrorHandler" value="false" type="boolean" />	
+    
+	<!-- show Error Messages with normal Box -->
+    <attribute name="showLoading" value="true" type="boolean" />    
+	
+	<!-- show Error Messages with Callback Box -->
+	<attribute name="isCallBackHandler" value="false" type="boolean" />	
+	
+	<handler name="oninit">
+		if (this.registerObject) this.parent.addViewToObserver(this);
+	</handler>	
+	<method name="doCall">
+        //if (this.showLoading) canvas._loadingAll.setAttribute('visible',true);
+		//if($debug) Debug.write("netRemoteCallHib/doCall: [ " , this.funcname , " ]",this.parent);
+		this.callRPC(null);
+	</method>
+	
+	<event name="sendCallBack" />
+	
+	<!--
+
+	 -->
+	<handler name="ondata" args="value">
+		<![CDATA[
+			//Debug.write("ondata: ",this.funcname,value);
+			
+			//if (this.showLoading) canvas._loadingAll.setAttribute('visible',false);
+			
+			//Another Error Handler for the Form-Components
+			if (this.returnObj!=null && Number(value)>0) {
+				//Debug.write("this.returnObj.processNext");
+				this.returnObj.processNext();
+			} else if (this.returnObj!=null && Number(value)<0) {
+				this.returnObj.errorByCode(Number(value));
+			} else if (this.returnObj!=null && value==null) {
+				this.returnObj.errorByCode(-1);
+			}
+			
+            if (this.activeErrorHandler) {
+                if (Number(value)<0){
+                    if ($debug) Debug.warn("Received Error ID: ",value);					
+					if (this.isCallBackHandler) 
+					{
+					   //TODO: Fix error messages
+					   
+					} else {
+					   //TODO: Fix error messages
+					}
+                }
+            }			
+		]]>
+	</handler>	
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/library.lzx b/WebContent/swf10/base/library.lzx
new file mode 100644
index 0000000..cde16f9
--- /dev/null
+++ b/WebContent/swf10/base/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="functions.lzx" />
+    <include href="mainAttributes.lzx" />
+    <include href="mainDatasets.lzx" />
+    <include href="mainMethods.lzx" />
+    
+    <include href="remote/" />
+    <include href="components/" />
+    <include href="hibernate/" />
+	
+</library>
diff --git a/WebContent/swf10/base/mainAttributes.lzx b/WebContent/swf10/base/mainAttributes.lzx
new file mode 100644
index 0000000..e7a5233
--- /dev/null
+++ b/WebContent/swf10/base/mainAttributes.lzx
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all attributes for main.lzx -->
+
+<library>
+	
+	<!--- 
+	   Audio-Video Quality Settings
+		overwritten by values from the public/config.xml 
+	 -->
+	<attribute name="codecType" value="h264" type="string" />
+	<attribute name="framesPerSecond" value="30" type="number" />
+	<attribute name="bandwidthNeededNormal" value="16384" type="number" />
+	<attribute name="bandwidthNeededBest" value="32768" type="number" />
+	<attribute name="camQualityNormal" value="75" type="number" />
+	<attribute name="camQualityBest" value="75" type="number" />
+	<attribute name="microphoneRateBest" value="22" type="number" /> 
+	<attribute name="echoPath" value="128" type="number" /> 
+	<attribute name="echoSuppression" value="true" type="string" />
+		
+
+	<!--- 
+        Holds a reference to the current VideoCOntainer Object
+        containing the VideoViews
+        and some more references to temp-objects
+	 -->
+	<attribute name="_videocontainer" value="null" />
+
+	<attribute name="currentNC" value="null" />
+
+	<attribute name="currentRoomObject" value="null"/>
+
+	<attribute name="userobject" value="null"/>
+
+	<attribute name="webAppRootKey" value="" type="string" />
+	
+	<!--- 
+		URL/IP to use for the Server for HTTP and HTTPS traffic.
+	    If this value is empty it will use the rtmphostlocal 
+	    variable (and in that way try to connect to the 
+	    domain-name the OpenMeetings-Client has been loading from)
+	 -->
+	<attribute name="httphostlocal" value="" type="string" />
+	
+	<!--- 
+	    Port to use for the Server
+	    This port is used to connect to the HTTP-Servlet
+	    of the Red5-Servlet
+	 -->
+	<attribute name="red5httpport" value="5080" type="string" />
+
+	<attribute name="httpRootKey" value="/" type="string" />
+	
+	<attribute name="protocol" value="/" type="string" />
+	
+	<attribute name="proxyType" value="none" type="string" />
+
+	<!---
+		A reference to the current screenSharingDialogContainer or 
+		null if there is nothing to stream
+	 -->
+	<attribute name="screenSharingDialogContainer" value="null" />
+	
+	<!--
+	    this value indicates if this user is allowed to draw to the Whiteboard
+	    If this user is currently Moderator => he ALWAYS can draw to whiteboard
+	    even if this isAllowedToDraw == false
+	 -->
+	<attribute name="isAllowedToDraw" value="false" type="boolean" />
+	
+	<attribute name="isAllowedToScreenShare" value="false" type="boolean" />
+	
+	<attribute name="isAllowedToRemoteControl" value="false" type="boolean" />
+	
+	<attribute name="isAllowedToGiveExclusiveAudio" value="false" type="boolean" />
+	
+	<attribute name="ismoderator" value="false" type="boolean" />
+	
+	<attribute name="isInterview" value="false" type="boolean" />
+	
+	<!--
+	   Those values are fixed values of the video positions of the videos from the interview room type
+	 -->
+	<attribute name="interviewPod1_x" value="320" type="number" />
+	<attribute name="interviewPod1_y" value="28" type="number" />
+	
+	<attribute name="interviewPod2_x" value="644" type="number" />
+    <attribute name="interviewPod2_y" value="28" type="number" />
+    
+    <!-- 
+		Holds a reference to the current tooltip, if there is one
+	 -->
+	<attribute name="currentToolTip" value="null" />
+	
+	<!-- Attributes for wicket login (since it hard not to break anything)-->
+	<attribute name="wicketsid" type="string" />
+	<attribute name="wicketroomid" value="0" type="number" />
+	
+	<!-- Attributes for show chat dialog when screen sharing open-->
+	<attribute name="chatHeight" value="0" type="number" />
+	
+	<method name="registerToolTip" args="viewInstance">
+		if (this.currentToolTip != null) {
+			this.currentToolTip.cleanHolder();
+		}
+		this.currentToolTip = viewInstance;
+	</method>
+	
+	<method name="clearToolTip">
+		if (this.currentToolTip != null) {
+			this.currentToolTip.cleanHolder();
+			this.currentToolTip = null;
+		}
+	</method>
+
+</library>
diff --git a/WebContent/swf10/base/mainDatasets.lzx b/WebContent/swf10/base/mainDatasets.lzx
new file mode 100644
index 0000000..d4420e2
--- /dev/null
+++ b/WebContent/swf10/base/mainDatasets.lzx
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all datasets for main.lzx -->
+
+<library>
+
+	<method name="getLocalBaseUrl">
+	<![CDATA[
+		var urlObject = lz.Browser.getBaseURL();
+		//If Port is Null or undefinied use port 80
+		var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
+		//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
+		var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
+		url = url + (url.slice(-1) == '/' ? '' : '/');
+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
+		return url;
+	]]>
+	</method>
+
+	<method name="getServerBaseUrl">
+	<![CDATA[
+		var protocol = lz.Browser.getInitArg('protocol');
+		var host = lz.Browser.getInitArg('host');
+		var port = lz.Browser.getInitArg('port');
+		var context = lz.Browser.getInitArg('context');
+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {
+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";
+		} else {
+			return getLocalBaseUrl();
+		}
+	]]>
+	</method>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()" proxied="false">
+    <handler name="oninit">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());
+        this.doRequest();
+    </handler>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+<method name="reloadConfig">
+	
+</method>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()" proxied="false">
+    <method name="loadTheme">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());
+        this.doRequest();
+    </method>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+</library>
diff --git a/WebContent/swf10/base/mainMethods.lzx b/WebContent/swf10/base/mainMethods.lzx
new file mode 100644
index 0000000..8e20f88
--- /dev/null
+++ b/WebContent/swf10/base/mainMethods.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- methods for main.lzx -->
+
+<library>
+    
+    <method name="onError" args="errorEvent">
+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'remoteLogWrite', "error " + errorEvent);
+	</method>
+    
+    <method name="myinit">
+        <![CDATA[
+        // Add listener to all uncaught flash errors
+        this.getDisplayObject().loaderInfo.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onError);
+        
+        canvas.mediaerrortimeout = 30000;
+        canvas.medialoadtimeout = 30000;
+        
+        if($debug) Debug.write("main.lzx/config.xml ondata",this);
+        
+        //Audio-Video-Settings
+        this.setAttribute('loudnessAcitviation',canvas.myConfigSet.getPointer().xpathQuery('config/loudnessAcitviation/text()'));
+        this.setAttribute('codecType',canvas.myConfigSet.getPointer().xpathQuery('config/codecType/text()'));
+        this.setAttribute('framesPerSecond',Number(canvas.myConfigSet.getPointer().xpathQuery('config/framesPerSecond/text()')));  
+        this.setAttribute('bandwidthNeededNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededNormal/text()')));  
+        this.setAttribute('bandwidthNeededBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededBest/text()')));  
+        this.setAttribute('camQualityNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityNormal/text()')));  
+        this.setAttribute('camQualityBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityBest/text()')));  
+        this.setAttribute('microphoneRateBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/microphoneRateBest/text()')));  
+        this.setAttribute('echoPath',Number(canvas.myConfigSet.getPointer().xpathQuery('config/echoPath/text()')));
+        this.setAttribute('echoSuppression',canvas.myConfigSet.getPointer().xpathQuery('config/echoSuppression/text()'));
+        
+        //httphostlocal variable is loaded from the SWF8 application, cause it needs value, SWF10 app
+        //knows nothing about the rtmphostlocal, and we don't want to parse the URL from the browser
+        //in both applications to find out where the user loaded the SWF from and extract the domain/ip 
+        //from it
+        
+        this.setAttribute('httpRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/httpRootKey/text()'));
+        this.setAttribute('protocol',canvas.myConfigSet.getPointer().xpathQuery('config/protocol/text()')); 
+        this.setAttribute('proxyType',canvas.myConfigSet.getPointer().xpathQuery('config/proxyType/text()'));  
+
+        var _url = this.getDisplayObject().loaderInfo.url;
+        if($debug) Debug.write("_url: ",_url);
+        
+        ]]>
+    </method>
+    
+    <method name="getLabelName" args="id">
+    	// return "label "+id;
+        //if($debug) Debug.write("main.lzx/getLabelName()",id);
+        return getLabelTag(id);
+    </method>
+    
+    <method name="getThemeImage" args="tName">
+		if ($debug) Debug.write("load Image by Name SWF10: ",tName);
+		var tPath = canvas.mainTheme.getPointer().xpathQuery("theme/resource[@name='"+tName+"']/@src");
+		if ($debug) Debug.write("tPath SWF10 "+tPath);
+		return tPath;
+	</method>
+	
+	<method name="getThemeColor" args="tColor">
+		if ($debug) Debug.write("load Color by Name SWF10: ",tColor);
+		var tColor = canvas.mainTheme.getPointer().xpathQuery("theme/color[@name='"+tColor+"']/@value");
+		if ($debug) Debug.write("tColor SWF10 "+tColor);
+		return tColor;
+	</method>
+	
+	<!-- 
+		httphostlocal is synced from the SWF8 application, it will always point to the master
+	 -->
+	<method name="getHttpHost">
+		return canvas.httphostlocal;
+    </method>
+	
+	<method name="getUrl">
+		<![CDATA[
+			return canvas.protocol + '://' + getHttpHost()
+				+ ':' + canvas.red5httpport + canvas.httpRootKey;
+		]]>
+	</method>
+    
+	<method name="getPictureUrl" args="pictureuri,extraParams">
+	<![CDATA[
+		var pUri = (pictureuri == null || pictureuri.length == 0) ? "d.jpg" : pictureuri;
+		var downloadurl = pUri;
+		if (!pUri.startsWith("http://") && !pUri.startsWith("https://")) {
+			pUri = "_profile_" + pUri;
+			
+			downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=' + pUri
+				+ '&room_id=&r=' + (new Date()).getTime()
+				+ extraParams + '&sid='+canvas.sessionId;
+		}
+		if($debug) Debug.write("getPictureUrl/downloadurl ", downloadurl);
+		return downloadurl;
+	]]>
+	</method>
+		
+</library>
diff --git a/WebContent/swf10/base/remote/baseVideoStream.lzx b/WebContent/swf10/base/remote/baseVideoStream.lzx
new file mode 100644
index 0000000..13df059
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoStream.lzx
@@ -0,0 +1,381 @@
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!---
+	extends the Video-View with Streaming functions
+ -->
+
+<class name="baseVideoStream" extends="baseVideoView">
+
+    <switch>
+    <when property="$as3">
+        <passthrough>
+        	import flash.events.*;
+            import flash.net.*;
+            import flash.media.*
+        </passthrough>
+    </when>
+    </switch>
+    
+    <attribute name="yDebug" value="-20" type="number" />
+    
+    <method name="getYDebug">
+    	this.yDebug += 20;
+    	return this.yDebug;
+    </method>
+
+	<!--- the NetStream Object
+              @keywords final -->
+	<attribute name="_ns" value="null" />
+
+	<!--- This value does indicate if this stream play or broadcasts
+              @keywords readonly -->
+	<attribute name="mode" value="play" type="string" />
+
+	<!--- This is the current buffer used, in Live Streaming this MUST be 0
+              @keywords readonly -->
+	<attribute name="bufferTime" value="0" type="number" />
+
+	<!--- This is a reference to the current microphone, only set if broadcasting
+              @keywords readonly -->
+	<attribute name="micro" value="null" />
+
+	<!--- This is a reference to the current camara, only set if broadcasting
+              @keywords readonly -->
+	<attribute name="camera" value="null" />
+
+	<!--- Reference To the Sound Object
+		@keywords final -->
+	<attribute name="soundRef" value="null" />
+	<!--- Reference To the Sound MovieClip
+		@keywords final -->
+	<attribute name="soundRefMC" value="null" />
+
+    <!--- Default mic gain -->
+    <attribute name="micGain" value="50" type="number"/>
+    
+    <attribute name="micMuted" value="false" />
+
+	<event name="onMetaDataEvent" />
+	<event name="onPlayStatusEvent" />
+	<event name="onCuePointEvent" />
+	<event name="onAsyncError" />
+	<event name="onNetStatus" />
+	<event name="onIoError" />
+
+	<!-- save value for restart -->
+        <attribute name="streamName" />
+        <attribute name="delay" />
+	<!--- @keywords private -->
+	<method name="createStream">
+		var tStream = this._findnc();
+        if (!tStream.connected) {
+        	if ($debug) Debug.warn("NetConnection is not connected");
+        }
+		this._ns = new NetStream(tStream);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+        //according to the docs the construct to catch event has to be implemented like this.
+        var t = this;
+		var clientObject = new Object();
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		this._ns.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	</method>
+	
+	<method name="onNetStatus2" args="evt">
+		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);
+		this.onNetStatus.sendEvent(evt.info);
+	</method>
+	
+	<method name="asyncError" args="error">
+		if($debug) Debug.write("simpleNetStream asyncError",error);
+		this.onAsyncError.sendEvent(error);
+	</method>
+	
+	<method name="netStatus" args="status">
+		if($debug) Debug.write("simpleNetStream netStatus",status);
+		this.onNetStatus.sendEvent(status);
+	</method>
+	
+	<method name="ioError" args="error">
+		if($debug) Debug.write("simpleNetStream ioError",error);
+		this.onIoError.sendEvent(error);
+	</method>
+
+    <method name="onCuePoint" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onCuePoint",info);
+        this.onCuePointEvent.sendEvent(info);
+    ]]></method>
+
+    <method name="onPlayStatus" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onPlayStatus",info);
+        this.onPlayStatusEvent.sendEvent(info);
+    ]]></method>
+
+    <method name="onMetaData" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onMetaData",info);
+        this.onMetaDataEvent.sendEvent(info);
+    ]]></method>
+
+    <!--- Find the Flash NetConnection object.
+          @keywords private -->
+    <method name="_findnc">
+    	if (canvas.currentNC == null) {
+    		if ($debug) Debug.warn("canvas.currentNC is NULL, maybe connection did fail?");
+    	}
+        return canvas.currentNC;
+    </method>
+
+	<!---
+		Plays a Video Stream, makes a new Instance of a NetStream, if previous NetStream
+		is still open it will first close that, used to subscribe to a live-stream
+		@param string streamName the streamname to play
+		@param number delay The time it should seek, for Live-Streams this value should be -1
+	 -->
+	<method name="playStream" args="streamName,delay">
+		<![CDATA[
+			this.streamName=streamName;
+			this.delay=delay;
+			if (this._ns!=null){
+				this._stop();
+			}
+			this.mode = "play";
+			this.createStream();
+			//invokes Method in baseVideoView which shows the stream
+			this.attachVideo(this._ns);
+			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
+			//after re-syncing the stream
+			//this.setBuffer(0.1);
+			if (delay == 0) {
+			    this._ns.play(streamName);
+			} else {
+			    this._ns.play(streamName,delay);
+			}
+		]]>
+	</method>
+
+	<method name="justPlayStream" args="streamName,delay">
+        <![CDATA[
+            this.streamName=streamName;
+            this.delay=delay;
+            if (this._ns!=null){
+            	if ($debug) Debug.write("STOP NS is NOT null ")
+                this._stop();
+            }
+            this.mode = "play";
+            this.createStream();
+            //invokes Method in baseVideoView which shows the stream
+            this.attachVideo(this._ns);
+            //FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
+            //after re-syncing the stream
+
+            this.setBuffer(6);
+
+            if ($debug) Debug.write("Play Stream "+streamName);
+
+            this._ns.play(streamName,delay);
+        ]]>
+    </method>
+
+	<method name="prepare" args="mode,streamName,camReference,micReference">
+		if (this._ns != null){
+			this._stop();
+		}
+		this.mode = mode;
+		this.createStream();
+		
+		if (camReference != null) {
+			this.setAttribute('camera', camReference);
+			this._ns.attachCamera(camReference);
+			//invokes Method in baseVideoView which shows the cam
+			this.attachCamera(camReference);
+			
+			var videoStreamSettings = null;
+			if ($debug) Debug.write("codecType=" + canvas.codecType);
+			if (canvas.codecType === "h264") {
+				videoStreamSettings = new H264VideoStreamSettings();
+				videoStreamSettings.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_5_1);
+			} else {
+				videoStreamSettings = new VideoStreamSettings();
+			}
+			videoStreamSettings.setQuality(camReference.bandwidth, camReference.quality);
+			videoStreamSettings.setKeyFrameInterval(camReference.keyFrameInterval);
+			if ($debug) Debug.write("::keyFrameInterval " + camReference.keyFrameInterval);
+			videoStreamSettings.setMode(camReference.width, camReference.height, camReference.fps);
+			this._ns.videoStreamSettings = videoStreamSettings;
+		}
+		if (micReference != null) {
+			this.setAttribute('micro', micReference);
+			this._ns.attachAudio(micReference);
+			muteMicro(this.micMuted);
+		}
+		
+		this._ns.publish(streamName, (mode == "broadcast") ? "live" : mode);
+	</method>
+	<!---
+		BroadCasts a Stream
+		@param string streamName the streamname to broadcast
+		@param camera camReference a reference to the Camera-Object to stream
+		@param micropone micReference a reference to the Micropohne Object to stream
+	 -->
+	<method name="broadcast" args="streamName,camReference,micReference">
+		prepare("broadcast", streamName, camReference, micReference);
+	</method>
+
+	<method name="record" args="streamName,camReference,micReference">
+		prepare("record", streamName, camReference, micReference);
+    </method>
+    
+	<!---
+		Stops playing or broadcasting a Stream and clears the Video-Object
+	 -->
+	<method name="_stop">
+		if ($debug) Debug.write("STOP: ",this.mode,this._ns);
+		//Stop NetStream
+		if (this._ns==null) return;
+		this.camera = null;
+		this.micro = null;
+		if (this.mode == "play") {
+            this.soundRefMC = null;
+			this.soundRef = null;
+			this._ns.pause();
+			this._ns.close();
+			//remove NetStream from Video-Object
+			this.clear();
+			this._ns = null;
+		} else if (this.mode == "broadcast") {
+            this._ns.publish(false);
+            //remove NetStream from Video-Object
+            this.clear();
+            this._ns.close();
+            this._ns = null;
+        } else if (this.mode == "record") {
+            this._ns.publish(false);
+            //remove NetStream from Video-Object
+            this.clear();
+            this._ns.close();
+            this._ns = null;
+        } else {
+            this.clear();
+            this._ns.close();
+            this._ns = null;
+			if ($debug) Debug.warn("Not known Mode: ",this.mode,this);
+		}
+	</method>
+
+	<method name="restart">
+	     this._stop();
+	     this.playStream(this.streamName ,this.delay);
+	</method>
+	
+	<method name="setBuffer" args="time">
+	    if ($debug) Debug.warn("setBuffer has no 1:1 equivalent in AS3 ");
+	    return;
+		if(this._ns!=null){
+			this.bufferTime = time;
+			this._ns.setBufferTime(time);
+		} else {
+			if ($debug) Debug.warn("setBuffer but no NetStream initialized",this);
+		}
+	</method>
+
+	<!--- sets the Volume of the VideoStream
+		@param number volume Number between 0 and 100
+	 -->
+	<method name="setSoundVolume" args="volume">
+		//if ($debug) Debug.write(":: setSoundVolume ", parent.parent.publicSID);
+		//this.soundRef.setVolume(volume);
+		if (this._ns!=null){
+			this._ns.soundTransform = new SoundTransform(volume/100.0);
+		}
+	</method>
+
+	<method name="muteMicro" args="mute">
+		if ($debug) Debug.write(":: muteMicro ", mute, parent.parent.publicSID);
+		this.micMuted = mute;
+		if(this.micro != null) {
+			if(mute) {
+				if (this.micro.gain == 0) {
+					return;
+				}
+				if ($debug) Debug.write("Make Gain mute again from ",this.micro.gain);
+				this.setAttribute('micGain', this.micro.gain);
+				this.micro.gain = 0;
+			} else {
+				if ($debug) Debug.write("Make Gain loud again to ",this.micGain);
+				this.micro.gain = this.micGain;
+			}
+		}
+	</method>
+    
+    <!---
+        pause or resumes the NetStream
+        @args pauseStatus true pause, false resume
+     -->
+    <method name="pause" args="pauseStatus">
+    	if ($debug) Debug.write("do Pause",pauseStatus);
+    	if (this._ns==null){
+    		if ($debug) Debug.warn("No NetStream");
+    		return;
+    	}
+    	if (pauseStatus) {
+    		this._ns.pause();
+    	} else {
+    		this._ns.resume();
+    	}
+    </method>
+    
+    <!---
+        Seek the stream to a flvTime
+        this might only work if there are keyframes in the FLV, normally it should 
+        try to use the nearest keyframe available for the specified time.
+     -->
+    <method name="seekStream" args="flvTime">
+    	if ($debug) Debug.write("do seek",flvTime);
+        if (this._ns==null){
+            if ($debug) Debug.warn("No NetStream");
+            return;
+        }
+        this._ns.seek(flvTime);
+    </method>
+
+</class>
+
+
+</library>
diff --git a/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx b/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx
new file mode 100644
index 0000000..b0a939b
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx
@@ -0,0 +1,171 @@
+<library>
+	<!-- Licensed to the Apache Software Foundation (ASF) under one or more 
+		contributor license agreements. See the NOTICE file distributed with this 
+		work for additional information regarding copyright ownership. The ASF licenses 
+		this file to you under the Apache License, Version 2.0 (the "License"); you 
+		may not use this file except in compliance with the License. You may obtain 
+		a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
+		required by applicable law or agreed to in writing, software distributed 
+		under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
+		OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
+		the specific language governing permissions and limitations under the License. -->
+
+	<!--- extends the baseVideoStream with functions to catch Device Events 
+		this Class uses Events from the Base Class baseVideoStream onmicro and oncamera, 
+		which are thrown, once a device was set -->
+
+	<class name="baseVideoStreamDevice" extends="baseVideoStream">
+
+		<switch>
+			<when property="$as3">
+				<passthrough>
+					import flash.events.StatusEvent;
+					import flash.events.ActivityEvent;
+				</passthrough>
+			</when>
+		</switch>
+
+		<!--- Shows if there is Activity on the Microphone -->
+		<attribute name="micactive" value="false" type="boolean" />
+
+		<!--- Level delegate, used to track level changes.
+			@keywords private -->
+		<attribute name="_leveldel"
+			value="$once{new LzDelegate(this, '_updateLevel')}" />
+
+		<!--- Audio level, 0-100, the amount of sound detected by this microphone. 
+			Reset to 0 when there is no audio (no activity or not allowed).
+			@keywords readonly -->
+		<attribute name="level" type="number" value="0" />
+
+		<!--- Shows if there is Activity on the Camera -->
+		<attribute name="camactive" value="false" type="boolean" />
+
+		<!--- Message to send to Clients -->
+		<attribute name="objMessage" value="null" />
+		<!--- indicates if the message should be send, you can change the notification 
+			level by changing the loudnessAcitviation in the public/config.xml -->
+		<attribute name="isgreater" value="false" type="boolean" />
+
+		<attribute name="doSendNotification" value="true" type="boolean" />
+
+		<!--- If true the component will send an event via LocalConnection when 
+			sound is louder or less 5% -->
+		<attribute name="sendNotificationViaLocalConnection" value="true"
+			type="boolean" />
+
+		<event name="sendCameraStatus" />
+
+		<event name="sendMicroStatus" />
+
+		<handler name="oncamera" args="c">
+			//if ($debug) Debug.write("Cam: ",c);
+			c.addEventListener(ActivityEvent.ACTIVITY, onActivity);
+			c.addEventListener(StatusEvent.STATUS, onStatus);
+		</handler>
+
+		<method name="onStatus" args="stats">
+			if ($debug) Debug.write("CamStatus: ",stats);
+			this.sendCameraStatus.sendEvent(stats.code);
+		</method>
+
+		<method name="onActivity" args="event">
+			this.setAttribute("camactive", event.activating);
+		</method>
+
+		<handler name="onmicro" args="m">
+			//if ($debug) Debug.write("onmicro: ",m);
+			var t = this;
+			//send mic active to true to start the onActivity callback Idle job
+			this.setAttribute("micactive", true);
+			m.addEventListener(ActivityEvent.ACTIVITY, onMicActivity);
+			m.addEventListener(StatusEvent.STATUS, onMicStatus);
+		</handler>
+
+		<method name="onMicStatus" args="stats">
+			if ($debug) Debug.write("onMicStatus 1: ",stats);
+			this.sendMicroStatus.sendEvent(stats.code);
+		</method>
+
+		<method name="onMicActivity" args="event">
+			if ($debug) Debug.write("onMicActivity: ",event);
+		</method>
+
+		<!--- Handler for the Flash Microphone onActivity callback.
+			@keywords private -->
+		<handler name="onmicactive">
+		<![CDATA[
+			if (this.onlevel) {
+				if (this.micactive) {
+					this._leveldel.register(lz.Idle, "onidle");
+				} else {
+					this._leveldel.unregisterAll();
+					this.setAttribute("level", 0);
+				}
+			}
+		]]>
+		</handler>
+
+		<!--- Handler for updating the microphone activity level attribute.
+			@keywords private -->
+		<method name="_updateLevel" args="arg">
+		<![CDATA[
+			if (this.micro == null) {
+				return;
+			}
+			var level = this.micro.activityLevel;
+			if (level < 0) {
+				level = 0;
+			}
+
+			if (level != this.level) {
+				this.setAttribute("level", level);
+			}
+		]]>
+		</method>
+
+		<!-- these methods send a Notification to all Connected users of a Room 
+			about the onActivity-Change -->
+		<handler name="onlevel" args="level">
+		<![CDATA[
+			//if ($debug) Debug.write("onlevel ",this.level,level);
+			
+			if (!this.doSendNotification) {
+				return;
+			}
+			
+			//greater 5 means the green dot starts to blink if the loudness is greater then 5%
+			//it makes no sense to set this to zero as there will be 1000 of events send
+			//per minute to change the status just of this icon, swagner 12.02.2012
+			var tVal = (level > 8);
+			
+			if (this.isgreater != tVal) {
+				//if ($debug) Debug.write("Level sendNotification ",this.isgreater,tVal,level);
+				this.isgreater = tVal;
+				this.sendNotification();
+			}
+		]]>
+		</handler>
+
+		<method name="sendNotification">
+			//if ($debug) Debug.write("Level sendNotification ",this.isgreater);
+			if (!this.sendNotificationViaLocalConnection) {
+				return;
+			}
+			if (parent.parent._loudness != null) {
+				parent.parent._loudness.setSpeaking(this.isgreater);
+			}
+			this.objMessage = new Array ();
+			this.objMessage[0] = 'audioActivity';
+			this.objMessage[1] = this.isgreater;
+			this.objMessage[2] = parent.parent.publicSID;
+			//if ($debug) Debug.write("Level sendNotification ",this.objMessage);
+			this.sendMessage.doCall();
+		</method>
+
+		<netRemoteCallHib name="sendMessage" funcname="sendMessage"
+			remotecontext="$once{ canvas.thishib }" showLoading="false">
+			<netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+		</netRemoteCallHib>
+	</class>
+</library>
diff --git a/WebContent/swf10/base/remote/baseVideoView.lzx b/WebContent/swf10/base/remote/baseVideoView.lzx
new file mode 100644
index 0000000..097a53a
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoView.lzx
@@ -0,0 +1,102 @@
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+
+<!---
+	This class provides the basic functions for the video-output
+
+	    @START_CODE
+            <baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" />
+        @END_CODE
+ -->
+
+<class name="baseVideoView" width="${parent.width}" height="${parent.height}">
+
+    <passthrough when="$as3">
+        import flash.media.*;
+        import flash.net.NetConnection;
+        import flash.net.NetStream;
+    </passthrough>
+
+    <attribute name="_sound" value="null"/>
+    <attribute name="__LZvideo" value="null"/>
+
+	<method name="init"><![CDATA[
+        super.init();
+        var mc = new Video(this.width, this.height);
+        this.sprite.addChild(mc);
+        this.__LZvideo = mc;
+        this.applySizeToVid();
+    ]]></method>
+
+	<method name="applySizeToVid">
+		var vid = this._getflashvideo();
+        if(vid != null) {
+            vid.width = this.width;
+            vid.height = this.height;
+        } else {
+            if ($debug) Debug.warn("applySizeToVid IS NULL ",this.width,this.height);
+        }
+	</method>
+
+    <handler name="onwidth" args="w">
+    	//if ($debug) Debug.info("onwidth ",this.width,this.height);
+        this.applySizeToVid();
+    </handler>
+
+    <handler name="onheight" args="h">
+    	//if ($debug) Debug.info("onheight ",this.width,this.height);
+        this.applySizeToVid();
+    </handler>
+
+	<method name="_getflashvideo">
+	<![CDATA[
+		if (__LZvideo == null) {
+			init();
+		}
+		//if ($debug) Debug.write("_getflashvideo()");
+		return this.__LZvideo;
+	]]>
+	</method>
+
+    <method name="attachCamera" args="camera">
+        var vid = this._getflashvideo();
+    	vid.attachCamera(camera);
+    </method>
+
+    <!--- shows the Video (NetStream) in the View -->
+    <method name="attachVideo" args="video">
+    	var vid = this._getflashvideo();
+    	vid.attachNetStream(video);
+    </method>
+
+	<method name="clear">
+	    if ($debug) Debug.write("Select unattach :3");
+		var vid = this._getflashvideo();
+		vid.attachNetStream(null);
+		vid.attachCamera(null);
+		this.__LZvideo.clear();
+		if ($debug) Debug.write("Select unattach : 4");
+	</method>
+</class>
+
+
+</library>
diff --git a/WebContent/swf10/base/remote/library.lzx b/WebContent/swf10/base/remote/library.lzx
new file mode 100644
index 0000000..18b8cb8
--- /dev/null
+++ b/WebContent/swf10/base/remote/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- new Library -->
+	<include href="baseVideoView.lzx" />
+	<include href="baseVideoStream.lzx" />
+	<include href="baseVideoStreamDevice.lzx" />
+	<include href="rtmpConnection.lzx" />
+	<include href="sharedObject.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/base/remote/rtmpConnection.lzx b/WebContent/swf10/base/remote/rtmpConnection.lzx
new file mode 100644
index 0000000..1cfb69f
--- /dev/null
+++ b/WebContent/swf10/base/remote/rtmpConnection.lzx
@@ -0,0 +1,375 @@
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+
+<class name="rtmpConnection" extends="node">
+
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.net.NetConnection;
+                    import flash.events.NetStatusEvent;
+                </passthrough>
+            </when>
+        </switch>
+
+    	<attribute name="debug" value="false" type="boolean" />
+    	
+    	<event name="onconnect"/>
+    	<event name="onerror"/>
+        
+        <!-- this attribute holds a reference to the current/last called netremoteCall,
+        in case of error you can debug that way which call did fail -->
+        <attribute name="lastCalled" value="null" />
+    	
+    	<attribute name="src" value="" type="string"/>
+
+		<method name="connect">
+            this._nc = new NetConnection();
+
+            // local reference to rtmpconnection
+            //this._nc.t = this;
+            
+            this._nc.proxyType = canvas.proxyType;
+            
+            var ok = this._nc.connect(src == "null" ? null : src, true); //isAVClient = true
+            if (this.debug) {
+            	if($debug) Debug.write("*** debug ***");
+            }
+            
+            this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);
+            
+    		if($debug) Debug.write("devRtmpConnection/registerMethods()");
+    		var clientObj = {};
+    		clientObj.setId = this.setId;
+    		
+    		this._nc.client = clientObj;
+    		
+			//Register Methods
+			//this.registerMethods();
+		</method>
+		
+		<method name="setId" args="tId">
+			if ($debug) Debug.write("setId ", tId);
+		</method>
+		
+        <method name="_onStatus" args="stats"><![CDATA[
+            if ($debug) {
+                Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);
+            }
+
+            var msg = "";
+            var s;
+
+            switch (stats.info.code) {
+
+                case "NetConnection.Connect.Success": {
+                    // The connection attempt succeeded.
+                    //canvas.currentNC is the reference to the NetConnection that is used in the NetStream
+                    msg = stats.info.code;
+                    canvas.currentNC = this._nc;
+                    s = 2;
+                    break;
+                }
+                
+                case "NetConnection.Connect.Closed": {
+                    msg = stats.info.code;
+                    this._nc = null;
+                    canvas.currentNC = null;
+                    s = 0;
+                    break;
+                }
+
+                default: {
+                    msg = stats.info.code;
+                    s = 0;
+                    break;
+                }
+
+            }
+
+            this.setAttribute("status", msg);
+
+            if (s == 2) {
+                this.onconnect.sendEvent();
+            } else {
+            	this.onerror.sendEvent();
+            }
+
+          ]]>
+        </method>	
+        
+        <method name="disconnect">
+        	if ($debug) Debug.write(" DISCONNECT ");
+        	if (this._nc != null) {
+                this._nc.close();
+            }
+        </method>
+    <!--- 
+        With this function all methods are registered to the NetConnection
+        A server can invoke this Method with a call for it from the Client
+        Only subnodes of rtmpconnections which are a instance of netRemoteCallHib
+        are registered, to add dynamically methods to the remotefunction you will
+        have to invoke this method once again
+        -swagner
+     -->
+    <method name="registerMethods">
+        <![CDATA[
+	        if (this.subnodes!=null){
+	            var clientObj = {};
+		        //Register all methods which are onstanceof netRemoteCallHib
+		        for (var i=0;i<this.subnodes.length;i++){
+		            //If it is of Type netRemoteCallHib then register it to the NetConnection
+		            if (this.subnodes[i] instanceof lz.netRemoteCallHib){
+		                clientObj[this.subnodes[i].funcname] = function( args ){
+                            return canvas.thishib.remoteCallMethod(arguments.callee,arguments);
+		                    //return hib.remoteCallMethod(arguments.callee,args);
+		                }
+		            }
+		        }
+		        this._nc.client = clientObj;
+        	}
+        ]]>
+    </method>
+    
+    <!-- 
+        Process the RemoteCall to the Right Funtion
+        -swagner
+     -->
+    <method name="remoteCallMethod" args="callee,args">
+        <![CDATA[
+            for (var eg in this._nc){
+                if (this._nc[eg]==callee){
+                    if (this.debug) {
+                        //_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);
+                    }    
+                    if (args.length == 1) {
+                        return this.callFuntion(eg,args[0]);
+                    } else {
+                        return this.callFuntion(eg,args);
+                    }
+                    //return this.callFuntion(eg,args);
+                }
+            }
+        ]]>
+    </method>
+    
+    <!-- 
+        Map the Function to a netRemoteCallHib
+        -swagner
+     -->
+    <method name="callFuntion" args="funcname,args">
+        <![CDATA[
+            for (var i=0;i<this.subnodes.length;i++){
+                if (this.subnodes[i].funcname==funcname){
+                    return this.subnodes[i].onResult(args);
+                }
+            }
+        ]]>
+    </method>		
+    
+    <method name="callRPC" args="func, obj, params">
+    	//if ($debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);
+    	if (params.length != 0){
+	    	//does this really work?
+	    	//ASSetPropFlags(_global, null, 8, 1);
+            //setPropertyIsEnumerable(8, 1);
+	    	//Debug.write("does it work?",arguments);
+	    	<!--
+	    	this._nc.call.apply(this._nc,arguments);
+	    	 -->
+			if (params.length==1){
+			    this._nc.call(func, obj,params[0]);
+			} else if (params.length==2){
+			    this._nc.call(func, obj,params[0],params[1]);
+			} else if (params.length==3){
+			    this._nc.call(func, obj,params[0],params[1],params[2]);
+			} else if (params.length==4){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3]);
+			} else if (params.length==5){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);
+			} else if (params.length==6){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);
+			} else if (params.length==7){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
+			} else if (params.length==8){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
+			} else if (params.length==9){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
+			} else if (params.length==10){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
+			} else if (params.length==11){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
+			} else if (params.length==12){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
+			} else if (params.length==13){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
+			} else if (params.length==14){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
+			} else if (params.length==15){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
+			} else if (params.length==16){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);
+			} else if (params.length==17){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);
+			} else if (params.length==18){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);
+			} else if (params.length==19){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);
+			} else if (params.length==20){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);
+			}	    	 
+        } else {
+            this._nc.call(func, obj);
+        }
+    </method>
+    
+</class>
+
+
+    <!---
+        Net remote call. 
+        @todo Document netremotecall class.
+    -->
+    <class name="netremotecall" extends="node">
+
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.net.Responder;
+                </passthrough>
+            </when>
+        </switch>
+
+        <!--- Name of the remote function. -->
+        <attribute name="funcname" value="$once{null}" type="string" />
+    
+        <attribute name="remotecontext" value="null" />
+    
+        <attribute name="dataobject" value="null" />
+
+        <attribute name="responder" value="null" />
+		
+        <!--- Data handling event. args="value"  -->
+        <event name="ondata" />
+
+        <!--- Error handling event. -->
+        <event name="onerror"/>
+
+        <!--- Call the remote method, passing the array of params. -->
+        <method name="callRPC" args="params"><![CDATA[
+            if (this.funcname == null) {
+                //Debug.write("No funcname given");
+                if (this.onerror) this.onerror.sendEvent("No funcname given");
+                return;
+            }
+
+            if (params == null) {
+                params = new Array();
+
+                var subnodes = this.subnodes;
+                if (subnodes != null) {
+                    var i;
+                    var n = subnodes.length;
+                    for (i = 0; i < n; i++) {
+                        // If getValue method is declared in param, call that
+                        // instead to get value.
+                        var tsi = subnodes[i];
+                        //TODO: fixme
+                        //if ((tsi["getValue"] != null) && (tsi.getValue["prototype"] != null)) {
+                        //    params[i] = tsi.getValue();
+                        //    Debug.write("tsi.getValue():", tsi.getValue());
+                        //} else {
+                        //    params[i] = tsi.value;
+                        //}
+                        params[i] = tsi.getValue();
+                    }
+                }
+
+            } else if (params.__proto__ != Array.prototype) {
+                //Debug.write(this.name, "error: first argument (params) is not an array");
+                return -1;
+            }
+
+            //if ($debug) Debug.write("call", this, this.parent, this.parent.status);
+            var rtmpObject = null;
+            if (this.parent instanceof lz.rtmpConnection){
+        	    rtmpObject = this.parent;
+            } else if(this.remotecontext  instanceof lz.rtmpConnection){
+        	    rtmpObject = this.remotecontext;
+            } else {
+        	    if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);
+        	    return;
+            }
+        	//Debug.write('call', this, rtmpObject, rtmpObject.status);
+        	//Debug.write('call', this.remotecontext);
+            if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);
+            rtmpObject.lastCalled = this;
+
+            this.responder = new Responder(onResult);
+
+            rtmpObject.callRPC(this.funcname, this.responder, params);
+
+          ]]>
+        </method>
+
+        <!--- Handle the result returned from the remote method. -->
+        <method name="onResult" args="value"><![CDATA[
+            // Can be overriden.
+            // Would be great if it can be used with dataobject,
+            // but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.
+            ////Debug.write("netremotecall", this, "onResult", value);
+
+            if (this.dataobject!=null) {
+                if ( this.dataobject instanceof LzDataset ) {
+                    //Debug.write("onResult: ",this,value,dataobject);
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.setData(element.childNodes);
+                } else if ( this.dataobject instanceof LzDataElement ) {
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.appendChild( element );
+                } else {
+                    //TODO:fixme
+                    //Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);
+                }
+            }
+            this.ondata.sendEvent(value);		
+          ]]>
+        </method>
+
+
+    </class>
+
+
+    <!---
+        Net parameter.
+        Element to use inside netremotecall.
+        @todo Document netparam class.
+    -->
+    <class name="netparam" extends="node">
+
+        <!--- The value of the netparam. -->
+        <attribute name="value" value="null"/>
+
+    </class>
+
+
+</library>
diff --git a/WebContent/swf10/base/remote/sharedObject.lzx b/WebContent/swf10/base/remote/sharedObject.lzx
new file mode 100644
index 0000000..9c7cd96
--- /dev/null
+++ b/WebContent/swf10/base/remote/sharedObject.lzx
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="sharedObject" extends="node">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.net.SharedObject;
+            </passthrough>
+        </when>
+    </switch>
+
+	<attribute name="so" value="null" />
+	<attribute name="onStatus" value="null" />
+	
+
+	<method name="connect" args="so_Name,nc,persistant">
+
+		//Debug.write("connect SharedObject: ",nc.uri);
+		this.so = this.getRemote(so_Name,nc.uri,persistant);
+		
+		var t = this;
+		this.so.onSync = function (evtObj){
+			if (t.onStatus)t.onStatus.sendEvent(evtObj);
+			//_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+		}
+		
+		this.so.connect(nc);
+		
+	</method>
+	
+    
+    <method name="getRemote" args="so_Name,nc,persistant">
+
+        //Debug.write("connect SharedObject: ",nc.uri);
+        this.so = this.getRemote(so_Name,nc.uri,persistant);
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+    </method>
+    
+    <!--- create Object if not existing  -->
+    <method name="getLocal" args="name">
+
+        this.so = this.getLocal(name);
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+        
+    </method>
+    
+    <!--- 
+        force write to disk
+        @return true(success) false(User has forbidden to store data local)
+      -->
+    <method name="flush">
+        return this.so.flush();
+    </method>
+
+    <method name="getData" args="key">
+        if (this.so.data["key"] == undefined){
+            return null;
+           //_root.Debug.write.write("key undefined",key);
+        } else {
+            return this.so.data["key"];
+        }
+    </method>
+	
+    <method name="setSharedData" args="key,val">
+    	//Debug.write("this...... so: ",this.so);
+        this.so.data["key"] = val;
+    </method>
+
+		
+</class>
+
+</library>
diff --git a/WebContent/swf10/commonVideoViewContentSWF10.lzx b/WebContent/swf10/commonVideoViewContentSWF10.lzx
new file mode 100644
index 0000000..92a42ba
--- /dev/null
+++ b/WebContent/swf10/commonVideoViewContentSWF10.lzx
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="commonVideoViewContentSWF10" extends="view">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.net.LocalConnection;
+                import flash.external.ExternalInterface;
+            </passthrough>
+        </when>
+    </switch>
+
+    <attribute name="offsetLength" type="number" value="40"/>
+    <attribute name="videoWidth" type="number" value="132"/>
+    <attribute name="videoHeight" type="number" value="132"/>
+    <attribute name="SIDEPANEL_WIDTH" type="number" value="270" />
+    
+    <handler name="oninit">
+        <![CDATA[
+
+            var client = {};
+            client.t = this;
+
+            client.toggleVideo = this.toggleVideo;
+            client.createEditRecordStream = this.createEditRecordStream;
+            client.createVideoObject = this.createVideoObject;
+            client.createVideo = this.createVideo;
+            client.getVideoObjectByPublicSID = this.getVideoObjectByPublicSID;
+            client.getNewVideoObject = this.getNewVideoObject;
+            client.getVideoObjectFreePos = this.getVideoObjectFreePos;
+            client.getVideoObjectCount = this.getVideoObjectCount;
+            client.disconnectclient = this.disconnectclient;
+            client.resetAllValues = this.resetAllValues;
+            client.closeStreamClient = this.closeStreamClient;
+            client.setSpeakingByPos = this.setSpeakingByPos;
+            client.setAVSettingsToClient = this.setAVSettingsToClient;
+            client.startStream = this.startStream;
+            client.removeVideoByUser = this.removeVideoByUser;
+            client.muteSound = this.muteSound;
+            client.updateMuteStatusVideoView = this.updateMuteStatusVideoView;
+            client.ismoderatorChanged = this.ismoderatorChanged;
+            // update rights to SWF10 client
+            client.updateModerationFlag = this.updateModerationFlag;
+            client.changeDevice = this.changeDevice;
+            client.setDrawAllowStatus = this.setDrawAllowStatus;
+            client.setExclusiveAudioAllowStatus = this.setExclusiveAudioAllowStatus;
+            client.exitRoom = this.exitRoom;
+            client.immediateExitRoom = this.immediateExitRoom;
+            client.closeWhiteboard = this.closeWhiteboard;
+            client.arrangeWindows = this.arrangeWindows;
+            client.updateFirstLastName = this.updateFirstLastName;
+            client.setSessionId = this.setSessionId;
+
+            var lc:LocalConnection = new LocalConnection();
+            lc.connect(canvas.vid_lc_name);
+            lc.client = client;
+            canvas.setAttribute("lc", lc);
+
+        ]]>
+    </handler>
+    
+	<method name="toggleVideo" args="value">
+		if($debug) Debug.info("toggleVideo ", value);
+		canvas.userobject.canVideo = value;
+	</method>
+    
+	<method name="createEditRecordStream" args="syncUpdate,isInterview,interviewPodId">
+		if($debug) Debug.info("createEditRecordStream,",syncUpdate,isInterview,interviewPodId);
+		if (canvas.inner.editRecordStream != null)
+			canvas.inner.editRecordStream.destroy();
+			new lz.editRecordStreamSWF10(canvas.inner, {
+					name:"editRecordStream",
+					isSyncUpdate:syncUpdate,
+					isInterview:isInterview,
+					interviewPodId:interviewPodId
+				});
+		return;
+	</method>
+
+	<!-- 
+		Method that creates the video views when another user enters a room and his 
+		item in the list of participants is created.
+		The method to "play" the stream is invoked later, when the user
+		really starts to stream and not only when he just enters the room.
+	 -->
+    <method name="createVideoObject" args="publicSID,isBroadcasting,interviewPodId,object">
+        if($debug) Debug.info("createVideoObject, publicSID: ",publicSID, "isBroadcasting: ", isBroadcasting, "object", object);
+        var vidContainer = getVideoObjectByPublicSID(publicSID);
+        if(vidContainer == null) {
+            vidContainer = isBroadcasting ? this.getNewVideoObject(publicSID) : this.getNewVideoObjectByPos(publicSID);
+            vidContainer.publicSID = publicSID;
+        }
+        if ($debug) Debug.write("Is interview ? ",canvas.isInterview);
+        if (canvas.isInterview) {
+        	if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);
+			if (interviewPodId != null) {
+				vidContainer.setAttribute("interviewPodId", interviewPodId);
+				vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);
+				vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);
+			}
+            vidContainer.setAttribute("width",322);
+            vidContainer.setAttribute("height",281);
+        }
+        vidContainer.clientVars = object;
+        vidContainer.setAttribute('visibility','hidden');
+        return vidContainer;
+    </method>
+
+	<!-- 
+		
+		Method that creates the video views when user(self) initially entering a room.
+		Creates the video-view AND starts to stream/play the video
+	 -->
+    <method name="createVideo" args="publicSID,displayName,broadcastId,avsettings,interviewPodId,object">
+        <![CDATA[
+            if ($debug) Debug.info("createVideo, publicSID: ",publicSID,"broadcastId: ",broadcastId,"AVsettings: ",avsettings);
+            if ($debug) Debug.write(" createVideo ALL vars ",object);
+            var vidContainer = getVideoObjectByPublicSID(publicSID);
+            if(vidContainer == null) {
+                vidContainer = this.getNewVideoObjectByPos(publicSID);
+                vidContainer.clientVars = object;
+                vidContainer.setAttribute('chatpartnername',displayName);
+                if (avsettings=="n"){
+                    vidContainer.setVideouserProfilePic(object);
+                    vidContainer.setAttribute("visibility","hidden");
+                } else if (avsettings=="a"){
+                    vidContainer.setVideouserProfilePic(object);
+                    if ($debug) Debug.warn("start play");
+                    vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1);
+                    vidContainer.setAttribute("visible", false);
+                } else if (avsettings=="v" || avsettings=="av") {
+                    //this means avsettings is either: "v" or "av"
+                	vidContainer.setDefaultVideoSize(object.VWidth,object.VHeight);
+                    vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1);
+                    vidContainer.setAttribute("visibility","visible");
+                } else {
+                	//this means user did not select anything yet and streaming has not started
+                	vidContainer.setAttribute("visibility","hidden");
+                }
+                vidContainer.setAttribute("interviewPodId", interviewPodId);
+                vidContainer.updateAVSettingsSymbol(object);
+                if (object.micMuted) {
+            	    vidContainer.setMicMuted(object.micMuted);
+           	 	}
+            }
+            
+            
+            if ($debug) Debug.write("Is interview ? ",canvas.isInterview);
+            if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {
+                if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);
+                vidContainer.setAttribute("interviewPodId", interviewPodId);
+                vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);
+                vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);
+                vidContainer.setAttribute("width",322);
+                vidContainer.setAttribute("height",281);
+            }
+			return;
+        ]]>
+    </method>
+    
+    <method name="getVideoObjectByPublicSID" args="publicSID">
+    	<![CDATA[
+    		//if ($debug) Debug.write("getVideoObjectByPublicSid SEARCH: ",publicSID);
+        	for (var i=0;i<this.subviews.length;i++){
+        	    //if ($debug) Debug.write("this.subviews[i].publicSID ",this.subviews[i].publicSID);
+    			if (this.subviews[i].publicSID==publicSID){
+    				return this.subviews[i];
+    			}
+    		}
+    		if ($debug) Debug.warn(" - getVideoObjectByPublicSID - DID NOT FIND THE USER BY ",publicSID);
+            return null;
+    	]]>
+    </method>
+
+    <method name="getNewVideoObjectByPos" args="publicSID">
+        <![CDATA[
+            var obj = this.getVideoObjectByPublicSID(publicSID);
+            if (obj!=null){
+                return obj;
+            }
+
+            //Get a Free VideoView Slot
+            var freePos = this.getVideoObjectFreePos(this.offsetLength,this.videoWidth,this.videoHeight);
+
+            return new lz.videoObjectPlayBroadcast(this,{
+                    publicSID:publicSID,
+                    width:videoWidth,
+                    height:videoHeight,
+                    x:freePos[0],
+                    y:freePos[1],
+                    isInterview:canvas.isInterview
+                });
+        ]]>
+    </method>
+
+    <method name="getNewVideoObject" args="publicSID">
+		<![CDATA[
+			var obj = this.getVideoObjectByPublicSID(publicSID);
+			if (obj!=null){
+				this.broadCastViewRef = obj;
+			} else {
+				this.broadCastViewRef = getNewVideoObjectByPos(publicSID);
+
+				this.broadCastViewRef._chatvideoinner.r.destroy();
+				if ($debug) Debug.write("getNewVideoObject canvas.userobject ",publicSID,canvas.userobject);
+				this.broadCastViewRef.setAttribute('chatpartnername',canvas.userobject.firstname+' '+canvas.userobject.lastname);
+			}
+			return this.broadCastViewRef;
+		]]>
+	</method>
+
+    <method name="getVideoObjectByInterviewPodId" args="interviewPodId">
+        <![CDATA[
+            for (var i=0;i<this.subviews.length;i++){
+                if (this.subviews[i].interviewPodId==interviewPodId){
+                    return this.subviews[i];
+                }
+            }
+            if ($debug) Debug.warn(" - getVideoObjectByInterviewPodId - DID NOT FIND THE USER BY ",interviewPodId);
+            return null;
+        ]]>
+    </method>
+
+	<method name="getVideoObjectCount" args="a">
+	<![CDATA[
+		var count = 0;
+		for (var i = 0; i < this.subviews.length; ++i) {
+			if (this.subviews[i].visible) {
+				count++;
+			}
+		}
+		//if ($debug) Debug.debug("COUNT :: ", count);
+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'onInterviewPodCount', count);
+	]]>
+	</method>
+
+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+        <![CDATA[
+            var newx = 20;
+            if (canvas.currentRoomObject.hideWhiteboard) {
+                newx += SIDEPANEL_WIDTH;
+            }
+            var newy = 0;
+            var posFound = false;
+            if (offsetLength == undefined) {
+                offsetLength=10;
+            }
+            while (!posFound) {
+                posFound = true;
+                for (var i=0;i<this.subviews.length;i++){
+                    var subview = this.subviews[i];
+                    var left = subview.x;
+                    var right = subview.x + subview.width;
+                    var top = subview.y;
+                    var bottom = subview.y + subview.height;
+
+                    if( !(newx > right
+                        || (newx + videoWidth) < left
+                        || newy > bottom
+                        || (newy + videoHeight) < top ))
+                    {
+                        newx = right + offsetLength;
+                        posFound = false;
+                    }
+                    if ((newx + videoWidth) >= canvas.width) {
+                        newx = 20;
+                        if (canvas.currentRoomObject.hideWhiteboard) {
+                            newx += SIDEPANEL_WIDTH;
+                        }
+                        newy += 10;
+                        posFound = false;
+                    }
+                }
+            }
+
+            if ((newy + videoHeight) >= canvas.height) {
+                newy = 0;
+            }
+
+            var result = [newx, newy];
+            return result;
+        ]]>
+    </method>
+
+    <method name="disconnectclient" args="publicSID">
+        <![CDATA[
+            if ($debug) Debug.write("disconnectclient: ",publicSID);
+
+            var obj = this.getVideoObjectByPublicSID(publicSID);
+
+            //if ($debug) Debug.write("disconnecclient obj: ",obj);
+            if (obj == null) {
+            	if ($debug) Debug.warn("Could Not find this To disconnect",publicSID);
+            }
+
+            if (obj != null){
+                obj.resetValues();
+                obj.destroy();
+            }
+        ]]>
+    </method>
+
+    <method name="muteSound" args="publicSID, bool">
+        <![CDATA[
+            var obj = this.getVideoObjectByPublicSID(publicSID);
+            if (obj != null) {
+                obj.silenceMicrophone(bool);
+            }
+            return;
+        ]]>
+    </method>
+
+    <method name="resetAllValues">
+        for (var eg in this.subviews){
+            this.subviews[eg].resetValues();
+        }
+        return;
+    </method>
+
+    <method name="closeStreamclient" args="publicSID">
+        <![CDATA[
+            if ($debug) Debug.write("closeStreamthis: ",publicSID);
+            var obj = this.getVideoObjectByPublicSID(publicSID);
+            if ($debug) Debug.write("closeStreamthis obj: ",obj);
+            if (obj != null){
+                obj.resetValues();
+            }
+            return obj;
+        ]]>
+    </method>
+
+    <method name="removeVideoByUser" args="publicSID"><![CDATA[
+        var obj = this.closeStreamclient(publicSID);
+        if(obj != null) {
+            obj.destroy();
+        }
+        return;
+    ]]></method>
+
+	<method name="updateMuteStatusVideoView" args="roomClient">
+	<![CDATA[
+		var obj = this.getVideoObjectByPublicSID(roomClient.publicSID);
+		if (obj != null) {
+			obj.muteMicrophone(roomClient);
+		}
+	]]>
+	</method>
+
+    <method name="ismoderatorChanged" args="m">
+        canvas.setAttribute("ismoderator", m);
+        return;
+    </method>
+
+
+	<method name="setSpeakingByPos" args="publicSID,bool">
+	<![CDATA[
+		//if ($debug) Debug.write("setSpeakingByPos ",publicSID,bool);
+		var obj = this.getVideoObjectByPublicSID(publicSID);
+		if (obj == null) {
+			if ($debug) Debug.warn("Could not find user for setSpeakingByPos ",publicSID,bool);
+			return;
+		}
+		obj._loudness.setSpeaking(bool);
+	]]>
+	</method>
+
+	<method name="setAVSettingsToClient" args="rcl">
+	<![CDATA[
+		if ($debug) Debug.write("setAVSettingsToClient: ", rcl.publicSID, rcl);
+		var obj = this.getVideoObjectByPublicSID(rcl.publicSID);
+		if ($debug) Debug.write("setAVSettingsToClient: ", obj, rcl.avsettings);
+		if (obj == null) {
+			obj = this.getNewVideoObjectByPos(rcl.publicSID);
+		}
+		if ("n" == rcl.avsettings){
+			obj.setVideouserProfilePic(rcl);
+		} else if ("a" == rcl.avsettings){
+			obj.setVideouserProfilePic(rcl);
+		} else {
+			obj.deleteVideoConfProfilePic();
+		}
+		obj.thisVars = rcl;
+		obj.updateAVSettingsSymbol(rcl);
+		var v = ("a" == rcl.avsettings && obj.isInterview) || ("a" != rcl.avsettings && rcl.avsettings != "n");
+		obj.setAttribute("visible", v);
+		obj.setAttribute("visibility", v ? "visible" : "hidden");
+		if ($debug) Debug.write("setAVSettingsToClient: ", v, obj.visible);
+	]]>
+	</method>
+
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,width,height">
+        <![CDATA[
+            if ($debug) Debug.write("startStream: ", publicSID,broadcastId,firstname,lastname,interviewPodId,width,height);
+            var obj = this.getVideoObjectByPublicSID(publicSID);
+            //if ($debug) Debug.write("startStream obj: ",obj);
+            if (obj != null ){
+                obj._chatvideoinner._videostream.playStream(broadcastId,-1);
+                obj.setDefaultVideoSize(width,height);
+                obj.setAttribute('chatpartnername',firstname+' '+lastname);
+            }
+            //we have to do this again when the stream starts, the initial video 
+            //component does not know the interviewPodId as the user has not selected 
+            //which interview video pod he is going to use
+            if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {
+                if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);
+                obj.setAttribute("interviewPodId", interviewPodId);
+                obj.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);
+                obj.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);
+                obj.setAttribute("width",322);
+                obj.setAttribute("height",281);
+            }
+            return;
+        ]]>
+    </method>
+
+	<!---
+		Clear all views, probably this is caleld whenever a user leaves the room for example
+	 -->
+    <method name="clearAll">
+        <![CDATA[
+            if ($debug) Debug.write("clearAll", this.subviews);
+            while(this.subviews.length > 0) {
+                this.subviews[0]._chatvideoinner._videostream._stop();
+                this.subviews[0].destroy();
+            }
+            if (canvas.inner.editRecordStream != null) {
+                canvas.inner.editRecordStream.destroy();
+            }
+            return;
+        ]]>
+    </method>
+    
+    <!---
+    	Update the ismoderator flag, there is no need to check here which user
+    	this happened already before sending it to the SWF10 app
+     -->
+    <method name="updateModerationFlag" args="moderator">
+    	<![CDATA[
+    		if ($debug) Debug.write("updateModerationFlag :: ",moderator);
+    		this.setAttribute('ismoderator',moderator);
+    		return;
+    	]]>
+    </method>
+    
+    <!---
+    	Update the canDraw,canShare,canRemote flag, there is no need to check here which user
+    	this happened already before sending it to the SWF10 app
+     -->
+    <method name="setDrawAllowStatus" args="canDraw,canShare,canRemote">
+    	<![CDATA[
+    		if ($debug) Debug.write("setDrawAllowStatus :: ",canDraw,canShare,canRemote);
+    		canvas.setAttribute("isAllowedToDraw",canDraw);
+            canvas.setAttribute("isAllowedToScreenShare",canShare);
+            canvas.setAttribute("isAllowedToRemoteControl",canRemote);
+            return;
+    	]]>
+    </method>
+    
+    <method name="setExclusiveAudioAllowStatus" args="canGiveAudio">
+    	<![CDATA[
+    		if ($debug) Debug.write("setExclusiveAudioAllowStatus :: ",canGiveAudio);
+    		canvas.setAttribute("isAllowedToGiveExclusiveAudio",canGiveAudio);
+            return;
+    	]]>
+    </method>
+
+    <!---
+        Shows the window with device settings
+    -->
+    <method name="changeDevice">
+        <![CDATA[
+            if ($debug) Debug.write("changeDevice");
+            new lz.changeDevice(canvas.inner, {
+					                name:"changeDeviceDialog"
+					            });
+            return;
+        ]]>
+    </method>
+
+    <!---
+        Shows the exit dialog
+    -->
+    <method name="exitRoom">
+        if ($debug) Debug.write("exitRoom");
+        new lz.confirmationSingleSWF10(canvas,{
+                refObj:this,
+                labelid:791,
+                labeliderror:790,
+                refReturnMethod:'immediateExitRoom',
+                showCheckBox:false
+            });
+        return;
+    </method>
+
+	<method name="immediateExitRoom" args="bool,ctx">
+	<![CDATA[
+		if($debug) Debug.write("0");
+		if (canvas.wicketsid != null && bool) {
+			if($debug) Debug.write("1");
+			clearAll();
+			if($debug) Debug.write("2");
+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'exitRoom', bool);
+			if($debug) Debug.write("3");
+			if($debug) Debug.write("Do disconnect 10:: ", canvas.thishib);
+			if (canvas.thishib._nc) {
+				canvas.thishib._nc.close();
+			}
+			if($debug) Debug.write("4");
+			canvas.thishib.disconnect();
+			if($debug) Debug.write("5");
+			canvas.thishib.src = null;
+		}
+	]]>
+	</method>
+
+	<method name="updateFirstLastName" args="publicSID,first,last">
+		var v = getVideoObjectByPublicSID(publicSID);
+		if (v != null) {
+			v.setAttribute('chatpartnername', first + ' ' + last);
+		}
+	</method>
+	
+    <!---
+        Shows the close whiteboard dialog
+    -->
+    <method name="closeWhiteboard">
+        if ($debug) Debug.write("closeWhiteboard");
+        if (canvas.ismoderator || canvas.isAllowedToDraw) {
+            canvas.closeWhiteboardDialog = new lz.confirmationSingleSWF10(canvas,{
+                refObj:this,
+                labeliderror:1313,
+                refReturnMethod:'closeWhiteboardConfirmMethod',
+                showCheckBox:false
+            });
+        } else {
+            new lz.labelerrorPopupSWF10(canvas,{labelid:1366, errorlabelid:1365});
+        }
+        return;
+    </method>
+    
+    <method name="closeWhiteboardConfirmMethod" args="bool,sharedObjectData">
+    	canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'closeWhiteboard', bool);
+    </method>
+        
+	<!-- arranges video pods -->
+	<method name="arrangeWindows">
+	<![CDATA[
+		if ($debug) Debug.write("arrangeWindows");
+		var windowsList = this.subviews;
+
+		if (0 == windowsList.length) {
+            return;
+		}
+
+        windowsList.sort(this.sortFunction);
+
+		var offsetInPx = 40;
+		var initX = 20;
+		var initY = 20;
+		var xPos = initX;
+		var yPos = initY;
+		var rowHeight = windowsList[0].height;
+
+		// arrange windows with new positions
+		for (var winIdx = 0; winIdx < windowsList.length; winIdx++) {
+			var window = windowsList[winIdx];
+			if (canvas.width < xPos + window.width) {
+                yPos += rowHeight + offsetInPx;
+                xPos = initX;
+                rowHeight = window.height;
+			}
+			if (canvas.height < yPos) {
+			    initX += 10;
+			    initY += 10;
+			    xPos = initX;
+			    yPos = initY;
+			}
+			window.setAttribute("x", xPos);
+			window.setAttribute("y", yPos);
+			window.bringToFront();
+
+			xPos += window.width + offsetInPx;
+		}
+	]]>
+	</method>
+
+	<method name="setSessionId" args="session_id">
+		canvas.setAttribute("sessionId", session_id);
+	</method>
+	
+    <!-- @keyword private -->
+    <method name="sortFunction" args="el1, el2">
+        <![CDATA[
+            if (el1.height > el2.height) {
+                return -1;
+            } else if (el1.height < el2.height) {
+                return 1;
+            }
+            return 0;
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/dragHelper.lzx b/WebContent/swf10/dragHelper.lzx
new file mode 100644
index 0000000..bc8bea9
--- /dev/null
+++ b/WebContent/swf10/dragHelper.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dragHelper">
+
+    <attribute name="dragHelper" value="null" />
+
+    <method name="create">
+        if(this.dragHelper != null ) this.dragHelper.destroy();
+        this.dragHelper = new lz.view(canvas, {width:canvas.width,height:canvas.height,x:'0',y:'0', bgcolor:'0xFFFFFF', opacity:0.01,clickable:true});
+        this.dragHelper.sendInFrontOf(canvas.mainComponent);
+    </method>
+
+    <method name="remove">
+        this.dragHelper.destroy();
+        this.dragHelper = null;
+    </method>
+
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/hibAdapter.lzx b/WebContent/swf10/hibAdapter.lzx
new file mode 100644
index 0000000..00e8ff1
--- /dev/null
+++ b/WebContent/swf10/hibAdapter.lzx
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="hibAdapter">
+
+    <attribute name="testingApplication" value="null" />
+    <attribute name="baseVideoStream" value="null" />
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.net.LocalConnection;
+            </passthrough>
+        </when>
+    </switch>
+
+    <handler name="oninit"><![CDATA[
+        var client = {};
+        client.t = this;
+
+        client.hibAdapter_setLabelObjectByHundred = this.hibAdapter_setLabelObjectByHundred;
+        client.setRoomValues = this.setRoomValues;
+        client.getRoomTypes = this.getRoomTypes;
+        client.disconnect = this.disconnect;
+        client.reconnectSuccess = this.reconnectSuccess;
+        //Test application to record 5 seconds
+        client.doInitTestingApplication = this.doInitTestingApplication;
+        client.closeInitTestingApplication = this.closeInitTestingApplication;
+        
+        //Recording Player Whiteboard
+        client.connectRecordingPlayer = this.connectRecordingPlayer;
+        client.playRecordingStream = this.playRecordingStream;
+        client.updateRecordingVideoPosition = this.updateRecordingVideoPosition;
+        client.stopRecordingStream = this.stopRecordingStream;
+        client.pauseRecordingPlayback = this.pauseRecordingPlayback;
+        client.seekRecordingPlayback = this.seekRecordingPlayback;
+        client.stopAndCloseRecordingConnection = this.stopAndCloseRecordingConnection;
+        client.playbackWhiteboardVideo = this.playbackWhiteboardVideo;
+        client.stopWhiteboardVideo = this.stopWhiteboardVideo;
+        
+        //Screen sharing player
+        client.newScreenSharing = this.newScreenSharing;
+        client.newScreenSharings = this.newScreenSharings;
+        client.closeScreenSharing = this.closeScreenSharing;
+        client.closeAllScreenSharings = this.closeAllScreenSharings;
+        client.updateCursorScreenSharing = this.updateCursorScreenSharing;
+        client.hideChatContent = this.hideChatContent;
+        
+        //Text RegExp 
+        client.regExpTest = this.regExpTest;
+
+        var rtmpLC:LocalConnection = new LocalConnection();
+        rtmpLC.connect(canvas.rtmp_lc_name);
+        if ($debug) Debug.write("Connect to LocalConnection ",canvas.rtmp_lc_name);
+        rtmpLC.client=client;
+        canvas.setAttribute("rtmp_lc", rtmpLC);
+    ]]></handler>
+
+    <method name="hibAdapter_setLabelObjectByHundred" args="start,value">
+    	//if($debug) Debug.write("hibAdapter_setLabelObjectByHundred",start);
+        // if($debug) Debug.write("hibAdapter_setLabelObjectByHundred",start,value);
+        setLabelObjectByHundred(start,value);
+    </method>
+
+    <method name="setRoomValues" args="roomtypes_id,rooms_id,value">
+        if($debug) Debug.write("setRoomValues",roomtypes_id,rooms_id,value);
+        canvas.currentRoomObject = value;
+    </method>
+
+    <method name="getRoomTypes" args="value">
+        canvas.roomTypesInitValues = value;
+    </method>
+    
+    <!-- 
+    	Synces some of the variables from the SWF8 to the SWF10.
+    	This also includes values for httphostlocal
+    	in case its a cluster'ed OpenMeetings installation the connection_url
+    	might point to the slave while the httphostlocal points to the master
+     -->
+    <method name="reconnectSuccess" args="connection_url,publicSID,userobject,isInterview,httphostlocal,httpport">
+        if($debug) Debug.write("reconnectSuccess",connection_url,publicSID,userobject);
+        canvas.httphostlocal = httphostlocal;
+        canvas.red5httpport = httpport;
+        canvas.publicSID = publicSID;
+        canvas.userobject = userobject;
+        canvas.isInterview = isInterview;
+        canvas.thishib.setAttribute('src',connection_url);
+        canvas.thishib.connect();
+    </method>
+    
+    <method name="disconnect" args="arg">
+        if($debug) Debug.write("Do disconnect");
+        canvas.thishib.disconnect();
+    </method>
+    
+    <!---
+        Starts the 5 second audio/video testing application and connect to RTMP
+     -->
+    <method name="doInitTestingApplication" args="x,y,connection_url">
+        if($debug) Debug.write("doInitTestingApplication ",x,y);
+        canvas.thishib.setAttribute('src',connection_url);
+        canvas.thishib.connect();
+        this.testingApplication = new lz.testingApplication(canvas,{name:'currentSharing',x:x+1,y:y+24});
+    </method>
+    
+    <!---
+        Stops and destroys the view with the audio/video testing application
+        and send confirmation back via LocalConnection
+     -->
+    <method name="closeInitTestingApplication">
+    	canvas.thishib.disconnect();
+        if($debug) Debug.write("closeInitTestingApplication ");
+        if (this.testingApplication != null) {
+            this.testingApplication.storeSettings();
+            this.testingApplication.destroy();
+            this.testingApplication = null;
+        }
+        if ($debug) Debug.write("Send confirmation of close back to: ",canvas.videoComp_lc_name);
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'closeInitTestingApplicationConfirm');
+    </method>
+    
+    <!---
+        Initializes video playback component
+        and connect to RTMP
+     -->
+    <method name="connectRecordingPlayer" args="connection_url,x,y,width,height">
+    	if($debug) Debug.write("connectRecordingPlayer ", connection_url,x,y,width,height);
+    	canvas.thishib.setAttribute('src',connection_url);
+        canvas.thishib.connect();
+        this.baseVideoStream = new lz.playBackVideoStream(canvas,{
+            x:x,
+            y:y,
+            width:width,
+            height:height
+        });
+    </method> 
+    
+    <!---
+        plays a recorded stream
+     -->
+    <method name="playRecordingStream" args="streamName,delay,x,y,width,height">
+    	if($debug) Debug.write("playRecordingStream ",streamName,x,y,width,height);
+    	if (this.baseVideoStream == null) {
+    		if ($debug) Debug.warn("baseVideoStream is NULL");
+    		return;
+    	}
+    	this.baseVideoStream.setAttribute("x",x);
+    	this.baseVideoStream.setAttribute("y",y);
+    	this.baseVideoStream.setAttribute("width",width);
+    	this.baseVideoStream.setAttribute("height",height);
+    	this.baseVideoStream.setAttribute("visibility","visible");
+    	this.baseVideoStream.playRecordingStream(streamName,delay);
+    </method>
+    
+    <!---
+        Updates the width/height property of the recording playback video 
+     -->    
+    <method name="updateRecordingVideoPosition" args="width,height">
+    	if (this.baseVideoStream == null) {
+    		if ($debug) Debug.warn("baseVideoStream is NULL");
+            return;
+        }
+        this.baseVideoStream.setAttribute("width",width);
+        this.baseVideoStream.setAttribute("height",height);
+    </method>
+    
+    <!---
+        stops and hides the recording playback video
+     -->
+    <method name="stopRecordingStream">
+    	if($debug) Debug.write("stopRecordingStream ");
+        if (this.baseVideoStream == null) {
+        	if ($debug) Debug.warn("baseVideoStream is NULL");
+            return;
+        }
+        if($debug) Debug.write(" stopRecording ");
+        this.baseVideoStream.stopRecording();
+        this.baseVideoStream.setAttribute("visibility","hidden");
+    </method>
+    
+    <!--- 
+        pauses the current video or continue at the same position
+     -->
+    <method name="pauseRecordingPlayback" args="pauseBool">
+    	if($debug) Debug.write("pauseRecordingPlayback ");
+        if (this.baseVideoStream == null) {
+        	if ($debug) Debug.warn("baseVideoStream is NULL");
+            return;
+        }
+        this.baseVideoStream.pause(pauseBool);
+    </method>
+    
+    <method name="seekRecordingPlayback" args="flvTime">
+    	if($debug) Debug.write("seekRecordingPlayback ",flvTime);
+        if (this.baseVideoStream == null) {
+        	if ($debug) Debug.warn("baseVideoStream is NULL");
+            return;
+        }
+        this.baseVideoStream.seekStream(flvTime);
+    </method>
+    
+    <method name="stopAndCloseRecordingConnection">
+    	if($debug) Debug.write("stopAndCloseRecordingConnection ");
+        if (this.baseVideoStream == null) {
+        	if ($debug) Debug.warn("baseVideoStream is NULL");
+            return;
+        }
+        this.baseVideoStream.stopRecording();
+        this.baseVideoStream.destroy();
+        this.baseVideoStream = null;
+        canvas.thishib.disconnect();
+        // send back confirmation to leave the module
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'recordingStoppedAndDisconnected');
+    </method>
+    
+    <!---
+        Start playback of whiteboard video
+     -->
+    <method name="playbackWhiteboardVideo" args="tName,recordingName,seek,tx,ty,twidth,theight">
+    	<![CDATA[
+    	   if($debug) Debug.write("playbackWhiteboardVideo ",tName,recordingName,seek,tx,ty,twidth,theight);
+    	   if (this[tName]) {
+    	   	 if ($debug) Debug.warn("playbackWhiteboardVideo there was already a video with the same name");
+    	   	 this[tName]._stop();
+    	   	 this[tName].destroy();
+    	   }
+    	   
+    	   new lz.playBackWhiteboardVideo(this.whiteboardVideos,{
+                	       name:tName,
+                	       x:tx,
+                	       y:ty,
+                	   	   width:twidth,
+                	   	   height:theight
+                	   });
+    	   
+    	   this.whiteboardVideos[tName].playVideoStream(recordingName,0);
+    	]]>
+    </method>
+    
+    <method name="stopWhiteboardVideo" args="tName">
+    	<![CDATA[
+    	   if($debug) Debug.write("stopWhiteboardVideo ",tName);
+           if (this.whiteboardVideos[tName]) {
+             this.whiteboardVideos[tName].stopVideo();
+             this.whiteboardVideos[tName].destroy();
+           } else {
+           	 if ($debug) Debug.warn("stopWhiteboardVideo could not find video to stop");
+           }
+    	]]>
+    </method>
+    
+    <!---
+       #################################
+       Methods to handle screen sharing video playback and cursor
+     -->
+     
+    <!---
+        Adds a new screen sharing playback video
+     -->
+    <method name="newScreenSharing" args="value, h">
+    	<![CDATA[
+     		canvas.chatHeight = h;
+    	   if (value.streamPublishName != canvas.publicSID) {
+                if (canvas.screenSharingDialogContainer == null) {
+                    canvas.screenSharingDialogContainer = new lz.screenSharingDialogContainer(canvas);
+                }
+                new lz.screenSharingDialog(canvas.screenSharingDialogContainer,{
+                            initObject:value 
+                        }); 
+            } else {
+                if ($debug) Debug.warn("Self Screen Sharing");
+            }
+    	]]>
+    </method> 
+    
+    <!---
+        Add a list of screen sharing playback videos 
+        (initially when entering the room invoked)
+     -->
+    <method name="newScreenSharings" args="value, h">
+     	<![CDATA[
+     		canvas.chatHeight = h;
+     	    for (var eg in value) {
+                this.newScreenSharing(value[eg], h);
+            }
+     	]]>
+    </method>
+   
+    <!---
+        Close a single screen sharing playback video
+     --> 
+	<method name="closeScreenSharing" args="value">
+		<![CDATA[
+			if (canvas.screenSharingDialogContainer != null) {
+				var obj = canvas.screenSharingDialogContainer
+						.searchForSession(value.streamPublishName);
+				if (obj) {
+					obj.doClose();
+				}
+			}
+		]]>
+	</method>
+	    
+	<!---
+	   Closes all screen sharing playback videos, whiteboard videos, user videos 
+	   and closes the rtmp connection
+	 -->
+	<method name="closeAllScreenSharings">
+        <![CDATA[
+            if ($debug) Debug.write("RECEIVE closeAllScreenSharings ");
+            if (canvas.screenSharingDialogContainer != null) {
+                canvas.screenSharingDialogContainer.closeAll();
+                canvas.screenSharingDialogContainer.destroy();
+                canvas.screenSharingDialogContainer = null;
+            }
+            this.whiteboardVideos.clearAll();
+            parent._videoComponent.clearAll();
+            canvas.thishib.disconnect();
+        ]]>
+    </method>
+    
+    <!---
+        change Screen Sharing farme height 
+     -->
+    <method name="hideChatContent" args="hide">
+     	<![CDATA[
+			if (canvas.screenSharingDialogContainer != null) {
+		        if ($debug) Debug.write("hideChatContent::hide " + hide);
+				canvas.screenSharingDialogContainer.hideChatContent(hide);
+			}
+     	]]>
+    </method>
+    
+    <!---
+        Update the position of the cursor from the sharing screen
+     -->
+	<method name="updateCursorScreenSharing" args="value">
+		<![CDATA[
+			if (canvas.screenSharingDialogContainer != null) {
+				var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);
+				obj.updateCursor(value.cursor_x, value.cursor_y);
+			}
+		]]>
+	</method>
+	
+	<!---
+		Make regExpTest 
+	 -->
+	<method name="regExpTest" args="fieldValue,regExStr,regExpCheckId">
+		<![CDATA[
+			var re = new RegExp(regExStr);
+			
+			var testResult = re.test( fieldValue );
+			
+			if ($debug) Debug.write(fieldValue, testResult);
+			
+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'regExpResult', regExpCheckId, testResult);
+			
+		]]>
+	</method>
+	
+    <!--
+        Container to hold all whiteboard videos
+     -->	
+	<view name="whiteboardVideos">
+		<method name="clearAll">
+    		<![CDATA[
+    			for (var eg in this.subviews) {
+    				this.subviews[eg].stopVideo();
+    				this.subviews[eg].destroy();
+    			}
+    		]]>
+		</method>
+	</view>
+     
+
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/lzrecorder/library.lzx b/WebContent/swf10/lzrecorder/library.lzx
new file mode 100644
index 0000000..6f84e4c
--- /dev/null
+++ b/WebContent/swf10/lzrecorder/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="playBackVideoStream.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/lzrecorder/playBackVideoStream.lzx b/WebContent/swf10/lzrecorder/playBackVideoStream.lzx
new file mode 100644
index 0000000..b7fdfd5
--- /dev/null
+++ b/WebContent/swf10/lzrecorder/playBackVideoStream.lzx
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+    The playBackVideoStream is used in the recording playerback to show the video
+ -->
+<class name="playBackVideoStream" extends="baseVideoStream" bgcolor="0x000000" visibility="hidden">
+    
+    <attribute name="timerDelegate" value="null"/>
+    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
+    
+    <handler name="oninit">
+        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
+    </handler>
+    
+    <handler name="onclick">
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'togglePlayRecordingStream');
+    </handler>
+    
+    <method name="playRecordingStream" args="streamName,delay">
+        this.playStream(streamName,delay);
+        this.timerDelegateStarted = true;
+        lz.Timer.addTimer( this.timerDelegate , 1000 );
+    </method>
+    
+    <method name="stopRecording">
+        this._stop();
+        lz.Timer.removeTimer(this.timerDelegate);
+        this.timerDelegateStarted = false;
+    </method>
+    
+    <handler name="onNetStatus" args="info">
+        if ($debug) Debug.write("onNetStatus ",info);
+        if (info.code ==  "NetStream.Play.Stop" ) {
+            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream');
+        }
+    </handler>
+    <handler name="onMetaDataEvent" args="info">
+        if ($debug) Debug.write("onMetaData ",info);
+    </handler>
+    
+    <method name="calcProgressBar" args="tObjRef">
+        if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateRecordingStreamTime',this._ns.time);
+        if (this.timerDelegateStarted) {
+            lz.Timer.addTimer( this.timerDelegate , 1000 );
+        }
+    </method>
+    
+</class>	
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/main.as3.lzx b/WebContent/swf10/main.as3.lzx
new file mode 100644
index 0000000..2ef265d
--- /dev/null
+++ b/WebContent/swf10/main.as3.lzx
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas width="100%" height="100%" title="OpenMeetings">
+	
+	<switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.net.*;
+                import flash.display.*;
+                import flash.events.*;
+            </passthrough>
+        </when>
+    </switch>
+	<switch>
+		<when property="$debug">
+			<method name="doDebugInit">
+				canvas.setAttribute('debug', true);
+			</method>
+			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />
+		</when>
+		<otherwise>
+			<method name="doDebugInit">
+			</method>
+		</otherwise>
+    </switch>
+    
+    <include href="testVideoObject.lzx" />
+
+    <silverstyle name="componentStyle" basecolor="0xFFFFFF" textcolor="0x000000" />
+
+    <attribute name="lc_SID"/>
+
+    <attribute name="vid_lc_name" />
+
+    <attribute name="lc"/>
+
+    <attribute name="rtmp_lc_name" />
+
+    <attribute name="rtmp_lc"/>
+
+    <attribute name="videoComp_lc_name" />
+
+    <attribute name="videoComp_lc_callback_name" />
+
+    <attribute name="videoComp_lc" />
+
+    <include href="base/" />
+
+    <include href="modules/" />
+
+    <include href="video/" />
+    
+    <include href="screensharing/" />
+    
+    <include href="audioVideoTest/" />
+    
+    <include href="lzrecorder/" />
+    
+    <include href="whiteboard/" />
+
+    <include href="commonVideoViewContentSWF10.lzx" />
+
+    <include href="hibAdapter.lzx" />
+
+    <include href="miniIcons.lzx" />
+
+    <include href="dragHelper.lzx" />
+
+    <view name="mainComponent" width="${canvas.width}" height="${canvas.height}">
+        <text id="mainBaseText"> </text>
+    </view>
+
+    <method name="getLCSID">
+        //TODO: fixme
+        return "" + Math.floor(999999*Math.random());
+    </method>
+
+    <handler name="oninit"><![CDATA[
+		doDebugInit();
+    
+        var tInitArgsArry = new Array('secureHash','invitationHash','sid','roomid','directRoomId'
+        	,'language','hash','cuser','tAccept','moodleRoom','becomemoderator','wwwroot','user_id'
+        	,'picture','scopeRoomId', 'wicketsid', 'wicketroomid', 'protocol', 'host', 'port', 'context');
+    
+        this.setAttribute('lc_SID', this.getLCSID());
+        this.setAttribute('vid_lc_name', lc_SID + '__videoLC');
+        this.setAttribute('rtmp_lc_name', lc_SID + '__rtmpLC');
+        this.setAttribute('videoComp_lc_name', lc_SID + '__streamLC');
+        this.setAttribute('videoComp_lc_callback_name', lc_SID + '__streamLC_cback');
+
+        var videoComp_lc_cback:LocalConnection = new LocalConnection();
+        videoComp_lc_cback.connect(this.videoComp_lc_callback_name);
+        this.setAttribute('videoComp_lc',videoComp_lc_cback);
+        
+        var tqueryString = "";
+        for (var i = 0; i < tInitArgsArry.length; ++i) {
+            // if ($debug) Debug.write(tInitArgsArry[i],lz.Browser.getInitArg(tInitArgsArry[i]));
+            var tValue = lz.Browser.getInitArg(tInitArgsArry[i]);
+            if (tValue != undefined) {
+                tqueryString += "&" + tInitArgsArry[i] + "=" + tValue;
+                if (tInitArgsArry[i].startsWith('wicket')) {
+                	canvas.setAttribute(tInitArgsArry[i], tValue);
+                }
+            }
+        }
+        
+        var tSWFURL = canvas.getLocalBaseUrl() + "main" + ($debug ? "debug" : "") + ".swf8.swf?lzproxied=solo&lc_SID="+lc_SID+tqueryString;
+        
+        if ($debug) Debug.write("tSWFURL :: ",tSWFURL);
+        
+        var request:URLRequest = new URLRequest(tSWFURL);
+        var loader:Loader = new Loader();
+        loader.load(request);
+        this.mainComponent.sprite.addChild(loader);
+
+        new lz.commonVideoViewContentSWF10(this, {name:'_videoComponent'});
+        new lz.hibAdapter(this);
+
+        if ($debug) Debug.write("main::init DONE");
+    ]]></handler>
+
+    <view name="inner"></view>
+    
+</canvas>
diff --git a/WebContent/swf10/miniIcons.lzx b/WebContent/swf10/miniIcons.lzx
new file mode 100644
index 0000000..301d381
--- /dev/null
+++ b/WebContent/swf10/miniIcons.lzx
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="miniIcons" extends="view" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
+<class name="miniIconsImage" extends="image" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/modules/conference/library.lzx b/WebContent/swf10/modules/conference/library.lzx
new file mode 100644
index 0000000..9d1d1d1
--- /dev/null
+++ b/WebContent/swf10/modules/conference/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="popups/" />
+
+</library>
diff --git a/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx b/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx
new file mode 100644
index 0000000..25b3c86
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="confirmationSingleSWF10" extends="labelExplorerBox" labelid="832"
+    docking="true" resizeable="false" closable="true" height="140" width="300">
+
+    <attribute name="refObj" value="null" />
+
+    <attribute name="refReturnMethod" value="null" />
+
+    <attribute name="showCheckBox" value="true" type="boolean" />
+
+    <attribute name="labeliderror" value="0" type="number" />
+
+    <attribute name="result" type="bool"/>
+    
+    <attribute name="iconResource" value="warning_popup_icon_rsc" type="string" />
+
+	<image x="4" src="$once{ canvas.getThemeImage(parent.iconResource) }" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24"
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+
+    <handler name="oninit">
+        <![CDATA[
+
+            //Set Position of Confirmation Box as Close as possible to the Mouse
+            var x = parent.getMouse("x");
+            var y = parent.getMouse("y");
+            var newx = x - (this.width/2);
+            var newy = y - (this.height/2);
+
+            if ($debug) Debug.write("1",x,y,newx,newy);
+
+            if (newx < 0) {
+                newx = 20;
+            }
+            if (newy < 0) {
+                newy = 20;
+            }
+
+            //if ($debug) Debug.write("1.1",(this.width + newx + 20),parent.width,this.width);
+
+            var relativeWidth = parent.width;
+            if (relativeWidth > canvas.width) {
+            	relativeWidth = canvas.width;
+            }
+
+            if (this.width + newx + 20 > relativeWidth) {
+            	newx = relativeWidth-this.width-20;
+            }
+
+            if (this.height + newy + 20 > parent.height) {
+            	newy = parent.height-this.height-20;
+            }
+
+            if ($debug) Debug.write("2",newx,newy);
+
+            this.setAttribute("x",newx);
+            this.setAttribute("y",newy);
+
+        ]]>
+    </handler>
+
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }"
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+            this.parent.result = false;
+            if (null != this.parent.refObj) {
+                if (parent.refReturnMethod == null) {
+                    this.parent.refObj.sendConfirmation(false,t);
+                } else {
+                    this.parent.refObj[parent.refReturnMethod](false,t);
+                }
+            }
+            if ($debug) Debug.write("end");
+    	</handler>
+    </simpleLabelButton>
+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+            this.parent.result = true;
+            if (null != this.parent.refObj) {
+                if (parent.refReturnMethod == null) {
+                    this.parent.refObj.sendConfirmation(true,t);
+                } else {
+                    this.parent.refObj[parent.refReturnMethod](true,t);
+                }
+            }
+    	</handler>
+    </simpleLabelButton>
+</class>
+
+<class name="rememberMessageSWF10" extends="labelExplorerBox" labelid="832"
+	   x="$once{ canvas.width/2 - this.width/2 }" y="100"
+	   docking="true" resizeable="false" closable="true" height="140" width="300">
+
+    <attribute name="refObj" value="null" />
+
+    <attribute name="showCheckBox" value="true" type="boolean" />
+
+    <attribute name="labeliderror" value="0" type="number" />
+
+    <view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24"
+               width="$once{ parent.width - 40 }"
+        multiline="true" resize="false" x="30" />
+
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }"
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+        	var t = parent.holddatainSO.getValue();
+            this.parent.close();
+            if (null != this.parent.refObj) {
+                this.parent.refObj.sendConfirmation(t);
+            }
+        </handler>
+    </simpleLabelButton>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx b/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx
new file mode 100644
index 0000000..18fb2f9
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="errorPopupSWF10" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="false" closable="true" y="100"
+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">
+
+	<attribute name="error" value="" type="string" />
+	
+	<attribute name="makeModal" value="false" type="boolean" />
+	
+	<handler name="oninit">
+	   if (this.makeModal) {
+	       lz.ModeManager.makeModal(this);
+	   }
+	</handler>
+	
+	<handler name="onclose">
+       if (this.makeModal) {
+           lz.ModeManager.releaseAll();
+       }
+    </handler>
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">
+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+	</view>
+    
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 
+           y="$once{ parent.height-24 }" 
+           onclick="this.parent.close();" />
+
+</class>
+
+<class name="labelerrorPopupSWF10" extends="errorPopupSWF10">
+
+    <attribute name="errorlabelid" type="number" setter="setErrorLabelId(errorlabelid)" />
+    <method name="setErrorLabelId" args="errorlabelid" >
+        this.errorlabelid = errorlabelid;
+        this.setAttribute("error",canvas.getLabelName(this.errorlabelid));
+        if ($debug) Debug.write("labelerrorPopupSWF10: ",canvas.getLabelName(this.errorlabelid));
+    </method>
+    
+
+</class>
+
+<class name="singletonErrorPopupSWF10" extends="errorPopupSWF10">
+	<handler name="oninit">
+		lz.singletonErrorPopupHolderSWF10.dialogPresent = 1;
+		lz.singletonErrorPopupHolderSWF10.dialogObject = this;
+	</handler>
+	
+	<handler name="ondestroy">
+		lz.singletonErrorPopupHolderSWF10.dialogPresent = 0;
+		lz.singletonErrorPopupHolderSWF10.dialogObject = null;
+	</handler>
+</class>
+
+<class name="singletonErrorPopupHolderSWF10">
+	<attribute name="error" type="string" setter="setError(error)"/>
+	<attribute name="dialogPresent" allocation="class" value="0" />
+	<attribute name="dialogObject" allocation="class" />
+	
+	<method name="setError" args="error">
+	
+		if ( lz.singletonErrorPopupHolderSWF10.dialogPresent == 0 )
+		{
+			lz.singletonErrorPopupHolderSWF10.dialogPresent = 1;
+			lz.singletonErrorPopupHolderSWF10.dialogObject = new lz.singletonErrorPopupSWF10(canvas,{error:error});
+		}
+		else
+		{
+			lz.singletonErrorPopupHolderSWF10.dialogObject.error = error;
+		}
+	</method>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/modules/conference/popups/library.lzx b/WebContent/swf10/modules/conference/popups/library.lzx
new file mode 100644
index 0000000..453df78
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- 
+	FamFam Icon Set
+	Creative Commons 3.0
+	 -->
+	<resource name="warning_icon_rsc" src="resources/error.png" />
+
+    <include href="confirmationSingleSWF10.lzx" />
+    <include href="errorPopupSWF10.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/modules/conference/popups/resources/error.png b/WebContent/swf10/modules/conference/popups/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/resources/error.png
Binary files differ
diff --git a/WebContent/swf10/modules/library.lzx b/WebContent/swf10/modules/library.lzx
new file mode 100644
index 0000000..1f553d0
--- /dev/null
+++ b/WebContent/swf10/modules/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="conference/" />
+
+</library>
diff --git a/WebContent/swf10/networkTesting/networktesting.lzx b/WebContent/swf10/networkTesting/networktesting.lzx
new file mode 100644
index 0000000..7001f3e
--- /dev/null
+++ b/WebContent/swf10/networkTesting/networktesting.lzx
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas width="100%" height="100%" title="NetworkTesting">
+
+	<switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.external.ExternalInterface;
+            </passthrough>
+        </when>
+    </switch>
+	<switch>
+		<when property="$debug">
+			<method name="doDebugInit">
+				canvas.setAttribute('debug', true);
+			</method>
+			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />
+		</when>
+		<otherwise>
+			<method name="doDebugInit">
+			</method>
+		</otherwise>
+    </switch>
+    
+    <include href="testsView.lzx" />
+    <handler name="oninit"><![CDATA[
+    	flash.external.ExternalInterface.call("loadingComplete");
+		doDebugInit();
+	]]></handler>
+	
+    <!--
+        These attributes are rewritten by values from "public/config.xml"
+    -->
+    <attribute name="rtmpProtocol" type="string" value="rtmp" />
+    <attribute name="rtmpHost" type="string" value="" />
+    <attribute name="rtmpPort" type="number" value="1935" />
+    
+    <attribute name="httpProtocol" type="string" value="http" />
+    <attribute name="httpHost" type="string" value="" />
+    <attribute name="httpPort" type="number" value="5080" />
+    <attribute name="uriContext" type="string" value="/openmeetings" />
+    <attribute name="rtmpUriPath" type="string" value="/openmeetings/hibernate" />
+
+	<method name="getBrowserHost">
+		var host:String = ExternalInterface.call("window.location.host.toString()");
+		// in case of IE or some other security issues we will fail ...
+		if (!host) {
+			var url:String = canvas.proxyurl;
+			if (url) {
+				if ($debug) Debug.write("url ", url);
+				var paramsIdx = url.indexOf("?");
+				if (paramsIdx != -1) {
+					url = url.substr(0, paramsIdx);
+				}
+				if ($debug) Debug.write("url ", url);
+				url = url.substr(url.indexOf("//") + 2);
+				var portIdx = url.indexOf(":");
+				host = url.substr(0, portIdx != -1 ? portIdx : url.indexOf("/"));
+				if ($debug) Debug.write("host ", host);
+			}
+		}
+		return host;
+	</method>
+	
+	<method name="getSettings">
+		var settingsPtr = canvas.settings.getPointer();
+		
+		var useSSL:Boolean = ("yes" == settingsPtr.xpathQuery("config/useSSL/text()"));
+		canvas.setAttribute("rtmpProtocol", useSSL ? "rtmps" : "rtmp");
+		canvas.setAttribute("proxyType", settingsPtr.xpathQuery("config/proxyType/text()"));
+		canvas.setAttribute("rtmpHost", settingsPtr.xpathQuery("config/rtmphostlocal/text()"));
+		if (!canvas.rtmpHost) {
+			canvas.rtmpHost = getBrowserHost();
+		}
+		canvas.setAttribute("rtmpPort", settingsPtr.xpathQuery("config/" + (useSSL ? "rtmpsslport" : "rtmpport") + "/text()"));
+		
+		canvas.setAttribute("httpProtocol", settingsPtr.xpathQuery("config/protocol/text()"));
+		canvas.setAttribute("httpHost", settingsPtr.xpathQuery("config/httphostlocal/text()"));
+		if (!canvas.httpHost) {
+			canvas.httpHost = rtmpHost;
+		}
+		canvas.setAttribute("httpPort", settingsPtr.xpathQuery("config/red5httpport/text()"));
+
+		canvas.setAttribute("uriContext", settingsPtr.xpathQuery("config/httpRootKey/text()"));
+		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");
+	</method>
+
+    <method name="showTests">
+        var tests = new lz.TestsView(canvas, {name:"testsView"});
+        tests.testAll();
+    </method>
+
+    <dataset type="http" name="settings" request="false" proxied="false">
+        <handler name="oninit">
+            this.setAttribute("src", "config.xml");
+            this.doRequest();
+        </handler>
+        <handler name="ondata">
+            if ($debug) Debug.write("Settings are retrieved");
+            canvas.getSettings();
+            canvas.showTests();
+        </handler>
+        <handler name="onerror" args="e">
+            if ($debug) Debug.write("Settings error [" + this.src + "]", e);
+        </handler>
+        <handler name="ontimeout" args="e">
+            if ($debug) Debug.write("Settings timeout error", e);
+        </handler>
+    </dataset>
+
+    <attribute name="busy" type="boolean" value="false"/>
+    <attribute name="log" type="string" value="" />
+
+    <attribute name="testsView" value="null"/>
+
+</canvas>
diff --git a/WebContent/swf10/networkTesting/resources/edit-copy.png b/WebContent/swf10/networkTesting/resources/edit-copy.png
new file mode 100644
index 0000000..8dd48c4
--- /dev/null
+++ b/WebContent/swf10/networkTesting/resources/edit-copy.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx b/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx
new file mode 100644
index 0000000..7660b0f
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="BaseURLLoadTest" extends="NetworkTest">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.events.*;
+                import flash.net.*;
+                import flash.utils.*;
+            </passthrough>
+        </when>
+    </switch>
+
+    <attribute name="testsCount" type="number" value="0" />
+    <attribute name="testTypeParameter" type="string" value="null" />
+    <attribute name="verbose" type="boolean" value="true" />
+
+    <attribute name="startTime" type="number" value="0" />
+    <attribute name="wholeTime" type="number" value="0" />
+    <attribute name="maxTime" type="number" value="0" />
+    <attribute name="minTime" type="number" value="999999" />
+    <attribute name="finishedTestsCount" type="number" value="0" />
+    <attribute name="successfulTestsCount" type="number" value="0" />
+
+    <attribute name="hostUrl" type="string" value="" />
+    <attribute name="loaderInited" type="boolean" value="false" />
+    <attribute name="request" value="null" />
+    <attribute name="loader" value="null" />
+
+    <method name="initLoader">
+        hostUrl = getBaseUrl() + "networktest.upload?testType=" + testTypeParameter;
+        request = new URLRequest(hostUrl);
+
+        loader = new URLLoader();
+        loader.addEventListener(Event.COMPLETE, this.onComplete);
+        loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);
+        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);
+
+        loaderInited = true;
+    </method>
+
+    <method name="start">
+        if (!loaderInited) {
+            this.initLoader();
+        }
+        finishedTestsCount = 0;
+        successfulTestsCount = 0;
+        wholeTime = 0;
+        maxTime = 0;
+        minTime = 999999;
+
+        this.log("start test... " + hostUrl);
+        startTime = getTimer();
+        loader.load(request);
+    </method>
+
+    <method name="forcedStop">
+        loader.close();
+        this.log("stopped");
+    </method>
+
+    <method name="onComplete" args="e">
+        <![CDATA[
+        var endTime = getTimer();
+        var pingTime = endTime - startTime;
+        wholeTime += pingTime;
+        if (pingTime > maxTime) {
+            maxTime = pingTime;
+        }
+        if (pingTime < minTime) {
+            minTime = pingTime;
+        }
+
+        if (verbose) {
+            this.log("load time = " + pingTime + " ms");
+        }
+
+        finishedTestsCount++;
+        successfulTestsCount++;
+        if (finishedTestsCount < testsCount && running) {
+            startTime = getTimer();
+            loader.load(request);
+        } else {
+            this.report();
+        }
+        ]]>
+    </method>
+
+    <method name="onError" args="e">
+        <![CDATA[
+        if (verbose) {
+            this.log("Error - " + e);
+        }
+
+        finishedTestsCount++;
+        if (finishedTestsCount < testsCount && running) {
+            startTime = getTimer();
+            loader.load(request);
+        } else {
+            this.report();
+        }
+        ]]>
+    </method>
+
+    <method name="report">
+        var report = "report:";
+        if (successfulTestsCount > 0) {
+            report += "\n" + this.generateReport();
+        } else {
+            report += " connection error";
+        }
+        this.log(report);
+
+        if (successfulTestsCount > 0) {
+            this.setPassed();
+        } else {
+            this.setFailed();
+        }
+    </method>
+
+    <method name="generateReport" />
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx b/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx
new file mode 100644
index 0000000..a5ea115
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="DownloadSpeedTest" extends="BaseURLLoadTest">
+
+    <handler name="oninit">
+        this.setAttribute("testsCount", 1);
+        this.setAttribute("testName", "Download speed");
+        this.setAttribute("testTypeParameter", "download");
+        this.setAttribute("verbose", false);
+        this.setAttribute("resultText", true);
+    </handler>
+
+    <method name="generateReport">
+        var mBytes = loader.bytesTotal/(1024*1024);
+        var timeSec = wholeTime/1000;
+        var speed = mBytes/timeSec;
+
+        var report = "Bytes downloaded: " + mBytes + " Mb\n";
+        report += "Download time: " + timeSec + " s\n";
+        report += "Download speed: " + speed + " Mb/s\n";
+
+        resultLabel.setAttribute("text", "");
+        resultLabel.addFormat("%.2f\n%s", speed, "Mb/s");
+
+        return report;
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/JitterTest.lzx b/WebContent/swf10/networkTesting/tests/JitterTest.lzx
new file mode 100644
index 0000000..dd80bb0
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/JitterTest.lzx
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="JitterTest" extends="BaseURLLoadTest">
+
+    <handler name="oninit">
+        this.setAttribute("testsCount", 100);
+        this.setAttribute("testName", "Jitter");
+        this.setAttribute("testTypeParameter", "jitter");
+        this.setAttribute("verbose", false);
+        this.setAttribute("resultText", true);
+    </handler>
+
+    <method name="generateReport">
+        <![CDATA[
+        var averageTime = wholeTime / successfulTestsCount;
+        var jitterMax = maxTime - averageTime;
+        var jitterMin = minTime - averageTime;
+        var report = "Average time: " + averageTime + " ms\n";
+        report += "Min time: " + minTime + " ms\n";
+        report += "Max time: " + maxTime + " ms\n";
+        report += "Jitter: " + jitterMax + " ms and " + jitterMin + " ms \n";
+
+        var max = -jitterMin;
+        if (jitterMax > max) {
+            max = jitterMax;
+        }
+
+        resultLabel.setAttribute("text", "");
+        resultLabel.addFormat("%.0d\n%s", max, "ms");
+
+        return report;
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/NetworkTest.lzx b/WebContent/swf10/networkTesting/tests/NetworkTest.lzx
new file mode 100644
index 0000000..9fe5e8f
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/NetworkTest.lzx
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="NetworkTest" extends="view">
+
+    <attribute name="testName" type="string" value="null" />
+    <attribute name="protocol" type="string" value="null" />
+    <attribute name="host" type="string" value="null" />
+    <attribute name="port" type="number" value="null" />
+    <attribute name="running" type="boolean" value="false" />
+    <attribute name="allTests" type="boolean" value="false" />
+    <attribute name="resultText" type="boolean" value="false" />
+
+    <method name="start" />
+    <method name="forcedStop" />
+
+    <method name="startAllTestsMode">
+        allTests = true;
+        this.setRunning();
+    </method>
+
+    <view name="picture">
+        <view name="rsc" resource="notrun" width="113" height="113" />
+    </view>
+    <text name="nameLabel"
+          text="${parent.testName}"
+          x="${(parent.picture.rsc.width - this.width)/2}"
+          y="$once{parent.picture.rsc.height}"
+    />
+    <text name="resultLabel"
+          visible="false"
+          fgcolor="white"
+          align="center"
+          fontsize="16"
+    />
+
+    <handler name="onclick">
+        if (running) {
+            this.setStopped();
+        } else {
+            allTests = false;
+            this.setRunning();
+        }
+    </handler>
+
+    <method name="handleAllTestsMode">
+        if (allTests) {
+            canvas.testsView.testAll();
+        }
+    </method>
+    
+    <method name="setPassed">
+        if (running) {
+            running=false;
+            if (resultText) {
+                picture.rsc.setAttribute("resource", "passed_result");
+                var x = (picture.rsc.width - resultLabel.width)/2;
+                var y = (picture.rsc.height - resultLabel.height)/2;
+                resultLabel.setAttribute("x", x);
+                resultLabel.setAttribute("y", y);
+                resultLabel.setAttribute("visible", true);
+            } else {
+                picture.rsc.setAttribute("resource", "passed");
+            }
+            canvas.setAttribute("busy", false);
+            this.handleAllTestsMode();
+        }
+    </method>
+
+    <method name="setFailed">
+        if (running) {
+            running=false;
+            picture.rsc.setAttribute("resource", "failed");
+            canvas.setAttribute("busy", false);
+            this.handleAllTestsMode();
+        }
+    </method>
+
+    <method name="setRunning">
+        if (canvas.busy) {
+            return;
+        }
+        canvas.setAttribute("busy", true);
+        this.start();
+        running=true;
+        resultLabel.setAttribute("visible", false);
+        picture.rsc.setAttribute("resource", "running");
+        picture.rsc.play();
+    </method>
+
+    <method name="setStopped">
+        this.forcedStop();
+        running=false;
+        picture.rsc.setAttribute("resource", "notrun");
+        canvas.setAttribute("busy", false);
+        this.handleAllTestsMode();
+    </method>
+
+    <method name="log" args="message">
+        var str = testName + ": " + message + "\n";
+        canvas.log += str;
+        if ($debug) Debug.write(str);
+    </method>
+
+    <method name="getBaseUrl">
+    	var hostUrl = protocol + "://" + host + ":" + port + canvas.uriContext;
+    	return hostUrl + (hostUrl.slice(-1) == '/' ? '' : '/');
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/PingTest.lzx b/WebContent/swf10/networkTesting/tests/PingTest.lzx
new file mode 100644
index 0000000..b086d3b
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/PingTest.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="PingTest" extends="BaseURLLoadTest">
+
+    <handler name="oninit">
+        this.setAttribute("testsCount", 10);
+        this.setAttribute("testName", "Ping");
+        this.setAttribute("testTypeParameter", "ping");
+    </handler>
+
+    <method name="generateReport">
+        var averageTime = wholeTime / successfulTestsCount;
+        var packetsLost = testsCount - successfulTestsCount;
+        var report = "Average ping time: " + averageTime + " ms\n";
+        report += "Packets received: " + successfulTestsCount + "\n";
+        report += "Packets lost: " + packetsLost + "\n";
+
+        return report;
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx b/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx
new file mode 100644
index 0000000..cacf362
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="PortAvailabilityTest" extends="NetworkTest">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.events.*;
+                import flash.net.*;
+                import flash.system.*;
+            </passthrough>
+        </when>
+    </switch>
+
+    <rtmpConnection name="rtmp" autoconnect="false" debug="true" />
+
+    <handler name="oninit">
+        this.setAttribute("testName", "Port");
+    </handler>
+
+    <method name="start">
+        var hostUrl = protocol + "://" + host + ":" + port + canvas.rtmpUriPath;
+        rtmp.setAttribute("src", hostUrl);
+        this.log(": start test... " + hostUrl);
+
+        rtmp.connect();
+    </method>
+
+    <method name="forcedStop">
+        this.log("stopped");
+		disconnect();
+    </method>
+
+	<method name="disconnect">
+       rtmp._nc.close();
+       rtmp.setAttribute('status', 'disconnected');
+       rtmp.setAttribute('stage', 0);
+	</method>
+	
+    <handler name="onconnect" reference="rtmp">
+		if (running) {
+			this.log("port is available\n");
+			this.setPassed();
+			disconnect();
+        }
+    </handler>
+
+    <handler name="onerror" args="e" reference="rtmp">
+        if (running) {
+            this.log("connection error - " + e + "\n");
+            this.setFailed();
+        }
+    </handler>
+
+    <handler name="onstatus" args="e" reference="rtmp">
+        if (running) {
+        	switch(e) {
+        		case "timed out":
+        		case "connection failed":
+        			this.setFailed();
+        			break;
+        	}
+            if($debug) Debug.write(testName + ": RTMP connect status - ", e);
+        }
+    </handler>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx b/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx
new file mode 100644
index 0000000..01e1402
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="UploadSpeedTest" extends="NetworkTest">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.events.*;
+                import flash.net.*;
+                import flash.utils.*;
+            </passthrough>
+        </when>
+    </switch>
+
+    <attribute name="startTime" type="number" value="0" />
+
+    <attribute name="hostUrl" type="string" value="" />
+    <attribute name="loaderInited" type="boolean" value="false" />
+    <attribute name="request" value="null" />
+    <attribute name="loader" value="null" />
+
+    <handler name="oninit">
+        this.setAttribute("testName", "Upload speed");
+        this.setAttribute("resultText", true);
+    </handler>
+
+    <method name="initLoader">
+        hostUrl = getBaseUrl() + "networktest.upload";
+        request = new URLRequest(hostUrl);
+        request.method = URLRequestMethod.POST;
+        request.data = getDataString();
+
+        loader = new URLLoader();
+        loader.addEventListener(Event.COMPLETE, this.onComplete);
+        loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);
+        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);
+
+        loaderInited = true;
+    </method>
+
+    <method name="start">
+        if (!loaderInited) {
+            this.initLoader();
+        }
+
+        this.log("start test... " + hostUrl);
+        startTime = getTimer();
+        loader.load(request);
+    </method>
+
+    <method name="forcedStop">
+        loader.close();
+        this.log("stopped");
+    </method>
+
+    <method name="onComplete" args="e">
+        if (running) {
+            var endTime = getTimer();
+            var loadTime = endTime - startTime;
+            var loadTimeSec = loadTime/1000;
+            var mBytes = request.data.length/(1024*1024);
+            var speed = mBytes / loadTimeSec;
+
+            var report = "report:\n";
+            report += "Bytes uploaded: " + mBytes + " Mb\n";
+            report += "Upload time: " + loadTimeSec + " s\n";
+            report += "Upload speed: " + speed + " Mb/s\n";
+
+            resultLabel.setAttribute("text", "");
+            resultLabel.addFormat("%.2f\n%s", speed, "Mb/s");
+            this.log(report);
+            this.setPassed();
+        }
+    </method>
+
+    <method name="onError" args="e">
+        if (running) {
+            this.log("error - " + e);
+            this.setFailed();
+        }
+    </method>
+
+    <!-- returns a 1 Mb string-->
+    <method name="getDataString">
+        <![CDATA[
+        var result = "";
+        var str64 = "0000000000000000000000000000000000000000000000000000000000000000";
+        for (var i=0; i<16384; i++) {
+            result += str64;
+        }
+        return result;
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/library.lzx b/WebContent/swf10/networkTesting/tests/library.lzx
new file mode 100644
index 0000000..9b8575d
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <resource name="failed" src="resources/failed.png" />
+    <resource name="notrun" src="resources/notrun.png" />
+    <resource name="passed" src="resources/passed.png" />
+    <resource name="passed_result" src="resources/passed_result.png" />
+    <resource name="running" src="resources/running.swf" />
+
+    <include href="BaseURLLoadTest.lzx" />
+    <include href="DownloadSpeedTest.lzx" />
+    <include href="JitterTest.lzx" />
+    <include href="NetworkTest.lzx" />
+    <include href="PingTest.lzx" />
+    <include href="PortAvailabilityTest.lzx" />
+    <include href="UploadSpeedTest.lzx" />
+
+</library>
diff --git a/WebContent/swf10/networkTesting/tests/resources/failed.png b/WebContent/swf10/networkTesting/tests/resources/failed.png
new file mode 100644
index 0000000..8654b24
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/failed.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/notrun.png b/WebContent/swf10/networkTesting/tests/resources/notrun.png
new file mode 100644
index 0000000..cb869eb
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/notrun.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/passed.png b/WebContent/swf10/networkTesting/tests/resources/passed.png
new file mode 100644
index 0000000..5929d15
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/passed.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/passed_result.png b/WebContent/swf10/networkTesting/tests/resources/passed_result.png
new file mode 100644
index 0000000..d4d6f84
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/passed_result.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/running.swf b/WebContent/swf10/networkTesting/tests/resources/running.swf
new file mode 100644
index 0000000..138d3e1
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/running.swf
Binary files differ
diff --git a/WebContent/swf10/networkTesting/testsView.lzx b/WebContent/swf10/networkTesting/testsView.lzx
new file mode 100644
index 0000000..8dbdb59
--- /dev/null
+++ b/WebContent/swf10/networkTesting/testsView.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<include href="../base/remote/rtmpConnection.lzx" />
+<include href="tests/" />
+<resource name="log" src="resources/edit-copy.png" />
+
+<class name="TestsView" extends="view">
+
+    <attribute name="offset" type="number" value="20" />
+    <attribute name="smallOffset" type="number" value="5" />
+
+    <text name="label"
+        text="Click a play button to run a test"
+        x="${parent.offset}"
+        y="${parent.offset}"
+    />
+    <view name="logButton"
+        x="${parent.width - this.rsc.width - parent.offset}"
+        y="${parent.label.y + (parent.label.height - this.rsc.height)/2}"
+    >
+        <image name="rsc" resource="log" height="16" width="16"/>
+        <handler name="onclick">
+            lz.Browser.setClipboard(canvas.log);
+        </handler>
+    </view>
+
+    <text name="logLabel"
+        text="Copy the log to the clipboard:"
+        x="${parent.logButton.x - this.width - parent.smallOffset}"
+        y="${parent.label.y}"
+    />
+
+    <PingTest
+        name="pingTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+        x="${parent.offset}"
+        y="${parent.label.y + parent.label.height + parent.offset/2}"
+    />
+    <PortAvailabilityTest
+        name="portTest" protocol="${canvas.rtmpProtocol}" host="${canvas.rtmpHost}" port="${canvas.rtmpPort}"
+        x="${parent.pingTest.x + parent.pingTest.width + parent.offset}"
+        y="${parent.pingTest.y}"
+     />
+    <JitterTest
+        name="jitterTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+        x="${parent.portTest.x + parent.portTest.width + parent.offset}"
+        y="${parent.pingTest.y}"
+    />
+    <DownloadSpeedTest
+        name="downloadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+        x="${parent.jitterTest.x + parent.jitterTest.width + parent.offset}"
+        y="${parent.pingTest.y}"
+    />
+
+    <UploadSpeedTest
+        name="uploadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+        x="${parent.downloadTest.x + parent.downloadTest.width + parent.offset}"
+        y="${parent.pingTest.y}"
+    />
+
+    <attribute name="currentTestNumber" type="number" value="0" />
+    <method name="testAll">
+        var nextTest;
+        if (0 == currentTestNumber) {
+            nextTest = pingTest;
+        } else if (1 == currentTestNumber) {
+            nextTest = portTest;
+        } else if (2 == currentTestNumber) {
+            nextTest = jitterTest;
+        } else if (3 == currentTestNumber) {
+            nextTest = downloadTest;
+        } else if (4 == currentTestNumber) {
+            nextTest = uploadTest;
+        } else if (5 == currentTestNumber) {
+            nextTest = null;
+        }
+
+        if (null != nextTest) {
+            currentTestNumber++;
+            nextTest.startAllTestsMode();
+        }
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/screensharing/library.lzx b/WebContent/swf10/screensharing/library.lzx
new file mode 100644
index 0000000..0182183
--- /dev/null
+++ b/WebContent/swf10/screensharing/library.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- FamFam Icon Set -->
+	<resource name="menupointer_rsc" src="resources/cursor.png" />
+	
+	<include href="screenSharingDialog.lzx" />
+    <include href="videoObjectPlayScreenShare.lzx" />
+
+</library>
diff --git a/WebContent/swf10/screensharing/resources/cursor.png b/WebContent/swf10/screensharing/resources/cursor.png
new file mode 100644
index 0000000..532f532
--- /dev/null
+++ b/WebContent/swf10/screensharing/resources/cursor.png
Binary files differ
diff --git a/WebContent/swf10/screensharing/screenSharingDialog.lzx b/WebContent/swf10/screensharing/screenSharingDialog.lzx
new file mode 100644
index 0000000..4d83dcf
--- /dev/null
+++ b/WebContent/swf10/screensharing/screenSharingDialog.lzx
@@ -0,0 +1,1133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="screenSharingDialogContainer" extends="view" 
+       width="${parent.width }" height="${ parent.height }">
+	
+	<method name="closeAll">
+		<![CDATA[
+		    if ($debug) Debug.write("screenSharingDialogContainer closeAll");
+            for (var eg in this.subviews) {
+                this.subviews[eg].doClose();
+            }
+            //do first close the video connection before removing the client view
+            this.clearAllSessions();
+        ]]>
+	</method>
+    
+    <method name="clearAllSessions">
+        <![CDATA[
+            if ($debug) Debug.write("screenSharingDialogContainer clearAllSessions");
+            for (var eg in this.subviews) {
+                this.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <method name="searchForSession" args="streamPublishName">
+        <![CDATA[
+        
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].initObject.streamPublishName == streamPublishName) {
+                    return this.subviews[i];
+                }
+            }
+            
+            if ($debug) Debug.write("No Screen Session "+streamPublishName);
+            return null;
+        ]]>
+    </method>
+    
+    <method name="hideChatContent" args="hide">
+        <![CDATA[
+            if ($debug) Debug.write("hideChatContent::isStarted ", this.subviews[0].isStarted);
+	        if (this.subviews[0] != null &&  this.subviews[0].isStarted) {
+	        	canvas.chatHeight = hide ? 22 : 200;
+	            if ($debug) Debug.write("hideChatContent::chatHeight ", canvas.chatHeight);
+	            this.subviews[0].startViewerSession();
+	        }
+        ]]>
+    </method>
+    
+</class>    
+
+<class name="screenSharingDialog" extends="labelExplorerBox" labelid="855"
+    docking="true" resizeable="true" closable="true" 
+    width="270" x="$once{ canvas.width - this.width - 20 }" height="100">
+    
+    <attribute name="isStarted" value="false" type="boolean" />
+    
+    <attribute name="currentCursorObject" value="null" />
+    
+    <attribute name="initObject" value="null"/>
+    
+    <handler name="oninit">
+    	var fName = " " + this.initObject.firstname 
+                  + " " + this.initObject.lastname;
+        var tString = canvas.getLabelName(849)
+                        + " " + fName
+                        + " " + canvas.getLabelName(850);
+        
+		this.setAttribute('title', canvas.getLabelName(855) + " " + fName);
+        if (parent.subviews.length > 1) {
+            this.setAttribute("y",((parent.subviews.length-1)*100)+40);
+        } else {
+            this.setAttribute("y",40);
+        }
+        
+        this._initText._infoText.setAttribute("text",tString);
+    </handler>
+    
+    <method name="startViewerSession">
+        <![CDATA[
+        
+            this.isStarted = true;
+            
+            this._subcontent.setAttribute("visibility","visible");
+            
+            this._initText.setAttribute("visibility","hidden");
+        
+            this._showScreenSharing._y.setAttribute("to",0);
+            this._showScreenSharing._height.setAttribute("to",canvas.height - canvas.chatHeight);
+            this._showScreenSharing._width.setAttribute("to",canvas.width-260);
+            this._showScreenSharing._x.setAttribute("to",260);
+        
+            this._showScreenSharing.setAttribute('started', true);
+            
+            if ($debug) Debug.write("this.initObject ",this.initObject);
+            
+            this._subcontent._content._video.setAttribute("width",this.initObject.VWidth);
+            this._subcontent._content._video.setAttribute("height",this.initObject.VHeight);
+            
+            this._subcontent._content._video._videostream.playStream(this.initObject.streamPublishName,-1);
+            
+        ]]>
+    </method>
+    
+    <method name="doMinimize">
+        <![CDATA[
+           
+           this.isStarted = false;
+           
+           this._subcontent._content._video._videostream.stop();
+           
+           this._showScreenSharing._y.setAttribute("to",((parent.subviews.length-1)*100)+40);
+           this._showScreenSharing._x.setAttribute("to",canvas.width - 270 - 20);
+           this._showScreenSharing._height.setAttribute("to",100);
+           this._showScreenSharing._width.setAttribute("to",270);
+           
+           this._showScreenSharing.setAttribute('started', true);
+           
+           this._infoBox.setAttribute("visibility","hidden");
+           this._zoombar.setAttribute("visibility","hidden");
+           this._pause.setAttribute("visibility","hidden");
+           this._close.setAttribute("visibility","hidden");
+           
+           this._subcontent.setAttribute("visibility","hidden");
+           
+        ]]>
+    </method>
+    
+    <method name="doClose">
+        if (this.isStarted) {
+            this._subcontent._content._video._videostream.stop();
+        }
+        this.close();
+    </method>
+    
+    <method name="updateCursor" args="x,y">
+        if (this.currentCursorObject == null) {
+            this.currentCursorObject = new lz.screenShareCursorObject(this._subcontent._content,{
+                        refObj:this._subcontent._content._video._videostream
+                    });
+        }
+        this.currentCursorObject.setAttribute("x",x * (this._zoombar._zoom.initialNumber/100));
+        this.currentCursorObject.setAttribute("y",y * (this._zoombar._zoom.initialNumber/100));
+    </method>        
+    
+    <view name="_initText">
+        
+        <!--
+        <view x="4" resource="warning_icon_rsc" y="24" />
+         -->
+         
+        <labelText name="_infoText" labelid="724" width="230" 
+                   x="10" y="26" multiline="true" />
+    
+        <simpleLabelButton name="_startButton" labelid="848" x="10" width="124" y="78">
+            <handler name="onclick">
+                parent.parent.startViewerSession();
+            </handler>
+        </simpleLabelButton> 
+          
+        <simpleLabelButton name="_closeButton" labelid="851" x="138" width="124" y="78">
+            <handler name="onclick">
+                parent.parent.close();
+            </handler>
+        </simpleLabelButton>   
+        
+    </view>
+    
+    <view name="_subcontent" width="${ parent.width }" visibility="hidden"
+          y="20" height="${ parent.height - 48 }" clip="true">
+    	
+        <view name="_content">
+            
+            <videoObjectPlayScreenShare name="_video">
+            	
+            	<contextmenu>
+			
+					<contextmenuitem caption="$once{ canvas.getLabelName(1087) }" 
+									 onselect="parent.parent.parent.pasteContent()" />
+		        
+		        </contextmenu>
+		                
+                <attribute name="doSendEvents" type="boolean" value="true" />
+                
+                <attribute name="idleDelegate" value="null" type="expression" />
+                
+                <attribute name="isMouseOverActive" value="false" type="boolean"/>
+                
+                <attribute name="lastMouseX" value="-1" type="number"/>
+                <attribute name="lastMouseY" value="-1" type="number"/>
+                
+                <attribute name="isMac" value="false" type="boolean"/>
+                <attribute name="isWindows" value="false" type="boolean"/>
+                <attribute name="isLinux" value="false" type="boolean"/>
+                
+                <handler name="oninit">
+                	
+                	var osInfo = lz.Browser.getOS();
+                	
+                	if ($debug) Debug.write("osInfo :: ",osInfo);
+                	
+                	if (osInfo.indexOf("Mac") >= 0) {
+                		this.isMac = true;
+                	} else if (osInfo.indexOf("Win") >= 0) {
+                        this.isWindows = true;
+                    } else if (osInfo.indexOf("Linux") >= 0) {
+                        this.isLinux = true;
+                    }
+                    
+                    if ($debug) Debug.write("this.isMac :: ",this.isMac);
+                    if ($debug) Debug.write("this.isWindows :: ",this.isWindows);
+                	
+                    this.idleDelegate = new LzDelegate( this, "sendMousePosition" );
+                </handler>
+                
+                <method name="pasteContent">
+                	if ($debug) Debug.write("pasteContent :: ");
+                </method>
+                
+                <handler name="onkeydown" reference="lz.Keys" args="k">
+                	<![CDATA[
+	                    if (this.isMouseOverActive) {
+	                        if ($debug) Debug.write("onkeydown ",k);
+	                        
+	                        var tObject = new Object();
+	                        tObject["action"] = "onkeydown";
+	                        tObject["k"] = k;
+	                        
+	                        var downkeys = lz.Keys.downKeysArray;
+	                        
+	                        if ($debug) Debug.write("downkeys ",downkeys,downkeys.length);
+				
+	                        if (this.isWindows) {
+	                        
+    							if (downkeys.length==2 && downkeys[0]==16) {
+    								if (k == 187) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "*";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "'";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "_";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "?";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = ">";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "°";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ö";
+    		                        }
+    		                        
+    		                        
+    							} else if (downkeys.length==2 && downkeys[0]==18) {
+    								
+    								if (k == 81) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "@";
+    								} else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "|";
+    								}
+    								
+    							} else {
+    								
+    		                        if (k == 187) {
+    		                        	tObject["k"] = -1;
+    		                        	tObject["c"] = "+";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "#";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "-";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ß";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "<";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "^";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ö";
+    		                        }
+    		                        
+    							}
+							
+	                        } else if (this.isMac) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        } else if (this.isLinux) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 252) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        }
+							
+							if (lz.Keys.downKeysArray.length > 1) {
+								for (var i=0;i<lz.Keys.downKeysArray.length;i++) {
+									if (lz.Keys.downKeysArray[i] == 17 || lz.Keys.downKeysArray[i] == '17') {
+										lz.Keys.downKeysArray = new Array();
+										break;
+									}
+								}
+							}
+							
+	                        
+							
+							if (k == 18 || k == 17) {
+								return;
+							}
+	                        
+	                        this.sendRemoteCursorEvent.tObject = tObject;
+	                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+	                            this.sendRemoteCursorEvent.doCall();
+	                        }
+	                        
+	                    }
+                    ]]>
+                </handler>
+                
+                <handler name="onkeyup" reference="lz.Keys" args="k">
+                	<![CDATA[
+                        if (this.isMouseOverActive) {
+                            if ($debug) Debug.write("onkeyup ",k);
+                            
+                            var tObject = new Object();
+                            tObject["action"] = "onkeyup";
+                            tObject["k"] = k;
+                            
+                            var downkeys = lz.Keys.downKeysArray;
+    				        
+                            if (this.isWindows) {
+                            	
+    					        if (downkeys.length==2 && downkeys[0]==16) {
+    								if (k == 187) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "*";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "'";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "_";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "?";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = ">";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "°";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ö";
+    		                        }
+    		                        
+    		                        
+    							} else if (downkeys.length==2 && downkeys[0]==18) {
+    								
+    								if (k == 81) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "@";
+    								} else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "|";
+    								}
+    								
+    							} else {
+    								
+    		                        if (k == 187) {
+    		                        	tObject["k"] = -1;
+    		                        	tObject["c"] = "+";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "#";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "-";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ß";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "<";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "^";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ö";
+    		                        }
+    		                        
+    							}
+    						
+                            } else if (this.isMac) {
+                        	
+                                if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+                                
+                            } else if (this.isLinux) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 252) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        }
+    							
+    						if (k == 18 || k == 17) {
+    							return;
+    						}
+    						
+    						if (lz.Keys.downKeysArray.length > 1) {
+    							for (var i=0;i<lz.Keys.downKeysArray.length;i++) {
+    								if (lz.Keys.downKeysArray[i] == 17 || lz.Keys.downKeysArray[i] == '17') {
+    									lz.Keys.downKeysArray = new Array();
+    									break;
+    								}
+    							}
+    						}
+                        
+    						if ($debug) Debug.write("tObject :: ",tObject,this.isWindows,this.isMac);
+    						
+                            this.sendRemoteCursorEvent.tObject = tObject;
+                            if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                                this.sendRemoteCursorEvent.doCall();
+                            }
+                        }
+                    ]]>
+                </handler>
+                
+                <handler name="onmouseover">
+                    //if ($debug) Debug.write("onmouseout ");
+                    this.isMouseOverActive = true;
+                    lz.Timer.addTimer( this.idleDelegate, 500 );
+                </handler>
+                
+                <handler name="onmouseout">
+                    //if ($debug) Debug.write("onmouseout ");
+                    this.isMouseOverActive = false;
+                    lz.Timer.removeTimer( this.idleDelegate);
+                </handler>
+                
+                <method name="sendMousePosition" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "mousePos";
+                        
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            
+                            //if ($debug) Debug.write("sendMousePosition ",x,y);
+                            
+                            if (tObject["x"] != this.lastMouseX && tObject["y"] != this.lastMouseY) {
+                                
+                                this.lastMouseX = tObject["x"];
+                                this.lastMouseY = tObject["y"];
+                            
+                                this.sendRemoteCursorEvent.doCall();
+                            }
+                            
+                        }
+                        
+                        if (this.isMouseOverActive) {
+                            lz.Timer.addTimer( this.idleDelegate, 500 );
+                        }
+                    ]]>
+                </method>
+                
+                <handler name="onmousedown" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        if ($debug) Debug.write("1 x,y :: ",x,y);
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        if ($debug) Debug.write("2 x,y :: ",x,y);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "onmousedown";
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            this.sendRemoteCursorEvent.doCall();
+                        }
+                    ]]>
+                </handler>
+                
+                <handler name="onmouseup" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        if ($debug) Debug.write("1 x,y :: ",x,y);
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        if ($debug) Debug.write("2 x,y :: ",x,y);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "onmouseup";
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            this.sendRemoteCursorEvent.doCall();
+                        }
+                    ]]>
+                </handler>
+                
+                <!--
+                public synchronized Boolean sendRemoteCursorEvent(String streamid, Map messageObj)
+                 -->
+                <netRemoteCallHib name="sendRemoteCursorEvent"  showLoading="false"
+                                  remotecontext="$once{ canvas.thishib }" funcname="sendRemoteCursorEvent"  >
+                        <attribute name="tObject" value="null" />
+                        <netparam><method name="getValue">return parent.parent.parent.parent.parent.initObject.streamid;</method></netparam>
+                        <netparam><method name="getValue">return parent.tObject;</method></netparam>
+                        <handler name="ondata" args="value">
+                        //The onResult-Handler will be called be the rtmpconnection
+                        //if( $debug ) Debug.write("+++++++++++++++++ stopRecordingShow: ",value);    
+                        //parent.close();
+                    </handler>  
+                </netRemoteCallHib> 
+                 
+            </videoObjectPlayScreenShare>
+            
+        </view>
+        
+        <om_vscrollbar />
+        <om_hscrollbar />
+        
+    </view>    
+    
+    <view name="_infoBox" x="0" visibility="hidden" >
+    	
+    	<view name="innerBox" height="${ parent.parent.height }" 
+    		  visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToRemoteControl) ? true : false )) }">
+    		
+            <labelExplorerBox name="_infoBox" labelid="1088" 
+                  docking="true" resizeable="false" closable="true" valign="middle"
+                    x="0" height="400" width="170">
+                <switch>
+                    <when property="$as3">
+                        <passthrough>
+                            import flash.net.SharedObject;
+                        </passthrough>
+                    </when>
+                </switch>
+                <handler name="oninit">
+                	<![CDATA[
+                	this.bringToFront();
+                    var t:SharedObject = SharedObject.getLocal('userdata');
+                    var g = t.data;
+                    if (g["image"]!=null) {
+                    	if ($debug) Debug.write("g[image][donotaskagainrdc] ",g["image"]["donotaskagainrdc"]);
+                        if ($debug) Debug.write("g[image] ",g["image"]);
+                        if (g["image"]["donotaskagainrdc"] != null && g["image"]["donotaskagainrdc"] == true) {
+                        	if ($debug) Debug.write("DO CLOSE IT")
+                            this.close();
+                        }
+                    }
+                    ]]>
+                </handler>
+            
+                <view x="4" resource="warning_icon_rsc" y="26" />
+            
+                <view y="22" width="$once{ parent.width - 35 }" height="130" x="30" >
+                    <labelText fontsize="10" fontstyle="bold" labelid="1086"
+                        multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+                </view>
+                
+                <view y="76" width="$once{ parent.width - 7 }" height="130" x="4" >
+                    <labelText fontsize="10" labelid="1085"
+                        multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+                </view>
+                
+                <labelCheckbox x="4" y="$once{ parent.height-42 }" fontsize="11"
+                                    name="_doNotShowAgain" labelid="1123" >
+                	<attribute name="checkboxIsinited" value="false" type="boolean"/>
+                	<switch>
+                        <when property="$as3">
+                            <passthrough>
+                                import flash.net.SharedObject;
+                            </passthrough>
+                        </when>
+                    </switch>
+                    <handler name="oninit">
+                    	<![CDATA[
+                    	    var t:SharedObject = SharedObject.getLocal('userdata');
+                            var g = t.data;
+                            if (g["image"]!=null) {
+                            	if ($debug) Debug.write("g[image]",g["image"]);
+                                if (g["image"]["donotaskagainrdc"] != null && g["image"]["donotaskagainrdc"] == true) {
+                                    if ($debug) Debug.write("donotaskagainrdc ",g["image"]["donotaskagainrdc"]);
+                                    this.setValue(true);
+                                }
+                            }
+                            this.checkboxIsinited = true;
+                        ]]>
+                    </handler>
+                    <handler name="onvalue" args="v">
+                    	if (!this.checkboxIsinited) {
+                    		return;
+                    	}
+                        if ($debug) Debug.write("onselect ",v);
+                        var t:SharedObject = SharedObject.getLocal('userdata');
+                        var g = t.data;
+                        if (g["image"]==null) g["image"]=new Array();
+                        g["image"]["donotaskagainrdc"]=v;
+                        
+                        if ($debug) Debug.write("g[image][donotaskagainrdc] ",g["image"]["donotaskagainrdc"]);
+                        if ($debug) Debug.write("g[image] ",g["image"]);
+                        
+                        t.flush();
+                    </handler>
+                </labelCheckbox>    
+                
+                <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 
+                       y="$once{ parent.height-24 }" onclick="this.parent.close();" />
+                       
+            </labelExplorerBox>  
+            
+        </view>
+        
+    </view>  
+
+    <view name="_zoombar" x="20" visibility="hidden" y="${ parent.height-26 }">
+        
+        <method name="setDefaultZoom">
+            if (parent.initObject.VWidth > (parent._subcontent.width-16) ) {
+                var newZoom = Math.round(( (parent._subcontent.width-16) /parent.initObject.VWidth)*100);
+                
+                if ($debug) Debug.write("newZoom ",newZoom);
+                
+                this._zoom.setSliderValue(newZoom);
+                
+                this._zoom.oninitialNumber.sendEvent(newZoom);
+            }
+            
+            this.setDefaultHeight();
+        </method>
+        
+        <method name="setDefaultHeight">
+            if (parent.initObject.VHeight > (parent._subcontent.height-16)) {
+                var newZoom = Math.round(( (parent._subcontent.height-16) /parent.initObject.VHeight)*100);
+                
+                if ($debug) Debug.write("newZoom ",newZoom);
+                
+                this._zoom.setSliderValue(newZoom);
+                
+                this._zoom.oninitialNumber.sendEvent(newZoom);
+            }
+        </method>
+        
+        <simplelayout axis="x" spacing="2" />
+        
+        <labelText labelid="852" resize="true" y="4" />
+        
+        <changeWidthSlider name="_zoom" initialNumberInit="100" x="10"
+              boxPosition="up" initialNumber="100" maximum="200">
+            <handler name="oninitialNumber" args="i">
+                if (parent.parent.isStarted) {
+                    
+                    var newWidth = parent.parent.initObject.VWidth * (i/100);
+                    var newHeight = parent.parent.initObject.VHeight * (i/100);
+                    
+                    parent.parent._subcontent._content._video.setAttribute("width",newWidth);
+                    parent.parent._subcontent._content._video.setAttribute("height",newHeight);
+                    
+                }
+            </handler>
+        </changeWidthSlider>
+        
+        <labelText x="64" y="4" labelid="253" />   
+        
+        <labelText x="84" y="4" labelid="1096" />  
+        
+        <!--
+        <resetCombobox name="languages" width="60" y="6" x="200" >
+        	<handler name="oninit">
+        		<![CDATA[
+            		//getBrowserLang
+            		
+        		    var thisItem = this;
+        		
+            		function callback(returnValue) {
+                            
+                        if ($debug) Debug.write(" callback ",returnValue);
+                        
+                        if (returnValue.indexOf("de") >= 0) {
+                        	thisItem.selectItemAt(1);
+                        } else if (returnValue.indexOf("de") >= 0) {
+                        	thisItem.selectItemAt(0);
+                        } else {
+                        	thisItem.selectItemAt(0);
+                        	//Show Error Box that we currently have no 
+                        	//Keyboard Scheme available for that country
+                        }
+                        
+                    }
+                    
+                    lz.Browser. callJS("getBrowserLang",callback);
+            		
+            		
+            		//var t = lz.Browser;
+            		//if ($debug) Debug.write("lz.Browser :: ",t);
+            		
+            		//this.selectItemAt(0);
+        		]]>
+        	</handler>
+        	<labeldTextListItem labelid="1094" value="en_US" />
+            <labeldTextListItem labelid="1095" value="de_DE" />
+        </resetCombobox> 
+         -->
+    </view>
+    
+    <simpleLabelButton name="_pause" visibility="hidden"
+        labelid="854" width="100" x="${ parent.width-204 }" 
+        y="${ parent.height-22 }" onclick="this.parent.doMinimize();" />
+    
+    <simpleLabelButton name="_close" visibility="hidden"
+        labelid="851" width="100" x="${ parent.width-102 }" 
+        y="${ parent.height-22 }" onclick="this.parent.doClose();" />
+        
+    <animatorgroup name="_showScreenSharing" started="false" 
+                   process="simultaneous" duration="1000" >
+        <handler name="onstop">
+            if ($debug) Debug.write("onstop this._y.to ",this._y.to);
+            if (!parent.isStarted) {
+                parent._initText.setAttribute("visibility","visible");
+            } else {
+            	parent._infoBox.setAttribute("visibility","visible");
+                parent._zoombar.setAttribute("visibility","visible");
+                parent._zoombar.setDefaultZoom();
+                parent._close.setAttribute("visibility","visible");
+                parent._pause.setAttribute("visibility","visible");
+            }
+        </handler>
+        <animator name="_y" attribute="y" to="0" />
+        <animator name="_x" attribute="x" to="0" />
+        <animator name="_height" attribute="height" />
+        <animator name="_width" attribute="width" />
+    </animatorgroup>        
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx b/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx
new file mode 100644
index 0000000..fdddbc6
--- /dev/null
+++ b/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ -->
+	
+<class name="tempTextBox" extends="view" width="120" height="40" bgcolor="0x000000">
+	
+	<attribute name="isStopped" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		parent.sendCursorVisible(false);
+        lz.Timer.addTimer( new LzDelegate( this, "removeThis" ), 3000 );
+    </handler>
+    
+    <method name="removeThis" args="refObj">
+        this._out.setAttribute('started', true);
+    </method>
+    
+    <animator name="_out" attribute="opacity" to="0" 
+    		  duration="750" started="false">
+    	<handler name="onstop">
+    		if (parent.isStopped) {
+    			return;
+    		}
+    		parent.isStopped = true;
+    		parent._bg._in.stop();
+    		parent._bg._out.stop();
+    		parent.destroy();
+    		parent.parent.sendCursorVisible(true);
+    	</handler>
+    </animator>
+    
+	<view name="_bg" bgcolor="0x7fff00" width="$once{ parent.width }"
+		  height="$once{ parent.height }">
+		<handler name="oninit">
+			this._in.setAttribute('started', true);
+		</handler>
+		
+		<animator name="_out" attribute="opacity" to="0.3" 
+              duration="250" started="false">
+            <handler name="onstop">
+            	if (parent.parent.isStopped) {
+                    return;
+                }
+                parent._in.setAttribute('started', true);
+            </handler>
+        </animator>
+        
+        <animator name="_in" attribute="opacity" to="1" 
+              duration="250" started="false">
+            <handler name="onstop">
+            	if (parent.parent.isStopped) {
+            		return;
+            	}
+                parent._out.setAttribute('started', true);
+            </handler>
+        </animator>
+		
+	</view>
+	
+	<view name="_bg2" bgcolor="0x7fff00" width="$once{ parent.width }" height="18">
+		<labelText x="2" y="1" labelid="1124" />
+	</view>
+	
+	<inputtext name="_text" width="$once{ parent.width - 4 }" height="20" y="18"
+			   bgcolor="0xFFFFFF" x="2" >
+		<handler name="ontext" args="txt">
+			if ($debug) Debug.warn("ontext ",txt);
+			parent.parent.doBroadcastText(txt);
+			parent._out.setAttribute('started', true);
+		</handler>
+	</inputtext>
+	
+</class>	
+
+<class name="copiedTextPopup" extends="labelExplorerBox" labelid="1121"
+    docking="true" resizeable="true" closable="true" y="100"
+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">
+
+    <attribute name="error" value="" type="string" />
+    
+    <view name="_box" y="24" width="${ parent.width - 20 }" 
+    	  height="${ parent.height - 50 }" x="10" clip="true">
+        <text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+            multiline="true" width="${ parent.width - 16 }" selectable="true" />
+    </view>
+    
+    <simpleLabelButton labelid="642" width="100" x="${ parent.width-105 }" 
+           y="${ parent.height-24 }" onclick="this.parent.close();" />
+
+</class>
+			
+<class name="screenShareCursorObject" extends="view" resource="menupointer_rsc">
+	
+	<attribute name="refObj" value="null" />
+	
+    <contextmenu>
+            
+        <handler name="onmenuopen">
+            parent.refObj.currentX = parent.refObj.getMouse("x");
+            parent.refObj.currentY = parent.refObj.getMouse("y");
+            if ($debug) Debug.write("onmenuopen x,y ",parent.currentX,parent.currentY);
+        </handler>
+        
+        <contextmenuitem caption="$once{ canvas.getLabelName(1119) }" 
+                         onselect="parent.parent.refObj.insertText()" />
+        
+        <contextmenuitem caption="$once{ canvas.getLabelName(1120) }" 
+                         onselect="parent.parent.refObj.copyFromRemote()" />
+                         
+        <contextmenuitem caption="$once{ canvas.getLabelName(1122) }" 
+                         onselect="parent.parent.refObj.showFromRemote()" />
+                         
+    </contextmenu>
+</class>			
+					   
+<class name="videoObjectPlayScreenShare" extends="view">
+	
+    <baseVideoStream name="_videostream" bgcolor="black" 
+          width="${parent.width}" height="${parent.height}" >
+    	
+    	<attribute name="currentX" value="0" type="number" />
+    	<attribute name="currentY" value="0" type="number" />
+    	
+    	<method name="insertText">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		new lz.tempTextBox(this,{
+                		   x:this.currentX,
+                		   y:this.currentY
+                		});
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                               errorlabelid:1125
+                            });
+    		}
+    	</method>
+    	
+    	<method name="sendCursorVisible" args="bool">
+    		if (bool) {
+    			parent.parent.parent.parent.currentCursorObject.setAttribute("visibility","visible");
+    		} else {
+    			parent.parent.parent.parent.currentCursorObject.setAttribute("visibility","hidden");
+    		}
+    	</method>
+    	
+    	<method name="doBroadcastText" args="txt">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		var tObject = new Object();
+                tObject["action"] = "paste";
+                
+                tObject["paste"] = txt;
+                
+                parent.sendRemoteCursorEvent.tObject = tObject;
+                
+                if ($debug) Debug.warn("doBroadcastText :: ",txt);
+                
+                parent.sendRemoteCursorEvent.doCall();
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                               errorlabelid:1125
+                            });
+    		}
+    	</method>
+    	
+    	<method name="copyFromRemote">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		var tObject = new Object();
+                tObject["action"] = "copy";
+                
+                tObject["clientId"] = canvas.streamid;
+                
+        		parent.sendRemoteCursorEvent.tObject = tObject;
+                parent.sendRemoteCursorEvent.doCall();
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                			   errorlabelid:1125
+                			});
+    		}
+    	</method>
+    	
+    	<method name="showFromRemote">
+            var tObject = new Object();
+            tObject["action"] = "show";
+            
+            tObject["clientId"] = canvas.streamid;
+            
+            parent.sendRemoteCursorEvent.tObject = tObject;
+            parent.sendRemoteCursorEvent.doCall();
+        </method>
+    	
+    	<contextmenu>
+    		
+    		<handler name="onmenuopen">
+    			parent.currentX = parent.getMouse("x");
+    			parent.currentY = parent.getMouse("y");
+    			if ($debug) Debug.write("onmenuopen x,y ",parent.currentX,parent.currentY);
+    		</handler>
+            
+            <contextmenuitem caption="$once{ canvas.getLabelName(1119) }" 
+                             onselect="parent.parent.insertText()" />
+            
+            <contextmenuitem caption="$once{ canvas.getLabelName(1120) }" 
+                             onselect="parent.parent.copyFromRemote()" />
+                             
+            <contextmenuitem caption="$once{ canvas.getLabelName(1122) }" 
+                             onselect="parent.parent.showFromRemote()" />
+                             
+        </contextmenu>
+        
+    </baseVideoStream>
+        
+</class>
+
+</library>
diff --git a/WebContent/swf10/testVideoObject.lzx b/WebContent/swf10/testVideoObject.lzx
new file mode 100644
index 0000000..75cc30d
--- /dev/null
+++ b/WebContent/swf10/testVideoObject.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="testVideoObject" extends="view" bgcolor="0x000000" width="132" height="120" onmousedown="dragger.setAttribute('applied', true)" onmouseup="dragger.setAttribute('applied', false)">
+        <dragstate name="dragger"/>>
+    </class>
+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/video/baseVideoObject.lzx b/WebContent/swf10/video/baseVideoObject.lzx
new file mode 100644
index 0000000..33cff06
--- /dev/null
+++ b/WebContent/swf10/video/baseVideoObject.lzx
@@ -0,0 +1,672 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 
+	distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under 
+	the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may 
+	obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to 
+	in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
+	ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
+	the License. -->
+<library>
+
+
+	<!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting 
+		a cam/mic) -->
+	<class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">
+
+		<switch>
+			<when property="$as3">
+				<passthrough>
+					import flash.filters.DropShadowFilter;
+					import flash.media.*
+					import flash.net.SharedObject;
+				</passthrough>
+			</when>
+		</switch>
+
+		<!--- @keywords private -->
+		<attribute name="chatpartnername" value="" type="string" />
+		<!--- @keywords private -->
+		<attribute name="showUserProfilePic" type="boolean" value="false" />
+
+		<!--- color of this user, this is the color the user will also use for his chat-color -->
+		<attribute name="usercolor" value="0" type="number" />
+
+		<!--- publicSID is a hash-value to identify a user -->
+		<attribute name="publicSID" value="" type="string" />
+
+		<!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->
+		<attribute name="micMuted" value="false" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="isremote" value="true" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="clientVars" value="null" />
+
+		<!--- @keywords private -->
+		<attribute name="isResizing" value="false" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="isInterview" value="false" type="boolean" />
+
+		<attribute name="respectRatio" value="true" type="boolean" />
+
+		<attribute name="minimized" value="false" type="boolean" />
+
+		<attribute name="hidebyAudioOnly" value="false" type="boolean" />
+
+		<attribute name="custom" value="false" type="boolean" />
+
+		<attribute name="initH" value="40" type="number" />
+		<attribute name="initW" value="40" type="number" />
+
+		<attribute name="isShowMicMute" value="false" type="boolean" />
+
+		<attribute name="isMutedByModerator" value="false" type="boolean" />
+
+		<attribute name="isMicrophonesRoom" value="false" type="boolean" />
+
+		<attribute name="lastPositiveVolume" type="number" value="50" />
+
+		<!-- Initial stream ratio: width / height -->
+		<attribute name="initRatio" type="number" value="null" />
+		<attribute name="initialHeight" value="$once{ this.height }" type="number" />
+
+		<handler name="onisremote" args="r">
+			this.isremote = r;
+		</handler>
+
+		<handler name="oninit">
+        <![CDATA[
+            this.clientVars = new Array();
+            this.clientVars['User']='No User Connected';
+            
+            if (this.isInterview) {
+            	this._toolbar._minimize.setAttribute("visibility","hidden");
+            	this._resizeview.setAttribute("visibility","hidden");
+            	this._innerbottom.setAttribute("visibility","hidden");
+            	return;
+            }
+            
+            if (this.custom) {
+                this._toolbar._minimize.setAttribute("visibility","hidden");
+                this._resizeview.setAttribute("visibility","hidden");
+                this._toolbar.setAttribute("visibility","hidden");
+                this._resizeview.setAttribute("visibility","hidden");
+                this._loudness.setAttribute("visibility","hidden");
+                this._innertop.setAttribute("visibility","hidden");
+                this._innerbottom.setAttribute("visibility","hidden");
+            }
+            this.setShadow();
+            
+            if (this.publicSID == canvas.publicSID) {
+                this._toolbar._resync._tip.setAttribute("labelid",610);
+            }
+            this._giveExclusiveAudioView.bringToFront();
+            
+            this.isMicrophonesRoom = canvas.currentRoomObject.showMicrophoneStatus;
+            if (canvas.currentRoomObject.showMicrophoneStatus) {
+                this._innertop.setAttribute("bgcolor", "0xFF6600");
+                this._innerbottom.setAttribute("bgcolor", "0xFF6600");
+            } else {
+                this._innerbottom.setAttribute("visibility", "hidden");
+            }
+        ]]>
+		</handler>
+
+		<handler name="ony">
+		<![CDATA[
+		    if (this.isInterview || this.custom || canvas.currentRoomObject.hideWhiteboard) {
+                return;
+            }
+            var bounds = this.getBounds();
+            var parentBounds = canvas.getBounds();
+            if (bounds.y < 0) {
+                this.setAttribute('y',0);
+            }
+            if (bounds.y > (parentBounds.height - bounds.height)) {           
+                this.setAttribute('y', parentBounds.height - bounds.height );
+            }
+        ]]>
+		</handler>
+
+		<handler name="onx">
+		<![CDATA[
+            if (this.isInterview || this.custom) {
+                return;
+            }	
+		
+			var bounds = this.getBounds();
+            var parentBounds = canvas.getBounds();
+            if (bounds.x < 0) {
+                this.setAttribute('x',0);
+            }
+            
+            if (bounds.x > (parentBounds.width - bounds.width)) {
+                this.setAttribute('x', parentBounds.width - bounds.width );
+            }
+        ]]>
+		</handler>
+
+		<method name="setShadow">
+        <![CDATA[
+	        if (this.isinited){
+	            this.normalMC = this.getDisplayObject();
+	            //if($debug) Debug.write(this.normalMC);
+	            //if($debug) Debug.write("this.normalMC: ",this.normalMC);
+	            //if($debug) Debug.write("this: ",this);
+	            this.displacementMap = new flash.filters.DropShadowFilter();
+	            this.normalMC.filters = [this.displacementMap];
+	        }
+        ]]>
+		</method>
+
+		<!-- respect ratio and keep minimum width / height -->
+		<method name="setItemContraintsWidth" args="unused">
+        <![CDATA[
+            if (!this.respectRatio) {
+                return;
+            }
+            var h=this.width * this.initH/this.initW;
+            h=((h < this.initH ) ? initH : h);
+
+            if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);
+
+            this.setAttribute("height",h);
+        ]]>
+		</method>
+
+		<method name="setItemContraintsHeight" args="unused">
+        <![CDATA[
+            if (!this.respectRatio) {
+                return;
+            }
+            var w=this.height * this.initW/this.initH;
+            w=((w < this.initW ) ? initW : w);
+
+            if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);
+
+            this.setAttribute("width",w);
+        ]]>
+		</method>
+
+		<method name="updateAVSettingsSymbol" args="rcl">
+			//FIXME: Set a Symbol wether this Client is Audio(only)/Video(only), both or Profile Picture
+			if ($debug) Debug.warn("updateAVSettingsSymbol TODO ",rcl);
+		</method>
+
+		<method name="doResize" args="bool">
+			if ($debug) Debug.write("doResize",bool);
+			if(bool) {
+				dragHelper.create();
+			} else {
+				dragHelper.remove();
+			}
+			if (this.isInterview || this.custom) {
+				return;
+			}
+
+			if (bool) {
+				this.isResizing = true;
+				this.rs.apply();
+			} else {
+				this.isResizing = false;
+				this.rs.remove();
+			}
+		</method>
+
+		<!--- resets all values and stops the streaming -->
+		<method name="resetValues">
+		<![CDATA[
+	    	if ($debug) Debug.write("resetValues: ",this.isremote);
+	    	this.clientVars=null;
+	    	if (!this.isremote) {
+	    		deleteVideoConfProfilePic();
+	    	}
+	    	if (this.isremote){
+	    		this._chatvideoinner._videostream.restart();
+	    	} else {
+	    		this._chatvideoinner._videostream._stop();
+	    	}
+		]]>
+		</method>
+		
+		<method name="setVideouserProfilePic" args="value">
+			if ($debug) Debug.write("### setVideouserProfilePic ",value);
+			this.deleteVideoConfProfilePic();
+			new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});
+			this.showUserProfilePic = true;
+		</method>
+		
+		<method name="deleteVideoConfProfilePic">
+			if ($debug) Debug.write("### deleteVideoConfProfilePic ###");
+			if ($debug) Debug.write("delete ",this.showUserProfilePic);
+			if (this.showUserProfilePic) {
+				this._chatvideoinner.userProfilePic.destroy();
+				this.showUserProfilePic = false;
+			}
+		</method>
+
+		<!--- @keywords private -->
+		<method name="_startDragState" args="obj">
+			if (this.isInterview || this.custom) {
+				return;
+			}
+
+			dragHelper.create();
+
+			this.bringToFront();
+			parent.bringToFront();
+			this.dragger.apply();
+		</method>
+
+		<!--- @keywords private -->
+		<method name="_removeDragState" args="obj">
+    	<![CDATA[
+	        lz.Cursor.unlock();
+	        
+	        if (this.x < 0) {
+	        	this.setAttribute("x",20);
+	        }
+	        
+	        if (this.y < 0) {
+	        	this.setAttribute("y",20);
+	        }
+	        
+	        if (this.x+this.width > parent.width) {
+	        	this.setAttribute("x",parent.width - this.width - 20);
+	        }
+	        
+	        if (this.y+this.height > parent.height) {
+	        	this.setAttribute("y",parent.height - this.height - 20);
+	        }
+	        dragHelper.remove();
+	        this.dragger.remove();
+        ]]>
+		</method>
+
+		<method name="minimize">
+        <![CDATA[
+            this.respectRatio = false;
+        
+            this.setAttribute("minimized",true);
+            
+            this._toolbar._minimize.setAttribute("visibility","hidden");
+            this._toolbar._maximize2.setAttribute("visibility","visible");
+            
+            for (var eg in this.subviews) {
+                if (this.subviews[eg].name != "_toolbar" 
+                        && this.subviews[eg].name != "_innertop"
+                        && this.subviews[eg].name != "_loudness") {
+                     this.subviews[eg].setAttribute("visibility","hidden");   
+                }
+            }
+            
+            this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+            this._loudness.bringToFront();
+            
+            this.initialHeight = this.height;
+            //this.setAttribute("height",20);
+            this._minimizeZoom.setAttribute("to",20);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+		</method>
+
+		<method name="reminimize">
+        <![CDATA[
+            this.setAttribute("minimized",false);
+            
+            this._toolbar._minimize.setAttribute("visibility","visible");
+            this._toolbar._maximize2.setAttribute("visibility","hidden");
+            
+            this._loudness.setAttribute("x",1);
+            
+            //this.setAttribute("height",this.initialHeight); 
+            if ($debug) Debug.write("this.initialHeight ",this.initialHeight);
+            this._minimizeZoom.setAttribute("to",this.initialHeight);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+		</method>
+
+		<method name="reminimizeComplete">
+        <![CDATA[
+            if (!this.minimized) {
+                for (var eg in this.subviews) {
+                    if (this.subviews[eg].name != "_toolbar" 
+                            && this.subviews[eg].name != "_innertop"
+                            && this.subviews[eg].name != "_loudness"
+                            && this.subviews[eg].name != "_innerbottom") {
+                         this.subviews[eg].setAttribute("visibility","visible");   
+                    }
+                }
+                if (isMicrophonesRoom) {
+                    this._innerbottom.setAttribute("visibility", "visible");
+                }
+                this.respectRatio = true;
+            }
+        ]]>
+		</method>
+
+		<view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"
+				onmouseup="parent.parent._removeDragState(this)"
+				width="${ parent.width-2 }" fgcolor="white" fontsize="9">
+				<handler name="onmouseover">
+					//cursor="arrow_draw_panel_cursor"
+					lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+				</handler>
+
+				<handler name="onmouseout">
+					lz.Cursor.unlock();
+				</handler>
+			</text>
+		</view>
+
+		<view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />
+		</view>
+
+		<view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">
+			<method name="setSpeaking" args="bool">
+				this.loudness.setAttribute('opacity', bool ? 1 : 0.2);
+			</method>
+			<view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">
+				<handler name="onclick">
+				<![CDATA[
+					if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+						parent.parent.confirmExclusiveAudio();
+					} else {
+						new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478});
+					}
+				]]>
+				</handler>
+				<labelTooltip inittwice="true" labelid="372" />
+			</view>
+		</view>
+
+		<view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"
+			onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">
+			<handler name="oninit">
+				//if ($debug) Debug.write("setTint");
+				//TODO: Fix this, does not work at the moment
+				//canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470
+				this.setColor(canvas.getThemeColor('baseMousecolorizer'));
+			</handler>
+		</view>
+
+		<view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
+
+			<attribute name="isload" value="true" type="boolean" />
+
+			<miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">
+				<handler name="onclick">
+					parent.parent.resetValues();
+					if(!this.parent.parent.isremote) {
+						if ($debug) Debug.write("editRecordStream ################# baseVideObject isInterview"
+								,this.parent.parent.isInterview,this.parent.parent.interviewPodId);
+						if (this.parent.parent.isInterview) {
+							//TODO: fix it
+							new lz.editRecordStreamSWF10(canvas.inner,{
+								name:"editRecordStream",
+								doDefaultAnimation:false,
+								isInterview:true,
+								interviewPodId:this.parent.parent.interviewPodId,
+								isSyncUpdate:true});
+						} else {
+							new lz.editRecordStreamSWF10(canvas.inner,{
+								name:"editRecordStream",
+								isInterview:false,
+								isSyncUpdate:true});
+						}
+					}
+				</handler>
+				<labelTooltip name="_tip" labelid="540" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">
+				<handler name="onclick">
+					parent.parent.silenceMicrophone(!parent.parent.micMuted);
+				</handler>
+				<labelTooltip name="_tip" labelid="1405" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">
+				<handler name="oninit">
+					_tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);
+				</handler>
+				<handler name="onclick">
+					var volume = parent.parent.getStreamVolume();
+
+					var sliderHeight = 120;
+					var sliderX = this.getAttributeRelative('x',canvas) - 2;
+					var pick = new lz.VolumeSlider(canvas, {
+							height:sliderHeight,
+							x:sliderX,
+							y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),
+							initialNumber:volume,
+							videoObject:parent.parent
+						});
+					lz.ModeManager.makeModal(pick);
+				</handler>
+				<labelTooltip name="_tip" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">
+				<handler name="onclick">
+					this.parent.parent.minimize();
+				</handler>
+				<labelTooltip labelid="856" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">
+				<handler name="onclick">
+					this.parent.parent.reminimize();
+				</handler>
+				<labelTooltip labelid="857" />
+			</miniIconsPresenter>
+
+		</view>
+
+		<view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">
+			<view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">
+				<labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />
+			</view>
+		</view>
+
+		<handler name="onmouseover">
+        <![CDATA[
+	        if (this.isInterview || this.minimized) {
+	            return;
+	        }
+	        if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+	        	this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();
+	            this._giveExclusiveAudioView.setAttribute("visible", true);
+	        }
+        ]]>
+		</handler>
+
+		<handler name="onmouseout">
+        <![CDATA[
+	        if (this.isInterview || this.minimized) {
+	            return;
+	        }
+	        this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+	        this._giveExclusiveAudioView.setAttribute("visible", false);
+        ]]>
+		</handler>
+
+		<handler name="onclick">
+		<![CDATA[
+	      	if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+	      		this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+	          	this.confirmExclusiveAudio();
+	        } else {
+				new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478});        
+	        }
+		]]>
+		</handler>
+
+		<dragstate name="dragger" />
+		<resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />
+		<dragHelper name="dragHelper" />
+
+		<animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">
+			<handler name="onstop" args="s">
+				parent.reminimizeComplete();
+			</handler>
+		</animator>
+
+		<handler name="onismoderator" reference="canvas" args="m">
+        <![CDATA[
+			if ($debug) Debug.write("###### ismoderator ", m);
+	        
+	        if (this.minimized) {
+	            this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+	            this._loudness.bringToFront();
+	        }
+        ]]>
+		</handler>
+
+		<method name="giveExclusiveAudio">
+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_giveExclusiveAudio', this.publicSID);
+		</method>
+
+		<method name="confirmExclusiveAudio">
+			var so:SharedObject = SharedObject.getLocal('userdata');
+			var userData = so.data;
+			var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];
+			var exclusiveAudioListener = new Object();
+			exclusiveAudioListener.sendNoConfirmation = function() {};
+			exclusiveAudioListener.sendConfirmation = function(answer, remember) {
+					if (answer) {
+						giveExclusiveAudio();
+						if (remember) {
+							userData["dontShowExclusiveAudioConfirmation"] = true;
+							so.flush();
+						}
+					}
+				};
+			if (dontShowExclusiveAudioConfirmation == true) {
+				exclusiveAudioListener.sendConfirmation(true, true);
+			} else {
+				new lz.confirmationSingleSWF10(canvas,{
+					labelid:1428,
+					labeliderror:1539,
+					refObj:exclusiveAudioListener,
+					showCheckBox:true});
+			}
+		</method>
+
+		<!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->
+		<method name="muteMicrophone" args="roomClientObj">
+		<![CDATA[
+			if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);
+			
+			if (roomClientObj.publicSID == this.publicSID) {
+				if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);
+				if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);
+				this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);
+				this.isMutedByModerator = roomClientObj.micMuted;
+				this.setMicMuted(roomClientObj.micMuted);
+			}
+		]]>
+		</method>
+
+		<!-- This will mute it only locally, that means on other screens the user might be still online and loud -->
+		<method name="silenceMicrophone" args="mute">
+		<![CDATA[
+			if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);
+			if (this.publicSID == canvas.publicSID) {
+				//self sound turned off
+				canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute);
+				if (!mute) {
+					this._chatvideoinner._videostream.muteMicro(false);
+				}
+			} else {
+				//disable this action for now
+				if (!canvas.ismoderator) {
+					new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1409});
+					return;
+				}
+				//you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!
+				//so setting the sound/volume on the other remote clients has zero effect
+				if (this.isMutedByModerator && !canvas.ismoderator) {
+					//FIXME: That is not true, you could restart audio/video ...
+					var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;
+					new lz.labelerrorPopupSWF10(canvas,{errorlabelid:errorlabelid});
+					return;
+				}
+				if (canvas.ismoderator) {
+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute);
+				} else {
+					this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);
+				}
+			}
+			this.setMicMuted(mute);
+		]]>
+		</method>
+
+		<method name="setMicMuted" args="micMuted">
+        <![CDATA[
+	        this.micMuted = micMuted;
+            this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");
+            this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);
+            if (isMicrophonesRoom) {
+                var label = canvas.getLabelName(micMuted ? 1435 : 1434);
+                var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";
+                this._innertop.setAttribute('bgcolor', color);
+                this._innerbottom.setAttribute('bgcolor', color);
+                this._innerbottom.title.setAttribute('text', label);
+            }
+        ]]>
+		</method>
+
+		<method name="setStreamVolume" args="v">
+			if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);
+			var stream = this._chatvideoinner._videostream;
+			if (this.isremote) {
+				stream.setSoundVolume(v);
+			} else {
+				stream.setAttribute('micGain', v);
+				stream.micro.gain = v;
+				if (0 == v) {
+					this.setMicMuted(true);
+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, true);
+				} else if (micMuted) {
+					this.silenceMicrophone(false);
+				}
+			}
+		</method>
+
+		<method name="getStreamVolume">
+			var stream = this._chatvideoinner._videostream;
+			return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;
+		</method>
+
+		<handler name="onheight" args="value">
+			if (null == initRatio || !respectRatio) {
+				return;
+			}
+			var videoHeight = value - this.videoInsetY - this.bottomBarHeight;
+			var expectedVideoWidth = videoHeight * initRatio;
+			var expectedPodWidth = expectedVideoWidth + this.videoInsetX;
+			if (this.width != expectedPodWidth) {
+				this.setAttribute("width", expectedPodWidth);
+			}
+		</handler>
+
+		<handler name="onwidth" args="value">
+			if (null == initRatio || !respectRatio) {
+				return;
+			}
+			var videoWidth = value - this.videoInsetX;
+			var expectedVideoHeight = videoWidth / initRatio;
+			var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;
+			if (this.height != expectedPodHeight) {
+				this.setAttribute("height", expectedPodHeight);
+			}
+		</handler>
+	</class>
+</library>
diff --git a/WebContent/swf10/video/changeDevice.lzx b/WebContent/swf10/video/changeDevice.lzx
new file mode 100644
index 0000000..8a97435
--- /dev/null
+++ b/WebContent/swf10/video/changeDevice.lzx
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="changeDevice" extends="labelExplorerBox" labelid="51"
+    docking="true" resizeable="false" closable="true" width="300" x="14" height="260">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.net.SharedObject;
+            </passthrough>
+        </when>
+    </switch>
+
+    <method name="storelocaldata">
+        <![CDATA[
+        var so:SharedObject = SharedObject.getLocal('userdata');
+        var sdata = so.data;
+        if (sdata==null) sdata = new Array();
+        sdata["cam"]=availibleCams3.getValue();
+        sdata["mic"]=availibleMics3.getValue();
+        sdata["savecamdata"] = this.holddatainSO.getValue();
+        so.flush();
+        ]]>
+    </method>   
+    
+    <method name="doninitalize">
+        this.storelocaldata();
+        this.close();
+    </method>
+     
+    <labelText labelid="52" fontsize="11" x="10" y="30" />
+
+    <resetCombobox fontsize="11" id="availibleCams3" x="10" y="50" width="280" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Camera;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+
+        <handler name="oninit">
+            <![CDATA[
+            //Get all availible Cam's
+            var tw = Camera.names;
+            var t = "";
+            for (var eg=0;eg<tw.length;eg++){
+                this.addItem(tw[eg],eg);
+                t=eg;
+            }
+
+            var so:SharedObject = SharedObject.getLocal('userdata');
+	        var sdata = so.data;
+	        var cam;
+            if (sdata != null){
+                cam = sdata["cam"];
+                if (cam == 'undefined') {
+                    cam = t;
+                }
+            } else {
+                cam = t;
+            }
+            this.selectItem(String(cam));
+            ]]>
+        </handler>
+    </resetCombobox>
+    
+    <labelText text="LABEL53" labelid="53" fontsize="11" x="10" y="80" />
+
+    <resetCombobox fontsize="11" id="availibleMics3"  x="10" y="100" width="280" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Microphone;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+
+        <handler name="oninit">
+            <![CDATA[
+            //Get all availible Mic's
+            var tw = Microphone.names;
+            var t = "";
+            for (var eg=0;eg<tw.length;eg++){
+                t=eg;
+                this.addItem(tw[eg],eg);
+            }
+
+            var so:SharedObject = SharedObject.getLocal('userdata');
+	        var sdata = so.data;
+	        var mic;
+	        if (sdata != null){
+                mic = sdata["mic"];
+                if (mic == 'undefined') {
+                    mic = t;
+                }
+            } else {
+                mic = t;
+            }
+            this.selectItem(String(mic));
+            ]]>
+        </handler>
+    </resetCombobox>
+
+    <!-- Remember Me -->
+    <labelCheckbox name="holddatainSO" labelid="762" x="10" y="220">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+
+        <handler name="oninit">
+            var so:SharedObject = SharedObject.getLocal('userdata');
+	        var sdata = so.data;
+            var save = sdata["savecamdata"];
+            if ($debug) Debug.write("savecamdata save: ",save);
+            if(save) this.setValue(true);
+        </handler>         
+    </labelCheckbox>
+    
+    <simpleLabelButton fontsize="11" labelid="54" x="80" y="190" width="100">
+        <handler name="onclick">
+            this.parent.doninitalize();
+        </handler>
+    </simpleLabelButton>
+    
+    <labelText labelid="56" width="280" x="10"
+    	y="150" multiline="true" resize="false"/>
+    
+    <simpleLabelButton labelid="55" width="100" x="190" y="190"
+        onclick="this.parent.close();" />
+    
+</class>
+
+</library>
diff --git a/WebContent/swf10/video/editRecordStreamSWF10.lzx b/WebContent/swf10/video/editRecordStreamSWF10.lzx
new file mode 100644
index 0000000..8356074
--- /dev/null
+++ b/WebContent/swf10/video/editRecordStreamSWF10.lzx
@@ -0,0 +1,854 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<!-- #######################
+	Class editRecordStream
+	
+	Description:
+	This Class shows a window where you can alter you Video-/Microphone- Input-Resources
+	and start to stream. The app could also use the default values for Cam/Mic but
+	most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking
+	on the Flash-Screen and *>Preferences>Camera* )
+	So I think it is better if Users are forced to choose something from this list
+	
+ -->
+ 
+<class name="editRecordStreamSWF10"  extends="labelExplorerBox" labelid="51"
+	width="680" height="540" x="14" y="-540" >
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+				import flash.events.StatusEvent;
+                import flash.media.Camera;
+                import flash.media.Microphone;
+                import flash.media.MicrophoneEnhancedMode;
+                import flash.media.MicrophoneEnhancedOptions;
+                import flash.net.SharedObject;
+                import flash.media.SoundCodec;
+            </passthrough>
+        </when>
+    </switch>
+
+    <attribute name="myvideocontainer" value="null" />
+
+    <attribute name="chosenCam" value="null" />
+    <attribute name="chosenMic" value="null" />
+    <attribute name="chosenSetting" value="null" />
+    <attribute name="currentClient" value="null" />
+
+    <attribute name="remoteMessage" value="null" />
+
+    <!---
+        if true the user will see the dialog no matter if he has choosen "do not show again" or not
+     -->
+    <attribute name="isSyncUpdate" value="false" type="boolean" />
+
+    <attribute name="doDefaultAnimation" value="true" type="boolean" />
+
+    <attribute name="cam_default_width" value="320" type="number" />
+    <attribute name="cam_default_height" value="260" type="number" />
+    
+    <attribute name="interviewPodId" value="0" type="number" />
+    
+    <attribute name="lastRecorded" value="" type="string" />
+	
+	<attribute name="isRunning" value="false" type="boolean" />
+	
+	<attribute name="recordingsCounter" value="5" type="number" />
+	
+	<attribute name="timerIsRunning" value="false" type="boolean" />
+	
+	<attribute name="counterDelegate" value="null" />
+	
+	<method name="startTimer">
+		this.timerIsRunning = true;
+		this.timerWasUnmutedTheFirstTime = true;
+		lz.Timer.addTimer( this.counterDelegate, 1000 );
+	</method>
+	
+	<method name="count" args="calleeObj">
+		if (this.recordingsCounter != 0){
+			this.recordingsCounter -= 1;
+			lz.Timer.addTimer( this.counterDelegate, 1000 );
+			
+			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
+			
+		} else {
+			this._text.setAttribute("visibility","hidden");
+			this.doStop();
+			this.timerIsRunning = false;
+			this.doPlay();
+		}
+	</method>
+	
+	<method name="startTimerToCount">
+		if (!this.timerIsRunning) {
+			this.startTimer();
+		}
+	</method>
+	
+	<handler name="oninit">
+		<![CDATA[
+			//Make this view the upmost in the z-Index order
+			canvas.inner.bringToFront();
+		
+			this.counterDelegate = new LzDelegate( this, "count" );
+		
+			if ($debug) Debug.write("this.myvideocontainer ",this.myvideocontainer);
+			if ($debug) Debug.write("editrecordstream ###################### ");
+
+			canvas.videoComp_lc.client = {clb_getBroadCastId: this.clb_getBroadCastId, clb_setUserAVSettings: this.clb_setUserAVSettings};
+
+	        var sharedData = this.checkDeviceSettingsRememberStatus();
+            if(sharedData != null) {
+                this.chosenCam = sharedData["cam"];
+                this.chosenMic = sharedData["mic"];
+                this.cam_default_width = canvas.isInterview ? 320 : sharedData["width"];
+                this.cam_default_height = canvas.isInterview ? 260 : sharedData["height"];
+                this.chosenSetting = sharedData["avstored"];
+                this.remoteMessage = new Array();
+                this.remoteMessage[0] = 'avsettings';
+                this.remoteMessage[2] = this.chosenSetting; 
+                this.getBroadCastId.doCall();
+            } else {
+                if (this.doDefaultAnimation && !canvas.isInterview) {
+                    this._chooseDeviceAnimation.setAttribute('started', true);
+                }
+                this.initItemsAndDefaultAttachCamera();
+            }
+	        
+	        if (canvas.isInterview) {
+	        	if ($debug) Debug.write("Is interview ",interviewPodId);
+                this.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);
+                this.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);
+	        }
+        ]]>
+	</handler>
+	
+	<!-- 
+	   If the remember check-box was true, this flag in the Flash Cookie (aka SharedObject)
+	   is true and the box will close without asking for device settings.
+	 -->
+	<method name="checkDeviceSettingsRememberStatus">
+	<![CDATA[
+		var t:SharedObject = SharedObject.getLocal('userdata');
+		var g = t.data;
+		var save = g["savecamdata"];
+		if ($debug) Debug.write("save: ",save,g["cam"],g["mic"],this.isSyncUpdate);
+		//In case its an Audio-Only Room this box should not close automatically
+		if ($debug) Debug.write("canvas.currentRoomObject: ", canvas.currentRoomObject);
+		
+		//In case the user presses the Sync Button this box should
+        //not close automatically and do the user-prefered values
+		if(save && !this.isSyncUpdate && this.checkLocalDataComplete()) {
+		    return g;
+		}
+		return null;
+	]]>
+	</method>
+	
+	<!-- 
+	   Checks if all needed data in the shared object is available
+	 -->
+	<method name="checkLocalDataComplete">
+        <![CDATA[
+        	var t:SharedObject = SharedObject.getLocal('userdata');
+	        var g = t.data;
+            if (g["width"] > 0 && g["height"] > 0) {
+                return true;
+            }
+            return false;
+        ]]>
+    </method>
+    
+    
+    <netRemoteCallHib name="getBroadCastId" funcname="getBroadCastId" remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getBroadCastId",value,canvas.publicSID);
+                parent.myvideocontainer = canvas._videoComponent.createVideoObject(canvas.publicSID, true, parent.interviewPodId, canvas.userobject);
+
+                if ($debug) Debug.write("parent.setUserAVSettings -1- ",parent.chosenSetting);
+                if ($debug) Debug.write("parent.setUserAVSettings -2- ",parent.remoteMessage);
+                if ($debug) Debug.write("parent.setUserAVSettings -3- ",parent.cam_default_width);
+                if ($debug) Debug.write("parent.setUserAVSettings -4- ",parent.cam_default_height);
+                if ($debug) Debug.write("parent.setUserAVSettings -5a- ",canvas.currentRoomObject.rooms_id);
+                if ($debug) Debug.write("parent.setUserAVSettings -6- ",canvas.publicSID);
+                
+                parent.setUserAVSettings.doCall();
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <netRemoteCallHib name="setUserAVSettings" funcname="setUserAVSettings" remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return parent.parent.chosenSetting;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.remoteMessage;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.cam_default_width;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.cam_default_height;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentRoomObject.rooms_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.publicSID;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.interviewPodId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("setUserAVSettings",value);
+                parent.currentClient = value;
+                parent.doStartConference();
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+
+    <method name="storelocaldata">
+        <![CDATA[
+            //Debug.write("sharedobject store ");
+            var t:SharedObject = SharedObject.getLocal('userdata');
+            var g = t.data;
+            if (g==null) g = new Array();
+            g["cam"] = this.availableCams.getValue();
+	        g["mic"] = this.availableMics.getValue();
+	        g["avstored"] = this.availableSettings.getValue();
+	        g["savecamdata"] = this.holddatainSO.getValue();
+	        g["width"] = this.cam_default_width;
+	        g["height"] = this.cam_default_height;
+            t.flush();
+        ]]>
+    </method>
+
+	<method name="getMic" args="valMic">
+	<![CDATA[
+		if ($debug) Debug.write("Entering getMic ...", valMic);
+		var _micro = null;
+		if (valMic != null) {
+			_micro = canvas.echoPath == 0 ? Microphone.getMicrophone(valMic) : Microphone.getEnhancedMicrophone(valMic);
+			
+			if (_micro != null && canvas.echoPath == 256) {
+				var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
+				options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
+				options.echoPath = 256;
+				options.nonLinearProcessing = true;
+				_micro.enhancedOptions = options;
+				if ($debug) Debug.write("echoPath set to 256");
+				if ($debug) Debug.write(_micro.enhancedOptions);
+			}
+			
+			if (_micro != null) {
+				_micro.codec = SoundCodec.NELLYMOSER;
+				_micro.framesPerPacket = 1;
+				_micro.setSilenceLevel(0, 2000);
+				if ($debug) Debug.write("canvas.microphoneRateBest: ",canvas.microphoneRateBest);
+				_micro.rate = (canvas.microphoneRateBest == 'undefined') ? 22 : canvas.microphoneRateBest;
+				_micro.gain = 50;
+				// this has no effect if enhanced microphone is obtained
+				//Microphone setUseEchoSupression(bool)
+				var enableEchoSupression = !(canvas.echoSuppression === "false");
+				if ($debug) Debug.write("canvas.echoSuppression: ",canvas.echoSuppression);
+				_micro.setUseEchoSuppression(enableEchoSupression);
+			}
+		}
+		if ($debug) Debug.write("... getMic DONE", _micro);
+		return _micro;
+	]]>
+	</method>
+	
+	<method name="getCam" args="valCam,videoview">
+	<![CDATA[
+		if ($debug) Debug.write("Entering getCam ...", valCam);
+		var _camera = null;
+		if (valCam != null) {
+			_camera = Camera.getCamera(valCam);
+		}
+		if (_camera != null) {
+            if ($debug) Debug.write("videoview: ",videoview);
+			
+			if ($debug) Debug.write("_camera.setQuality BEST: ", canvas.isInterview, (canvas.bandwidthNeededBest*2), canvas.camQualityBest);
+			if (canvas.isInterview) {
+				//we need a fixed frame rate for the videos to merge them later on
+				_camera.setMode(videoview.width, videoview.height, 24, true);
+				if ($debug) Debug.warn("IS INTERVIEW ");
+				_camera.setQuality(0, 98);
+			} else {
+				if ($debug) Debug.write("_camera.setMode: ",videoview.width,videoview.height,canvas.framesPerSecond,true);
+				_camera.setMode(videoview.width, videoview.height, canvas.framesPerSecond, true);
+				if ($debug) Debug.warn("IS NO INTERVIEW ");
+				_camera.setQuality(canvas.bandwidthNeededBest, canvas.camQualityBest);
+			}
+		}
+		if ($debug) Debug.write("... getCam DONE", _camera);
+		return _camera;
+	]]>
+	</method>
+	
+	<method name="doStartConference">
+	<![CDATA[
+		if ($debug) Debug.write("doninitalize");
+		var settings = this.chosenSetting;
+		if (!canvas.isInterview) {
+			this.myvideocontainer.setDefaultVideoSize(this.cam_default_width, this.cam_default_height);
+		}
+		
+		var videoview = this.myvideocontainer._chatvideoinner._videostream;
+		if ($debug) Debug.write("this.myvideocontainer: ", this.myvideocontainer);
+		this.myvideocontainer.setAttribute('isremote',false);
+		var _micro = this.getMic(this.chosenMic);
+		var _camera = this.getCam(this.chosenCam, videoview);
+		if ($debug) Debug.write(_camera , _micro, settings);
+		
+		if ($debug) Debug.write("BroadcastId: ", this.currentClient.broadCastID);
+		switch (settings){
+			case "av":
+				videoview.broadcast(this.currentClient.broadCastID,_camera,_micro);
+				this.myvideocontainer.setAttribute("visible", true);
+				if(canvas.isInterview) {
+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);
+				} else {
+					if (this.myvideocontainer.minimized) {
+						this.myvideocontainer.reminimize();
+					}
+				}
+				break;
+			case "a":
+				videoview.broadcast(this.currentClient.broadCastID,null,_micro);
+				this.myvideocontainer.setAttribute("visible", canvas.isInterview || !this.myvideocontainer.hidebyAudioOnly);
+				if(canvas.isInterview) {
+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);
+				} else {
+					if (!this.myvideocontainer.hidebyAudioOnly) {
+						if (!this.myvideocontainer.minimized) {
+							this.myvideocontainer.minimize();
+						}
+					}
+				}
+				break;
+			case "v":
+				videoview.broadcast(this.currentClient.broadCastID,_camera,null);
+				this.myvideocontainer.setAttribute("visible", true);
+				if(canvas.isInterview) {
+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);
+				} else {
+					if (this.myvideocontainer.minimized) {
+						this.myvideocontainer.reminimize();
+					}
+				}
+				break;
+			case "n":
+				if ($debug) Debug.write("Do not Publish A/V");
+				//Prevent from Hiding the Box in Event Modus
+				if (canvas.thishib.modus == "conference") {
+					this.myvideocontainer.setAttribute("visibility","hidden");
+				}
+				break;
+			default:
+				if ($debug) Debug.warn("no valid device Setup chosen");
+				break;
+		}
+		this.close();
+	]]>
+	</method>
+    
+	<method name="doStartRecording">
+	<![CDATA[
+		this._btnStartRecording.setAttribute("enabled",false);
+		this._play.setAttribute("enabled",false);
+		this.recordingsCounter = 5;
+		this._text.setAttribute("visibility","visible");
+		this._text._info.setAttribute("text","5 sec");
+		this.isRunning = true;
+		
+		var videoview = this._video.content._publisher._chatvideoinner._videostream;
+		var _micro = this.getMic(this.availableMics.getValue());
+		var _camera = this.getCam(this.availableCams.getValue(), videoview);
+		if ($debug) Debug.write(_camera, _micro);
+		
+		if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);
+		if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);
+		if ((_camera != null && !_camera.muted) || (_camera == null && _micro != null)) {
+			this.startTimer();
+		}
+		
+		//start recording of client stream
+		var t = new Date();
+		this.lastRecorded = "TEST_SETUP_"+t.getTime();
+		this._video.content._publisher.setAttribute("visibility","visible");
+		this._video.content._viewer.setAttribute("visibility","hidden");
+		videoview.record(this.lastRecorded,_camera,_micro);
+	]]>
+	</method>
+    
+    <method name="doPlay">
+    	<![CDATA[
+    	   if (this.lastRecorded == "") {
+    	   	   //Error - nothing recorded yet
+    	   	   if ($debug) Debug.warn("Nothing to Play");
+    	   } else {
+    	   	   this._play.setAttribute("enabled",true);
+    	   	   this._video.content._publisher.setAttribute("visibility","hidden");
+               this._video.content._viewer.setAttribute("visibility","visible");
+               var videoview = this._video.content._viewer._chatvideoinner._videostream;
+               videoview.justPlayStream(this.lastRecorded+".flv",0);
+    	   }
+    	]]>
+    </method>
+    
+    <method name="doStop">
+    	if (this.isRunning) {
+    		this.isRunning = false;
+    		var videoview = this._video.content._publisher._chatvideoinner._videostream;
+    		this._btnStartRecording.setAttribute("enabled",true);
+    		videoview._stop();
+    		this.doPlay();
+    	}
+    	var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;
+        videoviewViewer._stop();
+    </method>
+
+    <animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />
+    
+    
+    <labelText fontstyle="bold" labelid="758"
+			   width="${ parent.width-2 }" height="30" multiline="true" y="20" /> 
+
+    <labelText labelid="447" fontsize="11" fontstyle="bold" x="10" y="80" width="$once{ parent.width-20 }" />
+
+	<resetCombobox fontsize="11" name="availableSettings" x="10" y="100" width="280" editable="false">
+		<handler name="onselect">
+		<![CDATA[
+			var camVisible = true;
+			var micVisible = true;
+			var textVisible = false;
+			switch (this.getValue()){
+				case "av":
+					break;
+				case "a":
+					camVisible = false;
+					break;
+				case "v":
+					micVisible = false;
+					break;
+				case "n":
+					camVisible = false;
+					micVisible = false;
+					textVisible = true;
+					break;
+				default:
+					if ($debug) Debug.warn("no valid device Setup chosen");
+					break;
+			}
+			this.parent.availableCamsLabel.setAttribute("visible", camVisible);
+			this.parent.availableCams.setAttribute("visible", camVisible);
+			this.parent._btnStartRecording.setAttribute("visible", camVisible || micVisible);
+			this.parent._video.setAttribute("visible", camVisible);
+			this.parent._play.setAttribute("visible", camVisible || micVisible);
+			this.parent._level_meter.setAttribute("visible", micVisible);
+			this.parent.availableMicsLabel.setAttribute("visible", micVisible);
+			this.parent.availableMics.setAttribute("visible", micVisible);
+			this.parent.infoTextNoAV.setAttribute("visible", textVisible);
+			this.parent.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+			this.parent.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+			this.parent.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+		]]>
+		</handler>
+	</resetCombobox>
+    
+    <attribute name="executeAttachCamera" value="false" type="boolean" />
+
+	<method name="getStoredProp" args="prop">
+		//Initialize and get eventually stored property
+		var t:SharedObject = SharedObject.getLocal('userdata');
+		var g = t.data;
+		return g != null ? "" + g[prop] : null;
+	</method>
+	
+	<method name="fillDeviceList" args="list,combo,prop">
+	<![CDATA[
+		//Initialize and get eventually stored property
+		var dev = getStoredProp(prop);
+		
+		//Get all availible devices
+		var foundStoredDev = null;
+		for (var eg = 0; eg < list.length; ++eg) {
+			combo.addItem(list[eg], eg);
+			var r = "" + eg;
+			if (r == dev) {
+				foundStoredDev = r;
+			}
+		}
+		return foundStoredDev;
+	]]>
+	</method>
+	
+	<method name="selectListItem" args="combo,selected,select">
+		if (selected != null) {
+			combo.selectItem(selected);
+		} else {
+			if (select) {
+				combo.selectItemAt(0);
+			}
+		}
+	</method>
+	
+    <!-- 
+        Initialize the default settings for cam and resolution and attach the camera 
+        after we have made sure the values are there one time
+     -->
+	<method name="initItemsAndDefaultAttachCamera">
+	<![CDATA[
+		//fill list of Cameras
+		var cameras = Camera.names;
+		var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");
+		selectListItem(availableCams, foundStoredCam, cameras.length > 0);
+		
+		//fill list of Mics
+		var mics = Microphone.names;
+		var foundStoredMic = fillDeviceList(mics, availableMics, "mic");
+		selectListItem(availableMics, foundStoredMic, mics.length > 0);
+
+		// settings
+		var addCams = canvas.userobject.canVideo && !canvas.currentRoomObject.isAudioOnly && cameras.length > 0;
+		var addMics = mics.length > 0;
+		if (addCams && addMics) {
+			availableSettings.addItem(canvas.getLabelName(448), "av");
+		}
+		if (addMics) {
+			availableSettings.addItem(canvas.getLabelName(449), "a");
+		}
+		if (addCams) {
+			availableSettings.addItem(canvas.getLabelName(450), "v");
+		}
+		availableSettings.addItem(canvas.getLabelName(451), "n");
+		
+		var avstored = getStoredProp("avstored");
+		
+		if (availableSettings.getItem(avstored) != null) {
+			availableSettings.selectItem(avstored);
+		} else {
+			availableSettings.selectItemAt(0);
+		}
+
+		//Initialize and set default resolutions combobox
+		if ($debug) Debug.write("myConfigSet 1 ", canvas.myConfigSet);
+		if ($debug) Debug.write("myConfigSet 2 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution'));
+		if ($debug) Debug.write("myConfigSet 3 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution/'));
+		if ($debug) Debug.write("myConfigSet 4 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution/*'));
+		
+		this.executeAttachCamera = true;
+		
+		this.attachCamera();
+	]]>
+	</method>
+	
+	<method name="attachCamera">
+	    <![CDATA[
+		    //if the user has configured this box to auto-close, do not try to
+		    //attach the cam to the preview (black) box
+		    var sharedData = this.checkDeviceSettingsRememberStatus();
+	        if(sharedData != null) {
+	            return;
+	        }
+	        
+	        //Don't execute before combobox items are not initialized
+	        if (!this.executeAttachCamera) {
+	            if ($debug) Debug.write("Return, executeAttachCamera is false");
+                return;
+	        }
+		
+			if (_video == undefined)  {
+			    if ($debug) Debug.write("Return, video video not yet ready");
+                return;
+			}
+			_video.content._publisher.setAttribute("visibility", "visible");
+			_video.content._viewer.setAttribute("visibility", "hidden");
+			var videoview = this._video.content._publisher._chatvideoinner._videostream;
+			var _camera = getCam(availableCams.getValue(), videoview);
+			if (_camera != null) {
+			    //stop will not call clear as there is no NetStream
+				videoview._stop();
+				videoview.clear();
+				videoview.attachCamera(_camera);
+			}
+		]]>
+	</method>
+	
+	<method name="cleanVideos">
+	   if (_video == undefined) return;
+	   //make sure stop and clear is called, as the _stop method does not work for all
+	   //videoviews in the device settings.
+	   _video.content._publisher._chatvideoinner._videostream._stop();
+       _video.content._viewer._chatvideoinner._videostream._stop();
+       _video.content._publisher._chatvideoinner._videostream.clear();
+       _video.content._viewer._chatvideoinner._videostream.clear();
+       if ($debug) Debug.write("Cleaned up videos and free resources");
+	</method>
+	
+    <labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="140" width="$once{ parent.width-20 }" />
+    <resetCombobox fontsize="11" name="availableCams" x="10" y="160" width="280" editable="false">
+		<handler name="onselect">
+			parent.attachCamera();
+		</handler>
+    </resetCombobox>
+
+    <labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="180" width="$once{ parent.width-20 }" />
+    <resetCombobox fontsize="11" name="availableMics"  x="10" y="200" width="280" editable="false" />
+
+    <labelText name="infoTextNoAV" labelid="452" multiline="true" width="280" 
+               fontsize="11" x="10" y="130" visibility="hidden" />
+               
+    <labelText name="availibleResolutionsLabel" labelid="1429" 
+            fontsize="11" x="10" y="224" width="$once{ parent.width-20 }" />
+            
+    <view name="availibleResolutionsWarning" x="272" y="224" 
+            resource="warning_icon_popup_devices_rsc" clickable="true">
+        <labelTooltip multiline="true" labelid="1430" />
+    </view>     
+    
+    <resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"
+                y="244" width="280" editable="false">
+        <!--- @keywords private -->
+        <attribute name="counter" value="0" />
+		<handler name="onselect" args="item">
+		<![CDATA[
+			if (!canvas.isInterview) {
+				if ($debug) Debug.write("onselect w ", item.cam_width);
+				if ($debug) Debug.write("onselect h ", item.cam_height);
+				parent.setAttribute("cam_default_width",item.cam_width);
+				parent.setAttribute("cam_default_height",item.cam_height);
+				
+				if (item.cam_width > 240) {
+					var newWidth = 600 + item.cam_width - 240;
+					if (newWidth+parent.x+10 > canvas.width) {
+						newWidth = canvas.width - 10 - this.x;
+					}
+					parent.setAttribute("width",newWidth);
+				} else {
+					parent.setAttribute("width",600);
+				}
+				
+				if (item.cam_height > 180) {
+					var newHeight = 500 + item.cam_height - 180;
+					if (newHeight+parent.y+10 > canvas.height) {
+						newHeight = canvas.height - 10 - parent.y;
+					}
+					parent.setAttribute("height",newHeight);
+				} else {
+					parent.setAttribute("height",500);
+				}
+			}
+			parent.attachCamera();
+		]]>
+		</handler>
+        <textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >
+            <switch>
+	            <when property="$as3">
+	                <passthrough>
+	                    import flash.net.SharedObject;
+	                </passthrough>
+	            </when>
+	        </switch>
+            <attribute name="cam_width" value="320" type="number" />
+            <attribute name="cam_height" value="240" type="number" />
+            <handler name="ondata">
+                <![CDATA[
+                    // if ($debug) Debug.write("ondata ", this);
+                    var type = this.datapath.xpathQuery('@type');
+                    this.cam_width = Number(this.datapath.xpathQuery('@width'));
+                    this.cam_height = Number(this.datapath.xpathQuery('@height'));
+                    this.setAttribute("text",""+this.cam_width+"x"+this.cam_height+" ["+type+"]");
+                    var isDefault = this.datapath.xpathQuery('@isDefault');
+                    
+                    var t:SharedObject = SharedObject.getLocal('userdata');
+                    var g = t.data;
+                    var width = g["width"];
+                    var height = g["height"];
+                    if (width!=null && width > 0 && height!=null && height>0) {
+                        if (width == this.cam_width && height == this.cam_height) {
+                            parent.selectItemAt(parent.counter);
+                            parent.onselect.sendEvent(this);
+                        }
+                    } else {
+                        if (isDefault == "true") {
+                            if ($debug) Debug.write("Found default one ",type);
+                            parent.selectItemAt(parent.counter);
+                            parent.onselect.sendEvent(this);
+                        }
+                    }
+                    parent.counter+=1;
+                ]]>
+            </handler>
+        </textlistitem>
+    </resetCombobox>      
+    
+    <simpleLabelButton name="_btnStartRecording" labelid="775" 
+    				   width="140" x="150" y="280" height="28">
+    	<handler name="onclick">
+            parent._level_meter.startLevel();
+            parent.doStartRecording();
+        </handler>
+    </simpleLabelButton>
+    
+	<view x="340" y="60" name="_video" clip="true" 
+			width="${ parent.width-this.x-10 }" height="${ parent.height-260 }"> 
+		<view name="content">
+		
+			<videoObjectTestBroadcast name="_publisher"  
+					width="${ parent.parent.parent.cam_default_width }" 
+					height="${ parent.parent.parent.cam_default_height }">
+				<handler name="sendCameraStatus" args="camStatus">
+		            if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
+		            if (camStatus == "Camera.Unmuted") {
+		            	parent.parent.parent.startTimerToCount();
+		            }
+		        </handler>
+		        
+		        <handler name="sendMicroStatus" args="micStatus">
+		            if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
+		            if (micStatus == "Microphone.Unmuted") {
+		                parent.parent.parent.startTimerToCount();
+		            }
+		        </handler>
+			</videoObjectTestBroadcast>
+			
+			<videoObjectPlayTestBroadcast name="_viewer" visibility="hidden" 
+						width="${ parent.parent.parent.cam_default_width }" 
+						height="${ parent.parent.parent.cam_default_height }" />
+		</view>
+		
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+	
+								  
+	<view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">
+		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right"
+			  fontsize="12" fontstyle="bold" />
+	</view>
+    
+    <simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false"
+                	width="90" labelid="764" >
+        <handler name="onclick">
+            parent.doPlay();
+        </handler>
+    </simpleLabelButton>
+     
+    <view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">
+    	
+    	 <!--- Level delegate, used to track level changes. 
+              @keywords private -->
+        <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
+    	
+    	<method name="_updateLevel" args="no">
+    		<![CDATA[
+    		    if (parent._video.content._publisher._chatvideoinner._videostream.micro == null)
+    		    {
+    		    	return;
+    		    }
+    		    this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);
+    		]]>
+    	</method>
+    	
+    	<method name="startLevel">
+    		this._leveldel.register(lz.Idle, "onidle");
+    	</method>
+    	
+    	<method name="resetNewLevel">
+    		this._leveldel.unregisterAll();
+    		this.setNewLevel(0);
+    	</method>
+    	
+    	<method name="setNewLevel" args="no">
+    		<![CDATA[
+                var newLevel = (238/100) * no;
+                this._over.setAttribute("width",238-newLevel);
+                this._over.setAttribute("x",1+(newLevel));
+            ]]>
+    	</method>
+    	
+    	<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    	<view name="_grip" resource="level_meter_rsc" x="1" y="1" />
+    	<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    	<labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />
+    </view>
+    
+    <view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />
+    
+    <labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"
+               width="${ parent.width-50 }" multiline="true" />
+
+    <!-- Remember Me -->
+    <labelCheckbox name="holddatainSO" labelid="762" x="10" y="${ parent.height-20 }" >
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+        <handler name="oninit">
+            var t:SharedObject = SharedObject.getLocal('userdata');
+            var g = t.data;
+            var save = g["savecamdata"];
+            if ($debug) Debug.write("savecamdata save: ",save);
+            if(save) this.setValue(true);
+        </handler>
+    </labelCheckbox>
+
+    <simpleLabelButton fontsize="11" visibility="${ (canvas.isInterview) ? 'visible' : 'hidden' }"
+                       labelid="54" x="${ parent.width-220 }" y="${ parent.height-50 }" width="100">
+        <handler name="onclick">
+            parent.cleanVideos();
+            this.parent.storelocaldata();
+            this.parent.chosenCam = parent.availableCams.getValue();
+            this.parent.chosenMic = parent.availableMics.getValue();
+            this.parent.chosenSetting = parent.availableSettings.getValue();
+            this.parent.remoteMessage = new Array();
+            this.parent.remoteMessage[0] = 'avsettings';
+            this.parent.remoteMessage[1] = "0";
+            this.parent.remoteMessage[2] = this.parent.chosenSetting;
+            this.parent.getBroadCastId.doCall();
+        </handler>
+    </simpleLabelButton>
+
+    <simpleLabelButton fontsize="11" visibility="${ (canvas.isInterview) ? 'visible' : 'hidden' }"
+                       labelid="918" x="${ parent.width-110 }" y="${ parent.height-50 }" width="100">
+        <handler name="onclick">
+            parent.cleanVideos();
+            parent.close();
+        </handler>
+    </simpleLabelButton>
+
+    <simpleLabelButton fontsize="11" visibility="${ (!canvas.isInterview) ? 'visible' : 'hidden' }"
+    				   labelid="761" width="160" x="${ parent.width-170 }" y="${ parent.height-50 }" height="28">
+        <handler name="onclick">
+            parent.cleanVideos();
+        	this.parent.storelocaldata();
+        	this.parent.chosenCam = parent.availableCams.getValue();
+        	this.parent.chosenMic = parent.availableMics.getValue();
+        	this.parent.chosenSetting = parent.availableSettings.getValue();
+			this.parent.remoteMessage = new Array();
+			this.parent.remoteMessage[0] = 'avsettings';
+			this.parent.remoteMessage[1] = "0";
+			this.parent.remoteMessage[2] = this.parent.chosenSetting;
+            this.parent.getBroadCastId.doCall();
+        </handler>
+    </simpleLabelButton>
+
+</class>
+    
+</library>
diff --git a/WebContent/swf10/video/library.lzx b/WebContent/swf10/video/library.lzx
new file mode 100644
index 0000000..515567f
--- /dev/null
+++ b/WebContent/swf10/video/library.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--  FamFam Icon Creative Commons -->
+    <resource name="warning_icon_popup_devices_rsc" src="resources/error.png" />
+
+	<!--  APL author sebawagner -->
+	<resource name="chatbgitem" src="resources/profile_pic.jpg" />
+
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />
+	
+	<!--  APL author sebawagner -->
+    <resource name="mic_rsc" src="resources/micro.png" />
+    
+    <!--  APL author sebawagner -->
+	<resource name="speaking" src="resources/speaking.png" />
+
+    <!--  IconFinder Creative Commons -->
+    <resource name="volume" src="resources/volume.png" />
+	
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="mute_btn_rsc">
+		<frame src="resources/sound.png" />
+		<frame src="resources/sound_mute.png" />
+	</resource>
+	
+	<!--  APL author sebawagner -->
+    <resource name="mute_micro_btn_rsc">
+		<frame src="resources/mute_micro.png" />
+		<frame src="resources/mute_micro_red.png" />
+	</resource>
+
+	<!--  APL author sebawagner -->
+	<resource name="lz_recorder_play" src="resources/webstart_play.png" />
+
+    <include href="changeDevice.lzx" />
+    <include href="videoUserProfilePicSWF10.lzx" />
+    <include href="editRecordStreamSWF10.lzx" />
+    <include href="baseVideoObject.lzx" />
+    <include href="videoObjectPlayBroadcast.lzx" />
+    <include href="videoObjectTestBroadcast.lzx" />
+    <include href="videoObjectPlayTestBroadcast.lzx" />
+    <include href="volumeSlider.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/video/resources/arrow_refresh_small.png b/WebContent/swf10/video/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/swf10/video/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/error.png b/WebContent/swf10/video/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/swf10/video/resources/error.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/micro.fla b/WebContent/swf10/video/resources/micro.fla
new file mode 100644
index 0000000..0631ad2
--- /dev/null
+++ b/WebContent/swf10/video/resources/micro.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/micro.png b/WebContent/swf10/video/resources/micro.png
new file mode 100644
index 0000000..9e025d4
--- /dev/null
+++ b/WebContent/swf10/video/resources/micro.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro.fla b/WebContent/swf10/video/resources/mute_micro.fla
new file mode 100644
index 0000000..210ddbf
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro.png b/WebContent/swf10/video/resources/mute_micro.png
new file mode 100644
index 0000000..71efdbe
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro_red.fla b/WebContent/swf10/video/resources/mute_micro_red.fla
new file mode 100644
index 0000000..287c2a0
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro_red.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro_red.png b/WebContent/swf10/video/resources/mute_micro_red.png
new file mode 100644
index 0000000..29e16b5
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro_red.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/profile_pic.jpg b/WebContent/swf10/video/resources/profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/WebContent/swf10/video/resources/profile_pic.jpg
Binary files differ
diff --git a/WebContent/swf10/video/resources/sound.png b/WebContent/swf10/video/resources/sound.png
new file mode 100644
index 0000000..6056d23
--- /dev/null
+++ b/WebContent/swf10/video/resources/sound.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/sound_mute.png b/WebContent/swf10/video/resources/sound_mute.png
new file mode 100644
index 0000000..b652d2a
--- /dev/null
+++ b/WebContent/swf10/video/resources/sound_mute.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/speaking.png b/WebContent/swf10/video/resources/speaking.png
new file mode 100644
index 0000000..2ca21a7
--- /dev/null
+++ b/WebContent/swf10/video/resources/speaking.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/volume.png b/WebContent/swf10/video/resources/volume.png
new file mode 100644
index 0000000..1b0dbc5
--- /dev/null
+++ b/WebContent/swf10/video/resources/volume.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/webstart_play.png b/WebContent/swf10/video/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/swf10/video/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/swf10/video/videoObjectPlayBroadcast.lzx b/WebContent/swf10/video/videoObjectPlayBroadcast.lzx
new file mode 100644
index 0000000..d162445
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectPlayBroadcast.lzx
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	you under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<library>
+
+	<!--- Contains no microphone or camera Object, this view can only subscribe 
+		to a video or live-stream -->
+	<class name="videoObjectPlayBroadcast" extends="baseVideoObject"
+		isremote="true">
+		<attribute name="interviewPodId" value="-1" />
+		<attribute name="ratioW" value="1" />
+		<attribute name="ratioH" value="1" />
+
+		<attribute name="videoInsetX" value="2" type="number" />
+		<attribute name="videoInsetY" value="21" type="number" />
+		<attribute name="bottomBarHeight" value="0" type="number" />
+
+		<handler name="oninit">
+		<![CDATA[
+			if ($debug) Debug.write("Init videoObjectPlayBroadcast ",this.isremote,this.clientVars);
+			//Display widget defined in mother class
+			this._loudness.bringToFront();
+			this._resizeview.bringToFront();
+		]]>
+		</handler>
+
+		<!--- Change the video resolution by chaning pod size -->
+		<method name="setDefaultVideoSize" args="w,h">
+			this.initRatio = w / h;
+			this.setAttribute("width",w+this.videoInsetX);
+
+			if (canvas.currentRoomObject.showMicrophoneStatus) {
+				this.setAttribute("bottomBarHeight",this._innertop.height + 1);
+			}
+
+			this.setAttribute("height",h+this.videoInsetY+this.bottomBarHeight);
+		</method>
+
+		<view name="_chatvideoinner" x="$once{ parent.videoInsetX-1 }" y="$once{ parent.videoInsetY-1 }"
+			height="${parent.height-parent.videoInsetY-parent.bottomBarHeight}"
+			width="${parent.width-parent.videoInsetX}">
+
+			<attribute name="initH" />
+			<attribute name="initW" />
+
+			<handler name="oninit">
+				this.r.setAttribute('frame',5);
+				this.initH =
+				this.height;
+				this.initW = this.width;
+			</handler>
+
+			<view name="r"></view>
+
+			<baseVideoStreamDevice name="_videostream"
+				bgcolor="black" width="${parent.width}" height="${parent.height}">
+				<handler name="onlevel">
+					var fullLength = parent.height-24;
+					parent._activityLevel.setAttribute("height",-this.level*(fullLength/100));
+				</handler>
+			</baseVideoStreamDevice>
+
+			<view name="_activityLevel" width="6" x="2" y="${parent.height}"
+				opacity="0.5" bgcolor="0x00FF00" height="0" />
+		</view>
+	</class>
+</library>
diff --git a/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx b/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx
new file mode 100644
index 0000000..e989ae5
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ -->
+
+ 
+<class name="videoObjectPlayTestBroadcast" extends="view" >
+
+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
+		
+		<baseVideoStream name="_videostream" mode="broadcast"
+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000" />
+		
+	</view>	
+</class>
+
+
+</library>
diff --git a/WebContent/swf10/video/videoObjectTestBroadcast.lzx b/WebContent/swf10/video/videoObjectTestBroadcast.lzx
new file mode 100644
index 0000000..2fff0a2
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectTestBroadcast.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ -->
+
+ 
+<class name="videoObjectTestBroadcast" extends="view" >
+
+    <event name="sendCameraStatus" />
+    
+    <event name="sendMicroStatus" />
+    
+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
+		
+		<baseVideoStreamDevice name="_videostream" mode="broadcast" sendNotificationViaLocalConnection="false"
+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000">
+			<handler name="sendCameraStatus" args="camStatus">
+                if ($debug) Debug.write("sendCameraStatus",camStatus);
+                parent.parent.sendCameraStatus.sendEvent(camStatus);
+            </handler>
+            
+            <handler name="sendMicroStatus" args="micStatus">
+                if ($debug) Debug.write("sendMicroStatus",micStatus);
+                parent.parent.sendMicroStatus.sendEvent(micStatus);
+            </handler>
+		</baseVideoStreamDevice>
+		
+	</view>	
+</class>
+
+
+</library>
diff --git a/WebContent/swf10/video/videoUserProfilePicSWF10.lzx b/WebContent/swf10/video/videoUserProfilePicSWF10.lzx
new file mode 100644
index 0000000..2a7797b
--- /dev/null
+++ b/WebContent/swf10/video/videoUserProfilePicSWF10.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="videoUserProfilePicSWF10" extends="view" x="1" y="2" width="${parent.width-2}" height="${parent.height-3}" 
+	   clip="true" bgcolor="white">
+	<attribute name="value" value="null" />
+		
+	<handler name="oninit">
+	<![CDATA[
+		var extra = value.sipTransport ? "&parentPath=../default&moduleName=videoconf1"
+			: '&parentPath=&moduleName=remoteuserprofile&remoteUserid='+this.value.user_id;
+
+		this._userpic.setAttribute('src', canvas.getPictureUrl(value.picture_uri, extra));
+	]]>
+	</handler>	
+	<image name="_userpic" stretches="both" width="${parent.width}" height="${parent.height}" />
+</class>
+
+</library>
diff --git a/WebContent/swf10/video/volumeSlider.lzx b/WebContent/swf10/video/volumeSlider.lzx
new file mode 100644
index 0000000..8c2d35b
--- /dev/null
+++ b/WebContent/swf10/video/volumeSlider.lzx
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="VolumeSlider" extends="closableView" clickable="true" height="120">
+
+    <switch>
+    <when property="$as3">
+        <passthrough>
+            import flash.net.*;
+            import flash.media.*;
+        </passthrough>
+    </when>
+    </switch>
+
+    <attribute name="videoStream" value="null" />
+    <attribute name="ownStream" type="boolean" value="false" />
+    <attribute name="resizing" type="boolean" value="false" />
+
+    <attribute name="videoObject" value="null" />
+    <attribute name="initialNumber" value="50" type="number"/>
+    <attribute name="maxvalue" value="100" type="number" />
+
+    <dragHelper name="dragHelper"/>
+
+    <handler name="oninit">
+        dragHelper.create();
+    </handler>
+
+    <handler name="ondestroy">
+        dragHelper.remove();
+    </handler>
+
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" >
+        <![CDATA[
+        if (eventStr == "onmousedown") {
+            if (null != view) {
+                if (!view.childOf(this)) {
+                    this.close();
+                }
+            } else {
+                this.close();
+            }
+        }
+        if (view && view.childOf(this)) {
+            if (view[eventStr]) {
+                view[eventStr].sendEvent(view);
+            }
+            return false;
+        }
+        return true;
+        ]]>
+    </method>
+
+    <vslider name="_slider" height="$once{parent.height}" y="10" x="0" minvalue="0" maxvalue="100"
+        initvalue="$once{parent.initialNumber}" showrange="false" showvalue="false" switchaxis="true">
+        <handler name="onvalue" args="v">
+            if ($debug) Debug.write("onvalue", v);
+
+            parent.videoObject.setStreamVolume(Number(v));
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>
+    </vslider>
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/whiteboard/library.lzx b/WebContent/swf10/whiteboard/library.lzx
new file mode 100644
index 0000000..ebb556b
--- /dev/null
+++ b/WebContent/swf10/whiteboard/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="playBackWhiteboardVideo.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx b/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx
new file mode 100644
index 0000000..8dc7194
--- /dev/null
+++ b/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+    The playBackVideoStream is used in the recording playerback to show the video
+ -->
+<class name="playBackWhiteboardVideo" extends="baseVideoStream" bgcolor="0x000000">
+	
+	<attribute name="timerDelegate" value="null"/>
+    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
+    
+    <handler name="oninit">
+        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
+    </handler>
+    
+    <method name="playVideoStream" args="streamName,delay">
+        this.playStream(streamName,delay);
+        this.timerDelegateStarted = true;
+        lz.Timer.addTimer( this.timerDelegate , 1000 );
+    </method>
+    
+    <method name="stopVideo">
+        this._stop();
+        lz.Timer.removeTimer(this.timerDelegate);
+        this.timerDelegateStarted = false;
+    </method>
+	
+	<handler name="onNetStatus" args="info">
+        //if ($debug) Debug.write("onNetStatus ",info);
+        if (info.code ==  "NetStream.Play.Stop" ) {
+        	if ($debug) Debug.write("-- stopStream");
+            //parent.parent.stopStream();
+            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream', this.name);
+        }
+    </handler>
+    <handler name="onMetaDataEvent" args="info">
+        //if ($debug) Debug.warn("onMetaData ",info);
+        //if ($debug) Debug.write("parent.parent.deltaInSeconds ",Number(info.duration));
+        //parent.parent.deltaInSeconds = Number(info.duration);
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'metaWhiteboardPlaybackStream', this.name, Number(info.duration));
+    </handler>
+    
+    <method name="calcProgressBar" args="tObjRef">
+        //if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateWhiteboardStreamTime',this.name, this._ns.time);
+        if (this.timerDelegateStarted) {
+            lz.Timer.addTimer( this.timerDelegate , 1000 );
+        }
+    </method>
+	
+</class>
+
+</library>
\ No newline at end of file
diff --git a/build-jaudiotagger.xsl b/build-jaudiotagger.xsl
new file mode 100644
index 0000000..210533c
--- /dev/null
+++ b/build-jaudiotagger.xsl
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:output omit-xml-declaration="no"/>
+    <xsl:template match="node()|@*">
+      <xsl:copy>
+         <xsl:apply-templates select="node()|@*"/>
+      </xsl:copy>
+    </xsl:template>
+
+    <xsl:template match="//*[@id='mp4reader.impl']"/>
+    <xsl:template match="//*[@id='mp3reader.impl']"/>
+</xsl:stylesheet>
diff --git a/build.properties b/build.properties
new file mode 100644
index 0000000..198264d
--- /dev/null
+++ b/build.properties
@@ -0,0 +1,24 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+project.version=3.0.7
+project.status=SNAPSHOT
+project.distname=openmeetings
+ivy.install.version=2.4.0
+maven.version=3.2.5
+red5.server.version=1.0.6-RELEASE
+laszlo.proxied=solo
+wicket.mode=DEPLOYMENT
+backup.file.list=backup_v_1_4_rc1_r3326.zip,backup_v_1_5_rc1_r3393.zip,backup_v_1_6_2_r3675.zip,backup_v_1_7_0_r3822.zip,backup_v_1_8_8_r4555.zip,backup_v_1_9_1_r4707.zip,backup_v_2_0_0_r1361497.zip,backup_v_3_0_0_r1573585.zip
+db=derby
+screensharing.keystore.password=secret
+screensharing.keystore.alias=screen
+rtmp.max.time=5000
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..e1ea12c
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,1512 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<!DOCTYPE project>
+<project name="openmeetings" basedir="./" default="dist"
+	xmlns="antlib:org.apache.tools.ant"
+	xmlns:rat="antlib:org.apache.rat.anttasks"
+	xmlns:ivy="antlib:org.apache.ivy.ant"
+	xmlns:artifact="antlib:org.apache.maven.artifact.ant"
+	>
+	<loadproperties srcFile="build.properties" />
+
+	<property name="jar.suffix" value="${project.version}-${project.status}" />
+	<property environment="env" />
+
+	<property name="src.base.dir" value="${basedir}/src" />
+
+	<property name="dist.dir" value="${basedir}/dist" />
+
+	<property name="build.base.dir" value="${basedir}/build" />
+	<property name="project.lib.dir" value="${build.base.dir}/lib" />
+	<property name="ivy.jar.path" value="${project.lib.dir}/ivy-${ivy.install.version}.jar" />
+	<property name="mainlibs.lib.dir" value="${project.lib.dir}/mainlibs" />
+	<property name="om.lib.dir" value="${project.lib.dir}/om" />
+	<property name="anakia.lib.dir" value="${project.lib.dir}/anakia" />
+	<property name="webcontent.base.dir" value="${basedir}/WebContent" />
+	
+	<property name="screenshare.resources.dir" value="${src.base.dir}/screenshare/resources" />
+	<property name="axis.resources.dir" value="${src.base.dir}/axis/resources" />
+	
+	<property name="webapp.dir" value="${src.base.dir}/main/webapp" />
+	<property name="junit.lib.dir" value="${project.lib.dir}/junit" />
+	<property name="junit.backups.dir" value="${junit.lib.dir}/backups" />
+	<property name="rat.lib.dir" value="${project.lib.dir}/rat" />
+	<property name="dtd-generator.lib.dir" value="${project.lib.dir}/dtd-generator" />
+	<property name="svntask.lib.dir" value="${project.lib.dir}/svntask" />
+	<property name="docs.dest" value="docs" />
+	<property name="docs.src" value="xdocs" />
+
+	<property name="red5.server.dir" value="${build.base.dir}/red5/server" />
+	<property name="red5.client.dir" value="${build.base.dir}/red5/client" />
+	<property name="red5.lib" value="${red5.server.dir}/dist" />
+	<property name="red5.server.lib" value="${red5.lib}/lib" />
+	<property name="red5.client.lib" value="${red5.client.dir}/dist" />
+	<property name="red5.root" value="${dist.dir}/red5" />
+	<property name="dist.webapps.dir" value="${red5.root}/webapps/${project.distname}" />
+	<property name="dist.classes.dir" value="${dist.webapps.dir}/WEB-INF/classes" />
+	<property name="dist.persistence.dir" value="${dist.classes.dir}/META-INF/" />
+
+	<property name="laszlo.home" value="${build.base.dir}/openlaszlo" />
+	<property name="laszlo46.home" value="${build.base.dir}/openlaszlo46" />
+
+	<!-- screenshare.out.dir -->
+	<property name="screenshare.out.dir" value="${dist.webapps.dir}/screensharing" />
+	
+	<condition property="junit.run.selenium" value="true" else="false">
+		<isset property="selenium" />
+	</condition>
+
+	<property name="main.out.dir" value="${build.base.dir}/classes/openmeetings" />
+
+	<!-- LPS Properties -->
+	<property name="out.dir.swf" value="${dist.webapps.dir}/public" />
+	<property name="laszlo.as3.src.dir" value="${webcontent.base.dir}/swf10" />
+	<property name="laszlo.src.dir" value="${webcontent.base.dir}/src" />
+
+	<property name="keystore.file" value="${build.base.dir}/screensharing_sign.keystore" />
+
+	<property name="junit.base.dir" value="${build.base.dir}/junit" />
+	<property name="junit.report.dir" value="${junit.base.dir}/report" />
+	<property name="om.dist.webapp" value="${red5.root}/webapps/${project.distname}" />
+	<tstamp prefix="build">
+		<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+	</tstamp>
+
+	<path id="laszlo.lib">
+		<!-- swf8 -->
+		<fileset dir="${laszlo.home}/WEB-INF/lib" includes="saxon-6.5.3-lz-p1.jar jakarta-regexp-1.2.jar
+			commons-collections.jar jdom.jar log4j-1.2.6.jar lps-4.9.0.jar batik-all-flex.jar velocity-dep-1.4-flex.jar" />
+		<!-- swf10 -->
+		<fileset dir="${laszlo.home}/WEB-INF/lib" includes="mxmlc*.jar flex-messaging-common.jar swfutils.jar asc.jar
+			fxgutils.jar" />
+	</path>
+
+	<path id="laszlo46.lib">
+		<fileset dir="${laszlo46.home}/WEB-INF/lib" includes="*.jar" />
+	</path>
+	
+	<!-- compile classpath -->
+	<path id="check.classpath">
+		<fileset dir="${red5.lib}" includes="*.jar" />
+		<fileset dir="${red5.server.lib}" includes="*.jar" />
+		<fileset dir="${red5.client.lib}" includes="red5-client*.jar" />
+		<fileset dir="${mainlibs.lib.dir}" includes="*.jar" />
+		<fileset dir="${om.lib.dir}" includes="*.jar" />
+		<fileset dir="${junit.lib.dir}" includes="*.jar" />
+		<fileset dir="${dtd-generator.lib.dir}" includes="*.jar" />
+		<fileset dir="${project.lib.dir}" includes="*.jar" />
+	</path>
+	<path id="compile.classpath">
+		<fileset dir="${red5.lib}/plugins" includes="*.jar" />
+		<fileset dir="${red5.server.dir}/target/lib" includes="junit*.jar" />
+		<path refid="check.classpath"/>
+	</path>
+	<path id="junit.classpath">
+		<fileset dir="${junit.lib.dir}" includes="*.jar" />
+		<fileset dir="${om.dist.webapp}/WEB-INF/lib">
+			<include name="*.jar" />
+			<exclude name="openmeetings*.jar" />
+		</fileset>
+		<fileset dir="${red5.root}" includes="*.jar" />
+		<fileset dir="${red5.root}/lib" includes="*.jar" />
+		<fileset dir="${red5.root}/plugins" includes="*.jar" />
+		<pathelement path="${dist.classes.dir}" />
+		<pathelement path="${main.out.dir}" />
+	</path>
+
+	<target name="info" unless="java7.installed">
+		<echo>Ant version is ${ant.version}</echo> <!-- output Ant version -->
+	</target>
+
+	<target name="prepare.mkdir" depends="-java7.check">
+		<mkdir dir="${red5.server.lib}" />
+		<mkdir dir="${red5.lib}/log" />
+		<mkdir dir="${red5.client.dir}/dist" />
+		<mkdir dir="${dist.dir}" />
+		<mkdir dir="${main.out.dir}" />
+		<mkdir dir="${mainlibs.lib.dir}" />
+		<mkdir dir="${om.lib.dir}" />
+		<mkdir dir="${anakia.lib.dir}" />
+		<mkdir dir="${junit.backups.dir}" />
+		<mkdir dir="${junit.report.dir}" />
+		<mkdir dir="${rat.lib.dir}" />
+		<mkdir dir="${dtd-generator.lib.dir}" />
+		<mkdir dir="${svntask.lib.dir}" />
+		<mkdir dir="${laszlo.home}" />
+		<mkdir dir="${laszlo46.home}" />
+		<echo file="${build.base.dir}/velocity.properties" append="false">runtime.log = ${build.base.dir}/velocity.log${line.separator}output.encoding=UTF-8${line.separator}</echo>
+	</target>
+
+	<!-- perform nightly build with tests -->
+	<target name="dist-bin-nightly" description="perform nightly build with tests" depends="dist-bin, test" />
+
+	<!-- build artefacts -->
+	<target name="dist-bin" description="pack binary distribution" depends="clean.all, dist">
+		<tstamp>
+			<format property="build.time" pattern="dd-MM-yyyy_HHmm" />
+		</tstamp>
+		<property name="archive.file.name" value="${dist.dir}/apache-${project.distname}-${project.version}.r${svn.info.rev}-${build.time}" />
+
+		<move file="${dist.dir}/red5/license.txt" tofile="${dist.dir}/red5/red5-license.txt" />
+		<copy file="build.properties" tofile="${build.base.dir}/build.properties" overwrite="true" />
+		<copy file="LICENSE" tofile="${dist.dir}/red5/LICENSE" overwrite="true" />
+		<copy file="NOTICE" tofile="${dist.dir}/red5/NOTICE" overwrite="true" />
+		<copy file="README" tofile="${dist.dir}/red5/README" overwrite="true" />
+		<copy file="CHANGELOG" tofile="${dist.dir}/red5/CHANGELOG" overwrite="true" />
+
+		<echo file="${build.base.dir}/build.properties" append="true">svn.info.rev=${svn.info.rev}${line.separator}</echo>
+		<tar longfile="gnu" compression="gzip" destfile="${archive.file.name}-src.tar.gz">
+			<tarfileset dir="${basedir}">
+				<exclude name="build/**" />
+				<exclude name="dist/**" />
+				<exclude name="build.properties" />
+			</tarfileset>
+			<tarfileset dir="${build.base.dir}">
+				<include name="build.properties" />
+			</tarfileset>
+		</tar>
+		<tar longfile="gnu" compression="gzip" destfile="${archive.file.name}.tar.gz">
+			<tarfileset dir="${dist.dir}/red5">
+				<include name="**" />
+				<exclude name="*.sh" />
+			</tarfileset>
+			<tarfileset dir="${dist.dir}/red5" filemode="755">
+				<include name="*.sh" />
+			</tarfileset>
+		</tar>
+	</target>
+	
+	<!-- build artefacts -->
+	<target name="dist-release" description="pack binary distribution">
+		<property name="archive.file.name" value="${dist.dir}/apache-${project.distname}-${project.version}" />
+		<antcall target="dist-bin" />
+		<zip destfile="${archive.file.name}.zip">
+			<zipfileset dir="${dist.dir}/red5">
+				<include name="**" />
+				<exclude name="*.sh" />
+			</zipfileset>
+			<zipfileset dir="${dist.dir}/red5" filemode="755">
+				<include name="*.sh" />
+			</zipfileset>
+		</zip>
+		<zip destfile="${archive.file.name}-src.zip">
+			<zipfileset dir="${basedir}">
+				<exclude name="build/**" />
+				<exclude name="dist/**" />
+				<exclude name="build.properties" />
+			</zipfileset>
+			<zipfileset dir="${build.base.dir}">
+				<include name="build.properties" />
+			</zipfileset>
+		</zip>
+	</target>
+
+	<!-- build webapp -->
+	<target name="-copy-libraries" description="All jars downloaded by ivy copied to appropriate places">
+		<copy todir="${red5.root}/lib">
+			<fileset dir="${mainlibs.lib.dir}" includes="*.jar" />
+		</copy>
+		<copy todir="${dist.webapps.dir}/WEB-INF/lib">
+			<fileset dir="${om.lib.dir}" includes="*.jar" />
+		</copy>
+		<chmod dir="${dist.webapps.dir}/WEB-INF/lib" perm="755" includes="**/*.sh" />
+	</target>
+
+	<target name="dist" description="binary distribution of OpenMeetings" depends="clean, jar, client.only, enhance, -copy-libraries, signWebStartJars" />
+
+	<!-- compiles the sources without openlaszlo client -->
+	<target name="dist-test" description="binary distribution of OpenMeetings" depends="clean, -dist-test-no-clean, signWebStartJars" />
+
+	<!-- compiles the sources without openlaszlo client and clean -->
+	<target name="-dist-test-no-clean" description="binary distribution of OpenMeetings" depends="jar, -copy-libraries" />
+
+	<!-- compiles the sources only with laszlo debug client -->
+	<target name="dist-debug" description="binary distribution of OpenMeetings" depends="clean, jar, client.debug.only, -copy-libraries, signWebStartJars" />
+
+	<target name="-cleanup-jrebel" unless="jrebel.enabled">
+		<delete>
+			<fileset dir="${dist.classes.dir}" includes="rebel*.xml" />
+		</delete>
+	</target>
+	
+	<target name="web.copy" depends="-process-db">
+		<copy todir="${dist.webapps.dir}" overwrite="true" force="true">
+			<fileset dir="${webapp.dir}" />
+		</copy>
+		<filter token="wicket.mode" value="${wicket.mode}" />
+		<copy todir="${dist.webapps.dir}/WEB-INF" filtering="true" overwrite="true" force="true">
+			<fileset file="${webapp.dir}/WEB-INF/web.xml" />
+		</copy>
+		<copy todir="${dist.classes.dir}">
+			<fileset dir="${src.base.dir}/web/java">
+				<include name="**/*.html" />
+				<include name="**/*.xml" />
+				<include name="**/*.js" />
+				<include name="**/*.css" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<!-- Check timestamp on files -->
+	<target name="prepare" depends="prepare.mkdir,web.copy">
+		<copy todir="${red5.root}">
+			<fileset dir="${red5.lib}">
+				<exclude name="**/*.fla" />
+			</fileset>
+		</copy>
+
+		<antcall target="-cleanup-jrebel" />
+		<chmod dir="${red5.root}" perm="755" includes="**/*.sh" />
+		<tstamp />
+	</target>
+
+	<!-- Copy any resource or configuration files -->
+	<target name="vmresources">
+		<copy todir="${main.out.dir}" includeEmptyDirs="yes" force="true" overwrite="true">
+			<fileset dir="${src.base.dir}">
+				<include name="**/*.vm" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="resources" depends="prepare.jnlp">
+		<patternset id="xmlpng">
+			<include name="**/*.xml" />
+			<include name="**/*.png" />
+		</patternset>
+		<patternset id="xmlpngconf">
+			<patternset refid="xmlpng" />
+			<include name="**/*.conf" />
+			<include name="**/*.properties" />
+		</patternset>
+
+		<!-- Main Applications -->
+		<copy todir="${main.out.dir}" includeEmptyDirs="yes">
+			<fileset dir="${src.base.dir}">
+				<patternset refid="xmlpngconf" />
+			</fileset>
+		</copy>
+		<!-- Screen Share resources -->
+		<copy todir="${main.out.dir}">
+			<fileset dir="${src.base.dir}/screenshare/java">
+				<include name="**/*.png" />
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="web.only" depends="jar.web.only, web.copy"/>
+	
+	<target name="prepare.jnlp" depends="vmresources">
+		<copy todir="${screenshare.out.dir}" overwrite="true" force="true">
+			<fileset dir="${red5.server.lib}" includes="commons-codec*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-beanutils*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-collections*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-lang3*.jar" />
+			<fileset dir="${red5.server.lib}" includes="httpclient*.jar" />
+			<fileset dir="${red5.server.lib}" includes="httpcore*.jar" />
+			<fileset dir="${red5.server.lib}" includes="bcprov*.jar" />
+			<fileset dir="${red5.server.lib}" includes="ehcache-core*.jar" />
+			<fileset dir="${red5.server.lib}" includes="slf4j-api*.jar" />
+			<fileset dir="${red5.server.lib}" includes="jcl-over-slf4j*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-context-4*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-core-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-beans-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="logback*.jar" />
+			<fileset dir="${red5.server.lib}" includes="mina-core*.jar" />
+			<fileset dir="${red5.server.lib}" includes="quartz-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="red5-io*.jar" />
+			<fileset dir="${red5.server.lib}" includes="red5-server-common*.jar" />
+			<fileset dir="${red5.client.lib}" includes="red5*.jar" />
+		</copy>
+		<delete>
+			<fileset dir="${screenshare.out.dir}" includes="${project.distname}-screenshare*.jar" />
+		</delete>
+		<fileset id="screenshare.jars" dir="${screenshare.out.dir}" casesensitive="yes">
+			<include name="**/*.jar"/>
+		</fileset>
+		<pathconvert pathsep="&quot;/&gt;&lt;jar href=&quot;" targetos="unix" property="dependencies" refid="screenshare.jars">
+			<map from="${screenshare.out.dir}/" to=""/>
+		</pathconvert>
+		<echo>dependencies = &lt;jar href=&quot;${dependencies}&quot;/&gt;&lt;jar href=&quot;${project.distname}-screenshare-${jar.suffix}.jar&quot;/&gt;</echo>
+		<replace file="${main.out.dir}/screenshare.vm" token="$dependencies" value="&lt;jar href=&quot;${dependencies}&quot;/&gt;&lt;jar href=&quot;${project.distname}-screenshare-${jar.suffix}.jar&quot;/&gt;"/>
+		<mkdir dir="${main.out.dir}/JNLP-INF"/>
+		<property name="app.template.jnlp" value="${main.out.dir}/JNLP-INF/APPLICATION-TEMPLATE.JNLP"/>
+		<copy file="${main.out.dir}/screenshare.vm" tofile="${app.template.jnlp}" overwrite="true" force="true"/>
+		<replace file="${app.template.jnlp}" token="$codebase" value="*"/>
+		<replace file="${app.template.jnlp}" token="$codebase" value="*"/>
+		<replace file="${app.template.jnlp}" token="$APP_NAME" value="*"/>
+		<replace file="${app.template.jnlp}" token="$protocol" value="*"/>
+		<replace file="${app.template.jnlp}" token="$host" value="*"/>
+		<replace file="${app.template.jnlp}" token="$port" value="*"/>
+		<replace file="${app.template.jnlp}" token="$app" value="*"/>
+		<replace file="${app.template.jnlp}" token="$userId" value="*"/>
+		<replace file="${app.template.jnlp}" token="$publicSid" value="*"/>
+		<replace file="${app.template.jnlp}" token="$labels" value="*"/>
+		<replace file="${app.template.jnlp}" token="$defaultQuality" value="*"/>
+		<replace file="${app.template.jnlp}" token="$defaultFps" value="*"/>
+		<replace file="${app.template.jnlp}" token="$showFps" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowRemote" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowRecording" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowPublishing" value="*"/>
+		<replace file="${app.template.jnlp}" token="$keystore" value="*"/>
+		<replace file="${app.template.jnlp}" token="$password" value="*"/>
+	</target>
+		
+	<target name="jar.web.only" depends="enhance.only.norefresh, current_revision, prepare.jnlp">
+		<manifestclasspath property="jar.classpath" jarfile="${project.distname}-${jar.suffix}.jar">
+			<classpath refid="compile.classpath" />
+		</manifestclasspath>
+		
+		<!-- Core/main -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-core-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/**" />
+				<include name="*.vm" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+				<exclude name="org/apache/openmeetings/util/**" />
+				<exclude name="org/apache/openmeetings/test/**" />
+				<exclude name="org/apache/openmeetings/axis/**" />
+				<exclude name="org/apache/openmeetings/db/**" />
+				<exclude name="org/apache/openmeetings/cli/**" />
+				<exclude name="org/apache/openmeetings/backup/**" />
+				<exclude name="org/apache/openmeetings/installation/**" />
+				<exclude name="org/apache/openmeetings/screen/**" />
+				<exclude name="org/apache/openmeetings/doc/**" />
+				<exclude name="org/apache/openmeetings/web/**" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- DB package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-db-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/db/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- Install / CLI package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-cli-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/cli/**" />
+				<include name="org/apache/openmeetings/backup/**" />
+				<include name="org/apache/openmeetings/installation/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- Util package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-util-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/util/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- web package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-web-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/web/**" />
+				<exclude name="*.xml" />
+				<exclude name="*.html" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+
+		<!-- Build WebServices -->
+		<property name="om_aar_name" value="${project.distname}-${jar.suffix}.aar"/>
+		<property name="om_aar_folder" value="${dist.webapps.dir}/WEB-INF/services"/>
+		<jar destfile="${om_aar_folder}/${om_aar_name}">
+			<fileset dir="${main.out.dir}">
+				<include name="META-INF/*" />
+			</fileset>
+		</jar>
+		<echo file="${om_aar_folder}/services.list" append="false">${om_aar_name}${line.separator}version.aar${line.separator}</echo>
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-axis-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="**/apache/openmeetings/axis/**" />
+				<include name="META-INF/LICENSE" />
+				<include name="META-INF/NOTICE" />
+			</fileset>
+		</jar>
+	</target>
+
+	<target name="jar.only" depends="buildJavaDocs, enhance.only, jar.web.only"/>
+
+	<target name="dist.screen.share" description="Make Screen Share Archive" depends="signWebStartJars" />
+
+	<tstamp prefix="screensharing.build">
+		<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+	</tstamp>
+	<target name="jar.screen.share" description="Make Screen Share Archive" depends="compile.only">
+		<manifestclasspath property="jar2.classpath" jarfile="${project.distname}.jar">
+			<classpath refid="compile.classpath" />
+		</manifestclasspath>
+		<!-- Screen Share -->
+		<jar destfile="${screenshare.out.dir}/${project.distname}-screenshare-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/screen/**" />
+				<include name="JNLP-INF/*" />
+				<include name="META-INF/LICENSE" />
+				<include name="META-INF/NOTICE" />
+			</fileset>
+			<fileset file="${screenshare.resources.dir}/logback.xml" />
+			<fileset file="${screenshare.resources.dir}/quartz.*" />
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${screensharing.build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar2.classpath}" />
+				<attribute name="Permissions" value="all-permissions" />
+				<attribute name="Codebase" value="*" />
+				<attribute name="Application-Library-Allowable-Codebase" value="*" />
+				<attribute name="Caller-Allowable-Codebase" value="*" />
+			</manifest>
+		</jar>
+	</target>
+	
+	<target name="buildJavaDocs">
+		<tstamp prefix="doc">
+			<format property="TODAY_YEAR" pattern="yyyy" locale="en" />
+		</tstamp>
+	    <javadoc packagenames="org.apache.openmeetings.remote.*"
+	           sourcepath="${src.base.dir}/axis/java:${src.base.dir}/db/java:${src.base.dir}/doc/java:${src.base.dir}/install/java:${src.base.dir}/main/java:${src.base.dir}/screenshare/java:${src.base.dir}/util/java:${src.base.dir}/web/java"
+	           excludepackagenames="org.apache.openmeetings.test.*"
+	           defaultexcludes="yes"
+	           destdir="build/api"
+	           author="true"
+	           version="true"
+	           use="true"
+	           windowtitle="Apache OpenMeetings API">
+	    	<classpath refid="compile.classpath"></classpath>
+	        <doctitle><![CDATA[<h1>Apache OpenMeetings API</h1>]]></doctitle>
+	    	<bottom><![CDATA[<i>Copyright &copy; 2000-${doc.TODAY_YEAR} The Apache Software Foundation. All rights Reserved.</i>]]></bottom>
+	  	</javadoc>
+	</target>
+
+	<!-- Compile JAR -->
+	<target name="jar" description="Make Archive" depends="enhance, build.only.webservice.doc, jar.only, jar.screen.share">
+		<tstamp prefix="build">
+			<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+		</tstamp>
+	</target>
+
+	<target name="generateSignKey"  unless="skip.sign.key.generation">
+		<delete file="${keystore.file}" />
+		<genkey alias="${screensharing.keystore.alias}" storepass="${screensharing.keystore.password}" keystore="${keystore.file}"
+			verbose="true" sigalg="MD5withRSA" keyalg="RSA" >
+			<dname>
+				<param name="CN" value="Sebastian Wagner" />
+				<param name="OU" value="technology" />
+				<param name="O" value="openmeetings.apache.org" />
+				<param name="C" value="DE" />
+			</dname>
+		</genkey>
+	</target>
+	
+	<target name="repackWebStartJars" depends="jar.screen.share">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="check.classpath" />
+		</taskdef>
+		<foreach target="-repack-jar" param="theJar">
+			<fileset dir="${screenshare.out.dir}" casesensitive="yes">
+				<include name="*.jar"/>
+				<exclude name="*openmeetings*.jar"/>
+			</fileset>
+		</foreach>
+	</target>
+	
+	<target name="signWebStartJars" depends="generateSignKey,repackWebStartJars">
+		<signjar alias="${screensharing.keystore.alias}" keystore="${keystore.file}" storepass="${screensharing.keystore.password}"
+			lazy="false" sigalg="MD5withRSA" digestalg="SHA1">
+			<path>
+				<fileset dir="${screenshare.out.dir}">
+					<include name="**/*.jar" />
+				</fileset>
+			</path>
+		</signjar>
+	</target>
+
+	<target name="-repack-jar">
+		<echo message="${theJar}"/>
+		<delete dir="${screenshare.out.dir}/1" />
+		<mkdir dir="${screenshare.out.dir}/1" />
+		<unjar src="${theJar}" dest="${screenshare.out.dir}/1"/>
+		<delete dir="${screenshare.out.dir}/1/META-INF" includes="*"/>
+		<delete file="${theJar}" />
+		<jar destfile="${theJar}">
+			<fileset dir="${screenshare.out.dir}/1">
+				<include name="**" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${screensharing.build.TODAY}" />
+				<attribute name="Permissions" value="all-permissions" />
+				<attribute name="Codebase" value="*" />
+				<attribute name="Application-Library-Allowable-Codebase" value="*" />
+				<attribute name="Caller-Allowable-Codebase" value="*" />
+			</manifest>
+		</jar>
+		<delete dir="${screenshare.out.dir}/1" />
+	</target>
+	
+	<target name="client.only" depends="compile.laszlo.main.as3,compile.laszlo.main,compile.laszlo.networktesting" />
+
+	<target name="client.debug.only" depends="compile.laszlo.main.debug.as3,compile.laszlo.main.debug,compile.laszlo.networktesting.debug" />
+
+	<target name="-compile.flash" description="compile flash application">
+		<!-- commented for now
+		<echo message="flash.src.dir == '${flash.src.dir}'" />
+		<echo message="classpathref == '${flash.classpath.ref}'" />
+		<echo message="laszlo.home == '${flash.lps.home}'" />
+		<echo message="flash.debug == '${flash.debug}'" />
+		<echo message="laszlo.proxied == '${laszlo.proxied}'" />
+		<echo message="flash.runtime == '${flash.runtime}'" />
+		<echo message="out.dir.swf == '${out.dir.swf}'" />
+		<echo message="flash.main.file == '${flash.main.file}'" />
+		<echo message="flash.out.file == '${flash.out.file}'" />
+		-->
+		<java classname="org.openlaszlo.compiler.Main" fork="true" newenvironment="true" failonerror="true" dir="${flash.src.dir}" classpathref="${flash.classpath.ref}">
+			<jvmarg value="-DLPS_HOME=${flash.lps.home}" />
+			<jvmarg value="-Dlzdebug=false" />
+			<jvmarg value="-Dlzproxied=${laszlo.proxied}" />
+			<jvmarg value="-Xms512M" />
+			<jvmarg value="-Xmx512M" />
+			<arg line="--runtime=${flash.runtime} ${flash.debug} --dir &quot;${out.dir.swf}&quot; --onerror warn ${flash.main.file} -o ${flash.out.file}" />
+		</java>
+	</target>
+
+	<target name="compile.laszlo.networktesting" depends="compile.laszlo.networktesting.debug">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}/networkTesting" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf10" />
+			<param name="flash.main.file" value="networktesting.lzx" />
+			<param name="flash.out.file" value="networktesting.swf10.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.networktesting.debug" depends="-retrieve-openlaszlo">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}/networkTesting" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf10" />
+			<param name="flash.main.file" value="networktesting.lzx" />
+			<param name="flash.out.file" value="networktestingdebug.swf10.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.testsetup.as3" depends="-retrieve-openlaszlo46">
+        <antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+            <param name="flash.classpath.ref" value="laszlo46.lib" />
+            <param name="flash.src.dir" value="${laszlo.src.dir}" />
+            <param name="flash.lps.home" value="${laszlo46.home}" />
+            <param name="flash.runtime" value="swf11" />
+            <param name="flash.main.file" value="test/test-setup.lzx" />
+            <param name="flash.out.file" value="test-setup.as3.swf11.swf" />
+            <param name="flash.debug" value="" />
+        </antcall>
+    </target>
+
+	<target name="compile.laszlo.main.as3" depends="compile.laszlo.main.debug.as3">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo46.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo46.home}" />
+			<param name="flash.runtime" value="swf11" />
+			<param name="flash.main.file" value="main.as3.lzx" />
+			<param name="flash.out.file" value="main.as3.swf11.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main.debug.as3" depends="-retrieve-openlaszlo46">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo46.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo46.home}" />
+			<param name="flash.runtime" value="swf11" />
+			<param name="flash.main.file" value="main.as3.lzx" />
+			<param name="flash.out.file" value="maindebug.as3.swf11.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main" depends="compile.laszlo.main.debug">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf8" />
+			<param name="flash.main.file" value="main.lzx" />
+			<param name="flash.out.file" value="main.swf8.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main.debug" depends="-retrieve-openlaszlo">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf8" />
+			<param name="flash.main.file" value="main.lzx" />
+			<param name="flash.out.file" value="maindebug.swf8.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile" depends="compile.only, prepare" />
+
+	<target name="compile.only"
+		depends="-retrieve-mainlibs,-retrieve-om,-retrieve-dtd-generator,-retrieve-junit,-retrieve-cmdadmin,-retrieve-tools.jar,compile.only.nocheck,resources"/>
+	
+	<target name="compile.only.nocheck" depends="clean.classes">
+		<antcall target="prepare.mkdir" inheritAll="true" inheritRefs="true"/>
+		<echo message="Compile main to ${main.out.dir}" />
+		<javac debug="on" debuglevel="lines,vars,source" destdir="${main.out.dir}" includeantruntime="false"
+			source="1.7" target="1.7">
+			<src path="${src.base.dir}/axis/java" />
+			<src path="${src.base.dir}/db/java" />
+			<src path="${src.base.dir}/doc/java" />
+			<src path="${src.base.dir}/install/java" />
+			<src path="${src.base.dir}/main/java" />
+			<src path="${src.base.dir}/test/java" />
+			<src path="${src.base.dir}/screenshare/java" />
+			<src path="${src.base.dir}/util/java" />
+			<src path="${src.base.dir}/web/java" />
+			<classpath refid="compile.classpath" />
+			<compilerarg value="-Aopenjpa.metamodel=true" />
+			<!-- compilerarg value="-Xlint:deprecation"/ -->
+		</javac>
+		<copy todir="${main.out.dir}">
+			<fileset dir="${src.base.dir}/main/java">
+				<include name="**/*.*" />
+				<exclude name="**/*.java" />
+			</fileset>
+		</copy>
+		<copy file="${axis.resources.dir}/services.xml" tofile="${main.out.dir}/META-INF/services.xml" overwrite="true" />
+		<copy file="LICENSE" tofile="${main.out.dir}/META-INF/LICENSE" overwrite="true" />
+		<copy file="NOTICE" tofile="${main.out.dir}/META-INF/NOTICE" overwrite="true" />
+	</target>
+
+	<path id="jpa.enhancement.classpath">
+		<pathelement path="${main.out.dir}" />
+		<path refid="compile.classpath" />
+	</path>
+
+	<target name="enhance" depends="compile, enhance.only" />
+
+	<target name="enhance.only" depends="compile.only">
+		<!-- define the openjpac task -->
+		<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
+			<classpath refid="jpa.enhancement.classpath" />
+		</taskdef>
+
+		<!-- invoke the enhancer -->
+		<openjpac>
+			<classpath refid="jpa.enhancement.classpath" />
+			<config propertiesFile="${dist.persistence.dir}/${db}_persistence.xml" />
+		</openjpac>
+		<echo message="Enhancing complete." />
+	</target>
+	
+	<target name="enhance.only.norefresh" depends="compile.only.nocheck">
+		<!-- define the openjpac task -->
+		<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
+			<classpath refid="jpa.enhancement.classpath" />
+		</taskdef>
+
+		<!-- invoke the enhancer -->
+		<openjpac>
+			<classpath refid="jpa.enhancement.classpath" />
+			<config propertiesFile="${dist.persistence.dir}/${db}_persistence.xml" />
+		</openjpac>
+		<echo message="Enhancing complete." />
+	</target>
+
+	<path id="svntask.classpath">
+		<fileset dir="${svntask.lib.dir}" includes="*.jar" />
+	</path>
+	<target name="-ant-task" depends="-retrieve-svntask">
+		<typedef resource="org/tigris/subversion/svnant/svnantlib.xml">
+			<classpath>
+				<path refid="svntask.classpath" />
+			</classpath>
+		</typedef>
+		<svnSetting svnkit="false" javahl="false" id="svn.settings" />
+		<!-- native svn in the path-->
+	</target>
+	<target name="current_revision" depends="-ant-task" unless="svn.info.rev">
+		<svn refid="svn.settings">
+			<info target="." />
+		</svn>
+		<echo>Current revision: ${svn.info.rev}</echo>
+	</target>
+
+	<!-- Build entire project -->
+	<target name="build project" depends="clean, prepare, compile" />
+
+	<path id="check.rat.classpath">
+		<fileset dir="${rat.lib.dir}" includes="*.jar" />
+	</path>
+	<path id="rat.classpath">
+		<path refid="compile.classpath" />
+		<path refid="check.rat.classpath" />
+	</path>
+	<target name="report_rat" depends="-retrieve-rat">
+		<!-- define the RAT task -->
+		<taskdef uri="antlib:org.apache.rat.anttasks" resource="org/apache/rat/anttasks/antlib.xml">
+			<classpath>
+				<path refid="rat.classpath" />
+			</classpath>
+		</taskdef>
+
+		<rat:report>
+			<rat:substringMatcher licenseFamilyCategory="JQUERY_MIT" licenseFamilyName="jQuery UI CSS MIT">
+				<pattern substring="Copyright 2014 jQuery Foundation and other contributors; Licensed MIT"/>
+			</rat:substringMatcher>
+			<rat:substringMatcher licenseFamilyCategory="JQUERY_MIT" licenseFamilyName="jQuery UI Menubar MIT">
+				<pattern substring="Dual licensed under the MIT or GPL Version 2"/>
+			</rat:substringMatcher>
+			<rat:approvedLicense familyName="jQuery UI CSS MIT"/>
+			<rat:approvedLicense familyName="jQuery UI Menubar MIT"/>
+			<fileset dir="${src.base.dir}" />
+			<fileset dir="${webcontent.base.dir}" excludes="**/*.swf" />
+			<fileset dir="${docs.src}" />
+		</rat:report>
+	</target>
+
+	<path id="build.webservice.classpath">
+		<pathelement path="${main.out.dir}" />
+		<path refid="compile.classpath" />
+	</path>
+
+	<target name="build.webservice.doc" depends="compile.only, build.only.webservice.doc"/>
+
+	<patternset id="images">
+		<include name="**/*.gif" />
+		<include name="**/*.jpeg" />
+		<include name="**/*.jpg" />
+		<include name="**/*.png" />
+	</patternset>
+	<patternset id="css">
+		<include name="**/*.css" />
+		<include name="**/*.gif" />
+		<include name="**/*.png" />
+	</patternset>
+
+	<!-- Anakia Build classpath -->
+	<path id="check.anakia.classpath">
+		<fileset dir="${anakia.lib.dir}" includes="*.jar" />
+		<fileset dir="${mainlibs.lib.dir}" includes="commons-collections*.jar,commons-lang*.jar,velocity*.jar" />
+	</path>
+	
+	<path id="anakia.classpath">
+		<path refid="compile.classpath" />
+		<path refid="check.anakia.classpath" />
+	</path>
+
+	<target name="anakia" depends="-retrieve-mainlibs,-retrieve-om,-retrieve-anakia">
+		<taskdef name="anakia" classname="org.apache.anakia.AnakiaTask">
+			<classpath>
+				<path refid="anakia.classpath" />
+			</classpath>
+		</taskdef>
+
+		<xslt in="${webapp.dir}/languages/errorvalues.xml" out="${docs.src}/ErrorsTable.xml" style="${docs.src}/stylesheets/errortable.xsl" />
+		<anakia basedir="${docs.src}" destdir="${docs.dest}/" extension=".html" style="./site.vsl" projectFile="stylesheets/project.xml" excludes="**/stylesheets/** empty.xml" includes="**/*.xml" lastModifiedCheck="true" templatePath="xdocs/stylesheets" velocityPropertiesFile="${build.base.dir}/velocity.properties" />
+		<copy todir="${docs.dest}/images">
+			<fileset dir="${docs.src}/images">
+				<patternset refid="images" />
+			</fileset>
+		</copy>
+
+		<copy todir="${docs.dest}/css">
+			<fileset dir="${docs.src}/css">
+				<patternset refid="css" />
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.only.webservice.doc" depends="anakia">
+		<javadoc classpathref="build.webservice.classpath" useexternalfile="true" destdir="${basedir}/docs">
+			<fileset dir="${src.base.dir}/axis/java/org/apache/openmeetings/axis/services">
+				<include name="*WebService.java" />
+				<exclude name="BaseWebService.java" />
+			</fileset>
+			<doclet name="org.apache.openmeetings.doc.WebServiceDoclet" pathref="build.webservice.classpath" />
+		</javadoc>
+
+		<copy todir="${dist.webapps.dir}/docs">
+			<fileset dir="${basedir}/docs/">
+				<include name="*.html" />
+				<include name="*.css" />
+			</fileset>
+		</copy>
+		<copy todir="${dist.webapps.dir}/docs/images">
+			<fileset dir="${basedir}/docs/images/">
+				<patternset refid="images" />
+			</fileset>
+		</copy>
+		<copy todir="${dist.webapps.dir}/docs/css">
+			<fileset dir="${basedir}/docs/css/">
+				<patternset refid="css" />
+			</fileset>
+		</copy>
+		<copy todir="${dist.webapps.dir}/docs/js">
+			<fileset dir="${basedir}/docs/js/">
+				<include name="**/*.js" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<!-- 
+		Prepare selenium tests by starting up an OpenMeetings instance
+		
+		makes a stop command before starting up to make sure no other is running
+	 -->
+	
+	<target name="prepare-selenium-start-openmeetings" description="Prepare selenium tests by starting up an OpenMeetings instance" 
+		depends="-prepare-selenium-port-properties, prepare-selenium-stop-openmeetings" >
+		<exec dir="${dist.dir}/testred5" executable="red5-highperf.bat" osfamily="windows" output="${dist.dir}/testred5/red5_system.log">
+		</exec>
+		<!--this does only make sense if the unix executable is run obviously, however we do it for all -->
+		<chmod dir="${dist.dir}/testred5" perm="755" includes="**/*.sh" />
+		<exec dir="${dist.dir}/testred5" executable="/bin/bash" osfamily="unix" output="${dist.dir}/testred5/red5_system.log">
+			<arg value="red5-highperf.sh"/> 
+		</exec>
+		<!-- start up does take some time -->
+		<sleep seconds="30" />
+	</target>
+	
+	<target name="prepare-selenium-stop-openmeetings" description="Prepare selenium tests by starting up an OpenMeetings instance" >
+		<exec dir="${dist.dir}/testred5" executable="red5-shutdown.bat" osfamily="windows" output="${dist.dir}/testred5/red5_system.log">
+		</exec>
+		<!--this does only make sense if executed on unix(Linux or OSX are both unix style) is run obviously, 
+			however we do it for all for now -->
+		<chmod dir="${dist.dir}/testred5" perm="755" includes="**/*.sh" />
+		<exec dir="${dist.dir}/testred5" executable="/bin/bash" osfamily="unix" output="${dist.dir}/testred5/red5_system.log">
+			<arg value="red5-shutdown.sh"/> 
+		</exec>
+		<!-- stop up does take a bit of time -->
+		<sleep seconds="10" />
+	</target>
+	
+	<target name="prepare-selenium-test-database" description="Prepare selenium database script">
+		<java classname="org.apache.openmeetings.test.derby.PrepareSystemFiles">
+			<!-- the home directory of the test instance of red5 -->
+	        <arg value="${dist.dir}/testred5/webapps/openmeetings"/>
+			<!-- the directory where the openmeetings database is created by derby -->
+			<arg value="${dist.dir}/testred5/"/>
+			<!-- the persistance file to patch -->
+			<arg value="${basedir}/src/main/webapp/WEB-INF/classes/META-INF/persistence.xml"/>
+			<classpath refid="junit.classpath" />
+		</java>
+	</target>
+
+	<target name="debug-prepare-selenium-copy-test-instance" depends="-prepare-selenium-copy-test-instance"/>
+	
+	<target name="-prepare-selenium-copy-test-instance" description="Prepare selenium tests by starting up an OpenMeetings instance">
+		<copy todir="${dist.dir}/testred5">
+			<fileset dir="${dist.dir}/red5">
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="-prepare-selenium-port-properties" description="Set the http port to some exotic numbers so that we don't conflict with anything" 
+			depends="-prepare-selenium-copy-test-instance">
+		<replace dir="${dist.dir}/testred5/conf" value="http.port=20080">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>http.port=5080</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="https.port=20443">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>https.port=5443</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmp.port=20935">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmp.port=1935</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmps.port=20443">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmps.port=8443</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmpt.port=20088">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmpt.port=8088</replacetoken>
+		</replace>
+	</target>
+	
+	<target name="run-selenium" depends="-dist-test-no-clean, -run-selenium-junit"/>
+	
+	<target name="-run-selenium" if="${junit.run.selenium}" >
+		<antcall target="-run-selenium-junit"></antcall>
+	</target>
+	
+	<target name="-run-selenium-junit" depends="prepare-selenium-start-openmeetings" 
+			description="Will run all selenium tests unless -Dtestcases=_file_name_pattern_ will be passed">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="junit.classpath" />
+		</taskdef>
+		<mkdir dir="${junit.report.dir}" />
+		
+		<junit maxmemory="1024m" printsummary="yes" dir="${junit.base.dir}" tempdir="${junit.base.dir}" fork="yes" 
+			forkmode="perBatch" failureproperty="junit.failed" errorproperty="junit.error">
+			<classpath refid="junit.classpath" />
+			<jvmarg value="-Dom.home=${om.dist.webapp}" />
+			<jvmarg value="-Dlanguages.home=${webapp.dir}/languages" />
+			<jvmarg value="-Dred5.root=${red5.root}" />
+			<jvmarg value="-Dbasedir=${basedir}" />
+			<jvmarg value="-Dred5.config_root=${red5.root}/conf" />
+			<jvmarg value="-Dbackups.dir=${junit.backups.dir}" />
+			<formatter type="${junit.test.formatter}" />
+			<batchtest todir="${junit.report.dir}">
+				<fileset dir="${main.out.dir}">
+					<include name="org/apache/openmeetings/test/selenium/${junit.test.pattern}.class" />
+					<exclude name="**/*$$*.class" />
+				</fileset>
+			</batchtest>
+		</junit>
+		
+		<junitreport todir="${junit.report.dir}">
+			<fileset dir="${junit.report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report todir="${junit.report.dir}" />
+		</junitreport>
+		<fail message="Errors/failures in JUnit tests.">
+			<condition>
+				<or>
+					<isset property="junit.failed"/>
+					<isset property="junit.error"/>
+				</or>
+			</condition>
+		</fail>
+	</target>
+
+	<!-- Unit Tests -->
+	<condition property="junit.test.pattern" value="${testcases}" else="Test*">
+		<isset property="testcases" />
+	</condition>
+
+	<condition property="junit.test.formatter" value="${test.formatter}" else="xml">
+		<isset property="test.formatter" />
+	</condition>
+
+	<target name="test" depends="-dist-test-no-clean, -run-selenium" 
+			description="Will run all tests except selenium unless -Dtestcases=_file_name_pattern_ will be passed">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="junit.classpath" />
+		</taskdef>
+		<for list="${backup.file.list}" param="prop">
+			<sequential>
+				<if>
+					<not>
+						<available file="${junit.backups.dir}/@{prop}" type="file" />
+					</not>
+					<then>
+						<echo message="Backup file @{prop} does not exists. Downloading ..." />
+						<get src="https://dl.bintray.com/openmeetings/generic/backups/@{prop}" dest="${junit.backups.dir}" usetimestamp="true"/>
+					</then>
+				</if>
+			</sequential>
+		</for>
+		<mkdir dir="${junit.report.dir}" />
+		<!-- property name="myclsp" refid="junit.classpath" />
+		<echo message="${myclsp}" /-->
+		<junit maxmemory="1024m" printsummary="yes" dir="${junit.base.dir}" tempdir="${junit.base.dir}" fork="yes" 
+			forkmode="perBatch" failureproperty="junit.failed" errorproperty="junit.error">
+			<classpath refid="junit.classpath" />
+			<jvmarg value="-Dom.home=${om.dist.webapp}" />
+			<jvmarg value="-Dlanguages.home=${webapp.dir}/languages" />
+			<jvmarg value="-Dred5.root=${red5.root}" />
+			<jvmarg value="-Dbasedir=${basedir}" />
+			<jvmarg value="-Dred5.config_root=${red5.root}/conf" />
+			<jvmarg value="-Dbackups.dir=${junit.backups.dir}" />
+			<formatter type="${junit.test.formatter}" />
+			<batchtest todir="${junit.report.dir}">
+				<fileset dir="${main.out.dir}">
+					<include name="org/apache/openmeetings/test/**/${junit.test.pattern}.class" />
+					<exclude name="org/apache/openmeetings/test/selenium/${junit.test.pattern}.class" />
+					<exclude name="**/*$$*.class" />
+				</fileset>
+			</batchtest>
+		</junit>
+		
+		<junitreport todir="${junit.report.dir}">
+			<fileset dir="${junit.report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report todir="${junit.report.dir}" />
+		</junitreport>
+		<fail message="Errors/failures in JUnit tests.">
+			<condition>
+				<or>
+					<isset property="junit.failed"/>
+					<isset property="junit.error"/>
+				</or>
+			</condition>
+		</fail>
+	</target>
+	<target name="smoke.test" depends="dist" description="Will run 'Smoke' subset of tests">
+		<antcall target="test">
+			<param name="junit.test.pattern" value="TestSmoke*" />
+		</antcall>
+	</target>
+
+	<target name="-check-ivy-installed">
+		<available file="${ivy.jar.path}" type="file" property="ivy.installed" />
+	</target>
+	<target name="-download-ivy" depends="-check-ivy-installed" unless="ivy.installed">
+		<mkdir dir="${project.lib.dir}"/>
+		<echo message="Downloading ivy..."/>
+		<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
+			dest="${ivy.jar.path}" usetimestamp="true"/>
+	</target>
+	
+	<target name="-install-ivy" depends="-download-ivy" description="Check if we need to download ivy or not">
+		<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${ivy.jar.path}"/>
+	</target>
+	
+	<target name="-availability-check" unless="red5.installed" description="Check which libraries need to be retrieved" depends="prepare.mkdir">
+		<available classpathref="check.classpath" classname="javax.persistence.spi.PersistenceProvider" property="mainlib.installed" />
+		<available classpathref="check.classpath" classname="org.apache.axis2.Version" property="om.installed" />
+		<available classpathref="check.classpath" classname="net.sf.antcontrib.AntContribVersion" property="junit.installed" />
+		<available classpathref="check.classpath" classname="com.thaiopensource.relaxng.translate.Driver" property="dtd-generator.installed" />
+		<available classpathref="check.classpath" classname="org.apache.commons.cli.CommandLine" property="cmdadmin.installed" />
+		<condition property="anakia.installed">
+			<and>
+				<available classpathref="check.anakia.classpath" classname="org.apache.oro.text.GlobCompiler" />
+				<available classpathref="check.anakia.classpath" classname="org.jdom.JDOMException" />
+			</and>
+		</condition> 
+		<available classpathref="check.anakia.classpath" classname="org.apache.oro.text.GlobCompiler" property="anakia.installed" />
+		<available classpathref="check.rat.classpath" classname="org.apache.rat.Report" property="rat.installed" />
+		<available classpathref="svntask.classpath" classname="org.tmatesoft.svn.core.SVNCommitInfo" property="svntask.installed" />
+		<available classpathref="check.classpath" classname="com.mysql.jdbc.Driver" property="mysql.installed" />
+		<available classpathref="check.classpath" classname="org.apache.derby.jdbc.ClientDriver" property="derby.installed" />
+		<available file="${laszlo.home}/WEB-INF/lib" type="dir" property="laszlo.installed" />
+		<available file="${laszlo46.home}/WEB-INF/lib" type="dir" property="laszlo46.installed" />
+		<available file="${red5.lib}/red5.sh" type="file" property="red5.server.installed" />
+		<available classpathref="check.classpath" classname="org.red5.client.net.rtmp.RTMPClient" property="red5.client.installed" />
+	</target>
+
+	<target name="-retrieve" depends="-install-ivy" description="Retrieves the libraries if needed">
+		<condition property="ivy.conf.name" value="red5">
+			<not>
+				<isset property="ivy.conf.name" />
+			</not>
+		</condition>
+		<condition property="ivy.lib.location" value="${mainlibs.lib.dir}">
+			<not>
+				<isset property="ivy.lib.location" />
+			</not>
+		</condition>
+		<condition property="ivy.transitive" value="false">
+			<not>
+				<isset property="ivy.transitive" />
+			</not>
+		</condition>
+		<echo message="Ivy conf name: ${ivy.conf.name}, destination: ${ivy.lib.location}" />
+		<ivy:resolve file="ivy.xml" conf="${ivy.conf.name}" checkIfChanged="false" transitive="${ivy.transitive}" />
+		<ivy:retrieve conf="${ivy.conf.name}" pattern="${ivy.lib.location}/[artifact]-[type]-[revision].[ext]" />
+	</target>
+	
+	<target name="-patch-red5-server-start-script" if="jrebel.home">
+		<echo>Going to patch red5-debug.* with ${jrebel.home}</echo>
+		<filter token="jrebel.home" value="${jrebel.home}" />
+		<filter token="project.home" value="${user.dir}" />
+		<copy todir="${red5.lib}" filtering="true" overwrite="true" force="true">
+			<fileset dir="${webcontent.base.dir}/jrebel" includes="red5-debug.*"/>
+		</copy>
+	</target>
+	
+	<target name="-maven-task" unless="maven.installed">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mvn" />
+			<param name="ivy.lib.location" value="${project.lib.dir}" />
+		</antcall>
+		<path id="maven-ant-tasks.classpath">
+			<fileset dir="${project.lib.dir}" includes="maven-ant-tasks*.jar" />
+		</path>
+		<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
+				uri="antlib:org.apache.maven.artifact.ant"
+				classpathref="maven-ant-tasks.classpath" />
+		<property name="maven.installed" value="true" />
+	</target>
+
+	<target name="-jgit-task" unless="jgit.installed">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="jgit" />
+			<param name="ivy.lib.location" value="${project.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+		<path id="jgit-ant-tasks.classpath">
+			<fileset dir="${project.lib.dir}" includes="org.eclipse.jgit*.jar" />
+			<fileset dir="${project.lib.dir}" includes="jsch*.jar" />
+		</path>
+		<taskdef resource="org/eclipse/jgit/ant/ant-tasks.properties" classpathref="jgit-ant-tasks.classpath"/>
+		<property name="jgit.installed" value="true" />
+	</target>
+	
+	<!-- Check for the Red5 server libraries -->
+	<target name="-retrieve-red5-server" unless="red5.server.installed" description="Retrieves the libraries if needed" depends="-ant-task,-maven-task,-jgit-task">
+		<!-- Needs an empty dir to checkout to -->
+		<delete dir="${red5.server.dir}"/>
+		<git-clone uri="https://github.com/Red5/red5-server.git" dest="${red5.server.dir}" branch="v${red5.server.version}"/>
+		<artifact:mvn pom="${red5.server.dir}/pom.xml" mavenVersion="${maven.version}" fork="true" dir="${red5.server.dir}">
+			<jvmarg value="-Dmaven.buildNumber.doUpdate=false" />
+			<!--jvmarg value="-Dassembly.skipAssembly=true" /-->
+			<arg value="clean"/>
+			<arg value="package"/>
+			<arg value="-P"/>
+			<arg value="assemble"/>
+			<jvmarg value="-Dmaven.test.skip=true" />
+		</artifact:mvn>
+		<untar src="${red5.server.dir}/target/red5-server-${red5.server.version}-server.tar.gz" dest="${red5.server.dir}/target" compression="gzip"/>
+		<move todir="${red5.lib}">
+			<fileset dir="${red5.server.dir}/target/red5-server-${red5.server.version}">
+				<include name="**/*"/>
+			</fileset>
+		</move>
+	
+		<delete dir="${red5.lib}/webapps/installer" />
+		<delete dir="${red5.lib}/webapps/live" />
+		<delete dir="${red5.lib}/webapps/vod" />
+		<delete dir="${red5.lib}/webapps/chat" />
+		<delete dir="${red5.lib}/webapps/root/demos" />
+		<copy file="${webcontent.base.dir}/red5/index.html" todir="${red5.lib}/webapps/root" overwrite="true" force="true" />
+		<copy todir="${red5.lib}" overwrite="true" force="true">
+			<fileset dir="${webcontent.base.dir}/red5" includes="red5*,admin.*,network_test.sh"/>
+		</copy>
+		<!-- FIXME need to be removed as soon as JAudioTagger (will be officially Dual Licensed) -->
+		<xslt in="${red5.lib}/conf/red5-common.xml" out="${red5.lib}/conf/red5-common1.xml" style="build-jaudiotagger.xsl" />
+		<move file="${red5.lib}/conf/red5-common1.xml" tofile="${red5.lib}/conf/red5-common.xml" />
+		<copy file="${red5.server.dir}/src/main/server/conf/red5.properties" todir="${red5.lib}/conf" overwrite="true" force="true">
+			<filterchain>
+				<tokenfilter>
+					<replaceregex pattern="^[ \t]*rtmp.max_handling_time[ \t]*=.*$" replace="rtmp.max_handling_time=${rtmp.max.time}"/>
+				</tokenfilter>
+			</filterchain>
+		</copy>
+		<delete>
+			<fileset dir="${red5.server.lib}" includes="jaudiotagger*.jar" />
+		</delete>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="tomcat-embed-websocket" />
+			<param name="ivy.lib.location" value="${red5.lib}/plugins" />
+			<param name="ivy.transitive" value="false" />
+		</antcall>
+		<antcall target="-patch-red5-server-start-script"/> 
+	</target>
+	
+	<!-- Check for the Red5 client libraries -->
+	<target name="-retrieve-red5-client" unless="red5.client.installed" description="Retrieves the libraries if needed" depends="-retrieve-red5-server,-jgit-task">
+		<delete>
+			<fileset dir="${red5.client.lib}" includes="*" />
+		</delete>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="red5-client" />
+			<param name="ivy.lib.location" value="${red5.client.lib}" />
+			<param name="ivy.transitive" value="false" />
+		</antcall>
+
+		<echo message="Red5 Client build" />
+	</target>
+
+	<!-- Check for the Top level libraries -->
+	<target name="-retrieve-mainlibs" unless="mainlib.installed" description="Retrieves the libraries if needed" depends="-retrieve-red5-client">
+		<!-- Ivy configuration - http://ant.apache.org/ivy/history/trunk/ant.html -->
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mainlib" />
+			<param name="ivy.lib.location" value="${mainlibs.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mainlib.ext" />
+			<param name="ivy.lib.location" value="${mainlibs.lib.dir}" />
+		</antcall>
+		<delete>
+			<fileset dir="${mainlibs.lib.dir}" includes="*-source*.jar" />
+			<fileset dir="${mainlibs.lib.dir}" includes="*-javadoc*.jar" />
+		</delete>
+	</target>
+	<!-- Check for the OM libraries -->
+	<target name="-retrieve-om" unless="om.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings.ext" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings.axis2" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+		<delete>
+			<fileset dir="${om.lib.dir}" includes="commons-logging*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-codec*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-fileupload*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-io*.jar" />
+			<fileset dir="${om.lib.dir}" includes="httpcore-jar*.jar" />
+			<fileset dir="${om.lib.dir}" includes="httpclient-jar*.jar" />
+			<fileset dir="${om.lib.dir}" includes="slf4j-api*.jar" />
+			<fileset dir="${om.lib.dir}" includes="stax-api-jar-1.0.jar" />
+			<fileset dir="${om.lib.dir}" includes="*-source*.jar" />
+			<fileset dir="${om.lib.dir}" includes="*-javadoc*.jar" />
+		</delete>
+	</target>
+	<!-- Check for the Anakia libraries -->
+	<target name="-retrieve-anakia" unless="anakia.installed" description="Retrieves the libraries if needed" depends="-retrieve-mainlibs">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="anakia" />
+			<param name="ivy.lib.location" value="${anakia.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for junit libraries -->
+	<target name="-retrieve-junit" unless="junit.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="junit" />
+			<param name="ivy.lib.location" value="${junit.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for rat libraries -->
+	<target name="-retrieve-rat" unless="rat.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="rat" />
+			<param name="ivy.lib.location" value="${rat.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for dtd-generator libraries -->
+	<target name="-retrieve-dtd-generator" unless="dtd-generator.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="dtd" />
+			<param name="ivy.lib.location" value="${dtd-generator.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for svntask libraries -->
+	<target name="-retrieve-svntask" unless="svntask.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="svntask" />
+			<param name="ivy.lib.location" value="${svntask.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+	</target>
+	<!-- Check for JDK 1.6 tools.jar libraries -->
+	<target name="-retrieve-tools.jar" unless="tools.jar.installed" description="Retrieves the libraries if needed">
+		<available file="${java.home}/Classes/classes.jar" type="file" property="tools.jar.path" value="${java.home}/Classes/classes.jar" />
+		<available file="${java.home}/../Classes/classes.jar" type="file" property="tools.jar.path" value="${java.home}/../Classes/classes.jar" />
+		<available file="${java.home}/lib/tools.jar" type="file" property="tools.jar.path" value="${java.home}/lib/tools.jar" />
+		<available file="${java.home}/../lib/tools.jar" type="file" property="tools.jar.path" value="${java.home}/../lib/tools.jar" />
+		<available file="${tools.jar.path}" type="file" property="tools.jar.installed" />
+
+		<copy file="${tools.jar.path}" tofile="${project.lib.dir}/java_16_tools.jar" />
+	</target>
+	<!-- Check for Openlaszlo -->
+	<target name="-extract-tgz" description="Extracts given tar into ${build.base.dir} folder">
+		<echo message="Going to extract ${dep.file} to the ${build.base.dir}" />
+		<untar src="${dep.file}" dest="${build.base.dir}" compression="gzip" />
+	</target>
+	<target name="-retrieve-openlaszlo" unless="laszlo.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openlaszlo" />
+			<param name="ivy.lib.location" value="${laszlo.home}" />
+		</antcall>
+		<delete>
+			<fileset dir="${laszlo.home}" includes="openlaszlo*.tgz"/>
+		</delete>
+	</target>
+	<target name="-retrieve-openlaszlo46" unless="laszlo46.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openlaszlo46" />
+			<param name="ivy.lib.location" value="${laszlo46.home}" />
+		</antcall>
+		<chmod dir="${laszlo46.home}/WEB-INF/flexsdk" perm="755" includes="**/mxmlc*" />
+		<delete>
+			<fileset dir="${laszlo46.home}" includes="openlaszlo*.tgz"/>
+		</delete>
+	</target>
+	<!-- Check for Command line admin depandencies -->
+	<target name="-retrieve-cmdadmin" unless="cmdadmin.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="cmdadmin" />
+			<param name="ivy.lib.location" value="${red5.lib}" />
+		</antcall>
+	</target>
+
+	<target name="-retrieve-db2" unless="db2.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+
+	<target name="-retrieve-mssql" unless="mssql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+		
+	<target name="-retrieve-derby" unless="derby.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- retrieved automatically, added for compatibility -->
+	</target>
+
+	<target name="-retrieve-mysql" unless="mysql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mysql" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+	</target>
+
+	<target name="-retrieve-oracle" unless="oracle.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+
+	<target name="-retrieve-postgresql" unless="postgresql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- retrieved automatically, added for compatibility -->
+	</target>
+
+	<target name="-process-db" description="performs DB related tasks based on passed DB type">
+		<echo message="db.provider == ${db}" />
+		<antcall target="-retrieve-${db}" inheritAll="true" inheritRefs="true" />
+		<copy file="${webapp.dir}/WEB-INF/classes/META-INF/${db}_persistence.xml" tofile="${webapp.dir}/WEB-INF/classes/META-INF/persistence.xml" overwrite="true" />
+	</target>
+
+	<!-- Clean targets -->
+	<!-- Remove classes directory for clean build -->
+	<target name="clean.classes" description="Clean Classes">
+		<delete includeemptydirs="true" dir="${main.out.dir}" />
+	</target>
+
+	<target name="clean.dist" description="Clean Dist dir">
+		<delete includeemptydirs="true" dir="${dist.dir}" />
+	</target>
+
+	<target name="clean" depends="clean.classes, clean.dist" description="Clean For Binary">
+		<delete includeemptydirs="true" dir="${junit.base.dir}" />
+		<delete file="${keystore.file}" />
+	</target>
+
+	<target name="clean.all" depends="clean.dist" description="Clean All">
+		<delete includeemptydirs="true" dir="${build.base.dir}" />
+	</target>
+	
+	<target name="clean.ivy" depends="clean.all,-install-ivy" description="Clears out Ivy cache and build folder">
+		<ivy:cleancache />
+	</target>
+
+	<target name="prepare-eclipse" if="java7.installed" description="Layout various files necessary for development" depends="-java7.check">
+		<antcall target="-retrieve-mainlibs" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-om" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-junit" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-dtd-generator" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-tools.jar" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-openlaszlo" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-openlaszlo46" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-cmdadmin" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-anakia" inheritAll="true" inheritRefs="true" />
+		<antcall target="-process-db" inheritAll="true" inheritRefs="true" />
+	</target>
+	
+	<target name="-java7.check" unless="java7.installed" depends="info">
+		<condition property="java7.installed" value="true">
+			<and>
+				<or>
+					<equals arg1="${java.specification.version}" arg2="1.7" />
+					<equals arg1="${java.specification.version}" arg2="1.8" />
+				</or>
+				<matches string="${java.vm.specification.vendor}" pattern=".*[sun,oracle].*" casesensitive="false" singleline="true" />
+			</and>
+		</condition>
+		<echo message="Using Java ${java.version} specification: ${java.specification.version}" />
+		<fail message="Unsupported Java version - detected: ${java.version} Only Sun/Oracle Java compiler version 7 or 8 are supported.">
+			<condition>
+				<not>
+					<equals arg1="${java7.installed}" arg2="true" />
+				</not>
+			</condition>
+		</fail>
+	</target>
+	
+	<path id="loadtest.classpath">
+		<fileset dir="${om.dist.webapp}/screensharing">
+			<include name="*.jar" />
+			<exclude name="openmeetings*.jar" />
+		</fileset>
+		<pathelement path="${resources.dir}" />
+		<pathelement path="${main.out.dir}" />
+	</path>
+	
+	<property name="runTestHost" value="192.168.1.7" />
+	<property name="numberOfClient" value="50" />
+	<property name="runTestPort" value="1935" />
+	<property name="runTestContext" value="openmeetings/1" />
+	
+	<target name="doRunClientTest">
+		<parallel>
+			<java classname="org.apache.openmeetings.test.rtmp.SimulateLoadTest">
+				<arg value="${runTestHost}"/>
+				<arg value="${numberOfClient}"/>
+				<classpath refid="loadtest.classpath" />
+			</java>
+		</parallel>
+	</target>
+	
+</project>
diff --git a/docs/ApacheDerbyConfig.html b/docs/ApacheDerbyConfig.html
new file mode 100644
index 0000000..858e145
--- /dev/null
+++ b/docs/ApacheDerbyConfig.html
@@ -0,0 +1,374 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Apache Derby Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Apache Derby Configuration"><strong>Apache Derby Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				OpenMeetings default configuration is to use Apache Derby.
+			</p>
+                                                <p>
+				It is recommended for production environments and high
+				availibility to change to an usual relational database like MySQL,
+				Postgres or DB2.
+			</p>
+                                                <p>
+				For more information about Apache Derby see
+				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>
+			</p>
+                                                <p>
+				There is a sample configuration for Apache Derby that ships with
+				every release in:
+				<br />
+				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
+			</p>
+                                                <p>
+				If you encounter issues, you can drop the db again and delete the
+				file /webapps/openmeetings/conf/install.xml and then run the web
+				based installer again
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/BitrixPlugin.html b/docs/BitrixPlugin.html
new file mode 100644
index 0000000..2079b5f
--- /dev/null
+++ b/docs/BitrixPlugin.html
@@ -0,0 +1,395 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Bitrix Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Plugin for Bitrix"><strong>OpenMeetings Plugin for Bitrix</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Current Development Snapshots for testing can be created from the sources:
+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-bitrix-plugin/trunk">here</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Enter videoconference rooms from Bitrix (http://www.1c-bitrix.ru/): </li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuration"><strong>Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<b>OpenMeetings Bitrix Plugin Installation</b><br />
+				<ol>
+					<li>Build plugin from sources</li>
+					<li>Unpack it into bitrix/modules</li>
+					<li>Install via Admin</li>
+					<li>Add OPenmeetings component to any page.</li>
+				</ol>              
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/BuildInstructions.html b/docs/BuildInstructions.html
new file mode 100644
index 0000000..abadf5c
--- /dev/null
+++ b/docs/BuildInstructions.html
@@ -0,0 +1,698 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Build instructions</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Nightly Builds"><strong>Nightly Builds</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can find Nightly Builds of the software at:
+				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" rel="nofollow" target="_BLANK">
+					https://builds.apache.org/view/M-R/view/OpenMeetings/
+				</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to Build a Distribution"><strong>How to Build a Distribution</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<p>To build a binary release of OpenMeetings you need: </p>
+				<ul>
+					<li>Sun JDK6</li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_BLANK" rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+				</ul>
+			</div>
+                                                <p>Get the source: </p>
+                                                <div class="xmlcode">
+				svn checkout
+				https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+			</div>
+                                                <p>Run the command: </p>
+                                                <div class="xmlcode">
+				ant
+			</div>
+                                                <p>There is no need to compile the client additionally! The ant task
+				does it all! You will find a directory dist that contains
+				OpenMeetings and a red5-server.
+			</p>
+                                                <p>To compile the client you can also use ant: </p>
+                                                <div class="xmlcode">
+				ant
+				<span style="margin-left: 200px;"># compiles a complete package into the folder dist
+				</span>
+				<br />
+				ant compile.laszlo.main
+				<span style="margin-left: 70px;"># compiles the client into main.as3.swf10.swf and
+					main.swf8.swf</span>
+				<br />
+				ant compile.laszlo.main.debug
+				<span style="margin-left: 30px;"># compiles the debug-client into
+					maindebug.as3.swf10.swf and maindebug.swf8.swf
+				</span>
+				<br />
+				ant -Ddb=&lt;name of DB&gt;
+				<span style="margin-left: 50px;"># will copy &lt;name of DB&gt;_persistense.xml to
+					persistense.xml
+				</span>
+				<br />
+				<span style="margin-left: 230px;">#(for ex. ant -Ddb=mysql will set mysql as default
+					DB)
+				</span>
+			</div>
+                                                <p>To compile just the openmeetings JAR file: </p>
+                                                <div class="xmlcode">
+				ant jar.only
+			</div>
+                                                <p>
+				To run Junit tests using ANT see
+				<a href="JUnitTesting.html">JUnitTesting</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Run, Develop, Test"><strong>Run, Develop, Test</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				To develop or build OpenMeetings you checkout the source as Eclipse
+				project. You need the Subclipse or Subversive Plugin for Eclipse. If
+				you just need to change 3 lines of code then your probably better
+				switch to
+				<a href="#How_to_build_a_distribution" rel="nofollow">How to build a
+					distribution
+				</a>
+				.
+			</p>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step1 - Get required Software"><strong>Step1 - Get required Software</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>To develop OpenMeetings you need at least: </p>
+                                                <ul>
+					<li>Eclipse in a up to date copy and Sun JDK6 </li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						Subclipse 1.8 (Subversion 1.7 required!)
+						<a href="http://subclipse.tigris.org/" target="_BLANK" rel="nofollow">http://subclipse.tigris.org/
+						</a>
+					</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_BLANK" rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+					<li>Spring IDE for Eclipse (installable via Help &gt; Eclipse
+						Marketplace)
+					</li>
+					<li>
+						Apache IvyDE™ For Eclipse (installable via Help &gt; Install
+						New Software)
+						URL: http://www.apache.org/dist/ant/ivyde/updatesite
+						detailed steps can be found here:
+						<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_BLANK" rel="nofollow">http://ant.apache.org/ivy/ivyde/download.cgi</a>
+					</li>
+					<li>MySQL (or Postgres, or other Databases supported by openJPA)
+						are optionally but handy to have them
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step2 - Download the Source"><strong>Step2 - Download the Source</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Advanced Users: Check out the Code from the Repository as a
+					Java
+					project into Eclipse.
+				</p>
+                                                <p>
+					URL:
+					<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">
+						https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+					</a>
+				</p>
+                                                <p>To download the required JARs for building and developing
+					OpenMeetings you need to run the ANT comand:
+				</p>
+                                                <div class="xmlcode">
+					ant -Ddb=&lt;your_DB&gt; prepare-eclipse
+				</div>
+                                                <p>After the ANT command you need to press F5 and rebuild the
+					project from inside Eclipse
+				</p>
+                                                <p>Step-By-Step: </p>
+                                                <p>1) Start Eclipse </p>
+                                                <p>
+					2) Change Perspective to SVN Repository Exploring:
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_1.png">
+						<img src="images/checkout_1.png" alt="" width="400" height="289" />
+					</a>
+
+				</p>
+                                                <p>
+					3) Select SVN Repository Exploring and click ok.
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_2.png">
+						<img src="images/checkout_2.png" alt="" width="304" height="417" />
+					</a>
+				</p>
+                                                <p>
+					4) A new Dialog in Eclipse opens
+					<strong>SVN Repositories</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_3.png">
+						<img src="images/checkout_3.png" alt="" width="460" height="102" />
+					</a>
+				</p>
+                                                <p>
+					5) Click on the icon with the plus in the top right corner in the
+					SVN Repository Dialog
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_4.png">
+						<img src="images/checkout_4.png" alt="" width="57" height="38" />
+					</a>
+				</p>
+                                                <p>
+					6) Add the URL
+					<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+					</a>
+					and click Finish
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_5.png">
+						<img src="images/checkout_5.png" alt="" width="455" height="272" />
+					</a>
+				</p>
+                                                <p>
+					7) After download is complete you see a new Source Repository in
+					the Repository Explorer. Right click on it and choose
+					<strong>checkout</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_6.png">
+						<img src="images/checkout_6.png" alt="" width="340" height="135" />
+					</a>
+				</p>
+                                                <p>
+					8) In the Dialog the opens now just click next
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_7.png">
+						<img src="images/checkout_7.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+                                                <p>
+					9) In the next Dialog just click Finish, Eclipse will then download
+					the sources
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_8.png">
+						<img src="images/checkout_8.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+                                                <p>
+					10) After the download is complete you will see a new Project in
+					the Package Explorer Dialog of Eclipse
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_9.png">
+						<img src="images/checkout_9.png" alt="" width="310" height="297" />
+					</a>
+				</p>
+                                                <div>
+					11) Please run
+					<div class="xmlcode">
+						ant prepare-eclipse
+					</div>
+					to download all necessary jar files, and perform source
+					<tt>Refresh</tt>
+					to resolve all compilation issues.
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step3 - Deploy and Run"><strong>Step3 - Deploy and Run</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					see the first chapter about the ANT tasks to compile the code. You
+					will find a directory called
+					<strong>dist</strong>
+					which contains a regular openmeetings including red5. You can then
+					use the usual process like described at
+					<a href="installation.html">installation</a>
+					to run the code then.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Links"><strong>Links</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					Getting Started with OpenLaszlo, checkout
+					<a href="http://www.openlaszlo.org/lps4.2/laszlo-explorer/index.jsp?lzr=swf8" target="_BLANK" rel="nofollow">Laszlo-in-10-Minutes</a>
+					and the
+					<a href="http://www.openlaszlo.org/lps4.2/docs/" target="_BLANK" rel="nofollow">Application
+						Developer's Guide
+					</a>
+					or try the
+					<a href="http://www.openlaszlo.org/getstarted" target="_BLANK" rel="nofollow">ScreenCast</a>
+				</li>
+				<li>
+					<a href="http://openmeetings.apache.org/svn.html">
+						browse SVN source
+					</a>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Tipps and Gotchas"><strong>Tipps and Gotchas</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>When you want to develop only client side there are handy ANT
+				tasks so that you only rebuild the SWFs, same for the Java side.
+			</p>
+                                                <p>
+				It
+				also takes much less time if you do use MySQL as database then
+				rebuilding the software and waiting for Apache Derby to set up the
+				database everytime you did rebuild.
+			</p>
+                                                <p>
+				<b>Working behind a proxy:</b>
+				If you are sitting behind a proxy you should add some proxy settings
+				before starting the build process.
+				<br />
+				For Apache Ivy see:
+				<a href="http://ant.apache.org/ivy/faq.html" target="_BLANK" rel="nofollow">http://ant.apache.org/ivy/faq.html
+				</a>
+				<br />
+				For SVN Command Line Client (From CollabNet 1.7) see:
+				<a href="https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html" target="_BLANK" rel="nofollow">https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html
+				</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/CalendarAndTimezone.html b/docs/CalendarAndTimezone.html
new file mode 100644
index 0000000..5b242d6
--- /dev/null
+++ b/docs/CalendarAndTimezone.html
@@ -0,0 +1,425 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Changing the Calendar and Timezone default</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing the Calendar and Timezone default"><strong>Changing the Calendar and Timezone default</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				In general the timezone is configured in the user profile of each
+				user, so changing the server timezone has no effect how to the users
+				calendar for example.
+				<br />
+				<br />
+				However there are some circumstances where there is no user profile
+				available.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing servers default timzeone for Emails and Invitations (display)"><strong>Changing servers default timzeone for Emails and Invitations (display)</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Goto Administration &gt; Configuration and change the config-key:
+				<tt>default.timezone</tt>
+			</p>
+                                                <p>Valid timezone have to meet standards! </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing first day in week for calendar from Sunday to Monday"><strong>Changing first day in week for calendar from Sunday to Monday</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>in the public/config.xml change the key: </p>
+                                                <div class="xmlcode">
+				&lt;!--
+				<br />
+				First day in the Week used by the Calendar
+				<br />
+				0 means Sunday
+				<br />
+				1 means Monday
+				<br />
+				this is the way how the Celendar inits a week
+				<br />
+				--&gt;
+				<br />
+				&lt;firstdayinweek&gt;0&lt;/firstdayinweek&gt;
+				<br />
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing the default number of max participants of a conference room created via calendar"><strong>Changing the default number of max participants of a conference room created via calendar</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Goto
+				Administration &gt; Configuration and change the config-key:
+				<tt>calendar.conference.rooms.default.size</tt>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/CalendarService.html b/docs/CalendarService.html
new file mode 100644
index 0000000..f8db5f3
--- /dev/null
+++ b/docs/CalendarService.html
@@ -0,0 +1,1112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: CalendarService</h3>
+	   <p>CalendarService contains methods to create, edit delete calendar meetings<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/CalendarService?wsdl">http://localhost:5080/openmeetings/services/CalendarService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in CalendarService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#getAppointmentByRange"><b>getAppointmentByRange</b></a><br/>
+                <div class="navigation_comment"><i >Load appointments by a start / end range for the current SID</i></div>
+                </div>
+                                               <div>
+                <a href="#getAppointmentByRangeForUserId"><b>getAppointmentByRangeForUserId</b></a><br/>
+                <div class="navigation_comment"><i >Load appointments by a start / end range for the userId</i></div>
+                </div>
+                                               <div>
+                <a href="#getNextAppointment"><b>getNextAppointment</b></a><br/>
+                <div class="navigation_comment"><i >Get the next Calendar event for the current user of the SID</i></div>
+                </div>
+                                               <div>
+                <a href="#getNextAppointmentForUserId"><b>getNextAppointmentForUserId</b></a><br/>
+                <div class="navigation_comment"><i >Get the next Calendar event for userId</i></div>
+                </div>
+                                               <div>
+                <a href="#searchAppointmentByTitle"><b>searchAppointmentByTitle</b></a><br/>
+                <div class="navigation_comment"><i >Search a calendar event for the current SID</i></div>
+                </div>
+                                               <div>
+                <a href="#saveAppointment"><b>saveAppointment</b></a><br/>
+                <div class="navigation_comment"><i >Save an appointment</i></div>
+                </div>
+                                               <div>
+                <a href="#updateAppointmentTimeOnly"><b>updateAppointmentTimeOnly</b></a><br/>
+                <div class="navigation_comment"><i >Update an calendar event time only</i></div>
+                </div>
+                                               <div>
+                <a href="#updateAppointment"><b>updateAppointment</b></a><br/>
+                <div class="navigation_comment"><i >Save an appointment</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteAppointment"><b>deleteAppointment</b></a><br/>
+                <div class="navigation_comment"><i >delete a calendar event
+ 
+ If the given SID is from an Administrator or Web-Service user, the user
+ can delete any appointment.<br/>
+ If the SID is assigned to a simple user, he can only delete appointments
+ where he is also the owner/creator of the appointment</i></div>
+                </div>
+                                               <div>
+                <a href="#getAppointmentByRoomId"><b>getAppointmentByRoomId</b></a><br/>
+                <div class="navigation_comment"><i >Load a calendar event by its room id</i></div>
+                </div>
+                                               <div>
+                <a href="#getAppointmentCategoryList"><b>getAppointmentCategoryList</b></a><br/>
+                <div class="navigation_comment"><i >Get all categories of calendar events</i></div>
+                </div>
+                                               <div>
+                <a href="#getAppointmentReminderTypList"><b>getAppointmentReminderTypList</b></a><br/>
+                <div class="navigation_comment"><i >Get all reminder types for calendar events</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in CalendarService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAppointmentByRange" ><b>getAppointmentByRange</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAppointmentByRange (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Calendar starttime
+    			       			    			       			     , 
+    			       			   Calendar endtime
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Load appointments by a start / end range for the current SID
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.calendar.AppointmentDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">starttime</td>
+	                     <td valign="top">start time, yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">endtime</td>
+	                     <td valign="top">end time, yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRange?SID=VALUE&starttime=VALUE&endtime=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRange?SID=VALUE&amp;starttime=VALUE&amp;endtime=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAppointmentByRangeForUserId" ><b>getAppointmentByRangeForUserId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAppointmentByRangeForUserId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long userId
+    			       			    			       			     , 
+    			       			   Calendar starttime
+    			       			    			       			     , 
+    			       			   Calendar endtime
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Load appointments by a start / end range for the userId
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.calendar.AppointmentDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">userId</td>
+	                     <td valign="top">the userId the calendar events should be loaded</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">starttime</td>
+	                     <td valign="top">start time, yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">endtime</td>
+	                     <td valign="top">end time, yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRangeForUserId?SID=VALUE&userId=VALUE&starttime=VALUE&endtime=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRangeForUserId?SID=VALUE&amp;userId=VALUE&amp;starttime=VALUE&amp;endtime=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getNextAppointment" ><b>getNextAppointment</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getNextAppointment (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get the next Calendar event for the current user of the SID
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.calendar.AppointmentDTO
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getNextAppointment?SID=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getNextAppointment?SID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getNextAppointmentForUserId" ><b>getNextAppointmentForUserId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getNextAppointmentForUserId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long userId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get the next Calendar event for userId
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.calendar.AppointmentDTO
+                </p>
+    			<p>Params:</p>
+    			    				<b>Warning:</b><i> Params in this method do not seem to be correctly documentated</i>
+    				<br/><br/>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getNextAppointmentForUserId?SID=VALUE&userId=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getNextAppointmentForUserId?SID=VALUE&amp;userId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="searchAppointmentByTitle" ><b>searchAppointmentByTitle</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>searchAppointmentByTitle (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String appointmentName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Search a calendar event for the current SID
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.calendar.AppointmentDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentName</td>
+	                     <td valign="top">the search string</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/searchAppointmentByTitle?SID=VALUE&appointmentName=VALUE">http://localhost:5080/openmeetings/services/CalendarService/searchAppointmentByTitle?SID=VALUE&amp;appointmentName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="saveAppointment" ><b>saveAppointment</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>saveAppointment (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String appointmentName
+    			       			    			       			     , 
+    			       			   String appointmentLocation
+    			       			    			       			     , 
+    			       			   String appointmentDescription
+    			       			    			       			     , 
+    			       			   Calendar appointmentstart
+    			       			    			       			     , 
+    			       			   Calendar appointmentend
+    			       			    			       			     , 
+    			       			   Boolean isDaily
+    			       			    			       			     , 
+    			       			   Boolean isWeekly
+    			       			    			       			     , 
+    			       			   Boolean isMonthly
+    			       			    			       			     , 
+    			       			   Boolean isYearly
+    			       			    			       			     , 
+    			       			   Long categoryId
+    			       			    			       			     , 
+    			       			   Long remind
+    			       			    			       			     , 
+    			       			   String mmClient
+    			       			    			       			     , 
+    			       			   Long roomType
+    			       			    			       			     , 
+    			       			   Long languageId
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String password
+    			       			    			       			     , 
+    			       			   long roomId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Save an appointment
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    				<b>Warning:</b><i> Params in this method do not seem to be correctly documentated</i>
+    				<br/><br/>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentName</td>
+	                     <td valign="top">name of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentLocation</td>
+	                     <td valign="top">location info text of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentDescription</td>
+	                     <td valign="top">description test of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">appointmentstart</td>
+	                     <td valign="top">start as Date yyyy-mm-ddThh:mm:ss</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">appointmentend</td>
+	                     <td valign="top">end as Date yyyy-mm-ddThh:mm:ss</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDaily</td>
+	                     <td valign="top">if the calendar event should be repeated daily (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isWeekly</td>
+	                     <td valign="top">if the calendar event should be repeated weekly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isMonthly</td>
+	                     <td valign="top">if the calendar event should be repeated monthly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isYearly</td>
+	                     <td valign="top">if the calendar event should be repeated yearly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">categoryId</td>
+	                     <td valign="top">the category id of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">remind</td>
+	                     <td valign="top">the reminder type of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">mmClient</td>
+	                     <td valign="top">List of clients, comma separated string, <br/>
+            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+            to add multiple clients you can use the same GET parameter in
+            the URL multiple times, for example:
+            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+             (Please NOTE mmClient value is enclosed in single quotes)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomType</td>
+	                     <td valign="top">the room type for the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">languageId</td>
+	                     <td valign="top">the language id of the calendar event, notification emails
+            will be send in this language</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the room is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">password</td>
+	                     <td valign="top">the password for the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/saveAppointment?SID=VALUE&appointmentName=VALUE&appointmentLocation=VALUE&appointmentDescription=VALUE&appointmentstart=VALUE&appointmentend=VALUE&isDaily=VALUE&isWeekly=VALUE&isMonthly=VALUE&isYearly=VALUE&categoryId=VALUE&remind=VALUE&mmClient=VALUE&roomType=VALUE&languageId=VALUE&isPasswordProtected=VALUE&password=VALUE&roomId=VALUE">http://localhost:5080/openmeetings/services/CalendarService/saveAppointment?SID=VALUE&amp;appointmentName=VALUE&amp;appointmentLocation=VALUE&amp;appointmentDescription=VALUE&amp;appointmentstart=VALUE&amp;appointmentend=VALUE&amp;isDaily=VALUE&amp;isWeekly=VALUE&amp;isMonthly=VALUE&amp;isYearly=VALUE&amp;categoryId=VALUE&amp;remind=VALUE&amp;mmClient=VALUE&amp;roomType=VALUE&amp;languageId=VALUE&amp;isPasswordProtected=VALUE&amp;password=VALUE&amp;roomId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateAppointmentTimeOnly" ><b>updateAppointmentTimeOnly</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateAppointmentTimeOnly (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long appointmentId
+    			       			    			       			     , 
+    			       			   Date appointmentstart
+    			       			    			       			     , 
+    			       			   Date appointmentend
+    			       			    			       			     , 
+    			       			   Long languageId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Update an calendar event time only
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">appointmentId</td>
+	                     <td valign="top">the calendar event that should be updated</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Date
+	                     		                     </td>
+	                     <td valign="top">appointmentstart</td>
+	                     <td valign="top">start yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Date
+	                     		                     </td>
+	                     <td valign="top">appointmentend</td>
+	                     <td valign="top">end yyyy-mm-dd</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">languageId</td>
+	                     <td valign="top">the language id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/updateAppointmentTimeOnly?SID=VALUE&appointmentId=VALUE&appointmentstart=VALUE&appointmentend=VALUE&languageId=VALUE">http://localhost:5080/openmeetings/services/CalendarService/updateAppointmentTimeOnly?SID=VALUE&amp;appointmentId=VALUE&amp;appointmentstart=VALUE&amp;appointmentend=VALUE&amp;languageId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateAppointment" ><b>updateAppointment</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateAppointment (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long appointmentId
+    			       			    			       			     , 
+    			       			   String appointmentName
+    			       			    			       			     , 
+    			       			   String appointmentLocation
+    			       			    			       			     , 
+    			       			   String appointmentDescription
+    			       			    			       			     , 
+    			       			   Calendar appointmentstart
+    			       			    			       			     , 
+    			       			   Calendar appointmentend
+    			       			    			       			     , 
+    			       			   Boolean isDaily
+    			       			    			       			     , 
+    			       			   Boolean isWeekly
+    			       			    			       			     , 
+    			       			   Boolean isMonthly
+    			       			    			       			     , 
+    			       			   Boolean isYearly
+    			       			    			       			     , 
+    			       			   Long categoryId
+    			       			    			       			     , 
+    			       			   Long remind
+    			       			    			       			     , 
+    			       			   String mmClient
+    			       			    			       			     , 
+    			       			   Long roomType
+    			       			    			       			     , 
+    			       			   Long languageId
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String password
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Save an appointment
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">appointmentId</td>
+	                     <td valign="top">the id to update</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentName</td>
+	                     <td valign="top">name of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentLocation</td>
+	                     <td valign="top">location info text of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">appointmentDescription</td>
+	                     <td valign="top">description test of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">appointmentstart</td>
+	                     <td valign="top">start as Date yyyy-mm-ddThh:mm:ss</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Calendar
+	                     		                     </td>
+	                     <td valign="top">appointmentend</td>
+	                     <td valign="top">end as Date yyyy-mm-ddThh:mm:ss</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDaily</td>
+	                     <td valign="top">if the calendar event should be repeated daily (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isWeekly</td>
+	                     <td valign="top">if the calendar event should be repeated weekly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isMonthly</td>
+	                     <td valign="top">if the calendar event should be repeated monthly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isYearly</td>
+	                     <td valign="top">if the calendar event should be repeated yearly (not
+            implemented)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">categoryId</td>
+	                     <td valign="top">the category id of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">remind</td>
+	                     <td valign="top">the reminder type of the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">mmClient</td>
+	                     <td valign="top">List of clients, comma separated string, <br/>
+            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+            to add multiple clients you can use the same GET parameter in
+            the URL multiple times, for example:
+            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+             (Please NOTE mmClient value is enclosed in single quotes)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomType</td>
+	                     <td valign="top">the room type for the calendar event</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">languageId</td>
+	                     <td valign="top">the language id of the calendar event, notification emails
+            will be send in this language</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the room is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">password</td>
+	                     <td valign="top">the password for the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/updateAppointment?SID=VALUE&appointmentId=VALUE&appointmentName=VALUE&appointmentLocation=VALUE&appointmentDescription=VALUE&appointmentstart=VALUE&appointmentend=VALUE&isDaily=VALUE&isWeekly=VALUE&isMonthly=VALUE&isYearly=VALUE&categoryId=VALUE&remind=VALUE&mmClient=VALUE&roomType=VALUE&languageId=VALUE&isPasswordProtected=VALUE&password=VALUE">http://localhost:5080/openmeetings/services/CalendarService/updateAppointment?SID=VALUE&amp;appointmentId=VALUE&amp;appointmentName=VALUE&amp;appointmentLocation=VALUE&amp;appointmentDescription=VALUE&amp;appointmentstart=VALUE&amp;appointmentend=VALUE&amp;isDaily=VALUE&amp;isWeekly=VALUE&amp;isMonthly=VALUE&amp;isYearly=VALUE&amp;categoryId=VALUE&amp;remind=VALUE&amp;mmClient=VALUE&amp;roomType=VALUE&amp;languageId=VALUE&amp;isPasswordProtected=VALUE&amp;password=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteAppointment" ><b>deleteAppointment</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteAppointment (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long appointmentId
+    			       			    			       			     , 
+    			       			   Long language_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  delete a calendar event
+ 
+ If the given SID is from an Administrator or Web-Service user, the user
+ can delete any appointment.<br/>
+ If the SID is assigned to a simple user, he can only delete appointments
+ where he is also the owner/creator of the appointment
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">an authenticated SID</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">appointmentId</td>
+	                     <td valign="top">the id to delete</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language id in which the notifications for the deleted
+            appointment are send</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/deleteAppointment?SID=VALUE&appointmentId=VALUE&language_id=VALUE">http://localhost:5080/openmeetings/services/CalendarService/deleteAppointment?SID=VALUE&amp;appointmentId=VALUE&amp;language_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAppointmentByRoomId" ><b>getAppointmentByRoomId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAppointmentByRoomId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Load a calendar event by its room id
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.calendar.AppointmentDTO
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRoomId?SID=VALUE&room_id=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getAppointmentByRoomId?SID=VALUE&amp;room_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAppointmentCategoryList" ><b>getAppointmentCategoryList</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAppointmentCategoryList (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get all categories of calendar events
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.entity.calendar.AppointmentCategory>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getAppointmentCategoryList?SID=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getAppointmentCategoryList?SID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAppointmentReminderTypList" ><b>getAppointmentReminderTypList</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAppointmentReminderTypList (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get all reminder types for calendar events
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/CalendarService/getAppointmentReminderTypList?SID=VALUE">http://localhost:5080/openmeetings/services/CalendarService/getAppointmentReminderTypList?SID=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/Clustering.html b/docs/Clustering.html
new file mode 100644
index 0000000..28a853a
--- /dev/null
+++ b/docs/Clustering.html
@@ -0,0 +1,524 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Clustering</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Description"><strong>Description</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings 
+				servers, so all database tables are shared across OM instances. Certain folders should be shared 
+				between all servers to allow access to the files/recording.</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuration"><strong>Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					Multiple OM servers should be set up as described in
+					<a href="installation.html" target="_BLANK">
+						<b>Installation</b>
+					</a>
+				</li>
+				<li>All servers should be configured to have same Time zone (To avoid
+					Schedulers to drop user sessions as outdated)
+				</li>
+				<li>All servers should be configured to use the same DB</li>
+				<li>Servers should be added in Administration -&gt; Servers section</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Database"><strong>Database</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Add users who can connect to the database remotely</li>
+				<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt>
+					set correct server address, login and password. Also add the following section:
+					<div class="xmlcode">&lt;property name="openjpa.RemoteCommitProvider" value="tcp(Addresses=10.1.1.1;10.1.1.2)" /&gt;</div>
+					Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster.
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="File systems"><strong>File systems</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:
+					<div class="xmlcode">
+						/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)<br />
+						/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
+					</div>
+					Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with 
+					folders.
+				</li>
+				<li>
+					Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:
+					<div class="xmlcode">
+						10.1.1.1:/opt/red5/webapps/openmeetings/upload/<br />
+						/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr<br />
+						10.1.1.1:/opt/red5/webapps/openmeetings/streams/<br />
+						/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr
+					</div>
+					Here 10.1.1.1 – data server ip. And run the command:
+					<div class="xmlcode">
+						mount -a
+					</div>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OM nodes configuration"><strong>OM nodes configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt>
+                                                <ul>
+				<li>
+					For each node uncomment line:
+					<div class="xmlcode">
+						&lt;!-- Need to be uncommented and set to the real ID if in cluster mode--&gt;<br />
+						&lt;property name="serverId" value="1" /&gt;
+					</div>
+					and input the unique value for each node.
+				</li>
+				<li> 
+					Replace <tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based session cache by default --&gt;</tt><br />
+					with <tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt> 
+					(Currently commented out with following comment: <tt>"The following section should be used in clustering mode"</tt>)
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuring cluster in Administration"><strong>Configuring cluster in Administration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>
+				<li>
+					Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:
+					<div class="xmlcode">
+						Server Name = node name;<br />
+						Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;<br />
+						Server Address = node ip;<br />
+						HTTP Port = 5080 - port for http part of Openmeetings;<br />
+						User (SOAP Access) = login of Webservice user from the previous step;<br />
+						Password = password of Webservise user;<br />
+						Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;<br />
+						Protocol = http.
+					</div>
+				</li> 
+			</ul>
+                                                <img src="./images/cluster1.png" width="650" height="461" align="middle">
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Ensure everything works as expected"><strong>Ensure everything works as expected</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Set up the cluster and loggin with two users, go to the same room (also check before room 
+				entering that the status page with the room list shows the correct number of participants before 
+				entering the room). You should login to the same server initially, the server will redirect you 
+				for the conference room to the appropriate server automatically. Both users should be in the same room.
+				</li>
+				<li>Do the same with only two users but go to _different_ rooms. The calculation should send 
+				both users to different servers, cause based on the calculation two different rooms on a cluster 
+				with two nodes should go exactly one room for each node. You can now loggin really to node1 
+				and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt>
+				and check in the column "servers" where they are located. They should be on different server.
+				</li>
+			</ul>
+                                                <img src="./images/cluster2.png" width="650" height="369" align="middle">
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/CommandLineAdmin.html b/docs/CommandLineAdmin.html
new file mode 100644
index 0000000..05bd7ca
--- /dev/null
+++ b/docs/CommandLineAdmin.html
@@ -0,0 +1,429 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Command line admin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Usage"><strong>Usage</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>To avoid intensive traffic utilization and save your time you can
+				use command line admin to achieve following tasks:</p>
+                                                <ul>
+				<li>Install using defaults</li>
+				<li>Install from backup</li>
+				<li>Backup</li>
+				<li>Cleanup</li>
+			</ul>
+                                                <p>Some example commands:</p>
+                                                <p>MySQL (requires to place the MySQL JDBC driver into webapps/openmeetings/WEB-INF/lib before running the command):</p>
+                                                <div>
+				<div class="xmlcode">
+./admin.sh -i -v -tz Europe/Berlin -email your.email@gmail.com -group webbase -user admin --smtp-server localhost --db-type mysql --db-name openmeetings_db --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --db-user root --db-host localhost --email-auth-pass 123qweasd<br />
+				</div>
+			</div>
+                                                <p>Derby (Not recommended for production environment):</p>
+                                                <div>
+				<div class="xmlcode">
+./admin.sh -i -v -tz Europe/Berlin -email seba.wagner@gmail.com -group webbase -user admin --smtp-server localhost --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --email-auth-pass 123qweasd<br />
+				</div>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Command reference"><strong>Command reference</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<div class="xmlcode">
+ -v,--verbose                        verbose error messages<br />
+--------------------------------------------------------------------------------------------------<br />
+ -h,--help                           prints this message<br />
+--------------------------------------------------------------------------------------------------<br />
+ -b,--backup                         Backups OM<br />
+<span style="margin-left: 50px;">-file &lt;arg&gt;                       (optional) file used for backup/restore/install</span><br />
+<span style="margin-left: 100px;">--exclude-files                (optional) should backup exclude files [default: include]</span><br />
+--------------------------------------------------------------------------------------------------<br />
+ -r,--restore                        Restores OM<br />
+<span style="margin-left: 50px;">-file &lt;arg&gt;                       file used for backup/restore/install</span><br />
+--------------------------------------------------------------------------------------------------<br />
+ -l,--languages                      Reimport All language files into DB<br />
+<span style="margin-left: 50px;">-lang,--language &lt;arg&gt;            (optional) Single language to be imported (id or name)</span><br />
+--------------------------------------------------------------------------------------------------<br />
+ -i,--install                        Fill DB table, and make OM usable<br />
+<span style="margin-left: 50px;">-user &lt;arg&gt;                       Login name of the default user, minimum 4 characters (mutually exclusive with 'file')</span><br />
+<span style="margin-left: 50px;">-group &lt;arg&gt;                      The name of the default user group (mutually exclusive with 'file')</span><br />
+<span style="margin-left: 50px;">-email &lt;arg&gt;                      Email of the default user (mutually exclusive with 'file')</span><br />
+<span style="margin-left: 50px;">-tz &lt;arg&gt;                         Default server time zone, and time zone for the selected user (mutually exclusive with 'file') file used for backup/restore/install</span><br />
+<span style="margin-left: 100px;">--email-auth-pass &lt;arg&gt;        (optional) Email auth password (anonymous connection will be used if not set)</span><br />
+<span style="margin-left: 100px;">--db-host &lt;arg&gt;                (optional) DNS name or IP address of database</span><br />
+<span style="margin-left: 100px;">--drop                         (optional) Drop database before installation</span><br />
+<span style="margin-left: 100px;">--db-user &lt;arg&gt;                (optional) User with write access to the DB specified</span><br />
+<span style="margin-left: 100px;">--system-email-address &lt;arg&gt;   (optional) System e-mail address [default: noreply@openmeetings.apache.org]</span><br />
+<span style="margin-left: 100px;">--password &lt;arg&gt;               (optional) Password of the default user, minimum 4 characters (will be prompted if not set)</span><br />
+<span style="margin-left: 100px;">--email-use-tls                (optional) Is secure e-mail connection [default: no]</span><br />
+<span style="margin-left: 100px;">--email-auth-user &lt;arg&gt;        (optional) Email auth username (anonymous connection will be used if not set)</span><br />
+<span style="margin-left: 100px;">--db-port &lt;arg&gt;                (optional) Database port</span><br />
+<span style="margin-left: 100px;">--smtp-port &lt;arg&gt;              (optional) SMTP server for outgoing e-mails [default: 25]</span><br />
+<span style="margin-left: 100px;">--db-name &lt;arg&gt;                (optional) The name of Openmeetings database</span><br />
+<span style="margin-left: 100px;">--disable-frontend-register    (optional) Do not allow front end register [allowed by default]</span><br />
+<span style="margin-left: 100px;">--db-type &lt;arg&gt;                (optional) The type of the DB to be used</span><br />
+<span style="margin-left: 100px;">--skip-default-rooms           (optional) Do not create default rooms [created by default]</span><br />
+<span style="margin-left: 100px;">--force                        (optional) Install without checking the existence of old data in the database.</span><br />
+<span style="margin-left: 100px;">--smtp-server &lt;arg&gt;            (optional) SMTP server for outgoing e-mails [default: localhost]</span><br />
+<span style="margin-left: 100px;">--db-pass &lt;arg&gt;                (optional) Password of the user with write access to the DB specified</span><br />
+--------------------------------------------------------------------------------------------------<br />
+ -f,--files                          File operations - statictics/cleanup<br />
+<span style="margin-left: 100px;">--cleanup                      (optional) Should intermediate files be clean up</span><br />
+--------------------------------------------------------------------------------------------------<br />
+				</div>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ConferenceRoomLayoutOptions.html b/docs/ConferenceRoomLayoutOptions.html
new file mode 100644
index 0000000..50d531d
--- /dev/null
+++ b/docs/ConferenceRoomLayoutOptions.html
@@ -0,0 +1,483 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+            OpenMeetings Team
+        ">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Layout options for a conference room in OpenMeetings</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Layout options for conference rooms"><strong>Layout options for conference rooms</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Each room has a number of attributes to generate different layouts.
+            You can change those values individually for each room in Administration &gt; Rooms
+            </p>
+                                                <p />
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         key 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         default 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         meaning 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         availabe since OpenMeetings version 
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideTopBar 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the top bar with the menus and exit button 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideChat 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the chat tab and use space for whiteboard 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideActivitiesAndActions 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the activities window with the notofications aber user activities
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideFilesExplorer 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the file explorer
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideActionsMenu 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the menu with the actions
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideScreenSharing 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the button to start screensharing/recording
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         hideWhiteboard 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Hide the whiteboard, if this option is true, the videos will be in the area of the whiteboard
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         showMicrophoneStatus 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         false 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Show the current status of the microphone (off/on) on the bottom of each video view
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.x 
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ConfluencePlugin.html b/docs/ConfluencePlugin.html
new file mode 100644
index 0000000..870e2df
--- /dev/null
+++ b/docs/ConfluencePlugin.html
@@ -0,0 +1,399 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="eschwert@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Confluence Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Confluence Plugin for OpenMeetings"><strong>Confluence Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>				
+				Current Development Snapshots for testing can be downloaded from:
+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/confluence-plugin/target/openmeetingsconfluence-1.0-SNAPSHOT.jar">here</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Create videoconference rooms through Confluence: </li>
+				<li>
+					<ol>
+						<li>Integrated with Confluence content </li>										
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Demo video"><strong>Demo video</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The demo video of Confluence plugin show you the plugin in action </p>
+                                                <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage" />
+			      <param name="allowFullScreen" value="true" />
+			      <param name="allowScriptAccess" value="always" />
+			      <embed src="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360" />
+		      </object>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/CustomCryptMechanism.html b/docs/CustomCryptMechanism.html
new file mode 100644
index 0000000..65bcaed
--- /dev/null
+++ b/docs/CustomCryptMechanism.html
@@ -0,0 +1,436 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Howto create a Custom Crypt styles</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuration of Custom Crypt-Style"><strong>Configuration of Custom Crypt-Style</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can use custom Crypt-Types, but you should decide during
+				installation which Type of encryption you want to use. By default
+				two type are available:
+			</p>
+                                                <ul>
+				<li>org.xmlcrm.utils.crypt.MD5Implementation - this uses common MD5
+					Crypt like PHP does, this is the default one (results in something
+					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>
+				<li>org.xmlcrm.utils.crypt.MD5CryptImplementation - does use
+					BSD-Style of encryption using a salt (results in something like:
+					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>
+			</ul>
+                                                <p>
+				You can edit the config-key during Installation or later in the
+				Administration Panel. But if you change it using the
+				Administration-Panel previous passwords might be not working anymore
+				as they are encrypted with another algorithm.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuration of Custom Crypt-Style"><strong>Configuration of Custom Crypt-Style</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				To add your own crypt style you need to write a class which
+				implements the interface: org.xmlcrm.utils.cryptCryptString
+				<br />
+				and extends the Adapter: org.xmlcrm.utils.CryptStringAdapter
+				<br />
+				Example of an Implementation:
+			</p>
+                                                <div class="xmlcode">
+				package org.xmlcrm.utils.crypt;
+				
+				import java.security.NoSuchAlgorithmException;
+				
+				public class MD5Implementation extends CryptStringAdapter implements CryptString {
+				
+				        @Override
+				        public String createPassPhrase(String userGivenPass) {
+				                String passPhrase = null;
+				                try {
+				                        passPhrase = MD5.do_checksum(userGivenPass);
+				                } catch (NoSuchAlgorithmException e) {
+				                        e.printStackTrace();
+				                }
+				                return passPhrase;
+				        }
+				
+				        @Override
+				        public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+				                return (passwdFromDb.equals(createPassPhrase(passGiven)));
+				        }
+				        
+				}
+			</div>
+                                                <p>To add your own Encryption-Class you need to add your class to the
+				OpenMeetings-Webapp (make it available to the webapp-classpath) and
+				use your custom-class-name instead of
+				org.xmlcrm.utils.crypt.MD5Implementation during the Installation or
+				at runtime by editing the config-key crypt_ClassName</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuration of Custom Crypt-Style"><strong>Configuration of Custom Crypt-Style</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>credits goto Mika for sharing his Implementation of the
+				MD5Crypt-Style</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/CustomRoomTypeHowTo.html b/docs/CustomRoomTypeHowTo.html
new file mode 100644
index 0000000..1dc04b6
--- /dev/null
+++ b/docs/CustomRoomTypeHowTo.html
@@ -0,0 +1,443 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+            OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Howto create a custom room type in OpenMeetings</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Why creating a custom room type in OpenMeetings"><strong>Why creating a custom room type in OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you want to create your own styled room the best thing to do in 
+            order to be "update-save" is to create your own custom room type. There is an empty configuration 
+				by default shipped with every release of OpenMeetings, the room type "custom" (ID = 5).<br />
+				<br />
+            You can use that and extend it, or you can add more room types to fit your use case.
+			</p>
+                                                <p />
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Create your own room type class (User Interface)"><strong>Create your own room type class (User Interface)</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Lets start by creating your custom room type class.
+				<br />
+					You could for example duplicate an existing room class, from <br />
+					<tt>src/modules/conference/flexibleConferenceRoom</tt> folder, for example the 
+			flexibleConferenceRoom.lzx: Generate a duplicate, change the name, for example to 
+			myCustomConferenceRoom.lzx and edit the class name inside the file name="flexibleConferenceRoom" to
+			name="myCustomConferenceRoom". Also don't miss to add an entry to library.lzx so that the compiler 
+			will find your new class.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Create nesseccary entries in configuration tables"><strong>Create nesseccary entries in configuration tables</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You first need to create a number of configuration files </p>
+                                                <ul>
+				<li>To have your roomtype available everytime you install OpenMeetings you need to add 
+					it to the default rooms: <tt>ImportInitvalues.java Method: loadDefaultRooms()</tt>. Add your entry here. 
+				You can choose any random name for the room. The ID is the important trigger for the room type 
+				to identify later. You need to run the installer so that your new room type is in the database.</li>
+				
+				<li>Add your room type in the default module configuration: 
+					<tt>src/base/moduleConfiguration.lzx</tt>, 
+				here you need to add a default class name for your room type </li>
+				
+				<li>Add your room type in the real configuration: public/config.xml, add a new entry.
+					<br />
+					You should fix also the file <tt>public/config.xsd</tt> that is the Schema file for the public/config.xml.
+				</li>
+        		
+				<li>Add a parser entry to modify the room type mapping: 
+					<tt>base/mainMethods.lzx method: myinit</tt>. You 
+        		can see some example parsing, you should add your one similar to the existing room types.</li>
+        		
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Link your room type config with your room type class "><strong>Link your room type config with your room type class </strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Now you need to make sure that everytime the conference room is created 
+			your new class "myCustomConferenceRoom" is used. There are 3 places you need to add your mapping.</p>
+                                                <ul>
+				<li>In the global mapping: 
+					<tt>base/mainMethods.lzx method name="setRoomValues"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/conference/conference/roomListItem.lzx method name="initRoom"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/invitation/autoloaderBarOnly.lzx netRemoteCallHib name="setUsernameAndSession"</tt> 
+				</li>
+			</ul>
+                                                <p>Thats it. You can add/edit/delete your room with the new room type in the Administration &gt; Rooms interface of 
+			OpenMeetings like any other room.</p>
+                                                <p>If you need to have this room type available as option in the Calendar UI, you need to add it to the combobox manually.</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Dashboard.html b/docs/Dashboard.html
new file mode 100644
index 0000000..249cb2c
--- /dev/null
+++ b/docs/Dashboard.html
@@ -0,0 +1,438 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Changing Dashboard</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing Dashboard"><strong>Changing Dashboard</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You can configure the tabs that are visible by default at bottom
+				of the dashboard. To edit the settings, login as admin and goto
+				Administration &gt; Configuration </p>
+                                                <p />
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Config-key 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Values 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Meaning 
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         default.dashboard.tab 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0,1,2 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Which tab should be shown by default, counting
+						starts with 0
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         dashboard.show.myrooms 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 or 1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         If the MyRooms tab should be visible or not 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         dashboard.show.chat 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 or 1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         If the Chat tab should be visible or not 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         dashboard.show.rssfeed 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 or 1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         If the RSS-Feed tab should be visible or not 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         rss_feed1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         http-URL 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         ATOM-Feed URL for the dashboard RSS Tab 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         rss_feed2 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         http-URL 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         ATOM-Feed URL for the dashboard RSS Tab 
+    </td>
+            </tr>
+            </table>
+                                                <p />
+                                                <p>Changes are immediately online, no need to restart anything. </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/DrupalPlugin.html b/docs/DrupalPlugin.html
new file mode 100644
index 0000000..3958d26
--- /dev/null
+++ b/docs/DrupalPlugin.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Drupal Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Drupal Plugin for OpenMeetings"><strong>Drupal Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Plugin for Drupal currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 
+				<br />
+				A demo version+video of the Drupal plugin is available at
+				<a href="http://drupal.openmeetings.de/" target="_BLANK" rel="nofollow">drupal.openmeetings.de</a>.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Installation of the Drupal Plugin for Apache OpenMeetings"><strong>Installation of the Drupal Plugin for Apache OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You simply download the ZIP or TAR package and unzip it to Drupal "mod" directory.
+				<br />
+				For a detailed description on how to install plugins in Drupal please review their 
+				<a href="http://drupal.org/documentation/install/modules-themes" target="_BLANK" rel="nofollow">handbook</a>.
+				<br />
+				Then you visit the module interface of Drupal, where you will find the new module.
+				You should switch it to "enabled" to get the "Configure" and "Permissions" buttons.
+			</p>
+                                                <a class="fancybox-buttons" href="images/drupal_module_installation.png">
+				<img src="images/drupal_module_installation.png" alt="" width="600" height="150" />
+			</a>
+                                                <p>
+				In the configuration you enter the auth data to access your Apache OpenMeetings server:
+			</p>
+                                                <a class="fancybox-buttons" href="images/drupal_module_configuration.png">
+				<img src="images/drupal_module_configuration.png" alt="" width="600" height="340" />
+			</a>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Adding a new conference room to Drupal"><strong>Adding a new conference room to Drupal</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				After installation of the plugin you can go to the front page in Drupal and add a new content item 
+				"OpenMeetings Rooms" =&gt; "Add New Room". You may find following configuration values for each 
+				conference room:
+			</p>
+                                                <a class="fancybox-buttons" href="images/drupal_room_configuration.png">
+				<img src="images/drupal_room_configuration.png" alt="" width="600" height="400" />
+			</a>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/EditTemplates.html b/docs/EditTemplates.html
new file mode 100644
index 0000000..ca572e0
--- /dev/null
+++ b/docs/EditTemplates.html
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Edit Templates</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing Labels and text strings"><strong>Changing Labels and text strings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				All language string should be localized and stored in the language
+				section. You have a full featured language editor with every
+				installation of OpenMeetings, check out the
+				<a href="LanguageEditor.html">LanguageEditor</a>
+				.
+			</p>
+                                                <p>
+				To lookup the labelids in the GUI you can simply run OpenMeetings
+				client with the debug enabled. That way every text-string has the
+				labelid in brackets additionally in the textfield. To start the
+				client in debug mode just add the param ?swf=maindebug.swf8.swf to
+				the URL. Example:
+				<a href="http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf" rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing layout, adding footers in emails"><strong>Changing layout, adding footers in emails</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you would like to change the standard email layout or add for
+				example some footer in every email you have to change the email
+				templates.
+			</p>
+                                                <p>To do that: Stop the Red5/OpenMeetings-Service Goto:
+				$Red5_HOME/webapps/openmeetings/WEB-INF/lib/openmeetings-templates.jar
+				Unzip: openmeetings-templates.jar (this is a usual ZIP file, you can
+				rename it to openmeetings-templates.zip unzip, edit the files, zip
+				it again and rename it to openmeetings-templates.jar)
+			</p>
+                                                <p>
+				In openmeetings-templates.jar there are all template files. They
+				have the file extension .vm (VM stands for velocity-template). After
+				you have done your changes you need to (re)start the
+				Red5/OpenMeetings
+				-Service so that changes are online.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ErrorsTable.html b/docs/ErrorsTable.html
new file mode 100644
index 0000000..83d08b1
--- /dev/null
+++ b/docs/ErrorsTable.html
@@ -0,0 +1,978 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="Apache OpenMeetings Documentation Robot">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Openmeetings Errors table</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Openmeetings Errors table"><strong>Openmeetings Errors table</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Code
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Type
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Description
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -1
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Unknown error. Please report this to the administrator.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -2
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Please enter either an email address or a user name
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -3
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        There is no user connected to this username
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -4
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The email containing a special link has been sent to your email address
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -5
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No user found
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -6
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The passwords you entered weren't identical
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -7
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Password and or username too short, required minimum length for user name / password are:
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -8
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Password set. You can now login.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -9
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No such email address was found. Make sure you entered the same email address you used to create your account.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -10
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Username not found
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -11
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Invalid password
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -12
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Successfully logged out
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -13
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Password and or login is too short
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -14
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Registration disabled
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -15
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The username is already used
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -16
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        System error please contact the administrator
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -17
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The mail address is already registered
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -18
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Your account has been created. You can now login.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -19
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Invalid email address
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -20
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Duplicate file name, please enter another
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -21
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        File name too short
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -22
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Could not save the address
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -23
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        User added but you need to assign this user to an usergroup, otherwise they won't be able to log in
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -24
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No field found for the ID
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -25
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No label found
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -26
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Admin authorization required
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -27
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Invalid label ID
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -28
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You have deleted the label
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -29
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Invalid label ID
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -30
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This room is full
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -31
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No invitation available for this invitation code
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -32
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This invitation was already used
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -33
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The invitation code is invalid
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -34
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Invalid password
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -35
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This user is already a member of this usergroup
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -36
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This method needs an adminstration account to be invoked
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -37
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        There was no session associated with this ID
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -38
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You cannot delete your own user
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -39
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This is an administrator or moderator account. You can only edit this account through the administration panel.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -40
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Message
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You have successfully signed up. An email with a verification code will be sent to your mailbox.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -41
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Your account is not activated. Please use the link in the email you received during registration.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -42
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This session hash has already been used
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -43
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You have to enter your password again to auto create the SIP data
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -44
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This email is already used by another user.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -45
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This user is already in your contact list or has received an invitation to your contact list that is not answered yet.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -46
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The user is already denied.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -47
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        The user is already approved.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -48
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        This user contact hash is invalid.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -49
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        There is no such contact.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -50
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You invitation code is not valid, the code is only valid during this specific date and time:
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -51
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Please enter a password
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -52
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You need an account with user level user, moderator or admin
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -53
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Please enter email
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -54
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -55
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Please specify your timezone
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        -56
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Error
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Configuration with given key already exists, please specify another key or edit existent configuration
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/FFMPEGVersionSwitch.html b/docs/FFMPEGVersionSwitch.html
new file mode 100644
index 0000000..f65f039
--- /dev/null
+++ b/docs/FFMPEGVersionSwitch.html
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Howto switch between different versions of FFMPEG </title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Default Configuration"><strong>Default Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>FFMPEG has a change in its API (possibly since GIT revision
+				88bfe4518)
+			</p>
+                                                <p>Since Version 1.9.x of OpenMeetings: By default OpenMeetings
+				expects you to have a new version of FFMPEG on your OpenMeetings
+				server installed and it will use the new API style to communicate
+				with FFMPEG.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Switching to old FFMPEG API"><strong>Switching to old FFMPEG API</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				If you want to switch to the old style you can change that using the
+				config key:
+				<tt>use.old.style.ffmpeg.map.option</tt>
+			</p>
+                                                <p>
+				Set this value to
+				<tt>1</tt>
+				to have the old params in the API call to FFMPEG.
+			</p>
+                                                <p>References:  </p>
+                                                <ul>
+				<li>
+					<a href="http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html" rel="nofollow">http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html
+					</a>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/FileService.html b/docs/FileService.html
new file mode 100644
index 0000000..afdfd5d
--- /dev/null
+++ b/docs/FileService.html
@@ -0,0 +1,1559 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: FileService</h3>
+	   <p>Contains methods to import and upload files into the Files section of the
+ conference room and the personal drive of any user<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/FileService?wsdl">http://localhost:5080/openmeetings/services/FileService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in FileService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#importFile"><b>importFile</b></a><br/>
+                <div class="navigation_comment"><i >Import file from external source
+ 
+ to upload a file to a room-drive you specify: externalUserId, user if of
+ openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 0 parentFolderId = 0
+ 
+ to upload a file to a private-drive you specify: externalUserId, user if
+ of openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 1 parentFolderId = -2</i></div>
+                </div>
+                                               <div>
+                <a href="#importFileByInternalUserId"><b>importFileByInternalUserId</b></a><br/>
+                <div class="navigation_comment"><i >Import file from external source
+ 
+ to upload a file to a room-drive you specify: internalUserId, user if of
+ openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 0 parentFolderId = 0
+ 
+ to upload a file to a private-drive you specify: internalUserId, user if
+ of openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 1 parentFolderId = -2</i></div>
+                </div>
+                                               <div>
+                <a href="#addFolderByExternalUserIdAndType"><b>addFolderByExternalUserIdAndType</b></a><br/>
+                <div class="navigation_comment"><i >to add a folder to the private drive, set parentFileExplorerItemId = 0
+ and isOwner to 1/true and externalUserId/externalUserType to a valid user</i></div>
+                </div>
+                                               <div>
+                <a href="#addFolderByUserId"><b>addFolderByUserId</b></a><br/>
+                <div class="navigation_comment"><i >to add a folder to the private drive, set parentFileExplorerItemId = 0
+ and isOwner to 1/true and userId to a valid user</i></div>
+                </div>
+                                               <div>
+                <a href="#addFolderSelf"><b>addFolderSelf</b></a><br/>
+                <div class="navigation_comment"><i >Add a folder by the current user - similar to RTMP Call</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteFileOrFolderByExternalIdAndType"><b>deleteFileOrFolderByExternalIdAndType</b></a><br/>
+                <div class="navigation_comment"><i >deletes a file by its external Id and type</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteFileOrFolder"><b>deleteFileOrFolder</b></a><br/>
+                <div class="navigation_comment"><i >deletes files or folders based on it id</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteFileOrFolderSelf"><b>deleteFileOrFolderSelf</b></a><br/>
+                <div class="navigation_comment"><i >deletes files or folders based on it id</i></div>
+                </div>
+                                               <div>
+                <a href="#getImportFileExtensions"><b>getImportFileExtensions</b></a><br/>
+                <div class="navigation_comment"><i >Get available import File Extension allowed during import</i></div>
+                </div>
+                                               <div>
+                <a href="#getPresentationPreviewFileExplorer"><b>getPresentationPreviewFileExplorer</b></a><br/>
+                <div class="navigation_comment"><i >Get a LibraryPresentation-Object for a certain file</i></div>
+                </div>
+                                               <div>
+                <a href="#getFileExplorerByRoom"><b>getFileExplorerByRoom</b></a><br/>
+                <div class="navigation_comment"><i >Get a File Explorer Object by a given Room and owner id</i></div>
+                </div>
+                                               <div>
+                <a href="#getFileExplorerByRoomSelf"><b>getFileExplorerByRoomSelf</b></a><br/>
+                <div class="navigation_comment"><i >Get a File Explorer Object by a given Room</i></div>
+                </div>
+                                               <div>
+                <a href="#getFileExplorerByParent"><b>getFileExplorerByParent</b></a><br/>
+                <div class="navigation_comment"><i >Get FileExplorerItem list by parent folder</i></div>
+                </div>
+                                               <div>
+                <a href="#getFileExplorerByParentSelf"><b>getFileExplorerByParentSelf</b></a><br/>
+                <div class="navigation_comment"><i >Get FileExplorerItem[] by parent and owner id</i></div>
+                </div>
+                                               <div>
+                <a href="#updateFileOrFolderName"><b>updateFileOrFolderName</b></a><br/>
+                <div class="navigation_comment"><i >update a file or folder name</i></div>
+                </div>
+                                               <div>
+                <a href="#updateFileOrFolderNameSelf"><b>updateFileOrFolderNameSelf</b></a><br/>
+                <div class="navigation_comment"><i >update a file or folder name</i></div>
+                </div>
+                                               <div>
+                <a href="#moveFile"><b>moveFile</b></a><br/>
+                <div class="navigation_comment"><i >move a file or folder</i></div>
+                </div>
+                                               <div>
+                <a href="#moveFileSelf"><b>moveFileSelf</b></a><br/>
+                <div class="navigation_comment"><i >move a file or folder</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in FileService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="importFile" ><b>importFile</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>importFile (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   Long externalFileId
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   boolean isOwner
+    			       			    			       			     , 
+    			       			   String path
+    			       			    			       			     , 
+    			       			   Long parentFolderId
+    			       			    			       			     , 
+    			       			   String fileSystemName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Import file from external source
+ 
+ to upload a file to a room-drive you specify: externalUserId, user if of
+ openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 0 parentFolderId = 0
+ 
+ to upload a file to a private-drive you specify: externalUserId, user if
+ of openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 1 parentFolderId = -2
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.util.process.FileImportError[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The logged in session id with minimum webservice level</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">the external user id =&gt; If the file should goto a private
+            section of any user, this number needs to be set</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalFileId</td>
+	                     <td valign="top">the external file-type to identify the file later</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">the name of the external system</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room Id, if the file goes to the private folder of an
+            user, you can set a random number here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">specify a 1/true AND parentFolderId==-2 to make the file goto
+            the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">path</td>
+	                     <td valign="top">http-path where we can grab the file from, the file has to be
+            accessible from the OpenMeetings server</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFolderId</td>
+	                     <td valign="top">specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+            the file goto the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fileSystemName</td>
+	                     <td valign="top">the filename =&gt; Important WITH file extension!</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/importFile?SID=VALUE&externalUserId=VALUE&externalFileId=VALUE&externalType=VALUE&room_id=VALUE&isOwner=VALUE&path=VALUE&parentFolderId=VALUE&fileSystemName=VALUE">http://localhost:5080/openmeetings/services/FileService/importFile?SID=VALUE&amp;externalUserId=VALUE&amp;externalFileId=VALUE&amp;externalType=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;path=VALUE&amp;parentFolderId=VALUE&amp;fileSystemName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="importFileByInternalUserId" ><b>importFileByInternalUserId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>importFileByInternalUserId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long internalUserId
+    			       			    			       			     , 
+    			       			   Long externalFileId
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   boolean isOwner
+    			       			    			       			     , 
+    			       			   String path
+    			       			    			       			     , 
+    			       			   Long parentFolderId
+    			       			    			       			     , 
+    			       			   String fileSystemName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Import file from external source
+ 
+ to upload a file to a room-drive you specify: internalUserId, user if of
+ openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 0 parentFolderId = 0
+ 
+ to upload a file to a private-drive you specify: internalUserId, user if
+ of openmeetings user for which we upload the file room_id = openmeetings
+ room id isOwner = 1 parentFolderId = -2
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.util.process.FileImportError[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">internalUserId</td>
+	                     <td valign="top">the openmeetings user id =&gt; If the file should goto a private
+            section of any user, this number needs to be se</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalFileId</td>
+	                     <td valign="top">the external file-type to identify the file later</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">the name of the external system</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room Id, if the file goes to the private folder of an
+            user, you can set a random number here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">specify a 1/true AND parentFolderId==-2 to make the file goto
+            the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">path</td>
+	                     <td valign="top">http-path where we can grab the file from, the file has to be
+            accessible from the OpenMeetings server</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFolderId</td>
+	                     <td valign="top">specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+            the file goto the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fileSystemName</td>
+	                     <td valign="top">the filename =&gt; Important WITH file extension!</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/importFileByInternalUserId?SID=VALUE&internalUserId=VALUE&externalFileId=VALUE&externalType=VALUE&room_id=VALUE&isOwner=VALUE&path=VALUE&parentFolderId=VALUE&fileSystemName=VALUE">http://localhost:5080/openmeetings/services/FileService/importFileByInternalUserId?SID=VALUE&amp;internalUserId=VALUE&amp;externalFileId=VALUE&amp;externalType=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;path=VALUE&amp;parentFolderId=VALUE&amp;fileSystemName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addFolderByExternalUserIdAndType" ><b>addFolderByExternalUserIdAndType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addFolderByExternalUserIdAndType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   Long parentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   String folderName
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			       			     , 
+    			       			   Long externalFilesid
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  to add a folder to the private drive, set parentFileExplorerItemId = 0
+ and isOwner to 1/true and externalUserId/externalUserType to a valid user
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">the external file-type to identify the file later</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFileExplorerItemId</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">folderName</td>
+	                     <td valign="top">the name of the folder</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room Id, if the file goes to the private folder of an
+            user, you can set a random number here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">specify a 1/true AND parentFolderId==-2 to make the file goto
+            the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalFilesid</td>
+	                     <td valign="top">the external file-type to identify the file later</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">the name of the external system</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/addFolderByExternalUserIdAndType?SID=VALUE&externalUserId=VALUE&parentFileExplorerItemId=VALUE&folderName=VALUE&room_id=VALUE&isOwner=VALUE&externalFilesid=VALUE&externalType=VALUE">http://localhost:5080/openmeetings/services/FileService/addFolderByExternalUserIdAndType?SID=VALUE&amp;externalUserId=VALUE&amp;parentFileExplorerItemId=VALUE&amp;folderName=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;externalFilesid=VALUE&amp;externalType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addFolderByUserId" ><b>addFolderByUserId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addFolderByUserId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long userId
+    			       			    			       			     , 
+    			       			   Long parentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   String folderName
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			       			     , 
+    			       			   Long externalFilesid
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  to add a folder to the private drive, set parentFileExplorerItemId = 0
+ and isOwner to 1/true and userId to a valid user
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">userId</td>
+	                     <td valign="top">the openmeetings user id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFileExplorerItemId</td>
+	                     <td valign="top">specify a parentFolderId==-2 AND isOwner == 1/true AND to make the file goto the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">folderName</td>
+	                     <td valign="top">the name of the folder</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room Id, if the file goes to the private folder of an user, you can set a random number here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">specify a 1/true AND parentFolderId==-2 to make the file goto the private section</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalFilesid</td>
+	                     <td valign="top">the external file-type to identify the file later</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">the name of the external system</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/addFolderByUserId?SID=VALUE&userId=VALUE&parentFileExplorerItemId=VALUE&folderName=VALUE&room_id=VALUE&isOwner=VALUE&externalFilesid=VALUE&externalType=VALUE">http://localhost:5080/openmeetings/services/FileService/addFolderByUserId?SID=VALUE&amp;userId=VALUE&amp;parentFileExplorerItemId=VALUE&amp;folderName=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;externalFilesid=VALUE&amp;externalType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addFolderSelf" ><b>addFolderSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addFolderSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long parentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   String fileName
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a folder by the current user - similar to RTMP Call
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFileExplorerItemId</td>
+	                     <td valign="top">parent folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fileName</td>
+	                     <td valign="top">the file name</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/addFolderSelf?SID=VALUE&parentFileExplorerItemId=VALUE&fileName=VALUE&room_id=VALUE&isOwner=VALUE">http://localhost:5080/openmeetings/services/FileService/addFolderSelf?SID=VALUE&amp;parentFileExplorerItemId=VALUE&amp;fileName=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteFileOrFolderByExternalIdAndType" ><b>deleteFileOrFolderByExternalIdAndType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteFileOrFolderByExternalIdAndType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long externalFilesid
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  deletes a file by its external Id and type
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalFilesid</td>
+	                     <td valign="top">the od of the file or folder</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">the externalType</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolderByExternalIdAndType?SID=VALUE&externalFilesid=VALUE&externalType=VALUE">http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolderByExternalIdAndType?SID=VALUE&amp;externalFilesid=VALUE&amp;externalType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteFileOrFolder" ><b>deleteFileOrFolder</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteFileOrFolder (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  deletes files or folders based on it id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">the id of the file or folder</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolder?SID=VALUE&fileExplorerItemId=VALUE">http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolder?SID=VALUE&amp;fileExplorerItemId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteFileOrFolderSelf" ><b>deleteFileOrFolderSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteFileOrFolderSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  deletes files or folders based on it id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">the id of the file or folder</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolderSelf?SID=VALUE&fileExplorerItemId=VALUE">http://localhost:5080/openmeetings/services/FileService/deleteFileOrFolderSelf?SID=VALUE&amp;fileExplorerItemId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getImportFileExtensions" ><b>getImportFileExtensions</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getImportFileExtensions (
+    			    			    			)
+    			</i><br/>
+    			<p>
+    			  Get available import File Extension allowed during import
+    			</p>
+    			<p>
+                  Return Type: java.lang.String[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    			    				<i>No Params</i>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    							<a href="http://localhost:5080/openmeetings/services/FileService/getImportFileExtensions">http://localhost:5080/openmeetings/services/FileService/getImportFileExtensions</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getPresentationPreviewFileExplorer" ><b>getPresentationPreviewFileExplorer</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getPresentationPreviewFileExplorer (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String parentFolder
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get a LibraryPresentation-Object for a certain file
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.file.LibraryPresentation
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">parentFolder</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/getPresentationPreviewFileExplorer?SID=VALUE&parentFolder=VALUE">http://localhost:5080/openmeetings/services/FileService/getPresentationPreviewFileExplorer?SID=VALUE&amp;parentFolder=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFileExplorerByRoom" ><b>getFileExplorerByRoom</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFileExplorerByRoom (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Long owner_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get a File Explorer Object by a given Room and owner id
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.file.FileExplorerObject
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">Room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">owner_id</td>
+	                     <td valign="top">Owner id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/getFileExplorerByRoom?SID=VALUE&room_id=VALUE&owner_id=VALUE">http://localhost:5080/openmeetings/services/FileService/getFileExplorerByRoom?SID=VALUE&amp;room_id=VALUE&amp;owner_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFileExplorerByRoomSelf" ><b>getFileExplorerByRoomSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFileExplorerByRoomSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get a File Explorer Object by a given Room
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.file.FileExplorerObject
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">Room Id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/getFileExplorerByRoomSelf?SID=VALUE&room_id=VALUE">http://localhost:5080/openmeetings/services/FileService/getFileExplorerByRoomSelf?SID=VALUE&amp;room_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFileExplorerByParent" ><b>getFileExplorerByParent</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFileExplorerByParent (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long parentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			       			     , 
+    			       			   Long owner_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get FileExplorerItem list by parent folder
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.entity.file.FileExplorerItem[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFileExplorerItemId</td>
+	                     <td valign="top">the parent folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">true if its a private drive</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">owner_id</td>
+	                     <td valign="top">the owner id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/getFileExplorerByParent?SID=VALUE&parentFileExplorerItemId=VALUE&room_id=VALUE&isOwner=VALUE&owner_id=VALUE">http://localhost:5080/openmeetings/services/FileService/getFileExplorerByParent?SID=VALUE&amp;parentFileExplorerItemId=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;owner_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFileExplorerByParentSelf" ><b>getFileExplorerByParentSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFileExplorerByParentSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long parentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get FileExplorerItem[] by parent and owner id
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.entity.file.FileExplorerItem[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">SID The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">parentFileExplorerItemId</td>
+	                     <td valign="top">the parent folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">true to request private drive</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/getFileExplorerByParentSelf?SID=VALUE&parentFileExplorerItemId=VALUE&room_id=VALUE&isOwner=VALUE">http://localhost:5080/openmeetings/services/FileService/getFileExplorerByParentSelf?SID=VALUE&amp;parentFileExplorerItemId=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateFileOrFolderName" ><b>updateFileOrFolderName</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateFileOrFolderName (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			       			     , 
+    			       			   String fileName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  update a file or folder name
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">SID The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">file or folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fileName</td>
+	                     <td valign="top">new file or folder name</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/updateFileOrFolderName?SID=VALUE&fileExplorerItemId=VALUE&fileName=VALUE">http://localhost:5080/openmeetings/services/FileService/updateFileOrFolderName?SID=VALUE&amp;fileExplorerItemId=VALUE&amp;fileName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateFileOrFolderNameSelf" ><b>updateFileOrFolderNameSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateFileOrFolderNameSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			       			     , 
+    			       			   String fileName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  update a file or folder name
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">SID The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">file or folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fileName</td>
+	                     <td valign="top">new file or folder name</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/updateFileOrFolderNameSelf?SID=VALUE&fileExplorerItemId=VALUE&fileName=VALUE">http://localhost:5080/openmeetings/services/FileService/updateFileOrFolderNameSelf?SID=VALUE&amp;fileExplorerItemId=VALUE&amp;fileName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="moveFile" ><b>moveFile</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>moveFile (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long newParentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			       			     , 
+    			       			   Boolean moveToHome
+    			       			    			       			     , 
+    			       			   Long owner_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  move a file or folder
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">SID The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">current file or folder id to be moved</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">newParentFileExplorerItemId</td>
+	                     <td valign="top">new parent folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">if true owner id will be set</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">moveToHome</td>
+	                     <td valign="top">if true move to private drive</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">owner_id</td>
+	                     <td valign="top">owner id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/moveFile?SID=VALUE&fileExplorerItemId=VALUE&newParentFileExplorerItemId=VALUE&room_id=VALUE&isOwner=VALUE&moveToHome=VALUE&owner_id=VALUE">http://localhost:5080/openmeetings/services/FileService/moveFile?SID=VALUE&amp;fileExplorerItemId=VALUE&amp;newParentFileExplorerItemId=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;moveToHome=VALUE&amp;owner_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="moveFileSelf" ><b>moveFileSelf</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>moveFileSelf (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long fileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long newParentFileExplorerItemId
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isOwner
+    			       			    			       			     , 
+    			       			   Boolean moveToHome
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  move a file or folder
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">SID The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">fileExplorerItemId</td>
+	                     <td valign="top">current file or folder id to be moved</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">newParentFileExplorerItemId</td>
+	                     <td valign="top">new parent folder id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isOwner</td>
+	                     <td valign="top">if true owner id will be set</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">moveToHome</td>
+	                     <td valign="top">move to private drive</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/FileService/moveFileSelf?SID=VALUE&fileExplorerItemId=VALUE&newParentFileExplorerItemId=VALUE&room_id=VALUE&isOwner=VALUE&moveToHome=VALUE">http://localhost:5080/openmeetings/services/FileService/moveFileSelf?SID=VALUE&amp;fileExplorerItemId=VALUE&amp;newParentFileExplorerItemId=VALUE&amp;room_id=VALUE&amp;isOwner=VALUE&amp;moveToHome=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/GeneralConfiguration.html b/docs/GeneralConfiguration.html
new file mode 100644
index 0000000..1b6401a
--- /dev/null
+++ b/docs/GeneralConfiguration.html
@@ -0,0 +1,672 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - List of general configuration options</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="List of general configuration options"><strong>List of general configuration options</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <style><!--
+				.configCell {
+					border: 1px solid rgb(204, 204, 204);
+					padding: 5px;
+				}
+			--></style>
+                                                <p>In Administration &gt; Configuration there are a number of
+				configuration values.
+			</p>
+                                                <p />
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         key 
+    </th>
+                                <th bgcolor="#039acc" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         default 
+    </th>
+                                <th bgcolor="#039acc" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         meaning 
+    </th>
+                                <th bgcolor="#039acc" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         availabe since OpenMeetings version 
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         user.login.minimum.length 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         4 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         minimum chars required for the login to create a user 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.9.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         user.pass.minimum.length 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         4 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         minimum chars required for the password to create a
+						user
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.9.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         number.minutes.reminder.send 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         15 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         minutes the one-time reminder in the calender is
+						send, set to 0 to disable reminder
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.9.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         max_upload_size 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1073741824 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Maximum size of upload file (bytes) 1073741824 bytes
+						= 1GB
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.8.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         show.whiteboard.draw.status 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Display name of the user who draw the current object
+						(User Name auto-disapper after 3 seconds.
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.8.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         use.old.style.ffmpeg.map.option 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         If the system should "." (old ffmpeg) instead of ":"
+						(new ffmpeg) for the -map option in FFMPEG
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.9.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         inviter.email.as.replyto 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)	
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         office.path 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically	
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         default.landing.zone 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         user/dashboard 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Area to be shown to the user after login. Possible values are: user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection
+						, admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.1.x, <b> values are changed in 3.0.0</b> 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sms.provider 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+          
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         SMS service provider (bulksms.http.1) 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.1.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sms.Username 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+          
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Login for SMS service provider 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.1.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sms.Userpass 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+          
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Password for SMS service provider 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.1.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sms.subject 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+          
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Subject of SMS reminder message 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.1.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         swftools_zoom 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         100 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         DPI for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 DPI) 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         swftools_jpegquality 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         85 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85) 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sendEmailAtRegister 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         User get a EMail with their Account data. Values: 0(No) or 1(Yes) 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         sendEmailWithVerficationCode 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         0 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         User must activate their account by clicking on the 
+								activation-link in the registering Email. Values: 0(No) or 1(Yes) 
+								It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while 
+								sendEmailAtRegister is 0(No) cause you need
+								to send a EMail. 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.0.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         redirect.url.for.external.users 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+          
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         2.2.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         allow_frontend_register 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         (configurable during install) 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Is user register available on login screen 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1.8.x 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         allow.soap.register 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Is user register available via SOAP/REST 
+    </td>
+                                <td bgcolor="#a0ddf0" class="configCell" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         3.0.x 
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/GetVersionInfo.html b/docs/GetVersionInfo.html
new file mode 100644
index 0000000..1f094bb
--- /dev/null
+++ b/docs/GetVersionInfo.html
@@ -0,0 +1,421 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - How to check which Openmeetings version running</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to check which Openmeetings version running (3.0.0 - )"><strong>How to check which Openmeetings version running (3.0.0 - )</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Use Top Menu -&gt; About</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to check which Openmeetings version running (2.1.1 - )"><strong>How to check which Openmeetings version running (2.1.1 - )</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The version is printed into openmeetings.log file</p>
+                                                <p>
+				Run openmeetings<br />
+				Open OM_HOME/log/openmeetings.log
+			</p>
+                                                <p>You get something like this: </p>
+                                                <div class="xmlcode"><pre>
+	##################################################
+	#               Openmeetings is up               #
+	#       2.1.1-RELEASE 1490720 7-June-2013        #
+	#                and ready to use                #
+	##################################################
+			</pre></div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to check which Openmeetings version running (1.8.0 - 2.1.0)"><strong>How to check which Openmeetings version running (1.8.0 - 2.1.0)</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you need to know what version of OpenMeetings you are running,
+				you can check that by the file: openmeetings-*.jar
+			</p>
+                                                <p>
+				Unzip: /webapps/openmeetings/WEB-INF/lib/openmeetings-*.jar (jars are
+				zips)
+				<br />
+				<br />
+				In the resulting unzipped folder open the file to read:
+				/META-INF/MANIFEST.MF
+			</p>
+                                                <p>You get something like this: </p>
+                                                <div class="xmlcode">
+				Manifest-Version: 1.0
+				<br />
+				Ant-Version: Apache Ant 1.8.2
+				<br />
+				Created-By: 1.6.0_26-b03-383-11A511 (Apple Inc.)
+				<br />
+				Built-By: OpenMeetings - http://openmeetings.googlecode.com
+				<br />
+				Built-On: 23-October-2011
+				<br />
+				Svn-Revision: 4368
+				<br />
+			</div>
+                                                <p>This version info is available since version 1.8.0. If you have an
+				older version as version 1.8.0 then you might simply check the
+				language files and the labelid in there, the numbers of labels are
+				almost always unique in the versions. </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/HotKeys.html b/docs/HotKeys.html
new file mode 100644
index 0000000..0af766f
--- /dev/null
+++ b/docs/HotKeys.html
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Hot Keys</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Keys table"><strong>Keys table</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Key
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Functionality
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Configurable
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Config Key
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        F12 (code 123)
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        A hot key code for the 'give exclusive audio' functionality.
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Yes
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        exclusive.audio.keycode
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        F8 (code 119)
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        If 1 or 2 video windows are present in the room they will be
+						"rearranged" to take all the place available
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        No
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        F7 (code 118)
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        A hot key code for the 'mute/unmute audio' functionality.
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Yes
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        mute.keycode
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/IBMDB2Config.html b/docs/IBMDB2Config.html
new file mode 100644
index 0000000..488f56e
--- /dev/null
+++ b/docs/IBMDB2Config.html
@@ -0,0 +1,440 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - IBM DB2 Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="IBM DB2 Configuration"><strong>IBM DB2 Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Before you start"><strong>Before you start</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <i>Tested with IBM DB2 Express-C 9.7.x</i>
+                                                <ul>
+					<li>
+						Get the IBM Data Server Driver for JDBC and SQLJ from IBM website:
+						<a href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs
+						</a>
+					</li>
+					<li>Copy JDBC driver db2jcc4.jar to
+						webapps/openmeetings/WEB-INF/lib/
+					</li>
+					<li>
+						Create database for OpenMeetings using a pagesize bigger or equal
+						8K, sample query:
+						<br />
+						<div class="xmlcode">
+							CREATE DATABASE openmeet AUTOMATIC STORAGE YES ON 'C:' DBPATH ON 'C:'
+							USING CODESET UTF-8 TERRITORY DE COLLATE USING System PAGESIZE 16
+							K
+						</div>
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again </li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Steps todo"><strong>Steps todo</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml connectionURL, username and
+						password with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="DB2 Sample Configuration"><strong>DB2 Sample Configuration</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					There is a sample configuration for IBM DB2 that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Internationalisation.html b/docs/Internationalisation.html
new file mode 100644
index 0000000..c48b6f5
--- /dev/null
+++ b/docs/Internationalisation.html
@@ -0,0 +1,404 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Upgrade</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Where to find language files"><strong>Where to find language files</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You can find all current language files here: </p>
+                                                <p>
+				<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/
+				</a>
+			</p>
+                                                <p>Just take one file and translate it to your language. </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Import and export of Language Files"><strong>Import and export of Language Files</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					Use the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					for translation
+				</li>
+				<li>
+					with the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					you can import and export Language Files
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to add it as installation option"><strong>How to add it as installation option</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Once you have finished the translation you can add a new node to:
+				<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml
+				</a>
+			</p>
+                                                <p>the name of the language should match the name of the file. Once
+				this is done the Language file will automatically be imported during
+				installation and will be an option at login.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/JUnitTesting.html b/docs/JUnitTesting.html
new file mode 100644
index 0000000..de1cce7
--- /dev/null
+++ b/docs/JUnitTesting.html
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - JUnit Testing</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Automatic tests are the significant part of development process.
+				Below is the instruction of how to run Openmeetings
+				<a href="http://junit.org" rel="nofollow">JUnit</a>
+				tests.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Details"><strong>Details</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ol>
+				<li>running tests using command line: </li>
+				<li>
+					<ul>
+						<li>all tests:
+							<div class="xmlcode">
+								ant test
+							</div>
+						</li>
+						<li>subset of tests by mask:
+							<div class="xmlcode">
+								ant -Dtestcases=TestError* test
+							</div>
+						</li>
+					</ul>
+				</li>
+				<li>running tests from Eclipse IDE: </li>
+				<li>
+					<ul>
+						<li>
+							<div class="xmlcode">
+								ant -Ddb=&lt;your_DB&gt; prepare-eclipse
+							</div>
+						</li>
+						<li>Start Eclipse </li>
+						<li>Load workspace with Openmeetings project (or refresh existing
+							project)
+						</li>
+						<li>Select "Debug Configurations..." </li>
+					</ul>
+				</li>
+			</ol>
+                                                <p>
+				<a class="fancybox-buttons" href="images/DebugConfigurations.png">
+					<img src="images/DebugConfigurations.png" alt="" width="367" height="262" />
+				</a>
+			</p>
+                                                <ul>
+				<li>Create New Junit configuration, give it a name and select test
+					class
+				</li>
+			</ul>
+                                                <p>
+				<a class="fancybox-buttons" href="images/NewConfiguration.png">
+					<img src="images/NewConfiguration.png" alt="" width="420" height="206" />
+				</a>
+			</p>
+                                                <ul>
+				<li>Select Arguments tab </li>
+				<li>Add the following code to the VM section
+					<div class="xmlcode">
+						-javaagent:${workspace_loc:Openmeetings}/build/lib/om/openjpa-bundle-2.2.2.jar
+						-Dom.home=${workspace_loc:Openmeetings}/src/main/webapp
+						-Dbackups.dir=${workspace_loc:Openmeetings}/build/lib/junit/backups
+					</div>
+				</li>
+				<li>To avoid temporary files being created in OM root, modify
+					"Working Directory" as follows
+					<div class="xmlcode">${workspace_loc:Openmeetings}/build/junit</div>
+				</li>
+			</ul>
+                                                <p>
+				<a class="fancybox-buttons" href="images/Arguments.png">
+					<img src="images/Arguments.png" alt="" width="435" height="410" />
+				</a>
+			</p>
+                                                <ul>
+				<li>Select Debug </li>
+
+			</ul>
+                                                <ul>
+				<li>Note: You need a file called "persistence.xml" in src/META-INF
+					if you run the JUnit test from inside Eclipse. Normally "ant
+					prepare-eclipse" should do that for you. </li>
+
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/JVMPerformanceTuning.html b/docs/JVMPerformanceTuning.html
new file mode 100644
index 0000000..80b3cee
--- /dev/null
+++ b/docs/JVMPerformanceTuning.html
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Performance Tuning</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Performance Tuning"><strong>Performance Tuning</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>To use the optimum of performance from your server there is a
+				start-script for red5 available that does some basic settings in the
+				JVM. It is called red5-highperf.sh. It is recommended to use that
+				script for production and high-load scenarios.
+			</p>
+                                                <div class="xmlcode">
+				#!/bin/bash
+				<br />
+				<br />
+				if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
+				<br />
+				<br />
+				# Previous option set
+				<br />
+				export JAVA_OPTS="-Xrs -Xms512M -Xmx1024M -Xss128K -XX:NewSize=256m
+				-XX:SurvivorRatio=16 -XX:MinHeapFreeRatio=20
+				-XX:+ExplicitGCInvokesConcurrent -Djava.net.preferIPv4Stack=true
+				-Xverify:none"
+				<br />
+				<br />
+				# start Red5
+				<br />
+				echo "Setting Hi Performance Options"
+				<br />
+				exec $RED5_HOME/red5.sh &gt;&gt; $RED5_HOME/log/jvm.stdout 2&gt;&amp;1 &amp;
+				<br />
+			</div>
+                                                <p>You have to exclude the "-XX:+UseConcMarkSweepGC" param from the
+				default red5-highperf.sh to make it functional! However if you are a
+				performance expert you might also play with the values to find
+				perfect matches for your use-case.
+			</p>
+                                                <p>
+				For a complete overview about possible arguments and their meaning
+				see:
+				<a href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning" rel="nofollow">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning
+				</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/JabberService.html b/docs/JabberService.html
new file mode 100644
index 0000000..cb3d9c9
--- /dev/null
+++ b/docs/JabberService.html
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: JabberService</h3>
+	   <p>This class provides method implementations necessary for OM to Jabber integration.<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/JabberService?wsdl">http://localhost:5080/openmeetings/services/JabberService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in JabberService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#getAvailableRooms"><b>getAvailableRooms</b></a><br/>
+                <div class="navigation_comment"><i >Get List&lt;RoomDTO&gt; of all rooms available to the user.
+ No admin rights are necessary for this call</i></div>
+                </div>
+                                               <div>
+                <a href="#getUserCount"><b>getUserCount</b></a><br/>
+                <div class="navigation_comment"><i >Returns the count of users currently in the Room with given id
+ No admin rights are necessary for this call</i></div>
+                </div>
+                                               <div>
+                <a href="#getInvitationHash"><b>getInvitationHash</b></a><br/>
+                <div class="navigation_comment"><i >Get invitation hash for the room with given id
+ No admin rights are necessary for this call</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in JabberService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getAvailableRooms" ><b>getAvailableRooms</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getAvailableRooms (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get List&lt;RoomDTO&gt; of all rooms available to the user.
+ No admin rights are necessary for this call
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.room.RoomDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from UserService.getSession</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/JabberService/getAvailableRooms?SID=VALUE">http://localhost:5080/openmeetings/services/JabberService/getAvailableRooms?SID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getUserCount" ><b>getUserCount</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getUserCount (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long roomId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns the count of users currently in the Room with given id
+ No admin rights are necessary for this call
+    			</p>
+    			<p>
+                  Return Type: int
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from UserService.getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomId</td>
+	                     <td valign="top">id of the room to get users</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/JabberService/getUserCount?SID=VALUE&roomId=VALUE">http://localhost:5080/openmeetings/services/JabberService/getUserCount?SID=VALUE&amp;roomId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getInvitationHash" ><b>getInvitationHash</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getInvitationHash (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get invitation hash for the room with given id
+ No admin rights are necessary for this call
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from UserService.getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">The name of invited user, will be displayed in the rooms user list</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">id of the room to get users</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/JabberService/getInvitationHash?SID=VALUE&username=VALUE&room_id=VALUE">http://localhost:5080/openmeetings/services/JabberService/getInvitationHash?SID=VALUE&amp;username=VALUE&amp;room_id=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/JiraPlugin.html b/docs/JiraPlugin.html
new file mode 100644
index 0000000..342ceba
--- /dev/null
+++ b/docs/JiraPlugin.html
@@ -0,0 +1,399 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="eschwert@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Jira Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Jira Plugin for OpenMeetings"><strong>Jira Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Current Development Snapshots for testing can be downloaded from:
+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/jira-plugin/target/openmeetings-1.0-SNAPSHOT.jar">here</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Create videoconference rooms through Jira: </li>
+				<li>
+					<ol>
+						<li>Integrated with Jira issues </li>										
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Demo video"><strong>Demo video</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The demo video of Jira plugin show you the plugin in action </p>
+                                                <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage" />
+			      <param name="allowFullScreen" value="true" />
+			      <param name="allowScriptAccess" value="always" />
+			      <embed src="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360" />
+		      </object>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/JoomlaPlugin.html b/docs/JoomlaPlugin.html
new file mode 100644
index 0000000..8b2486c
--- /dev/null
+++ b/docs/JoomlaPlugin.html
@@ -0,0 +1,416 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Joomla Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Plugin for Joomla"><strong>OpenMeetings Plugin for Joomla</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Plugin for Joomla currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Create videoconference rooms from Joomla: </li>
+				<li>
+					<ol>
+						<li>Create rooms</li>										
+						<li>Enter the room</li>
+					</ol>
+				</li>
+				<li>Access recordings from Joomla: </li>
+				<li>
+					<ol>
+						<li>Download recordings</li>										
+					</ol>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Demo video"><strong>Demo video</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<b>OpenMeetings Joomla Plugin Installation</b><br />              
+				<object style="height: 360px; width: 640px">
+					<param name="movie" value="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage" />
+					<param name="allowFullScreen" value="true" />
+					<param name="allowScriptAccess" value="always" />
+					<embed src="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360" />
+				</object> 
+			</div>
+                                                <br />
+                                                <div>
+				<b>OpenMeetings Integration with Joomla</b><br />              
+				<object style="height: 360px; width: 640px">
+					<param name="movie" value="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage" />
+					<param name="allowFullScreen" value="true" />
+					<param name="allowScriptAccess" value="always" />
+					<embed src="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360" />
+				</object> 
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/LanguageEditor.html b/docs/LanguageEditor.html
new file mode 100644
index 0000000..86c5a81
--- /dev/null
+++ b/docs/LanguageEditor.html
@@ -0,0 +1,377 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Language Editor</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Language Editor"><strong>Language Editor</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Features:</p>
+                                                <ul>
+				<li>edit the labels of any language, changes will take effect as
+					soon as you re-login
+				</li>
+				<li>add new languages (for example to fit your co-operative design
+					and language of your company)
+				</li>
+				<li>export the language-files to an XML File (these language Files
+					can be used for your next installation or as contribution to the
+					project)
+				</li>
+				<li>
+					import of language files (
+					<i>you should restart the server if you face problems, as the
+						database cache might be invalid
+					</i>
+					)
+				</li>
+			</ul>
+                                                <p>Screen from the Administration Panel: </p>
+                                                <p>
+				<a class="fancybox-buttons" href="images/langeditor_screen_v2.png">
+					<img src="images/langeditor_screen_v2.png" alt="" width="475" height="324" />
+				</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/LdapAndADS.html b/docs/LdapAndADS.html
new file mode 100644
index 0000000..1b4a8a6
--- /dev/null
+++ b/docs/LdapAndADS.html
@@ -0,0 +1,430 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Ubuntu Installation"><strong>Ubuntu Installation</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get install slapd ldap-utils
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Modify file <tt>/etc/ldap/ldap.conf</tt> add highlighted attributes:
+				<blockquote>
+					<i>
+						#<br />
+						# LDAP Defaults<br />
+						#<br />
+						# See ldap.conf(5) for details<br />
+						# This file should be world readable but not world writable.<br />
+						<b>BASE    dc=unixmen,dc=com<br />
+						URI     ldap://192.168.1.200</b><br />
+						#SIZELIMIT      12<br />
+						#TIMELIMIT      15<br />
+						#DEREF          never<br />
+						# TLS certificates (needed for GnuTLS)<br />
+						TLS_CACERT      /etc/ssl/certs/ca-certificates.crt<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Run the Configuration assistant: <tt>sudo dpkg-reconfigure slapd</tt>
+			</div>
+                                                <div>
+				Test LDAP server: <tt>ldapsearch -x</tt>
+			</div>
+                                                <div>
+				Add/Edit/Delete users: <tt>sudo apt-get install phpldapadmin</tt>
+			</div>
+                                                <div>
+				Detailed reference: <a href="http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/">http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/</a>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="LDAP and Active Directory Integration"><strong>LDAP and Active Directory Integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p> In: $RED5_HOME/webapps/openmeetings/conf<br />
+				you will find sample configurations for LDAP and Active Directory. The
+				nature of those Directory Servers are that they are individual for
+				every organization, so you have to modify of course at least the
+				path to your user-base et cetera.<br />
+				<br />
+				To activate any of those configurations you have to login into
+				OpenMeetings, goto Administration &gt; Ldap.
+			</p>
+                                                <a class="fancybox-buttons" href="images/ldap_screen.png">
+				<img src="images/ldap_screen.png" alt="" width="442" height="282" />
+			</a>
+                                                <p>
+				Import is that you configure LDAP_SEARCH_PATH so that it points to the node of your directory server that contains the users
+			</p>
+                                                <p>
+				If you have multiple search paths you can either try to define a search path that points to multiple nodes or define multiple ldap configurations.
+			</p>
+                                                <p>
+				Successful integration is also reported with Novell eDirectory
+			</p>
+                                                <p>
+				You can configure multiple domains or different user-paths in the Administration of OpenMeetings. 
+			</p>
+                                                <p>
+				<b>NOTE: </b>You should specify file name <i>RELATIVE</i> to <tt>$RED5_HOME/webapps/openmeetings/conf</tt>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/MSSQLConfig.html b/docs/MSSQLConfig.html
new file mode 100644
index 0000000..0cb03b7
--- /dev/null
+++ b/docs/MSSQLConfig.html
@@ -0,0 +1,439 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - MSSQL Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="MSSQL Configuration"><strong>MSSQL Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Before you start"><strong>Before you start</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>You need Openmeetings 2.2 or later to use MSSQL integration</li>
+					<li>Make sure that you have set utf8 as collation for the openmeetings database
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MSSQL is listening on TCP/IP connections! and username/password 
+						authentication is enabled for it
+						<br />
+						To verify if MSSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Steps todo"><strong>Steps todo</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>
+						You need to download the JDBC driver from Microsoft
+						<a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774" target="_BLANK" rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774</a>
+						Unarchive appropriate file from it (sqljdbc.jar or sqljdbc4.jar) and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="MSSQL Sample Configuration"><strong>MSSQL Sample Configuration</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					There is a sample configuration for MySQL that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ManualTesting.html b/docs/ManualTesting.html
new file mode 100644
index 0000000..b3d6e0d
--- /dev/null
+++ b/docs/ManualTesting.html
@@ -0,0 +1,832 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="iarkh@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Manual Testing</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Below is a test plan for the OpenMeetings 2.1 pre-release testing.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Details"><strong>Details</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ol>
+				<li>
+					<b>User GUI tests</b>
+					<ol>
+						<li>
+							Login/logout 
+							<ol>
+								<li>Password recovering </li>
+								<li>Self-registering </li>
+								<li>"Visit Apache OpenMeetings" link </li>
+								<li>Enter wrong login/password </li>
+								<li>Enter correct login/password </li>
+								<li>Exit the system by click the Exit button </li>
+							</ol>
+						</li>
+						<li>
+							Dashboard
+							<ol>
+								<li>Correct user info in the upper left corner </li>
+								<li>Links in the "Help and support" section </li>
+								<li>It should be possible to enter user’s room from the dashboard </li>
+								<li>Room details should be shown correctly in the "Rooms in this section…" part of the screen </li>
+							</ol>					
+						</li>
+						<li>
+							Global chat 
+							<ol>
+								<li>Send/receive message where at least 3 users in the system </li>
+								<li>Adding a contact to the contact list </li>
+								<li>Private message </li>
+								<li>Showing user profile </li>
+								<li>Inviting user to the conference room </li>
+								<li>Copy chat log </li>
+								<li>Delete chat log </li>
+								<li>Changing font style in the massage </li>
+								<li>Adding emotions to the message </li>
+							</ol>
+							Attention! Correct RTL support does not work in the current implementation 
+						</li>
+						<li>
+							Calendar view
+							<ol>
+								<li>Change view (weekly/daily/monthly) and moving between the dates </li>
+								<li>Adding/removing/moving by mouse an event </li>
+							</ol>
+						</li>
+						<li>
+							Calendar invitation window
+							<ol>
+								<li>Creating/updating/deleting an event </li>
+								<li>Inviting 3 internal and 3 external guests </li>
+								<li>Different reminder types: receiving e-mail invitation for internal and external guests </li>
+								<li>Password protected invitation </li>
+								<li>Inviting to the rooms of the different types </li>
+								<li>Choosing time zone for external guest </li>
+								<li>Correct user data in the invitations </li>
+								<li>SMS reminder for internal and external guests </li>
+								<li>E-mail reminder for internal and external guests </li>
+								<li>It should be possible to enter to the event via invitation link room at the particular time slot only </li>
+								<li>Enter the room via invitation window </li>
+							</ol>
+						</li>
+						<li>
+							My Profile: User profile should contain correct user info and allow to edit this 
+						</li>
+						<li>
+							Contacts and Messages
+							<ol>
+								<li>Add/remove a message </li> 
+								<li>Creating a new folder </li>
+								<li>Moving between the folders </li>
+								<li>Marking messages as read/unread </li>
+								<li>Message filters </li>
+								<li>Contact list </li>
+							</ol>
+						</li>
+						<li>
+							User settings
+							<ol>
+								<li>Possibility to change the user info </li>
+								<li>Changing time zone and language (should start to work after user re-login </li>
+								<li>Community settings or different users </li>
+								<li>Display settings</li> 
+							</ol>
+						</li>
+						<li>
+							Search users
+							<ol>
+								<li>Send a private message </li>
+								<li>Adding a contact </li>
+								<li>View contact details via user list </li>
+							</ol>
+						</li>
+						<li>
+							Room lists 
+							<ol>
+								<li>Public rooms, private rooms and my rooms should contain correct room lists </li>
+								<li>User list for the selected room </li>
+								<li>Room details for the selected room </li>
+							</ol>
+						</li>
+						<li>
+							Recordings
+							<ol> 
+								<li>The list should contain available recordings in public and private folders </li>
+								<li>Info panel should contain actual info about the recording </li>
+								<li>Downloading a recording is different formats (AVI/FLV) </li>
+								<li>Play the recording in OpenMeetings </li>
+								<li>Play downloaded recording by Windows player </li>
+								<li>Remove a recording from the folder </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – general issues (should be tested with at least 3 attendees)
+							<ol>
+								<li>Enter the room: different cases for the cam/micro, choosing of the cam resolution, test recording, allow/deny of video </li>
+								<li>User list should be shown correctly </li>
+								<li>Correct user credentials after  the room entering </li>
+								<li>Add moderator permissions to the user </li>
+								<li>Turn micro on/off in the user list </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window </li>
+								<li>Turn micro on/off in the user list to another user – possible by the moderator only </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window - possible by the moderator only </li>
+								<li>Allow/deny drawing on whiteboard – possible by the moderator only </li>
+								<li>Allow/deny screen sharing – possible by the moderator only </li>
+								<li>Allow/deny remote screen control – possible by the moderator only </li>
+								<li>Allow/deny exclusive audio – possible by the moderator only </li>
+								<li>Re-start devise settings via user list </li>
+								<li>Re-start devise settings via video window </li>
+								<li>Kick the user off by the moderator </li>
+								<li>Click F8 key to arrange videos </li>
+								<li>Activity and actions panel should contain correct info </li>
+								<li>Exit the room </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing: file uploading + documents
+							<ol>
+								<li>Upload a document with "Load directly to whiteboard" switch turned on </li>
+								<li>Upload a with "Load directly to whiteboard" switch turned on off </li>
+								<li>Upload a document with the localized file name and spaces in the name </li>
+								<li>Uploading a document into different folders: private files should be visible only their owner only </li>
+								<li>Removing a file from the room </li>
+								<li>Home and public drive size should change correctly </li>
+								<li>Adding a new folder </li>
+								<li>Removing a folder </li>
+								<li>Load a document of each supported type and check that it’s shown correctly </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – whiteboard and properties panels (should be tested with at least 3 attendees)
+							<ol>
+								<li>Adding a removing a whiteboard </li>
+								<li>Full-fit switch </li>
+								<li>Clear whiteboard </li>
+								<li>Clear objects of current slide only </li>
+								<li>Save and export </li>
+								<li>Undo </li>
+								<li>Select an object </li>
+								<li>Pointer </li>
+								<li>Text </li>
+								<li>Paint </li>
+								<li>Draw line </li>
+								<li>Draw underline </li>
+								<li>Rectangle </li>
+								<li>Ellipse </li>
+								<li>Arrow </li>
+								<li>Cliparts</li>
+							</ol>						
+						</li>
+						<li>
+							Restricted room testing – chat (should be tested with at least 3 attendees)
+							<ol>
+								<li>Send a message </li>
+								<li>Start a private chat </li>
+								<li>Chat moderation </li>
+								<li>Font style </li>
+								<li>Emotions </li>
+								<li>Show/copy chat log </li>
+								<li>Delete server chat log </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – screen sharing and recordings (should be tested with at least 3 attendees)
+							<ol>
+								<li>"Share record/screen" button in the room </li>
+								<li>Desktop sharer: start/stop sharing </li>
+								<li>Change the shared screen area (X-offset, Y-offset, width, height) </li>
+								<li>Change the screen sharing quality </li>
+								<li>Start/stop recordings – need to check that it works as expected </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – Actions menu
+							<ol>
+								<li>Send invitation: send English and localized message </li>
+								<li>Send invitation with password </li>
+								<li>Send invitations with 3 different time periods </li>
+								<li>Change time zone of the invitation </li>
+								<li>Change language of the invitation </li>
+								<li>Send invitation screen: "Generate URL" button – check the same things as for the invitations sent by email </li>
+								<li>Apply to be moderator </li>
+								<li>Apply to whiteboard access </li>
+								<li>Apply to audio/video access </li>
+								<li>Create a poll </li>
+								<li>Poll results </li>
+								<li>Vote </li>
+								<li>Default whiteboard settings: check all of them </li>
+							</ol>
+						</li>
+						<li>
+							Conference room testing
+							<ol>
+								<li>User list should look in another way in compare with restricted type </li>
+								<li>Generally, all should look OK when enter the room </li>
+							</ol>
+						</li>
+						<li>
+							Interview room testing (should be tested with at least 3 attendees)
+							<ol>
+								<li>User list should look as expected </li>
+								<li>Change a user for video pod </li>
+								<li>Start/stop recordings </li>
+							</ol>
+						</li>						
+					</ol>			
+				</li>
+				<li>
+					<b>Admin GUI tests</b>
+					<ol>
+						<li>
+							Users
+							<ol>
+								<li>Add/edit/remove/search user in the table </li>
+								<li>Move between screens where there are many users in the table </li>
+								<li>Edit text fields </li>
+								<li>Change a time zone, re-login and check the calendar </li>
+								<li>Change a language, re-login and check the GUI language </li>
+								<li>Е-mail: e-mails should pass </li>
+								<li>Phone and SMS switch: if set and turned on, sms messages should pass </li>
+								<li>Change a status – non-active user cannot login </li>
+								<li>Change user role and re-login </li>
+								<li>Change user group  - user has an access only to the rooms belong to his organization </li>
+								<li>Change community settings and check </li>
+							</ol>
+						</li>
+						<li>
+							Connections
+							<ol>
+								<li>Should be tested with at least 3 users in the system </li>
+								<li>Sessionvars table should be shown correctly </li>
+								<li>Kick the user from the system </li>
+							</ol>
+						</li>
+						<li>
+							Organizations 
+							<ol>
+								<li>Add/remove/edit/search an organization </li>
+								<li>Add/remove a user from the user list of selected organization </li>
+							</ol>
+						</li>
+						<li>
+							Conference rooms
+							<ol>
+								<li>Add/remove/edit/search a room </li>
+								<li>User list for the given room should contain actual list </li>
+								<li>Turn the Moderation switch on/off and enter the room </li>
+								<li>Add/remove a user to the default moderator list </li>
+								<li>Check max participants number in the room </li>
+								<li>Change room type and enter the room </li>
+								<li>Turn public switch on/off </li>
+								<li>Turn "Demo switch" on/off, change the demonstration time </li>
+								<li>Turn "Allow user questions" on/off and enter the room </li>
+								<li>Turn "Audio only" switch on/off and enter the room </li>
+								<li>Set "Close URL" to some URL, enter the room and then exit – you should be re-directed correspondingly </li>
+								<li>Check that SIP settings work as expected </li>
+								<li>Check that "Allow recordings" switch  works as expected </li>
+								<li>Check that "Layout options" switch work as expected </li>
+								<li>Check that "Allow font styles" switch works as expected </li>
+							</ol>
+						</li>
+						<li>					
+							Configuration
+							<ol>
+								<li>Allow_frontend_register </li>
+								<li>Mail server settings </li>
+								<li>SMS provider settings </li>
+								<li>Application.name </li>
+								<li>Default_lang_id </li>
+								<li>default time zone </li>
+								<li>SIP settings </li>
+								<li>Reminder minutes </li>
+							</ol>
+						</li>
+						<li>					
+							Language editor 
+							<ol>
+								<li>Add/remove/edit/search a key </li>
+								<li>Import/export of localization files </li>
+							</ol>
+						</li>
+						<li>					
+							LDAP: Add/remove/edit/search a record
+						</li>
+						<li>
+							Backup
+							<ol>
+								<li>System import </li>
+								<li>System backup </li>
+								<li>TBD – need to add tests for command line admin here </li>
+							</ol> 
+						</li>
+						<li>
+							Servers: Add/remove/edit/search a server
+						</li>						
+					</ol>
+				</li>
+				<li>
+					<b>SIP integration tests</b> (should be tested with at least 3 attendees in the room; for restricted and interview rooms)
+					<ol>
+						<li>Call from the room to the external phone number </li>
+						<li>Call from external phone number to the room </li>
+						<li>Call from the software phone to the room </li>
+						<li>Call from the software phone with video to the room </li>
+					</ol>
+				</li>
+				<li>
+					<b>Network testing script</b>
+				</li>
+				<li>
+					<b>Site integration tests</b>
+					<ol>
+						<li>Enter OpenMeetings room from Mooddle site </li>
+						<li>Check that recordings link are shown on the Moodle site </li>
+						<li>Enter OpenMeetings room from Joomla site </li>
+						<li>Check that recordings link are shown on the Joomla site </li>
+						<li>Enter OpenMeetings room from Drupal site </li>
+						<li>Check that recordings link are shown on the Drupal site </li>
+					</ol>
+				</li>
+				<li>
+					<b>Extended test plan for the recordings and screen sharing testing</b>
+					<ol>
+						<li><b>Interview room testing</b>
+							<ol>
+								<li>
+									Just a 5 minutes recording:
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Wait for 5 minutes</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.1 – 1.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>there should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>Just a 30 minutes recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>Just an 1 hour recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>
+									5-minutes recording: user exits the room before the recording gets stopped
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Exit the room by user B</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.4.1 – 1.4.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>There should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>
+									5-minutes recording: user A starts recording, user B stops
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Stop recording by user B</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed as expected</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li>
+							<b>Conference room testing</b>
+							<ol>				
+								<li>
+									Screen sharing
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start screen sharing session by user A, choose High quality</li>
+										<li>Check that A's screen looks correctly for users B and C and sound is OK in the room</li>
+										<li>Stop screen sharing by user A after 5 minutes</li>
+										<li>Repeat steps 2.1.1-2.1.7 3 times</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Very high quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Medium quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Low quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose some random height and width on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but turn the “Notify on disconnect” switch on the step 2.1.5</li>									
+									</ol>
+								</li>
+								<li>
+									Recordings
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start recording session by user A, choose High quality</li>
+										<li>Stop recording session by user A after 5 minutes</li>
+										<li>Repeat steps 2.2.1-2.2.6 3 times</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Very high quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Medium quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Low quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose some random height and width on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but turn the “Notify on disconnect” switch on the step 2.2.5</li>
+										<li>Go to the A's recordings list and check that all the recordings are there, processed without errors and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Recordings + screen sharing: user enters the room after recording is started
+									<ol>
+										<li>Enter conference room by user A</li>
+										<li>Start screen sharing and recordings with default parameters by user A</li>
+										<li>Enter the room by user B, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Enter the room by user C, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Exit the room by user B; wait 3 minutes</li>
+										<li>Exit the room by user C; wait 3 minutes</li>
+										<li>Exit the room by user A</li>
+										<li>Repeat steps 2.3.1-2.3.7 3 times</li>
+										<li>Go to the recordings list for user A and check that all the recordings are OK and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Stress test
+									<ol>
+										<li>Enter the room by the users A, B, C, D and E</li>
+										<li>Open A, B, C, D and E videos</li>
+										<li>Start screen sharing and recordings session with high quality by user A</li>
+										<li>Wait 30 minutes</li>
+										<li>Stop screen sharing</li>
+										<li>Go to A's recordings list and check that created recording is OK</li>
+										<li>Repeat steps 2.3.1-2.3.6 3 times</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/MoodlePlugin.html b/docs/MoodlePlugin.html
new file mode 100644
index 0000000..aa76308
--- /dev/null
+++ b/docs/MoodlePlugin.html
@@ -0,0 +1,419 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Moodle Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Moodle Plugin for OpenMeetings"><strong>Moodle Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can get the latest Version of the Plugin for Moodle from the
+				<a href="downloads.html">downloads</a>
+				.
+				<br />
+				You can find the OpenMeetings Plugin also in the
+				<a href="http://moodle.org/plugins/view.php?plugin=mod_openmeetings" target="_BLANK" rel="nofollow">Moodle Plugin database</a>
+				.
+				<br />
+				A demo version of the Moodle plugin is available at
+				<a href="http://moodle.openmeetings.de" target="_BLANK" rel="nofollow">moodle.openmeetings.de
+				</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Installation of the Moodle Plugin for Apache OpenMeetings"><strong>Installation of the Moodle Plugin for Apache OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You simply download the ZIP or TAR package and unzip it to Moodle's "mod" directory.<br />
+				Eventually you need to unzip the package into a folder called "openmeetings".
+				The folder structure is:<br />
+				$MOODLE_HOME/mod/openmeetings/*.php
+				<br />
+				Then you visit the admin interface of Moodle, for example
+				<a href="http://$your_moodle_host/$MOODLE_WWW_ROOT/admin" target="_BLANK" rel="nofollow">http://$your_moodle_host/$MOODLE_WWW_ROOT/admin</a> 
+					<br />
+				Moodle will detect that there is a new plugin and will show the plugin installation screen:
+			</p>
+                                                <a class="fancybox-buttons" href="images/moodle_install_plugin.png">
+				<img src="images/moodle_install_plugin.png" alt="" width="430" height="220" />
+			</a>
+                                                <p>
+				After you have clicked on "Update database" Moodle will show you the plugin configuration screen:
+			</p>
+                                                <a class="fancybox-buttons" href="images/moodle_configure_plugin.png">
+				<img src="images/moodle_configure_plugin.png" alt="" width="500" height="300" />
+			</a>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Adding a new conference room to a Moodle course"><strong>Adding a new conference room to a Moodle course</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				After installation of the plugin you can go to the course pages in Moodle and turn editing on.
+				Then you choose the activity "OpenMeetings", Moodle will then show you the conference room 
+				configuration with all the options:
+			</p>
+                                                <a class="fancybox-buttons" href="images/moodle_add_activity_plugin.png">
+				<img src="images/moodle_add_activity_plugin.png" alt="" width="430" height="360" />
+			</a>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/MySQLConfig.html b/docs/MySQLConfig.html
new file mode 100644
index 0000000..fc0ecda
--- /dev/null
+++ b/docs/MySQLConfig.html
@@ -0,0 +1,439 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - MySQL Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="MySQL Configuration"><strong>MySQL Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Before you start"><strong>Before you start</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>Make sure that you have set utf8 as
+						default/server-character-set in your MySQL configuration (my.cnf)
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MySQL is listening on TCP/IP connections!
+						<br />
+						To verify if MySQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Steps todo"><strong>Steps todo</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>
+						You need to download the JConnector from mysql
+						<a href="http://www.mysql.com/downloads/connector/j/" target="_BLANK" rel="nofollow">http://www.mysql.com/downloads/connector/j/</a>
+						and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="MySQL Sample Configuration"><strong>MySQL Sample Configuration</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					There is a sample configuration for MySQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Navigation.html b/docs/Navigation.html
new file mode 100644
index 0000000..c41a2c1
--- /dev/null
+++ b/docs/Navigation.html
@@ -0,0 +1,365 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Change main navigation</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing the main navigation"><strong>Changing the main navigation</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>To customize the main menu (for example remove entries or changing
+				the order) you can edit the tables:  </p>
+                                                <ul>
+				<li>navimain </li>
+				<li>naviglobal </li>
+				<li>navisub (currently not in use) </li>
+			</ul>
+                                                <p />
+                                                <p>
+				You need to make sure that you
+				<strong>restart red5 after doing changes to the database</strong>
+				, there is a database cache, so changes might not take affect as
+				long as you did not restart.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/OpenOfficeConverter.html b/docs/OpenOfficeConverter.html
new file mode 100644
index 0000000..aeac745
--- /dev/null
+++ b/docs/OpenOfficeConverter.html
@@ -0,0 +1,376 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - OpenOffice converter for OpenMeetings</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenOffice Service for OpenMeetings"><strong>OpenOffice Service for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				To import .doc, .docx, .odp, .xls, .xlsx, .ppt, .pptx, ... [ all
+				files that you can open with OpenOffice ]
+				to OpenMeetings and use
+				them in the whiteboard you need OpenOffice or LibreOffice
+				installed
+				the machine that runs OpenMeetings.
+			</p>
+                                                <p>
+				<i>Since Version 2.0 of OpenMeetings starting of
+					OpenOffice/LibreOffice as service in not required, JODConverter
+					will automatically start and shut down the service!
+				</i>
+			</p>
+                                                <p>
+				Installation of JODConverter means: You donwload the ZIP binary from
+				their
+				<a href="http://code.google.com/p/jodconverter/" target="_BLANK" rel="nofollow">website</a>
+				and then configure in Apache OpenMeetings Administration &gt;
+				Configuration (or during installation) the config key
+				<tt>jod.path</tt>
+				to point to the "lib" directory of the unpacked JODConverter binary.
+				There is no restart of OpenMeetings required.
+			</p>
+                                                <p>You should use an OpenOffice version greater 3</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/OracleConfig.html b/docs/OracleConfig.html
new file mode 100644
index 0000000..8345ec3
--- /dev/null
+++ b/docs/OracleConfig.html
@@ -0,0 +1,425 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - IBM DB2 Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="IBM DB2 Configuration"><strong>IBM DB2 Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Before you start"><strong>Before you start</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>Download the latest JDBC Driver from Oracle for your database
+						version. Place those JARs into
+						$Red5/webapps/openmeetings/WEB-INF/lib
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Steps todo"><strong>Steps todo</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml connectionURL, username and
+						password with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Oracle Sample Configuration"><strong>Oracle Sample Configuration</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					There is a sample configuration for Oracle that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/PortSettings.html b/docs/PortSettings.html
new file mode 100644
index 0000000..5352323
--- /dev/null
+++ b/docs/PortSettings.html
@@ -0,0 +1,475 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Port settings</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Default Configuration"><strong>Default Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Port 5080: HTTP (For example for file upload and download) </li>
+				<li>Port 1935: RTMP (Flash Stream and Remoting/RPC) </li>
+				<li>Port 8088: RTMP over HTTP-Tunneling (rtmpT) </li>
+			</ul>
+                                                <p>Additionally red5 uses some ports internally. However those ports
+				are not in use by OpenMeetings by default.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configure alternative ports"><strong>Configure alternative ports</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You need to change two files: </p>
+                                                <ul>
+				<li>Server-Side configuration: $RED5_HOME/conf/red5.properties, you
+					need to restart the red5-service so that changes are online.
+				</li>
+				<li>Client-Side configuration:
+					$RED5_HOME/webapps/openmeetings/public/config.xml, you need to clear your
+					browser cache after changing the file.
+				</li>
+				<li>
+					<blockquote>Every server side configuration has a client side
+						representative
+					</blockquote>
+				</li>
+			</ul>
+                                                <p />
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Config-Name 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Default-value 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Name in red5.properties 
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         Name in public/config.xml 
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         HTTP 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         5080 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         http.port 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         red5httpport 
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         RTMP 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         1935 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         rtmp.port 
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+         rtmpport 
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Preventing Firewall issues"><strong>Preventing Firewall issues</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>A common way of bypassing the firewall is to change HTTP port to
+				80 and rtmpT to 443.
+			</p>
+                                                <p>A short description about the connection mechanism: The
+				application first tries connecting to rtmp 3 times, because rtmp is
+				the protocol that is less performance hungry. If that fails the
+				application will fallback to rtmpT.
+			</p>
+                                                <p>Most firewalls do allow traffic on port 443 and they normally do
+				not analyse the packets, because 443 is normally SSL encrypted, so
+				the firewall should not be able to read the packets at all.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings over SSL"><strong>OpenMeetings over SSL</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can run OpenMeetings completely over SSL. See
+				<a href="RTMPSAndHTTPS.html">RTMPSAndHTTPS</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/PostgresConfig.html b/docs/PostgresConfig.html
new file mode 100644
index 0000000..6810e19
--- /dev/null
+++ b/docs/PostgresConfig.html
@@ -0,0 +1,436 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Apache OpenMeetings Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - PostgreSQL Configuration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="PostgreSQL Configuration"><strong>PostgreSQL Configuration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Before you start"><strong>Before you start</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>Make sure that you have set utf8 as default/server-character-set 
+					</li>
+					<li>
+						make sure PostgreSQL is listening on TCP/IP connections!
+						<br />
+						To verify if PostgreSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+					<li><span style="font-size: larger; color: blue;">IMPORTANT</span> According to
+						<a href="http://markmail.org/message/opymlab2e6wygb7p">this</a> thread you need to ensure:<br />
+						<tt>standard_conforming_strings</tt> is set to <tt><b>on</b></tt> and <br />
+						<tt>escape_string_warning</tt> is set to <tt><b>off</b></tt>
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Steps todo"><strong>Steps todo</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="PostgreSQL Sample Configuration"><strong>PostgreSQL Sample Configuration</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					There is a sample configuration for PostgreSQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RTMPSAndHTTPS.html b/docs/RTMPSAndHTTPS.html
new file mode 100644
index 0000000..abe1db1
--- /dev/null
+++ b/docs/RTMPSAndHTTPS.html
@@ -0,0 +1,560 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Using OpenMeetings with RTMPS and HTTPS</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Using OpenMeetings with RTMPS and HTTPS"><strong>Using OpenMeetings with RTMPS and HTTPS</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>There are 3 ways the client communicates with the server: </p>
+                                                <ul>
+				<li>The flash-client uses RTMP protocol to transfer Audio/Video and
+					to send and receive the user data (login et cetera) to the server
+					and back
+				</li>
+				<li>The browser uses HTTP protocol to load the SWF and to upload and
+					download the files (documents, pdfs, images) to the server and
+					back.
+				</li>
+				<li>The screensharing client uses RTMP protocol to transfer screen
+					data and remote control to the server and back
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Prerequisites"><strong>Prerequisites</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>You need OpenMeetings 1.9.x for this, OpenMeetings 1.8.x does
+					not
+					have those options.
+				</li>
+				<li>Install OpenMeetings according to the install instructions and
+					check that it runs without problems
+				</li>
+				<li>Rename the existing keystore file red5/conf/keystore to
+					keystore.bak
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configuring RTMPS for the Flash Client"><strong>Configuring RTMPS for the Flash Client</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ol>
+				<li>
+					Create a new keystore and key, use the same password for both:<br />
+					(copied from
+					<a href="http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS%29:" rel="nofollow">http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS):</a>
+					<div class="xmlcode">
+						keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore<br />
+						Enter keystore password:<br />
+						Re-enter new password:<br />
+						What is your first and last name?<br />
+						[Unknown]:  &lt;your hostname, e.g demo.openmeetings.de&gt;<br />
+						What is the name of your organizational unit?<br />
+						[Unknown]:  Dev<br />
+						What is the name of your organization?<br />
+						[Unknown]:  OpenMeetings<br />
+						What is the name of your City or Locality?<br />
+						[Unknown]:  Henderson<br />
+						What is the name of your State or Province?<br />
+						[Unknown]:  Nevada<br />
+						What is the two-letter country code for this unit?<br />
+						[Unknown]:  US<br />
+						Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?<br />
+						[no]:  yes<br />
+						Enter key password for &lt;red5&gt;<br />
+					</div>
+				</li>
+		
+				<li>Generate a CSR: keytool -certreq -keyalg RSA -alias red5 -file
+					red5.csr -keystore red5/conf/keystore
+				</li>
+				<li>Submit CSR to your CA of choice and receive a signed certificate
+				</li>
+				<li>Import your chosen CA's root certificate into the keystore (may
+					need to download it from their site - make sure to get the root CA and
+					not the intermediate one): keytool -import -alias root -keystore
+					red5/conf/keystore
+					-trustcacerts -file root.crt (note: you may receive a warning that
+					the certificate already exists in the system wide keystore - import
+					anyway)
+				</li>
+				<li>Import the intermediate certificate(s) you normally receive with
+					the certificate:
+					keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts
+					-file intermediate.crt
+				</li>
+				<li>Import the certificate you received: keytool -import -alias red5
+					-keystore red5/conf/keystore -trustcacerts -file
+					demo.openmeetings.de.crt
+				</li>
+                <li>
+                Create additional certificate as described above.
+                Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>.
+                </li>
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Set up RTMPS"><strong>Set up RTMPS</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ol>
+		      <li>
+		      Uncomment <tt>&lt;!-- RTMPS --&gt;</tt> section in <tt>red5/conf/red5-core.xml</tt>
+		      </li>
+
+				<li>
+					Edit <tt>red5/conf/red5.properties</tt> and set
+					<tt>rtmps.port=5443</tt>
+					and
+					<tt>rtmps.keystorepass=password</tt>
+					(password = password you set on your new
+					keystore)
+				</li>
+			
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>&lt;rtmpsslport&gt;5443&lt;/rtmpsslport&gt;</tt>
+					,
+					<tt>&lt;useSSL&gt;yes&lt;/useSSL&gt;</tt>
+					and
+					<tt>&lt;proxyType&gt;best&lt;/proxyType&gt;</tt>
+				</li>
+
+				<li>Restart red5 and try to connect - your connection should now be
+					made via RTMPS (close port 1935 to be sure)
+				</li>   
+					  
+		  </ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="SSL for the web interface"><strong>SSL for the web interface</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you want to use SSL for the web interface in addition to RTMPS,
+				you need to make some further modifications. This is mainly to secure
+				the server against MITM attacks, additionally some other features
+				like file uploads also use a plain HTTP connection if this is not
+				done. The following instructions assume that you have already set up
+				RTMPS successfully. </p>
+                                                <ol>
+				<li>
+					Edit <tt>red5/conf/jee-container.xml</tt> file:<br />
+					Comment <tt>Tomcat without SSL enabled</tt> section<br />
+					UNComment <tt>Tomcat with SSL enabled</tt> section
+				</li>
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>&lt;protocol&gt;https&lt;/protocol&gt;</tt>
+				</li>
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>red5httpport</tt> to <tt>https</tt> port
+				</li>
+				<li>In webapps/openmeetings/WEB-INF/conf/axis2.xml add (below the existing http transportReceiver (around line 225))
+					<div class="xmlcode">&lt;transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener"&gt;<br />
+        &lt;parameter name="port"&gt;443&lt;/parameter&gt;<br />
+&lt;/transportReceiver&gt;</div>
+				</li>
+				<li>Edit red5/conf/red5.properties and set <tt>https.port=443</tt> </li>
+				<li>
+					Restart red5 and try to connect to
+					<a href="https://your.server" rel="nofollow">https://your.server</a>
+					- you should be redirected to the OpenMeetings
+					app and all access should be via HTTPS or RTMPS (close port 5080 to
+					be sure).
+				</li>
+            </ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Credits"><strong>Credits</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Credits goto: Nexus and Holger Rabbach for their help and
+				contribution and configuration documention! </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RecommendedHardwareList.html b/docs/RecommendedHardwareList.html
new file mode 100644
index 0000000..8da962b
--- /dev/null
+++ b/docs/RecommendedHardwareList.html
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Cameras"><strong>Cameras</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Logitech QuickCam Sphere AF</li>
+				<li>Logitech QuickCam E3500</li>
+				<li>Samsung Pleomax PWC-7100</li>
+				<li>Genius Look320S</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Skypemate WC-103M</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Headsets"><strong>Headsets</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Logitech Clear Chat Style</li>
+			</ul>
+                                                <ul>
+				<li>ClearChat PC Wireless (helps to suppress echo)</li>
+				<li>Logitech USB Desktop Microphone - Mikrophon (good sound, but bad echo cancellation)</li>
+			</ul>
+                                                <b>Note for Mac OS X users:</b>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Speakerphones"><strong>Speakerphones</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>Phoenix Audio Quattro2 USB Speakerphone MT301 (a single microphone + speakers can be used even with 20-30 people sitting in a room)</li>
+				<li>Phoenix DUET Executive</li>
+				<li>Jabra SPEAK410</li>
+				<li>Plantronics MCD 100M</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Konftel 300</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RedminePlugin.html b/docs/RedminePlugin.html
new file mode 100644
index 0000000..2d6ab04
--- /dev/null
+++ b/docs/RedminePlugin.html
@@ -0,0 +1,370 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Redmine Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Plugin for Redmine"><strong>OpenMeetings Plugin for Redmine</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Current Development Snapshots for testing can be created from the sources:
+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-redmine-plugin/trunk">here</a>.<br />
+				The page at redmine site is <a href="http://www.redmine.org/plugins/redmine-openmeetings">here</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>TBD</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ReleaseGuide.html b/docs/ReleaseGuide.html
new file mode 100644
index 0000000..8d13b41
--- /dev/null
+++ b/docs/ReleaseGuide.html
@@ -0,0 +1,606 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Release Guide</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to Build a Release of OpenMeetings"><strong>How to Build a Release of OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Required tools"><strong>Required tools</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					<p>To build a binary release of OpenMeetings you need: </p>
+					<ul>
+						<li>Sun JDK6</li>
+						<li>Apache ANT (minimum) 1.8.3</li>
+						<li>
+							SVN Command line client (Subversion 1.7 required!)
+							<a href="http://subversion.apache.org/packages.html" target="_BLANK" rel="nofollow">http://subversion.apache.org/packages.html</a>
+						</li>
+						<li>A text editor</li>
+						<li>You need to be online! The build process actively downloads
+							needed libraries and dependencies.
+						</li>
+					</ul>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Prepare your Apache ID"><strong>Prepare your Apache ID</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					Every release package must be signed with a PGP/GPG key.
+					<br />
+					So if you want to release a package your Apache Id must be
+					connected with a PGP key!
+					<br />
+					<br />
+					You might follow:
+					<br />
+					<a href="http://www.apache.org/dev/new-committers-guide.html#security-and-pgp" target="_blank">http://www.apache.org/dev/new-committers-guide.html#security-and-pgp
+					</a>
+					<br />
+					<br />
+					In short:
+					<br />
+					Create PGP key pairs (private + public) (and I recommend creating a
+					Revoke Cert)
+					<br />
+					Upload the public key (either bei using the PGP Tool that you use
+					to create the key) or by using the web form to:
+					<a href="http://pgp.mit.edu/" target="_blank" rel="nofollow">http://pgp.mit.edu/
+					</a>
+					<br />
+					Add the fingerprint string (something like "BF13 CF11 F9C9 0CBE
+					4413 09AB 0055 16BF 93A3 0395") to your profile at
+					<a href="http://id.apche-org" target="_blank" rel="nofollow">id.apche-org
+					</a>
+					<br />
+					Wait for 6-8 hours, the server will search for a public key based
+					on your fingerprint, if success it will create a file with your
+					name at:
+					<br />
+					<a href="https://people.apache.org/keys/committer/">https://people.apache.org/keys/committer/</a>
+					<br />
+					<br />
+					If that is "success" then add your key to:
+					<br />
+					<a href="https://svn.apache.org/repos/asf/openmeetings/project/KEYS">https://svn.apache.org/repos/asf/openmeetings/project/KEYS
+					</a>
+					<br />
+					and follow the instructions in the file.
+					<br />
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step1 - Prepare files"><strong>Step1 - Prepare files</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					Check that all files:
+					<br />
+					LICENSE, NOTICE, DISCLAIMER, CHANGELOG, README
+					<br />
+					are up to date and refer to the right version.
+				</p>
+                                                <p>
+					Create a TAG of the SVN tree that you would like to release<br />
+					Example:
+				</p>
+                                                <div class="xmlcode">
+					svn copy -r1453158 https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp \<br />
+						https://svn.apache.org/repos/asf/openmeetings/tags/2.1RC1 \<br />
+						-m "Release candidate 1"
+				</div>
+                                                <p>Get the source from your TAG: </p>
+                                                <div class="xmlcode">
+					svn checkout https://svn.apache.org/repos/asf/openmeetings/tags/$BRANCHORTAG/<br />
+					$BRANCHORTAG should be replaced with your new TAG
+				</div>
+                                                <p>Edit the file build.properties change</p>
+                                                <div class="xmlcode">
+					project.status=SNAPSHOT
+				</div>
+                                                <p>to</p>
+                                                <div class="xmlcode">
+					project.status=RELEASE
+				</div>
+                                                <p>Run the command: </p>
+                                                <div class="xmlcode">
+					ant dist-release
+				</div>
+                                                <p>Test building the source on windows and OSx or Linux</p>
+                                                <p>Test running the binary's</p>
+                                                <p>Create MD5 checksums</p>
+                                                <div class="xmlcode">
+					#On OSX you might use this command to make a MD5 checksum and store it to a file<br />
+					md5 -r apache-openmeetings-XXX-src.zip &gt;apache-openmeetings-XXX-src.zip.md5
+				</div>
+                                                <div class="xmlcode">
+					#To create MD5 hashes On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do md5sum $f &gt; $f.md5; done<br />
+					<br />
+					#To check MD5 hashes On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do md5sum -c $f.md5; done
+				</div>
+                                                <p>
+					Create signatures with the your KEY for every file, the KEY must be available at:<br />
+					<a href="http://www.apache.org/dist/incubator/openmeetings/KEYS">
+						http://www.apache.org/dist/incubator/openmeetings/KEYS
+					</a>
+				</p>
+                                                <div class="xmlcode">
+					#To create signatures On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do gpg --armor --output $f.asc --detach-sig $f; done<br />
+					<br />
+					#To check signatures On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do gpg --verify $f.asc; done
+				</div>
+                                                <p>
+					Commit artifacts you have created with KEYS file to the
+					<tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt>
+					Proposed file structure for "Release Candidate 1" of 2.1 will be:
+				</p>
+                                                <div class="xmlcode">
+					2.1<br />
+					2.1/rc1<br />
+					2.1/rc1/src<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.md5<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.asc<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.md5<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.asc<br />
+					2.1/rc1/bin<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.md5<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.asc<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.md5<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.asc<br />
+					2.1/rc1/CHANGELOG<br />
+					2.1/rc1/KEYS<br />
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step2 - VOTE and RESULT emails"><strong>Step2 - VOTE and RESULT emails</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					Send a "VOTE" to the developer mailing list including links to release artefacts.<br />
+					A VOTE always contains two parts:<br />
+					Send an email to the developer mailing list with the subject line:<br />
+					[VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a href="http://s.apache.org/vote-2.1.0RC1">example Vote email</a>
+					<a href="http://s.apache.org/vote-2.0.0RC4">example Vote email (Incubator)</a>
+					<br />
+					Forward (Not CC) this Vote email to: private@openmeetings.apache.org<br />
+					<br />
+					After the vote is over, send a "RESULT" email to the list with the subject line:<br />
+					[RESULT][VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a href="http://mail-archives.apache.org/mod_mbox/incubator-openmeetings-dev/201207.mbox/%3CCACeMiA-ibo6fGCbnLjJX9H5H2kFGDVJRMfxPyMtzWzCWNi%2BpOg%40mail.gmail.com%3E">example Result email</a>
+					<br />
+					Forward (Not CC) this RESULT VOTE email to: private@openmeetings.apache.org<br />
+					<br />
+					Votes on whether a package is ready to be released use majority approval -- i.e., at 
+					least three PMC members must vote affirmatively for release, and there must be more 
+					positive than negative votes. Releases may not be vetoed. Before voting +1 PMC members
+					are required to download the signed source code package, compile it as provided, and 
+					test the resulting executable on their own platform, along with also verifying that 
+					the package meets the requirements of the ASF policy on releases.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Step3 - Distribute and announce"><strong>Step3 - Distribute and announce</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If VOTEs positive: Upload the release </p>
+                                                <div class="xmlcode">
+					svn mv https://dist.apache.org/repos/dist/dev/openmeetings/2.1/rc3 \<br />
+						https://dist.apache.org/repos/dist/release/openmeetings/2.1 \<br />
+						-m "RC3 is released as 2.1"
+				</div>
+                                                <p>
+					Wait 24 hours (until all Apache mirrors have synced the packages)
+					and send an announcement to the mailing list + blog and any other
+					channel.
+				</p>
+                                                <p>
+					Email announcements should have the subject line:
+					<br />
+					[ANNOUNCE] Apache OpenMeetings x.xx released
+				</p>
+                                                <p>
+					Add a section to <a href="downloads.html">downloads</a> website.<br />
+					Make sure that the binary packages are linked using the mirror URL as base path (
+					<b>not</b> http://www.apache.org/dist):<br />
+					Mirror URL: 
+					<a href="http://www.apache.org/dyn/closer.lua/openmeetings/">http://www.apache.org/dyn/closer.lua/openmeetings/</a>
+				</p>
+                                                <p>
+					Release candidates should be deleted from <tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt><br />
+					Old releases should be deleted from <tt>https://dist.apache.org/repos/dist/release/openmeetings/</tt>
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RestAPISample.html b/docs/RestAPISample.html
new file mode 100644
index 0000000..d3ac1d8
--- /dev/null
+++ b/docs/RestAPISample.html
@@ -0,0 +1,414 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p> For a detailed instruction which services, methods and params are available see the list in the SoapMethods. ALL methods that are implemented for the SOAP API are also available via REST. 
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to invoke Services via REST"><strong>How to invoke Services via REST</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>For example for the method getSession in the UserService, you would use this URL via REST:
+			</p>
+                                                <p>Sample URL: </p>
+                                                <a href="http://demo.openmeetings.de/openmeetings/services/UserService/getSession">http://demo.openmeetings.de/openmeetings/services/UserService/getSession</a>
+                                                <p>Result: </p>
+                                                <div class="xmlcode">
+				&lt;ns:getSessionResponse/&gt;<br />
+				&lt;ns:return type="org.apache.openmeetings.hibernate.beans.basic.Sessiondata"/&gt;<br />
+				<div style="margin-left:20px">
+					&lt;ax219:id&gt;156971&lt;/ax219:id/&gt;<br />
+					&lt;ax219:language_id xsi:nil="true"//&gt;<br />
+					&lt;ax219:organization_id xsi:nil="true"//&gt;<br />
+					&lt;ax219:refresh_time&gt;2011-07-03T14:40:44.000Z&lt;/ax219:refresh_time/&gt;<br />
+					&lt;ax219:sessionXml xsi:nil="true"//&gt;<br />
+					&lt;ax219:session_id&gt;26584705202d7c1de6cc8e7e28890e3d&lt;/ax219:session_id/&gt;<br />
+					&lt;ax219:starttermin_time&gt;2011-07-03T14:40:44.000Z&lt;/ax219:starttermin_time/&gt;<br />
+					&lt;ax219:storePermanent xsi:nil="true"//&gt;<br />
+					&lt;ax219:user_id xsi:nil="true"//&gt;<br />
+				</div>
+				&lt;/ns:return/&gt;<br />
+				&lt;/ns:getSessionResponse/&gt;<br />
+			</div>
+                                                <p>To login a user the call to auth would be:</p>
+                                                <p>Sample URL: </p>
+                                                <a href="http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&amp;username=hans&amp;userpass=test">http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&amp;username=han&amp;userpass=test</a>
+                                                <p>Result: </p>
+                                                <div class="xmlcode">
+				&lt;ns:loginUserResponse/&gt;<br />
+				<div style="margin-left:20px">
+				    &lt;ns:return&gt;-11&lt;/ns:return/&gt;<br />
+				</div>
+				&lt;/ns:loginUserResponse/&gt;<br />
+			</div>
+                                                <p>=&gt; It does return -10, which is the error id cause we will not write down a SOAP login to our public server in this wiki. However the correct way to check this error would be to invoke the call to get the localized error message. So we invoke the method to get the error via REST:</p>
+                                                <p>Sample URL: </p>
+                                                <a href="http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&amp;errorid=-10&amp;language_id=1">http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&amp;errorid=-10&amp;language_id=1</a>
+                                                <p>Result:</p>
+                                                <div class="xmlcode">
+				&lt;ns:getErrorByCodeResponse/&gt;<br />
+				&lt;ns:return type="org.apache.openmeetings.db.dto.basic.ErrorResult"/&gt;<br />
+				<div style="margin-left:20px">
+					&lt;ax218:errmessage&gt;Username not found&lt;/ax218:errmessage/&gt;<br />
+					&lt;ax218:errorId&gt;-10&lt;/ax218:errorId/&gt;<br />
+					&lt;ax218:errortype&gt;Error&lt;/ax218:errortype/&gt;<br />
+				</div>
+				&lt;/ns:return/&gt;<br />
+				&lt;/ns:getErrorByCodeResponse/&gt;<br />
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RestrictedAccess.html b/docs/RestrictedAccess.html
new file mode 100644
index 0000000..d272b1d
--- /dev/null
+++ b/docs/RestrictedAccess.html
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - How to restrict access to your Openmeetings server</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Server Side"><strong>Server Side</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You can protect your OpenMeetings instance from beeing accessed
+				from 3th party by using the file:
+			</p>
+                                                <p>$RED5_HOME/webapps/openmeetings/WEB-INF/red5-web.properties </p>
+                                                <p>Content: </p>
+                                                <div class="xmlcode">
+				webapp.virtualHosts=*,localhost, 127.0.0.1
+			</div>
+                                                <a href="http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties" rel="nofollow">http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties
+			</a>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Client Side"><strong>Client Side</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>And you can restrict the access also for the client side: Every
+				Flash Plugin will check a file called "crossdomain.xml" before it
+				tries to access the server using rtmp/RPC. This file is located: </p>
+                                                <p>$RED5_HOME/webapps/root/crossdomain.xml </p>
+                                                <p>Content: </p>
+                                                <div class="xmlcode">
+				&lt;?xml version="1.0"?&gt;<br />
+				&lt;cross-domain-policy&gt;<br />
+				        &lt;site-control permitted-cross-domain-policies="all"/&gt;<br />
+				        &lt;allow-access-from domain="localhost" to-ports="20-65535"/&gt;<br />
+				        &lt;allow-access-from domain="*.local" to-ports="20-65535"/&gt;<br />
+				&lt;/cross-domain-policy&gt;<br />
+			</div>
+                                                <p>
+				Sample file:
+				<a href="http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml" rel="nofollow">http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml
+				</a>
+			</p>
+                                                <p>
+					If you accessing your application behind an Apache Webservre (using
+					mod_proxy or mod_jk2) be careful to make the crossdomain.xml
+					accessible. Flash will always search for this file in the www-root
+					directory of every URL you connect to. You might use
+					<a href="https://addons.mozilla.org/de/firefox/addon/firebug/" rel="nofollow">FireBug
+					</a>
+					for example to lookup requests.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/RoomService.html b/docs/RoomService.html
new file mode 100644
index 0000000..90963b4
--- /dev/null
+++ b/docs/RoomService.html
@@ -0,0 +1,4744 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: RoomService</h3>
+	   <p>RoomService contains methods to manipulate rooms and create invitation hash<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/RoomService?wsdl">http://localhost:5080/openmeetings/services/RoomService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in RoomService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#getRoomsPublic"><b>getRoomsPublic</b></a><br/>
+                <div class="navigation_comment"><i >Returns an Object of Type RoomsList which contains a list of
+ Room-Objects. Every Room-Object contains a Roomtype and all informations
+ about that Room. The List of current-users in the room is Null if you get
+ them via SOAP. The Roomtype can be 1 for conference rooms or 2 for
+ audience rooms.</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteFlvRecording"><b>deleteFlvRecording</b></a><br/>
+                <div class="navigation_comment"><i >Deletes a flv recording</i></div>
+                </div>
+                                               <div>
+                <a href="#getFlvRecordingByExternalUserId"><b>getFlvRecordingByExternalUserId</b></a><br/>
+                <div class="navigation_comment"><i >Gets a list of flv recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getFlvRecordingByExternalRoomTypeAndCreator"><b>getFlvRecordingByExternalRoomTypeAndCreator</b></a><br/>
+                <div class="navigation_comment"><i >Gets a list of flv recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getFlvRecordingByExternalRoomTypeByList"><b>getFlvRecordingByExternalRoomTypeByList</b></a><br/>
+                <div class="navigation_comment"><i >Gets a list of flv recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getRecordingsByExternalType"><b>getRecordingsByExternalType</b></a><br/>
+                <div class="navigation_comment"><i >Gets a list of recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getFlvRecordingByExternalRoomType"><b>getFlvRecordingByExternalRoomType</b></a><br/>
+                <div class="navigation_comment"><i >Gets a list of flv recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getFlvRecordingByRoomId"><b>getFlvRecordingByRoomId</b></a><br/>
+                <div class="navigation_comment"><i >Get list of recordings</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomTypes"><b>getRoomTypes</b></a><br/>
+                <div class="navigation_comment"><i >List of available room types</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomCounters"><b>getRoomCounters</b></a><br/>
+                <div class="navigation_comment"><i >Returns current users for rooms ids</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomById"><b>getRoomById</b></a><br/>
+                <div class="navigation_comment"><i >returns a conference room object</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomWithClientObjectsById"><b>getRoomWithClientObjectsById</b></a><br/>
+                <div class="navigation_comment"><i >Returns a object of type RoomReturn</i></div>
+                </div>
+                                               <div>
+                <a href="#getRooms"><b>getRooms</b></a><br/>
+                <div class="navigation_comment"><i >Returns a List of Objects of Rooms You can use "name" as value for
+ orderby or rooms_id</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomsWithCurrentUsers"><b>getRoomsWithCurrentUsers</b></a><br/>
+                <div class="navigation_comment"><i >Returns a List of Objects of Rooms You can use "name" as value for
+ orderby or rooms_id. It also fills the attribute currentUsers in the
+ Room-Object</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModeration"><b>addRoomWithModeration</b></a><br/>
+                <div class="navigation_comment"><i >Create a conference room</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationAndQuestions"><b>addRoomWithModerationAndQuestions</b></a><br/>
+                <div class="navigation_comment"><i >this SOAP Method has an additional param to enable or disable the buttons
+ to apply for moderation this does only work in combination with the
+ room-type restricted</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationQuestionsAndAudioType"><b>addRoomWithModerationQuestionsAndAudioType</b></a><br/>
+                <div class="navigation_comment"><i >adds a new room with options for user questions and audio only</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationQuestionsAudioTypeAndHideOptions"><b>addRoomWithModerationQuestionsAudioTypeAndHideOptions</b></a><br/>
+                <div class="navigation_comment"><i >adds a new room with options for user questions, audio only and hide</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomIdByExternalId"><b>getRoomIdByExternalId</b></a><br/>
+                <div class="navigation_comment"><i >Checks if a room with this exteralRoomId + externalRoomType does exist,
+ if yes it returns the room id if not, it will create the room and then
+ return the room id of the newly created room</i></div>
+                </div>
+                                               <div>
+                <a href="#updateRoomWithModeration"><b>updateRoomWithModeration</b></a><br/>
+                <div class="navigation_comment"><i >Updates a conference room by its room id</i></div>
+                </div>
+                                               <div>
+                <a href="#updateRoomWithModerationAndQuestions"><b>updateRoomWithModerationAndQuestions</b></a><br/>
+                <div class="navigation_comment"><i ></i></div>
+                </div>
+                                               <div>
+                <a href="#updateRoomWithModerationQuestionsAudioTypeAndHideOptions"><b>updateRoomWithModerationQuestionsAudioTypeAndHideOptions</b></a><br/>
+                <div class="navigation_comment"><i >update room with options for user questions, audio only and hide</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteRoom"><b>deleteRoom</b></a><br/>
+                <div class="navigation_comment"><i >Delete a room by its room id</i></div>
+                </div>
+                                               <div>
+                <a href="#kickUser"><b>kickUser</b></a><br/>
+                <div class="navigation_comment"><i >kick all uses of a certain room</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationAndExternalType"><b>addRoomWithModerationAndExternalType</b></a><br/>
+                <div class="navigation_comment"><i >Add a new conference room with option to set the external room type, the
+ external room type should be set if multiple applications use the same
+ OpenMeetings instance</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationExternalTypeAndAudioType"><b>addRoomWithModerationExternalTypeAndAudioType</b></a><br/>
+                <div class="navigation_comment"><i >Adds a new room with options for audio only</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationAndRecordingFlags"><b>addRoomWithModerationAndRecordingFlags</b></a><br/>
+                <div class="navigation_comment"><i >Adds a new room with options for recording</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationExternalTypeAndTopBarOption"><b>addRoomWithModerationExternalTypeAndTopBarOption</b></a><br/>
+                <div class="navigation_comment"><i >Add a conference room with options to disable the top menu bar in the
+ conference room</i></div>
+                </div>
+                                               <div>
+                <a href="#getInvitationHash"><b>getInvitationHash</b></a><br/>
+                <div class="navigation_comment"><i >Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)</i></div>
+                </div>
+                                               <div>
+                <a href="#getInvitationHashFullName"><b>getInvitationHashFullName</b></a><br/>
+                <div class="navigation_comment"><i >Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)</i></div>
+                </div>
+                                               <div>
+                <a href="#sendInvitationHash"><b>sendInvitationHash</b></a><br/>
+                <div class="navigation_comment"><i >Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)</i></div>
+                </div>
+                                               <div>
+                <a href="#sendInvitationHashWithDateObject"><b>sendInvitationHashWithDateObject</b></a><br/>
+                <div class="navigation_comment"><i >Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomsWithCurrentUsersByList"><b>getRoomsWithCurrentUsersByList</b></a><br/>
+                <div class="navigation_comment"><i >Return a RoomReturn Object with information of the current users of a
+ conference room</i></div>
+                </div>
+                                               <div>
+                <a href="#getRoomsWithCurrentUsersByListAndType"><b>getRoomsWithCurrentUsersByListAndType</b></a><br/>
+                <div class="navigation_comment"><i >Return a RoomReturn Object with information of the current users of a
+ conference room with option to search for special external room types</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomWithModerationAndExternalTypeAndStartEnd"><b>addRoomWithModerationAndExternalTypeAndStartEnd</b></a><br/>
+                <div class="navigation_comment"><i >Adds a conference room that is only available for a period of time</i></div>
+                </div>
+                                               <div>
+                <a href="#addMeetingMemberRemindToRoom"><b>addMeetingMemberRemindToRoom</b></a><br/>
+                <div class="navigation_comment"><i >Add a meeting member to a certain room. This is the same as adding an
+ external user to a event in the calendar.</i></div>
+                </div>
+                                               <div>
+                <a href="#addExternalMeetingMemberRemindToRoom"><b>addExternalMeetingMemberRemindToRoom</b></a><br/>
+                <div class="navigation_comment"><i >Add a meeting member to a certain room. This is the same as adding an
+ external user to a event in the calendar. with a certain time zone</i></div>
+                </div>
+                                               <div>
+                <a href="#closeRoom"><b>closeRoom</b></a><br/>
+                <div class="navigation_comment"><i >Method to remotely close or open rooms. If a room is closed all users
+ inside the room and all users that try to enter it will be redirected to
+ the redirectURL that is defined in the Room-Object.
+ 
+ Returns positive value if authentication was successful.</i></div>
+                </div>
+                                               <div>
+                <a href="#modifyRoomParameter"><b>modifyRoomParameter</b></a><br/>
+                <div class="navigation_comment"><i >Method to update arbitrary room parameter.</i></div>
+                </div>
+                                               <div>
+                <a href="#addRoomToOrg"><b>addRoomToOrg</b></a><br/>
+                <div class="navigation_comment"><i >Adds a room to an organization</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in RoomService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomsPublic" ><b>getRoomsPublic</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomsPublic (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns an Object of Type RoomsList which contains a list of
+ Room-Objects. Every Room-Object contains a Roomtype and all informations
+ about that Room. The List of current-users in the room is Null if you get
+ them via SOAP. The Roomtype can be 1 for conference rooms or 2 for
+ audience rooms.
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.room.RoomDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomsPublic?SID=VALUE&roomtypes_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomsPublic?SID=VALUE&amp;roomtypes_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteFlvRecording" ><b>deleteFlvRecording</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteFlvRecording (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long flvRecordingId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Deletes a flv recording
+    			</p>
+    			<p>
+                  Return Type: boolean
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">flvRecordingId</td>
+	                     <td valign="top">the id of the recording</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/deleteFlvRecording?SID=VALUE&flvRecordingId=VALUE">http://localhost:5080/openmeetings/services/RoomService/deleteFlvRecording?SID=VALUE&amp;flvRecordingId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFlvRecordingByExternalUserId" ><b>getFlvRecordingByExternalUserId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFlvRecordingByExternalUserId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Gets a list of flv recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">the externalUserId</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUsertype</td>
+	                     <td valign="top">the externalUserType</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalUserId?SID=VALUE&externalUserId=VALUE&externalUserType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalUserId?SID=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFlvRecordingByExternalRoomTypeAndCreator" ><b>getFlvRecordingByExternalRoomTypeAndCreator</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFlvRecordingByExternalRoomTypeAndCreator (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			       			     , 
+    			       			   Long insertedBy
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Gets a list of flv recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">externalRoomType specified when creating the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">insertedBy</td>
+	                     <td valign="top">the userId that created the recording</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomTypeAndCreator?SID=VALUE&externalRoomType=VALUE&insertedBy=VALUE">http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomTypeAndCreator?SID=VALUE&amp;externalRoomType=VALUE&amp;insertedBy=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFlvRecordingByExternalRoomTypeByList" ><b>getFlvRecordingByExternalRoomTypeByList</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFlvRecordingByExternalRoomTypeByList (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Gets a list of flv recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">externalRoomType specified when creating the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomTypeByList?SID=VALUE&externalRoomType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomTypeByList?SID=VALUE&amp;externalRoomType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRecordingsByExternalType" ><b>getRecordingsByExternalType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRecordingsByExternalType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Gets a list of recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged-in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalType</td>
+	                     <td valign="top">externalType specified when creating room or user</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRecordingsByExternalType?SID=VALUE&externalType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRecordingsByExternalType?SID=VALUE&amp;externalType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFlvRecordingByExternalRoomType" ><b>getFlvRecordingByExternalRoomType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFlvRecordingByExternalRoomType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Gets a list of flv recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">externalRoomType specified when creating the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomType?SID=VALUE&externalRoomType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByExternalRoomType?SID=VALUE&amp;externalRoomType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getFlvRecordingByRoomId" ><b>getFlvRecordingByRoomId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getFlvRecordingByRoomId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long roomId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Get list of recordings
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.dto.record.RecordingDTO>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomId</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByRoomId?SID=VALUE&roomId=VALUE">http://localhost:5080/openmeetings/services/RoomService/getFlvRecordingByRoomId?SID=VALUE&amp;roomId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomTypes" ><b>getRoomTypes</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomTypes (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  List of available room types
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.db.entity.room.RoomType>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomTypes?SID=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomTypes?SID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomCounters" ><b>getRoomCounters</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomCounters (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Integer roomId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns current users for rooms ids
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.axis.services.RoomCountBean>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">roomId</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomCounters?SID=VALUE&roomId=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomCounters?SID=VALUE&amp;roomId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomById" ><b>getRoomById</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomById (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long rooms_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  returns a conference room object
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.room.RoomDTO
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">rooms_id</td>
+	                     <td valign="top">- the room id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomById?SID=VALUE&rooms_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomById?SID=VALUE&amp;rooms_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomWithClientObjectsById" ><b>getRoomWithClientObjectsById</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomWithClientObjectsById (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long rooms_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns a object of type RoomReturn
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.axis.services.RoomReturn
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">rooms_id</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomWithClientObjectsById?SID=VALUE&rooms_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomWithClientObjectsById?SID=VALUE&amp;rooms_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRooms" ><b>getRooms</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRooms (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			       			     , 
+    			       			   String orderby
+    			       			    			       			     , 
+    			       			   boolean asc
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns a List of Objects of Rooms You can use "name" as value for
+ orderby or rooms_id
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.room.RoomSearchResult
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">- The id you want to start</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">- The maximum you want to get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">orderby</td>
+	                     <td valign="top">- The column it will be ordered</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">asc</td>
+	                     <td valign="top">- Asc or Desc sort ordering</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRooms?SID=VALUE&start=VALUE&max=VALUE&orderby=VALUE&asc=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRooms?SID=VALUE&amp;start=VALUE&amp;max=VALUE&amp;orderby=VALUE&amp;asc=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomsWithCurrentUsers" ><b>getRoomsWithCurrentUsers</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomsWithCurrentUsers (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			       			     , 
+    			       			   String orderby
+    			       			    			       			     , 
+    			       			   boolean asc
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Returns a List of Objects of Rooms You can use "name" as value for
+ orderby or rooms_id. It also fills the attribute currentUsers in the
+ Room-Object
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.room.RoomSearchResult
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">- The id you want to start</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">- The maximum you want to get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">orderby</td>
+	                     <td valign="top">- The column it will be ordered</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">asc</td>
+	                     <td valign="top">- Asc or Desc sort ordering</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsers?SID=VALUE&start=VALUE&max=VALUE&orderby=VALUE&asc=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsers?SID=VALUE&amp;start=VALUE&amp;max=VALUE&amp;orderby=VALUE&amp;asc=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModeration" ><b>addRoomWithModeration</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModeration (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Create a conference room
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">Name of the Room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">Type of that room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">any comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">the maximum users allowed in this room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">If this room is public (use true if you don't deal with
+            different Organizations)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">is it a Calendar Room (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait untill a Moderator arrives. Use the
+            becomeModerator param in setUserObjectAndGenerateRoomHash to
+            set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModeration?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModeration?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationAndQuestions" ><b>addRoomWithModerationAndQuestions</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationAndQuestions (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  this SOAP Method has an additional param to enable or disable the buttons
+ to apply for moderation this does only work in combination with the
+ room-type restricted
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">Name of the Room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">Type of that room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">any comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">the maximum users allowed in this room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">If this room is public (use true if you don't deal with
+            different Organizations)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">is it a Calendar Room (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait untill a Moderator arrives. Use the
+            becomeModerator param in setUserObjectAndGenerateRoomHash to
+            set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndQuestions?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&allowUserQuestions=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndQuestions?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;allowUserQuestions=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationQuestionsAndAudioType" ><b>addRoomWithModerationQuestionsAndAudioType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationQuestionsAndAudioType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  adds a new room with options for user questions and audio only
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">Name of the Room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">Type of that room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">any comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">the maximum users allowed in this room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">If this room is public (use true if you don't deal with
+            different Organizations)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">is it a Calendar Room (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator param in setUserObjectAndGenerateRoomHash to
+            set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationQuestionsAndAudioType?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationQuestionsAndAudioType?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationQuestionsAudioTypeAndHideOptions" ><b>addRoomWithModerationQuestionsAudioTypeAndHideOptions</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationQuestionsAudioTypeAndHideOptions (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			       			     , 
+    			       			   Boolean hideTopBar
+    			       			    			       			     , 
+    			       			   Boolean hideChat
+    			       			    			       			     , 
+    			       			   Boolean hideActivitiesAndActions
+    			       			    			       			     , 
+    			       			   Boolean hideFilesExplorer
+    			       			    			       			     , 
+    			       			   Boolean hideActionsMenu
+    			       			    			       			     , 
+    			       			   Boolean hideScreenSharing
+    			       			    			       			     , 
+    			       			   Boolean hideWhiteboard
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  adds a new room with options for user questions, audio only and hide
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">Name of the Room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">Type of that room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">any comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">the maximum users allowed in this room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">If this room is public (use true if you don't deal with
+            different Organizations)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">is it a Calendar Room (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time (use false by default)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator param in setUserObjectAndGenerateRoomHash to
+            set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideTopBar</td>
+	                     <td valign="top">hide or show TopBar</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideChat</td>
+	                     <td valign="top">hide or show Chat</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideActivitiesAndActions</td>
+	                     <td valign="top">hide or show Activities And Actions</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideFilesExplorer</td>
+	                     <td valign="top">hide or show Files Explorer</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideActionsMenu</td>
+	                     <td valign="top">hide or show Actions Menu</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideScreenSharing</td>
+	                     <td valign="top">hide or show Screen Sharing</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideWhiteboard</td>
+	                     <td valign="top">hide or show Whiteboard. If whitboard is hidden, video pods
+            and scrollbar appear instead.</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationQuestionsAudioTypeAndHideOptions?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE&hideTopBar=VALUE&hideChat=VALUE&hideActivitiesAndActions=VALUE&hideFilesExplorer=VALUE&hideActionsMenu=VALUE&hideScreenSharing=VALUE&hideWhiteboard=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationQuestionsAudioTypeAndHideOptions?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE&amp;hideTopBar=VALUE&amp;hideChat=VALUE&amp;hideActivitiesAndActions=VALUE&amp;hideFilesExplorer=VALUE&amp;hideActionsMenu=VALUE&amp;hideScreenSharing=VALUE&amp;hideWhiteboard=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomIdByExternalId" ><b>getRoomIdByExternalId</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomIdByExternalId (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Long externalRoomId
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Checks if a room with this exteralRoomId + externalRoomType does exist,
+ if yes it returns the room id if not, it will create the room and then
+ return the room id of the newly created room
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">Name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">Type of that room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">any comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">the maximum users allowed in this room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">If this room is public (use true if you don't deal with
+            different Organizations)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">is it a Calendar Room? (use false if not sure what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait untill a Moderator arrives. Use the
+            becomeModerator param in setUserObjectAndGenerateRoomHash to
+            set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">externalRoomId</td>
+	                     <td valign="top">your external room id may set here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">you can specify your system-name or type of room here, for
+            example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomIdByExternalId?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomId=VALUE&externalRoomType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomIdByExternalId?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomId=VALUE&amp;externalRoomType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateRoomWithModeration" ><b>updateRoomWithModeration</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateRoomWithModeration (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Updates a conference room by its room id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id to update</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModeration?SID=VALUE&room_id=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE">http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModeration?SID=VALUE&amp;room_id=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateRoomWithModerationAndQuestions" ><b>updateRoomWithModerationAndQuestions</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateRoomWithModerationAndQuestions (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id to update</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModerationAndQuestions?SID=VALUE&room_id=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&allowUserQuestions=VALUE">http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModerationAndQuestions?SID=VALUE&amp;room_id=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;allowUserQuestions=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="updateRoomWithModerationQuestionsAudioTypeAndHideOptions" ><b>updateRoomWithModerationQuestionsAudioTypeAndHideOptions</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>updateRoomWithModerationQuestionsAudioTypeAndHideOptions (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			       			     , 
+    			       			   Boolean hideTopBar
+    			       			    			       			     , 
+    			       			   Boolean hideChat
+    			       			    			       			     , 
+    			       			   Boolean hideActivitiesAndActions
+    			       			    			       			     , 
+    			       			   Boolean hideFilesExplorer
+    			       			    			       			     , 
+    			       			   Boolean hideActionsMenu
+    			       			    			       			     , 
+    			       			   Boolean hideScreenSharing
+    			       			    			       			     , 
+    			       			   Boolean hideWhiteboard
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  update room with options for user questions, audio only and hide
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id to update</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">number of participants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment (use false if not sure what that
+            means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideTopBar</td>
+	                     <td valign="top">hide or show TopBar</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideChat</td>
+	                     <td valign="top">hide or show Chat</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideActivitiesAndActions</td>
+	                     <td valign="top">hide or show Activities And Actions</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideFilesExplorer</td>
+	                     <td valign="top">hide or show Files Explorer</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideActionsMenu</td>
+	                     <td valign="top">hide or show Actions Menu</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideScreenSharing</td>
+	                     <td valign="top">hide or show Screen Sharing</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideWhiteboard</td>
+	                     <td valign="top">hide or show Whiteboard. If whitboard is hidden, video pods
+            and scrollbar appear instead.</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModerationQuestionsAudioTypeAndHideOptions?SID=VALUE&room_id=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE&hideTopBar=VALUE&hideChat=VALUE&hideActivitiesAndActions=VALUE&hideFilesExplorer=VALUE&hideActionsMenu=VALUE&hideScreenSharing=VALUE&hideWhiteboard=VALUE">http://localhost:5080/openmeetings/services/RoomService/updateRoomWithModerationQuestionsAudioTypeAndHideOptions?SID=VALUE&amp;room_id=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE&amp;hideTopBar=VALUE&amp;hideChat=VALUE&amp;hideActivitiesAndActions=VALUE&amp;hideFilesExplorer=VALUE&amp;hideActionsMenu=VALUE&amp;hideScreenSharing=VALUE&amp;hideWhiteboard=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteRoom" ><b>deleteRoom</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteRoom (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long rooms_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Delete a room by its room id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">rooms_id</td>
+	                     <td valign="top"></td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/deleteRoom?SID=VALUE&rooms_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/deleteRoom?SID=VALUE&amp;rooms_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="kickUser" ><b>kickUser</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>kickUser (
+    			    			    			       			   String SID_Admin
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  kick all uses of a certain room
+    			</p>
+    			<p>
+                  Return Type: java.lang.Boolean
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin
+            _Admin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/kickUser?SID_Admin=VALUE&room_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/kickUser?SID_Admin=VALUE&amp;room_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationAndExternalType" ><b>addRoomWithModerationAndExternalType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationAndExternalType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a new conference room with option to set the external room type, the
+ external room type should be set if multiple applications use the same
+ OpenMeetings instance
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type (can be used to identify different
+            external systems using same OpenMeetings instance)</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndExternalType?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomType=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndExternalType?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationExternalTypeAndAudioType" ><b>addRoomWithModerationExternalTypeAndAudioType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationExternalTypeAndAudioType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a new room with options for audio only
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type (can be used to identify different
+            external systems using same OpenMeetings instance)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationExternalTypeAndAudioType?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomType=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationExternalTypeAndAudioType?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomType=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationAndRecordingFlags" ><b>addRoomWithModerationAndRecordingFlags</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationAndRecordingFlags (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			       			     , 
+    			       			   Boolean waitForRecording
+    			       			    			       			     , 
+    			       			   boolean allowRecording
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a new room with options for recording
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type (can be used to identify different
+            external systems using same OpenMeetings instance)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">waitForRecording</td>
+	                     <td valign="top">if the users in the room will get a notification that they
+            should start recording before they do a conference</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">allowRecording</td>
+	                     <td valign="top">if the recording option is available or not</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndRecordingFlags?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomType=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE&waitForRecording=VALUE&allowRecording=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndRecordingFlags?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomType=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE&amp;waitForRecording=VALUE&amp;allowRecording=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationExternalTypeAndTopBarOption" ><b>addRoomWithModerationExternalTypeAndTopBarOption</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationExternalTypeAndTopBarOption (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			       			     , 
+    			       			   Boolean allowUserQuestions
+    			       			    			       			     , 
+    			       			   Boolean isAudioOnly
+    			       			    			       			     , 
+    			       			   Boolean waitForRecording
+    			       			    			       			     , 
+    			       			   boolean allowRecording
+    			       			    			       			     , 
+    			       			   Boolean hideTopBar
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a conference room with options to disable the top menu bar in the
+ conference room
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type (can be used to identify different
+            external systems using same OpenMeetings instance)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">allowUserQuestions</td>
+	                     <td valign="top">enable or disable the button to allow users to apply for
+            moderation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isAudioOnly</td>
+	                     <td valign="top">enable or disable the video / or audio-only</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">waitForRecording</td>
+	                     <td valign="top">if the users in the room will get a notification that they
+            should start recording before they do a conference</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">allowRecording</td>
+	                     <td valign="top">if the recording option is available or not</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">hideTopBar</td>
+	                     <td valign="top">if the top bar in the conference room is visible or not</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationExternalTypeAndTopBarOption?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomType=VALUE&allowUserQuestions=VALUE&isAudioOnly=VALUE&waitForRecording=VALUE&allowRecording=VALUE&hideTopBar=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationExternalTypeAndTopBarOption?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomType=VALUE&amp;allowUserQuestions=VALUE&amp;isAudioOnly=VALUE&amp;waitForRecording=VALUE&amp;allowRecording=VALUE&amp;hideTopBar=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getInvitationHash" ><b>getInvitationHash</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getInvitationHash (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String invitationpass
+    			       			    			       			     , 
+    			       			   Integer valid
+    			       			    			       			     , 
+    			       			   String validFromDate
+    			       			    			       			     , 
+    			       			   String validFromTime
+    			       			    			       			     , 
+    			       			   String validToDate
+    			       			    			       			     , 
+    			       			   String validToTime
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin a
+            valid Session Token</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">the username of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the conference room id of the invitation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the invitation is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">invitationpass</td>
+	                     <td valign="top">the password for accessing the conference room via the
+            invitation hash</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">valid</td>
+	                     <td valign="top">the type of validation for the hash 1: endless, 2: from-to
+            period, 3: one-time</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getInvitationHash?SID=VALUE&username=VALUE&room_id=VALUE&isPasswordProtected=VALUE&invitationpass=VALUE&valid=VALUE&validFromDate=VALUE&validFromTime=VALUE&validToDate=VALUE&validToTime=VALUE">http://localhost:5080/openmeetings/services/RoomService/getInvitationHash?SID=VALUE&amp;username=VALUE&amp;room_id=VALUE&amp;isPasswordProtected=VALUE&amp;invitationpass=VALUE&amp;valid=VALUE&amp;validFromDate=VALUE&amp;validFromTime=VALUE&amp;validToDate=VALUE&amp;validToTime=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getInvitationHashFullName" ><b>getInvitationHashFullName</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getInvitationHashFullName (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String invitationpass
+    			       			    			       			     , 
+    			       			   Integer valid
+    			       			    			       			     , 
+    			       			   String validFromDate
+    			       			    			       			     , 
+    			       			   String validFromTime
+    			       			    			       			     , 
+    			       			   String validToDate
+    			       			    			       			     , 
+    			       			   String validToTime
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin a
+            valid Session Token</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">the username of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">the first name of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">the last name of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the conference room id of the invitation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the invitation is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">invitationpass</td>
+	                     <td valign="top">the password for accessing the conference room via the
+            invitation hash</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">valid</td>
+	                     <td valign="top">the type of validation for the hash 1: endless, 2: from-to
+            period, 3: one-time</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getInvitationHashFullName?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&room_id=VALUE&isPasswordProtected=VALUE&invitationpass=VALUE&valid=VALUE&validFromDate=VALUE&validFromTime=VALUE&validToDate=VALUE&validToTime=VALUE">http://localhost:5080/openmeetings/services/RoomService/getInvitationHashFullName?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;room_id=VALUE&amp;isPasswordProtected=VALUE&amp;invitationpass=VALUE&amp;valid=VALUE&amp;validFromDate=VALUE&amp;validFromTime=VALUE&amp;validToDate=VALUE&amp;validToTime=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="sendInvitationHash" ><b>sendInvitationHash</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>sendInvitationHash (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String message
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String subject
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String invitationpass
+    			       			    			       			     , 
+    			       			   Integer valid
+    			       			    			       			     , 
+    			       			   String validFromDate
+    			       			    			       			     , 
+    			       			   String validFromTime
+    			       			    			       			     , 
+    			       			   String validToDate
+    			       			    			       			     , 
+    			       			   String validToTime
+    			       			    			       			     , 
+    			       			   Long language_id
+    			       			    			       			     , 
+    			       			   Boolean sendMail
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin a
+            valid Session Token</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">the Username of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">message</td>
+	                     <td valign="top">the Message in the Email Body send with the invitation if
+            sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">the Email to send the invitation to if sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">subject</td>
+	                     <td valign="top">the subject of the Email send with the invitation if sendMail
+            is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the conference room id of the invitation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the invitation is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">invitationpass</td>
+	                     <td valign="top">the password for accessing the conference room via the
+            invitation hash</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">valid</td>
+	                     <td valign="top">the type of validation for the hash 1: endless, 2: from-to
+            period, 3: one-time</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToDate</td>
+	                     <td valign="top">Date in Format of dd.mm.yyyy only of interest if valid is type
+            2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToTime</td>
+	                     <td valign="top">time in Format of hh:mm only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language id of the EMail that is send with the invitation
+            if sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">sendMail</td>
+	                     <td valign="top">if sendMail is true then the RPC-Call will send the invitation
+            to the email</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/sendInvitationHash?SID=VALUE&username=VALUE&message=VALUE&email=VALUE&subject=VALUE&room_id=VALUE&isPasswordProtected=VALUE&invitationpass=VALUE&valid=VALUE&validFromDate=VALUE&validFromTime=VALUE&validToDate=VALUE&validToTime=VALUE&language_id=VALUE&sendMail=VALUE">http://localhost:5080/openmeetings/services/RoomService/sendInvitationHash?SID=VALUE&amp;username=VALUE&amp;message=VALUE&amp;email=VALUE&amp;subject=VALUE&amp;room_id=VALUE&amp;isPasswordProtected=VALUE&amp;invitationpass=VALUE&amp;valid=VALUE&amp;validFromDate=VALUE&amp;validFromTime=VALUE&amp;validToDate=VALUE&amp;validToTime=VALUE&amp;language_id=VALUE&amp;sendMail=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="sendInvitationHashWithDateObject" ><b>sendInvitationHashWithDateObject</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>sendInvitationHashWithDateObject (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String message
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String subject
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String conferencedomain
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String invitationpass
+    			       			    			       			     , 
+    			       			   Integer valid
+    			       			    			       			     , 
+    			       			   Date fromDate
+    			       			    			       			     , 
+    			       			   Date toDate
+    			       			    			       			     , 
+    			       			   Long language_id
+    			       			    			       			     , 
+    			       			   Boolean sendMail
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Create a Invitation hash and optionally send it by mail the From to Date
+ is as String as some SOAP libraries do not accept Date Objects in SOAP
+ Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+ leading zero's)
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin a
+            valid Session Token</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">the Username of the User that he will get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">message</td>
+	                     <td valign="top">the Message in the Email Body send with the invitation if
+            sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">the Email to send the invitation to if sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">subject</td>
+	                     <td valign="top">the subject of the Email send with the invitation if sendMail
+            is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the conference room id of the invitation</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">conferencedomain</td>
+	                     <td valign="top">the domain of the room (keep empty)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">if the invitation is password protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">invitationpass</td>
+	                     <td valign="top">the password for accessing the conference room via the
+            invitation hash</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">valid</td>
+	                     <td valign="top">the type of validation for the hash 1: endless, 2: from-to
+            period, 3: one-time</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Date
+	                     		                     </td>
+	                     <td valign="top">fromDate</td>
+	                     <td valign="top">Date as Date Object only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Date
+	                     		                     </td>
+	                     <td valign="top">toDate</td>
+	                     <td valign="top">Date as Date Object only of interest if valid is type 2</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language id of the EMail that is send with the invitation
+            if sendMail is true</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">sendMail</td>
+	                     <td valign="top">if sendMail is true then the RPC-Call will send the invitation
+            to the email</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/sendInvitationHashWithDateObject?SID=VALUE&username=VALUE&message=VALUE&email=VALUE&subject=VALUE&room_id=VALUE&conferencedomain=VALUE&isPasswordProtected=VALUE&invitationpass=VALUE&valid=VALUE&fromDate=VALUE&toDate=VALUE&language_id=VALUE&sendMail=VALUE">http://localhost:5080/openmeetings/services/RoomService/sendInvitationHashWithDateObject?SID=VALUE&amp;username=VALUE&amp;message=VALUE&amp;email=VALUE&amp;subject=VALUE&amp;room_id=VALUE&amp;conferencedomain=VALUE&amp;isPasswordProtected=VALUE&amp;invitationpass=VALUE&amp;valid=VALUE&amp;fromDate=VALUE&amp;toDate=VALUE&amp;language_id=VALUE&amp;sendMail=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomsWithCurrentUsersByList" ><b>getRoomsWithCurrentUsersByList</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomsWithCurrentUsersByList (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			       			     , 
+    			       			   String orderby
+    			       			    			       			     , 
+    			       			   boolean asc
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Return a RoomReturn Object with information of the current users of a
+ conference room
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.axis.services.RoomReturn>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">The id you want to start</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">The maximum you want to get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">orderby</td>
+	                     <td valign="top">The column it will be ordered</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">asc</td>
+	                     <td valign="top">Asc or Desc sort ordering</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsersByList?SID=VALUE&start=VALUE&max=VALUE&orderby=VALUE&asc=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsersByList?SID=VALUE&amp;start=VALUE&amp;max=VALUE&amp;orderby=VALUE&amp;asc=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getRoomsWithCurrentUsersByListAndType" ><b>getRoomsWithCurrentUsersByListAndType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getRoomsWithCurrentUsersByListAndType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			       			     , 
+    			       			   String orderby
+    			       			    			       			     , 
+    			       			   boolean asc
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Return a RoomReturn Object with information of the current users of a
+ conference room with option to search for special external room types
+    			</p>
+    			<p>
+                  Return Type: java.util.List<org.apache.openmeetings.axis.services.RoomReturn>
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">The id you want to start</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">The maximum you want to get</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">orderby</td>
+	                     <td valign="top">The column it will be ordered</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">asc</td>
+	                     <td valign="top">Asc or Desc sort ordering</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsersByListAndType?SID=VALUE&start=VALUE&max=VALUE&orderby=VALUE&asc=VALUE&externalRoomType=VALUE">http://localhost:5080/openmeetings/services/RoomService/getRoomsWithCurrentUsersByListAndType?SID=VALUE&amp;start=VALUE&amp;max=VALUE&amp;orderby=VALUE&amp;asc=VALUE&amp;externalRoomType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomWithModerationAndExternalTypeAndStartEnd" ><b>addRoomWithModerationAndExternalTypeAndStartEnd</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomWithModerationAndExternalTypeAndStartEnd (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   Long roomtypes_id
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			       			     , 
+    			       			   Long numberOfPartizipants
+    			       			    			       			     , 
+    			       			   Boolean ispublic
+    			       			    			       			     , 
+    			       			   Boolean appointment
+    			       			    			       			     , 
+    			       			   Boolean isDemoRoom
+    			       			    			       			     , 
+    			       			   Integer demoTime
+    			       			    			       			     , 
+    			       			   Boolean isModeratedRoom
+    			       			    			       			     , 
+    			       			   String externalRoomType
+    			       			    			       			     , 
+    			       			   String validFromDate
+    			       			    			       			     , 
+    			       			   String validFromTime
+    			       			    			       			     , 
+    			       			   String validToDate
+    			       			    			       			     , 
+    			       			   String validToTime
+    			       			    			       			     , 
+    			       			   Boolean isPasswordProtected
+    			       			    			       			     , 
+    			       			   String password
+    			       			    			       			     , 
+    			       			   Long reminderTypeId
+    			       			    			       			     , 
+    			       			   String redirectURL
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a conference room that is only available for a period of time
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">new name of the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">roomtypes_id</td>
+	                     <td valign="top">new type of room (1 = Conference, 2 = Audience, 3 =
+            Restricted, 4 = Interview)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">new comment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">numberOfPartizipants</td>
+	                     <td valign="top">new numberOfParticipants</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">ispublic</td>
+	                     <td valign="top">is public</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">appointment</td>
+	                     <td valign="top">if the room is an appointment</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isDemoRoom</td>
+	                     <td valign="top">is it a Demo Room with limited time? (use false if not sure
+            what that means)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Integer
+	                     		                     </td>
+	                     <td valign="top">demoTime</td>
+	                     <td valign="top">time in seconds after the user will be logged out (only
+            enabled if isDemoRoom is true)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isModeratedRoom</td>
+	                     <td valign="top">Users have to wait until a Moderator arrives. Use the
+            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+            to set a user as default Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalRoomType</td>
+	                     <td valign="top">the external room type (can be used to identify different
+            external systems using same OpenMeetings instance)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromDate</td>
+	                     <td valign="top">valid from as Date format: dd.MM.yyyy</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validFromTime</td>
+	                     <td valign="top">valid to as time format: mm:hh</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToDate</td>
+	                     <td valign="top">valid to Date format: dd.MM.yyyy</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">validToTime</td>
+	                     <td valign="top">valid to time format: mm:hh</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">isPasswordProtected</td>
+	                     <td valign="top">If the links send via EMail to invited people is password
+            protected</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">password</td>
+	                     <td valign="top">Password for Invitations send via Mail</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">reminderTypeId</td>
+	                     <td valign="top">1=none, 2=simple mail, 3=ICAL</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">redirectURL</td>
+	                     <td valign="top">URL Users will be lead to if the Conference Time is elapsed</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndExternalTypeAndStartEnd?SID=VALUE&name=VALUE&roomtypes_id=VALUE&comment=VALUE&numberOfPartizipants=VALUE&ispublic=VALUE&appointment=VALUE&isDemoRoom=VALUE&demoTime=VALUE&isModeratedRoom=VALUE&externalRoomType=VALUE&validFromDate=VALUE&validFromTime=VALUE&validToDate=VALUE&validToTime=VALUE&isPasswordProtected=VALUE&password=VALUE&reminderTypeId=VALUE&redirectURL=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomWithModerationAndExternalTypeAndStartEnd?SID=VALUE&amp;name=VALUE&amp;roomtypes_id=VALUE&amp;comment=VALUE&amp;numberOfPartizipants=VALUE&amp;ispublic=VALUE&amp;appointment=VALUE&amp;isDemoRoom=VALUE&amp;demoTime=VALUE&amp;isModeratedRoom=VALUE&amp;externalRoomType=VALUE&amp;validFromDate=VALUE&amp;validFromTime=VALUE&amp;validToDate=VALUE&amp;validToTime=VALUE&amp;isPasswordProtected=VALUE&amp;password=VALUE&amp;reminderTypeId=VALUE&amp;redirectURL=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addMeetingMemberRemindToRoom" ><b>addMeetingMemberRemindToRoom</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addMeetingMemberRemindToRoom (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   Long language_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a meeting member to a certain room. This is the same as adding an
+ external user to a event in the calendar.
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">The Room Id the meeting member is going to be added</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">The first name of the meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">The last name of the meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">The email of the Meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">The ID of the language, for the email that is send to the
+            meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addMeetingMemberRemindToRoom?SID=VALUE&room_id=VALUE&firstname=VALUE&lastname=VALUE&email=VALUE&language_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/addMeetingMemberRemindToRoom?SID=VALUE&amp;room_id=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;email=VALUE&amp;language_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addExternalMeetingMemberRemindToRoom" ><b>addExternalMeetingMemberRemindToRoom</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addExternalMeetingMemberRemindToRoom (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   Long language_id
+    			       			    			       			     , 
+    			       			   String jNameTimeZone
+    			       			    			       			     , 
+    			       			   String invitorName
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a meeting member to a certain room. This is the same as adding an
+ external user to a event in the calendar. with a certain time zone
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">The Room Id the meeting member is going to be added</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">The first name of the meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">The last name of the meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">The email of the Meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">The ID of the language, for the email that is send to the
+            meeting member</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">jNameTimeZone</td>
+	                     <td valign="top">name of the timezone</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">invitorName</td>
+	                     <td valign="top">name of invitation creators</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addExternalMeetingMemberRemindToRoom?SID=VALUE&room_id=VALUE&firstname=VALUE&lastname=VALUE&email=VALUE&language_id=VALUE&jNameTimeZone=VALUE&invitorName=VALUE">http://localhost:5080/openmeetings/services/RoomService/addExternalMeetingMemberRemindToRoom?SID=VALUE&amp;room_id=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;email=VALUE&amp;language_id=VALUE&amp;jNameTimeZone=VALUE&amp;invitorName=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="closeRoom" ><b>closeRoom</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>closeRoom (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   Boolean status
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to remotely close or open rooms. If a room is closed all users
+ inside the room and all users that try to enter it will be redirected to
+ the redirectURL that is defined in the Room-Object.
+ 
+ Returns positive value if authentication was successful.
+    			</p>
+    			<p>
+                  Return Type: int
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">status</td>
+	                     <td valign="top">false = close, true = open</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/closeRoom?SID=VALUE&room_id=VALUE&status=VALUE">http://localhost:5080/openmeetings/services/RoomService/closeRoom?SID=VALUE&amp;room_id=VALUE&amp;status=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="modifyRoomParameter" ><b>modifyRoomParameter</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>modifyRoomParameter (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   String paramName
+    			       			    			       			     , 
+    			       			   String paramValue
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to update arbitrary room parameter.
+    			</p>
+    			<p>
+                  Return Type: int
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID of the User. This SID must be marked as logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">paramName</td>
+	                     <td valign="top">the name of parameter to be updated, please NOTE rooms_id is not updatable as well as fields of type {@link Date} and {@link List}</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">paramValue</td>
+	                     <td valign="top">the value to be set, please use "type id" to set room type</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/modifyRoomParameter?SID=VALUE&room_id=VALUE&paramName=VALUE&paramValue=VALUE">http://localhost:5080/openmeetings/services/RoomService/modifyRoomParameter?SID=VALUE&amp;room_id=VALUE&amp;paramName=VALUE&amp;paramValue=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addRoomToOrg" ><b>addRoomToOrg</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addRoomToOrg (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long rooms_id
+    			       			    			       			     , 
+    			       			   Long organisation_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a room to an organization
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID of the User. This SID must be marked as Loggedin</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">rooms_id</td>
+	                     <td valign="top">- Id of room to be added</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">organisation_id</td>
+	                     <td valign="top">- Id of organisation that the room is being paired with</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/RoomService/addRoomToOrg?SID=VALUE&rooms_id=VALUE&organisation_id=VALUE">http://localhost:5080/openmeetings/services/RoomService/addRoomToOrg?SID=VALUE&amp;rooms_id=VALUE&amp;organisation_id=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/SakaiPlugin.html b/docs/SakaiPlugin.html
new file mode 100644
index 0000000..f3ac700
--- /dev/null
+++ b/docs/SakaiPlugin.html
@@ -0,0 +1,460 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Sakai Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				In 2010,
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company
+				</a>
+				has developed a plugin that integrates Sakai LMS and OpenMeetings
+				.
+			</p>
+                                                <p>
+				The plugin was developed for some Spanish Universities that use
+				Sakai and belongs to
+				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/SPANISH/S2G+-+Spanish+Sakai+Group">"Spanish Sakai Universities"</a>
+				group:
+			</p>
+                                                <ul>
+				<li>
+					<a rel="nofollow" href="http://www.udl.es/" target="_blank">Universitat de Lleida </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.upv.es/" target="_blank">Universidad Politécnica de Valencia </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.um.es/" target="_blank">Universidad de Murcia</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.unavarra.es/" target="_blank">Universidad Pública de Navarra</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.ucam.edu/" target="_blank">Universidad Católica San Antonio de Murcia
+					</a>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Create videoconference rooms through Sakai: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with announcements </li>
+						<li>Sends an email to all site participants </li>
+						<li>Rooms restricted to site groups </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+                                                <p />
+                                                <ul>
+				<li>Future requirements </li>
+				<li>
+					<ol>
+						<li>Publish room recordings to students </li>
+						<li>Room reservation </li>
+					</ol>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Source"><strong>Source</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can download and build the source code
+				<a rel="nofollow" target="_blank" href="https://source.sakaiproject.org/contrib/samoo/adobeconnectpro-openmeetings-integration/trunk/">here</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Installation and documentation"><strong>Installation and documentation</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				The documentation resides in the
+				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/OPENMTG/Home">Sakai confluence space</a>
+			</p>
+                                                <p>
+				Please contact the mailing list for further information. For
+				commercial support you can also contact
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company</a>
+				or other companies from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ServerService.html b/docs/ServerService.html
new file mode 100644
index 0000000..9d8bac1
--- /dev/null
+++ b/docs/ServerService.html
@@ -0,0 +1,378 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: ServerService</h3>
+	   <p>This class provides method implementations necessary for OM to manage servers
+ participating in cluster.<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/ServerService?wsdl">http://localhost:5080/openmeetings/services/ServerService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in ServerService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#getServers"><b>getServers</b></a><br/>
+                <div class="navigation_comment"><i >Method to retrieve the list of the servers participating in cluster</i></div>
+                </div>
+                                               <div>
+                <a href="#getServerCount"><b>getServerCount</b></a><br/>
+                <div class="navigation_comment"><i >Method to retrieve the total count of the servers participating in
+ cluster</i></div>
+                </div>
+                                               <div>
+                <a href="#saveServer"><b>saveServer</b></a><br/>
+                <div class="navigation_comment"><i >Method to add/update server</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteServer"><b>deleteServer</b></a><br/>
+                <div class="navigation_comment"><i >Method to delete server</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in ServerService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getServers" ><b>getServers</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getServers (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to retrieve the list of the servers participating in cluster
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.entity.server.Server[]
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- session id to identify the user making request</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">- server index to start with</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">- Maximum server count</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/ServerService/getServers?SID=VALUE&start=VALUE&max=VALUE">http://localhost:5080/openmeetings/services/ServerService/getServers?SID=VALUE&amp;start=VALUE&amp;max=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getServerCount" ><b>getServerCount</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getServerCount (
+    			    			    			       			   String SID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to retrieve the total count of the servers participating in
+ cluster
+    			</p>
+    			<p>
+                  Return Type: int
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- session id to identify the user making request</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    												<a href="http://localhost:5080/openmeetings/services/ServerService/getServerCount?SID=VALUE">http://localhost:5080/openmeetings/services/ServerService/getServerCount?SID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="saveServer" ><b>saveServer</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>saveServer (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long id
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			       			     , 
+    			       			   String address
+    			       			    			       			     , 
+    			       			   int port
+    			       			    			       			     , 
+    			       			   String user
+    			       			    			       			     , 
+    			       			   String pass
+    			       			    			       			     , 
+    			       			   String webapp
+    			       			    			       			     , 
+    			       			   String protocol
+    			       			    			       			     , 
+    			       			   Boolean active
+    			       			    			       			     , 
+    			       			   String comment
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to add/update server
+    			</p>
+    			<p>
+                  Return Type: long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- session id to identify the user making request</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">id</td>
+	                     <td valign="top">- the id of the server to save</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">- the name of the server to save</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">address</td>
+	                     <td valign="top">- the address(DNS name or IP) of the server to save</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">port</td>
+	                     <td valign="top">- the http port of the slave</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">user</td>
+	                     <td valign="top">- REST user to access the slave</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">pass</td>
+	                     <td valign="top">- REST pass to access the slave</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">webapp</td>
+	                     <td valign="top">- webapp name of the OpenMeetings instance</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">protocol</td>
+	                     <td valign="top">- protocol to access the OpenMeetings instance</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Boolean
+	                     		                     </td>
+	                     <td valign="top">active</td>
+	                     <td valign="top">- if the server currently participates in the cluster or not</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">comment</td>
+	                     <td valign="top">- comment for the server</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/ServerService/saveServer?SID=VALUE&id=VALUE&name=VALUE&address=VALUE&port=VALUE&user=VALUE&pass=VALUE&webapp=VALUE&protocol=VALUE&active=VALUE&comment=VALUE">http://localhost:5080/openmeetings/services/ServerService/saveServer?SID=VALUE&amp;id=VALUE&amp;name=VALUE&amp;address=VALUE&amp;port=VALUE&amp;user=VALUE&amp;pass=VALUE&amp;webapp=VALUE&amp;protocol=VALUE&amp;active=VALUE&amp;comment=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteServer" ><b>deleteServer</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteServer (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Method to delete server
+    			</p>
+    			<p>
+                  Return Type: boolean
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- session id to identify the user making request</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">id</td>
+	                     <td valign="top">- the id of the server to delete</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/ServerService/deleteServer?SID=VALUE&id=VALUE">http://localhost:5080/openmeetings/services/ServerService/deleteServer?SID=VALUE&amp;id=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/SoapRestAPI.html b/docs/SoapRestAPI.html
new file mode 100644
index 0000000..abc229c
--- /dev/null
+++ b/docs/SoapRestAPI.html
@@ -0,0 +1,423 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Available WebServices"><strong>Available WebServices</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<div>
+					<a href="UserService.html" target="_BLANK">
+						<b>UserService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods to login and create hash to
+							directly enter
+							conference rooms, recordings or the application in
+							general
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="RoomService.html" target="_BLANK">
+						<b>RoomService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>RoomService contains methods to manipulate rooms and create
+							invitation hash
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="FileService.html" target="_BLANK">
+						<b>FileService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>Contains methods to import and upload files into the Files
+							section of the
+							conference room and the personal drive of any user
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="CalendarService.html" target="_BLANK">
+						<b>CalendarService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>CalendarService contains methods to create, edit delete
+							calendar meetings
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="JabberService.html" target="_BLANK">
+						<b>JabberService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods necessary for OM to Jabber integration.
+						All methods doesn't require admin privileges to get called.
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="ServerService.html" target="_BLANK">
+						<b>ServerService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods necessary for OM to manage servers 
+						participating in cluster.
+						All methods does require admin privileges to get called.
+						</i>
+					</div>
+				</div>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/SugarCRMPlugin.html b/docs/SugarCRMPlugin.html
new file mode 100644
index 0000000..f58c656
--- /dev/null
+++ b/docs/SugarCRMPlugin.html
@@ -0,0 +1,435 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="eschwert@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - SugarCRM Plugin</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="SugarCRM Plugin for OpenMeetings"><strong>SugarCRM Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You can get the latest Version of the Plugin for SugarCRM from the
+				<a href="downloads.html">downloads</a>
+				.
+			</p>
+                                                <p>
+				You can find the OpenMeetings Plugin also in the
+				<a href="http://www.sugarforge.org/projects/openmeetings/" target="_BLANK" rel="nofollow">SugarCRM Plugin database</a>
+				.
+			</p>
+                                                <p>
+				A demo version of the SugarCRM plugin is available at
+				<a href="http://demo.e-schwert.de/sugarcrm/" target="_BLANK" rel="nofollow">demo.e-schwert.de</a>
+				. Username: demo Password: Demouser55 
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Features"><strong>Features</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The plugin contains the following features: </p>
+                                                <ul>
+				<li>Create videoconference rooms through SugarCRM: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with SugarCRM meetings </li>
+						<li>Sends invetations emails to meeting participants </li>					
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Installation the SugarCRM Plugin for OpenMeetings"><strong>Installation the SugarCRM Plugin for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>In SugarCRM's administration web-interface you will find the
+				module loader.
+			</p>
+                                                <a class="fancybox-buttons" href="images/moodle_plugin_conference.png">
+				<img src="images/SugarCRM_Installation.png" alt="" width="640" height="320" />
+			</a>
+                                                <ol>
+				<li>Upload the module with module loader in administration area. </li>
+				<li>Configure OpenMeetings settings. </li>
+				<li>Create OpenMeetings rooms. </li>				
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Demo video"><strong>Demo video</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The demo video of SugarCRM plugin show you the plugin in action </p>
+                                                <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage" />
+			      <param name="allowFullScreen" value="true" />
+			      <param name="allowScriptAccess" value="always" />
+			      <embed src="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360" />
+		      </object>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/TimeZoneHandling.html b/docs/TimeZoneHandling.html
new file mode 100644
index 0000000..2191231
--- /dev/null
+++ b/docs/TimeZoneHandling.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Timezones</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				List of default Timezones:
+				<a href="http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml" rel="nofollow">http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml
+				</a>
+			</p>
+                                                <p>
+				To add a new Time Zone you have to lookup its represant in Java's
+				Timezone registry. You can then add freely new time zones to the XML
+				file. The XML entries are imported into the database into the table
+				<strong>om_timezone</strong>
+				during the installation of OpenMeetings. (Don't forget to stop the
+				server before you change anything in the database).
+			</p>
+                                                <p>
+				The Servers default timezone is stored in the configuration table in
+				the attribute
+				<strong>default.timezone</strong>
+				. The name in this value links to an attribute in the table
+				om_timezone in the column
+				<strong>jname</strong>
+				.
+			</p>
+                                                <p>
+				You can set a Flag
+				<strong>forceTimeZoneCheck</strong>
+				for each user that gives him a Pop-Up notification to change his
+				time zone. The Flag can be changed in the user administration of
+				OpenMeetings. This can be handy if you update from a previous
+				version of OpenMeetings to make sure users see the new feature and
+				update their settings.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to lookup timezone's"><strong>How to lookup timezone's</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div class="xmlcode">
+		  
+                    String[] ids = TimeZone.getAvailableIDs();<br />
+                    for (String id : ids) {<br />
+                        
+                        <div style="margin-left:20px">
+                        TimeZone timeZone = TimeZone.getTimeZone(id);<br />
+                        //TimeZone timeZone = timeRegistry.getTimeZone(id);<br />
+                        <br />
+                        Calendar cal = Calendar.getInstance();<br />
+                                <div style="margin-left:20px">
+                                cal.setTimeZone(timeZone);<br />
+                                // + cal.get(Calendar.DST_OFFSET)<br />
+                                int offset = cal.get(Calendar.ZONE_OFFSET);<br />
+                        <br />
+                                int offsetInMinutes = offset/1000/60;<br />
+                                <br />
+                                System.out.println("name" + id + "name offset "+offsetInMinutes+"offset ");
+                                </div>
+                        </div>
+                    }
+		  
+		  </div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Upgrade.html b/docs/Upgrade.html
new file mode 100644
index 0000000..b3e09a2
--- /dev/null
+++ b/docs/Upgrade.html
@@ -0,0 +1,429 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Upgrade</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Upgrading OpenMeetings via the Web-Interface"><strong>Upgrading OpenMeetings via the Web-Interface</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ol>
+				<li>
+					<p>There is a System Backup and Import tool. Login as Administrator and Administration &gt; Backup</p>
+					<a class="fancybox-buttons" href="images/backup.png"><img src="images/backup.png" alt="" width="600" /></a>
+					<p>
+						The Text in the Administration &gt; Backup section actually just says
+						it all. The backup contains users, rooms, organizations and
+						appointments (Invitations and Reminders are NOT included in the
+						Backup and Reminders will not be send again!). The Backup contains
+						also all uploaded Files and Documents and will re-import them again.
+		
+						Max Upload Size is 1000 MB.
+					</p>
+				</li>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Drop existing OM database</li>
+				<li>Create empty Database with same name and UTF-8 support</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li>(*) Modify DB settings</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+				<li>Install OM using Web installer</li>
+				<li>Login as Administrator and Administration &gt; Backup</li>
+				<li>Perform system import</li>
+			</ol>
+                                                <p>(*) Optional step</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Upgrading OpenMeetings from command line"><strong>Upgrading OpenMeetings from command line</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				<i>You need OpenMeetings 2.x or later to have the command line interface (CLI) 
+					feature available
+				</i>
+			</p>
+                                                <p>
+				Alternatively to the Web-Installer you can also export and import via the command line. <br />
+				<b>You should shutdown the Red5-Service while doing CLI export or import operations</b><br />
+				Cd to your red5-home directory, type "./admin.sh" and hit enter. You will get options available.<br />
+				<br />
+				A typical export would be:<br />
+				<tt>./admin.sh -b -file backup_today.zip</tt><br />
+				<br />
+				A typical import would be:<br />
+				<tt>./admin.sh -r -file backup_yesterday.zip</tt><br />
+				<br />
+				You can also combine the installation with a backup, that way you will create exactly the user table 
+				that existed in the backup.<br />
+				A typical install from backup would be:<br />
+				<tt>./admin.sh -i -file backup_yesterday.zip</tt><br />
+				please see <a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a> for more options
+			</p>
+                                                <p><b>Detailed steps</b></p>
+                                                <ol>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li><tt>./admin.sh -v -b -file ../backup_today.zip</tt></li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li><tt>./admin.sh -v -i -file ../backup_today.zip --drop --skip-default-room</tt> (Optionally you can specify
+					additional parameters like DB host/user/pass/instance etc.)</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+			</ol>
+                                                <p>(*) Optional step</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/UserService.html b/docs/UserService.html
new file mode 100644
index 0000000..f5cfe6c
--- /dev/null
+++ b/docs/UserService.html
@@ -0,0 +1,2090 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: UserService</h3>
+	   <p>The Service contains methods to login and create hash to directly enter
+ conference rooms, recordings or the application in general<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/UserService?wsdl">http://localhost:5080/openmeetings/services/UserService?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in UserService</h3>
+	   
+       <div class="navigation">
+	                               <div>
+                <a href="#getSession"><b>getSession</b></a><br/>
+                <div class="navigation_comment"><i >load this session id before doing anything else Returns an Object of Type
+ Sessiondata, this contains a sessionId, use that sessionId in all Methods</i></div>
+                </div>
+                                               <div>
+                <a href="#loginUser"><b>loginUser</b></a><br/>
+                <div class="navigation_comment"><i >Auth function, use the SID you get by getSession, return positive means
+ logged-in, if negative its an ErrorCode, you have to invoke the Method
+ getErrorByCode to get the Text-Description of that ErrorCode</i></div>
+                </div>
+                                               <div>
+                <a href="#getErrorByCode"><b>getErrorByCode</b></a><br/>
+                <div class="navigation_comment"><i >loads an Error-Object. If a Method returns a negative Result, its an
+ Error-id, it needs a language_id to specify in which language you want to
+ display/read the error-message. English has the Language-ID one, for
+ different one see the list of languages</i></div>
+                </div>
+                                               <div>
+                <a href="#addNewUser"><b>addNewUser</b></a><br/>
+                <div class="navigation_comment"><i >Adds a new User like through the Frontend, but also does activates the
+ Account To do SSO see the methods to create a hash and use those ones!</i></div>
+                </div>
+                                               <div>
+                <a href="#addNewUserWithTimeZone"><b>addNewUserWithTimeZone</b></a><br/>
+                <div class="navigation_comment"><i >Adds a new User like through the Frontend, but also does activates the
+ Account</i></div>
+                </div>
+                                               <div>
+                <a href="#addNewUserWithExternalType"><b>addNewUserWithExternalType</b></a><br/>
+                <div class="navigation_comment"><i >Adds a new User like through the Frontend, but also does activates the
+ Account, sends NO email (no matter what you configured) and sets the
+ users external user id and type
+ 
+ Use the methods to create a hash for SSO, creating users is not required
+ for SSO</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteUserById"><b>deleteUserById</b></a><br/>
+                <div class="navigation_comment"><i >Delete a certain user by its id</i></div>
+                </div>
+                                               <div>
+                <a href="#deleteUserByExternalUserIdAndType"><b>deleteUserByExternalUserIdAndType</b></a><br/>
+                <div class="navigation_comment"><i >Delete a certain user by its external user id</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserObjectAndGenerateRoomHash"><b>setUserObjectAndGenerateRoomHash</b></a><br/>
+                <div class="navigation_comment"><i >Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room. ...
+ Session-Hashs are deleted 15 minutes after the creation if not used.</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserObjectAndGenerateRoomHashByURL"><b>setUserObjectAndGenerateRoomHashByURL</b></a><br/>
+                <div class="navigation_comment"><i >Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserObjectAndGenerateRoomHashByURLAndRecFlag"><b>setUserObjectAndGenerateRoomHashByURLAndRecFlag</b></a><br/>
+                <div class="navigation_comment"><i >Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+ 
+ ++ sets the flag if the user can do recording in the conference room</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserObjectMainLandingZone"><b>setUserObjectMainLandingZone</b></a><br/>
+                <div class="navigation_comment"><i >Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID and directly login into the dashboard
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserAndNickName"><b>setUserAndNickName</b></a><br/>
+                <div class="navigation_comment"><i >Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+ 
+ ++ Additionally you can set a param showNickNameDialogAsInt, the effect
+ if that param is 1 is, that the user gets a popup where he can enter his
+ nickname right before he enters the conference room. All nicknames and
+ emails users enter are logged in the conferencelog table.</i></div>
+                </div>
+                                               <div>
+                <a href="#setUserObjectAndGenerateRecordingHashByURL"><b>setUserObjectAndGenerateRecordingHashByURL</b></a><br/>
+                <div class="navigation_comment"><i >Use this method to access a Recording instead of Room</i></div>
+                </div>
+                                               <div>
+                <a href="#addUserToOrganisation"><b>addUserToOrganisation</b></a><br/>
+                <div class="navigation_comment"><i >Add a user to a certain organization</i></div>
+                </div>
+                                               <div>
+                <a href="#getUsersByOrganisation"><b>getUsersByOrganisation</b></a><br/>
+                <div class="navigation_comment"><i >Search users and return them</i></div>
+                </div>
+                                               <div>
+                <a href="#kickUserByPublicSID"><b>kickUserByPublicSID</b></a><br/>
+                <div class="navigation_comment"><i >Kick a user by its public SID</i></div>
+                </div>
+                                               <div>
+                <a href="#addOrganisation"><b>addOrganisation</b></a><br/>
+                <div class="navigation_comment"><i >add a new organisation</i></div>
+                </div>
+                           </div>
+	   
+	    <h3>Methods Details in UserService</h3>
+	
+				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getSession" ><b>getSession</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getSession (
+    			    			    			)
+    			</i><br/>
+    			<p>
+    			  load this session id before doing anything else Returns an Object of Type
+ Sessiondata, this contains a sessionId, use that sessionId in all Methods
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.entity.server.Sessiondata
+                </p>
+    			<p>Params:</p>
+    			    			
+    			    				<i>No Params</i>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    							<a href="http://localhost:5080/openmeetings/services/UserService/getSession">http://localhost:5080/openmeetings/services/UserService/getSession</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="loginUser" ><b>loginUser</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>loginUser (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String userpass
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Auth function, use the SID you get by getSession, return positive means
+ logged-in, if negative its an ErrorCode, you have to invoke the Method
+ getErrorByCode to get the Text-Description of that ErrorCode
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">- The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">- Username from OpenMeetings, the user has to have Admin-rights</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">userpass</td>
+	                     <td valign="top">- Userpass from OpenMeetings</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/loginUser?SID=VALUE&username=VALUE&userpass=VALUE">http://localhost:5080/openmeetings/services/UserService/loginUser?SID=VALUE&amp;username=VALUE&amp;userpass=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getErrorByCode" ><b>getErrorByCode</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getErrorByCode (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long errorid
+    			       			    			       			     , 
+    			       			   long langId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  loads an Error-Object. If a Method returns a negative Result, its an
+ Error-id, it needs a language_id to specify in which language you want to
+ display/read the error-message. English has the Language-ID one, for
+ different one see the list of languages
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.basic.ErrorResult
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">errorid</td>
+	                     <td valign="top">the error id (negative Value here!)</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">langId</td>
+	                     <td valign="top">The id of the language</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/getErrorByCode?SID=VALUE&errorid=VALUE&langId=VALUE">http://localhost:5080/openmeetings/services/UserService/getErrorByCode?SID=VALUE&amp;errorid=VALUE&amp;langId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addNewUser" ><b>addNewUser</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addNewUser (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String userpass
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String additionalname
+    			       			    			       			     , 
+    			       			   String street
+    			       			    			       			     , 
+    			       			   String zip
+    			       			    			       			     , 
+    			       			   String fax
+    			       			    			       			     , 
+    			       			   long states_id
+    			       			    			       			     , 
+    			       			   String town
+    			       			    			       			     , 
+    			       			   long language_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a new User like through the Frontend, but also does activates the
+ Account To do SSO see the methods to create a hash and use those ones!
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">userpass</td>
+	                     <td valign="top">any userpass</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">additionalname</td>
+	                     <td valign="top">any additionalname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">street</td>
+	                     <td valign="top">any street</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">zip</td>
+	                     <td valign="top">any zip</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fax</td>
+	                     <td valign="top">any fax</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">states_id</td>
+	                     <td valign="top">a valid states_id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">town</td>
+	                     <td valign="top">any town</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language_id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/addNewUser?SID=VALUE&username=VALUE&userpass=VALUE&lastname=VALUE&firstname=VALUE&email=VALUE&additionalname=VALUE&street=VALUE&zip=VALUE&fax=VALUE&states_id=VALUE&town=VALUE&language_id=VALUE">http://localhost:5080/openmeetings/services/UserService/addNewUser?SID=VALUE&amp;username=VALUE&amp;userpass=VALUE&amp;lastname=VALUE&amp;firstname=VALUE&amp;email=VALUE&amp;additionalname=VALUE&amp;street=VALUE&amp;zip=VALUE&amp;fax=VALUE&amp;states_id=VALUE&amp;town=VALUE&amp;language_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addNewUserWithTimeZone" ><b>addNewUserWithTimeZone</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addNewUserWithTimeZone (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String userpass
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String additionalname
+    			       			    			       			     , 
+    			       			   String street
+    			       			    			       			     , 
+    			       			   String zip
+    			       			    			       			     , 
+    			       			   String fax
+    			       			    			       			     , 
+    			       			   long states_id
+    			       			    			       			     , 
+    			       			   String town
+    			       			    			       			     , 
+    			       			   long language_id
+    			       			    			       			     , 
+    			       			   String jNameTimeZone
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a new User like through the Frontend, but also does activates the
+ Account
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">userpass</td>
+	                     <td valign="top">any userpass</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">additionalname</td>
+	                     <td valign="top">any additionalname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">street</td>
+	                     <td valign="top">any street</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">zip</td>
+	                     <td valign="top">any zip</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fax</td>
+	                     <td valign="top">any fax</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">states_id</td>
+	                     <td valign="top">a valid states_id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">town</td>
+	                     <td valign="top">any town</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language_id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">jNameTimeZone</td>
+	                     <td valign="top">the name of the timezone for the user</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/addNewUserWithTimeZone?SID=VALUE&username=VALUE&userpass=VALUE&lastname=VALUE&firstname=VALUE&email=VALUE&additionalname=VALUE&street=VALUE&zip=VALUE&fax=VALUE&states_id=VALUE&town=VALUE&language_id=VALUE&jNameTimeZone=VALUE">http://localhost:5080/openmeetings/services/UserService/addNewUserWithTimeZone?SID=VALUE&amp;username=VALUE&amp;userpass=VALUE&amp;lastname=VALUE&amp;firstname=VALUE&amp;email=VALUE&amp;additionalname=VALUE&amp;street=VALUE&amp;zip=VALUE&amp;fax=VALUE&amp;states_id=VALUE&amp;town=VALUE&amp;language_id=VALUE&amp;jNameTimeZone=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addNewUserWithExternalType" ><b>addNewUserWithExternalType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addNewUserWithExternalType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String userpass
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String additionalname
+    			       			    			       			     , 
+    			       			   String street
+    			       			    			       			     , 
+    			       			   String zip
+    			       			    			       			     , 
+    			       			   String fax
+    			       			    			       			     , 
+    			       			   long states_id
+    			       			    			       			     , 
+    			       			   String town
+    			       			    			       			     , 
+    			       			   long language_id
+    			       			    			       			     , 
+    			       			   String jNameTimeZone
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Adds a new User like through the Frontend, but also does activates the
+ Account, sends NO email (no matter what you configured) and sets the
+ users external user id and type
+ 
+ Use the methods to create a hash for SSO, creating users is not required
+ for SSO
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">userpass</td>
+	                     <td valign="top">any userpass</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">additionalname</td>
+	                     <td valign="top">any additionalname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">street</td>
+	                     <td valign="top">any street</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">zip</td>
+	                     <td valign="top">any zip</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">fax</td>
+	                     <td valign="top">any fax</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">states_id</td>
+	                     <td valign="top">a valid states_id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">town</td>
+	                     <td valign="top">any town</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">language_id</td>
+	                     <td valign="top">the language_id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">jNameTimeZone</td>
+	                     <td valign="top">the name of the timezone for the user</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">externalUserId</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">externalUserType</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/addNewUserWithExternalType?SID=VALUE&username=VALUE&userpass=VALUE&lastname=VALUE&firstname=VALUE&email=VALUE&additionalname=VALUE&street=VALUE&zip=VALUE&fax=VALUE&states_id=VALUE&town=VALUE&language_id=VALUE&jNameTimeZone=VALUE&externalUserId=VALUE&externalUserType=VALUE">http://localhost:5080/openmeetings/services/UserService/addNewUserWithExternalType?SID=VALUE&amp;username=VALUE&amp;userpass=VALUE&amp;lastname=VALUE&amp;firstname=VALUE&amp;email=VALUE&amp;additionalname=VALUE&amp;street=VALUE&amp;zip=VALUE&amp;fax=VALUE&amp;states_id=VALUE&amp;town=VALUE&amp;language_id=VALUE&amp;jNameTimeZone=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteUserById" ><b>deleteUserById</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteUserById (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long userId
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Delete a certain user by its id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">userId</td>
+	                     <td valign="top">the openmeetings user id</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/deleteUserById?SID=VALUE&userId=VALUE">http://localhost:5080/openmeetings/services/UserService/deleteUserById?SID=VALUE&amp;userId=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="deleteUserByExternalUserIdAndType" ><b>deleteUserByExternalUserIdAndType</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>deleteUserByExternalUserIdAndType (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Delete a certain user by its external user id
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">externalUserId</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">externalUserId</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/deleteUserByExternalUserIdAndType?SID=VALUE&externalUserId=VALUE&externalUserType=VALUE">http://localhost:5080/openmeetings/services/UserService/deleteUserByExternalUserIdAndType?SID=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserObjectAndGenerateRoomHash" ><b>setUserObjectAndGenerateRoomHash</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserObjectAndGenerateRoomHash (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String profilePictureUrl
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   int becomeModeratorAsInt
+    			       			    			       			     , 
+    			       			   int showAudioVideoTestAsInt
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room. ...
+ Session-Hashs are deleted 15 minutes after the creation if not used.
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">profilePictureUrl</td>
+	                     <td valign="top">any profilePictureUrl</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id the user should be logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">becomeModeratorAsInt</td>
+	                     <td valign="top">0 means no Moderator, 1 means Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">showAudioVideoTestAsInt</td>
+	                     <td valign="top">0 means don't show Audio/Video Test, 1 means show Audio/Video
+            Test Application before the user is logged into the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHash?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&profilePictureUrl=VALUE&email=VALUE&externalUserId=VALUE&externalUserType=VALUE&room_id=VALUE&becomeModeratorAsInt=VALUE&showAudioVideoTestAsInt=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHash?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;profilePictureUrl=VALUE&amp;email=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE&amp;room_id=VALUE&amp;becomeModeratorAsInt=VALUE&amp;showAudioVideoTestAsInt=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserObjectAndGenerateRoomHashByURL" ><b>setUserObjectAndGenerateRoomHashByURL</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserObjectAndGenerateRoomHashByURL (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String profilePictureUrl
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   int becomeModeratorAsInt
+    			       			    			       			     , 
+    			       			   int showAudioVideoTestAsInt
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">profilePictureUrl</td>
+	                     <td valign="top">any profilePictureUrl</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id the user should be logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">becomeModeratorAsInt</td>
+	                     <td valign="top">0 means no Moderator, 1 means Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">showAudioVideoTestAsInt</td>
+	                     <td valign="top">0 means don't show Audio/Video Test, 1 means show Audio/Video
+            Test Application before the user is logged into the room</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHashByURL?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&profilePictureUrl=VALUE&email=VALUE&externalUserId=VALUE&externalUserType=VALUE&room_id=VALUE&becomeModeratorAsInt=VALUE&showAudioVideoTestAsInt=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHashByURL?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;profilePictureUrl=VALUE&amp;email=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE&amp;room_id=VALUE&amp;becomeModeratorAsInt=VALUE&amp;showAudioVideoTestAsInt=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserObjectAndGenerateRoomHashByURLAndRecFlag" ><b>setUserObjectAndGenerateRoomHashByURLAndRecFlag</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserObjectAndGenerateRoomHashByURLAndRecFlag (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String profilePictureUrl
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   int becomeModeratorAsInt
+    			       			    			       			     , 
+    			       			   int showAudioVideoTestAsInt
+    			       			    			       			     , 
+    			       			   int allowRecording
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+ 
+ ++ sets the flag if the user can do recording in the conference room
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">profilePictureUrl</td>
+	                     <td valign="top">any profilePictureUrl</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id the user should be logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">becomeModeratorAsInt</td>
+	                     <td valign="top">0 means no Moderator, 1 means Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">showAudioVideoTestAsInt</td>
+	                     <td valign="top">0 means don't show Audio/Video Test, 1 means show Audio/Video
+            Test Application before the user is logged into the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">allowRecording</td>
+	                     <td valign="top">0 means don't allow Recording, 1 means allow Recording</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHashByURLAndRecFlag?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&profilePictureUrl=VALUE&email=VALUE&externalUserId=VALUE&externalUserType=VALUE&room_id=VALUE&becomeModeratorAsInt=VALUE&showAudioVideoTestAsInt=VALUE&allowRecording=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRoomHashByURLAndRecFlag?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;profilePictureUrl=VALUE&amp;email=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE&amp;room_id=VALUE&amp;becomeModeratorAsInt=VALUE&amp;showAudioVideoTestAsInt=VALUE&amp;allowRecording=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserObjectMainLandingZone" ><b>setUserObjectMainLandingZone</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserObjectMainLandingZone (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String profilePictureUrl
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID and directly login into the dashboard
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">profilePictureUrl</td>
+	                     <td valign="top">any absolute profilePictureUrl</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserObjectMainLandingZone?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&profilePictureUrl=VALUE&email=VALUE&externalUserId=VALUE&externalUserType=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserObjectMainLandingZone?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;profilePictureUrl=VALUE&amp;email=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserAndNickName" ><b>setUserAndNickName</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserAndNickName (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String profilePictureUrl
+    			       			    			       			     , 
+    			       			   String email
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			       			     , 
+    			       			   Long room_id
+    			       			    			       			     , 
+    			       			   int becomeModeratorAsInt
+    			       			    			       			     , 
+    			       			   int showAudioVideoTestAsInt
+    			       			    			       			     , 
+    			       			   int showNickNameDialogAsInt
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Description: sets the SessionObject for a certain SID, after setting this
+ Session-Object you can use the SID + a RoomId to enter any Room.
+ 
+ ++ the user can press f5 to reload the page / use the link several times,
+ the SOAP Gateway does remember the IP of the user and the will only the
+ first user that enters the room allow to re-enter. ... Session-Hashs are
+ deleted 15 minutes after the creation if not used.
+ 
+ ++ Additionally you can set a param showNickNameDialogAsInt, the effect
+ if that param is 1 is, that the user gets a popup where he can enter his
+ nickname right before he enters the conference room. All nicknames and
+ emails users enter are logged in the conferencelog table.
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">profilePictureUrl</td>
+	                     <td valign="top">any profilePictureUrl</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">email</td>
+	                     <td valign="top">any email</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">room_id</td>
+	                     <td valign="top">the room id the user should be logged in</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">becomeModeratorAsInt</td>
+	                     <td valign="top">0 means no Moderator, 1 means Moderator</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">showAudioVideoTestAsInt</td>
+	                     <td valign="top">0 means don't show Audio/Video Test, 1 means show Audio/Video
+            Test Application before the user is logged into the room</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">showNickNameDialogAsInt</td>
+	                     <td valign="top">0 means do not show the popup to enter a nichname, 1 means
+            that there is a popup to enter the nickname for the conference</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserAndNickName?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&profilePictureUrl=VALUE&email=VALUE&externalUserId=VALUE&externalUserType=VALUE&room_id=VALUE&becomeModeratorAsInt=VALUE&showAudioVideoTestAsInt=VALUE&showNickNameDialogAsInt=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserAndNickName?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;profilePictureUrl=VALUE&amp;email=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE&amp;room_id=VALUE&amp;becomeModeratorAsInt=VALUE&amp;showAudioVideoTestAsInt=VALUE&amp;showNickNameDialogAsInt=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="setUserObjectAndGenerateRecordingHashByURL" ><b>setUserObjectAndGenerateRecordingHashByURL</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>setUserObjectAndGenerateRecordingHashByURL (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String username
+    			       			    			       			     , 
+    			       			   String firstname
+    			       			    			       			     , 
+    			       			   String lastname
+    			       			    			       			     , 
+    			       			   String externalUserId
+    			       			    			       			     , 
+    			       			   String externalUserType
+    			       			    			       			     , 
+    			       			   Long recording_id
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Use this method to access a Recording instead of Room
+    			</p>
+    			<p>
+                  Return Type: java.lang.String
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">username</td>
+	                     <td valign="top">any username</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">firstname</td>
+	                     <td valign="top">any firstname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">lastname</td>
+	                     <td valign="top">any lastname</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserId</td>
+	                     <td valign="top">if you have any external user Id you may set it here</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">externalUserType</td>
+	                     <td valign="top">you can specify your system-name here, for example "moodle"</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">recording_id</td>
+	                     <td valign="top">the id of the recording, get a List of all Recordings with
+            RoomService::getFlvRecordingByExternalRoomType</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRecordingHashByURL?SID=VALUE&username=VALUE&firstname=VALUE&lastname=VALUE&externalUserId=VALUE&externalUserType=VALUE&recording_id=VALUE">http://localhost:5080/openmeetings/services/UserService/setUserObjectAndGenerateRecordingHashByURL?SID=VALUE&amp;username=VALUE&amp;firstname=VALUE&amp;lastname=VALUE&amp;externalUserId=VALUE&amp;externalUserType=VALUE&amp;recording_id=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addUserToOrganisation" ><b>addUserToOrganisation</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addUserToOrganisation (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   Long user_id
+    			       			    			       			     , 
+    			       			   Long organisation_id
+    			       			    			       			     , 
+    			       			   Long insertedby
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Add a user to a certain organization
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">user_id</td>
+	                     <td valign="top">the user id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">organisation_id</td>
+	                     <td valign="top">the organization id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		Long
+	                     		                     </td>
+	                     <td valign="top">insertedby</td>
+	                     <td valign="top">user id of the operating user</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/addUserToOrganisation?SID=VALUE&user_id=VALUE&organisation_id=VALUE&insertedby=VALUE">http://localhost:5080/openmeetings/services/UserService/addUserToOrganisation?SID=VALUE&amp;user_id=VALUE&amp;organisation_id=VALUE&amp;insertedby=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="getUsersByOrganisation" ><b>getUsersByOrganisation</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>getUsersByOrganisation (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   long organisation_id
+    			       			    			       			     , 
+    			       			   int start
+    			       			    			       			     , 
+    			       			   int max
+    			       			    			       			     , 
+    			       			   String orderby
+    			       			    			       			     , 
+    			       			   boolean asc
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Search users and return them
+    			</p>
+    			<p>
+                  Return Type: org.apache.openmeetings.db.dto.user.UserSearchResult
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		long
+	                     		                     </td>
+	                     <td valign="top">organisation_id</td>
+	                     <td valign="top">the organization id</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">start</td>
+	                     <td valign="top">first record</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		int
+	                     		                     </td>
+	                     <td valign="top">max</td>
+	                     <td valign="top">max records</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">orderby</td>
+	                     <td valign="top">orderby clause</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		boolean
+	                     		                     </td>
+	                     <td valign="top">asc</td>
+	                     <td valign="top">asc or desc</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    								    				    								    				    								    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/getUsersByOrganisation?SID=VALUE&organisation_id=VALUE&start=VALUE&max=VALUE&orderby=VALUE&asc=VALUE">http://localhost:5080/openmeetings/services/UserService/getUsersByOrganisation?SID=VALUE&amp;organisation_id=VALUE&amp;start=VALUE&amp;max=VALUE&amp;orderby=VALUE&amp;asc=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="kickUserByPublicSID" ><b>kickUserByPublicSID</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>kickUserByPublicSID (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String publicSID
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  Kick a user by its public SID
+    			</p>
+    			<p>
+                  Return Type: java.lang.Boolean
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">publicSID</td>
+	                     <td valign="top">the publicSID (you can get it from the call to get users in a
+            room)</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/kickUserByPublicSID?SID=VALUE&publicSID=VALUE">http://localhost:5080/openmeetings/services/UserService/kickUserByPublicSID?SID=VALUE&amp;publicSID=VALUE</a>
+    		  </div>
+    	   				    		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="addOrganisation" ><b>addOrganisation</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>addOrganisation (
+    			    			    			       			   String SID
+    			       			    			       			     , 
+    			       			   String name
+    			       			    			)
+    			</i><br/>
+    			<p>
+    			  add a new organisation
+    			</p>
+    			<p>
+                  Return Type: java.lang.Long
+                </p>
+    			<p>Params:</p>
+    			    			
+    				    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   	    			   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">SID</td>
+	                     <td valign="top">The SID from getSession</td>
+	                   </tr>
+	                   
+	                   	                   	    			   <tr>
+	                     <td valign="top">
+	                     		                     		String
+	                     		                     </td>
+	                     <td valign="top">name</td>
+	                     <td valign="top">the name of the org</td>
+	                   </tr>
+	                   
+	                   	                   	                   </tbody>
+	    			</table>
+    			    			<br/>
+    			REST Sample Call/URL:<br/>
+    			    			    				    								    				    												<a href="http://localhost:5080/openmeetings/services/UserService/addOrganisation?SID=VALUE&name=VALUE">http://localhost:5080/openmeetings/services/UserService/addOrganisation?SID=VALUE&amp;name=VALUE</a>
+    		  </div>
+    	   			
+	
+	</body>
+</html>
+
diff --git a/docs/WebappNamePath.html b/docs/WebappNamePath.html
new file mode 100644
index 0000000..548d5d8
--- /dev/null
+++ b/docs/WebappNamePath.html
@@ -0,0 +1,534 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Webapp Name / Path</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Customize Openmeetings logo"><strong>Customize Openmeetings logo</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you want to set up your logo in Openmeetings header you can do the following:</p>
+                                                <ol>
+				<li>create your logo image as PNG 40px height</li>
+				<li>replace <tt>/opt/red5/webapps/openmeetings/public/themes/basic-theme/general/logo.png</tt> with your logo file</li>
+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/config.xml</tt> and modify <tt>appdisplay</tt> section: set position and display for the logo and/or name</li>
+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/theme.xml</tt> (around line 57) and change image name/path</li>
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Renaming /openmeetings context"><strong>Renaming /openmeetings context</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				If you want to have
+				<tt>http://yourcorp.com:5080/yourmeetings</tt>
+				instead of
+				<tt>http://yourcorp.com:5080/openmeetings</tt>
+				you need to do the following
+			</p>
+                                                <ol>
+				<li>stop openmmetings if it is running </li>
+				<li>
+					go to openmeetings install dir (for ex.
+					<tt>/opt/red5</tt>
+					)
+				</li>
+				<li>
+					rename
+					<tt>/opt/red5/webapps/openmeetings</tt>
+					to
+					<tt>/opt/red5/webapps/yourmeetings</tt>
+					(for ex.
+					<tt>mv /opt/red5/webapps/openmeetings
+						/opt/red5/webapps/yourmeetings
+					</tt>
+					)
+				</li>
+				<li>
+					open
+					<tt>/opt/red5/webapps/yourmeetings/public/config.xml</tt>
+					using your favorite text editor (for ex.
+					<tt>vim /opt/red5/webapps/yourmeetings/public/config.xml</tt>
+					)
+				</li>
+				<li>
+					find and modify
+					<tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>
+					to be
+					<tt>&lt;webAppRootKey&gt;</tt>
+					<strong>yourmeetings</strong>
+					<tt>&lt;/webAppRootKey&gt;</tt>
+				</li>
+				<li>
+					find and modify
+					<tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>
+					to be
+					<tt>&lt;httpRootKey&gt;</tt>
+					<strong>/yourmeetings/</strong>
+					<tt>&lt;/httpRootKey&gt;</tt>
+				</li>
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Changing hard-coded application name in string labels"><strong>Changing hard-coded application name in string labels</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				To have
+				<i>Your Application Name</i>
+				instead of
+				<i>Openmeetings</i>
+				in
+				<strong>all</strong>
+				text labels you need to do the following
+			</p>
+                                                <ol>
+				<li>
+					ensure
+					<strong>
+						<tt>$APP_NAME</tt>
+					</strong>
+					placeholder is used in
+					<i>all</i>
+					strings you have added and/or modified (all strings bundled into
+					Openmeetings already have this placeholder)
+				</li>
+				<li>login to Openmeetings as user with administrator privileges </li>
+				<li>
+					go to
+					<tt>Administration -&gt; Configuration</tt>
+				</li>
+				<li>
+					find and edit configuration with name
+					<strong>
+						<tt>application.name</tt>
+					</strong>
+				</li>
+				<li>
+					Set its value to be
+					<i>
+						<tt>Your Application Name</tt>
+					</i>
+				</li>
+				<li>
+					<tt>Save</tt>
+				</li>
+				<li>reload page or relogin </li>
+			</ol>
+                                                <p>
+			All string will display
+			<i>
+				<tt>Your Application Name</tt>
+			</i>
+			in place of
+			<i>
+				<tt>Openmeetings</tt>
+			</i>
+			</p>
+                                                <p>
+				Please
+				<i>NOTE</i>
+				there are 3 additional properties in the public/config.xml file which
+				should be modified for
+				<strong>TOTAL</strong>
+				Openmeetings clean up:
+			</p>
+                                                <div class="xmlcode">
+				&lt;currentappname&gt;OpenMeetings&lt;/currentappname&gt;
+				<br />
+				&lt;currentappnameurl&gt;http://openmeetings.apache.org&lt;/currentappnameurl&gt;
+				<br />
+				&lt;currentappnamebugurl&gt;https://issues.apache.org/jira/browse/OPENMEETINGS&lt;/currentappnamebugurl&gt;
+				<br />
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Running multiple Openmeetings instances on the same server"><strong>Running multiple Openmeetings instances on the same server</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				If you want to run multiple Openmeetings instances on the same server i.e. to have<br />  
+				<tt>http://yourcorp.com:5080/openmeetings1</tt><br /> 
+				<tt>http://yourcorp.com:5080/openmeetings2</tt><br /> etc.<br /> you need to do the following:
+			</p>
+                                                <ol>
+				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 
+				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 
+				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)
+				</li>
+				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br />
+					<div class="xmlcode">
+					export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"
+					</div>
+					or <tt>red5.bat</tt>:<br />
+					<div class="xmlcode">
+					set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M
+					</div>
+				</li>
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/WebcamResolutions.html b/docs/WebcamResolutions.html
new file mode 100644
index 0000000..5f734de
--- /dev/null
+++ b/docs/WebcamResolutions.html
@@ -0,0 +1,379 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - How to configure Camera default resolutions </title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to configure Camera default resolutions"><strong>How to configure Camera default resolutions</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>When you choose the webcam you have different resolutions
+				available the user can choose from. </p>
+                                                <p>You can add/remove resolutions and also change the default
+				selection. In the public/config.xml there is a section: </p>
+                                                <div class="xmlcode">
+				&lt;availableCameraResolutions&gt;<br />
+				<div style="margin-left:20px">
+				    &lt;resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" /&gt;<br />
+				    &lt;resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" /&gt;<br />
+				    &lt;resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" /&gt;<br />
+				    &lt;resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" /&gt;<br />
+				    &lt;resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" /&gt;<br />
+				    &lt;resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" /&gt;<br />
+				    &lt;resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" /&gt;<br />
+				    &lt;resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" /&gt;<br />
+				    &lt;resolution type="XGA 4:3" width="1024" height="768" isDefault="false" /&gt;<br />
+				    &lt;resolution type="16:9" width="256" height="150" isDefault="false" /&gt;<br />
+				    &lt;resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" /&gt;<br />
+				    &lt;resolution type="pseudo 16:9" width="480" height="234" isDefault="false" /&gt;<br />
+				    &lt;resolution type="16:9" width="512" height="300" isDefault="false" /&gt;<br />
+				    &lt;resolution type="nHD 16:9" width="640" height="360" isDefault="false" /&gt;<br />
+				    &lt;resolution type="16:9" width="1024" height="600" isDefault="false" /&gt;<br />
+				    </div>
+				&lt;/availableCameraResolutions&gt;			 
+			</div>
+                                                <p>Tip: You might edit the public/config.xml with an XML aware editor that correctly 
+		    handles the XSD defintion to avoid misconfiguration. The openmeetings-config.xsd 
+		    is in the same folder like the public/config.xml. </p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/WebserviceIndex.html b/docs/WebserviceIndex.html
new file mode 100644
index 0000000..222c354
--- /dev/null
+++ b/docs/WebserviceIndex.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Classes</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+			
+       <div class="navigation">
+	               <div>
+            <a href="CalendarService.html" target="_PARENT"><b>CalendarService</b></a><br/>
+            <div class="navigation_comment"><i >CalendarService contains methods to create, edit delete calendar meetings</i></div>
+            </div>
+                    <div>
+            <a href="FileService.html" target="_PARENT"><b>FileService</b></a><br/>
+            <div class="navigation_comment"><i >Contains methods to import and upload files into the Files section of the
+ conference room and the personal drive of any user</i></div>
+            </div>
+                    <div>
+            <a href="JabberService.html" target="_PARENT"><b>JabberService</b></a><br/>
+            <div class="navigation_comment"><i >This class provides method implementations necessary for OM to Jabber integration.</i></div>
+            </div>
+                    <div>
+            <a href="RoomService.html" target="_PARENT"><b>RoomService</b></a><br/>
+            <div class="navigation_comment"><i >RoomService contains methods to manipulate rooms and create invitation hash</i></div>
+            </div>
+                    <div>
+            <a href="ServerService.html" target="_PARENT"><b>ServerService</b></a><br/>
+            <div class="navigation_comment"><i >This class provides method implementations necessary for OM to manage servers
+ participating in cluster.</i></div>
+            </div>
+                    <div>
+            <a href="UserService.html" target="_PARENT"><b>UserService</b></a><br/>
+            <div class="navigation_comment"><i >The Service contains methods to login and create hash to directly enter
+ conference rooms, recordings or the application in general</i></div>
+            </div>
+                </div>
+	
+	
+	</body>
+	</html>
diff --git a/docs/WebsiteGuide.html b/docs/WebsiteGuide.html
new file mode 100644
index 0000000..e608eca
--- /dev/null
+++ b/docs/WebsiteGuide.html
@@ -0,0 +1,478 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Release Guide</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How to update Apache OpenMeetings website"><strong>How to update Apache OpenMeetings website</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Required tools"><strong>Required tools</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					<ul>
+						<li>Sun JDK6</li>
+						<li>Apache ANT (1.8 or later)</li>
+					</ul>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Introduction"><strong>Introduction</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					<p>
+						The Apache OpenMeetings HTML websites are generated from XML files. 
+						You edit the XML files, run the ANT command "ant anakia" that generates the HTML files 
+						and then you checkin to SVN both: XML and HTML files.
+					</p>
+					<p>
+						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.
+					</p>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Editing the website"><strong>Editing the website</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					<p>
+						OpenMeetings website (
+						<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>
+						) is a copy from the SVN repository.
+						<br />
+						The file in the SVN to be synced are at:
+						<br />
+						<a href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/
+						</a>
+						<br />and<br />
+						<a href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/
+						</a>
+					</p>
+					
+					<div>
+						To update the website you checkout trunk:
+						<br />
+						<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+						</a> <br />
+						edit the files in the folder <tt>xdocs</tt><br />
+						then you run the command:
+						<div class="xmlcode">
+							ant anakia
+						</div>
+						control the output locally in the folder <tt>docs</tt><br />
+						And then checkin into the SVN <i>both</i> the edited xml and generated html files.
+					</div>
+					
+					<p>
+						The public website is automatically synced with the SVN repository.<br />
+						Changes to the SVN should be immediately synced to the production website.<br />
+						If not you might login to people.apache.org,<br />
+						cd to <tt>/www/openmeetings.apache.org/content/</tt><br />
+						and run the linux command "touch" on the files that need to be synced
+					</p>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Adding a new menu entry"><strong>Adding a new menu entry</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					To add a new menu entry in the left side panel you need to modify the file: 
+					<br />
+					<tt>xdocs/stylesheets/project.xml</tt>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Writing a new macro"><strong>Writing a new macro</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+					<p>
+						You can write macros in a template language to parse from the XML files certain aspects.
+					</p>
+					<p>
+						To add a new macro see the file:<br />
+						<tt>xdocs/stylesheets/site.vsl</tt>
+					</p>
+				</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/commercial-support.html b/docs/commercial-support.html
new file mode 100644
index 0000000..cd1d818
--- /dev/null
+++ b/docs/commercial-support.html
@@ -0,0 +1,380 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Commercial Support</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Commercial Support for OpenMeetings"><strong>Commercial Support for OpenMeetings</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>There are few companies offering complex services for OpenMeetings, including code support,
+			development, integration and bug fixing
+			</p>
+                                                <ul>
+				<li>
+					<a href="http://www.webbase-design.de/" target="_BLANK">webbase-design.de
+					</a>
+					owned by Sebastian Wagner
+				</li>
+				<li>
+					<a href="http://www.dataved.ru" target="_BLANK">dataved.ru
+					</a>
+					run by Alexei Fedotov, Maxim Solodovnik, Timur Tleukenov, Irina Arkhipets, Denis Kandrov, Vasily Degtyarev
+				</li>
+				<li>
+                    <a href="http://www.samoo.es" target="_BLANK" rel="nofollow">samoo.es</a>
+                    provides support for the Sakai Plugin
+                </li>
+			</ul>
+                                                <p>
+                            Please write to <a href="mailto:support-om@dataved.ru">support-om@dataved.ru</a> to get WebBase-Design or Dataved support
+			</p>
+                                                <p>
+			    There are more companies offering installation, customization, hosting, conferencing and support services. You can add 
+				yourself to the <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Commercial+Support">wiki page</a>.
+			</p>
+                                                <p>
+				Want to get listed here? Become a <a href="http://www.apache.org/dev/committers.html">committer</a>.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/css/1b.png b/docs/css/1b.png
new file mode 100644
index 0000000..0d70d76
--- /dev/null
+++ b/docs/css/1b.png
Binary files differ
diff --git a/docs/css/2b.png b/docs/css/2b.png
new file mode 100644
index 0000000..a93e132
--- /dev/null
+++ b/docs/css/2b.png
Binary files differ
diff --git a/docs/css/3b.png b/docs/css/3b.png
new file mode 100644
index 0000000..f9d8b7a
--- /dev/null
+++ b/docs/css/3b.png
Binary files differ
diff --git a/docs/css/4b.png b/docs/css/4b.png
new file mode 100644
index 0000000..c6e41f4
--- /dev/null
+++ b/docs/css/4b.png
Binary files differ
diff --git a/docs/css/coin-slider-styles.css b/docs/css/coin-slider-styles.css
new file mode 100644
index 0000000..31e7d67
--- /dev/null
+++ b/docs/css/coin-slider-styles.css
@@ -0,0 +1,17 @@
+/*
+	Coin Slider jQuery plugin CSS styles
+	http://workshop.rs/projects/coin-slider
+*/
+
+
+.coin-slider { overflow: hidden; zoom: 1; position: relative; }
+.coin-slider a{ text-decoration: none; outline: none; border: none; }
+
+.cs-buttons { font-size: 0px; padding: 10px; float: left; }
+.cs-buttons a { margin-left: 5px; height: 10px; width: 10px; float: left; border: 1px solid #B8C4CF; color: #B8C4CF; text-indent: -1000px; }
+.cs-active { background-color: #B8C4CF; color: #FFFFFF; }
+
+.cs-title { width: 545px; padding: 10px; background-color: #000000; color: #FFFFFF; }
+
+.cs-prev, 
+.cs-next { background-color: #000000; color: #FFFFFF; padding: 0px 10px; }
diff --git a/docs/css/colorbox.css b/docs/css/colorbox.css
new file mode 100644
index 0000000..894da5d
--- /dev/null
+++ b/docs/css/colorbox.css
@@ -0,0 +1,70 @@
+/*
+    Colorbox Core Style:
+    The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
+
+/* 
+    User Style:
+    Change the following styles to modify the appearance of Colorbox.  They are
+    ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
+#colorbox{outline:0;}
+    #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
+    #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
+    #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
+    #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
+    #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
+    #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
+    #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
+    #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
+    #cboxContent{background:#fff; overflow:hidden;}
+        .cboxIframe{background:#fff;}
+        #cboxError{padding:50px; border:1px solid #ccc;}
+        #cboxLoadedContent{margin-bottom:28px;}
+        #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
+        #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+        #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+        #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+
+        /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+        #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+        
+        /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+        #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
+        #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
+        #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxPrevious:hover{background-position:-75px -25px;}
+        #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxNext:hover{background-position:-50px -25px;}
+        #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxClose:hover{background-position:-25px -25px;}
+
+/*
+  The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+  when an alpha filter (opacity change) is set on the element or ancestor element.  This style is not applied to or needed in IE9.
+  See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
diff --git a/docs/css/images/animated-overlay.gif b/docs/css/images/animated-overlay.gif
new file mode 100644
index 0000000..d441f75
--- /dev/null
+++ b/docs/css/images/animated-overlay.gif
Binary files differ
diff --git a/docs/css/images/border.png b/docs/css/images/border.png
new file mode 100644
index 0000000..f463a10
--- /dev/null
+++ b/docs/css/images/border.png
Binary files differ
diff --git a/docs/css/images/controls.png b/docs/css/images/controls.png
new file mode 100644
index 0000000..dcfd6fb
--- /dev/null
+++ b/docs/css/images/controls.png
Binary files differ
diff --git a/docs/css/images/loading.gif b/docs/css/images/loading.gif
new file mode 100644
index 0000000..b4695d8
--- /dev/null
+++ b/docs/css/images/loading.gif
Binary files differ
diff --git a/docs/css/images/loading_background.png b/docs/css/images/loading_background.png
new file mode 100644
index 0000000..6ae83e6
--- /dev/null
+++ b/docs/css/images/loading_background.png
Binary files differ
diff --git a/docs/css/images/overlay.png b/docs/css/images/overlay.png
new file mode 100644
index 0000000..53ea98f
--- /dev/null
+++ b/docs/css/images/overlay.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_0_000088_40x100.png b/docs/css/images/ui-bg_flat_0_000088_40x100.png
new file mode 100644
index 0000000..b0919c2
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_0_000088_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_0_e6b900_40x100.png b/docs/css/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100644
index 0000000..facb4c0
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_100_eeeeee_40x100.png b/docs/css/images/ui-bg_flat_100_eeeeee_40x100.png
new file mode 100644
index 0000000..b976c9b
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_100_eeeeee_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_20_000088_40x100.png b/docs/css/images/ui-bg_flat_20_000088_40x100.png
new file mode 100644
index 0000000..56c2330
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_20_000088_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_22_1484e6_40x100.png b/docs/css/images/ui-bg_flat_22_1484e6_40x100.png
new file mode 100644
index 0000000..7f3bc6b
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_22_1484e6_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_25_c5ddfc_40x100.png b/docs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
new file mode 100644
index 0000000..724aae8
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_flat_26_2293f7_40x100.png b/docs/css/images/ui-bg_flat_26_2293f7_40x100.png
new file mode 100644
index 0000000..5ef1530
--- /dev/null
+++ b/docs/css/images/ui-bg_flat_26_2293f7_40x100.png
Binary files differ
diff --git a/docs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/docs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100644
index 0000000..9d2c4ad
--- /dev/null
+++ b/docs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/docs/css/images/ui-icons_0a82eb_256x240.png b/docs/css/images/ui-icons_0a82eb_256x240.png
new file mode 100644
index 0000000..3001a8f
--- /dev/null
+++ b/docs/css/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/docs/css/images/ui-icons_0b54d5_256x240.png b/docs/css/images/ui-icons_0b54d5_256x240.png
new file mode 100644
index 0000000..926aa07
--- /dev/null
+++ b/docs/css/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/docs/css/images/ui-icons_5fa5e3_256x240.png b/docs/css/images/ui-icons_5fa5e3_256x240.png
new file mode 100644
index 0000000..81bd20c
--- /dev/null
+++ b/docs/css/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/docs/css/images/ui-icons_ffffff_256x240.png b/docs/css/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4f624bb
--- /dev/null
+++ b/docs/css/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/docs/css/jquery-ui-1.10.4.custom.css b/docs/css/jquery-ui-1.10.4.custom.css
new file mode 100644
index 0000000..92a96fb
--- /dev/null
+++ b/docs/css/jquery-ui-1.10.4.custom.css
@@ -0,0 +1,513 @@
+/*! jQuery UI - v1.10.4 - 2014-03-25
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=%23f9f9f9&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23cccccc&fcHeader=%23000088&iconColorHeader=%235fa5e3&bgColorContent=%23eeeeee&bgTextureContent=flat&bgImgOpacityContent=100&borderColorContent=%23aaaaaa&fcContent=%23222222&iconColorContent=%230a82eb&bgColorDefault=%231484e6&bgTextureDefault=flat&bgImgOpacityDefault=22&borderColorDefault=%23ffffff&fcDefault=%23ffffff&iconColorDefault=%23ffffff&bgColorHover=%232293f7&bgTextureHover=flat&bgImgOpacityHover=26&borderColorHover=%232293f7&fcHover=%23ffffff&iconColorHover=%23ffffff&bgColorActive=%23000088&bgTextureActive=flat&bgImgOpacityActive=20&borderColorActive=%23000088&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23c5ddfc&bgTextureHighlight=flat&bgImgOpacityHighlight=25&borderColorHighlight=%23ffffff&fcHighlight=%23333333&iconColorHighlight=%230b54d5&bgColorError=%23000088&bgTextureError=flat&bgImgOpacityError=20&borderColorError=%23000088&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23e6b900&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23000088&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin-top: 2px;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+	padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: segoe ui, Arial, sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: segoe ui, Arial, sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #aaaaaa;
+	background: #eeeeee url(images/ui-bg_flat_100_eeeeee_40x100.png) 50% 50% repeat-x;
+	color: #222222;
+}
+.ui-widget-content a {
+	color: #222222;
+}
+.ui-widget-header {
+	border: 1px solid #cccccc;
+	background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x;
+	color: #000088;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #000088;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #ffffff;
+	background: #1484e6 url(images/ui-bg_flat_22_1484e6_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #2293f7;
+	background: #2293f7 url(images/ui-bg_flat_26_2293f7_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #000088;
+	background: #000088 url(images/ui-bg_flat_20_000088_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #ffffff;
+	background: #c5ddfc url(images/ui-bg_flat_25_c5ddfc_40x100.png) 50% 50% repeat-x;
+	color: #333333;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #333333;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #000088;
+	background: #000088 url(images/ui-bg_flat_20_000088_40x100.png) 50% 50% repeat-x;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(images/ui-icons_0a82eb_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(images/ui-icons_5fa5e3_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(images/ui-icons_0b54d5_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+}
+.ui-widget-shadow {
+	margin: 6px 0 0 6px;
+	padding: 0px;
+	background: #000088 url(images/ui-bg_flat_0_000088_40x100.png) 50% 50% repeat-x;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+	border-radius: 3px;
+}
diff --git a/docs/css/openmeetings.css b/docs/css/openmeetings.css
new file mode 100644
index 0000000..ea209b8
--- /dev/null
+++ b/docs/css/openmeetings.css
@@ -0,0 +1,87 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+body {
+	color: #000000;
+	margin: 0;
+	background: #fafafa;
+	font: 10pt Verdana, Arial, Helvetica, sans-serif;
+	  
+}
+.active {
+	font-style: italic;
+}
+
+.mainbody {
+	margin-left: 40px;
+	margin-right: 40px;
+	-moz-box-shadow: 4px 0px 5px #666666;
+	-webkit-box-shadow: 4px 0px 5px #666666;
+	box-shadow: 4px 0px 5px #666666;
+}
+.superbody {
+	background: #FFFFFF;
+	-moz-box-shadow: -4px 0px 5px #666666;
+	-webkit-box-shadow: -4px 0px 5px #666666;
+	box-shadow: -4px 0px 5px #666666;
+}
+
+/* Box CSS  */
+div {
+	margin: 0;
+}
+
+
+.ro {
+	background: url(2b.png) top right no-repeat;
+}
+
+.lo {
+	background: url(1b.png) top left no-repeat;
+}
+
+.ru {
+	background: url(3b.png) bottom right no-repeat;
+}
+
+.lu {
+	background: url(4b.png) bottom left no-repeat;
+}
+
+ul {
+	margin-top: 0em;
+	padding-left: 1.5em;
+}
+
+.inhalt {
+	margin: 0;
+	padding: 0.5em 2.0em 1.5em 1.0em;
+}
+
+.inhalt p {
+	margin: 0;
+	padding: 0;
+}
+.xmlcode {
+	margin-left: 20px;
+	background-color: #eeeeee;
+	color: #0000ff;
+	margin-top: 10px;
+	margin-bottom: 10px;
+}
+#accordion.ui-accordion .ui-accordion-header a {
+	padding-left: 20px;
+}
diff --git a/docs/demo.html b/docs/demo.html
new file mode 100644
index 0000000..02d5aae
--- /dev/null
+++ b/docs/demo.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Mailing Lists</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Apache OpenMeetings Demo Servers"><strong>Apache OpenMeetings Demo Servers</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				There are currently some technical issues with demo servers.
+			</p>
+                                                <p>
+				This is a list of servers that you can use for testing OpenMeetings.
+			</p>
+                                                <p>
+				<a href="http://demo.dataved.ru/openmeetings" target="_BLANK" rel="nofollow">http://demo.dataved.ru/openmeetings</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/dependencies.html b/docs/dependencies.html
new file mode 100644
index 0000000..93361d3
--- /dev/null
+++ b/docs/dependencies.html
@@ -0,0 +1,365 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+ OpenMeetings Documentation Team">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Project Dependencies</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="The Apache Podling Project"><strong>The Apache Podling Project</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+<p> 
+The common external dependencies of OpenMeetings include the tools used to build 
+and test it:
+</p>
+
+<ul>
+<li>Subversion</li>
+<li>Ant</li>
+<li>JUnit</li>
+</ul>
+
+<p>OpenMeetings will actively download resources from the online repositories while building.</p>
+
+</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/documentation.html b/docs/documentation.html
new file mode 100644
index 0000000..9c25cf4
--- /dev/null
+++ b/docs/documentation.html
@@ -0,0 +1,358 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+ Podling Documentation Team">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Documentation</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Documentation"><strong>OpenMeetings Documentation</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+Wiki is to be linked here, coming soon ...
+
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+
+</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/downloads.html b/docs/downloads.html
new file mode 100644
index 0000000..b8d28e1
--- /dev/null
+++ b/docs/downloads.html
@@ -0,0 +1,445 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Podling Documentation Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Downloads</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Downloads"><strong>Downloads</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				All downloads can be verified using the Apache OpenMeetings code
+				signing <a href="https://www.apache.org/dist/openmeetings/3.0.0/KEYS">KEYS</a>.
+			</div>
+                                                <p>
+				All are available for download as source and binary.
+			</p>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Latest Official Release"><strong>Latest Official Release</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					Apache Openmeetings 3.0.0
+				</p>
+                                                <ul>
+					<li>
+						Binaries:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip">apache-openmeetings-3.0.0.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz">apache-openmeetings-3.0.0.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+					<li>
+						Sources:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip">apache-openmeetings-3.0.0-src.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz">apache-openmeetings-3.0.0-src.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Previous Official Releases"><strong>Previous Official Releases</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					Apache Openmeetings releases available here:
+					<a href="http://archive.apache.org/dist/openmeetings/">http://archive.apache.org/dist/openmeetings/</a>
+				</p>
+                                                <p>
+					Apache Openmeetings Incubating 2.0 is available here:
+					<a href="http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating/">http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating</a>
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Plugins / Non ASF downloads"><strong>Plugins / Non ASF downloads</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					If you are looking for more plugins for 3th party applications (Moodle, Drupal, Joomla, ...) check out <a href="http://code.google.com/a/apache-extras.org/hosting/search?q=openmeetings" target="_BLANK" rel="nofollow">apache-extras.org</a>.
+				</p>
+                                                <p>
+					OpenMeetings releases that are not part of the ASF can be downloaded from the
+					old
+					<a href="http://code.google.com/p/openmeetings/downloads/list" target="_BLANK">GoogleCode website</a>
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/get-involved.html b/docs/get-involved.html
new file mode 100644
index 0000000..d4776c2
--- /dev/null
+++ b/docs/get-involved.html
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Documentation Team
+		">
+            <meta name="email" content="dev@openmeetings.apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Get Involved</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How do I contribute, give feedback, fix bugs and so on?"><strong>How do I contribute, give feedback, fix bugs and so on?</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				The Apache OpenMeetings project really needs and appreciates any
+				contributions,
+				including documentation help, source code and
+				feedback. Suggested
+				changes should come in the form of source code
+				and/or very detailed
+				and constructive feedback.
+			</p>
+                                                <ul>
+				<li>
+					Discussion occurs on the
+					<a href="mail-lists.html">OpenMeetings mailing lists</a>
+				</li>
+				<li>
+					Information on access to the project source code is
+					available
+					<a href="svn.html">here</a>
+					.
+				</li>
+				<li>
+					Bugs and other issues can be posted on the project
+					<a href="https://issues.apache.org/jira/browse/OPENMEETINGS">JIRA</a>
+					(
+					<a href="https://issues.apache.org/jira/secure/Signup!default.jspa">sign up</a>
+					).
+				</li>
+				<li>
+					Additional documentation and discussion can be contributed to the
+					project
+					<a href="https://cwiki.apache.org/OPENMEETINGS">Wiki</a>
+					(
+					<a href="https://cwiki.apache.org/confluence/signup.action">sign up</a>
+					).
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Which taks could I potentially work on?"><strong>Which taks could I potentially work on?</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				No matter if you want to share your experiences, improve
+				documentation, localization, code Java, ActionScript or PHP, there
+				are dozens of areas where you can find task to work on and share
+				with others.
+				<br />
+				<br />
+				We tried to collect a list of ideas in our wiki:
+				<br />
+				<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list" target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="How do I become a committer?"><strong>How do I become a committer?</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you're interested in committing to the project: </p>
+                                                <ul>
+				<li>
+					<p>
+						You'll need to fill out some legal paperwork and go through
+						a
+						process to get an apache foundation committer account: See
+						<a class="external" rel="nofollow" href="http://apache.org/dev/new-committers-guide.html">
+							New Committers Guide
+						</a>
+						,
+						<a class="external" rel="nofollow" href="http://apache.org/dev/contributors.html"> Contributors</a>
+						, and
+						<a class="external" rel="nofollow" href="http://apache.org/dev/committers.html"> Committers</a>
+						for more details.
+					</p>
+
+				</li>
+				<li>
+					<p>
+						After you've received an email from
+						<a href="mailto:root@apache.org">root@apache.org</a>
+						with your committer account information, change your initial
+						password:
+						Login by 'ssh -l &lt;username&gt; people.apache.org';
+						run
+						'passwd';
+						run 'svnpasswd'. See
+						<a class="external" rel="nofollow" href="http://apache.org/dev/version-control.html">Committer Subversion Access
+						</a>
+						.
+					</p>
+				</li>
+				<li>
+					<p>
+						Check out the OpenMeetings sources and test your svn account:
+						<a href="http://svn.apache.org/viewvc/openmeetings/">
+							SubversionRepository
+						</a>
+						.
+					</p>
+
+				</li>
+
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/images/54882.jpg b/docs/images/54882.jpg
new file mode 100644
index 0000000..39cc036
--- /dev/null
+++ b/docs/images/54882.jpg
Binary files differ
diff --git a/docs/images/Arguments.png b/docs/images/Arguments.png
new file mode 100644
index 0000000..7427236
--- /dev/null
+++ b/docs/images/Arguments.png
Binary files differ
diff --git a/docs/images/DebugConfigurations.png b/docs/images/DebugConfigurations.png
new file mode 100644
index 0000000..c572dda
--- /dev/null
+++ b/docs/images/DebugConfigurations.png
Binary files differ
diff --git a/docs/images/Features_Screen_Conference_Room_Thumb.png b/docs/images/Features_Screen_Conference_Room_Thumb.png
new file mode 100644
index 0000000..19dece9
--- /dev/null
+++ b/docs/images/Features_Screen_Conference_Room_Thumb.png
Binary files differ
diff --git a/docs/images/NewConfiguration.png b/docs/images/NewConfiguration.png
new file mode 100644
index 0000000..45f3d62
--- /dev/null
+++ b/docs/images/NewConfiguration.png
Binary files differ
diff --git a/docs/images/SugarCRM_Installation.png b/docs/images/SugarCRM_Installation.png
new file mode 100644
index 0000000..b652b7b
--- /dev/null
+++ b/docs/images/SugarCRM_Installation.png
Binary files differ
diff --git a/docs/images/apache-incubator-logo-no-borders.png b/docs/images/apache-incubator-logo-no-borders.png
new file mode 100644
index 0000000..4bf4a6c
--- /dev/null
+++ b/docs/images/apache-incubator-logo-no-borders.png
Binary files differ
diff --git a/docs/images/apache_feather.gif b/docs/images/apache_feather.gif
new file mode 100644
index 0000000..1a0c3e6
--- /dev/null
+++ b/docs/images/apache_feather.gif
Binary files differ
diff --git a/docs/images/audio_and_video.png b/docs/images/audio_and_video.png
new file mode 100644
index 0000000..f35bb10
--- /dev/null
+++ b/docs/images/audio_and_video.png
Binary files differ
diff --git a/docs/images/backup.png b/docs/images/backup.png
new file mode 100644
index 0000000..f174339
--- /dev/null
+++ b/docs/images/backup.png
Binary files differ
diff --git a/docs/images/calendar.png b/docs/images/calendar.png
new file mode 100644
index 0000000..25f7978
--- /dev/null
+++ b/docs/images/calendar.png
Binary files differ
diff --git a/docs/images/chat.png b/docs/images/chat.png
new file mode 100644
index 0000000..ce9c040
--- /dev/null
+++ b/docs/images/chat.png
Binary files differ
diff --git a/docs/images/checkout_1.png b/docs/images/checkout_1.png
new file mode 100644
index 0000000..950891a
--- /dev/null
+++ b/docs/images/checkout_1.png
Binary files differ
diff --git a/docs/images/checkout_2.png b/docs/images/checkout_2.png
new file mode 100644
index 0000000..f31050b
--- /dev/null
+++ b/docs/images/checkout_2.png
Binary files differ
diff --git a/docs/images/checkout_3.png b/docs/images/checkout_3.png
new file mode 100644
index 0000000..94d21ce
--- /dev/null
+++ b/docs/images/checkout_3.png
Binary files differ
diff --git a/docs/images/checkout_4.png b/docs/images/checkout_4.png
new file mode 100644
index 0000000..7fcf576
--- /dev/null
+++ b/docs/images/checkout_4.png
Binary files differ
diff --git a/docs/images/checkout_5.png b/docs/images/checkout_5.png
new file mode 100644
index 0000000..e102426
--- /dev/null
+++ b/docs/images/checkout_5.png
Binary files differ
diff --git a/docs/images/checkout_6.png b/docs/images/checkout_6.png
new file mode 100644
index 0000000..8dd9189
--- /dev/null
+++ b/docs/images/checkout_6.png
Binary files differ
diff --git a/docs/images/checkout_7.png b/docs/images/checkout_7.png
new file mode 100644
index 0000000..4168d93
--- /dev/null
+++ b/docs/images/checkout_7.png
Binary files differ
diff --git a/docs/images/checkout_8.png b/docs/images/checkout_8.png
new file mode 100644
index 0000000..0494bb5
--- /dev/null
+++ b/docs/images/checkout_8.png
Binary files differ
diff --git a/docs/images/checkout_9.png b/docs/images/checkout_9.png
new file mode 100644
index 0000000..b083d00
--- /dev/null
+++ b/docs/images/checkout_9.png
Binary files differ
diff --git a/docs/images/choose_divice.png b/docs/images/choose_divice.png
new file mode 100644
index 0000000..1e38713
--- /dev/null
+++ b/docs/images/choose_divice.png
Binary files differ
diff --git a/docs/images/cluster1.png b/docs/images/cluster1.png
new file mode 100644
index 0000000..672ffc4
--- /dev/null
+++ b/docs/images/cluster1.png
Binary files differ
diff --git a/docs/images/cluster2.png b/docs/images/cluster2.png
new file mode 100644
index 0000000..6d47e1d
--- /dev/null
+++ b/docs/images/cluster2.png
Binary files differ
diff --git a/docs/images/cut_administration_configuration.png b/docs/images/cut_administration_configuration.png
new file mode 100644
index 0000000..c54ac9c
--- /dev/null
+++ b/docs/images/cut_administration_configuration.png
Binary files differ
diff --git a/docs/images/cut_conference_room.png b/docs/images/cut_conference_room.png
new file mode 100644
index 0000000..1a50a25
--- /dev/null
+++ b/docs/images/cut_conference_room.png
Binary files differ
diff --git a/docs/images/cut_file_explorer.png b/docs/images/cut_file_explorer.png
new file mode 100644
index 0000000..4e5d0c7
--- /dev/null
+++ b/docs/images/cut_file_explorer.png
Binary files differ
diff --git a/docs/images/cut_integrated_calendar.png b/docs/images/cut_integrated_calendar.png
new file mode 100644
index 0000000..3188354
--- /dev/null
+++ b/docs/images/cut_integrated_calendar.png
Binary files differ
diff --git a/docs/images/cut_integration_api.png b/docs/images/cut_integration_api.png
new file mode 100644
index 0000000..7cf6264
--- /dev/null
+++ b/docs/images/cut_integration_api.png
Binary files differ
diff --git a/docs/images/cut_private_messages.png b/docs/images/cut_private_messages.png
new file mode 100644
index 0000000..c080851
--- /dev/null
+++ b/docs/images/cut_private_messages.png
Binary files differ
diff --git a/docs/images/cut_recordings_playback.png b/docs/images/cut_recordings_playback.png
new file mode 100644
index 0000000..906d798
--- /dev/null
+++ b/docs/images/cut_recordings_playback.png
Binary files differ
diff --git a/docs/images/dashboard.png b/docs/images/dashboard.png
new file mode 100644
index 0000000..66152bd
--- /dev/null
+++ b/docs/images/dashboard.png
Binary files differ
diff --git a/docs/images/desktopsharing.png b/docs/images/desktopsharing.png
new file mode 100644
index 0000000..94e8add
--- /dev/null
+++ b/docs/images/desktopsharing.png
Binary files differ
diff --git a/docs/images/drupal_module_configuration.png b/docs/images/drupal_module_configuration.png
new file mode 100644
index 0000000..5ff3d04
--- /dev/null
+++ b/docs/images/drupal_module_configuration.png
Binary files differ
diff --git a/docs/images/drupal_module_installation.png b/docs/images/drupal_module_installation.png
new file mode 100644
index 0000000..3ba21b3
--- /dev/null
+++ b/docs/images/drupal_module_installation.png
Binary files differ
diff --git a/docs/images/drupal_room_configuration.png b/docs/images/drupal_room_configuration.png
new file mode 100644
index 0000000..fb35760
--- /dev/null
+++ b/docs/images/drupal_room_configuration.png
Binary files differ
diff --git a/docs/images/file_smal.png b/docs/images/file_smal.png
new file mode 100644
index 0000000..69dcc46
--- /dev/null
+++ b/docs/images/file_smal.png
Binary files differ
diff --git a/docs/images/installation_instructions.png b/docs/images/installation_instructions.png
new file mode 100644
index 0000000..64ab05a
--- /dev/null
+++ b/docs/images/installation_instructions.png
Binary files differ
diff --git a/docs/images/langeditor_screen_v2.png b/docs/images/langeditor_screen_v2.png
new file mode 100644
index 0000000..fbaf47d
--- /dev/null
+++ b/docs/images/langeditor_screen_v2.png
Binary files differ
diff --git a/docs/images/ldap_screen.png b/docs/images/ldap_screen.png
new file mode 100644
index 0000000..e28bbc3
--- /dev/null
+++ b/docs/images/ldap_screen.png
Binary files differ
diff --git a/docs/images/logo-2.jpg b/docs/images/logo-2.jpg
new file mode 100644
index 0000000..13c2512
--- /dev/null
+++ b/docs/images/logo-2.jpg
Binary files differ
diff --git a/docs/images/micro_small.png b/docs/images/micro_small.png
new file mode 100644
index 0000000..215c831
--- /dev/null
+++ b/docs/images/micro_small.png
Binary files differ
diff --git a/docs/images/monitor_add.png b/docs/images/monitor_add.png
new file mode 100644
index 0000000..a818066
--- /dev/null
+++ b/docs/images/monitor_add.png
Binary files differ
diff --git a/docs/images/moodle_add_activity_plugin.png b/docs/images/moodle_add_activity_plugin.png
new file mode 100644
index 0000000..7a95991
--- /dev/null
+++ b/docs/images/moodle_add_activity_plugin.png
Binary files differ
diff --git a/docs/images/moodle_configure_plugin.png b/docs/images/moodle_configure_plugin.png
new file mode 100644
index 0000000..70b5cbf
--- /dev/null
+++ b/docs/images/moodle_configure_plugin.png
Binary files differ
diff --git a/docs/images/moodle_install_plugin.png b/docs/images/moodle_install_plugin.png
new file mode 100644
index 0000000..7381712
--- /dev/null
+++ b/docs/images/moodle_install_plugin.png
Binary files differ
diff --git a/docs/images/mouse_add.png b/docs/images/mouse_add.png
new file mode 100644
index 0000000..65bcab5
--- /dev/null
+++ b/docs/images/mouse_add.png
Binary files differ
diff --git a/docs/images/pencil_add.png b/docs/images/pencil_add.png
new file mode 100644
index 0000000..902bbe6
--- /dev/null
+++ b/docs/images/pencil_add.png
Binary files differ
diff --git a/docs/images/poll.png b/docs/images/poll.png
new file mode 100644
index 0000000..5b51c9b
--- /dev/null
+++ b/docs/images/poll.png
Binary files differ
diff --git a/docs/images/pollresult.png b/docs/images/pollresult.png
new file mode 100644
index 0000000..88c38df
--- /dev/null
+++ b/docs/images/pollresult.png
Binary files differ
diff --git a/docs/images/privat_messages.png b/docs/images/privat_messages.png
new file mode 100644
index 0000000..cc6e245
--- /dev/null
+++ b/docs/images/privat_messages.png
Binary files differ
diff --git a/docs/images/recordings_timeleine.png b/docs/images/recordings_timeleine.png
new file mode 100644
index 0000000..407719e
--- /dev/null
+++ b/docs/images/recordings_timeleine.png
Binary files differ
diff --git a/docs/images/right_management.png b/docs/images/right_management.png
new file mode 100644
index 0000000..da287a6
--- /dev/null
+++ b/docs/images/right_management.png
Binary files differ
diff --git a/docs/images/system_backup.png b/docs/images/system_backup.png
new file mode 100644
index 0000000..ffc2964
--- /dev/null
+++ b/docs/images/system_backup.png
Binary files differ
diff --git a/docs/images/user_add.png b/docs/images/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/docs/images/user_add.png
Binary files differ
diff --git a/docs/images/vote.png b/docs/images/vote.png
new file mode 100644
index 0000000..c16ff86
--- /dev/null
+++ b/docs/images/vote.png
Binary files differ
diff --git a/docs/images/whiteboard.png b/docs/images/whiteboard.png
new file mode 100644
index 0000000..8e5392f
--- /dev/null
+++ b/docs/images/whiteboard.png
Binary files differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..539446e
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,886 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Apache OpenMeetings - Features and overview"><strong>Apache OpenMeetings - Features and overview</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div id="coin-slider">
+				<a href="#">
+					<img src="images/cut_conference_room.png" alt="Conference Room" />
+					<span>
+						<b>Audio/Video Conferencing</b>
+						<br />
+						OpenMeetings enables you to make Audio/Video conferencing.
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integrated_calendar.png" alt="Calendar" />
+					<span>
+						<b>Calendar</b>
+						<br />
+						You can create meetings with the integrated calendar, conference rooms and invitations are automatically send to everybody
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_file_explorer.png" alt="File Explorer" />
+					<span>
+						<b>File Explorer</b>
+						<br />
+						Each room has its own File-Explorer. Each user has his own private drive and additionally there is a public drive to share files with other participants
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integration_api.png" alt="Integration API" />
+					<span>
+						<b>Integration API</b>
+						<br />
+						There is a SOAP/REST API to integrate into your website or intranet, as well
+						as LDAP/ADS connectors and VoIP/Asterisk integration modules
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_private_messages.png" alt="Private messages" />
+					<span>
+						<b>Private messages and contacts</b>
+						<br />
+						From the private message center you can send invitations by email
+						and attach meeting invitations to every email
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_administration_configuration.png" alt="Administration" />
+					<span>
+						<b>Administration and Configuration</b>
+						<br />
+						You can configure users, rooms, usergroups, config settings or
+						edit labels with a Web-Frontend integrated in the application
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_recordings_playback.png" alt="Share and Record" />
+					<span>
+						<b>Screen sharing and Recording</b>
+						<br />
+						You can do screen sharing as well as recording of whole sessions
+						including audio/video. Recordings can be downloaded as AVI/FLV or
+						watched online in the integrated player.
+					</span>
+				</a>
+
+			</div>
+                                                <p> Openmeetings provides video conferencing, instant messaging,
+				white board, collaborative document editing and other groupware
+				tools using API functions of the Red5 Streaming Server for Remoting
+				and Streaming.
+			</p>
+                                                <p>
+				OpenMeetings is a project of the Apache, the old project
+				website at
+				<a href="http://code.google.com/p/openmeetings/" target="_BLANK">GoogleCode
+				</a>
+				will receive no updates anymore. The website at Apache is the only
+				place that receives updates.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="News"><strong>News</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+			    <strong>
+                    Version 2.2.0 released! See <a href="downloads.html">Downloads page</a>. 
+                    (2013-12-12)
+                </strong>
+                <br />
+			    <strong>
+                    Version 2.1.1 released! See <a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_1_11" target="_BLANK">Project Blog</a> or <a href="downloads.html">Downloads page</a>. 
+                    (2013-07-06)
+                </strong>
+                <br />
+			    <strong>
+					OpenMeetings 2.1.0 is released! Please check <a href="downloads.html">Downloads page</a>. 
+					(2013-04-01)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings new URL, update your filters!
+					<a href="http://openmeetings.apache.org">openmeetings.apache.org</a> is the new home. 
+					(2013-01-28)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings on the road to graduate from the Incubator
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_on_the_road_to" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-12-07)
+				</strong>
+				<br />
+				<strong>
+					Some slides from our Fast Feather Track at the ApacheCon Europe 2012 
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_apachecon_presentation_slide" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-11-18)
+				</strong>
+				<br />
+				<strong>
+					Update: Builds are available at
+					<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" target="_BLANK" rel="nofollow">builds.apache.org</a>
+					(2012-08-03)
+				</strong>
+				<br />
+				<strong>
+					<a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_0_incubating" target="_BLANK" rel="nofollow">Version 2.0 released</a>
+					(2012-07-26)
+				</strong>
+				<br />
+				<strong>New committer: Timur Tleukenov (2012-03-06)</strong>
+				<br />
+				<strong>
+					<a href="http://demo.openmeetings.de" target="_BLANK" rel="nofollow">Demo
+						server</a>
+					updated to r1236172 (2012-01-26)
+				</strong>
+				<br />
+				<strong>New committer: German Grekhov (2011-12-26)</strong>
+				<br />
+				<strong>OpenMeetings has been accepted into the Apache Incubator
+					(2011-11-12).
+				</strong>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Community"><strong>Community</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				<strong>Who we are</strong>
+				<blockquote>
+					<a href="team-list.html">List of committers</a>
+					.
+				</blockquote>
+			</div>
+                                                <div>
+				<strong>Users!</strong>
+				<blockquote>
+					We'd love to have you involved. Check out the
+					<a href="get-involved.html">Get involved</a>
+					.
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Feature details"><strong>Feature details</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    	<h3>Audio and Video Conferencing</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/Features_Screen_Conference_Room_Thumb.png">
+								<img src="images/Features_Screen_Conference_Room_Thumb.png" alt="" width="250"
+									 height="175"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					There are four options to use OpenMeetings audio/video functions,
+					which you can select during a conference session.
+					<ul>
+						<li>audio + video</li>
+						<li>audio only</li>
+						<li>video only</li>
+						<li>picture only</li>
+					</ul>
+					Additional you can change video-/audio-quality, choose multiple
+					camera resolutions (4:3, 16:9 or 3:2)
+					and choose your input devices.
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Meeting recording and Screen sharing</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/desktopsharing.png">
+								<img src="images/desktopsharing.png" alt="" width="140"
+									 height="150"  />
+							</a>
+																								<p>
+							<a class="group1 fancybox-buttons" href="images/recordings_timeleine.png">
+								<img src="images/recordings_timeleine.png" alt="" width="200"
+									 height="115"  />
+							</a>
+																										</td>
+				<td>
+																																								<div>
+					<ul>
+						<li>Recorded sessions contain everything including sound recorded
+							from all audio streams in exactly the way you've seen it in the
+							conference.
+						</li>
+					</ul>
+					<ul>
+						<li>Recorded sessions can be downloaded as AVI/FLV files.</li>
+					</ul>
+					<ul>
+						<li>Possibility to select a screen area for sharing.</li>
+					</ul>
+					<ul>
+						<li>Different quality steps for Screensharing.</li>
+					</ul>
+					<ul>
+						<li>Watch and organize recordings in an integrated Drag and Drop
+							File-Explorer
+						</li>
+					</ul>
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>File Explorer</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/file_smal.png">
+								<img src="images/file_smal.png" alt="" width="135"
+									 height="200"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					Advanced File-Explorer in every conference room, Drag and Drop
+					interface for managing uploaded files, including the possibility to
+					create a document tree with folders.
+					<br />
+					<br />
+					Private and Public Drive in
+					File-Explorer. The File-Explorer has two
+					different views, one is the
+					<b>Private Drive</b>
+					and the other the
+					<b>Public Drive</b>
+					. The Private Drive
+					always contains the same files.
+					Those files are
+					visible only to the
+					user currently loggedin. The
+					Public Drive is not
+					bound to the user,
+					but to the conference room
+					instead. All users in
+					the conference room
+					have access to the Public
+					Drive.
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Moderating System</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/right_management.png">
+								<img src="images/right_management.png" alt="" width="135"
+									 height="216"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					During a conference, the moderator can adjust the user permission
+					to every user individually .
+					<ul>
+						<li>
+							<img class="alignnone" title="Allow modaration" src="images/user_add.png" alt="" />
+							Allow/Deny moderation
+						</li>
+						<li>
+							<img class="alignnone" title="Whiteboard Access" src="images/pencil_add.png" alt="" />
+							Allow/Deny to draw on white board
+						</li>
+						<li>
+							<img class="alignnone" title="Screenshare" src="images/monitor_add.png" alt="" />
+							Allow/Deny screen-sharing/record screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/mouse_add.png" alt="" />
+							Allow/Deny Remote Control Screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/micro_small.png" alt="" />
+							Give exclusive audio to others or self
+						</li>
+						<li>
+							<img class="alignnone" title="Video Audio" src="images/audio_and_video.png" alt="" />
+							(Re-) Start Audio, Video or Device settings
+						</li>
+					</ul>
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Multi-Whiteboard and Chat</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/whiteboard.png">
+								<img src="images/whiteboard.png" alt="" width="240"
+									 height="165"  />
+							</a>
+																								<p>
+							<a class="group1 fancybox-buttons" href="images/chat.png">
+								<img src="images/chat.png" alt="" width="240"
+									 height="68"  />
+							</a>
+																										</td>
+				<td>
+																																								<div>
+					Multi-Whiteboard, you can add new whiteboard instances, each
+					white
+					board can have the full range of tools and documents inside.
+					<br />
+					<br />
+					Save white boards. You can save each whiteboard instance as a file.
+					The file is located in the File-Explorer and can be drag n' drop'ed
+					to the white board again and organized like any other document,
+					image or folder.
+					<br />
+					<br />
+					White board with drawing, writing, Drag n' Drop, Resizing, Images
+					(Drag n'
+					Drop from File-Explorer), Symbol(s)/Cliparts .
+					<br />
+					<br />
+					Full-fit does rescale the document on the screen to be 100% visible
+					on all
+					screens no matter what kind of screen resolution different
+					users
+					have.
+					<br />
+					<br />
+					You can import from a wide range of document formats (PDF, DOC,
+					ODT, PPT, et cetera...)
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>User and room management</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/dashboard.png">
+								<img src="images/dashboard.png" alt="" width="250"
+									 height="130"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					You can manage users and multiple organizations in a single
+					OpenMeetings instance. You can also create users that only have
+					access via the SOAP-API.
+					<br />
+					<br />
+					MyRooms section. Each user has by default 2 personal rooms that
+					are
+					always accessible exclusively for that user. There are buttons
+					to
+					enter those rooms from the Dashboard.
+					<br />
+					<br />
+					You can assign conference room to all users, or you can assign them
+					only to specific user-groups.
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Private message center</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/privat_messages.png">
+								<img src="images/privat_messages.png" alt="" width="230"
+									 height="125"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					Send users messages and organize them in folders. You can book
+					conference rooms by sending private messages. The booked event
+					automatically is in your and the participants calendar, changes to
+					that event will be populated to all users booked to the event.
+					<br />
+					<br />
+					User contacts, you can search users and add them to your contacts.
+					You
+					can even give them the right to see your calendar.
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Plan meetings with integrated calendar</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/calendar.png">
+								<img src="images/calendar.png" alt="" width="200"
+									 height="115"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					<ul>
+						<li>Plan your conferencing and invite attendees from OpenMeetings
+							or External.
+						</li>
+						<li>The invited attendees will recieve an E-mail with details to
+							the meetings and a link with a secure hash to the conference
+							room.
+						</li>
+						<li>Share your calendar with your contacts.</li>
+					</ul>
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Polls and Votes</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/poll.png">
+								<img src="images/poll.png" alt="" width="250"
+									 height="250"  />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					You can create a poll with yes/no or 1-10 questions, let the
+					user
+					vote and see the voting results.
+					<br />
+					<br />
+					Polls can be stored and results viewed as pie-chart
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                                                	<h3>Backup</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+																		<p>
+							<a class="group1 fancybox-buttons" href="images/backup.png">
+								<img src="images/backup.png" alt="" width="250"
+									 />
+							</a>
+																										</td>
+				<td>
+																													<div>
+					You can backup all user-generated data including files
+					uploaded by the users in a single ZIP file and import that ZIP into
+					a new installation of OpenMeetings again.
+				</div>
+															</td>
+			</tr>
+	    </tbody>
+	</table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/installation.html b/docs/installation.html
new file mode 100644
index 0000000..8804758
--- /dev/null
+++ b/docs/installation.html
@@ -0,0 +1,667 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Home</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Installation"><strong>OpenMeetings Installation</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				To update from past versions or migrate see <a href="Upgrade.html">Upgrade</a>.<br />
+				If you are looking for commercial help have a look at
+				<a href="commercial-support.html" target="_BLANK" rel="nofollow">commercial support</a>.
+			</p>
+                                                <div>
+				<a href="downloads.html" rel="nofollow">
+					<img src="images/installation_instructions.png" alt="Installation in 3 simple steps" />
+				</a>
+				<p>
+					<i>Note: OpenMeetings requires SUN/Oracle JRE 6, not openJDK!</i><br />
+					<i>
+						Since Version 2.0 you can also install OpenMeetings from command line. Just cd to the unpacked 
+						archive and type ./admin.sh or admin.bat, please see
+						<a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a>
+						for more options
+					</i>
+				</p>
+			</div>
+                                                <ol>
+				<li>
+					<b>Recommendation for production environment</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						By default OpenMeetings uses the integrated Apache Derby database.
+						For production environment you should consider using
+						<a href="MySQLConfig.html">MySQL</a>
+						,
+						<a href="PostgresConfig.html">Postgres</a>
+						, or for example
+						<a href="IBMDB2Config.html">IBM DB2</a>
+						, or
+						<a href="OracleConfig.html">Oracle</a>
+						, or
+						<a href="MSSQLConfig.html">MSSQL</a>
+					</div>
+				</li>
+				<li>
+					<b>Enabling Image Upload and import to whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						Install
+						<b>ImageMagick</b>
+						on the server, you can get more information on
+						<a href="http://www.imagemagick.org" rel="nofollow" target="_BLANK">http://www.imagemagick.org
+						</a>
+						regarding installation. The instructions
+						for installation can be
+						found there
+						<a href="http://www.imagemagick.org/script/binary-releases.php" target="_BLANK" rel="nofollow">http://www.imagemagick.org/script/binary-releases.php
+						</a>
+						,
+						however on
+						most Linux systems you can get it via your favorite
+						package
+						managers (apt-get it)
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of PDFs into whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>GhostScript</b>
+								on the server, you can get more
+								information on
+								<a href="http://www.ghostscript.com/download/gsdnld.html" target="_BLANK" rel="nofollow">
+									http://www.ghostscript.com/download/gsdnld.html
+								</a>
+								regarding
+								installation. The instructions for installation can be
+								found
+								there, however on most Linux systems you can get it via
+								your
+								favorite package managers (apt-get it).
+							</li>
+							<li>
+								Install
+								<b>SWFTools</b>
+								on the server, you can get more information
+								on
+								<a href="http://www.swftools.org/" target="_BLANK" rel="nofollow">http://www.swftools.org/
+								</a>
+								regarding installation. Some of the
+								Linux distributions already
+								have it in there package manager (see
+								<a href="http://packages.debian.org/unstable/utils/swftools" target="_BLANK" rel="nofollow">http://packages.debian.org/unstable/utils/swftools
+								</a>
+								), the
+								recommended version of SWFTools is 0.9 as prior version
+								have a
+								bug that does lead to wrong object dimensions at
+								whiteboard
+							</li>
+						</ul>
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of .doc, .docx, .ppt, .pptx, ... all Office
+						Documents into whitebaord
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								<a href="http://code.google.com/p/jodconverter/" target="_BLANK" rel="nofollow">JODConverter</a>
+								installed (needed since v2.x)
+							</li>
+							<li>OpenOffice or Libre Office Installed</li>
+						</ul>
+						Since Version 2.x of OpenMeetings it is no more required to start
+						OpenOffice (or Libreoffice) service, see
+						<a href="OpenOfficeConverter.html">OpenOfficeConverter</a>
+						for details
+					</div>
+				</li>
+				<li>
+					<b>Enabling Recording and import of .avi, .flv, .mov and .mp4 into
+						whiteboard
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>FFMpeg (with -enabled libmp3lame and libx264 options)</b>
+								. You should get FFMPEG in an up to date copy! OpenMeetings is
+								tested with FFMPEG Version 10.3 and latest build from GIT
+								For Windows you can download a Build for example from
+								<a href="http://ffmpeg.zeranoe.com/builds/" target="_BLANK" rel="nofollow">http://ffmpeg.zeranoe.com/builds/ </a>
+								Linux or OSx Users should be able to use one of the various
+								Installation Instructions on the Web. You need to enable
+								libmp3lame and libx264!
+							</li>
+							<li>
+								Install
+								<b>SoX</b>
+								<a href="http://sox.sourceforge.net/" target="_BLANK" rel="nofollow">http://sox.sourceforge.net/
+								</a>
+								. You should install SoX in a up
+								to date copy! SoX 12.xx will NOT
+								work!
+							</li>
+						</ul>
+					</div>
+				</li>
+			</ol>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Ports, NAT Settings, Customize"><strong>Ports, NAT Settings, Customize</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				See
+				<a href="PortSettings.html">PortSettings</a>
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="VMWare"><strong>VMWare</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					See
+					<a href="http://nightly.openmeetings.de/openmeetings/builds/vmware/" rel="nofollow">http://nightly.openmeetings.de/openmeetings/builds/vmware/</a>
+				</li>
+				<li>
+					VMWare 1.6.1
+					<a href="http://openstudio.no-ip.info/2011/01/openmeetings-1-6-rc1-vmware-appliance-using-ubuntu-server-10-04-lts/" rel="nofollow">blog-entry</a>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Hardware Requirements"><strong>Hardware Requirements</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					Minimalistic requirement (without Document Converters, Recorder and
+					Upload feature) 1GHz CPU 1 GB RAM (
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Recommended requirement 2x/4x 2GHz ++ CPU (32 or 64Bit) 4GB RAM. If
+					you have a 64Bit Operating System check if there is a OpenOffice
+					64Bit Version
+					<a href="http://download.openoffice.org/other.html#de" rel="nofollow">available
+						for your OS
+					</a>
+					(
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Headset/Microphone recommendation: Logitech ClearChat PC Wireless,
+					for example from
+					<a href="http://www.amazon.de/Logitech-ClearChat-kabelloser-Kopfh%C3%B6rer-Transmitter/dp/B00166WSN4" rel="nofollow">Amazon</a>
+					or
+					<a href="http://shop.ebay.com/i.html?_nkw=Logitech+ClearChat.+Wireless&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;LH_BIN=1&amp;LH_IncludeSIF=1&amp;_odkw=Logitech+ClearChat+PC&amp;_osacat=0" rel="nofollow">EBay Auctions</a>
+					(
+					<i>cient-side</i>
+					).
+					<a href="RecommendedHardwareList.html">See all recommendations</a>
+					for cameras, headsets and speakerphones.
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Debian, Links, Changelog, VoIP"><strong>Debian, Links, Changelog, VoIP</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					for VoIP and SIP Integration see also
+					<a href="voip-sip-integration.html">VoIPAndSIP</a>
+				</li>
+				<li>
+					<a href="http://meetingslive.sourceforge.net/" rel="nofollow">http://meetingslive.sourceforge.net/
+					</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Installation of OM 2.0 for Ubuntu 12.04 x64, Ubuntu 12.10 x64, Debian, Windows XP, 7, 2003, 2008</a>
+				</li>
+				<li>
+					<a href="http://liberamemoria.blogspot.com/2009/02/instalando-openmeetings-07-rc-2-en.html" rel="nofollow">Espanol Version for Debian Installation</a>
+				</li>
+				<li>
+					<a href="http://aitinet.com/blog/wp-content/uploads/2009/08/TUTORIAL-PARA-INSTALACAO-DO-RED5-E-OPENMEETINGS-NO-LINUX-DEBIAN-LENNY-51.pdf" rel="nofollow">Portuguese Version for Debian Installation of 0.9 RC1</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" rel="nofollow">Automatic script installation for Ubuntu/Debian (beta)</a>
+				</li>
+				<li>
+					French version of Installation Instructions:
+					<a href="http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation" rel="nofollow">http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation
+					</a>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Tips and Tricks"><strong>Tips and Tricks</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li>
+					Use the Debug-Application: Enter in your browser
+					<a href="http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf" rel="nofollow">http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf
+					</a>
+					for example
+					<a href="http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf" rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf
+					</a>
+				</li>
+				<li>If you have Problems with conversion-jobs check your Red5-Log
+					output. There will be error Messages which help you. You must
+					install OpenOffice, ImageMagick, GhostScript and SWFTools to run
+					all conversion-Jobs correctly.
+				</li>
+				<li>if you have problems in converting Files check the Batch-Scripts
+					in $OPENMEETINGS_HOME/jod
+				</li>
+				<li>
+					If you want to use red5 as a service (without red5.bat), you need
+					to move red5\wrapper\wrapper.exe to red5\wrapper.exe. Then change
+					some path in conf\wrapper.conf (like ..\lib\foo.jar to
+					lib\foo.jar). And finally change the register key in
+					HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Red5\ImagePath
+					to point to the new wrapper.
+				</li>
+				<li>
+					you can query a Mysql Database to get the schema_collection by
+					using this query:
+					<div class="xmlcode">
+						SELECT Table_name, TABLE_COLLATION FROM
+						information_schema.tables WHERE table_schema = 'openmeetings'
+						ORDER BY table_name DESC
+					</div>
+				</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/js/coin-slider.min.js b/docs/js/coin-slider.min.js
new file mode 100644
index 0000000..b96708f
--- /dev/null
+++ b/docs/js/coin-slider.min.js
@@ -0,0 +1,51 @@
+/**
+ * Coin Slider - Unique jQuery Image Slider
+ * @version: 1.0 - (2010/04/04)
+ * @requires jQuery v1.2.2 or later 
+ * @author Ivan Lazarevic
+ * Examples and documentation at: http://workshop.rs/projects/coin-slider/
+ 
+ * Licensed under MIT licence:
+ *   http://www.opensource.org/licenses/mit-license.php
+**/
+
+(function($){var params=new Array;var order=new Array;var images=new Array;var links=new Array;var linksTarget=new Array;var titles=new Array;var interval=new Array;var imagePos=new Array;var appInterval=new Array;var squarePos=new Array;var reverse=new Array;$.fn.coinslider=$.fn.CoinSlider=function(options){init=function(el){order[el.id]=new Array();images[el.id]=new Array();links[el.id]=new Array();linksTarget[el.id]=new Array();titles[el.id]=new Array();imagePos[el.id]=0;squarePos[el.id]=0;reverse[el.id]=1;params[el.id]=$.extend({},$.fn.coinslider.defaults,options);$.each($('#'+el.id+' img'),function(i,item){images[el.id][i]=$(item).attr('src');links[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('href'):'';linksTarget[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('target'):'';titles[el.id][i]=$(item).next().is('span')?$(item).next().html():'';$(item).hide();$(item).next().hide();});$(el).css({'background-image':'url('+images[el.id][0]+')','width':params[el.id].width,'height':params[el.id].height,'position':'relative','background-position':'top left'}).wrap("<div class='coin-slider' id='coin-slider-"+el.id+"' />");$('#'+el.id).append("<div class='cs-title' id='cs-title-"+el.id+"' style='position: absolute; bottom:0; left: 0; z-index: 1000;'></div>");$.setFields(el);if(params[el.id].navigation)
+$.setNavigation(el);$.transition(el,0);$.transitionCall(el);}
+$.setFields=function(el){tWidth=sWidth=parseInt(params[el.id].width/params[el.id].spw);tHeight=sHeight=parseInt(params[el.id].height/params[el.id].sph);counter=sLeft=sTop=0;tgapx=gapx=params[el.id].width-params[el.id].spw*sWidth;tgapy=gapy=params[el.id].height-params[el.id].sph*sHeight;for(i=1;i<=params[el.id].sph;i++){gapx=tgapx;if(gapy>0){gapy--;sHeight=tHeight+1;}else{sHeight=tHeight;}
+for(j=1;j<=params[el.id].spw;j++){if(gapx>0){gapx--;sWidth=tWidth+1;}else{sWidth=tWidth;}
+order[el.id][counter]=i+''+j;counter++;if(params[el.id].links)
+$('#'+el.id).append("<a href='"+links[el.id][0]+"' class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></a>");else
+$('#'+el.id).append("<div class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></div>");$("#cs-"+el.id+i+j).css({'background-position':-sLeft+'px '+(-sTop+'px'),'left':sLeft,'top':sTop});sLeft+=sWidth;}
+sTop+=sHeight;sLeft=0;}
+$('.cs-'+el.id).mouseover(function(){$('#cs-navigation-'+el.id).show();});$('.cs-'+el.id).mouseout(function(){$('#cs-navigation-'+el.id).hide();});$('#cs-title-'+el.id).mouseover(function(){$('#cs-navigation-'+el.id).show();});$('#cs-title-'+el.id).mouseout(function(){$('#cs-navigation-'+el.id).hide();});if(params[el.id].hoverPause){$('.cs-'+el.id).mouseover(function(){params[el.id].pause=true;});$('.cs-'+el.id).mouseout(function(){params[el.id].pause=false;});$('#cs-title-'+el.id).mouseover(function(){params[el.id].pause=true;});$('#cs-title-'+el.id).mouseout(function(){params[el.id].pause=false;});}};$.transitionCall=function(el){clearInterval(interval[el.id]);delay=params[el.id].delay+params[el.id].spw*params[el.id].sph*params[el.id].sDelay;interval[el.id]=setInterval(function(){$.transition(el)},delay);}
+$.transition=function(el,direction){if(params[el.id].pause==true)return;$.effect(el);squarePos[el.id]=0;appInterval[el.id]=setInterval(function(){$.appereance(el,order[el.id][squarePos[el.id]])},params[el.id].sDelay);$(el).css({'background-image':'url('+images[el.id][imagePos[el.id]]+')'});if(typeof(direction)=="undefined")
+imagePos[el.id]++;else
+if(direction=='prev')
+imagePos[el.id]--;else
+imagePos[el.id]=direction;if(imagePos[el.id]==images[el.id].length){imagePos[el.id]=0;}
+if(imagePos[el.id]==-1){imagePos[el.id]=images[el.id].length-1;}
+$('.cs-button-'+el.id).removeClass('cs-active');$('#cs-button-'+el.id+"-"+(imagePos[el.id]+1)).addClass('cs-active');if(titles[el.id][imagePos[el.id]]){$('#cs-title-'+el.id).css({'opacity':0}).animate({'opacity':params[el.id].opacity},params[el.id].titleSpeed);$('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]);}else{$('#cs-title-'+el.id).css('opacity',0);}};$.appereance=function(el,sid){$('.cs-'+el.id).attr('href',links[el.id][imagePos[el.id]]).attr('target',linksTarget[el.id][imagePos[el.id]]);if(squarePos[el.id]==params[el.id].spw*params[el.id].sph){clearInterval(appInterval[el.id]);return;}
+$('#cs-'+el.id+sid).css({opacity:0,'background-image':'url('+images[el.id][imagePos[el.id]]+')'});$('#cs-'+el.id+sid).animate({opacity:1},300);squarePos[el.id]++;};$.setNavigation=function(el){$(el).append("<div id='cs-navigation-"+el.id+"'></div>");$('#cs-navigation-'+el.id).hide();$('#cs-navigation-'+el.id).append("<a href='#' id='cs-prev-"+el.id+"' class='cs-prev'>prev</a>");$('#cs-navigation-'+el.id).append("<a href='#' id='cs-next-"+el.id+"' class='cs-next'>next</a>");$('#cs-prev-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'left':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(function(e){e.preventDefault();$.transition(el,'prev');$.transitionCall(el);}).mouseover(function(){$('#cs-navigation-'+el.id).show()});$('#cs-next-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'right':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(function(e){e.preventDefault();$.transition(el);$.transitionCall(el);}).mouseover(function(){$('#cs-navigation-'+el.id).show()});$("<div id='cs-buttons-"+el.id+"' class='cs-buttons'></div>").appendTo($('#coin-slider-'+el.id));for(k=1;k<images[el.id].length+1;k++){$('#cs-buttons-'+el.id).append("<a href='#' class='cs-button-"+el.id+"' id='cs-button-"+el.id+"-"+k+"'>"+k+"</a>");}
+$.each($('.cs-button-'+el.id),function(i,item){$(item).click(function(e){$('.cs-button-'+el.id).removeClass('cs-active');$(this).addClass('cs-active');e.preventDefault();$.transition(el,i);$.transitionCall(el);})});$('#cs-navigation-'+el.id+' a').mouseout(function(){$('#cs-navigation-'+el.id).hide();params[el.id].pause=false;});$("#cs-buttons-"+el.id).css({'left':'50%','margin-left':-images[el.id].length*15/2-5,'position':'relative'});}
+$.effect=function(el){effA=['random','swirl','rain','straight'];if(params[el.id].effect=='')
+eff=effA[Math.floor(Math.random()*(effA.length))];else
+eff=params[el.id].effect;order[el.id]=new Array();if(eff=='random'){counter=0;for(i=1;i<=params[el.id].sph;i++){for(j=1;j<=params[el.id].spw;j++){order[el.id][counter]=i+''+j;counter++;}}
+$.random(order[el.id]);}
+if(eff=='rain'){$.rain(el);}
+if(eff=='swirl')
+$.swirl(el);if(eff=='straight')
+$.straight(el);reverse[el.id]*=-1;if(reverse[el.id]>0){order[el.id].reverse();}}
+$.random=function(arr){var i=arr.length;if(i==0)return false;while(--i){var j=Math.floor(Math.random()*(i+1));var tempi=arr[i];var tempj=arr[j];arr[i]=tempj;arr[j]=tempi;}}
+$.swirl=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var x=1;var y=1;var going=0;var num=0;var c=0;var dowhile=true;while(dowhile){num=(going==0||going==2)?m:n;for(i=1;i<=num;i++){order[el.id][c]=x+''+y;c++;if(i!=num){switch(going){case 0:y++;break;case 1:x++;break;case 2:y--;break;case 3:x--;break;}}}
+going=(going+1)%4;switch(going){case 0:m--;y++;break;case 1:n--;x++;break;case 2:m--;y--;break;case 3:n--;x--;break;}
+check=$.max(n,m)-$.min(n,m);if(m<=check&&n<=check)
+dowhile=false;}}
+$.rain=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var c=0;var to=to2=from=1;var dowhile=true;while(dowhile){for(i=from;i<=to;i++){order[el.id][c]=i+''+parseInt(to2-i+1);c++;}
+to2++;if(to<n&&to2<m&&n<m){to++;}
+if(to<n&&n>=m){to++;}
+if(to2>m){from++;}
+if(from>to)dowhile=false;}}
+$.straight=function(el){counter=0;for(i=1;i<=params[el.id].sph;i++){for(j=1;j<=params[el.id].spw;j++){order[el.id][counter]=i+''+j;counter++;}}}
+$.min=function(n,m){if(n>m)return m;else return n;}
+$.max=function(n,m){if(n<m)return m;else return n;}
+this.each(function(){init(this);});};$.fn.coinslider.defaults={width:565,height:290,spw:7,sph:5,delay:3000,sDelay:30,opacity:0.7,titleSpeed:500,effect:'',navigation:true,links:true,hoverPause:true};})(jQuery);
\ No newline at end of file
diff --git a/docs/js/jquery-1.11.0.min.js b/docs/js/jquery-1.11.0.min.js
new file mode 100644
index 0000000..73f33fb
--- /dev/null
+++ b/docs/js/jquery-1.11.0.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
+}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
+},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
diff --git a/docs/js/jquery-ui-1.10.4.custom.min.js b/docs/js/jquery-ui-1.10.4.custom.min.js
new file mode 100644
index 0000000..fe3e05c
--- /dev/null
+++ b/docs/js/jquery-ui-1.10.4.custom.min.js
@@ -0,0 +1,6 @@
+/*! jQuery UI - v1.10.4 - 2014-03-25
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.accordion.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e,t){function i(t,i){var s,a,o,r=t.nodeName.toLowerCase();return"area"===r?(s=t.parentNode,a=s.name,t.href&&a&&"map"===s.nodeName.toLowerCase()?(o=e("img[usemap=#"+a+"]")[0],!!o&&n(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||i:i)&&n(t)}function n(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var s=0,a=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,n){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),n&&n.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var n,s,a=e(this[0]);a.length&&a[0]!==document;){if(n=a.css("position"),("absolute"===n||"relative"===n||"fixed"===n)&&(s=parseInt(a.css("zIndex"),10),!isNaN(s)&&0!==s))return s;a=a.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++s)})},removeUniqueId:function(){return this.each(function(){a.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,n){return!!e.data(t,n[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),s=isNaN(n);return(s||n>=0)&&i(t,!s)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,n){function s(t,i,n,s){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,n&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===n?["Left","Right"]:["Top","Bottom"],o=n.toLowerCase(),r={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+n]=function(i){return i===t?r["inner"+n].call(this):this.each(function(){e(this).css(o,s(this,i)+"px")})},e.fn["outer"+n]=function(t,i){return"number"!=typeof t?r["outer"+n].call(this,t):this.each(function(){e(this).css(o,s(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,n){var s,a=e.ui[t].prototype;for(s in n)a.plugins[s]=a.plugins[s]||[],a.plugins[s].push([i,n[s]])},call:function(e,t,i){var n,s=e.plugins[t];if(s&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(n=0;s.length>n;n++)e.options[s[n][0]]&&s[n][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var n=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return t[n]>0?!0:(t[n]=1,s=t[n]>0,t[n]=0,s)}})})(jQuery);(function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(o){}n(e)},t.widget=function(i,s,n){var o,a,r,h,l={},c=i.split(".")[0];i=i.split(".")[1],o=c+"-"+i,n||(n=s,s=t.Widget),t.expr[":"][o.toLowerCase()]=function(e){return!!t.data(e,o)},t[c]=t[c]||{},a=t[c][i],r=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new r(t,i)},t.extend(r,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),h=new s,h.options=t.widget.extend({},h.options),t.each(n,function(i,n){return t.isFunction(n)?(l[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,o=this._superApply;return this._super=t,this._superApply=e,i=n.apply(this,arguments),this._super=s,this._superApply=o,i}}(),e):(l[i]=n,e)}),r.prototype=t.widget.extend(h,{widgetEventPrefix:a?h.widgetEventPrefix||i:i},l,{constructor:r,namespace:c,widgetName:i,widgetFullName:o}),a?(t.each(a._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete a._childConstructors):s._childConstructors.push(r),t.widget.bridge(i,r)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,h=a.length;h>r;r++)for(n in a[r])o=a[r][n],a[r].hasOwnProperty(n)&&o!==e&&(i[n]=t.isPlainObject(o)?t.isPlainObject(i[n])?t.widget.extend({},i[n],o):t.widget.extend({},o):o);return i},t.widget.bridge=function(i,n){var o=n.prototype.widgetFullName||i;t.fn[i]=function(a){var r="string"==typeof a,h=s.call(arguments,1),l=this;return a=!r&&h.length?t.widget.extend.apply(null,[a].concat(h)):a,r?this.each(function(){var s,n=t.data(this,o);return n?t.isFunction(n[a])&&"_"!==a.charAt(0)?(s=n[a].apply(n,h),s!==n&&s!==e?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):e):t.error("no such method '"+a+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+a+"'")}):this.each(function(){var e=t.data(this,o);e?e.option(a||{})._init():t.data(this,o,new n(a,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;n.length-1>a;a++)o[n[a]]=o[n[a]]||{},o=o[n[a]];if(i=n.pop(),1===arguments.length)return o[i]===e?null:o[i];o[i]=s}else{if(1===arguments.length)return this.options[i]===e?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var o,a=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=o=t(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,o=this.widget()),t.each(n,function(n,r){function h(){return i||a.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?a[r]:r).apply(a,arguments):e}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||t.guid++);var l=n.match(/^(\w+)\s*(.*)$/),c=l[1]+a.eventNamespace,u=l[2];u?o.delegate(u,c,h):s.bind(c,h)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}})})(jQuery);(function(e){var t=0,i={},a={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",a.height=a.paddingTop=a.paddingBottom=a.borderTopWidth=a.borderBottomWidth="show",e.widget("ui.accordion",{version:"1.10.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e(),content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),undefined):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t),undefined)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,a=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:n=this.headers[(s+1)%a];break;case i.LEFT:case i.UP:n=this.headers[(s-1+a)%a];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:n=this.headers[0];break;case i.END:n=this.headers[a-1]}n&&(e(t.target).attr("tabIndex",-1),e(n).attr("tabIndex",0),n.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,a=this.options,s=a.heightStyle,n=this.element.parent(),r=this.accordionId="ui-accordion-"+(this.element.attr("id")||++t);this.active=this._findActive(a.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(t){var i=e(this),a=i.attr("id"),s=i.next(),n=s.attr("id");a||(a=r+"-header-"+t,i.attr("id",a)),n||(n=r+"-panel-"+t,s.attr("id",n)),i.attr("aria-controls",n),s.attr("aria-labelledby",a)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(a.event),"fill"===s?(i=n.height(),this.element.siblings(":visible").each(function(){var t=e(this),a=t.css("position");"absolute"!==a&&"fixed"!==a&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(i=0,this.headers.next().each(function(){i=Math.max(i,e(this).css("height","").height())}).height(i))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,a=this.active,s=e(t.currentTarget),n=s[0]===a[0],r=n&&i.collapsible,o=r?e():s.next(),h=a.next(),d={oldHeader:a,oldPanel:h,newHeader:r?e():s,newPanel:o};t.preventDefault(),n&&!i.collapsible||this._trigger("beforeActivate",t,d)===!1||(i.active=r?!1:this.headers.index(s),this.active=n?e():s,this._toggle(d),a.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&a.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),n||(s.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),s.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,a=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=a,this.options.animate?this._animate(i,a,t):(a.hide(),i.show(),this._toggleComplete(t)),a.attr({"aria-hidden":"true"}),a.prev().attr("aria-selected","false"),i.length&&a.length?a.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,s){var n,r,o,h=this,d=0,c=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=c&&l.down||l,v=function(){h._toggleComplete(s)};return"number"==typeof u&&(o=u),"string"==typeof u&&(r=u),r=r||u.easing||l.easing,o=o||u.duration||l.duration,t.length?e.length?(n=e.show().outerHeight(),t.animate(i,{duration:o,easing:r,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(a,{duration:o,easing:r,complete:v,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?d+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(n-t.outerHeight()-d),d=0)}}),undefined):t.animate(i,o,r,v):e.animate(a,o,r,v)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}})})(jQuery);
\ No newline at end of file
diff --git a/docs/js/jquery.colorbox.js b/docs/js/jquery.colorbox.js
new file mode 100644
index 0000000..255a3aa
--- /dev/null
+++ b/docs/js/jquery.colorbox.js
@@ -0,0 +1,1085 @@
+/*!
+	Colorbox v1.5.5 - 2014-03-13
+	jQuery lightbox and modal window plugin
+	(c) 2014 Jack Moore - http://www.jacklmoore.com/colorbox
+	license: http://www.opensource.org/licenses/mit-license.php
+*/
+(function ($, document, window) {
+	var
+	// Default settings object.
+	// See http://jacklmoore.com/colorbox for details.
+	defaults = {
+		// data sources
+		html: false,
+		photo: false,
+		iframe: false,
+		inline: false,
+
+		// behavior and appearance
+		transition: "elastic",
+		speed: 300,
+		fadeOut: 300,
+		width: false,
+		initialWidth: "600",
+		innerWidth: false,
+		maxWidth: false,
+		height: false,
+		initialHeight: "450",
+		innerHeight: false,
+		maxHeight: false,
+		scalePhotos: true,
+		scrolling: true,
+		opacity: 0.9,
+		preloading: true,
+		className: false,
+		overlayClose: true,
+		escKey: true,
+		arrowKey: true,
+		top: false,
+		bottom: false,
+		left: false,
+		right: false,
+		fixed: false,
+		data: undefined,
+		closeButton: true,
+		fastIframe: true,
+		open: false,
+		reposition: true,
+		loop: true,
+		slideshow: false,
+		slideshowAuto: true,
+		slideshowSpeed: 2500,
+		slideshowStart: "start slideshow",
+		slideshowStop: "stop slideshow",
+		photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
+
+		// alternate image paths for high-res displays
+		retinaImage: false,
+		retinaUrl: false,
+		retinaSuffix: '@2x.$1',
+
+		// internationalization
+		current: "image {current} of {total}",
+		previous: "previous",
+		next: "next",
+		close: "close",
+		xhrError: "This content failed to load.",
+		imgError: "This image failed to load.",
+
+		// accessbility
+		returnFocus: true,
+		trapFocus: true,
+
+		// callbacks
+		onOpen: false,
+		onLoad: false,
+		onComplete: false,
+		onCleanup: false,
+		onClosed: false,
+
+		rel: function() {
+			return this.rel;
+		},
+		href: function() {
+			// Using .attr() so that the href can also be used to provide a selector for inline content
+			return $(this).attr('href');
+		},
+		title: function() {
+			return this.title;
+		}
+	},
+
+
+	// Abstracting the HTML and event identifiers for easy rebranding
+	colorbox = 'colorbox',
+	prefix = 'cbox',
+	boxElement = prefix + 'Element',
+	
+	// Events
+	event_open = prefix + '_open',
+	event_load = prefix + '_load',
+	event_complete = prefix + '_complete',
+	event_cleanup = prefix + '_cleanup',
+	event_closed = prefix + '_closed',
+	event_purge = prefix + '_purge',
+
+	// Cached jQuery Object Variables
+	$overlay,
+	$box,
+	$wrap,
+	$content,
+	$topBorder,
+	$leftBorder,
+	$rightBorder,
+	$bottomBorder,
+	$related,
+	$window,
+	$loaded,
+	$loadingBay,
+	$loadingOverlay,
+	$title,
+	$current,
+	$slideshow,
+	$next,
+	$prev,
+	$close,
+	$groupControls,
+	$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
+	
+	// Variables for cached values or use across multiple functions
+	settings,
+	interfaceHeight,
+	interfaceWidth,
+	loadedHeight,
+	loadedWidth,
+	index,
+	photo,
+	open,
+	active,
+	closing,
+	loadingTimer,
+	publicMethod,
+	div = "div",
+	requests = 0,
+	previousCSS = {},
+	init;
+
+	// ****************
+	// HELPER FUNCTIONS
+	// ****************
+	
+	// Convenience function for creating new jQuery objects
+	function $tag(tag, id, css) {
+		var element = document.createElement(tag);
+
+		if (id) {
+			element.id = prefix + id;
+		}
+
+		if (css) {
+			element.style.cssText = css;
+		}
+
+		return $(element);
+	}
+	
+	// Get the window height using innerHeight when available to avoid an issue with iOS
+	// http://bugs.jquery.com/ticket/6724
+	function winheight() {
+		return window.innerHeight ? window.innerHeight : $(window).height();
+	}
+
+	function Settings(element, options) {
+		if (options !== Object(options)) {
+			options = {};
+		}
+
+		this.cache = {};
+		this.el = element;
+
+		this.value = function(key) {
+			var dataAttr;
+
+			if (this.cache[key] === undefined) {
+				dataAttr = $(this.el).attr('data-cbox-'+key);
+
+				if (dataAttr !== undefined) {
+					this.cache[key] = dataAttr;
+				} else if (options[key] !== undefined) {
+					this.cache[key] = options[key];
+				} else if (defaults[key] !== undefined) {
+					this.cache[key] = defaults[key];
+				}
+			}
+
+			return this.cache[key];
+		};
+
+		this.get = function(key) {
+			var value = this.value(key);
+			return $.isFunction(value) ? value.call(this.el, this) : value;
+		};
+	}
+
+	// Determine the next and previous members in a group.
+	function getIndex(increment) {
+		var
+		max = $related.length,
+		newIndex = (index + increment) % max;
+		
+		return (newIndex < 0) ? max + newIndex : newIndex;
+	}
+
+	// Convert '%' and 'px' values to integers
+	function setSize(size, dimension) {
+		return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
+	}
+	
+	// Checks an href to see if it is a photo.
+	// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
+	function isImage(settings, url) {
+		return settings.get('photo') || settings.get('photoRegex').test(url);
+	}
+
+	function retinaUrl(settings, url) {
+		return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
+	}
+
+	function trapFocus(e) {
+		if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
+			e.stopPropagation();
+			$box.focus();
+		}
+	}
+
+	function setClass(str) {
+		if (setClass.str !== str) {
+			$box.add($overlay).removeClass(setClass.str).addClass(str);
+			setClass.str = str;
+		}
+	}
+
+	function getRelated() {
+		index = 0;
+		
+		if (rel && rel !== 'nofollow') {
+			$related = $('.' + boxElement).filter(function () {
+				var options = $.data(this, colorbox);
+				var settings = new Settings(this, options);
+				return (settings.get('rel') === rel);
+			});
+			index = $related.index(settings.el);
+			
+			// Check direct calls to Colorbox.
+			if (index === -1) {
+				$related = $related.add(settings.el);
+				index = $related.length - 1;
+			}
+		} else {
+			$related = $(settings.el);
+		}
+	}
+
+	function trigger(event) {
+		// for external use
+		$(document).trigger(event);
+		// for internal use
+		$events.triggerHandler(event);
+	}
+
+	var slideshow = (function(){
+		var active,
+			className = prefix + "Slideshow_",
+			click = "click." + prefix,
+			timeOut;
+
+		function clear () {
+			clearTimeout(timeOut);
+		}
+
+		function set() {
+			if (settings.get('loop') || $related[index + 1]) {
+				clear();
+				timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
+			}
+		}
+
+		function start() {
+			$slideshow
+				.html(settings.get('slideshowStop'))
+				.unbind(click)
+				.one(click, stop);
+
+			$events
+				.bind(event_complete, set)
+				.bind(event_load, clear);
+
+			$box.removeClass(className + "off").addClass(className + "on");
+		}
+
+		function stop() {
+			clear();
+			
+			$events
+				.unbind(event_complete, set)
+				.unbind(event_load, clear);
+
+			$slideshow
+				.html(settings.get('slideshowStart'))
+				.unbind(click)
+				.one(click, function () {
+					publicMethod.next();
+					start();
+				});
+
+			$box.removeClass(className + "on").addClass(className + "off");
+		}
+
+		function reset() {
+			active = false;
+			$slideshow.hide();
+			clear();
+			$events
+				.unbind(event_complete, set)
+				.unbind(event_load, clear);
+			$box.removeClass(className + "off " + className + "on");
+		}
+
+		return function(){
+			if (active) {
+				if (!settings.get('slideshow')) {
+					$events.unbind(event_cleanup, reset);
+					reset();
+				}
+			} else {
+				if (settings.get('slideshow') && $related[1]) {
+					active = true;
+					$events.one(event_cleanup, reset);
+					if (settings.get('slideshowAuto')) {
+						start();
+					} else {
+						stop();
+					}
+					$slideshow.show();
+				}
+			}
+		};
+
+	}());
+
+
+	function launch(element) {
+		var options;
+
+		if (!closing) {
+
+			options = $(element).data('colorbox');
+
+			settings = new Settings(element, options);
+
+			rel = settings.get('rel');
+			
+			getRelated();
+
+			if (!open) {
+				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+
+				setClass(settings.get('className'));
+				
+				// Show colorbox so the sizes can be calculated in older versions of jQuery
+				$box.css({visibility:'hidden', display:'block', opacity:''});
+				
+				$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
+				$content.css({width:'', height:''}).append($loaded);
+
+				// Cache values needed for size calculations
+				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
+				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
+				loadedHeight = $loaded.outerHeight(true);
+				loadedWidth = $loaded.outerWidth(true);
+
+				// Opens inital empty Colorbox prior to content being loaded.
+				settings.w = setSize(settings.get('initialWidth'), 'x');
+				settings.h = setSize(settings.get('initialHeight'), 'y');
+				$loaded.css({width:'', height:settings.h});
+				publicMethod.position();
+
+				trigger(event_open);
+				settings.get('onOpen');
+
+				$groupControls.add($title).hide();
+
+				$box.focus();
+				
+				if (settings.get('trapFocus')) {
+					// Confine focus to the modal
+					// Uses event capturing that is not supported in IE8-
+					if (document.addEventListener) {
+
+						document.addEventListener('focus', trapFocus, true);
+						
+						$events.one(event_closed, function () {
+							document.removeEventListener('focus', trapFocus, true);
+						});
+					}
+				}
+
+				// Return focus on closing
+				if (settings.get('returnFocus')) {
+					$events.one(event_closed, function () {
+						$(settings.el).focus();
+					});
+				}
+			}
+
+			$overlay.css({
+				opacity: parseFloat(settings.get('opacity')) || '',
+				cursor: settings.get('overlayClose') ? 'pointer' : '',
+				visibility: 'visible'
+			}).show();
+			
+			if (settings.get('closeButton')) {
+				$close.html(settings.get('close')).appendTo($content);
+			} else {
+				$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
+			}
+
+			load();
+		}
+	}
+
+	// Colorbox's markup needs to be added to the DOM prior to being called
+	// so that the browser will go ahead and load the CSS background images.
+	function appendHTML() {
+		if (!$box && document.body) {
+			init = false;
+			$window = $(window);
+			$box = $tag(div).attr({
+				id: colorbox,
+				'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
+				role: 'dialog',
+				tabindex: '-1'
+			}).hide();
+			$overlay = $tag(div, "Overlay").hide();
+			$loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]);
+			$wrap = $tag(div, "Wrapper");
+			$content = $tag(div, "Content").append(
+				$title = $tag(div, "Title"),
+				$current = $tag(div, "Current"),
+				$prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
+				$next = $('<button type="button"/>').attr({id:prefix+'Next'}),
+				$slideshow = $tag('button', "Slideshow"),
+				$loadingOverlay
+			);
+
+			$close = $('<button type="button"/>').attr({id:prefix+'Close'});
+			
+			$wrap.append( // The 3x3 Grid that makes up Colorbox
+				$tag(div).append(
+					$tag(div, "TopLeft"),
+					$topBorder = $tag(div, "TopCenter"),
+					$tag(div, "TopRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$leftBorder = $tag(div, "MiddleLeft"),
+					$content,
+					$rightBorder = $tag(div, "MiddleRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$tag(div, "BottomLeft"),
+					$bottomBorder = $tag(div, "BottomCenter"),
+					$tag(div, "BottomRight")
+				)
+			).find('div div').css({'float': 'left'});
+			
+			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
+			
+			$groupControls = $next.add($prev).add($current).add($slideshow);
+
+			$(document.body).append($overlay, $box.append($wrap, $loadingBay));
+		}
+	}
+
+	// Add Colorbox's event bindings
+	function addBindings() {
+		function clickHandler(e) {
+			// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
+			// See: http://jacklmoore.com/notes/click-events/
+			if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {
+				e.preventDefault();
+				launch(this);
+			}
+		}
+
+		if ($box) {
+			if (!init) {
+				init = true;
+
+				// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
+				$next.click(function () {
+					publicMethod.next();
+				});
+				$prev.click(function () {
+					publicMethod.prev();
+				});
+				$close.click(function () {
+					publicMethod.close();
+				});
+				$overlay.click(function () {
+					if (settings.get('overlayClose')) {
+						publicMethod.close();
+					}
+				});
+				
+				// Key Bindings
+				$(document).bind('keydown.' + prefix, function (e) {
+					var key = e.keyCode;
+					if (open && settings.get('escKey') && key === 27) {
+						e.preventDefault();
+						publicMethod.close();
+					}
+					if (open && settings.get('arrowKey') && $related[1] && !e.altKey) {
+						if (key === 37) {
+							e.preventDefault();
+							$prev.click();
+						} else if (key === 39) {
+							e.preventDefault();
+							$next.click();
+						}
+					}
+				});
+
+				if ($.isFunction($.fn.on)) {
+					// For jQuery 1.7+
+					$(document).on('click.'+prefix, '.'+boxElement, clickHandler);
+				} else {
+					// For jQuery 1.3.x -> 1.6.x
+					// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
+					// This is not here for jQuery 1.9, it's here for legacy users.
+					$('.'+boxElement).live('click.'+prefix, clickHandler);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	// Don't do anything if Colorbox already exists.
+	if ($.colorbox) {
+		return;
+	}
+
+	// Append the HTML when the DOM loads
+	$(appendHTML);
+
+
+	// ****************
+	// PUBLIC FUNCTIONS
+	// Usage format: $.colorbox.close();
+	// Usage from within an iframe: parent.jQuery.colorbox.close();
+	// ****************
+	
+	publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
+		var settings;
+		var $obj = this;
+
+		options = options || {};
+
+		if ($.isFunction($obj)) { // assume a call to $.colorbox
+			$obj = $('<a/>');
+			options.open = true;
+		} else if (!$obj[0]) { // colorbox being applied to empty collection
+			return $obj;
+		}
+
+
+		if (!$obj[0]) { // colorbox being applied to empty collection
+			return $obj;
+		}
+		
+		appendHTML();
+
+		if (addBindings()) {
+
+			if (callback) {
+				options.onComplete = callback;
+			}
+
+			$obj.each(function () {
+				var old = $.data(this, colorbox) || {};
+				$.data(this, colorbox, $.extend(old, options));
+			}).addClass(boxElement);
+
+			settings = new Settings($obj[0], options);
+			
+			if (settings.get('open')) {
+				launch($obj[0]);
+			}
+		}
+		
+		return $obj;
+	};
+
+	publicMethod.position = function (speed, loadedCallback) {
+		var
+		css,
+		top = 0,
+		left = 0,
+		offset = $box.offset(),
+		scrollTop,
+		scrollLeft;
+		
+		$window.unbind('resize.' + prefix);
+
+		// remove the modal so that it doesn't influence the document width/height
+		$box.css({top: -9e4, left: -9e4});
+
+		scrollTop = $window.scrollTop();
+		scrollLeft = $window.scrollLeft();
+
+		if (settings.get('fixed')) {
+			offset.top -= scrollTop;
+			offset.left -= scrollLeft;
+			$box.css({position: 'fixed'});
+		} else {
+			top = scrollTop;
+			left = scrollLeft;
+			$box.css({position: 'absolute'});
+		}
+
+		// keeps the top and left positions within the browser's viewport.
+		if (settings.get('right') !== false) {
+			left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
+		} else if (settings.get('left') !== false) {
+			left += setSize(settings.get('left'), 'x');
+		} else {
+			left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
+		}
+		
+		if (settings.get('bottom') !== false) {
+			top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
+		} else if (settings.get('top') !== false) {
+			top += setSize(settings.get('top'), 'y');
+		} else {
+			top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+		}
+
+		$box.css({top: offset.top, left: offset.left, visibility:'visible'});
+		
+		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
+		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
+		// it can invoke an obscure IE bug when using iframes.
+		$wrap[0].style.width = $wrap[0].style.height = "9999px";
+		
+		function modalDimensions() {
+			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';
+			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';
+		}
+
+		css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
+
+		// setting the speed to 0 if the content hasn't changed size or position
+		if (speed) {
+			var tempSpeed = 0;
+			$.each(css, function(i){
+				if (css[i] !== previousCSS[i]) {
+					tempSpeed = speed;
+					return;
+				}
+			});
+			speed = tempSpeed;
+		}
+
+		previousCSS = css;
+
+		if (!speed) {
+			$box.css(css);
+		}
+
+		$box.dequeue().animate(css, {
+			duration: speed || 0,
+			complete: function () {
+				modalDimensions();
+				
+				active = false;
+				
+				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
+				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
+				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
+				
+				if (settings.get('reposition')) {
+					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
+						$window.bind('resize.' + prefix, publicMethod.position);
+					}, 1);
+				}
+
+				if (loadedCallback) {
+					loadedCallback();
+				}
+			},
+			step: modalDimensions
+		});
+	};
+
+	publicMethod.resize = function (options) {
+		var scrolltop;
+		
+		if (open) {
+			options = options || {};
+			
+			if (options.width) {
+				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
+			}
+
+			if (options.innerWidth) {
+				settings.w = setSize(options.innerWidth, 'x');
+			}
+
+			$loaded.css({width: settings.w});
+			
+			if (options.height) {
+				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
+			}
+
+			if (options.innerHeight) {
+				settings.h = setSize(options.innerHeight, 'y');
+			}
+
+			if (!options.innerHeight && !options.height) {
+				scrolltop = $loaded.scrollTop();
+				$loaded.css({height: "auto"});
+				settings.h = $loaded.height();
+			}
+
+			$loaded.css({height: settings.h});
+
+			if(scrolltop) {
+				$loaded.scrollTop(scrolltop);
+			}
+			
+			publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
+		}
+	};
+
+	publicMethod.prep = function (object) {
+		if (!open) {
+			return;
+		}
+		
+		var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
+
+		$loaded.remove();
+
+		$loaded = $tag(div, 'LoadedContent').append(object);
+		
+		function getWidth() {
+			settings.w = settings.w || $loaded.width();
+			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
+			return settings.w;
+		}
+		function getHeight() {
+			settings.h = settings.h || $loaded.height();
+			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
+			return settings.h;
+		}
+		
+		$loaded.hide()
+		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
+		.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
+		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
+		.prependTo($content);
+		
+		$loadingBay.hide();
+		
+		// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
+		
+		$(photo).css({'float': 'none'});
+
+		setClass(settings.get('className'));
+
+		callback = function () {
+			var total = $related.length,
+				iframe,
+				complete;
+			
+			if (!open) {
+				return;
+			}
+			
+			function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
+				if ($.support.opacity === false) {
+					$box[0].style.removeAttribute('filter');
+				}
+			}
+			
+			complete = function () {
+				clearTimeout(loadingTimer);
+				$loadingOverlay.hide();
+				trigger(event_complete);
+				settings.get('onComplete');
+			};
+
+			
+			$title.html(settings.get('title')).show();
+			$loaded.show();
+			
+			if (total > 1) { // handle grouping
+				if (typeof settings.get('current') === "string") {
+					$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
+				}
+				
+				$next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
+				$prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
+				
+				slideshow();
+				
+				// Preloads images within a rel group
+				if (settings.get('preloading')) {
+					$.each([getIndex(-1), getIndex(1)], function(){
+						var img,
+							i = $related[this],
+							settings = new Settings(i, $.data(i, colorbox)),
+							src = settings.get('href');
+
+						if (src && isImage(settings, src)) {
+							src = retinaUrl(settings, src);
+							img = document.createElement('img');
+							img.src = src;
+						}
+					});
+				}
+			} else {
+				$groupControls.hide();
+			}
+			
+			if (settings.get('iframe')) {
+				iframe = document.createElement('iframe');
+				
+				if ('frameBorder' in iframe) {
+					iframe.frameBorder = 0;
+				}
+				
+				if ('allowTransparency' in iframe) {
+					iframe.allowTransparency = "true";
+				}
+
+				if (!settings.get('scrolling')) {
+					iframe.scrolling = "no";
+				}
+				
+				$(iframe)
+					.attr({
+						src: settings.get('href'),
+						name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
+						'class': prefix + 'Iframe',
+						allowFullScreen : true // allow HTML5 video to go fullscreen
+					})
+					.one('load', complete)
+					.appendTo($loaded);
+				
+				$events.one(event_purge, function () {
+					iframe.src = "//about:blank";
+				});
+
+				if (settings.get('fastIframe')) {
+					$(iframe).trigger('load');
+				}
+			} else {
+				complete();
+			}
+			
+			if (settings.get('transition') === 'fade') {
+				$box.fadeTo(speed, 1, removeFilter);
+			} else {
+				removeFilter();
+			}
+		};
+		
+		if (settings.get('transition') === 'fade') {
+			$box.fadeTo(speed, 0, function () {
+				publicMethod.position(0, callback);
+			});
+		} else {
+			publicMethod.position(speed, callback);
+		}
+	};
+
+	function load () {
+		var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
+		
+		active = true;
+		
+		photo = false;
+		
+		trigger(event_purge);
+		trigger(event_load);
+		settings.get('onLoad');
+		
+		settings.h = settings.get('height') ?
+				setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
+				settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
+		
+		settings.w = settings.get('width') ?
+				setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
+				settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
+		
+		// Sets the minimum dimensions for use in image scaling
+		settings.mw = settings.w;
+		settings.mh = settings.h;
+		
+		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
+		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
+		if (settings.get('maxWidth')) {
+			settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
+			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
+		}
+		if (settings.get('maxHeight')) {
+			settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
+			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
+		}
+		
+		href = settings.get('href');
+		
+		loadingTimer = setTimeout(function () {
+			$loadingOverlay.show();
+		}, 100);
+		
+		if (settings.get('inline')) {
+			// Inserts an empty placeholder where inline content is being pulled from.
+			// An event is bound to put inline content back when Colorbox closes or loads new content.
+			$inline = $tag(div).hide().insertBefore($(href)[0]);
+
+			$events.one(event_purge, function () {
+				$inline.replaceWith($loaded.children());
+			});
+
+			prep($(href));
+		} else if (settings.get('iframe')) {
+			// IFrame element won't be added to the DOM until it is ready to be displayed,
+			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
+			prep(" ");
+		} else if (settings.get('html')) {
+			prep(settings.get('html'));
+		} else if (isImage(settings, href)) {
+
+			href = retinaUrl(settings, href);
+
+			photo = document.createElement('img');
+
+			$(photo)
+			.addClass(prefix + 'Photo')
+			.bind('error',function () {
+				prep($tag(div, 'Error').html(settings.get('imgError')));
+			})
+			.one('load', function () {
+				var percent;
+
+				if (request !== requests) {
+					return;
+				}
+
+				$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
+					var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
+					if (attr) {
+						photo.setAttribute(val, attr);
+					}
+				});
+
+				if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
+					photo.height = photo.height / window.devicePixelRatio;
+					photo.width = photo.width / window.devicePixelRatio;
+				}
+
+				if (settings.get('scalePhotos')) {
+					setResize = function () {
+						photo.height -= photo.height * percent;
+						photo.width -= photo.width * percent;
+					};
+					if (settings.mw && photo.width > settings.mw) {
+						percent = (photo.width - settings.mw) / photo.width;
+						setResize();
+					}
+					if (settings.mh && photo.height > settings.mh) {
+						percent = (photo.height - settings.mh) / photo.height;
+						setResize();
+					}
+				}
+				
+				if (settings.h) {
+					photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
+				}
+				
+				if ($related[1] && (settings.get('loop') || $related[index + 1])) {
+					photo.style.cursor = 'pointer';
+					photo.onclick = function () {
+						publicMethod.next();
+					};
+				}
+
+				photo.style.width = photo.width + 'px';
+				photo.style.height = photo.height + 'px';
+
+				setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+					prep(photo);
+				}, 1);
+			});
+			
+			setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
+				photo.src = href;
+			}, 1);
+		} else if (href) {
+			$loadingBay.load(href, settings.get('data'), function (data, status) {
+				if (request === requests) {
+					prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
+				}
+			});
+		}
+	}
+		
+	// Navigates to the next page/image in a set.
+	publicMethod.next = function () {
+		if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
+			index = getIndex(1);
+			launch($related[index]);
+		}
+	};
+	
+	publicMethod.prev = function () {
+		if (!active && $related[1] && (settings.get('loop') || index)) {
+			index = getIndex(-1);
+			launch($related[index]);
+		}
+	};
+
+	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
+	publicMethod.close = function () {
+		if (open && !closing) {
+			
+			closing = true;
+			open = false;
+			trigger(event_cleanup);
+			settings.get('onCleanup');
+			$window.unbind('.' + prefix);
+			$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
+			
+			$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
+				$box.hide();
+				$overlay.hide();
+				trigger(event_purge);
+				$loaded.remove();
+				
+				setTimeout(function () {
+					closing = false;
+					trigger(event_closed);
+					settings.get('onClosed');
+				}, 1);
+			});
+		}
+	};
+
+	// Removes changes Colorbox made to the document, but does not remove the plugin.
+	publicMethod.remove = function () {
+		if (!$box) { return; }
+
+		$box.stop();
+		$.colorbox.close();
+		$box.stop().remove();
+		$overlay.remove();
+		closing = false;
+		$box = null;
+		$('.' + boxElement)
+			.removeData(colorbox)
+			.removeClass(boxElement);
+
+		$(document).unbind('click.'+prefix);
+	};
+
+	// A method for fetching the current element Colorbox is referencing.
+	// returns a jQuery object.
+	publicMethod.element = function () {
+		return $(settings.el);
+	};
+
+	publicMethod.settings = defaults;
+
+}(jQuery, document, window));
diff --git a/docs/license.html b/docs/license.html
new file mode 100644
index 0000000..18a36fb
--- /dev/null
+++ b/docs/license.html
@@ -0,0 +1,564 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+ Podling Documentation Team">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - License</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Apache License v2.0"><strong>Apache License v2.0</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <div align="left">
+    <table style="border: solid 1px #023264; padding: 5px;">
+    <tr>
+      <td bgcolor="#ffffff"><pre>
+
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      &quot;Legal Entity&quot; 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,
+      &quot;control&quot; 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.
+
+      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      &quot;Source&quot; form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      &quot;Object&quot; 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.
+
+      &quot;Work&quot; 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).
+
+      &quot;Derivative Works&quot; 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.
+
+      &quot;Contribution&quot; 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, &quot;submitted&quot;
+      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 &quot;Not a Contribution.&quot;
+
+      &quot;Contributor&quot; 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:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) 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
+
+      (d) If the Work includes a &quot;NOTICE&quot; 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 &quot;AS IS&quot; 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.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same &quot;printed page&quot; as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+ </pre></td>
+    </tr>
+    </table>
+    </div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/mail-lists.html b/docs/mail-lists.html
new file mode 100644
index 0000000..ae983c8
--- /dev/null
+++ b/docs/mail-lists.html
@@ -0,0 +1,537 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Mailing Lists</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Apache OpenMeetings Mailing Lists"><strong>Apache OpenMeetings Mailing Lists</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				There are currently 4 publicly available mailing lists for OpenMeetings.
+			</p>
+                                                <p>
+				The commits list is for notification of commits to the OpenMeetings
+				repository.
+			</p>
+                                                <p>
+				The dev list is for internal discussion among the OpenMeetings
+				developers. It is
+				open to the public if you are interested in seeing how the sausage is
+				made.
+			</p>
+                                                <p>
+				<b>Note: </b>If your email bounces with status messages like "Delivery Status Notification" it is 
+				likely that you have send your mail as HTML mail. Apache does not like sending HTML emails, see:
+				<br /> 
+				<a href="http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail" target="_BLANK" rel="nofollow">http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail</a>
+			</p>
+                                                <p>
+				You can search the entire mailing list very easy by using markmail.com, by using the term 
+				"openmeetings" plus your search. Try yourself: <br />
+				<a href="http://markmail.org/search/?q=openmeetings" target="_BLANK" rel="nofollow">http://markmail.org/search/?q=openmeetings</a>
+			</p>
+                                                <table>
+                        <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<strong>User List</strong>
+							:
+							<a href="mailto:user@openmeetings.apache.org">
+								user@openmeetings.apache.org
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:user-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:user-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-user/">
+								Archive
+							</a>
+						</p>
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<strong>Spanish User List</strong>
+							:
+							<a href="mailto:user-espanol@openmeetings.apache.org">
+								user-espanol@openmeetings.apache.org
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:user-espanol-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:user-espanol-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-user-espanol/">
+								Archive
+							</a>
+						</p>
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<strong>Commits List</strong>
+							:
+							<a href="mailto:commits@openmeetings.apache.org">
+								commits@openmeetings.apache.org
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:commits-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:commits-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-commits/">
+								Archive
+							</a>
+						</p>
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<strong>Developer List</strong>
+							:
+							<a href="mailto:dev@openmeetings.apache.org">
+								dev@openmeetings.apache.org
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:dev-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a class="external" rel="nofollow" href="mailto:dev-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<p>
+							<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev">
+								Archive
+							</a>
+						</p>
+					
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/oauth2.html b/docs/oauth2.html
new file mode 100644
index 0000000..d2c7b2e
--- /dev/null
+++ b/docs/oauth2.html
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="OpenMeetings Team">
+            <meta name="email" content="a_horuzhenko@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - OAuth2 integration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OAuth2 integration"><strong>OAuth2 integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You need Apache Openmeetings <strong>version 3.0</strong> to apply this guide!</p>
+                                                <p>You can manage various OAuth2 servers by opening "Administration =&gt; OAuth2". There are already created servers like Facebook or Google. You can use them as example or in production. To add your own servers you need to get their documentation to set necessary attributes.</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Attributes"><strong>Attributes</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <ul>
+				<li><i>Name</i> - displayed in the login dialog text</li>
+				<li><i>client_id</i> and <i>client_secret</i> - credentials which you got from your oauth2 server.</li>
+				<li><i>Redirect uri</i> - put this value into application settings in the oauth2 server.</li>
+				<li><i>Request key URL</i> - an URL which will be used to request access key.</li>
+				<li><i>Request token URL</i> - an URL which will be used to request access token.</li>
+				<li><i>Request token attributes</i> - attributes for access token request.</li>
+				<li><i>Request info URL</i> - an URL which will be used to request authentication attributes.</li>
+				<li><i>Login param name</i> - login key name to get value from info response.</li>
+				<li><i>Email param name</i> - email key name to get value from info response.</li>
+				<li><i>Firstname param name</i> - firstname key name to get value from info response.</li>
+				<li><i>Lastname param name</i> - lastname key name to get value from info response.</li>
+			</ul>
+                                                <p>Request attributes (request key url, request token url, request token attributes, request info url) may contain next variables as a part:</p>
+                                                <ul>
+				<li>{$client_id}</li>
+				<li>{$client_secret}</li>
+				<li>{$redirect_uri}</li>
+				<li>{$code}</li>
+				<li>{$access_token}</li>
+			</ul>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/openmeetings_docs.css b/docs/openmeetings_docs.css
new file mode 100644
index 0000000..8a09524
--- /dev/null
+++ b/docs/openmeetings_docs.css
@@ -0,0 +1,45 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+body {
+    font: 10pt Verdana, Arial, Helvetica, sans-serif;
+}
+table {
+	margin-left: 20px;
+	border-color: #000000;
+}
+th {
+    background-color: #dddddd;
+}
+.method {
+	margin-top: 20px;
+	width: 100%;
+}
+.method_header {
+	background-color: #cccccc;
+	width: 100%;
+	border-style: solid;
+	border-color: #666666;
+	border-width: 2px;
+	font-size: 11pt;
+	color: #0000FF;
+}
+.navigation {
+	margin-left: 40px;
+}
+.navigation_comment {
+	margin-left: 20px;
+}
\ No newline at end of file
diff --git a/docs/red5sip-integration_2.0.html b/docs/red5sip-integration_2.0.html
new file mode 100644
index 0000000..929a7de
--- /dev/null
+++ b/docs/red5sip-integration_2.0.html
@@ -0,0 +1,534 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="timur@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - SIP-Transport Integration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="SIP-Transport Integration"><strong>SIP-Transport Integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				You need minimum version 2.0 of Apache OpenMeetings to apply this guide!
+			</p>
+                                                <p>
+				Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 10.04.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Setup Asterisk"><strong>Setup Asterisk</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+                Run the commands
+                <blockquote>
+                    <i>
+                    sudo apt-get update<br />
+                    sudo apt-get install asterisk asterisk-mysql
+                    </i>
+                </blockquote>
+            </div>
+                                                <div>
+                Ubuntu 10.04 has broken asterisk-mysql version. For other distribution next commands not needed:
+                <blockquote>
+                    <i>
+                        aptitude purge asterisk-mysql
+                        <br />
+                        cd /tmp
+                        <br />
+                        apt-get build-dep asterisk-mysql
+                        <br />
+                        apt-get -b source asterisk-mysql
+                        <br />
+                        dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Enable asterisk mysql realtime module:<br /><br />
+                Add string
+                <blockquote>
+                    <i>load =&gt; res_config_mysql.so</i>
+                </blockquote>
+                to the /etc/asterisk/modules.conf into the "modules" section.
+            </div>
+                                                <div>
+                Configure mysql realtime module:<br /><br />
+
+                Create file /etc/asterisk/res_mysql.conf and add lines:
+                <blockquote>
+                    <i>[general]
+                        <br />
+                        dbhost=127.0.0.1
+                        <br />
+                        dbname=openmeetings
+                        <br />
+                        dbuser=root
+                        <br />
+                        dbpass=
+                        <br />
+                        dbport=3306
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Add next lines into the /etc/asterisk/extconfig.conf:
+                <blockquote>
+                    <i>[settings]
+                        <br />
+                        sipusers =&gt; mysql,general,sipusers
+                        <br />
+                        sippeers =&gt; mysql,general,sipusers
+                        <br />
+                        extensions =&gt; mysql,general,extensions
+                        <br />
+                        meetme =&gt; mysql,general,meetme
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Add next lines into the /etc/asterisk/extensions.conf:
+                <blockquote>
+                    <i>[rooms]
+                        <br />
+                        switch =&gt; Realtime/@
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Restart asterisk:
+                <blockquote>
+                    <i>service asterisk restart</i>
+                </blockquote>
+                Insert, for example, SIP user with name 'test':
+                <blockquote>
+                    <i>
+                        INSERT INTO sipusers (allow, context, disallow, host, name, secret) VALUES ('ulaw' , 'rooms', NULL, 'dynamic' , 'test', '12345');
+                    </i>
+                </blockquote>
+            </div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Setup red5sip transport"><strong>Setup red5sip transport</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+                Download red5sip from<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip</blockquote>
+            </div>
+                                                <p>
+                Build with Apache Ant
+            </p>
+                                                <div>
+                Install jsvc:
+                <blockquote>
+                    <i>apt-get install jsvc</i>
+                </blockquote>
+            </div>
+                                                <div>
+                Insert proper values to the /opt/red5sip/settings.properties
+
+                <blockquote>
+                    <i>red5.host - red5 server address (127.0.0.1)
+                        <br />
+                        sip.obproxy - asterisk adderss (127.0.0.1)
+                        <br />
+                        sip.phone - sip phone number (test)
+                        <br />
+                        sip.authid - sip auth id (test)
+                        <br />
+                        sip.secret - sip password (12345)
+                        <br />
+                        sip.realm - sip realm, "asterisk" by default
+                        <br />
+                        sip.proxy -
+                        <br />
+                        rooms - ids of openmeetings rooms, can be, for example, 2,3,5,6
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Add red5sip to autostart:
+                <blockquote>
+                    <i>ln -s /opt/red5sip/red5sip.sh /etc/init.d/red5sip
+                        <br />
+                        chmod a+x /etc/init.d/red5sip
+                        <br />
+                        update-rc.d /etc/init.d/red5sip defaults
+                    </i>
+
+                </blockquote>
+            </div>
+                                                <div>
+                Start openmeetings
+                <blockquote>
+                    <i>service red5 start</i>
+                </blockquote>
+            </div>
+                                                <div>
+                Start red5sip
+                <blockquote>
+                    <i>service red5sip start</i>
+                </blockquote>
+            </div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/red5sip-integration_2.1.html b/docs/red5sip-integration_2.1.html
new file mode 100644
index 0000000..6550d3f
--- /dev/null
+++ b/docs/red5sip-integration_2.1.html
@@ -0,0 +1,702 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="OpenMeetings Team">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - SIP-Transport Integration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="SIP-Transport Integration"><strong>SIP-Transport Integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You need Apache OpenMeetings <strong>version 2.1</strong> to apply this guide!</p>
+                                                <p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+                                                <p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Prerequisites"><strong>Prerequisites</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="ODBC Setup"><strong>ODBC Setup</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br />
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Building and setting up Asterisk"><strong>Building and setting up Asterisk</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configure Asterisk"><strong>Configure Asterisk</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload =&gt; res_odbc.so<br />
+						preload =&gt; res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled =&gt; yes<br />
+						dsn =&gt; asterisk-connector<br />
+						pre-connect =&gt; yes
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers =&gt; odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten =&gt; _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten =&gt; _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten =&gt; _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten =&gt; _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten =&gt; _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						exten =&gt; _400X!,n(notavail),Answer()<br />
+						exten =&gt; _400X!,n,Playback(invalid)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten =&gt; _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten =&gt; _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten =&gt; _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten =&gt; _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.data.conference.dao.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div>
+                                                <br />
+                                                <div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div>
+                                                <br />
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Setup red5sip transport"><strong>Setup red5sip transport</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Download red5sip from
+				<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip_2.1</blockquote>
+			</div>
+                                                <div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/red5sip-integration_3.0.html b/docs/red5sip-integration_3.0.html
new file mode 100644
index 0000000..1a64177
--- /dev/null
+++ b/docs/red5sip-integration_3.0.html
@@ -0,0 +1,702 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="OpenMeetings Team">
+            <meta name="email" content="solomax@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - SIP-Transport Integration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="SIP-Transport Integration"><strong>SIP-Transport Integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You need Apache OpenMeetings <strong>version 3.0</strong> to apply this guide!</p>
+                                                <p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+                                                <p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Prerequisites"><strong>Prerequisites</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="ODBC Setup"><strong>ODBC Setup</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br />
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Building and setting up Asterisk"><strong>Building and setting up Asterisk</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Configure Asterisk"><strong>Configure Asterisk</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload =&gt; res_odbc.so<br />
+						preload =&gt; res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled =&gt; yes<br />
+						dsn =&gt; asterisk-connector<br />
+						pre-connect =&gt; yes
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers =&gt; odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten =&gt; _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten =&gt; _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten =&gt; _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten =&gt; _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten =&gt; _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						exten =&gt; _400X!,n(notavail),Answer()<br />
+						exten =&gt; _400X!,n,Playback(invalid)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten =&gt; _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten =&gt; _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten =&gt; _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten =&gt; _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten =&gt; _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div>
+                                                <br />
+                                                <div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div>
+                                                <br />
+                                                <div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div>
+                                                <br />
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Setup red5sip transport"><strong>Setup red5sip transport</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <div>
+				Download red5sip from
+				<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip_2.1</blockquote>
+			</div>
+                                                <div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+                                                <div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/svn.html b/docs/svn.html
new file mode 100644
index 0000000..d7ad956
--- /dev/null
+++ b/docs/svn.html
@@ -0,0 +1,779 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Source Code</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Source Code"><strong>OpenMeetings Source Code</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				OpenMeetings uses
+				<a class="external" rel="nofollow" href="http://subversion.tigris.org">
+					Subversion
+				</a>
+				to manage its source code.
+				If you're new to Subversion, you can check out the
+				<a href="http://svnbook.red-bean.com/">online book</a>
+				about Subversion.
+				Note that we are currently using Subversion 1.1.x (there are separate
+				versions of the book covering 1.0 and 1.1).
+			</p>
+                                                <p>
+				To receive notice of commits to the repository subscribe to
+				<a href="mailto:commits@openmeetings.apache.org">
+					commits@openmeetings.apache.org
+				</a>
+				by sending email to
+				<a href="mailto:commits-subscribe@openmeetings.apache.org">
+					commits-subscribe@openmeetings.apache.org
+				</a>
+				.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Web Access to Subversion"><strong>Web Access to Subversion</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				If you just want to browse the source code, you can use the
+				<a class="external" rel="nofollow" href="http://svn.apache.org/viewcvs/openmeetings">
+					ViewCVS web interface
+				</a>
+				to Subversion. This is current at all times.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Checking Out Code Using Subversion"><strong>Checking Out Code Using Subversion</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Anyone can check code out of Subversion. You only need to specify
+				a
+				username and password to update the Subversion repository, and only
+				OpenMeetings committers can do that.
+				If you are a committer, are working from behind a firewall, or are
+				connected to the internet through a proxy server, please see the
+				sections
+				below for more information.
+			</p>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Anonymous check out from Subversion"><strong>Anonymous check out from Subversion</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Use a command like:</p>
+                                                <pre>% svn checkout
+					http://svn.apache.org/repos/asf/openmeetings </pre>
+                                                <p>Once you have OpenMeetings checked out you can update the source
+					by executing the following command from within the openmeetings
+					directory.
+				</p>
+                                                <pre>
+					% svn update
+				</pre>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Access from behind a firewall"><strong>Access from behind a firewall</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>For those users who are stuck behind a corporate firewall which
+					is
+					blocking http access to the Subversion repository, you can try to access it
+					via HTTPS:
+				</p>
+                                                <pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Access through a proxy"><strong>Access through a proxy</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>The Subversion client can go through a proxy, if you configure it
+					to do so. First, edit your "servers" configuration file to indicate
+					which
+					proxy to use. The files location depends on your operating system.
+					On Linux or Unix it is located in the directory "~/.subversion".
+					On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%",
+					note this is a hidden directory.)
+				</p>
+                                                <p>There are comments in the file explaining what to do. If you
+					don't have
+					that file, get the latest Subversion client and run any command; this
+					will
+					cause the configuration directory and template files to be created.
+				</p>
+                                                <p>Example : Edit the 'servers' file and add something like :
+				</p>
+                                                <pre>
+					[global]
+					http-proxy-host = your.proxy.name
+					http-proxy-port = 3128
+				</pre>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Committer access"><strong>Committer access</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Everyone can access the Apache Podling Subversion repository via
+					HTTPS,
+					but OpenMeetings Committers must checkout the Subversion repository
+					via HTTPS.
+				</p>
+                                                <pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Submitting Code Changes"><strong>Submitting Code Changes</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                        <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Submitting a patch"><strong>Submitting a patch</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>If you make changes to OpenMeetings, and would like to contribute
+					it to the project, you should open a JIRA issue and discuss the
+					merits
+					of the proposal with the developer community. If there is agreement,
+					create a patch and attach it to the JIRA issue.
+				</p>
+                                                <p>
+					To create a patch, execute the svn diff command. This creates a patch
+					that
+					can easily be uploaded to a JIRA issue. A good name for the patch
+					includes
+					the JIRA issue name, e.g. OPENMEETINGS-104.patch. If there are several
+					patches
+					for the same JIRA issue, you might include your initials, e.g.
+					OPENMEETINGS-104.clr.patch
+				</p>
+                                                <pre>
+					% svn diff &gt; OPENMEETINGS-104.clr.patch
+				</pre>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Committing changes to subversion"><strong>Committing changes to subversion</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					To commit changes to the subversion repository, you must be an
+					OpenMeetings committer. See
+					<a href="get-involved.html">get involved</a>
+					for information on how to become a committer and how to set up your
+					password once you become a committer.
+				</p>
+                                                <p>
+					Once your password is set, you can use a command like this to commit:
+				</p>
+                                                <pre>
+					$&gt; svn commit --username your-username
+					Authentication realm: &lt;https://svn.apache.org:443&gt; ASF Committers
+					Password for 'your-username': your-password
+				</pre>
+                                                <p>You can also pass your password on the command line directly, but
+					this is a security problem on multiuser unix computers (the command
+					line
+					arguments are available via the ps command). Here is the command if you
+					are Windows or a single user unix computer:
+				</p>
+                                                <pre>
+					$&gt; svn commit --username your-username --password your-password
+				</pre>
+                                                <p>Remember to replace 'your-username' and 'your-password' with
+					your actual username and password on svn.apache.org.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Building Podling from Source"><strong>Building Podling from Source</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Using Subversion on Windows with cygwin"><strong>Using Subversion on Windows with cygwin</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				If you use Subversion on Windows under cygwin, you may find that the
+				Subversion client automatically assigns the executable property to
+				non-executable files. In that case, you would see this at the bottom
+				of
+				an
+				<em>svn diff</em>
+				of the file:
+			</p>
+                                                <pre>
+				Property changes on: test/sql/derby/datastoreidentity/schema1.sql
+				___________________________________________________________________
+				Name: svn:executable
+				+ *
+			</pre>
+                                                <p>This section explains the source of the problem and suggests some
+				actions to avoid it.
+			</p>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Background"><strong>Background</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>Subversion carries executable information in the built-in
+					property
+					called svn:executable. This property, unlike others, may be present
+					or absent, but it has no value. You can add it or delete it, but you
+					cannot change its value.
+				</p>
+                                                <p>In theory, Subversion ignores Windows file permissions and by
+					default
+					does not set svn:executable. However, cygwin svn acts like Unix svn and
+					determines the svn:executable property based on file permissions.
+				</p>
+                                                <p>
+					If you create a file from the cygwin command line, by default it is
+					executable only if the filename ends with .bat, .com or .exe, or if
+					its
+					content starts with #!. [This is what the doc says, but you may see -x
+					for all files.] If you create a file using a Windows tool, by default
+					its Windows permissions are executable by all. Cygwin interprets
+					the
+					Unix-style permissions this way as well. If the file is executable by all,
+					cygwin svn sets the svn:executable property on the file when you
+					invoke
+					<em>svn add</em>
+					.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Removing existing executable properties from the repository"><strong>Removing existing executable properties from the repository</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You can use svn propdel to remove the svn:executable property
+					from your
+					working copy.
+				</p>
+                                                <pre>
+					svn propdel -R svn:executable .
+				</pre>
+                                                <p>will recursively remove the svn:executable property from all of
+					the
+					files below the current directory. You can use this and commit the
+					files to clean the repository if necessary.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="#EFEFEF">
+        <font color="#000000" face="arial,helvetica,sanserif">
+          <a name="Preventing Subversion from adding unwanted executable  properties"><strong>Preventing Subversion from adding unwanted executable  properties</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+					Windows/cygwin users who don't want to have to think about using
+					<em>svn
+						propdel
+					</em>
+					or
+					<em>chmod</em>
+					on each added file can use a non-cygwin
+					version of svn. The Subversion 1.2.3 Win32 binaries, downloadable from the
+					link at the bottom of
+					<a rel="nofollow" href="http://subversion.tigris.org/project_packages.html">
+						http://subversion.tigris.org/project_packages.html
+					</a>
+					, appear to work
+					well. After installation add the svn.exe location to your Windows PATH
+					variable. If you are switching from cygwin svn to Win32 svn
+				</p>
+                                                <ol type="1">
+					<li>
+						<p>Remove the subversion component from your cygwin installation
+							because when svn is invoked from a cygwin window, the cygwin
+							version is
+							found even if your cygwin/bin directory is later on the path. (In the
+							Select Packages window of the setup wizard, navigate to the
+							subversion
+							package in the Devel. category. Click on the status icon until Uninstall
+							is displayed. Click next and continue through the wizard until
+							installation
+							is complete.)
+						</p>
+					</li>
+					<li>
+						<p>Copy the servers file and the auth folder from the sygwin
+							~/.subversion
+							directory to C:\Documents and
+							Settings\&lt;user&gt;\Application Data\Subversion used by Win32
+							subversion.
+						</p>
+					</li>
+				</ol>
+                                                <p>Note that windows svn uses backslash as the path separator when
+					displaying file names. You cannot just copy and paste this file
+					name
+					to another svn command when running from within a cygwin shell.
+					You need to enclose the file name into double quotes.
+				</p>
+                                                <p>Alternatively, Windows users can set file permissions in Windows
+					Explorer. (Right-click on the top-level folder &amp; select
+					Properties.
+					Select the Security tab. Click Advanced. Remove all instances of
+					Read &amp; Execute from the Permission Entries. Click "Reset
+					permissions
+					on all child objects and enable propogations of inheritable
+					permissions".
+					Click Apply. OK. OK.) You will have to do this again when you do a clean
+					checkout to a new directory.
+				</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/team-list-ru.html b/docs/team-list-ru.html
new file mode 100644
index 0000000..5f9b203
--- /dev/null
+++ b/docs/team-list-ru.html
@@ -0,0 +1,453 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Команда проекта</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Committers"><strong>OpenMeetings Committers</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Люди, отмеченные на этой странице, имеют доступ к репозиторию исходного кода Apache Openmeetings. 
+				Данная страница предназначена для того, чтобы служить основой квалификационного отбора
+				по проектам, требующим модификации исходного кода Openmeetings.
+			</p>
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Имя
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Себастьян Вагнер
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Алексей Федотов
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Евгений Ровинский
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Максим Солодовник
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Oliver Becherer
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Eugen Schwert
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Sascha Xander
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Johnny Strom
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Герман Грехов
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Тимур Тлеукенов
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Alvaro Bustos
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        George Kirkham
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Stephen Cottham
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Ирина Архипец
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Василий Дегтярев
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Денис Кандров
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Юлия Альгаер
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Артём Хоруженко
+    </td>
+            </tr>
+            </table>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/team-list.html b/docs/team-list.html
new file mode 100644
index 0000000..dcbd4a0
--- /dev/null
+++ b/docs/team-list.html
@@ -0,0 +1,581 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			Sebastian Wagner
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Project Team</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="OpenMeetings Committers"><strong>OpenMeetings Committers</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				The people listed below have made significant contributions to
+				Podling
+				by
+				working long and hard to make quality software for the rest
+				of the world to
+				use.
+			</p>
+                                                <p>
+				If you would like to contribute to Podling, please see the
+				<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list" target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+				to find areas where you can contribute.
+				If there is nothing in there
+				that suits your interest, but you still
+				have
+				ideas, please feel free
+				to suggest them on the mailing list.
+			</p>
+                                                <p>
+				If you would like to become a committer, please see
+				<a href="get-involved.html">Get Involved</a>
+				.
+			</p>
+                                                <table>
+                        <tr>
+                        <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Name
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Organization
+    </th>
+                                <th bgcolor="#039acc" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Contact/Website
+    </th>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Sebastian Wagner
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        
+						<a href="https://twitter.com/#!/dead_lock" target="_BLANK" rel="nofollow">https://twitter.com/#!/dead_lock
+						</a>
+					
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Alexei Fedotov
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Evgeny Rovinsky
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Maxim Solodovnik
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Oliver Becherer
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Eugen Schwert
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Sascha Xander
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Johnny Strom
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Timur Tleukenov
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Alvaro Bustos
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        George Kirkham
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Stephen Cottham
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Irina Arkhipets
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Vasiliy Degtyarev
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Denis Kandrov
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Yulia Algaer
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+                                <tr>
+                        <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Artyom Horuzhenko
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        Independent
+    </td>
+                                <td bgcolor="#a0ddf0" class="$class" colspan="" rowspan="" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+        &nbsp;
+    </td>
+            </tr>
+            </table>
+                                                <p>
+			<a href="team-list-ru.html">Here</a> is the Russian version of this page.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/themes-and-branding.html b/docs/themes-and-branding.html
new file mode 100644
index 0000000..709bab4
--- /dev/null
+++ b/docs/themes-and-branding.html
@@ -0,0 +1,387 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - Theme and color</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Available with Apache OpenMeetings 2.0"><strong>Available with Apache OpenMeetings 2.0</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				Themes are only available starting with Openmeetings 2.x.
+				<br />
+				There are also more general client side configuration like port
+				configuration. Those configs are stored in the public/config.xml
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="Editing the theme"><strong>Editing the theme</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>You can find the default theme in the SVN: </p>
+                                                <p>
+				<a href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml" target="_BLANK" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml
+				</a>
+			</p>
+                                                <p>
+				Or if you already installed OpenMeetings on your machine at:
+				<br />
+				<tt>/webapps/openmeetings/public/theme.xml</tt>
+				<br />
+				The file contains border, background and font color definitions as
+				well as paths to icons that are loaded at runtime.
+				<br />
+				You can change the theme at runtime and just reload the browser
+				(eventually clear the browser cache) to see updates based on
+				modification in your theme.
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/voip-sip-integration.html b/docs/voip-sip-integration.html
new file mode 100644
index 0000000..f35ac02
--- /dev/null
+++ b/docs/voip-sip-integration.html
@@ -0,0 +1,386 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+                                                    <meta name="author" content="
+			OpenMeetings Team
+		">
+            <meta name="email" content="sebawagner@apache.org">
+            
+           
+                                    
+                        
+            <title>Apache OpenMeetings - VoIP and SIP Integration</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align="left">
+<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
+</td>
+                    <td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+            	<h3><a href="#General">General</a></h3>
+    	<div>
+	        	            	            	    <a href="./index.html">Home</a>
+<br/>
+	        		        	            	            	    <a href="./license.html">License</a>
+<br/>
+	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
+<br/>
+	        		        	            	            	    <a href="./downloads.html">Downloads</a>
+<br/>
+	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
+    	<div>
+	        	            	            	    <a href="./installation.html">Installation</a>
+<br/>
+	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
+<br/>
+	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
+<br/>
+	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Community">Community</a></h3>
+    	<div>
+	        	            	            	    <a href="./get-involved.html">Get Involved</a>
+<br/>
+	        		        	            	            	    <a href="./team-list.html">Committers</a>
+<br/>
+	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
+<br/>
+	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Development">Development</a></h3>
+    	<div>
+	        	            	            	    <a href="./svn.html">Source Code</a>
+<br/>
+	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
+<br/>
+	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
+<br/>
+	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
+<br/>
+	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
+<br/>
+	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
+<br/>
+	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Integration">Integration</a></h3>
+    	<div>
+	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
+<br/>
+	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
+<br/>
+	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
+<br/>
+	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
+<br/>
+	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
+<br/>
+	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Plugins">Plugins</a></h3>
+    	<div>
+	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
+<br/>
+	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
+<br/>
+	        		            	</div>
+        	<h3><a href="#Configuration">Configuration</a></h3>
+    	<div>
+	        	            	            	<b>DB Sample Configurations</b><br/>
+	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
+<br/>
+	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
+<br/>
+	            			            			    <a href="./OracleConfig.html">Oracle</a>
+<br/>
+	            			            			    <a href="./MySQLConfig.html">MySQL</a>
+<br/>
+	            			            			    <a href="./PostgresConfig.html">Postgres</a>
+<br/>
+	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
+<br/>
+	            			        		        	            	            	<b>Localization and languages</b><br/>
+	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
+<br/>
+	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
+<br/>
+	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
+<br/>
+	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
+<br/>
+	            			        		        	            	            	<b>NAT Port Settings</b><br/>
+	            			            			    <a href="./PortSettings.html">Port settings</a>
+<br/>
+	            			        		        	            	            	<b>Performance</b><br/>
+	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
+<br/>
+	            			        		        	            	            	<b>User Interface</b><br/>
+	            			            			    <a href="./themes-and-branding.html">Themes</a>
+<br/>
+	            			            			    <a href="./Dashboard.html">Dashboard</a>
+<br/>
+	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
+<br/>
+	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
+<br/>
+	            			            			    <a href="./HotKeys.html">Hot Keys</a>
+<br/>
+	            			        		        	            	            	<b>Customization</b><br/>
+	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
+<br/>
+	            			            			    <a href="./Navigation.html">Navigation</a>
+<br/>
+	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
+<br/>
+	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
+<br/>
+	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
+<br/>
+	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
+<br/>
+	            			        		        	            	            	<b>Security</b><br/>
+	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
+<br/>
+	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
+<br/>
+	            			        		        	            	            	<b>Converters</b><br/>
+	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
+<br/>
+	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
+<br/>
+	            			        		        	            	            	<b>Clustering</b><br/>
+	            			            			    <a href="./Clustering.html">Clustering</a>
+<br/>
+	            			        		        	            	            	<b>Misc</b><br/>
+	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
+<br/>
+	            			        		            	</div>
+        
+    </div>
+     
+    <br/>
+    
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="#EEEEEE" -->
+        <font color="#000000" face="verdana,arial,helvetica,sanserif">
+          <a name="VoIP and SIP Integration"><strong>VoIP and SIP Integration</strong></a>
+        </font>
+        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+                                    <p>
+				There are multiple ways to integrate with VoIP and or SIP.
+				OpenMeetings does not provide out of the box a ready to run VoIP
+				integration / integration to cell phone or usual land lane.
+				The
+				nature of such integrations is that it depends heavily on the
+				infrastructure that you are using and where you would like to
+				integrate OpenMeetings into.
+				<br />
+				<br />
+				It also depends on a number of factors of which OpenMeetings is
+				impossible to set up for you, for example setting up your VoIP
+				server or provide you with a range of telephone numbers reserved for
+				conference calls in your national phone network.
+				Such an integration
+				project is likely to become a consulting job for a
+				telecommunications consultant.
+				<br />
+				<br />
+				To get help on the integration you can contact the
+				<a href="mail-lists.html">mailing lists</a>
+				or for example somebody from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+                <br /><br />
+                <a href="red5sip-integration_2.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.0
+                </a>.<br />
+                <a href="red5sip-integration_2.1.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.1
+                </a>.<br />
+                <a href="red5sip-integration_3.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.0
+                </a>.<br />
+			</p>
+                            </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+                                        </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="#123465" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ivy.xml b/ivy.xml
new file mode 100644
index 0000000..d062f1a
--- /dev/null
+++ b/ivy.xml
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<ivy-module version="2.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+	<info organisation="apache" module="openmeetings" />
+	<configurations defaultconfmapping="default">
+		<conf name="default" />
+		<conf name="mainlib" extends="default" description="Top level libraries" />
+		<conf name="mainlib.ext" extends="mainlib" description="Top level libraries with different pattern" />
+		<conf name="openmeetings" description="Openmeetings required libraries" />
+		<conf name="openmeetings.ext" extends="openmeetings" description="Openmeetings required libraries with different pattern" />
+		<conf name="openmeetings.axis2" extends="openmeetings.ext" description="Axis required libraries with dependencies" />
+		<conf name="anakia" description="Openmeetings required libraries" />
+		<conf name="junit" description="Unit testing dependencies" />
+		<conf name="cmdadmin" description="Command Line Admin dependencies" />
+		<conf name="rat" extends="cmdadmin" description="Apache Rat dependencies" />
+		<conf name="dtd" description="Dtd-generator dependencies" />
+		<conf name="svntask" description="Svn task dependencies" />
+		<conf name="openlaszlo" description="Openlaszlo dependencies" />
+		<conf name="openlaszlo46" description="Openlaszlo with Flex 4.6 dependencies" />
+		<conf name="mysql" description="MySQL JDBC driver" />
+		<conf name="mvn" description="Maven Ant task to build Red5" />
+		<conf name="red5-client" description="Red5 Client/Server for screensharing" />
+		<conf name="tomcat-embed-websocket" description="Websocket support for tomcat" />
+		<conf name="jgit" description="JGit Ant task to retirieve Red5" />
+	</configurations>
+	<dependencies>
+		<!--  START OF mainlib -->
+		<dependency org="commons-fileupload" name="commons-fileupload" rev="1.3" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-io" name="commons-io" rev="2.4" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="asm" name="asm" rev="3.1" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-aspects" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-jdbc" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-orm" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-tx" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-webmvc" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!-- include type="bundle" / FIXME unable to get geronimo-jpa without  sources -->
+		<dependency org="org.apache.geronimo.specs" name="geronimo-jpa_2.0_spec" rev="1.1" conf="mainlib.ext->*" transitive="false"/>
+		<!--  END OF mainlib -->
+		
+		<!--  START OF ANAKIA -->
+		<dependency org="org.jdom" name="jdom" rev="1.1" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="logkit" name="logkit" rev="1.0.1" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="oro" name="oro" rev="2.0.8" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity-anakia" rev="1.1.0-SNAPSHOT" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF ANAKIA -->
+
+		<!--  START OF OPENMEETINGS -->
+		<dependency org="org.apache.axis2" name="axis2" rev="1.7.0-SNAPSHOT" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-anim" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-awt-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-bridge" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-codec" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-css" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-dom" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-ext" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-extension" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-gui-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-gvt" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-parser" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-rasterizer" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-script" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-slideshow" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-squiggle" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svg-dom" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svggen" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svgpp" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-swing" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-transcoder" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-ttf2svg" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-xml" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="fop" rev="1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="xmlgraphics-commons" rev="1.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="xml-apis" name="xml-apis-ext" rev="1.3.04" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derby" rev="10.10.2.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbyclient" rev="10.10.2.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbynet" rev="10.10.2.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.postgresql" name="postgresql" rev="9.4-1200-jdbc41" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="dom4j" name="dom4j" rev="1.6.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity-tools" rev="2.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  added to avoid downloading version 1.3 with Axis2 -->
+		<dependency org="commons-codec" name="commons-codec" rev="1.8" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.thoughtworks.xstream" name="xstream" rev="1.4.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.ws.commons.util" name="ws-commons-util" rev="1.0.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlrpc" name="xmlrpc-common" rev="3.1.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlrpc" name="xmlrpc-client" rev="3.1.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-transaction" name="commons-transaction" rev="1.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.commons" name="commons-dbcp2" rev="2.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.commons" name="commons-pool2" rev="2.4.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-digester" name="commons-digester" rev="2.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="xpp3" name="xpp3" rev="1.1.4c" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="javax.mail" name="mail" rev="1.4.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.simpleframework" name="simple-xml" rev="2.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-request" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-util" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-core" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-auth-roles" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-ioc" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-extensions" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-datetime" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="joda-time" name="joda-time" rev="2.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-devutils" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-native-websocket-core" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-native-websocket-javax" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-core" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-calendar" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-plugins" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-theme-default" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-culture" rev="6.20.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="org.threeten" name="threetenbp" rev="1.2" conf="openmeetings->*" transitive="false"/>
+		<dependency org="ro.fortsoft.wicket.dashboard" name="wicket-dashboard-core" rev="0.12.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.google.code.gson" name="gson" rev="2.2.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-urlfragment" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-html5" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-select2" rev="6.20.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		
+		<dependency org="commons-net" name="commons-net" rev="3.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.googlecode.jsmpp" name="jsmpp" rev="2.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.smslib" name="smslib" rev="3.5.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.asteriskjava" name="asterisk-java" rev="1.0.0.CI-20150406" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!-- Selenium -->
+		<dependency org="org.seleniumhq.selenium" name="selenium-java" conf="openmeetings->*" rev="2.42.2" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.directory.api" name="api-all" rev="1.0.0-M31" conf="openmeetings->*" >
+			<include type="jar" />
+		</dependency>
+		<!-- BEGIN openjpa -->
+		<dependency org="org.apache.geronimo.specs" name="geronimo-jms_1.1_spec" rev="1.1.1" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="net.sourceforge.serp" name="serp" rev="1.15.1" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xbean" name="xbean-asm5-shaded" rev="3.17" conf="openmeetings->*" transitive="false" />
+		<dependency org="org.apache.openjpa" name="openjpa-jdbc" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-jest" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-kernel" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-lib" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-persistence" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-persistence-jdbc" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-slice" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-xmlstore" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa" rev="2.4.0" conf="openmeetings->*" transitive="false" />
+		<!-- END openjpa -->
+
+		<dependency org="org.mnode.ical4j" name="ical4j" rev="1.0.6" conf="openmeetings.ext->*" transitive="false"/>
+		<!-- iCal4j seems to need this JAR -->
+		<dependency org="backport-util-concurrent" name="backport-util-concurrent" rev="3.1" conf="openmeetings->*"/>
+		
+		<dependency org="org.apache.ws.commons.axiom" name="axiom-impl" rev="1.2.14" conf="openmeetings.axis2->*" transitive="true">
+			<exclude name='commons-io' />
+			<exclude name='commons-logging' />
+		</dependency>
+		<dependency org="org.apache.ws.commons.axiom" name="axiom-dom" rev="1.2.14" conf="openmeetings.axis2->*" transitive="false" />
+		<dependency org="org.apache.axis2" name="axis2-transport-http" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="axis2-transport-local" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="mex" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="axis2-jaxws" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<!--  END OF OPENMEETINGS -->
+
+		<!--  START OF JUNIT -->
+		<dependency org="org.springframework" name="spring-test" rev="4.1.7.RELEASE" conf="junit->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="junit->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF JUNIT -->
+		
+		<!--  START OF RAT -->
+		<dependency org="org.apache.rat" name="apache-rat-core" rev="0.11" conf="rat->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.rat" name="apache-rat-tasks" rev="0.11" conf="rat->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF RAT -->
+		
+		<!--  START OF DTD -->
+		<dependency org="com.thaiopensource" name="trang" rev="20091111" conf="dtd->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF DTD -->
+		
+		<!--  START OF svntask -->
+		<dependency org="org.tmatesoft.svnkit" name="svnkit" rev="1.7.11" conf="svntask->*" transitive="true">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.tigris.subclipse" name="svnant" rev="1.3.1" conf="svntask->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.tigris.subclipse" name="svnclientadapter" rev="1.3.1" conf="svntask->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF svntask -->
+		
+		<!--  START OF openlaszlo -->
+		<dependency org="org.openlaszlo" name="openlaszlo" rev="4.9" conf="openlaszlo->*" transitive="false">
+			<artifact name="openlaszlo" type="tgz"/>
+			<include type="tgz" />
+		</dependency>
+		<!--  END OF openlaszlo -->
+		
+		<!--  START OF openlaszlo46 -->
+		<dependency org="org.openlaszlo" name="openlaszlo" rev="4.9.5" conf="openlaszlo46->*" transitive="false">
+			<artifact name="openlaszlo" type="tgz"/>
+			<include type="tgz" />
+		</dependency>
+		<!--  END OF openlaszlo46 -->
+		
+		<!--  START OF Command Line Admin -->
+		<dependency org="commons-cli" name="commons-cli" rev="1.3.1" conf="cmdadmin->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF Command Line Admin -->
+		
+		<!--  START OF MySQL Driver -->
+		<dependency org="mysql" name="mysql-connector-java" rev="5.1.35" conf="mysql->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF MySQL Driver -->
+
+		<!-- MVN --> 
+		<dependency org="org.apache.maven" name="maven-ant-tasks" conf="mvn->*" rev="2.1.3" transitive="false" >
+			<include type="jar" />
+		</dependency>
+
+		<!-- JGIT -->
+		<dependency org="org.eclipse.jgit" name="org.eclipse.jgit.ant" conf="jgit->*" rev="3.6.0.201412230720-r" transitive="true" >
+			<include type="jar" />
+			<exclude org="org.apache.ant"/>
+		</dependency>
+
+		<!-- red5-client -->
+		<dependency org="org.red5" name="red5-client" conf="red5-client->*" rev="1.0.6-RELEASE" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		
+		<!-- tomcat-embed-websocket -->
+		<dependency org="org.apache.tomcat.embed" name="tomcat-embed-websocket" conf="tomcat-embed-websocket->*" rev="8.0.26" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		
+		<exclude org="dom4j" module="dom4j" type="javadoc" ext="*" conf="*" matcher="exact"/>		
+		<exclude org="javax.servlet" module="servlet-api" type="*" ext="*" conf="*" matcher="exact"/>		
+		<exclude org="cglib" module="cglib-nodep" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="pull-parser" module="pull-parser" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="org.apache.mina" module="mina-core" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="com.ibm.websphere" module="websphere_uow_api" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="commons-pool" module="commons-pool" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="org.apache.commons" module="commons-lang3" type="*" ext="*" conf="*" matcher="exact"/>
+	</dependencies>
+</ivy-module>
+
diff --git a/ivysettings.xml b/ivysettings.xml
new file mode 100644
index 0000000..e30bcfe
--- /dev/null
+++ b/ivysettings.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<ivysettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="ivysettings.xsd">
+	<settings defaultResolver="chain"/>
+	<resolvers>
+		<chain name="chain">
+			<ibiblio name="central" m2compatible="true"/>
+			<ibiblio name="apache-public" m2compatible="true" root="https://repository.apache.org/content/groups/public" />
+			<ibiblio name="apache-snapshot" m2compatible="true" root="https://repository.apache.org/content/groups/snapshots" />
+			<url name="mavencentral" m2compatible="true">
+				<artifact pattern="http://repo1.maven.org/maven2/[organisation]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="sonatype" m2compatible="true">
+				<artifact pattern="https://oss.sonatype.org/content/repositories/releases/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="svnkit" m2compatible="true">
+				<artifact pattern="http://maven.tmatesoft.com/content/repositories/releases/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="bintray" m2compatible="true">
+				<artifact pattern="https://dl.bintray.com/openmeetings/maven/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]" />
+			</url>
+			<url name="smslib" m2compatible="true">
+				<artifact pattern="http://smslib.org/maven2/v3/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<!--url name="wicket-jquery-ui" m2compatible="true">
+				<artifact pattern="https://oss.sonatype.org/content/repositories/snapshots/[organisation]/[artifact]/6.18.1-SNAPSHOT/[artifact]-[revision].[ext]" />
+			</url-->
+		</chain>
+	</resolvers>
+	<triggers>
+		<ant-call target="-extract-tgz" prefix="dep" event="post-download-artifact" filter="type=tgz"/>
+	</triggers>
+</ivysettings>
+
diff --git a/ivysettings.xsd b/ivysettings.xsd
new file mode 100644
index 0000000..c506c7d
--- /dev/null
+++ b/ivysettings.xsd
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="ivysettings">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="settings"/>
+        <xs:element ref="resolvers"/>
+        <xs:element ref="triggers" minOccurs="0"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="settings">
+    <xs:complexType>
+      <xs:attribute name="defaultResolver" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="resolvers">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="chain" maxOccurs="unbounded"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="chain">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ibiblio"/>
+        <xs:element maxOccurs="unbounded" ref="url"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ibiblio">
+    <xs:complexType>
+      <xs:attribute name="m2compatible" use="required" type="xs:boolean"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="root" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="url">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="artifact"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="m2compatible" use="optional" type="xs:NCName"/>
+      <xs:attribute name="checksums" use="optional" type="xs:string"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="artifact">
+    <xs:complexType>
+      <xs:attribute name="pattern" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="triggers">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ant-call"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ant-call">
+    <xs:complexType>
+      <xs:attribute name="event" use="required" type="xs:NCName"/>
+      <xs:attribute name="filter" use="required"/>
+      <xs:attribute name="prefix" use="required" type="xs:NCName"/>
+      <xs:attribute name="target" use="required" type="xs:NMTOKEN"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java
new file mode 100644
index 0000000..cd9b0c5
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import javax.servlet.ServletContext;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.openmeetings.servlet.BeanUtil;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+
+public abstract class BaseWebService {
+	private BeanUtil beanUtil = new BeanUtil();
+	
+	private ServletContext getServletContext() throws AxisFault {
+		try {
+			MessageContext mc = MessageContext.getCurrentMessageContext();
+			return (ServletContext) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT);
+		} catch (Exception err) {
+			throw new AxisFault("Servlet context is not available yet, retry in couple of seconds");
+		}
+	}
+	
+	// package access
+	<T> T getBean(Class<? extends T> clazz) throws AxisFault {
+		try {
+			return beanUtil.getBean(clazz, getServletContext());
+		} catch (ServerNotInitializedException e) {
+			throw new AxisFault(e.getMessage());
+		}
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java
new file mode 100644
index 0000000..cc170d7
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java
@@ -0,0 +1,554 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * CalendarService contains methods to create, edit delete calendar meetings
+ * 
+ * @author sebawagner
+ * @webservice CalendarService
+ * 
+ */
+public class CalendarWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarWebService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	private List<AppointmentDTO> getAppointments(List<Appointment> list) {
+		List<AppointmentDTO> result = new ArrayList<>(list.size());
+		for (Appointment a : list) {
+			result.add(new AppointmentDTO(a));
+		}
+		return result;
+	}
+	
+	/**
+	 * Load appointments by a start / end range for the current SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param starttime
+	 *            start time, yyyy-mm-dd
+	 * @param endtime
+	 *            end time, yyyy-mm-dd
+	 *            
+	 * @return - list of appointments in range
+	 */
+	public List<AppointmentDTO> getAppointmentByRange(String SID, Calendar starttime, Calendar endtime) {
+		log.debug("getAppointmentByRange : startdate - " + starttime.getTime() + ", enddate - " + endtime.getTime());
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.getAppointmentsByRange(users_id, starttime.getTime(), endtime.getTime()));
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRange]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Load appointments by a start / end range for the userId
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param userId
+	 *            the userId the calendar events should be loaded
+	 * @param starttime
+	 *            start time, yyyy-mm-dd
+	 * @param endtime
+	 *            end time, yyyy-mm-dd
+	 *            
+	 * @return - list of appointments in range
+	 */
+	public List<AppointmentDTO> getAppointmentByRangeForUserId(String SID, long userId, Calendar starttime, Calendar endtime) {
+		log.debug("getAppointmentByRangeForUserId : startdate - " + starttime.getTime() + ", enddate - " + endtime.getTime());
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.getAppointmentsByRange(userId, starttime.getTime(), endtime.getTime()));
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRangeForUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get the next Calendar event for the current user of the SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @return - next Calendar event
+	 */
+	public AppointmentDTO getNextAppointment(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return new AppointmentDTO(appointmentDao.getNextAppointment(users_id, new Date()));
+			}
+		} catch (Exception err) {
+			log.error("[getNextAppointmentById]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Get the next Calendar event for userId
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 *            
+	 * @return - next Calendar event
+	 */
+	public AppointmentDTO getNextAppointmentForUserId(String SID, long userId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return new AppointmentDTO(appointmentDao.getNextAppointment(userId, new Date()));
+			}
+		} catch (Exception err) {
+			log.error("[getNextAppointmentById]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Search a calendar event for the current SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentName
+	 *            the search string
+	 *            
+	 * @return - calendar event list
+	 */
+	public List<AppointmentDTO> searchAppointmentByTitle(String SID, String appointmentName) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.searchAppointmentsByTitle(users_id, appointmentName));
+			}
+		} catch (Exception err) {
+			log.error("[searchAppointmentByName]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Save an appointment
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentName
+	 *            name of the calendar event
+	 * @param appointmentLocation
+	 *            location info text of the calendar event
+	 * @param appointmentDescription
+	 *            description test of the calendar event
+	 * @param appointmentstart
+	 *            start as Date yyyy-mm-ddThh:mm:ss
+	 * @param appointmentend
+	 *            end as Date yyyy-mm-ddThh:mm:ss
+	 * @param isDaily
+	 *            if the calendar event should be repeated daily (not
+	 *            implemented)
+	 * @param isWeekly
+	 *            if the calendar event should be repeated weekly (not
+	 *            implemented)
+	 * @param isMonthly
+	 *            if the calendar event should be repeated monthly (not
+	 *            implemented)
+	 * @param isYearly
+	 *            if the calendar event should be repeated yearly (not
+	 *            implemented)
+	 * @param categoryId
+	 *            the category id of the calendar event
+	 * @param remind
+	 *            the reminder type of the calendar event
+	 * @param mmClient
+	 *            List of clients, comma separated string, <br/>
+	 *            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *            to add multiple clients you can use the same GET parameter in
+	 *            the URL multiple times, for example:
+	 *            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *             (Please NOTE mmClient value is enclosed in single quotes)
+	 * @param roomType
+	 *            the room type for the calendar event
+	 * @param languageId
+	 *            the language id of the calendar event, notification emails
+	 *            will be send in this language
+	 * @param isPasswordProtected
+	 *            if the room is password protected
+	 * @param password
+	 *            the password for the room
+	 *            
+	 * @return - id of appointment saved
+	 */
+	public Long saveAppointment(String SID, String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId) {
+		//Seems to be create
+		log.debug("saveAppointMent SID:" + SID);
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			log.debug("saveAppointMent users_id:" + users_id);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Appointment a = appointmentLogic.getAppointment(appointmentName, appointmentLocation, appointmentDescription,
+						appointmentstart, appointmentend, isDaily, isWeekly, isMonthly, isYearly, categoryId, remind,
+						mmClient, roomType, languageId, isPasswordProtected, password, roomId, users_id);
+				return appointmentDao.update(a, users_id).getId();
+			} else {
+				log.error("saveAppointment : wrong user level");
+			}
+		} catch (Exception err) {
+			log.error("[saveAppointment]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Update an calendar event time only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentId
+	 *            the calendar event that should be updated
+	 * @param appointmentstart
+	 *            start yyyy-mm-dd
+	 * @param appointmentend
+	 *            end yyyy-mm-dd
+	 * @param languageId
+	 *            the language id
+	 *            
+	 * @return - id of appointment updated
+	 */
+	public Long updateAppointmentTimeOnly(String SID, Long appointmentId, Date appointmentstart, Date appointmentend, Long languageId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+			if (AuthLevelUtil.hasUserLevel(rights)) {
+				Appointment a = appointmentDao.get(appointmentId);
+				if (!AuthLevelUtil.hasAdminLevel(rights) && !a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+				if (!a.getStart().equals(appointmentstart) || !a.getEnd().equals(appointmentend)) {
+					a.setStart(appointmentstart);
+					a.setEnd(appointmentend);
+					//FIXME this might change the owner!!!!!
+					return appointmentDao.update(a, users_id).getId();
+				}					
+			}
+		} catch (Exception err) {
+			log.error("[updateAppointment]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Save an appointment
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentId
+	 *            the id to update
+	 * @param appointmentName
+	 *            name of the calendar event
+	 * @param appointmentLocation
+	 *            location info text of the calendar event
+	 * @param appointmentDescription
+	 *            description test of the calendar event
+	 * @param appointmentstart
+	 *            start as Date yyyy-mm-ddThh:mm:ss
+	 * @param appointmentend
+	 *            end as Date yyyy-mm-ddThh:mm:ss
+	 * @param isDaily
+	 *            if the calendar event should be repeated daily (not
+	 *            implemented)
+	 * @param isWeekly
+	 *            if the calendar event should be repeated weekly (not
+	 *            implemented)
+	 * @param isMonthly
+	 *            if the calendar event should be repeated monthly (not
+	 *            implemented)
+	 * @param isYearly
+	 *            if the calendar event should be repeated yearly (not
+	 *            implemented)
+	 * @param categoryId
+	 *            the category id of the calendar event
+	 * @param remind
+	 *            the reminder type of the calendar event
+	 * @param mmClient
+	 *            List of clients, comma separated string, <br/>
+	 *            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *            to add multiple clients you can use the same GET parameter in
+	 *            the URL multiple times, for example:
+	 *            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *             (Please NOTE mmClient value is enclosed in single quotes)
+	 * @param roomType
+	 *            the room type for the calendar event
+	 * @param languageId
+	 *            the language id of the calendar event, notification emails
+	 *            will be send in this language
+	 * @param isPasswordProtected
+	 *            if the room is password protected
+	 * @param password
+	 *            the password for the room
+	 *            
+	 * @return - id of appointment updated
+	 */
+	public Long updateAppointment(String SID, Long appointmentId,
+			String appointmentName, String appointmentLocation,
+			String appointmentDescription, Calendar appointmentstart,
+			Calendar appointmentend, Boolean isDaily, Boolean isWeekly,
+			Boolean isMonthly, Boolean isYearly, Long categoryId, Long remind,
+			String[] mmClient, Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+
+			if (AuthLevelUtil.hasWebServiceLevel(rights) || AuthLevelUtil.hasAdminLevel(rights)) {
+				// fine
+			} else if (AuthLevelUtil.hasUserLevel(rights)) {
+				// check if the appointment belongs to the current user
+				Appointment a = appointmentDao.get(appointmentId);
+				if (!a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+			} else {
+				throw new AxisFault("Not allowed to preform that action, Authenticate the SID first");
+			}
+
+			Appointment a = appointmentDao.get(appointmentId);
+			a.setTitle(appointmentName);
+			a.setLocation(appointmentLocation);
+			a.setDescription(appointmentDescription);
+			a.setStart(appointmentstart.getTime());
+			a.setEnd(appointmentend.getTime());
+			a.setIsDaily(isDaily);
+			a.setIsWeekly(isWeekly);
+			a.setIsMonthly(isMonthly);
+			a.setIsYearly(isYearly);
+			a.setCategory(appointmentCategoryDao.get(categoryId));
+			a.setRemind(appointmentReminderTypDao.get(remind));
+			a.getRoom().setComment(appointmentDescription);
+			a.getRoom().setName(appointmentName);
+			a.getRoom().setRoomtype(roomTypeDao.get(roomType));
+			a.setOwner(userDao.get(users_id));
+			a.setPasswordProtected(isPasswordProtected);
+			a.setPassword(password);
+			a.setMeetingMembers(new ArrayList<MeetingMember>());
+			for (String singleClient : mmClient) {
+				MeetingMember mm = appointmentLogic.getMeetingMember(users_id, languageId, singleClient);
+				mm.setAppointment(a);
+				a.getMeetingMembers().add(mm);
+			}
+			return appointmentDao.update(a, users_id).getId();
+		} catch (Exception err) {
+			log.error("[updateAppointment]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * delete a calendar event
+	 * 
+	 * If the given SID is from an Administrator or Web-Service user, the user
+	 * can delete any appointment.<br/>
+	 * If the SID is assigned to a simple user, he can only delete appointments
+	 * where he is also the owner/creator of the appointment
+	 * 
+	 * @param SID
+	 *            an authenticated SID
+	 * @param appointmentId
+	 *            the id to delete
+	 * @param language_id
+	 *            the language id in which the notifications for the deleted
+	 *            appointment are send
+	 * @return - id of appointment deleted
+	 */
+	public Long deleteAppointment(String SID, Long appointmentId, Long language_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+
+			Appointment a = appointmentDao.get(appointmentId);
+			if (AuthLevelUtil.hasWebServiceLevel(rights) || AuthLevelUtil.hasAdminLevel(rights)) {
+				// fine
+			} else if (AuthLevelUtil.hasUserLevel(rights)) {
+				// check if the appointment belongs to the current user
+				if (!a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+			} else {
+				throw new AxisFault("Not allowed to preform that action, Authenticate the SID first");
+			}
+			appointmentDao.delete(a, users_id); //FIXME check this !!!!
+			return a.getId();
+		} catch (Exception err) {
+			log.error("[deleteAppointment]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Load a calendar event by its room id
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @return - calendar event by its room id
+	 */
+	public AppointmentDTO getAppointmentByRoomId(String SID, Long room_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Appointment appStored = appointmentDao.getAppointmentByRoomId(users_id, room_id);
+				if (appStored != null) {
+					return new AppointmentDTO(appStored);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRoomId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all categories of calendar events
+	 * 
+	 * @param SID
+	 * @return - all categories of calendar events
+	 */
+	public List<AppointmentCategory> getAppointmentCategoryList(String SID) {
+		log.debug("AppointmenetCategoryService.getAppointmentCategoryList SID : " + SID);
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<AppointmentCategory> res = appointmentCategoryDao.getAppointmentCategoryList();
+
+				if (res == null || res.size() < 1) {
+					log.debug("no AppointmentCategories found");
+				} else {
+					for (int i = 0; i < res.size(); i++) {
+						AppointmentCategory ac = res.get(i);
+						log.debug("found appCategory : " + ac.getName());
+					}
+				}
+
+				return res;
+			} else {
+				log.error("AppointmenetCategoryService.getAppointmentCategoryList : UserLevel Error");
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentCategory]", err);
+		}
+		return null;
+
+	}
+
+	private List<AppointmentReminderTypeDTO> getReminders(List<AppointmentReminderTyps> list) {
+		List<AppointmentReminderTypeDTO> result = new ArrayList<>(list.size());
+		for (AppointmentReminderTyps rt : list) {
+			result.add(new AppointmentReminderTypeDTO(rt));
+		}
+		return result;
+	}
+	/**
+	 * Get all reminder types for calendar events
+	 * 
+	 * @param SID
+	 * @return - all reminder types for calendar events
+	 */
+	public List<AppointmentReminderTypeDTO> getAppointmentReminderTypList(String SID) {
+		log.debug("getAppointmentReminderTypList");
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				User user = userDao.get(users_id);
+				long language_id = (user == null) ? 1 : user.getLanguage_id();
+				return getReminders(appointmentReminderTypDao.getAppointmentReminderTypList(language_id));
+			} else
+				log.debug("getAppointmentReminderTypList  :error - wrong authlevel!");
+		} catch (Exception err) {
+			log.error("[getAppointmentReminderTypList]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java
new file mode 100644
index 0000000..b3263b2
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+
+public class CalendarWebServiceFacade extends BaseWebService {
+	
+	public List<AppointmentDTO> getAppointmentByRange(String SID, Calendar starttime, Calendar endtime) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRange(SID, starttime, endtime);
+	}
+
+	public List<AppointmentDTO> getAppointmentByRangeForUserId(String SID, long userId, Calendar starttime, Calendar endtime) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRangeForUserId(SID, userId, starttime, endtime);
+	}
+
+	public AppointmentDTO getNextAppointment(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getNextAppointment(SID);
+	}
+
+	public AppointmentDTO getNextAppointmentForUserId(String SID, long userId) throws AxisFault {
+		return getBean(CalendarWebService.class).getNextAppointmentForUserId(SID, userId);
+	}
+
+	public List<AppointmentDTO> searchAppointmentByTitle(String SID, String appointmentName) throws AxisFault {
+		return getBean(CalendarWebService.class).searchAppointmentByTitle(SID, appointmentName);
+	}
+
+	public Long saveAppointment(String SID, String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId) throws AxisFault {
+		return getBean(CalendarWebService.class).saveAppointment(SID, appointmentName,
+				appointmentLocation, appointmentDescription, appointmentstart,
+				appointmentend, isDaily, isWeekly, isMonthly, isYearly,
+				categoryId, remind, mmClient, roomType, languageId,
+				isPasswordProtected, password, roomId);
+	}
+
+	public Long updateAppointmentTimeOnly(String SID, Long appointmentId, Date appointmentstart, Date appointmentend, Long languageId) throws AxisFault {
+		return getBean(CalendarWebService.class).updateAppointmentTimeOnly(SID, appointmentId, appointmentstart, appointmentend, languageId);
+	}
+
+	public Long updateAppointment(String SID, Long appointmentId,
+			String appointmentName, String appointmentLocation,
+			String appointmentDescription, Calendar appointmentstart,
+			Calendar appointmentend, Boolean isDaily, Boolean isWeekly,
+			Boolean isMonthly, Boolean isYearly, Long categoryId, Long remind,
+			String[] mmClient, Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password) throws AxisFault {
+		return getBean(CalendarWebService.class).updateAppointment(SID, appointmentId,
+				appointmentName, appointmentLocation, appointmentDescription,
+				appointmentstart, appointmentend, isDaily, isWeekly, isMonthly,
+				isYearly, categoryId, remind, mmClient, roomType, languageId, isPasswordProtected, password);
+	}
+
+	public Long deleteAppointment(String SID, Long appointmentId, Long language_id) throws AxisFault {
+		return getBean(CalendarWebService.class).deleteAppointment(SID, appointmentId, language_id);
+	}
+
+	public AppointmentDTO getAppointmentByRoomId(String SID, Long room_id) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRoomId(SID, room_id);
+	}
+
+	public List<AppointmentCategory> getAppointmentCategoryList(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentCategoryList(SID);
+	}
+
+	public List<AppointmentReminderTypeDTO> getAppointmentReminderTypList(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentReminderTypList(SID);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java
new file mode 100644
index 0000000..b240299
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java
@@ -0,0 +1,1017 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.LinkedHashMap;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.file.FileProcessor;
+import org.apache.openmeetings.data.file.FileUtils;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.FileExplorerObject;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.documents.LoadLibraryPresentation;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.FileImportError;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Contains methods to import and upload files into the Files section of the
+ * conference room and the personal drive of any user
+ * 
+ * @author sebawagner
+ * @webservice FileService
+ * 
+ */
+public class FileWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(FileWebService.class, webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private FileProcessor fileProcessor;
+	@Autowired
+	private FileUtils fileUtils;
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: externalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: externalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID The logged in session id with minimum webservice level
+	 * @param externalUserId
+	 *            the external user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 *            
+	 * @return - array of file import errors
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFile(String SID, String externalUserId,
+			Long externalFileId, String externalType, Long room_id,
+			boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				URL url = new URL(path);
+				URLConnection uc = url.openConnection();
+				InputStream inputstream = new BufferedInputStream(
+						uc.getInputStream());
+
+				User externalUser = userDao.getExternalUser(externalUserId, externalType);
+
+				LinkedHashMap<String, Object> hs = new LinkedHashMap<String, Object>();
+				hs.put("user", externalUser);
+
+				ConverterProcessResultList returnError = fileProcessor
+						.processFile(externalUser.getUser_id(), room_id,
+								isOwner, inputstream, parentFolderId,
+								fileSystemName,
+								externalFileId, externalType);
+
+				// Flash cannot read the response of an upload
+				// httpServletResponse.getWriter().print(returnError);
+				hs.put("message", "library");
+				hs.put("action", "newFile");
+				hs.put("fileExplorerItem", fileExplorerItemDao
+						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("error", returnError.getLogMessage());
+				hs.put("fileName", returnError.getCompleteName());
+				
+				//FIXME: Send event to UI that there is a new file
+
+				return returnError.convertToFileImportErrors();
+
+			}
+		} catch (Exception err) {
+			log.error("[importFile]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: internalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: internalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param internalUserId
+	 *            the openmeetings user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be se
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 *            
+	 * @return - array of file import errors
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFileByInternalUserId(String SID,
+			Long internalUserId, Long externalFileId, String externalType,
+			Long room_id, boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				URL url = new URL(path);
+				URLConnection uc = url.openConnection();
+				InputStream inputstream = new BufferedInputStream(
+						uc.getInputStream());
+
+				User internalUser = userDao.get(internalUserId);
+
+				LinkedHashMap<String, Object> hs = new LinkedHashMap<String, Object>();
+				hs.put("user", internalUser);
+
+				ConverterProcessResultList returnError = fileProcessor
+						.processFile(internalUser.getUser_id(), room_id,
+								isOwner, inputstream, parentFolderId,
+								fileSystemName, 
+								externalFileId, externalType);
+
+				// Flash cannot read the response of an upload
+				// httpServletResponse.getWriter().print(returnError);
+				hs.put("message", "library");
+				hs.put("action", "newFile");
+				hs.put("fileExplorerItem", fileExplorerItemDao
+						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("error", returnError);
+				hs.put("fileName", returnError.getCompleteName());
+				
+				//FIXME: Notificate UI of clients of new file
+
+				return returnError.convertToFileImportErrors();
+
+			}
+		} catch (Exception err) {
+			log.error("[importFileByInternalUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and externalUserId/externalUserType to a valid user
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param externalUserId
+	 *            the external file-type to identify the file later
+	 * @param parentFileExplorerItemId
+	 * @param folderName
+	 *            the name of the folder
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param externalFilesid
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 *            
+	 * @return - id of folder added
+	 * @throws AxisFault
+	 */
+	public Long addFolderByExternalUserIdAndType(String SID,
+			String externalUserId, Long parentFileExplorerItemId,
+			String folderName, Long room_id, Boolean isOwner,
+			Long externalFilesid, String externalType) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				User userExternal = userDao.getExternalUser(externalUserId, externalType);
+
+				Long userId = userExternal.getUser_id();
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == -2 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(folderName, "", 0L, userId,
+							room_id, userId, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				} else {
+					return fileExplorerItemDao.add(folderName, "",
+							parentFileExplorerItemId, null, room_id, userId,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[addFolderByExternalUserIdAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and userId to a valid user
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as logged in
+	 * @param userId the openmeetings user id 
+	 * @param parentFileExplorerItemId specify a parentFolderId==-2 AND isOwner == 1/true AND to make the file goto the private section  
+	 * @param folderName the name of the folder 
+	 * @param room_id the room Id, if the file goes to the private folder of an user, you can set a random number here 
+	 * @param isOwner specify a 1/true AND parentFolderId==-2 to make the file goto the private section 
+	 * @param externalFilesid the external file-type to identify the file later 
+	 * @param externalType the name of the external system
+	 *  
+	 * @return - id of the folder
+	 * @throws AxisFault
+	 */
+	public Long addFolderByUserId(String SID, Long userId,
+			Long parentFileExplorerItemId, String folderName, Long room_id,
+			Boolean isOwner, Long externalFilesid, String externalType)
+			throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == -2 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(folderName, "", 0L, userId,
+							room_id, userId, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				} else {
+					return fileExplorerItemDao.add(folderName, "",
+							parentFileExplorerItemId, null, room_id, userId,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[addFolderByUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * Add a folder by the current user - similar to RTMP Call
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            parent folder id
+	 * @param fileName
+	 *            the file name
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 * @return - id of the folder
+	 */
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+			String fileName, Long room_id, Boolean isOwner) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(fileName, "",
+							parentFileExplorerItemId, users_id, room_id,
+							users_id, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false // isXmlFile
+							, 0L, "");
+				} else {
+					return fileExplorerItemDao.add(fileName, "",
+							parentFileExplorerItemId, null, room_id, users_id,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Paht
+							false, // isStoredWML file
+							false // isXmlFile
+							, 0L, "");
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParent] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes a file by its external Id and type
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param externalFilesid
+	 *            the od of the file or folder
+	 * @param externalType
+	 *            the externalType
+	 * @return - null
+	 */
+	public Long deleteFileOrFolderByExternalIdAndType(String SID,
+			Long externalFilesid, String externalType) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				fileExplorerItemDao.deleteFileExplorerItemByExternalIdAndType(
+						externalFilesid, externalType);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolderByExternalIdAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            the id of the file or folder
+	 * @return - null
+	 */
+	public Long deleteFileOrFolder(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolder]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            the id of the file or folder
+	 * @return - null
+	 */
+	public Long deleteFileOrFolderSelf(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				// TODO: Check if user has access or not to the file
+
+				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolder]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get available import File Extension allowed during import
+	 * 
+	 * @return the array of the import file extensions
+	 * @throws AxisFault
+	 */
+	public String[] getImportFileExtensions() throws AxisFault {
+		try {
+
+			return StoredFile.getExtensions();
+
+		} catch (Exception err) {
+			log.error("[getImportFileExtensions]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get a LibraryPresentation-Object for a certain file
+	 * 
+	 * @param SID
+	 * @param parentFolder
+	 * 
+	 * @return - LibraryPresentation-Object for a certain file
+	 * @throws AxisFault
+	 */
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				File working_dir = new File(OmFileHelper.getUploadProfilesDir(), parentFolder);
+				log.debug("############# working_dir : " + working_dir);
+
+				File file = new File(working_dir, OmFileHelper.libraryFileName);
+
+				if (!file.exists()) {
+					throw new Exception(file.getCanonicalPath() + ": does not exist ");
+				}
+
+				return LoadLibraryPresentation.parseLibraryFileToObject(file);
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getListOfFilesByAbsolutePath]", e);
+			return null;
+		}
+
+	}
+
+	/**
+	 * Get a File Explorer Object by a given Room and owner id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param room_id
+	 *            Room id
+	 * @param owner_id
+	 *            Owner id
+	 * @return - File Explorer Object by a given Room and owner id
+	 * @throws AxisFault
+	 */
+	public FileExplorerObject getFileExplorerByRoom(String SID, Long room_id,
+			Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("room_id " + room_id);
+
+				FileExplorerObject fileExplorerObject = new FileExplorerObject();
+
+				// Home File List
+				FileExplorerItem[] fList = fileExplorerItemDao
+						.getFileExplorerItemsByOwner(owner_id, 0L);
+
+				long homeFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : fList) {
+					log.debug("FileExplorerItem fList "
+							+ homeChildExplorerItem.getFileName());
+					homeFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setUserHome(fList);
+				fileExplorerObject.setUserHomeSize(homeFileSize);
+
+				// Public File List
+				FileExplorerItem[] rList = fileExplorerItemDao
+						.getFileExplorerItemsByRoom(room_id, 0L);
+
+				long roomFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : rList) {
+					log.debug("FileExplorerItem rList "
+							+ homeChildExplorerItem.getFileName());
+					roomFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setRoomHome(rList);
+				fileExplorerObject.setRoomHomeSize(roomFileSize);
+
+				return fileExplorerObject;
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getFileExplorerByRoom]", e);
+			return null;
+		}
+	}
+
+	/**
+	 * Get a File Explorer Object by a given Room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param room_id
+	 *            Room Id
+	 * @return - File Explorer Object by a given Room
+	 * @throws AxisFault
+	 */
+	public FileExplorerObject getFileExplorerByRoomSelf(String SID, Long room_id)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("room_id " + room_id);
+
+				FileExplorerObject fileExplorerObject = new FileExplorerObject();
+
+				// Home File List
+				FileExplorerItem[] fList = fileExplorerItemDao
+						.getFileExplorerItemsByOwner(users_id, 0L);
+
+				long homeFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : fList) {
+					log.debug("FileExplorerItem fList "
+							+ homeChildExplorerItem.getFileName());
+					homeFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setUserHome(fList);
+				fileExplorerObject.setUserHomeSize(homeFileSize);
+
+				// Public File List
+				FileExplorerItem[] rList = fileExplorerItemDao
+						.getFileExplorerItemsByRoom(room_id, 0L);
+
+				long roomFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : rList) {
+					log.debug("FileExplorerItem rList "
+							+ homeChildExplorerItem.getFileName());
+					roomFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setRoomHome(rList);
+				fileExplorerObject.setRoomHomeSize(roomFileSize);
+
+				return fileExplorerObject;
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getFileExplorerByRoomSelf]", e);
+			return null;
+		}
+	}
+
+	/**
+	 * Get FileExplorerItem list by parent folder
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            the parent folder id
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 *            true if its a private drive
+	 * @param owner_id
+	 *            the owner id
+	 * @return - FileExplorerItem list by parent folder
+	 * @throws AxisFault
+	 */
+	public FileExplorerItem[] getFileExplorerByParent(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("parentFileExplorerItemId "
+						+ parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0) {
+					if (isOwner) {
+						return fileExplorerItemDao.getFileExplorerItemsByOwner(
+								owner_id, parentFileExplorerItemId);
+					} else {
+						return fileExplorerItemDao.getFileExplorerItemsByRoom(
+								room_id, parentFileExplorerItemId);
+					}
+				} else {
+					return fileExplorerItemDao
+							.getFileExplorerItemsByParent(parentFileExplorerItemId);
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParent] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * Get FileExplorerItem[] by parent and owner id
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            the parent folder id
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 *            true to request private drive
+	 * @return - list of file explorer items
+	 * @throws AxisFault
+	 */
+	public FileExplorerItem[] getFileExplorerByParentSelf(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("parentFileExplorerItemId "
+						+ parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0) {
+					if (isOwner) {
+						return fileExplorerItemDao.getFileExplorerItemsByOwner(
+								users_id, parentFileExplorerItemId);
+					} else {
+						return fileExplorerItemDao.getFileExplorerItemsByRoom(
+								room_id, parentFileExplorerItemId);
+					}
+				} else {
+					return fileExplorerItemDao
+							.getFileExplorerItemsByParent(parentFileExplorerItemId);
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParentSelf] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * update a file or folder name
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            file or folder id
+	 * @param fileName
+	 *            new file or folder name
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long updateFileOrFolderName(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao.updateFileOrFolderName(fileExplorerItemId,
+						fileName);
+
+			}
+		} catch (Exception err) {
+			log.error("[updateFileOrFolderName] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * update a file or folder name
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            file or folder id
+	 * @param fileName
+	 *            new file or folder name
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				// TODO: check if this user is allowed to change this file
+				/*
+				 * FileExplorerItem fileExItem =
+				 * fileExplorerItemDao.getFileExplorerItemsById
+				 * (fileExplorerItemId);
+				 * 
+				 * if (fileExItem.getOwnerId() != null &&
+				 * !fileExItem.getOwnerId().equals(users_id)) { throw new
+				 * Exception(
+				 * "This user is not the owner of the file and not allowed to edit its name"
+				 * ); }
+				 */
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao.updateFileOrFolderName(fileExplorerItemId,
+						fileName);
+
+			}
+		} catch (Exception err) {
+			log.error("[updateFileOrFolderNameSelf] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * move a file or folder
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            current file or folder id to be moved
+	 * @param newParentFileExplorerItemId
+	 *            new parent folder id
+	 * @param room_id
+	 *            room id
+	 * @param isOwner
+	 *            if true owner id will be set
+	 * @param moveToHome
+	 *            if true move to private drive
+	 * @param owner_id
+	 *            owner id
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long moveFile(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome, Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao
+						.moveFile(fileExplorerItemId,
+								newParentFileExplorerItemId, room_id, isOwner,
+								owner_id);
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				if (moveToHome) {
+					// set this file and all subfiles and folders the ownerId
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							owner_id, null);
+
+				} else {
+					// set this file and all subfiles and folders the room_id
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							null, room_id);
+
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[moveFile] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * move a file or folder
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            current file or folder id to be moved
+	 * @param newParentFileExplorerItemId
+	 *            new parent folder id
+	 * @param room_id
+	 *            room id
+	 * @param isOwner
+	 *            if true owner id will be set
+	 * @param moveToHome
+	 *            move to private drive
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long moveFileSelf(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				
+				// A test is required that checks if the user is allowed to move the file
+
+				log.debug("moveFileSelf " + fileExplorerItemId);
+
+				fileExplorerItemDao
+						.moveFile(fileExplorerItemId,
+								newParentFileExplorerItemId, room_id, isOwner,
+								users_id);
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				if (moveToHome) {
+					// set this file and all subfiles and folders the ownerId
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							users_id, null);
+
+				} else {
+					// set this file and all subfiles and folders the room_id
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							null, room_id);
+
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[moveFile] ", err);
+		}
+		return null;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java
new file mode 100644
index 0000000..92a3083
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java
@@ -0,0 +1,323 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.file.FileExplorerObject;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.process.FileImportError;
+
+public class FileWebServiceFacade extends BaseWebService {
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: externalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: externalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 *            the external user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 * @return
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFile(String SID, String externalUserId,
+			Long externalFileId, String externalType, Long room_id,
+			boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		return getBean(FileWebService.class).importFile(SID, externalUserId,
+				externalFileId, externalType, room_id, isOwner, path,
+				parentFolderId, fileSystemName);
+	}
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: internalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: internalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 * @param internalUserId
+	 *            the openmeetings user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 * @return
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFileByInternalUserId(String SID,
+			Long internalUserId, Long externalFileId, String externalType,
+			Long room_id, boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		return getBean(FileWebService.class).importFileByInternalUserId(SID,
+				internalUserId, externalFileId, externalType, room_id, isOwner,
+				path, parentFolderId, fileSystemName);
+	}
+
+	/**
+	 * 
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and externalUserId/externalUserType to a valid user
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addFolderByExternalUserIdAndType(String SID,
+			String externalUserId, Long parentFileExplorerItemId,
+			String folderName, Long room_id, Boolean isOwner,
+			Long externalFilesid, String externalType) throws AxisFault {
+		return getBean(FileWebService.class).addFolderByExternalUserIdAndType(SID,
+				externalUserId, parentFileExplorerItemId, folderName, room_id,
+				isOwner, externalFilesid, externalType);
+
+	}
+
+	/**
+	 * 
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and userId to a valid user
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addFolderByUserId(String SID, Long userId,
+			Long parentFileExplorerItemId, String folderName, Long room_id,
+			Boolean isOwner, Long externalFilesid, String externalType)
+			throws AxisFault {
+		return getBean(FileWebService.class).addFolderByUserId(SID, userId,
+				parentFileExplorerItemId, folderName, room_id, isOwner,
+				externalFilesid, externalType);
+	}
+
+	/**
+	 * 
+	 * Add a folder by the current user - similar to RTMP Call
+	 * 
+	 * @param SID
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @return
+	 */
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+			String fileName, Long room_id, Boolean isOwner) throws AxisFault {
+		return getBean(FileWebService.class).addFolderSelf(SID,
+				parentFileExplorerItemId, fileName, room_id, isOwner);
+	}
+	
+	public Long addFolderSelfInternal(String SID, Long parentFileExplorerItemId,
+			String fileName, Long roomId, Boolean isOwner) throws AxisFault {
+		return getBean(FileWebService.class).addFolderSelf(SID,
+				parentFileExplorerItemId, fileName, roomId, isOwner);
+	}
+	
+
+	/**
+	 * 
+	 * deletes a file by its external Id and type
+	 * 
+	 * @param SID
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 */
+	public Long deleteFileOrFolderByExternalIdAndType(String SID,
+			Long externalFilesid, String externalType) throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolderByExternalIdAndType(
+				SID, externalFilesid, externalType);
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 * @param fileExplorerItemId
+	 * @return
+	 */
+	public Long deleteFileOrFolder(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolder(SID,
+				fileExplorerItemId);
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 * @param fileExplorerItemId
+	 * @return
+	 */
+	public Long deleteFileOrFolderSelf(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolderSelf(SID,
+				fileExplorerItemId);
+	}
+
+	public String[] getImportFileExtensions() throws AxisFault {
+		return getBean(FileWebService.class).getImportFileExtensions();
+	}
+
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) throws AxisFault {
+		return getBean(FileWebService.class).getPresentationPreviewFileExplorer(
+				SID, parentFolder);
+	}
+
+	public FileExplorerObject getFileExplorerByRoom(String SID, Long room_id,
+			Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByRoom(SID, room_id,
+				owner_id);
+	}
+
+	public FileExplorerObject getFileExplorerByRoomSelf(String SID, Long room_id)
+			throws AxisFault {
+		return getBean(FileWebService.class)
+				.getFileExplorerByRoomSelf(SID, room_id);
+	}
+	
+	public FileExplorerObject getFileExplorerByRoomSelfInternal(String SID, Long roomId)
+			throws AxisFault {
+		return getBean(FileWebService.class)
+				.getFileExplorerByRoomSelf(SID, roomId);
+	}
+
+	public FileExplorerItem[] getFileExplorerByParent(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParent(SID,
+				parentFileExplorerItemId, room_id, isOwner, owner_id);
+	}
+
+	public FileExplorerItem[] getFileExplorerByParentSelf(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner)
+			throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParentSelf(SID,
+				parentFileExplorerItemId, room_id, isOwner);
+	}
+	
+	public FileExplorerItem[] getFileExplorerByParentSelfInternal(String SID,
+			Long parentFileExplorerItemId, Long roomId, Boolean isOwner)
+			throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParentSelf(SID,
+				parentFileExplorerItemId, roomId, isOwner);
+	}
+
+	public Long updateFileOrFolderName(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+		return getBean(FileWebService.class).updateFileOrFolderName(SID,
+				fileExplorerItemId, fileName);
+	}
+
+	public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+		return getBean(FileWebService.class).updateFileOrFolderNameSelf(SID,
+				fileExplorerItemId, fileName);
+	}
+
+	public Long moveFile(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome, Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).moveFile(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, room_id, isOwner, moveToHome,
+				owner_id);
+	}
+
+	public Long moveFileSelf(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+		return getBean(FileWebService.class).moveFileSelf(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, room_id, isOwner, moveToHome);
+	}
+	
+	public Long moveFileSelfInternal(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long roomId, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+		return getBean(FileWebService.class).moveFileSelf(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, roomId, isOwner, moveToHome);
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java
new file mode 100644
index 0000000..3f940d6
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.ConferenceService;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * This class provides method implementations necessary for OM to Jabber integration.
+ * 
+ * @author solomax
+ * @webservice JabberService
+ *
+ */
+public class JabberWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			JabberWebService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConferenceService conferenceService;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private RoomDao roomDao;
+
+	/**
+	 * Get List&lt;RoomDTO&gt; of all rooms available to the user.
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @return List&lt;RoomDTO&gt; of Rooms
+	 */
+	public List<RoomDTO> getAvailableRooms(String SID) {
+		log.debug("getAvailableRooms enter");
+		
+		List<Room> rl = new ArrayList<Room>();
+		List<Room> al = conferenceService.getAppointedMeetingRoomsWithoutType(SID);
+		if (al != null) {
+			rl.addAll(al);
+		}
+
+		List<Room> pbl = conferenceService.getRoomsPublicWithoutType(SID);
+		if (pbl != null) {
+			rl.addAll(pbl);
+		}
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		User u = userDao.get(users_id);
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			List<RoomOrganisation> rol = conferenceService.getRoomsByOrganisationWithoutType(SID
+					, ou.getOrganisation().getOrganisation_id().longValue());
+			if (rol != null) {
+				for (RoomOrganisation ro : rol) {
+					rl.add(ro.getRoom());
+				}
+			}
+		}
+		List<RoomDTO> result = new ArrayList<RoomDTO>();
+		for (Room r : rl) {
+			r.setCurrentusers(null);
+			result.add(new RoomDTO(r));
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the count of users currently in the Room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @param roomId id of the room to get users
+	 * @return number of users as int
+	 */
+	public int getUserCount(String SID, Long roomId) {
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return conferenceService.getRoomClientsListByRoomId(roomId).size();
+		}
+		return -1;
+	}
+
+	/**
+	 * Get invitation hash for the room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @param username The name of invited user, will be displayed in the rooms user list
+	 * @param room_id id of the room to get users
+	 * @return hash to enter the room
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			User invitee = userDao.getContact(username, username, username, users_id);
+			Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+							false, "", Valid.OneTime, userDao.get(users_id), 1L, null, null, null);
+	
+			return ((invitation == null) ? null : invitation.getHash());
+		} else {
+			return "Need Admin Privileges to perfom the Action";
+		}
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java
new file mode 100644
index 0000000..919bab6
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+
+/**
+ * This class provides method entry points necessary for OM to Jabber integration.
+ * 
+ * @author solomax
+ *
+ */
+public class JabberWebServiceFacade extends BaseWebService {
+	
+	/**
+	 * Get list of all rooms available to the user.
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @return array of Rooms
+	 * @throws AxisFault 
+	 */
+	public List<RoomDTO> getAvailableRooms(String SID) throws AxisFault {
+		return getBean(JabberWebService.class).getAvailableRooms(SID);
+	}
+
+	/**
+	 * Returns the count of users currently in the Room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @param roomId id of the room to get users
+	 * @return number of users as int
+	 * @throws AxisFault 
+	 */
+	public int getUserCount(String SID, Long roomId) throws AxisFault {
+		return getBean(JabberWebService.class).getUserCount(SID, roomId);
+	}
+
+	/**
+	 * Get invitation hash for the room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @param username The name of invited user, will be displayed in the rooms user list
+	 * @param room_id id of the room to get users
+	 * @return hash to enter the room
+	 * @throws AxisFault 
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id) throws AxisFault {
+		return getBean(JabberWebService.class)
+				.getInvitationHash(SID, username, room_id);
+	}
+}
\ No newline at end of file
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java
new file mode 100644
index 0000000..caf558a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+public class RoomCountBean {
+	
+	private long roomId;
+	private String roomName;
+	private Integer roomCount;
+	private Integer maxUser;
+	
+	public long getRoomId() {
+		return roomId;
+	}
+	public void setRoomId(long roomId) {
+		this.roomId = roomId;
+	}
+	public String getRoomName() {
+		return roomName;
+	}
+	public void setRoomName(String roomName) {
+		this.roomName = roomName;
+	}
+	public Integer getRoomCount() {
+		return roomCount;
+	}
+	public void setRoomCount(Integer roomCount) {
+		this.roomCount = roomCount;
+	}
+	public Integer getMaxUser() {
+		return maxUser;
+	}
+	public void setMaxUser(Integer maxUser) {
+		this.maxUser = maxUser;
+	}
+	
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java
new file mode 100644
index 0000000..e86f4f7
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Date;
+
+public class RoomReturn {
+
+	private Long room_id;
+	private String name;
+	private String creator;
+	private Date created;
+	private RoomUser[] roomUser;
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long roomId) {
+		room_id = roomId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreated() {
+		return created;
+	}
+
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	public RoomUser[] getRoomUser() {
+		return roomUser;
+	}
+
+	public void setRoomUser(RoomUser[] roomUser) {
+		this.roomUser = roomUser;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java
new file mode 100644
index 0000000..042be0a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+public class RoomUser {
+	
+	private String firstname;
+	private String lastname;
+	private String publicSID;
+	private long broadcastId;
+	private Boolean isBroadCasting;
+	private String avsettings;
+	
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	public Boolean getIsBroadCasting() {
+		return isBroadCasting;
+	}
+	public void setIsBroadCasting(Boolean isBroadCasting) {
+		this.isBroadCasting = isBroadCasting;
+	}
+	public String getAvsettings() {
+		return avsettings;
+	}
+	public void setAvsettings(String avsettings) {
+		this.avsettings = avsettings;
+	}
+	public String getPublicSID() {
+		return publicSID;
+	}
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+	public long getBroadcastId() {
+		return broadcastId;
+	}
+	public void setBroadcastId(long broadcastId) {
+		this.broadcastId = broadcastId;
+	}
+	
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java
new file mode 100644
index 0000000..a25b060
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java
@@ -0,0 +1,2161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingDTO;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.room.RoomSearchResult;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.ConferenceService;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * RoomService contains methods to manipulate rooms and create invitation hash
+ * 
+ * @author sebawagner
+ * @webservice RoomService
+ * 
+ */
+public class RoomWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomWebService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ConferenceService conferenceService;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * Returns an Object of Type RoomsList which contains a list of
+	 * Room-Objects. Every Room-Object contains a Roomtype and all informations
+	 * about that Room. The List of current-users in the room is Null if you get
+	 * them via SOAP. The Roomtype can be 1 for conference rooms or 2 for
+	 * audience rooms.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param roomtypes_id
+	 * @return - list of public rooms
+	 * @throws AxisFault
+	 */
+	public List<RoomDTO> getRoomsPublic(String SID, Long roomtypes_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RoomDTO.list(roomDao.getPublicRooms(roomtypes_id));
+			}
+			return null;
+		} catch (Exception err) {
+			log.error("[getRoomsPublic] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Deletes a flv recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param flvRecordingId
+	 *            the id of the recording
+	 *            
+	 * @return - true if recording was deleted
+	 * @throws AxisFault
+	 */
+	public boolean deleteFlvRecording(String SID, Long flvRecordingId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return flvRecordingDao.delete(flvRecordingId);
+			}
+			return false;
+		} catch (Exception err) {
+			log.error("[deleteFlvRecording] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as Loggedin
+	 * @param externalUserId the externalUserId
+	 * @param externalUsertype the externalUserType
+	 *            
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalUserId(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalUserId(externalUserId, externalUserType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalUserId] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @param insertedBy
+	 *            the userId that created the recording
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeAndCreator(
+			String SID, String externalRoomType, Long insertedBy)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomTypeAndCreator(externalRoomType, insertedBy));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomTypeAndCreator] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeByList(
+			String SID, String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomType(externalRoomType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomTypeByList] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged-in
+	 * @param externalType
+	 *            externalType specified when creating room or user
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getRecordingsByExternalType(String SID, String externalType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getRecordingsByExternalType(externalType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getRecordingsByExternalType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomType(String SID, String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomType(externalRoomType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Get list of recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param roomId
+	 *            the room id
+	 * @return - list of recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByRoomId(String SID, Long roomId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByRoomId(roomId));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * List of available room types
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @return - List of available room types
+	 * @throws AxisFault
+	 */
+	public List<RoomType> getRoomTypes(String SID) throws AxisFault {
+		try {
+			return conferenceService.getRoomTypes(SID);
+		} catch (Exception err) {
+			log.error("[getRoomTypes]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Returns current users for rooms ids
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param roomId
+	 * @return - current users for rooms ids
+	 * @throws AxisFault
+	 */
+	public List<RoomCountBean> getRoomCounters(String SID, Integer[] roomId) throws AxisFault {
+		List<RoomCountBean> roomBeans = new ArrayList<RoomCountBean>();
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				List<Integer> roomIds = new ArrayList<Integer>();
+
+				if (roomId != null) {
+					for (Integer id : roomId) {
+						if (id != null && id > 0) {
+							log.debug("roomId :: " + id);
+							roomIds.add(id);
+						}
+					}
+				}
+
+				List<Room> rooms = roomManager.getRoomsByIds(roomIds);
+
+				for (Room room : rooms) {
+					RoomCountBean rCountBean = new RoomCountBean();
+					rCountBean.setRoomId(room.getRooms_id());
+					rCountBean.setRoomName(room.getName());
+					rCountBean.setMaxUser(room.getNumberOfPartizipants().intValue());
+					rCountBean.setRoomCount(sessionManager.getClientListByRoom(room.getRooms_id()).size());
+
+					roomBeans.add(rCountBean);
+				}
+
+			} else {
+				log.error("Not authorized");
+			}
+		} catch (Exception err) {
+			log.error("[getRoomTypes]", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return roomBeans;
+	}
+
+	/**
+	 * returns a conference room object
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id - the room id
+	 * @return - room with the id given
+	 */
+	public RoomDTO getRoomById(String SID, long rooms_id) {
+		return new RoomDTO(conferenceService.getRoomById(SID, rooms_id));
+	}
+
+	/**
+	 * Returns a object of type RoomReturn
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id
+	 * @return - object of type RoomReturn
+	 * @throws AxisFault
+	 */
+	public RoomReturn getRoomWithClientObjectsById(String SID, long rooms_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Room room = roomDao.get(rooms_id);
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setCreated(room.getStarttime());
+				roomReturn.setCreator(null);
+				roomReturn.setName(room.getName());
+				roomReturn.setRoom_id(room.getRooms_id());
+
+				List<Client> map = sessionManager
+						.getClientListByRoom(room.getRooms_id());
+
+				RoomUser[] roomUsers = new RoomUser[map.size()];
+
+				int i = 0;
+				for (Client rcl : map) {
+					RoomUser roomUser = new RoomUser();
+					roomUser.setFirstname(rcl.getFirstname());
+					roomUser.setLastname(rcl.getLastname());
+					roomUser.setBroadcastId(rcl.getBroadCastID());
+					roomUser.setPublicSID(rcl.getPublicSID());
+					roomUser.setIsBroadCasting(rcl.getIsBroadcasting());
+					roomUser.setAvsettings(rcl.getAvsettings());
+
+					roomUsers[i++] = roomUser;
+				}
+
+				roomReturn.setRoomUser(roomUsers);
+
+				return roomReturn;
+			}
+
+			return null;
+
+		} catch (Exception err) {
+			log.error("[getRoomWithClientObjectsById]", err);
+			throw new AxisFault(err.getMessage());
+		}
+
+	}
+
+	/**
+	 * Returns a List of Objects of Rooms You can use "name" as value for
+	 * orderby or rooms_id
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param start - The id you want to start
+	 * @param max - The maximum you want to get
+	 * @param orderby - The column it will be ordered
+	 * @param asc - Asc or Desc sort ordering
+	 *            
+	 * @return - List of Objects of Rooms
+	 */
+	public RoomSearchResult getRooms(String SID, int start, int max, String orderby, boolean asc) {
+		return new RoomSearchResult(conferenceService.getRooms(SID, start, max, orderby, asc, ""));
+	}
+
+	/**
+	 * Returns a List of Objects of Rooms You can use "name" as value for
+	 * orderby or rooms_id. It also fills the attribute currentUsers in the
+	 * Room-Object
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param start - The id you want to start
+	 * @param max - The maximum you want to get
+	 * @param orderby - The column it will be ordered
+	 * @param asc - Asc or Desc sort ordering
+	 *            
+	 * @return - List of Objects of Rooms
+	 */
+	public RoomSearchResult getRoomsWithCurrentUsers(String SID, int start, int max, String orderby, boolean asc) {
+		return new RoomSearchResult(conferenceService.getRoomsWithCurrentUsers(SID, start, max, orderby, asc));
+	}
+
+	// TODO: Add functions to get Users of a Room
+
+	/**
+	 * Create a conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 *            
+	 * @return - id of the room or error code
+	 */
+	public Long addRoomWithModeration(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null, true,
+						false, true, false //isClosed
+						, "", "", null, null,
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * this SOAP Method has an additional param to enable or disable the buttons
+	 * to apply for moderation this does only work in combination with the
+	 * room-type restricted
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 *            
+	 * @return - id of the room or error code
+	 */
+	public Long addRoomWithModerationAndQuestions(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, false, true, false //isClosed
+						, "", "", null,
+						null, 
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndQuestions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * adds a new room with options for user questions and audio only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * 
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationQuestionsAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, isAudioOnly, true, false //isClosed
+						, "", "",
+						null, null, 
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+			return -1L;
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationQuestionsAndAudioType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * adds a new room with options for user questions, audio only and hide
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param hideTopBar
+	 *            hide or show TopBar
+	 * @param hideChat
+	 *            hide or show Chat
+	 * @param hideActivitiesAndActions
+	 *            hide or show Activities And Actions
+	 * @param hideFilesExplorer
+	 *            hide or show Files Explorer
+	 * @param hideActionsMenu
+	 *            hide or show Actions Menu
+	 * @param hideScreenSharing
+	 *            hide or show Screen Sharing
+	 * @param hideWhiteboard
+	 *            hide or show Whiteboard. If whitboard is hidden, video pods
+	 *            and scrollbar appear instead.
+	 *            
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, isAudioOnly, true, false //isClosed
+						, "", "",
+						null, null,
+						true,  // allowRecording
+						hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard,
+						false, false, 
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+			return -1L;
+		} catch (Exception err) {
+			log.error(
+					"[addRoomWithModerationQuestionsAudioTypeAndHideOptions] ",
+					err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Checks if a room with this exteralRoomId + externalRoomType does exist,
+	 * if yes it returns the room id if not, it will create the room and then
+	 * return the room id of the newly created room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room? (use false if not sure what that means)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param externalRoomId
+	 *            your external room id may set here
+	 * @param externalRoomType
+	 *            you can specify your system-name or type of room here, for
+	 *            example "moodle"
+	 *            
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long getRoomIdByExternalId(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, Long externalRoomId,
+			String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Room room = conferenceService.getRoomByExternalId(SID,
+						externalRoomId, externalRoomType, roomtypes_id);
+				Long roomId = null;
+				if (room == null) {
+					roomId = roomManager.addExternalRoom(name, roomtypes_id,
+							comment, numberOfPartizipants, ispublic, null,
+							appointment, isDemoRoom, demoTime, isModeratedRoom,
+							null, externalRoomId, externalRoomType, true,
+							false, true, false, "", false, true, false);
+				} else {
+					roomId = room.getRooms_id();
+				}
+				return roomId;
+			}
+
+			return -26L;
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+		// return new Long (-1);
+	}
+
+	/**
+	 * Updates a conference room by its room id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModeration(String SID, Long room_id, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, true, false, true, false, "", "", null, null,
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModeration] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModerationAndQuestions(String SID, Long room_id,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, allowUserQuestions, false, true, false, "", "",
+						null, null, 
+						true,  // allowRecording 
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModerationAndQuestions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * update room with options for user questions, audio only and hide
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            number of participants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment (use false if not sure what that
+	 *            means)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param hideTopBar
+	 *            hide or show TopBar
+	 * @param hideChat
+	 *            hide or show Chat
+	 * @param hideActivitiesAndActions
+	 *            hide or show Activities And Actions
+	 * @param hideFilesExplorer
+	 *            hide or show Files Explorer
+	 * @param hideActionsMenu
+	 *            hide or show Actions Menu
+	 * @param hideScreenSharing
+	 *            hide or show Screen Sharing
+	 * @param hideWhiteboard
+	 *            hide or show Whiteboard. If whitboard is hidden, video pods
+	 *            and scrollbar appear instead.
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, Long room_id, String name, Long roomtypes_id,
+			String comment, Long numberOfPartizipants, Boolean ispublic,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, allowUserQuestions, isAudioOnly, true, false, "", "",
+						null, null,
+						true,  // allowRecording
+						hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard,
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModerationQuestionsAudioTypeAndHideOptions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Delete a room by its room id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id
+	 * 
+	 * @return - id of the room deleted
+	 */
+	public Long deleteRoom(String SID, long rooms_id) {
+		return conferenceService.deleteRoom(SID, rooms_id);
+	}
+
+	/**
+	 * kick all uses of a certain room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 *            _Admin
+	 * @param room_id
+	 *            the room id
+	 *            
+	 * @return - true if user was kicked, false otherwise
+	 */
+	public Boolean kickUser(String SID_Admin, Long room_id) {
+		try {
+			Boolean salida = false;
+
+			salida = userManager.kickUserByStreamId(SID_Admin, room_id);
+
+			if (salida == null)
+				salida = false;
+
+			return salida;
+		} catch (Exception err) {
+			log.error("[kickUser]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Add a new conference room with option to set the external room type, the
+	 * external room type should be set if multiple applications use the same
+	 * OpenMeetings instance
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationAndExternalType(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, true, false, true, false, "",
+						false, true, false);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndExternalType] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Adds a new room with options for audio only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationExternalTypeAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", false, true, false);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationExternalTypeAndAudioType] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Adds a new room with options for recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param waitForRecording
+	 *            if the users in the room will get a notification that they
+	 *            should start recording before they do a conference
+	 * @param allowRecording
+	 *            if the recording option is available or not
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationAndRecordingFlags(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean waitForRecording, boolean allowRecording) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", waitForRecording,
+						allowRecording, false);
+			} else {
+				return -26L;
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndRecordingFlags] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Add a conference room with options to disable the top menu bar in the
+	 * conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param waitForRecording
+	 *            if the users in the room will get a notification that they
+	 *            should start recording before they do a conference
+	 * @param allowRecording
+	 *            if the recording option is available or not
+	 * @param hideTopBar
+	 *            if the top bar in the conference room is visible or not
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationExternalTypeAndTopBarOption(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean waitForRecording,
+			boolean allowRecording, Boolean hideTopBar) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", waitForRecording,
+						allowRecording, hideTopBar);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationExternalTypeAndTopBarOption] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getInvitationHashFullName(SID, username, username, username, room_id, isPasswordProtected, invitationpass, valid,
+				validFromDate, validFromTime, validToDate, validToTime);
+	}
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param firstname
+	 *            the first name of the User that he will get
+	 * @param lastname
+	 *            the last name of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHashFullName(String SID, String username, String firstname, String lastname, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return sendInvitationHash(SID, username, firstname, lastname, null, null,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate,
+				validFromTime, validToDate, validToTime, 1L, false);
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHash(String SID, String username, String message, String email, String subject,
+			Long room_id, Boolean isPasswordProtected, String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime, Long language_id, Boolean sendMail) throws AxisFault {
+		return sendInvitationHash(SID, email, username, username, message, subject,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate,
+				validFromTime, validToDate, validToTime, language_id, sendMail);
+	}
+
+	private String sendInvitationHash(String SID, String email, String firstname, String lastname, String message, String subject,
+			Long room_id, Boolean isPasswordProtected, String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime, Long language_id, Boolean sendMail) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Date dFrom = new Date();
+				Date dTo = new Date();
+
+				if (valid == 2) {
+					Integer validFromHour = Integer.valueOf(validFromTime.substring(0, 2));
+					Integer validFromMinute = Integer.valueOf(validFromTime.substring(3, 5));
+
+					Integer validToHour = Integer.valueOf(validToTime.substring(0, 2));
+					Integer validToMinute = Integer.valueOf(validToTime.substring(3, 5));
+
+					log.info("validFromHour: " + validFromHour);
+					log.info("validFromMinute: " + validFromMinute);
+
+					Date fromDate = CalendarPatterns.parseDate(validFromDate); // dd.MM.yyyy
+					Date toDate = CalendarPatterns.parseDate(validToDate); // dd.MM.yyyy
+
+					Calendar calFrom = Calendar.getInstance();
+					calFrom.setTime(fromDate);
+					calFrom.set(calFrom.get(Calendar.YEAR),
+							calFrom.get(Calendar.MONTH),
+							calFrom.get(Calendar.DATE), validFromHour,
+							validFromMinute, 0);
+
+					Calendar calTo = Calendar.getInstance();
+					calTo.setTime(toDate);
+					calTo.set(calTo.get(Calendar.YEAR),
+							calTo.get(Calendar.MONTH),
+							calTo.get(Calendar.DATE), validToHour,
+							validToMinute, 0);
+
+					dFrom = calFrom.getTime();
+					dTo = calTo.getTime();
+
+					log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+					log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+				}
+
+				User invitee = userDao.getContact(email, firstname, lastname, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id,
+								dFrom, dTo, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation.getHash();
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need Admin Privileges to perfom the Action";
+			}
+
+		} catch (Exception err) {
+			log.error("[sendInvitationHash] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param conferencedomain
+	 *            the domain of the room (keep empty)
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param fromDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param toDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHashWithDateObject(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, Date fromDate, Date toDate,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Calendar calFrom = Calendar.getInstance();
+				calFrom.setTime(fromDate);
+
+				Calendar calTo = Calendar.getInstance();
+				calTo.setTime(toDate);
+
+				Date dFrom = calFrom.getTime();
+				Date dTo = calTo.getTime();
+
+				log.info("validFromDate: "
+						+ CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+				log.info("validToDate: "
+						+ CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+
+				User invitee = userDao.getContact(email, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id, dFrom, dTo, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation.getHash();
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need Admin Privileges to perfom the Action";
+			}
+		} catch (Exception err) {
+			log.error("[sendInvitationHash] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Return a RoomReturn Object with information of the current users of a
+	 * conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param start
+	 *            The id you want to start
+	 * @param max
+	 *            The maximum you want to get
+	 * @param orderby
+	 *            The column it will be ordered
+	 * @param asc
+	 *            Asc or Desc sort ordering
+	 *            
+	 * @return - RoomReturn Objects with information of the current users
+	 * @throws AxisFault
+	 */
+	public List<RoomReturn> getRoomsWithCurrentUsersByList(String SID,
+			int start, int max, String orderby, boolean asc) throws AxisFault {
+		try {
+			List<Room> rooms = conferenceService
+					.getRoomsWithCurrentUsersByList(SID, start, max, orderby,
+							asc);
+
+			List<RoomReturn> returnObjList = new LinkedList<RoomReturn>();
+
+			for (Room room : rooms) {
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setRoom_id(room.getRooms_id());
+				roomReturn.setName(room.getName());
+
+				roomReturn.setCreator("SOAP");
+				roomReturn.setCreated(room.getStarttime());
+
+				RoomUser[] rUser = new RoomUser[room.getCurrentusers().size()];
+
+				int i = 0;
+				for (Client rcl : room.getCurrentusers()) {
+
+					RoomUser ru = new RoomUser();
+					ru.setFirstname(rcl.getFirstname());
+					ru.setLastname(rcl.getLastname());
+
+					rUser[i] = ru;
+
+					i++;
+				}
+
+				roomReturn.setRoomUser(rUser);
+
+				returnObjList.add(roomReturn);
+
+			}
+
+			return returnObjList;
+		} catch (Exception err) {
+			log.error("setUserObjectWithExternalUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Return a RoomReturn Object with information of the current users of a
+	 * conference room with option to search for special external room types
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param start
+	 *            The id you want to start
+	 * @param max
+	 *            The maximum you want to get
+	 * @param orderby
+	 *            The column it will be ordered
+	 * @param asc
+	 *            Asc or Desc sort ordering
+	 * @param externalRoomType
+	 *            the external room type
+	 *            
+	 * @return - list of room return objects
+	 * @throws AxisFault
+	 */
+	public List<RoomReturn> getRoomsWithCurrentUsersByListAndType(String SID,
+			int start, int max, String orderby, boolean asc,
+			String externalRoomType) throws AxisFault {
+		try {
+			List<Room> rooms = conferenceService
+					.getRoomsWithCurrentUsersByListAndType(SID, start, max,
+							orderby, asc, externalRoomType);
+
+			List<RoomReturn> returnObjList = new LinkedList<RoomReturn>();
+
+			for (Room room : rooms) {
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setRoom_id(room.getRooms_id());
+				roomReturn.setName(room.getName());
+
+				roomReturn.setCreator("SOAP");
+				roomReturn.setCreated(room.getStarttime());
+
+				RoomUser[] rUser = new RoomUser[room.getCurrentusers().size()];
+
+				int i = 0;
+				for (Client rcl : room.getCurrentusers()) {
+
+					RoomUser ru = new RoomUser();
+					ru.setFirstname(rcl.getFirstname());
+					ru.setLastname(rcl.getLastname());
+
+					rUser[i] = ru;
+
+					i++;
+				}
+
+				roomReturn.setRoomUser(rUser);
+
+				returnObjList.add(roomReturn);
+
+			}
+
+			return returnObjList;
+		} catch (Exception err) {
+			log.error("setUserObjectWithExternalUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a conference room that is only available for a period of time
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param validFromDate
+	 *            valid from as Date format: dd.MM.yyyy
+	 * @param validFromTime
+	 *            valid to as time format: mm:hh
+	 * @param validToDate
+	 *            valid to Date format: dd.MM.yyyy
+	 * @param validToTime
+	 *            valid to time format: mm:hh
+	 * @param isPasswordProtected
+	 *            If the links send via EMail to invited people is password
+	 *            protected
+	 * @param password
+	 *            Password for Invitations send via Mail
+	 * @param reminderTypeId
+	 *            1=none, 2=simple mail, 3=ICAL
+	 * @param redirectURL
+	 *            URL Users will be lead to if the Conference Time is elapsed
+	 *            
+	 * @return - id of the room in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationAndExternalTypeAndStartEnd(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Boolean isPasswordProtected, String password, Long reminderTypeId,
+			String redirectURL) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				int validFromHour = Integer.valueOf(validFromTime.substring(0, 2)).intValue();
+				int validFromMinute = Integer.valueOf(validFromTime.substring(3, 5)).intValue();
+
+				int validToHour = Integer.valueOf(validToTime.substring(0, 2)).intValue();
+				int validToMinute = Integer.valueOf(validToTime.substring(3, 5)).intValue();
+
+				log.info("validFromHour: " + validFromHour);
+				log.info("validFromMinute: " + validFromMinute);
+
+				Date fromDate = CalendarPatterns.parseDateBySeparator(validFromDate); // dd.MM.yyyy
+				Date toDate = CalendarPatterns.parseDateBySeparator(validToDate); // dd.MM.yyyy
+
+				Calendar calFrom = Calendar.getInstance();
+				calFrom.setTime(fromDate);
+				calFrom.set(calFrom.get(Calendar.YEAR),
+						calFrom.get(Calendar.MONTH),
+						calFrom.get(Calendar.DATE), validFromHour,
+						validFromMinute, 0);
+
+				Calendar calTo = Calendar.getInstance();
+				calTo.setTime(toDate);
+				calTo.set(calTo.get(Calendar.YEAR), calTo.get(Calendar.MONTH),
+						calTo.get(Calendar.DATE), validToHour, validToMinute, 0);
+
+				Date dFrom = calFrom.getTime();
+				Date dTo = calTo.getTime();
+
+				log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+				log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+
+				Long rooms_id = roomManager.addExternalRoom(name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						null, appointment, isDemoRoom, demoTime,
+						isModeratedRoom, null, null, externalRoomType, false, // allowUserQuestions
+						false, // isAudioOnly
+						true,  // allowFontStyles
+						false, // isClosed
+						redirectURL, false, true, false);
+
+				if (rooms_id <= 0) {
+					return rooms_id;
+				}
+
+				Appointment a = new Appointment();
+				a.setTitle("appointmentName");
+				a.setOwner(userDao.get(users_id));
+				a.setLocation("appointmentLocation");
+				a.setDescription("appointmentDescription");
+				a.setStart(dFrom);
+				a.setEnd(dTo);
+				a.setCategory(appointmentCategoryDao.get(1L));
+				a.setRemind(appointmentReminderTypDao.get(reminderTypeId));
+				a.setRoom(roomDao.get(rooms_id));
+				a.setPasswordProtected(isPasswordProtected);
+				a.setPassword(password);
+				a.setLanguageId(1L); //TODO check
+				appointmentDao.update(a, users_id); //FIXME verify !!!
+
+				return rooms_id;
+
+			} else {
+				return -2L;
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+		// return new Long(-1);
+		// return numberOfPartizipants;
+	}
+
+	/**
+	 * Add a meeting member to a certain room. This is the same as adding an
+	 * external user to a event in the calendar.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            The Room Id the meeting member is going to be added
+	 * @param firstname
+	 *            The first name of the meeting member
+	 * @param lastname
+	 *            The last name of the meeting member
+	 * @param email
+	 *            The email of the Meeting member
+	 * @param language_id
+	 *            The ID of the language, for the email that is send to the
+	 *            meeting member
+	 *            
+	 * @return - id of the member in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id) throws AxisFault {
+		return addExternalMeetingMemberRemindToRoom(SID, room_id, firstname, lastname, email, language_id, null, null);
+	}
+
+	/**
+	 * Add a meeting member to a certain room. This is the same as adding an
+	 * external user to a event in the calendar. with a certain time zone
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            The Room Id the meeting member is going to be added
+	 * @param firstname
+	 *            The first name of the meeting member
+	 * @param lastname
+	 *            The last name of the meeting member
+	 * @param email
+	 *            The email of the Meeting member
+	 * @param language_id
+	 *            The ID of the language, for the email that is send to the
+	 *            meeting member
+	 * @param jNameTimeZone
+	 *            name of the timezone
+	 * @param invitorName
+	 *            name of invitation creators
+	 *            
+	 * @return - id of the member in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addExternalMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id, String jNameTimeZone, String invitorName)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Appointment a = appointmentLogic.getAppointmentByRoom(room_id);
+
+				if (email == null || a == null) {
+					return -1L;
+				}
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					if (email.equals(mm.getUser().getAdresses().getEmail())) {
+						return mm.getId();
+					}
+				}
+				MeetingMember mm = new MeetingMember();
+				mm.setAppointment(a);
+				mm.setUser(userDao.getContact(email, firstname, lastname, language_id, jNameTimeZone, users_id));
+				a.getMeetingMembers().add(mm);
+				appointmentDao.update(a, users_id);
+
+				return mm.getId(); //FIXME check to return ID
+			} else {
+				return -2L;
+			}
+		} catch (Exception err) {
+			log.error("[addExternalMeetingMemberRemindToRoom] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Method to remotely close or open rooms. If a room is closed all users
+	 * inside the room and all users that try to enter it will be redirected to
+	 * the redirectURL that is defined in the Room-Object.
+	 * 
+	 * Returns positive value if authentication was successful.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id
+	 * @param status
+	 *            false = close, true = open
+	 *            
+	 * @return - 1 in case of success, -2 otherwise
+	 * @throws AxisFault
+	 */
+	public int closeRoom(String SID, Long room_id, Boolean status)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			log.debug("closeRoom 1 " + room_id);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				log.debug("closeRoom 2 " + status);
+
+				roomManager.closeRoom(room_id, status);
+
+				if (status) {
+					Map<String, String> message = new HashMap<String, String>();
+					message.put("message", "roomClosed");
+					scopeApplicationAdapter.sendMessageByRoomAndDomain(room_id,
+							message);
+				}
+				return 1;
+
+			} else {
+				return -2;
+			}
+		} catch (Exception err) {
+			log.error("[closeRoom] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+
+	}
+
+	/**
+	 * Method to update arbitrary room parameter.
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as logged in
+	 * @param room_id the room id
+	 * @param paramName the name of parameter to be updated, please NOTE rooms_id is not updatable as well as fields of type {@link Date} and {@link List}
+	 * @param paramValue the value to be set, please use "type id" to set room type 
+	 * @return 1 in case of success, -2 if permissions are insufficient
+	 * @throws AxisFault if any error occurred
+	 */
+	public int modifyRoomParameter(String SID, Long room_id, String paramName, String paramValue)
+			throws AxisFault {
+		try {
+			if ("rooms_id".equals(paramName)) {
+				throw new AxisFault("Non modifiable parameter");
+			}
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				log.debug(String.format("modifyRoomParameter[%s]: %s = %s", room_id, paramName, paramValue));
+				Room r = roomDao.get(room_id);
+				BeanWrapper rw = new BeanWrapperImpl(r);
+				Class<?> valueClass = rw.getPropertyType(paramName);
+				Object val = null;
+				//don't like this code
+				if (valueClass == null) {
+					//do nothing
+				} else if (valueClass.isAssignableFrom(String.class)) {
+					val = paramValue;
+				} else if (valueClass.isAssignableFrom(Boolean.class) || valueClass.isAssignableFrom(boolean.class)) {
+					val = Boolean.parseBoolean(paramValue);
+				} else if (valueClass.isAssignableFrom(RoomType.class)) {
+					val = roomTypeDao.get(Long.parseLong(paramValue));
+				} else if (valueClass.isAssignableFrom(Long.class)) {
+					val = Long.parseLong(paramValue);
+				} else if (valueClass.isAssignableFrom(Integer.class)) {
+					val = Integer.parseInt(paramValue);
+				}
+				rw.setPropertyValue(paramName, val);
+				roomDao.update(r, users_id);
+			} else {
+				return -2;
+			}
+			return 1;
+		} catch (Exception err) {
+			log.error("[modifyRoomParameter] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+	}
+	
+	/**
+	 * Adds a room to an organization
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id - Id of room to be added
+	 * @param organisation_id - Id of organisation that the room is being paired with
+	 * 
+	 * @return Id of the relation created, null or -1 in case of the error
+	 */
+	public Long addRoomToOrg(String SID, Long rooms_id, Long organisation_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				if (null == roomManager.getRoomsOrganisationByOrganisationIdAndRoomId(organisation_id, rooms_id)) {
+					return roomManager.addRoomToOrganisation(rooms_id, organisation_id);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[addRoomToOrg]", err);
+		}
+		return new Long(-1);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java
new file mode 100644
index 0000000..64fdd29
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java
@@ -0,0 +1,559 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.record.RecordingDTO;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.room.RoomSearchResult;
+import org.apache.openmeetings.db.entity.room.RoomType;
+
+public class RoomWebServiceFacade extends BaseWebService {
+
+	public List<RoomDTO> getRoomsPublic(String SID, Long roomtypes_id) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsPublic(SID, roomtypes_id);
+	}
+
+	/**
+	 * Deletes a flv recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param flvRecordingId
+	 *            the id of the recording
+	 * @return
+	 * @throws AxisFault
+	 */
+	public boolean deleteFlvRecording(String SID, Long flvRecordingId)
+			throws AxisFault {
+		return getBean(RoomWebService.class).deleteFlvRecording(SID,
+				flvRecordingId);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalUserId(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByExternalUserId(SID, externalUserId, externalUserType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeAndCreator(
+			String SID, String externalRoomType, Long insertedBy)
+			throws AxisFault {
+		return getBean(RoomWebService.class)
+				.getFlvRecordingByExternalRoomTypeAndCreator(SID,
+						externalRoomType, insertedBy);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeByList(String SID, String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.getFlvRecordingByExternalRoomTypeByList(SID, externalRoomType);
+	}
+
+	public List<RecordingDTO> getRecordingsByExternalType(String SID, String externalType) throws AxisFault {
+		return getBean(RoomWebService.class).getRecordingsByExternalType(SID, externalType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomType(String SID, String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByExternalRoomType(SID, externalRoomType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByRoomId(String SID, Long roomId) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByRoomId(SID, roomId);
+	}
+
+	public List<RoomType> getRoomTypes(String SID) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomTypes(SID);
+	}
+
+	public List<RoomCountBean> getRoomCounters(String SID, Integer[] roomId) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomCounters(SID, roomId);
+	}
+
+	public RoomDTO getRoomById(String SID, long rooms_id) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomById(SID, rooms_id);
+	}
+
+	public RoomReturn getRoomWithClientObjectsById(String SID, long rooms_id)
+			throws AxisFault {
+		return getBean(RoomWebService.class).getRoomWithClientObjectsById(SID,
+				rooms_id);
+	}
+
+	public RoomSearchResult getRooms(String SID, int start, int max, String orderby, boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRooms(SID, start, max, orderby, asc);
+	}
+
+	public RoomSearchResult getRoomsWithCurrentUsers(String SID, int start, int max, String orderby , boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsers(SID, start, max, orderby, asc);
+	}
+
+	public Long addRoomWithModeration(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModeration(SID, name,
+				roomtypes_id, comment, numberOfPartizipants, ispublic,
+				appointment, isDemoRoom, demoTime, isModeratedRoom);
+	}
+
+	/**
+	 * this SOAP Method has an additional param to enable or disable the buttons
+	 * to apply for moderation this does only work in combination with the
+	 * room-type restricted
+	 * 
+	 * @param SID
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param allowUserQuestions
+	 * @return
+	 */
+	public Long addRoomWithModerationAndQuestions(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationAndQuestions(
+				SID, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom,
+				allowUserQuestions);
+	}
+
+	public Long addRoomWithModerationQuestionsAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationQuestionsAndAudioType(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						allowUserQuestions, isAudioOnly);
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param externalRoomId
+	 * @param externalUserType
+	 * @return
+	 */
+	public Long getRoomIdByExternalId(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, Long externalRoomId,
+			String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomIdByExternalId(SID, name,
+				roomtypes_id, comment, numberOfPartizipants, ispublic,
+				appointment, isDemoRoom, demoTime, isModeratedRoom,
+				externalRoomId, externalRoomType);
+	}
+
+	public Long updateRoomWithModeration(String SID, Long room_id, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) throws AxisFault {
+		return getBean(RoomWebService.class).updateRoomWithModeration(SID,
+				room_id, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom);
+	}
+
+	public Long updateRoomWithModerationAndQuestions(String SID, Long room_id,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) throws AxisFault {
+		return getBean(RoomWebService.class).updateRoomWithModerationAndQuestions(
+				SID, room_id, name, roomtypes_id, comment,
+				numberOfPartizipants, ispublic, appointment, isDemoRoom,
+				demoTime, isModeratedRoom, allowUserQuestions);
+	}
+
+	public Long updateRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, Long room_id, String name, Long roomtypes_id,
+			String comment, Long numberOfPartizipants, Boolean ispublic,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.updateRoomWithModerationQuestionsAudioTypeAndHideOptions(SID,
+						room_id, name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, appointment,
+						isDemoRoom, demoTime, isModeratedRoom,
+						allowUserQuestions, isAudioOnly, hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard);
+
+	}
+
+	public Long deleteRoom(String SID, long rooms_id) throws AxisFault {
+		return getBean(RoomWebService.class).deleteRoom(SID, rooms_id);
+	}
+
+	public Boolean kickUser(String SID_Admin, Long room_id) throws AxisFault {
+		return getBean(RoomWebService.class).kickUser(SID_Admin, room_id);
+	}
+
+	public Long addRoomWithModerationAndExternalType(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType)
+			throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationAndExternalType(
+				SID, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom,
+				externalRoomType);
+	}
+
+	public Long addRoomWithModerationExternalTypeAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationExternalTypeAndAudioType(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly);
+	}
+
+	public Long addRoomWithModerationAndRecordingFlags(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean waitForRecording, Boolean allowRecording) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationAndRecordingFlags(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly,
+						waitForRecording, allowRecording);
+	}
+
+	public Long addRoomWithModerationExternalTypeAndTopBarOption(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean waitForRecording,
+			Boolean allowRecording, Boolean hideTopBar) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationExternalTypeAndTopBarOption(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly,
+						waitForRecording, allowRecording, hideTopBar);
+	}
+
+	public Long addRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationQuestionsAudioTypeAndHideOptions(SID, name, roomtypes_id, comment, numberOfPartizipants, ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom, allowUserQuestions, isAudioOnly, hideTopBar, hideChat, hideActivitiesAndActions, hideFilesExplorer, hideActionsMenu, hideScreenSharing, hideWhiteboard);
+	}
+	
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getBean(RoomWebService.class).getInvitationHash(SID, username,
+				room_id, isPasswordProtected, invitationpass, valid,
+				validFromDate, validFromTime, validToDate, validToTime);
+
+	}
+
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param firstname
+	 *            the first name of the User that he will get
+	 * @param lastname
+	 *            the last name of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHashFullName(String SID, String username, String firstname, String lastname, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getBean(RoomWebService.class).getInvitationHashFullName(SID, username, firstname, lastname,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate, validFromTime, validToDate, validToTime);
+
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHash(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		return getBean(RoomWebService.class).sendInvitationHash(SID, username, message, email, subject, room_id,
+				isPasswordProtected, invitationpass, valid, validFromDate, validFromTime, validToDate, validToTime, language_id, sendMail);
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param conferencedomain
+	 *            the domain of the room (keep empty)
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param fromDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param toDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHashWithDateObject(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, Date fromDate, Date toDate,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		return getBean(RoomWebService.class).sendInvitationHashWithDateObject(SID, username, message, email, subject, room_id,
+				conferencedomain, isPasswordProtected, invitationpass, valid, fromDate, toDate, language_id, sendMail);
+	}
+
+	public List<RoomReturn> getRoomsWithCurrentUsersByList(String SID,
+			int start, int max, String orderby, boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsersByList(SID, start, max, orderby, asc);
+	}
+
+	public List<RoomReturn> getRoomsWithCurrentUsersByListAndType(String SID,
+			int start, int max, String orderby, boolean asc,
+			String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsersByListAndType(SID, start, max, orderby, asc, externalRoomType);
+	}
+
+	public Long addRoomWithModerationAndExternalTypeAndStartEnd(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Boolean isPasswordProtected, String password, Long reminderTypeId,
+			String redirectURL) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationAndExternalTypeAndStartEnd(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, validFromDate, validFromTime,
+						validToDate, validToTime, isPasswordProtected,
+						password, reminderTypeId, redirectURL);
+	}
+
+	public Long addMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, String phone, Long language_id) throws AxisFault {
+		return getBean(RoomWebService.class).addMeetingMemberRemindToRoom(SID,
+				room_id, firstname, lastname, email, language_id);
+	}
+
+	public Long addExternalMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id, String jNameTimeZone, String invitorName)
+			throws AxisFault {
+		return getBean(RoomWebService.class).addExternalMeetingMemberRemindToRoom(
+				SID, room_id, firstname, lastname, email, language_id, jNameTimeZone, invitorName);
+	}
+
+	public int closeRoom(String SID, Long room_id, Boolean status)
+			throws AxisFault {
+		return getBean(RoomWebService.class).closeRoom(SID, room_id, status);
+	}
+
+	public int modifyRoomParameter(String SID, Long room_id, String paramName, String paramValue) throws AxisFault {
+		return getBean(RoomWebService.class).modifyRoomParameter(SID, room_id, paramName, paramValue);
+	}
+	
+	public Long addRoomToOrg(String SID, Long rooms_id, Long organisation_id) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomToOrg(SID, rooms_id, organisation_id);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java
new file mode 100644
index 0000000..5fc960a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * This class provides method implementations necessary for OM to manage servers
+ * participating in cluster.
+ * 
+ * @author solomax, sebawagner
+ * @webservice ServerService
+ * 
+ */
+public class ServerWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ServerWebService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private ServerDao serversDao;
+
+	/**
+	 * Method to retrieve the list of the servers participating in cluster
+	 * 
+	 * @param SID
+	 *            - session id to identify the user making request
+	 * @param start
+	 *            - server index to start with
+	 * @param max
+	 *            - Maximum server count
+	 * @return The list of servers participating in cluster
+	 */
+	public Server[] getServers(String SID, int start, int max) throws AxisFault {
+		log.debug("getServers enter");
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			return serversDao.get(start, max).toArray(new Server[0]);
+		} else {
+			log.warn("Insuffisient permissions");
+			return null;
+		}
+	}
+
+	/**
+	 * Method to retrieve the total count of the servers participating in
+	 * cluster
+	 * 
+	 * @param SID
+	 *            - session id to identify the user making request
+	 * @return total count of the servers participating in cluster
+	 */
+	public int getServerCount(String SID) throws AxisFault {
+		log.debug("getServerCount enter");
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			return (int) serversDao.count();
+		} else {
+			log.warn("Insuffisient permissions");
+			return -1;
+		}
+	}
+
+	/**
+	 * Method to add/update server
+	 * 
+	 * @param SID
+	 *            - session id to identify the user making request
+	 * @param id
+	 *            - the id of the server to save
+	 * @param name
+	 *            - the name of the server to save
+	 * @param address
+	 *            - the address(DNS name or IP) of the server to save
+	 * @param port
+	 *            - the http port of the slave
+	 * @param user
+	 *            - REST user to access the slave
+	 * @param pass
+	 *            - REST pass to access the slave
+	 * @param webapp
+	 *            - webapp name of the OpenMeetings instance
+	 * @param protocol
+	 *            - protocol to access the OpenMeetings instance
+	 * @param active
+	 *            - if the server currently participates in the cluster or not
+	 * @param comment
+	 *            - comment for the server
+	 * @return the id of saved server
+	 */
+	public long saveServer(String SID, long id, String name, String address,
+			int port, String user, String pass, String webapp, String protocol,
+			Boolean active, String comment) throws AxisFault {
+		log.debug("saveServerCount enter");
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			Server s = serversDao.get(id);
+			if (s == null) {
+				s = new Server();
+			}
+			s.setName(name);
+			s.setAddress(address);
+			s.setPort(port);
+			s.setUser(user);
+			s.setPass(pass);
+			s.setWebapp(webapp);
+			s.setProtocol(protocol);
+			s.setActive(active);
+			s.setComment(comment);
+			return serversDao.update(s, users_id).getId();
+		} else {
+			log.warn("Insuffisient permissions");
+			return -1;
+		}
+	}
+
+	/**
+	 * Method to delete server
+	 * 
+	 * @param SID
+	 *            - session id to identify the user making request
+	 * @param id
+	 *            - the id of the server to delete
+	 * @return true if the server was deleted, false otherwise
+	 */
+	public boolean deleteServer(String SID, long id) throws AxisFault {
+		log.debug("saveServerCount enter");
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			Server s = serversDao.get(id);
+			if (s != null) {
+				serversDao.delete(s, users_id);
+				return true;
+			}
+		} else {
+			log.warn("Insuffisient permissions");
+		}
+		return false;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java
new file mode 100644
index 0000000..af5c40b
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.entity.server.Server;
+
+public class ServerWebServiceFacade extends BaseWebService {
+
+	/**
+	 * Proxy method please see
+	 * {@link ServerWebService#getServers(String, int, int)}
+	 */
+	public Server[] getServers(String SID, int start, int max) throws AxisFault {
+		return getBean(ServerWebService.class).getServers(SID, start, max);
+	}
+
+	/**
+	 * Proxy method please see {@link ServerWebService#getServerCount(String)}
+	 */
+	public int getServerCount(String SID) throws AxisFault {
+		return getBean(ServerWebService.class).getServerCount(SID);
+	}
+
+	/**
+	 * Proxy method please see
+	 * {@link ServerWebService#saveServer(String, long, String, String, int, String, String, String, String, Boolean, String)}
+	 */
+	public long saveServer(String SID, long id, String name, String address,
+			int port, String user, String pass, String webapp, String protocol,
+			Boolean active, String comment) throws AxisFault {
+		return getBean(ServerWebService.class).saveServer(SID, id, name, address, port,
+				user, pass, webapp, protocol, active, comment);
+	}
+
+	/**
+	 * Proxy method please see
+	 * {@link ServerWebService#deleteServer(String, long)}
+	 */
+	public boolean deleteServer(String SID, long id) throws AxisFault {
+		return getBean(ServerWebService.class).deleteServer(SID, id);
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java
new file mode 100644
index 0000000..b2c6357
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java
@@ -0,0 +1,1124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.user.UserSearchResult;
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmException;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * The Service contains methods to login and create hash to directly enter
+ * conference rooms, recordings or the application in general
+ * 
+ * @author sebawagner
+ * @webservice UserService
+ * 
+ */
+public class UserWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserWebService.class, webAppRootKey);
+
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private UserManager userManagement;
+	@Autowired
+	private ErrorDao errorDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private OrganisationUserDao orgUserDao;
+	@Autowired
+	private SOAPLoginDao soapLoginDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private MainService mainService;
+	@Autowired
+	private LabelDao labelDao;
+
+	/**
+	 * load this session id before doing anything else Returns an Object of Type
+	 * Sessiondata, this contains a sessionId, use that sessionId in all Methods
+	 * 
+	 * @return - creates new session
+	 */
+	public Sessiondata getSession() {
+		log.debug("SPRING LOADED getSession -- ");
+		return mainService.getsessiondata();
+	}
+
+	/**
+	 * Auth function, use the SID you get by getSession, return positive means
+	 * logged-in, if negative its an ErrorCode, you have to invoke the Method
+	 * getErrorByCode to get the Text-Description of that ErrorCode
+	 * 
+	 * @param SID - The SID from getSession
+	 * @param username - Username from OpenMeetings, the user has to have Admin-rights
+	 * @param userpass - Userpass from OpenMeetings
+	 *            
+	 * @return - id of the logged in user, -1 in case of the error
+	 */
+	public Long loginUser(String SID, String username, String userpass) throws AxisFault {
+		try {
+			log.debug("Login user SID : " + SID);
+			User u = userDao.login(username, userpass);
+			if (u == null) {
+				return -1L;
+			}
+			
+			boolean bool = sessiondataDao.updateUser(SID, u.getUser_id(), false, u.getLanguage_id());
+			if (!bool) {
+				// invalid Session-Object
+				return -35L;
+			}
+			
+			return u.getUser_id();
+		} catch (OmException oe) {
+			if (oe.getCode() != null) {
+				return oe.getCode();
+			}
+		} catch (Exception err) {
+			log.error("[loginUser]", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * loads an Error-Object. If a Method returns a negative Result, its an
+	 * Error-id, it needs a language_id to specify in which language you want to
+	 * display/read the error-message. English has the Language-ID one, for
+	 * different one see the list of languages
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param errorid
+	 *            the error id (negative Value here!)
+	 * @param langId
+	 *            The id of the language
+	 *            
+	 * @return - error with the code given
+	 */
+	public ErrorResult getErrorByCode(String SID, long errorid, long langId) {
+		try {
+			if (errorid < 0) {
+				ErrorValue eValues = errorDao.get(-1 * errorid);
+				if (eValues != null) {
+					ErrorType eType = errorDao.getErrorType(eValues.getErrortype_id());
+					log.debug("eValues.getFieldvalues_id() = " + eValues.getFieldvalues_id());
+					log.debug("eValues.getErrorType() = " + eType);
+					String eValue = labelDao.getString(eValues.getFieldvalues_id(), langId);
+					String tValue = labelDao.getString(eType.getFieldvalues_id(), langId);
+					if (eValue != null) {
+						return new ErrorResult(errorid, eValue, tValue);
+					}
+				}
+			} else {
+				return new ErrorResult(errorid, "Error ... please check your input", "Error");
+			}
+		} catch (Exception err) {
+			log.error("[getErrorByCode] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account To do SSO see the methods to create a hash and use those ones!
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 *            
+	 * @return - id of the user added or error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUser(String SID, String username, String userpass,
+			String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				String jName_timeZone = configurationDao.getConfValue("default.timezone", String.class, "");
+
+				Long user_id = userManagement.registerUser(username, userpass,
+						lastname, firstname, email, new Date(), street,
+						additionalname, fax, zip, states_id, town, language_id,
+						"", false, true, // generate SIP Data if the config is enabled
+						jName_timeZone);
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Dashboard);
+				user.getRights().add(Right.Login);
+				user.getRights().add(Right.Room);
+				user.setUpdatetime(new Date());
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addNewUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 * @param jNameTimeZone
+	 *            the name of the timezone for the user
+	 *            
+	 * @return - id of the user added or the error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithTimeZone(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id, String jNameTimeZone) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Long user_id = userManagement.registerUser(username, userpass,
+						lastname, firstname, email, new Date(), street,
+						additionalname, fax, zip, states_id, town, language_id,
+						"", false, true, // generate
+											// SIP
+											// Data
+											// if
+											// the
+											// config
+											// is
+											// enabled
+						jNameTimeZone); 
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Login);
+				user.setUpdatetime(new Date());
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addNewUserWithTimeZone", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account, sends NO email (no matter what you configured) and sets the
+	 * users external user id and type
+	 * 
+	 * Use the methods to create a hash for SSO, creating users is not required
+	 * for SSO
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 * @param jNameTimeZone
+	 *            the name of the timezone for the user
+	 * @param externalUserId
+	 *            externalUserId
+	 * @param externalUserType
+	 *            externalUserType
+	 *            
+	 * @return - id of user added or error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithExternalType(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone, String externalUserId, String externalUserType)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				User testUser = userDao.getExternalUser(externalUserId, externalUserType);
+
+				if (testUser != null) {
+					throw new Exception("User does already exist!");
+				}
+
+				// This will send no email to the users
+				Long user_id = userManagement.registerUserNoEmail(username,
+						userpass, lastname, firstname, email, new Date(),
+						street, additionalname, fax, zip, states_id, town,
+						language_id, "", false, true, // generate SIP Data if the config is enabled
+						jNameTimeZone);
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Login);
+				user.setUpdatetime(new Date());
+				user.setExternalUserId(externalUserId);
+				user.setExternalUserType(externalUserType);
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("addNewUserWithExternalType", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Delete a certain user by its id
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param userId
+	 *            the openmeetings user id
+	 *            
+	 * @return - id of the user deleted, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long deleteUserById(String SID, Long userId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				// Setting user deleted
+				userDao.deleteUserID(userId);
+
+				return userId;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("deleteUserById", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Delete a certain user by its external user id
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param externalUserId
+	 *            externalUserId
+	 * @param externalUserType
+	 *            externalUserId
+	 *            
+	 * @return - id of user deleted, or error code
+	 * @throws AxisFault
+	 */
+	public Long deleteUserByExternalUserIdAndType(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				User userExternal = userDao.getExternalUser(externalUserId, externalUserType);
+
+				Long userId = userExternal.getUser_id();
+
+				// Setting user deleted
+				userDao.deleteUserID(userId);
+
+				return userId;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("deleteUserByExternalUserIdAndType", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room. ...
+	 * Session-Hashs are deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 *            
+	 * @return - secure hash or error code
+	 * @throws AxisFault
+	 */
+	public String setUserObjectAndGenerateRoomHash(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt, int showAudioVideoTestAsInt)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, false, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectAndGenerateRoomHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt) throws AxisFault {
+
+		log.debug("UserService.setUserObjectAndGenerateRoomHashByURL");
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectAndGenerateRoomHashByURL", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * ++ sets the flag if the user can do recording in the conference room
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 * @param allowRecording
+	 *            0 means don't allow Recording, 1 means allow Recording
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectAndGenerateRoomHashByURLAndRecFlag(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int allowRecording) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				boolean allowRecordingBool = false;
+				if (allowRecording != 0) {
+					allowRecordingBool = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						allowRecordingBool // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID and directly login into the dashboard
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any absolute profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectMainLandingZone(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType) {
+		log.debug("UserService.setUserObjectMainLandingZone");
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				String hash = soapLoginDao.addSOAPLogin(SID, null, false, true,
+						true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"dashboard", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + -26L;
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + -1L;
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * ++ Additionally you can set a param showNickNameDialogAsInt, the effect
+	 * if that param is 1 is, that the user gets a popup where he can enter his
+	 * nickname right before he enters the conference room. All nicknames and
+	 * emails users enter are logged in the conferencelog table.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 * @param showNickNameDialogAsInt
+	 *            0 means do not show the popup to enter a nichname, 1 means
+	 *            that there is a popup to enter the nickname for the conference
+	 *            
+	 * @return - secure hash, or error code 
+	 */
+	public String setUserAndNickName(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int showNickNameDialogAsInt) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+				log.debug("showNickNameDialogAsInt" + showNickNameDialogAsInt);
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				boolean showNickNameDialog = false;
+				if (showNickNameDialogAsInt != 0) {
+					showNickNameDialog = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, null,
+						showNickNameDialog, "room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * Use this method to access a Recording instead of Room
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param recording_id
+	 *            the id of the recording, get a List of all Recordings with
+	 *            RoomService::getFlvRecordingByExternalRoomType
+	 *            
+	 * @return - hash of the recording, or error id
+	 */
+	public String setUserObjectAndGenerateRecordingHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String externalUserId, String externalUserType, Long recording_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, "", "", "", externalUserId,
+						externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				String hash = soapLoginDao.addSOAPLogin(SID, null, false,
+						false, true, // allowSameURLMultipleTimes
+						recording_id, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Add a user to a certain organization
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param user_id
+	 *            the user id
+	 * @param organisation_id
+	 *            the organization id
+	 * @param insertedby
+	 *            user id of the operating user
+	 * @return - id of the user added, or error id in case of the error
+	 */
+	public Long addUserToOrganisation(String SID, Long user_id,
+			Long organisation_id, Long insertedby) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				if (!orgUserDao.isUserInOrganization(organisation_id, user_id)) {
+					User u = userDao.get(user_id);
+					u.getOrganisation_users().add(new Organisation_Users(orgDao.get(organisation_id)));
+					userDao.update(u, users_id);
+				}
+				return user_id;
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addUserToOrganisation", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Search users and return them
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param organisation_id
+	 *            the organization id
+	 * @param start
+	 *            first record
+	 * @param max
+	 *            max records
+	 * @param orderby
+	 *            orderby clause
+	 * @param asc
+	 *            asc or desc
+	 * @return - users found
+	 */
+	public UserSearchResult getUsersByOrganisation(String SID,
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			SearchResult<User> result = new SearchResult<User>();
+			result.setObjectName(User.class.getName());
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				result.setRecords(orgUserDao.count(organisation_id));
+				result.setResult(new ArrayList<User>());
+				for (Organisation_Users ou : orgUserDao.get(organisation_id, null, start, max, orderby + " " + (asc ? "ASC" : "DESC"))) {
+					result.getResult().add(ou.getUser());
+				}
+			} else {
+				log.error("Need Administration Account");
+				result.setErrorId(-26L);
+			}
+			return new UserSearchResult(result);
+		} catch (Exception err) {
+			log.error("getUsersByOrganisation", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Kick a user by its public SID
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param publicSID
+	 *            the publicSID (you can get it from the call to get users in a
+	 *            room)
+	 * @return - <code>true</code> if user was kicked
+	 */
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Boolean success = false;
+
+			success = userManagement.kickUserByPublicSID(SID, publicSID);
+
+			if (success == null)
+				success = false;
+
+			return success;
+		} catch (Exception err) {
+			log.error("[kickUser]", err);
+		}
+		return null;
+	}
+	
+	/**
+	 * add a new organisation
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param name
+	 *            the name of the org
+	 * @return the new id of the org or -1 in case an error happened
+	 * @throws AxisFault
+	 */
+	public Long addOrganisation(String SID, String name) throws AxisFault {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			Organisation o = new Organisation();
+			o.setName(name);
+			return orgDao.update(o, users_id).getOrganisation_id();
+		}
+		log.error("Could not create organization");
+		return -1L;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java
new file mode 100644
index 0000000..723c039
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.dto.user.UserSearchResult;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+
+public class UserWebServiceFacade extends BaseWebService {
+
+	/**
+	 * load this session id before doing anything else
+	 * 
+	 * @return Sessiondata-Object
+	 */
+	public Sessiondata getSession() throws AxisFault {
+		return getBean(UserWebService.class).getSession();
+	}
+
+	/**
+	 * auth function, use the SID you get by getSession
+	 * 
+	 * @param SID
+	 * @param Username
+	 * @param Userpass
+	 * @return positive means Loggedin, if negativ its an ErrorCode, you have to
+	 *         invoke the Method getErrorByCode to get the Text-Description of
+	 *         that ErrorCode
+	 */
+	public Long loginUser(String SID, String username, String userpass)
+			throws AxisFault {
+		return getBean(UserWebService.class).loginUser(SID, username, userpass);
+	}
+
+	/**
+	 * Gets the Error-Object
+	 * 
+	 * @param SID
+	 * @param errorid
+	 * @param language_id
+	 * @return
+	 * @throws AxisFault 
+	 */
+	public ErrorResult getErrorByCode(String SID, Long errorid, Long language_id) throws AxisFault {
+		return getBean(UserWebService.class).getErrorByCode(SID, errorid, language_id);
+	}
+
+	public Long addNewUser(String SID, String username, String userpass,
+			String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id)
+			throws AxisFault {
+		return getBean(UserWebService.class).addNewUser(SID, username, userpass,
+				lastname, firstname, email, additionalname, street, zip, fax,
+				states_id, town, language_id);
+	}
+
+	public Long addNewUserWithTimeZone(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone) throws AxisFault {
+		return getBean(UserWebService.class).addNewUserWithTimeZone(SID, username,
+				userpass, lastname, firstname, email, additionalname, street,
+				zip, fax, states_id, town, language_id, jNameTimeZone);
+
+	}
+
+	/**
+	 * 
+	 * Adds a user with an externalUserId and type, but checks if the user/type
+	 * does already exist
+	 * 
+	 * @param SID
+	 * @param username
+	 * @param userpass
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param additionalname
+	 * @param street
+	 * @param zip
+	 * @param fax
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @param jNameTimeZone
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithExternalType(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone, String externalUserId, String externalUserType)
+			throws AxisFault {
+		return getBean(UserWebService.class).addNewUserWithExternalType(SID, username,
+				userpass, lastname, firstname, email, additionalname, street,
+				zip, fax, states_id, town, language_id, jNameTimeZone,
+				externalUserId, externalUserType);
+
+	}
+
+	/**
+	 * 
+	 * delete a user by its id
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long deleteUserById(String SID, Long userId) throws AxisFault {
+		return getBean(UserWebService.class).deleteUserById(SID, userId);
+	}
+
+	/**
+	 * 
+	 * delete a user by its external user id and type
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long deleteUserByExternalUserIdAndType(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		return getBean(UserWebService.class).deleteUserByExternalUserIdAndType(SID,
+				externalUserId, externalUserType);
+	}
+
+	public String setUserObjectAndGenerateRoomHash(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt, int showAudioVideoTestAsInt)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectAndGenerateRoomHash(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType, room_id,
+				becomeModeratorAsInt, showAudioVideoTestAsInt);
+	}
+
+	public String setUserObjectAndGenerateRoomHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt) throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectAndGenerateRoomHashByURL(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType, room_id,
+				becomeModeratorAsInt, showAudioVideoTestAsInt);
+	}
+
+	public String setUserObjectAndGenerateRoomHashByURLAndRecFlag(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int allowRecording) throws AxisFault {
+		return getBean(UserWebService.class)
+				.setUserObjectAndGenerateRoomHashByURLAndRecFlag(SID, username,
+						firstname, lastname, profilePictureUrl, email,
+						externalUserId, externalUserType, room_id,
+						becomeModeratorAsInt, showAudioVideoTestAsInt,
+						allowRecording);
+	}
+
+	public String setUserObjectMainLandingZone(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectMainLandingZone(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType);
+	}
+
+	public String setUserAndNickName(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int showNickNameDialogAsInt)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserAndNickName(SID, username,
+				firstname, lastname, profilePictureUrl, email, externalUserId,
+				externalUserType, room_id, becomeModeratorAsInt,
+				showAudioVideoTestAsInt, showNickNameDialogAsInt);
+	}
+
+	public String setUserObjectAndGenerateRecordingHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String externalUserId, String externalUserType, Long recording_id)
+			throws AxisFault {
+		return getBean(UserWebService.class)
+				.setUserObjectAndGenerateRecordingHashByURL(SID, username,
+						firstname, lastname, externalUserId, externalUserType,
+						recording_id);
+	}
+
+	public Long addUserToOrganisation(String SID, Long user_id,
+			Long organisation_id, Long insertedby)
+			throws AxisFault {
+		return getBean(UserWebService.class).addUserToOrganisation(SID, user_id,
+				organisation_id, insertedby);
+	}
+
+	public UserSearchResult getUsersByOrganisation(String SID, long organisation_id, int start, int max, String orderby,
+			boolean asc) throws AxisFault {
+		return getBean(UserWebService.class).getUsersByOrganisation(SID, organisation_id, start, max, orderby, asc);
+	}
+
+	public Boolean kickUserByPublicSID(String SID, String publicSID)
+			throws AxisFault {
+		return getBean(UserWebService.class).kickUserByPublicSID(SID, publicSID);
+	}
+	
+	public Long addOrganisation(String SID, String name) throws AxisFault {
+		return getBean(UserWebService.class).addOrganisation(SID, name);
+	}
+
+}
diff --git a/src/axis/resources/services.xml b/src/axis/resources/services.xml
new file mode 100644
index 0000000..9aba71f
--- /dev/null
+++ b/src/axis/resources/services.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<serviceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="services.xsd">
+  <service name="UserService">
+	<description>User Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.UserWebServiceFacade</parameter>
+  </service>
+  <service name="RoomService">
+	<description>Room Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.RoomWebServiceFacade</parameter>
+  </service>
+  <service name="FileService">
+	<description>File Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.FileWebServiceFacade</parameter>
+  </service>
+  <service name="CalendarService">
+	<description>Calendar Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.CalendarWebServiceFacade</parameter>
+  </service>
+  <service name="JabberService">
+	<description>Jabber Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.JabberWebServiceFacade</parameter>
+  </service>
+  <service name="ServerService">
+	<description>Server Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.ServerWebServiceFacade</parameter>
+  </service>
+</serviceGroup>
diff --git a/src/axis/resources/services.xsd b/src/axis/resources/services.xsd
new file mode 100644
index 0000000..a71b92b
--- /dev/null
+++ b/src/axis/resources/services.xsd
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="serviceGroup">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="service"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="service">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="description"/>
+        <xs:element ref="messageReceivers"/>
+        <xs:element ref="parameter"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="description" type="xs:string"/>
+  <xs:element name="messageReceivers">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="messageReceiver"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageReceiver">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="mep" use="required" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="parameter">
+    <xs:complexType mixed="true">
+      <xs:attribute name="locked" use="required" type="xs:NMTOKEN"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java b/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
new file mode 100644
index 0000000..5b3052d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+/**
+ * General interface to perform CRUD operations on entities
+ * 
+ * @author solomax, swagner
+ * 
+ * @param <T>
+ */
+public interface IDataProviderDao<T extends IDataProviderEntity> {
+
+	/**
+	 * Get an instance of an {@link T}
+	 * 
+	 * @param id - id of instance to retrieve
+	 * @return instance with the id gived
+	 */
+	T get(long id);
+
+	/**
+	 * Get a list of instances of {@link T}
+	 * 
+	 * @param start - the start to range to retrieve
+	 * @param count - maximum instance count to retrieve
+	 * @return list of instances in the range specified
+	 */
+	List<T> get(int start, int count);
+
+	/**
+	 * Get a list of instances of {@link T}
+	 * 
+	 * @param search - string search criteria to filter entities
+	 * @param start - the start to range to retrieve
+	 * @param count - maximum instance count to retrieve
+	 * @param order - column and sort order
+	 * @return list of instances in the range specified
+	 */
+	List<T> get(String search, int start, int count, String order);
+
+	/**
+	 * Count the number of instances of {@link T}
+	 * 
+	 * @return count of instances
+	 */
+	long count();
+
+	/**
+	 * Count the number of instances of {@link T}
+	 * 
+	 * @param search - string search criteria to filter entities
+	 * @return count of instances satisfying given search criteria
+	 */
+	long count(String search);
+
+	/**
+	 * Update an instance of {@link T}
+	 * 
+	 * @param entity - entity to be updated
+	 * @param userId - user performed update
+	 */
+	T update(T entity, Long userId);
+
+	/**
+	 * Delete an instance of {@link T}
+	 * 
+	 * @param entity - entity to be deleted
+	 * @param userId - user performed delete
+	 */
+	void delete(T entity, Long userId);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
new file mode 100644
index 0000000..8345424
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ChatDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public ChatMessage get(long id) {
+		return em.createNamedQuery("getChatMessageById", ChatMessage.class)
+				.setParameter("id", id)
+				.getSingleResult();
+	}
+
+	//TODO additional methods should be added to get messages by external email
+	public List<ChatMessage> get(long userId, int start, int count) {
+		return em.createNamedQuery("getChatMessagesByUser", ChatMessage.class)
+				.setParameter("userId", userId)
+				.setFirstResult(start)
+				.setMaxResults(count)
+				.getResultList();
+	}
+
+	public List<ChatMessage> get(int start, int count) {
+		return em.createNamedQuery("getGlobalChatMessages", ChatMessage.class)
+				.setFirstResult(start)
+				.setMaxResults(count)
+				.getResultList();
+	}
+
+	public ChatMessage update(ChatMessage entity) {
+		entity.setSent(new Date());
+		if (entity.getId() == 0) {
+			em.persist(entity);
+		}
+		return entity;
+	}
+
+	public void delete(ChatMessage entity, long userId) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
new file mode 100644
index 0000000..8c0f876
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.whiteboardDrawStatus;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Insert/update/Delete on {@link Configuration}<br/>
+ * <br/>
+ * It provides basic mechanism to get a Conf Key:<br/>
+ * {@link #getConfValue(String, Class, String)} <br/>
+ * <br/>
+ * <b> {@link #get(String)} is deprecated!</b>
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class ConfigurationDao implements IDataProviderDao<Configuration> {
+	private static final Logger log = Red5LoggerFactory.getLogger(ConfigurationDao.class, webAppRootKey);
+	public static final long DEFAULT_MAX_UPLOAD_SIZE = 1024 * 1024 * 1024; // 1GB
+	public static final String DEFAULT_APP_NAME = "OpenMeetings";
+	public final static String[] searchFields = {"conf_key", "conf_value"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao userDao;
+
+	/**
+	 * @deprecated Dao's are not the place to store session variables, also
+	 *             updates to the key won't update this variable
+	 */
+	@Deprecated
+	private String appName = null;
+
+	/**
+	 * Retrieves Configuration regardless of its deleted status
+	 * 
+	 * @param confKey
+	 * @return
+	 */
+	public Configuration forceGet(String confKey) {
+		try {
+			List<Configuration> list = em.createNamedQuery("forceGetConfigurationByKey", Configuration.class)
+					.setParameter("conf_key", confKey).getResultList();
+			return list.isEmpty() ? null : list.get(0);
+		} catch (Exception e) {
+			log.error("[forceGet]: ", e);
+		}
+		return null;
+	}
+
+	public List<Configuration> get(String... keys) {
+		List<Configuration> result = new ArrayList<Configuration>();
+		for (String key : keys) { //iteration is necessary to fill list with all values 
+			List<Configuration> r = em.createNamedQuery("getConfigurationsByKeys", Configuration.class)
+					.setParameter("conf_keys", Arrays.asList(key))
+					.getResultList();
+			result.add(r.isEmpty() ? null : r.get(0));
+		}
+		return result;
+	}
+
+	/**
+	 * Return a object using a custom type and a default value if the key is not
+	 * present, or value is not set
+	 * 
+	 * Example: Integer my_key = getConfValue("my_key", Integer.class, "15");
+	 * 
+	 * @param key
+	 * @param type
+	 * @param defaultValue
+	 * @return
+	 */
+	public <T> T getConfValue(String key, Class<T> type, String defaultValue) {
+		try {
+			List<Configuration> list = get(key);
+
+			if (list == null || list.isEmpty() || list.get(0) == null) {
+				log.warn("Could not find key in configuration CONF_KEY: " + key);
+			} else {
+				String val = list.get(0).getConf_value();
+				// Use the custom value as default value
+				if (val != null) {
+					defaultValue = val;
+				}
+			}
+
+			if (defaultValue == null) {
+				return null;
+			}
+			// Either this can be directly assigned or try to find a constructor
+			// that handles it
+			if (type.isAssignableFrom(defaultValue.getClass())) {
+				return type.cast(defaultValue);
+			}
+			Constructor<T> c = type.getConstructor(defaultValue.getClass());
+			return c.newInstance(defaultValue);
+
+		} catch (Exception err) {
+			log.error("cannot be cast to return type, you have misconfigured your configuration CONF_KEY: " + key, err);
+			return null;
+		}
+	}
+
+	public List<Configuration> getConfigurations(int start, int max, String orderby, boolean asc) {
+		try {
+
+			String query = "SELECT c FROM Configuration c LEFT JOIN FETCH c.user WHERE c.deleted = false ORDER BY " + orderby;
+
+			if (asc) {
+				query += " ASC";
+			} else {
+				query += " DESC";
+			}
+
+			TypedQuery<Configuration> q = em.createQuery(query, Configuration.class);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getConfigurations]", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 */
+	public Configuration add(String key, String value, Long userId, String comment) {
+		Configuration c = new Configuration();
+		c.setConf_key(key);
+		c.setConf_value(value);
+		c.setComment(comment);
+		return update(c, userId);
+	}
+
+	/**
+	 * @deprecated please use {@link ConfigurationDao#update(Configuration, Long)}
+	 */
+	public Long addConfig(Configuration conf) {
+		try {
+			conf = em.merge(conf);
+			Long configuration_id = conf.getConfiguration_id();
+			return configuration_id;
+		} catch (Exception ex2) {
+			log.error("[updateConfByUID]: ", ex2);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * @deprecated please use {@link ConfigurationDao#update(Configuration, Long)}
+	 * @param conf
+	 * @return
+	 */
+	public Long updateConfig(Configuration conf) {
+		try {
+			if (conf.getConfiguration_id() == null
+					|| conf.getConfiguration_id() == 0
+					|| conf.getConfiguration_id() == 0L) {
+				em.persist(conf);
+			} else {
+				if (!em.contains(conf)) {
+					conf = em.merge(conf);
+				}
+			}
+			if (CONFIG_CRYPT_KEY.equals(conf.getConf_key())) {
+				configKeyCryptClassName = conf.getConf_value();
+			} else if ("show.whiteboard.draw.status".equals(conf.getConf_key())) {
+				whiteboardDrawStatus = "1".equals(conf.getConf_value());
+			}
+			return conf.getConfiguration_id();
+		} catch (Exception ex2) {
+			log.error("[updateConfByUID]: ", ex2);
+		}
+		return new Long(-1);
+	}
+
+	public String getAppName() {
+		if (appName == null) {
+			appName = getConfValue("application.name", String.class, DEFAULT_APP_NAME);
+		}
+		return appName;
+	}
+
+	public String getBaseUrl() {
+		String val = getConfValue(CONFIG_APPLICATION_BASE_URL, String.class, DEFAULT_BASE_URL);
+		if (val != null && !val.endsWith("/")) {
+			val += "/";
+		}
+		return val;
+	}
+
+	public Configuration get(long id) {
+		if (id <= 0) {
+			return null;
+		}
+		return em.createNamedQuery("getConfigurationById", Configuration.class)
+				.setParameter("configuration_id", id).getSingleResult();
+	}
+
+	public List<Configuration> get(int start, int count) {
+		return em.createNamedQuery("getNondeletedConfiguration", Configuration.class)
+				.setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	public List<Configuration> get(String search, int start, int count, String sort) {
+		TypedQuery<Configuration> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, false, sort, searchFields), Configuration.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		return em.createNamedQuery("countConfigurations", Long.class).getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public Configuration update(Configuration entity, Long userId) {
+		return update(entity, userId, false);
+	}
+	
+	public Configuration update(Configuration entity, Long userId, boolean deleted) {
+		String key = entity.getConf_key();
+		String value = entity.getConf_value();
+		if (entity.getConfiguration_id() == null || entity.getConfiguration_id() <= 0) {
+			entity.setStarttime(new Date());
+			entity.setDeleted(deleted);
+			em.persist(entity);
+		} else {
+			if (userId != null) {
+				entity.setUser(userDao.get(userId));
+			}
+			entity.setDeleted(deleted);
+			entity.setUpdatetime(new Date());
+			entity = em.merge(entity);
+		}
+		if (CONFIG_CRYPT_KEY.equals(key)) {
+			configKeyCryptClassName = value;
+		} else if ("show.whiteboard.draw.status".equals(key)) {
+			whiteboardDrawStatus = "1".equals(value);
+		} else if ("application.name".equals(key)) {
+			appName = value;
+		}
+		//TODO ensure entity returned is updated
+		return entity;
+	}
+
+	public void delete(Configuration entity, Long userId) {
+		entity.setUpdatetime(new Date());
+		this.update(entity, userId, true);
+	}
+
+	/**
+	 * returns the max upload size configured by max_upload_size config key
+	 * 
+	 * @param configurationDao
+	 * @return
+	 */
+	public long getMaxUploadSize() {
+		try {
+			return getConfValue(CONFIG_MAX_UPLOAD_SIZE_KEY, Long.class, "" + DEFAULT_MAX_UPLOAD_SIZE);
+		} catch (Exception e) {
+			log.error("Invalid value saved for max_upload_size conf key: ", e);
+		}
+		return DEFAULT_MAX_UPLOAD_SIZE;
+	}
+	
+	public String getCryptKey() {
+		if (configKeyCryptClassName == null) {
+			String cryptClass = getConfValue(CONFIG_CRYPT_KEY, String.class, null);
+			if (cryptClass != null) {
+				configKeyCryptClassName = cryptClass;
+			}
+		}
+
+		return configKeyCryptClassName;
+	}
+
+	public boolean getWhiteboardDrawStatus() {
+		if (whiteboardDrawStatus == null) {
+			String drawStatus = getConfValue("show.whiteboard.draw.status", String.class, "0");
+			whiteboardDrawStatus = "1".equals(drawStatus);
+		}
+		return whiteboardDrawStatus;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java
new file mode 100644
index 0000000..b4af047
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ErrorDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public Long addErrorType(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorType eType = new ErrorType();
+			eType.setErrortype_id(errortype_id);
+			eType.setStarttime(new Date());
+			eType.setDeleted(false);
+			eType.setFieldvalues_id(fieldvalues_id);
+			eType = em.merge(eType);
+			Long newerrortype_id = eType.getErrortype_id();
+			return newerrortype_id;
+		} catch (Exception ex2) {
+			log.error("[addErrorType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<ErrorType> getErrorTypes() {
+		try {
+			TypedQuery<ErrorType> query = em.createNamedQuery("getErrorTypes", ErrorType.class);
+			query.setParameter("deleted", true);
+			List<ErrorType> ll = query.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getErrorTypes]: ", ex2);
+		}
+		return null;
+	}
+
+	public ErrorType getErrorType(Long errortype_id) {
+		try {
+			TypedQuery<ErrorType> query = em.createNamedQuery("getErrorType", ErrorType.class);
+			query.setParameter("deleted", true);
+			query.setParameter("errortype_id", errortype_id);
+			return query.getSingleResult();
+		} catch (Exception ex2) {
+			log.error("[getErrorType(" + errortype_id + ")]", ex2);
+		}
+		return null;
+	}
+
+	public Long addErrorValues(Long errorvalues_id, Long errortype_id,
+			Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrorvalues_id(errorvalues_id);
+			eValue.setErrortype_id(errortype_id);
+			eValue.setDeleted(false);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			return eValue.getErrorvalues_id();
+		} catch (Exception ex2) {
+			log.error("[addErrorValues]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long getErrorValueById(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrortype_id(errortype_id);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			Long newerrorvalues_id = eValue.getErrorvalues_id();
+			return newerrorvalues_id;
+		} catch (Exception ex2) {
+			log.error("[getErrorValueById]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateErrorValues(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrortype_id(errortype_id);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			Long newerrorvalues_id = eValue.getErrorvalues_id();
+			return newerrorvalues_id;
+		} catch (Exception ex2) {
+			log.error("[addErrorType]: ", ex2);
+		}
+		return null;
+	}
+
+	public ErrorValue get(Long id) {
+		try {
+			TypedQuery<ErrorValue> query = em.createNamedQuery("getErrorValueById", ErrorValue.class);
+			query.setParameter("id", id);
+			ErrorValue e = null;
+			try {
+				e = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			return e;
+		} catch (Exception ex2) {
+			log.error("[get]", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
new file mode 100644
index 0000000..98cfb0e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import java.util.Calendar;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class MailMessageDao  implements IDataProviderDao<MailMessage> {
+	@PersistenceContext
+	private EntityManager em;
+	
+	public MailMessage get(long id) {
+		return em.createNamedQuery("getMailMessageById", MailMessage.class).setParameter("id", id).getSingleResult();
+	}
+
+	public List<MailMessage> get(int start, int count) {
+		return em.createNamedQuery("getMailMessages", MailMessage.class).setParameter("status", Status.NONE)
+				.setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	public List<MailMessage> get(String search, int start, int count, String order) {
+		return get(start, count);
+	}
+
+	public long count() {
+		return em.createNamedQuery("countMailMessages", Long.class).setParameter("status", Status.NONE)
+				.getSingleResult();
+	}
+
+	public long count(String search) {
+		return count();
+	}
+
+	public void resetSendingStatus(Calendar date) {
+		em.createQuery("UPDATE MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus " +
+				"	AND m.updated < :date")
+			.setParameter("noneStatus", Status.NONE)
+			.setParameter("sendingStatus", Status.SENDING)
+			.setParameter("date", date)
+			.executeUpdate();
+	}
+	
+	public MailMessage update(MailMessage m, Long userId) {
+		if (m.getId() == null) {
+			m.setInserted(Calendar.getInstance());
+			em.persist(m);
+		} else {
+			m.setUpdated(Calendar.getInstance());
+			m =	em.merge(m);
+		}
+		return m;
+	}
+
+	public void delete(MailMessage m, Long userId) {
+		em.remove(m);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java
new file mode 100644
index 0000000..187ce51
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.basic.Naviglobal;
+import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class NavigationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(NavigationDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public Naviglobal getGlobalMenuEntry(long globalId) {
+		try {
+			TypedQuery<Naviglobal> query = em.createNamedQuery("getNavigationById", Naviglobal.class);
+			query.setParameter("global_id", globalId);
+			return query.getSingleResult();
+		} catch (Exception ex2) {
+			log.error("getGlobalMenuEntry", ex2);
+		}
+		return null;
+
+	}
+
+	public List<Naviglobal> getMainMenu(boolean admin, long USER_ID) {
+		return em.createNamedQuery("getNavigation", Naviglobal.class)
+				.setParameter("level_id", admin ? 3L : 1L)
+				.getResultList();
+	}
+
+	public void addGlobalStructure(String action, int naviorder, long fieldvalues_id, boolean isleaf, boolean isopen, long level_id,
+			String name, boolean deleted, Long tooltip_fieldvalues_id) {
+		try {
+			Naviglobal ng = new Naviglobal();
+			ng.setAction(action);
+			ng.setComment("");
+			ng.setIcon("");
+			ng.setNaviorder(naviorder);
+			ng.setFieldvalues_id(fieldvalues_id);
+			ng.setIsleaf(isleaf);
+			ng.setIsopen(isopen);
+			ng.setDeleted(deleted);
+			ng.setLevel_id(level_id);
+			ng.setName(name);
+			ng.setStarttime(new Date());
+			ng.setTooltip_fieldvalues_id(tooltip_fieldvalues_id);
+			// CriteriaBuilder crit = em.getCriteriaBuilder();
+
+			em.merge(ng);
+
+		} catch (Exception ex2) {
+			log.error("addGlobalStructure", ex2);
+		}
+	}
+
+	public void addMainStructure(String action, String params, int naviorder, long fieldvalues_id, boolean isleaf, boolean isopen,
+			long level_id, String name, long global_id, boolean deleted, Long tooltip_fieldvalues_id) {
+		try {
+			Naviglobal ng = getGlobalMenuEntry(global_id);
+			List<Navimain> mainEntries = ng.getMainnavi();
+			mainEntries = (mainEntries == null) ? new ArrayList<Navimain>() : mainEntries;
+
+			Navimain nm = new Navimain();
+			nm.setAction(action);
+			nm.setParams(params);
+			nm.setComment("");
+			nm.setIcon("");
+			nm.setFieldvalues_id(fieldvalues_id);
+			nm.setIsleaf(isleaf);
+			nm.setNaviorder(naviorder);
+			nm.setIsopen(isopen);
+			nm.setLevel_id(level_id);
+			nm.setName(name);
+			nm.setDeleted(deleted);
+			nm.setGlobal_id(global_id);
+			nm.setStarttime(new Date());
+			nm.setTooltip_fieldvalues_id(tooltip_fieldvalues_id);
+
+			mainEntries.add(nm);
+			ng.setMainnavi(mainEntries);
+
+			em.merge(ng);
+
+		} catch (Exception ex2) {
+			log.error("addMainStructure", ex2);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java
new file mode 100644
index 0000000..53735ca
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentCategoryDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentCategoryDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao usersDao;
+
+	public AppointmentCategory get(Long categoryId) {
+		try {
+			log.debug("getAppointmentCategoryById: " + categoryId);
+
+			String hql = "select app from AppointmentCategory app "
+					+ "WHERE app.deleted <> :deleted "
+					+ "AND app.categoryId = :categoryId";
+
+			TypedQuery<AppointmentCategory> query = em.createQuery(hql, AppointmentCategory.class);
+			query.setParameter("deleted", true);
+			query.setParameter("categoryId", categoryId);
+
+			AppointmentCategory appointCategory = null;
+			try {
+				appointCategory = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return appointCategory;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentCategoryById]: " + ex2);
+		}
+		return null;
+	}
+
+	public Long updateAppointmentCategory(Long categoryId, String name) {
+		try {
+
+			AppointmentCategory ac = this
+					.get(categoryId);
+
+			ac.setName(name);
+			ac.setUpdatetime(new Date());
+
+			if (ac.getCategoryId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return categoryId;
+		} catch (Exception ex2) {
+			log.error("[updateAppointmentCategory]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addAppointmentCategory(Long user_id, String name, String comment) {
+		try {
+
+			AppointmentCategory ac = new AppointmentCategory();
+
+			ac.setName(name);
+			ac.setStarttime(new Date());
+			ac.setDeleted(false);
+			ac.setUser(usersDao.get(user_id));
+			ac.setComment(comment);
+
+			ac = em.merge(ac);
+			Long category_id = ac.getCategoryId();
+
+			return category_id;
+		} catch (Exception ex2) {
+			log.error("[addAppointmentCategory]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long deleteAppointmentCategory(Long categoryId) {
+		try {
+
+			AppointmentCategory ac = this
+					.get(categoryId);
+
+			log.debug("ac: " + ac);
+
+			if (ac == null) {
+				log.debug("Already deleted / Could not find: " + categoryId);
+				return categoryId;
+			}
+			ac.setUpdatetime(new Date());
+			ac.setDeleted(true);
+			if (ac.getCategoryId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+			return categoryId;
+		} catch (Exception ex2) {
+			log.error("[deleteAppointmentCategory]: " + ex2);
+		}
+		return null;
+	}
+
+	public List<AppointmentCategory> getAppointmentCategoryList() {
+		try {
+
+			String hql = "select a from AppointmentCategory a "
+					+ "WHERE a.deleted <> :deleted ";
+
+			TypedQuery<AppointmentCategory> query = em.createQuery(hql, AppointmentCategory.class);
+			query.setParameter("deleted", true);
+
+			List<AppointmentCategory> listAppointmentCategory = query
+					.getResultList();
+
+			return listAppointmentCategory;
+		} catch (Exception ex2) {
+			log.error("[AppointmentCategory]: " + ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
new file mode 100644
index 0000000..6edf4bb
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -0,0 +1,327 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private IInvitationManager invitationManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	/*
+	 * insert, update, delete, select
+	 */
+
+	/**
+	 * @author o.becherer Retrievment of Appointment for room
+	 */
+	// -----------------------------------------------------------------------------------------------
+	public Appointment getAppointmentByRoom(Long room_id) {
+		log.debug("AppointMentDaoImpl.getAppointmentByRoom");
+
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentByRoomId", Appointment.class);
+		query.setParameter("room_id", room_id);
+
+		List<Appointment> appoint = query.getResultList();
+
+		if (appoint.size() > 0) {
+			return appoint.get(0);
+		}
+
+		return null;
+	}
+
+	// -----------------------------------------------------------------------------------------------
+
+	public Appointment get(Long id) {
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentById", Appointment.class);
+		query.setParameter("id", id);
+
+		Appointment appoint = null;
+		try {
+			appoint = query.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return appoint;
+	}
+
+	public Appointment getAppointmentByIdBackup(Long appointmentId) {
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentByIdAny", Appointment.class).setParameter("id", appointmentId);
+
+		Appointment appoint = null;
+		try {
+			appoint = query.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+
+		return appoint;
+	}
+
+	public List<Appointment> getAppointments() {
+		return em.createNamedQuery("getAppointments", Appointment.class).getResultList();
+	}
+
+	public Appointment update(Appointment a, Long userId) {
+		return update(a, userId, true);
+	}
+	
+	public Appointment update(Appointment a, Long userId, boolean sendmails) {
+		Room r = a.getRoom();
+		if (r.getRooms_id() == null) {
+			r.setName(a.getTitle());
+			r.setNumberOfPartizipants(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
+		}
+		roomDao.update(r, userId);
+		if (sendmails) {
+			Set<Long> mmIds = a.getId() == null ? new HashSet<Long>()
+					: meetingMemberDao.getMeetingMemberIdsByAppointment(a.getId());
+			// update meeting members
+			Appointment a0 = a.getId() == null ? null : get(a.getId());
+			boolean sendMail = a0 == null || !a0.getTitle().equals(a.getTitle()) ||
+					!(a0.getDescription() != null ? a0.getDescription().equals(a.getDescription()) : true) ||
+					!(a0.getLocation() != null ? a0.getLocation().equals(a.getLocation()) : true) ||
+					!a0.getStart().equals(a.getStart()) ||
+					!a0.getEnd().equals(a.getEnd());
+			List<MeetingMember> mmList = a.getMeetingMembers();
+			if (mmList != null){
+				for (MeetingMember mm : mmList) {
+					if (mm.getId() == null || !mmIds.contains(mm.getId())) {
+						invitationManager.processInvitation(a, mm, MessageType.Create);
+					} else {
+						mmIds.remove(mm.getId());
+						invitationManager.processInvitation(a, mm, MessageType.Update, sendMail);
+					}
+				}
+			}
+			for (long id : mmIds) {
+				invitationManager.processInvitation(a, meetingMemberDao.get(id), MessageType.Cancel);
+			}
+			//notify owner
+			MeetingMember owner = new MeetingMember();
+			owner.setUser(a.getOwner());
+			if (a.getId() == null) {
+				invitationManager.processInvitation(a, owner, MessageType.Create);
+			} else if (a.isDeleted()) {
+				invitationManager.processInvitation(a, owner, MessageType.Cancel);
+			} else if (sendMail) {
+				invitationManager.processInvitation(a, owner, MessageType.Update, sendMail);
+			}
+		}
+		if (a.getId() == null) {
+			a.setInserted(new Date());
+			em.persist(a);
+		} else {
+			a.setUpdated(new Date());
+			a =	em.merge(a);
+		}
+		return a;
+	}
+	
+	public List<Appointment> getAppointmentsByRoomId(Long roomId) {
+		try {
+
+			String hql = "select a from Appointment a "
+					+ "WHERE a.room.rooms_id = :roomId ";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+			query.setParameter("roomId", roomId);
+			List<Appointment> ll = query.getResultList();
+
+			return ll;
+		} catch (Exception e) {
+			log.error("[getAppointmentsByRoomId]", e);
+		}
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------------
+
+	public void delete(Appointment a, Long userId) {
+		a.setUpdated(new Date());
+		a.setDeleted(true);
+		a.setMeetingMembers(null);
+		if (Boolean.TRUE.equals(a.getRoom().getAppointment())) {
+			a.getRoom().setDeleted(true);
+		}
+		update(a, userId);
+	}
+	
+	public List<Appointment> getAppointmentsByRange(Long userId, Date start, Date end) {
+		log.debug("Start " + start + " End " + end);
+
+		TypedQuery<Appointment> query = em.createNamedQuery("appointmentsInRange", Appointment.class);
+		query.setParameter("starttime", start);
+		query.setParameter("endtime", end);
+		query.setParameter("userId", userId);
+		
+		List<Appointment> listAppoints = new ArrayList<Appointment>(query.getResultList()); 
+		TypedQuery<Appointment> q1 = em.createNamedQuery("joinedAppointmentsInRange", Appointment.class);
+		q1.setParameter("starttime", start);
+		q1.setParameter("endtime", end);
+		q1.setParameter("userId", userId);
+		for (Appointment a : q1.getResultList()) {
+			a.setConnectedEvent(true); //TODO need to be reviewed
+			listAppoints.add(a);
+		}
+
+		return listAppoints;
+	}
+
+	public List<Appointment> getAppointmentsInRange(Calendar start, Calendar end) {
+		TypedQuery<Appointment> q = em.createNamedQuery("appointmentsInRangeRemind", Appointment.class);
+		q.setParameter("starttime", start.getTime());
+		q.setParameter("endtime", end.getTime());
+		return q.getResultList();
+	}
+	
+	public List<Appointment> getAppointmentsByCat(Long categoryId) {
+		try {
+
+			String hql = "select a from Appointments a "
+					+ "WHERE a.deleted false "
+					+ "AND a.appointmentCategory.categoryId = :categoryId";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+			query.setParameter("categoryId", categoryId);
+
+			List<Appointment> listAppoints = query.getResultList();
+			return listAppoints;
+		} catch (Exception ex2) {
+			log.error("[getAppointements]: ", ex2);
+		}
+		return null;
+	}
+
+	// next appointment to select date
+	public Appointment getNextAppointment(Long userId, Date start) {
+		List<Appointment> list = em.createNamedQuery("getNextAppointment", Appointment.class)
+				.setParameter("start", start).setParameter("userId", userId).getResultList();
+		return list == null || list.isEmpty() ? null : list.get(0);
+	}
+
+	public List<Appointment> searchAppointmentsByTitle(Long userId, String title) {
+		return em.createNamedQuery("getNextAppointment", Appointment.class)
+				.setParameter("title", title).setParameter("userId", userId).getResultList();
+	}
+
+	/**
+	 * @author becherer
+	 * @param userId
+	 * @return
+	 */
+	public List<Appointment> getTodaysAppointmentsbyRangeAndMember(Long userId) {
+		log.debug("getAppoitmentbyRangeAndMember : UserID - " + userId);
+
+		TimeZone timeZone = timezoneUtil.getTimeZone(usersDao.get(userId));
+
+		Calendar startCal = Calendar.getInstance(timeZone);
+		startCal.set(Calendar.MINUTE, 0);
+		startCal.set(Calendar.HOUR, 0);
+		startCal.set(Calendar.SECOND, 1);
+
+		Calendar endCal = Calendar.getInstance(timeZone);
+		endCal.set(Calendar.MINUTE, 23);
+		endCal.set(Calendar.HOUR, 59);
+		endCal.set(Calendar.SECOND, 59);
+
+		TypedQuery<Appointment> query = em.createNamedQuery("appointmentsInRangeByUser", Appointment.class);
+
+		query.setParameter("userId", userId);
+
+		query.setParameter("starttime", startCal.getTime());
+		query.setParameter("endtime", endCal.getTime());
+
+		List<Appointment> listAppoints = query.getResultList();
+		return listAppoints;
+	}
+
+	// ---------------------------------------------------------------------------------------------
+
+	public Appointment getAppointmentByRoomId(Long user_id, Long rooms_id) {
+		try {
+
+			String hql = "select a from Appointment a "
+					+ "WHERE a.deleted <> :deleted "
+					+ "AND a.owner.user_id = :user_id "
+					+ "AND a.room.rooms_id = :rooms_id ";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+
+			query.setParameter("deleted", true);
+			query.setParameter("user_id", user_id);
+			query.setParameter("rooms_id", rooms_id);
+
+			List<Appointment> listAppoints = query.getResultList();
+
+			if (listAppoints.size() > 0) {
+				return listAppoints.get(0);
+			}
+
+			return null;
+
+		} catch (Exception e) {
+			log.error("[getAppointmentByRoomId]", e);
+			return null;
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java
new file mode 100644
index 0000000..5288556
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentReminderTypDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentReminderTypDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao usersDao;
+
+	public AppointmentReminderTyps get(Long typId) {
+		try {
+			log.debug("AppointmentReminderTypById: " + typId);
+
+			String hql = "select app from AppointmentReminderTyps app "
+					+ "WHERE app.deleted <> :deleted "
+					+ "AND app.typId = :typId";
+
+			TypedQuery<AppointmentReminderTyps> query = em.createQuery(hql, AppointmentReminderTyps.class);
+			query.setParameter("deleted", true);
+			query.setParameter("typId", typId);
+
+			AppointmentReminderTyps appointmentReminderTyps = null;
+			try {
+				appointmentReminderTyps = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return appointmentReminderTyps;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentReminderTypsById]: " + ex2);
+		}
+		return null;
+	}
+
+	public Long updateAppointmentReminderTyps(Long typId, String name) {
+		try {
+
+			AppointmentReminderTyps ac = this
+					.get(typId);
+
+			ac.setName(name);
+			ac.setUpdatetime(new Date());
+
+			if (ac.getTypId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return typId;
+		} catch (Exception ex2) {
+			log.error("[updateAppointmentReminderTyps]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addAppointmentReminderTyps(Long user_id, String name, long fieldvalues_id) {
+		try {
+
+			AppointmentReminderTyps ac = new AppointmentReminderTyps();
+
+			ac.setName(name);
+			ac.setStarttime(new Date());
+			ac.setDeleted(false);
+			ac.setUser(usersDao.get(user_id));
+			ac.setFieldvalues_id(fieldvalues_id);
+
+			ac = em.merge(ac);
+			Long category_id = ac.getTypId();
+
+			return category_id;
+		} catch (Exception ex2) {
+			log.error("[addAppointmentReminderTyps]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long deleteAppointmentReminderTyp(Long typId) {
+		try {
+
+			AppointmentReminderTyps ac = this
+					.get(typId);
+
+			log.debug("ac: " + ac);
+
+			if (ac == null) {
+				log.debug("Already deleted / Could not find: " + typId);
+				return typId;
+			}
+			ac.setUpdatetime(new Date());
+			ac.setDeleted(true);
+
+			if (ac.getTypId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return typId;
+		} catch (Exception ex2) {
+			log.error("[deleteAppointmentReminderTyp]: " + ex2);
+		}
+		return null;
+	}
+
+	public List<AppointmentReminderTyps> getAppointmentReminderTypList(long language_id) {
+		log.debug("getAppointmenetReminderTypList");
+
+		try {
+
+			String hql = "select a from AppointmentReminderTyps a WHERE a.deleted <> :deleted ";
+
+			TypedQuery<AppointmentReminderTyps> query = em.createQuery(hql, AppointmentReminderTyps.class);
+			query.setParameter("deleted", true);
+
+			List<AppointmentReminderTyps> listAppointmentReminderTyp = query.getResultList();
+
+			return listAppointmentReminderTyp;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentReminderTypList]: " + ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java
new file mode 100644
index 0000000..663496f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public interface IInvitationManager {
+	enum MessageType {
+		Create
+		, Update
+		, Cancel
+	}
+	
+	void processInvitation(Appointment a, MeetingMember member, MessageType type);
+	
+	void processInvitation(Appointment a, MeetingMember mm, MessageType type, boolean sendMail);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
new file mode 100644
index 0000000..c88202a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class MeetingMemberDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(MeetingMemberDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	public MeetingMember get(Long meetingMemberId) {
+		MeetingMember meetingMember = null;
+		try {
+			meetingMember = em.createNamedQuery("getMeetingMemberById", MeetingMember.class)
+					.setParameter("id", meetingMemberId).getSingleResult();
+		} catch (NoResultException ex) {
+		}
+
+		return meetingMember;
+	}
+
+	public List<MeetingMember> getMeetingMembers() {
+		return em.createNamedQuery("getMeetingMembers", MeetingMember.class).getResultList();
+	}
+
+	public Set<Long> getMeetingMemberIdsByAppointment(Long appointmentId) {
+		log.debug("getMeetingMemberIdsByAppointment: " + appointmentId);
+
+		return new HashSet<Long>(em.createNamedQuery("getMeetingMemberIdsByAppointment", Long.class)
+				.setParameter("id", appointmentId)
+				.getResultList());
+	}
+	
+	/**
+	 * Updating MeetingMember
+	 */
+	// -------------------------------------------------------------------------------
+	public MeetingMember update(MeetingMember meetingMember) {
+		if (meetingMember.getId() == null) {
+			em.persist(meetingMember);
+		} else {
+			if (!em.contains(meetingMember)) {
+				meetingMember = em.merge(meetingMember);
+			}
+		}
+		return meetingMember;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java b/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
new file mode 100644
index 0000000..14f27c4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
@@ -0,0 +1,415 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.file;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ * 
+ */
+@Transactional
+public class FileExplorerItemDao {
+
+    private static final Logger log = Red5LoggerFactory.getLogger(
+            FileExplorerItemDao.class,
+            OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+    public Long add(String fileName, String fileHash,
+            Long parentFileExplorerItemId, Long ownerId, Long room_id,
+            Long insertedBy, Boolean isFolder, Boolean isImage,
+            Boolean isPresentation, String wmlFilePath,
+            Boolean isStoredWmlFile, Boolean isChart,
+            Long externalFileId, String externalType) {
+        log.debug(".add(): adding file " + fileName+ " roomID: "+room_id);
+        try {
+            FileExplorerItem fileItem = new FileExplorerItem();
+            fileItem.setFileName(fileName);
+            fileItem.setFileHash(fileHash);
+            fileItem.setDeleted(false);
+            fileItem.setParentFileExplorerItemId(parentFileExplorerItemId);
+            fileItem.setOwnerId(ownerId);
+            fileItem.setRoom_id(room_id);
+            fileItem.setInserted(new Date());
+            fileItem.setInsertedBy(insertedBy);
+            fileItem.setIsFolder(isFolder);
+            fileItem.setIsImage(isImage);
+            fileItem.setIsPresentation(isPresentation);
+            fileItem.setUpdated(new Date());
+            fileItem.setWmlFilePath(wmlFilePath);
+            fileItem.setIsStoredWmlFile(isStoredWmlFile);
+            fileItem.setIsChart(isChart);
+            fileItem.setExternalFileId(externalFileId);
+            fileItem.setExternalType(externalType);
+
+			fileItem = em.merge(fileItem);
+			Long fileItemId = fileItem.getFileExplorerItemId();
+
+            log.debug(".add(): file " + fileName + " added as " + fileItemId);
+            return fileItemId;
+        } catch (Exception ex2) {
+            log.error(".add(): ", ex2);
+        }
+        return null;
+    }
+    
+    public Long addFileExplorerItem(FileExplorerItem fileItem) {
+        try {
+
+			fileItem = em.merge(fileItem);
+			Long fileItemId = fileItem.getFileExplorerItemId();
+
+            return fileItemId;
+        } catch (Exception ex2) {
+            log.error("[addFileExplorerItem]", ex2);
+        }
+        return null;
+    }
+
+	public List<FileExplorerItem> getFileExplorerItemsByRoomAndOwner(
+            Long room_id, Long ownerId) {
+        log.debug(".getFileExplorerItemsByRoomAndOwner() started");
+        try {
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.room_id = :room_id " + "AND c.ownerId = :ownerId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id",room_id);
+			query.setParameter("ownerId",ownerId);
+			
+			List<FileExplorerItem> fileExplorerList = query.getResultList();
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsByRoomAndOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByRoom(Long room_id,
+            Long parentFileExplorerItemId) {
+        log.debug("getFileExplorerItemsByRoom room_id :: "+room_id);
+        try {
+
+			String hql = "SELECT c FROM FileExplorerItem c " +
+					"WHERE c.deleted <> :deleted " +
+					"AND c.room_id = :room_id " +
+					"AND c.ownerId IS NULL " +
+					"AND c.parentFileExplorerItemId = :parentFileExplorerItemId " +
+					"ORDER BY c.isFolder DESC, c.fileName ";
+			
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id",room_id);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+	        FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+			
+			return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByRoom]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByOwner(Long ownerId,
+            Long parentFileExplorerItemId) {
+        log.debug(".getFileExplorerItemsByOwner() started");
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.ownerId = :ownerId "
+                    + "AND c.parentFileExplorerItemId = :parentFileExplorerItemId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("ownerId",ownerId);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+            FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByParent(
+            Long parentFileExplorerItemId) {
+        log.debug(".getFileExplorerItemsByParent() started");
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.parentFileExplorerItemId = :parentFileExplorerItemId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+            FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem getFileExplorerItemsByHash(String hash) {
+        try {
+
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getByHash", FileExplorerItem.class);
+			query.setParameter("fileHash", hash);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsById]: ", ex2);
+        }
+        return null;
+    }
+    
+    public FileExplorerItem getFileExplorerItemsById(Long fileExplorerItemId) {
+        try {
+
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getById", FileExplorerItem.class);
+			query.setParameter("fileExplorerItemId", fileExplorerItemId);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsById]: ", ex2);
+        }
+        return null;
+    }
+    
+    public FileExplorerItem getFileExplorerItemsByExternalIdAndType(Long externalFileId, String externalType) {
+        log.debug(".getFileExplorerItemsByExternalIdAndType() started");
+
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.externalFileId = :externalFileId " +
+            		"AND c.externalType LIKE :externalType";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("externalFileId", externalFileId);
+			query.setParameter("externalType", externalType);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsByExternalIdAndType]: ", ex2);
+        }
+        return null;
+    }
+
+    public List<FileExplorerItem> getFileExplorerItems() {
+        log.debug(".getFileExplorerItems() started");
+
+        try {
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getAllFiles", FileExplorerItem.class);
+
+            List<FileExplorerItem> fileExplorerList = query.getResultList();
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItems]: ", ex2);
+        }
+        return null;
+    }    
+
+    /**
+     * @param fileExplorerItemId
+     */
+    public void deleteFileExplorerItem(Long fileExplorerItemId) {
+        log.debug(".deleteFileExplorerItem() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setDeleted(true);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[deleteFileExplorerItem]: ", ex2);
+        }
+    }
+    
+    public void deleteFileExplorerItemByExternalIdAndType(Long externalFilesid, String externalType) {
+        log.debug(".deleteFileExplorerItemByExternalIdAndType() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsByExternalIdAndType(externalFilesid, externalType);
+
+            if (fId == null) {
+            	throw new Exception("externalFilesid: "+externalFilesid+" and externalType: "+externalType+" Not found");
+            }
+            
+            fId.setDeleted(true);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[deleteFileExplorerItemByExternalIdAndType]: ", ex2);
+        }
+    }
+
+    /**
+     * @param fileExplorerItemId
+     * @param fileName
+     */
+    public void updateFileOrFolderName(Long fileExplorerItemId, String fileName) {
+        log.debug(".updateFileOrFolderName() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setFileName(fileName);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolderName]: ", ex2);
+        }
+    }
+
+    public void updateFileOrFolder(FileExplorerItem fId) {
+        log.debug(".updateFileOrFolder() started");
+        try {
+            // fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolder]: ", ex2);
+        }
+    }
+
+    /**
+     * @param fileExplorerItemId
+     * @param newParentFileExplorerItemId
+     * @param isOwner
+     */
+    public void moveFile(Long fileExplorerItemId,
+            Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+            Long ownerId) {
+        log.debug(".moveFile() started");
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setParentFileExplorerItemId(parentFileExplorerItemId);
+
+            if (parentFileExplorerItemId == 0) {
+                if (isOwner) {
+                    // move to personal Folder
+                    fId.setOwnerId(ownerId);
+                } else {
+                    // move to public room folder
+                    fId.setOwnerId(null);
+                    fId.setRoom_id(room_id);
+                }
+            } else {
+                fId.setOwnerId(null);
+            }
+
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolderName]: ", ex2);
+        }
+    }
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java b/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java
new file mode 100644
index 0000000..3b80b4f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java
@@ -0,0 +1,394 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.label;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.XmlExport;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
+import org.apache.wicket.mock.MockWebResponse;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
+import org.apache.wicket.protocol.http.mock.MockHttpSession;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
+import org.apache.wicket.util.string.Strings;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+/**
+ * 
+ * CRUD operations for {@link StringLabel}
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class LabelDao implements IDataProviderDao<StringLabel>{
+	private static final Logger log = Red5LoggerFactory.getLogger(LabelDao.class, webAppRootKey);
+	private static final String ENTRY_ELEMENT = "entry";
+	private static final String KEY_ATTR = "key";
+	public static final String APP_RESOURCES_EN = "Application.properties.xml";
+	public static final String APP_RESOURCES = "Application_%s.properties.xml";
+	public static final LinkedHashMap<Long, Locale> languages = new LinkedHashMap<Long, Locale>(); //TODO hide it and return unmodifiable map
+	public static final ConcurrentHashMap<Locale, List<StringLabel>> labelCache = new ConcurrentHashMap<Locale, List<StringLabel>>();
+	public static final Set<String> keys = new HashSet<String>();
+
+	private static void storeLanguages() throws Exception {
+		Document d = XmlExport.createDocument();
+		Element r = XmlExport.createRoot(d, "language");
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			r.addElement("lang").addAttribute("id", "" + e.getKey()).addAttribute("code", e.getValue().toLanguageTag());
+		}
+		XmlExport.toXml(getLangFile(), d);
+	}
+	
+	public static void add(Locale l) throws Exception {
+		Long id = 0L;
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			id = e.getKey();
+		}
+		languages.put(++id,  l);
+		storeLanguages();
+		labelCache.put(l, new ArrayList<StringLabel>());
+	}
+	
+	public List<Map<String, Object>> getStrings(Long language_id, int start, int count) {
+		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
+		for (int i = 0; i < count; ++i) {
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put("id", start + i);
+			map.put("value", getString(start + i, language_id));
+			result.add(map);
+		}
+		return result;
+	}
+
+	public String getString(long fieldValuesId, long langId) {
+		Application a = null;
+		if (Application.exists()) {
+			a = Application.get();
+		} else {
+			a = (Application)Application.get(Application.getAppName());
+			ThreadContext.setApplication(a);
+		}
+		if (ThreadContext.getRequestCycle() == null) {
+			ServletWebRequest req = new ServletWebRequest(new MockHttpServletRequest((Application)a, new MockHttpSession(a.getServletContext()), a.getServletContext()), "");
+			RequestCycleContext rctx = new RequestCycleContext(req, new MockWebResponse(), a.getRootRequestMapper(), a.getExceptionMapperProvider().get()); 
+			ThreadContext.setRequestCycle(new RequestCycle(rctx));
+		}
+		if (ThreadContext.getSession() == null) {
+			WebSession s = WebSession.get();
+			s.setLanguage(langId);
+			ThreadContext.setSession(s);
+		}
+		return Application.getString(fieldValuesId, langId);
+	}
+
+	private static File getLangFile() {
+		return new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfLanguageFile);
+	}
+	
+	public static void initLanguageMap() {
+		SAXReader reader = new SAXReader();
+		try {
+			Document document = reader.read(getLangFile());
+			Element root = document.getRootElement();
+			languages.clear();
+			for (@SuppressWarnings("unchecked")Iterator<Element> it = root.elementIterator("lang"); it.hasNext();) {
+				Element item = it.next();
+				Long id = Long.valueOf(item.attributeValue("id"));
+				String code = item.attributeValue("code");
+				if (id == 3L) {
+					continue;
+				}
+				languages.put(id, Locale.forLanguageTag(code));
+			}
+		} catch (Exception e) {
+			log.error("Error while building language map");
+		}
+	}
+
+	public static String getLabelFileName(Locale l) {
+		String name = APP_RESOURCES_EN;
+		if (!Locale.ENGLISH.equals(l)) {
+			name = String.format(APP_RESOURCES, l.toLanguageTag().replace('-', '_'));
+		}
+		return name;
+	}
+	
+	private static void storeLabels(Locale l) throws Exception {
+		Document d = XmlExport.createDocument();
+		Element r = XmlExport.createRoot(d);
+		List<StringLabel> labels = labelCache.get(l);
+		for (StringLabel sl : labels) {
+			r.addElement(ENTRY_ELEMENT).addAttribute(KEY_ATTR, sl.getKey()).addCDATA(sl.getValue());
+		}
+		URL u = Application.class.getResource(getLabelFileName(l));
+		XmlExport.toXml(new File(u.toURI()), d);
+	}
+	
+	public static void upload(Locale l, InputStream is) throws Exception {
+		List<StringLabel> labels = getLabels(l, is);
+		URL u = Application.class.getResource(getLabelFileName(Locale.ENGLISH)); //get the URL of existing resource
+		File el = new File(u.toURI());
+		File f = new File(el.getParentFile(), getLabelFileName(l));
+		if (!f.exists()) {
+			f.createNewFile();
+		}
+		labelCache.put(l, labels);
+		storeLabels(l);
+	}
+	
+	private static List<StringLabel> getLabels(Locale l) {
+		List<StringLabel> labels = new ArrayList<StringLabel>();
+		InputStream is = null;
+		try {
+			is = Application.class.getResourceAsStream(getLabelFileName(l));
+			labels = getLabels(l, is);
+		} catch (Exception e) {
+			log.error("Error reading resources document", e);
+		} finally {
+			if (is != null) {
+				try {
+					is.close();
+				} catch (Exception e) {
+					//no-op
+				}
+			}
+		}
+		return labels;
+	}
+	
+	private static List<StringLabel> getLabels(Locale l, InputStream is) throws Exception {
+		final List<StringLabel> labels = new ArrayList<StringLabel>();
+		SAXParserFactory spf = SAXParserFactory.newInstance();
+	    spf.setNamespaceAware(true);
+		try {
+		    SAXParser parser = spf.newSAXParser();
+		    XMLReader xr = parser.getXMLReader();
+		    xr.setContentHandler(new ContentHandler() {
+		    	StringLabel label = null;
+		    	
+				@Override
+				public void startPrefixMapping(String prefix, String uri) throws SAXException {}
+				
+				@Override
+				public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+					if (ENTRY_ELEMENT.equals(localName)) {
+						label = new StringLabel(atts.getValue(KEY_ATTR), "");
+					}
+				}
+				
+				@Override
+				public void startDocument() throws SAXException {}
+				
+				@Override
+				public void skippedEntity(String name) throws SAXException {}
+				
+				@Override
+				public void setDocumentLocator(Locator locator) {}
+				
+				@Override
+				public void processingInstruction(String target, String data) throws SAXException {}
+				
+				@Override
+				public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}
+				
+				@Override
+				public void endPrefixMapping(String prefix) throws SAXException {}
+				
+				@Override
+				public void endElement(String uri, String localName, String qName) throws SAXException {
+					if (ENTRY_ELEMENT.equals(localName)) {
+						labels.add(label);
+					}
+				}
+				
+				@Override
+				public void endDocument() throws SAXException {}
+				
+				@Override
+				public void characters(char[] ch, int start, int length) throws SAXException {
+					StringBuilder sb = new StringBuilder(label.getValue());
+					sb.append(ch, start, length);
+					label.setValue(sb.toString());
+				}
+			});
+			xr.parse(new InputSource(is));
+		} catch (Exception e) {
+			throw e;
+		}
+		return labels;
+	}
+	
+	private List<StringLabel> getLabels(Locale l, final String search) {
+		if (labelCache.get(l) == null) {
+			labelCache.put(l, getLabels(l));
+		}
+		List<StringLabel> result = new ArrayList<StringLabel>(labelCache.get(l));
+		if (!Strings.isEmpty(search)) {
+			CollectionUtils.filter(result, new Predicate() {
+				@Override
+				public boolean evaluate(Object o) {
+					StringLabel sl = (StringLabel)o;
+					return o != null && (sl.getKey().contains(search) || sl.getValue().contains(search));
+				}
+			});
+		}
+		return result;
+	}
+	
+	@Override
+	public StringLabel get(long id) {
+		return null;
+	}
+
+	@Override
+	public List<StringLabel> get(int start, int count) {
+		return null;
+	}
+
+	@Override
+	public List<StringLabel> get(String search, int start, int count, String order) {
+		return null;
+	}
+
+	public List<StringLabel> get(Locale l, final String search, int start, int count, final SortParam<String> sort) {
+		List<StringLabel> result = getLabels(l, search);
+		if (sort != null) {
+			Collections.sort(result, new Comparator<StringLabel>() {
+				@Override
+				public int compare(StringLabel o1, StringLabel o2) {
+					int val = 0;
+					if (KEY_ATTR.equals(sort.getProperty())) {
+						try {
+							int i1 = Integer.parseInt(o1.getKey()), i2 = Integer.parseInt(o2.getKey());
+							val = i1 - i2;
+						} catch (Exception e) {
+							val = o1.getKey().compareTo(o2.getKey());
+						}
+					} else {
+						val = o1.getValue().compareTo(o2.getValue());
+					}
+					return (sort.isAscending() ? 1 : -1) * val;
+				}
+			});
+		}
+		return result.subList(start, start + count > result.size() ? result.size() : start + count);
+	}
+	
+	@Override
+	public long count() {
+		return 0;
+	}
+
+	@Override
+	public long count(String search) {
+		return 0;
+	}
+
+	public long count(Locale l, final String search) {
+		return getLabels(l, search).size();
+	}
+
+	@Override
+	public StringLabel update(StringLabel entity, Long userId) {
+		return null;
+	}
+
+	public StringLabel update(Locale l, StringLabel entity) throws Exception {
+		List<StringLabel> labels = labelCache.get(l);
+		if (!labels.contains(entity)) {
+			labels.add(entity);
+			keys.add(entity.getKey());
+		}
+		storeLabels(l);
+		return entity;
+	}
+	
+	@Override
+	public void delete(StringLabel entity, Long userId) {
+	}
+	
+	public void delete(Locale l, StringLabel entity) throws Exception {
+		List<StringLabel> labels = labelCache.get(l);
+		if (labels.contains(entity)) {
+			labels.remove(entity);
+			keys.remove(entity.getKey());
+			storeLabels(l);
+		}
+	}
+
+	public static void delete(Locale l) {
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			if (e.getValue().equals(l)) {
+				languages.remove(e.getKey());
+				break;
+			}
+		}
+		labelCache.remove(l);
+		try {
+			URL u = Application.class.getResource(getLabelFileName(l));
+			if (u != null) {
+				File f = new File(u.toURI());
+				if (f.exists()) {
+					f.delete();
+				}
+			}
+		} catch (Exception e) {
+			log.error("Unexpected error while deleting language", e);
+		}
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
new file mode 100644
index 0000000..dbead7a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.log;
+
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
+import org.apache.openmeetings.db.entity.log.ConferenceLogType;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ConferenceLogDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLogDao.class, OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private ConferenceLogTypeDao conferenceLogTypeDao;
+
+	public Long addConferenceLog(String eventType, Long userId, String streamid, 
+			Long room_id, String userip, String scopeName, 
+			String externalUserId, String externalUserType, String email,
+			String firstname, String lastname) {
+		try {
+			
+			ConferenceLogType confLogType = conferenceLogTypeDao.getConferenceLogTypeByEventName(eventType);
+			if (confLogType == null) {
+				conferenceLogTypeDao.addConferenceLogType(eventType);
+				confLogType = conferenceLogTypeDao.getConferenceLogTypeByEventName(eventType);
+			}
+			
+			ConferenceLog confLog = new ConferenceLog();
+			confLog.setConferenceLogType(confLogType);
+			confLog.setInserted(new Date());
+			confLog.setUserId(userId);
+			confLog.setStreamid(streamid);
+			confLog.setScopeName(scopeName);
+			confLog.setRoom_id(room_id);
+			confLog.setUserip(userip);
+			confLog.setExternalUserId(externalUserId);
+			confLog.setExternalUserType(externalUserType);
+			confLog.setFirstname(firstname);
+			confLog.setLastname(lastname);
+			confLog.setEmail(email);
+			
+			confLog = em.merge(confLog);
+			Long confLogId = confLog.getConferenceLogId();
+
+			return confLogId;
+		} catch (Exception ex2) {
+			log.error("[addConferenceLog]: ",ex2);
+		}
+		return null;
+	}
+	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java
new file mode 100644
index 0000000..22472ae
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.log;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.log.ConferenceLogType;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ConferenceLogTypeDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLogTypeDao.class, OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	public Long addConferenceLogType(String eventType) {
+		try {
+			ConferenceLogType confLogType = new ConferenceLogType();
+			confLogType.setEventType(eventType);
+			confLogType.setInserted(new Date());
+			confLogType = em.merge(confLogType);
+			return confLogType.getConferenceLogTypeId();
+		} catch (Exception ex2) {
+			log.error("[addConferenceLogType]: ", ex2);
+		}
+		return null;
+	}
+	
+	public ConferenceLogType getConferenceLogTypeByEventName(String eventType) {
+		try {
+			TypedQuery<ConferenceLogType> query = em.createNamedQuery("getConferenceLogTypeByEventName", ConferenceLogType.class);
+			query.setParameter("eventType",eventType);
+			
+			//Seems like this does throw an error sometimes cause it does not return a unique Result
+			//ConferenceLogType confLogType = (ConferenceLogType) query.getSingleResult();
+			List<ConferenceLogType> confLogTypes = query.getResultList();
+			if (confLogTypes != null && confLogTypes.size() > 0) {
+				return confLogTypes.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getConferenceLogTypeByEventName]: ", ex2);
+		}
+		return null;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
new file mode 100644
index 0000000..3d9c231
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
@@ -0,0 +1,355 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingContainerData;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ * 
+ */
+@Transactional
+public class FlvRecordingDao {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingDao.class, webAppRootKey);
+	
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao userDao;
+
+	public FlvRecording get(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingById", FlvRecording.class);
+			query.setParameter("id", flvRecordingId);
+
+			FlvRecording flvRecording = null;
+			try {
+				flvRecording = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			return flvRecording;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingById]: ", ex2);
+		}
+		return null;
+	}
+
+	public FlvRecording getRecordingByHash(String hash) {
+		try {
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingByHash", FlvRecording.class);
+			query.setParameter("fileHash", hash);
+
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+				// noop
+			}
+		} catch (Exception ex2) {
+			log.error("[getRecordingByHash]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordings() {
+		try {
+			return em.createQuery("SELECT c FROM FlvRecording c WHERE c.deleted = false", FlvRecording.class)
+					.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordings]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalUserId(String externalUserId, String externalUserType) {
+		try {
+			log.debug("getFlvRecordingByExternalUserId :externalUserId: {}; externalType: {}", externalUserId, externalUserType);
+
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingsByExternalUser", FlvRecording.class);
+			query.setParameter("externalUserId", externalUserId);
+			query.setParameter("externalUserType", externalUserType);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalUserId :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalUserId]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalRoomTypeAndCreator(String externalRoomType, Long insertedBy) {
+		try {
+
+			log.debug("getFlvRecordingByExternalRoomType :externalRoomType: " + externalRoomType);
+
+			String hql = "SELECT c FROM FlvRecording c, Room r WHERE c.room_id = r.rooms_id "
+					+ "AND r.externalRoomType LIKE :externalRoomType AND c.insertedBy LIKE :insertedBy "
+					+ "AND c.deleted = false";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("insertedBy", insertedBy);
+			query.setParameter("deleted", true);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalRoomType :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalRoomType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getAllFlvRecordings() {
+		try {
+			String hql = "SELECT c FROM FlvRecording c LEFT JOIN FETCH c.flvRecordingMetaData ORDER BY c.flvRecordingId";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAllFlvRecordings]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalRoomType(String externalRoomType) {
+		try {
+
+			log.debug("getFlvRecordingByExternalRoomType :externalRoomType: " + externalRoomType);
+
+			String hql = "SELECT c FROM FlvRecording c, Room r " + "WHERE c.room_id = r.rooms_id "
+					+ "AND r.externalRoomType LIKE :externalRoomType " + "AND c.deleted <> :deleted ";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("deleted", true);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalRoomType :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalRoomType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getRecordingsByExternalType(String externalType) {
+		try {
+			log.debug("getRecordingsByExternalType :externalType: " + externalType);
+
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingsByExternalType", FlvRecording.class);
+			query.setParameter("externalType", externalType);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRecordingsByExternalType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingRootByPublic(Long orgId) {
+		TypedQuery<FlvRecording> q = em.createNamedQuery(orgId == null ? "getRecordingsPublic" : "getRecordingsByOrganization", FlvRecording.class);
+		if (orgId != null) {
+			q.setParameter("organization_id", orgId);
+		}
+		return q.getResultList();
+	}
+
+	public List<FlvRecording> getFlvRecordingRootByOwner(Long ownerId) {
+		return em.createNamedQuery("getRecordingsByOwner", FlvRecording.class).setParameter("ownerId", ownerId).getResultList();
+	}
+
+	public List<FlvRecording> getFlvRecordingByRoomId(Long room_id) {
+		try {
+
+			String hql = "SELECT c FROM FlvRecording c " + "WHERE c.deleted <> :deleted " + "AND c.room_id = :room_id "
+					+ "ORDER BY c.folder DESC, c.fileName ";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id", room_id);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByOwner]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByParent(Long parentId) {
+		return em.createNamedQuery("getRecordingsByParent", FlvRecording.class).setParameter("parentId", parentId).getResultList();
+	}
+
+	public void updateFlvRecordingEndTime(Long flvRecordingId, Date recordEnd, Long organization_id) {
+		try {
+
+			FlvRecording fId = get(flvRecordingId);
+
+			fId.setProgressPostProcessing(0);
+			fId.setRecordEnd(recordEnd);
+			fId.setOrganization_id(organization_id);
+
+			update(fId);
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingEndTime]: ", ex2);
+		}
+	}
+
+	/**
+	 * @param fileExplorerItemId
+	 */
+	public boolean delete(Long flvRecordingId) {
+		try {
+
+			FlvRecording f = get(flvRecordingId);
+			return delete(f);
+		} catch (Exception ex2) {
+			log.error("[delete]: ", ex2);
+		}
+
+		return false;
+	}
+
+	public boolean delete(FlvRecording f) {
+		if (f == null || f.getFlvRecordingId() == 0) {
+			return false;
+		}
+		f.setDeleted(true);
+		update(f);
+		return true;
+	}
+	
+	public FlvRecording update(FlvRecording f) {
+		try {
+			if (f.getFlvRecordingId() == 0) {
+				f.setInserted(new Date());
+				em.persist(f);
+			} else {
+				f.setUpdated(new Date());
+				if (!em.contains(f)) {
+					f = em.merge(f);
+				}
+			}
+
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+		return f;
+	}
+
+	public void resetProcessingStatus() {
+		em.createNamedQuery("resetRecordingProcessingStatus")
+			.setParameter("error", Status.ERROR)
+			.setParameter("recording", Status.RECORDING)
+			.setParameter("converting", Status.CONVERTING)
+			.executeUpdate();
+	}
+	
+	public RecordingContainerData getRecordingContainerData(long userId) {
+		try {
+			RecordingContainerData containerData = new RecordingContainerData();
+	
+			// User Home Recordings
+			List<FlvRecording> homeFlvRecordings = getFlvRecordingRootByOwner(userId);
+			long homeFileSize = 0;
+	
+			for (FlvRecording homeFlvRecording : homeFlvRecordings) {
+				homeFileSize += getRecordingSize(homeFlvRecording);
+			}
+	
+			containerData.setUserHomeSize(homeFileSize);
+			
+			// Public Recordings
+			long publicFileSize = 0;
+			
+			//get all organizations the user can view
+			for (Organisation_Users ou : userDao.get(userId).getOrganisation_users()) {
+				List<FlvRecording>publicFlvRecordings = getFlvRecordingRootByPublic(ou.getOrganisation().getOrganisation_id());
+				//get sizes
+				for (FlvRecording publicFlvRecording : publicFlvRecordings) {
+					publicFileSize += getRecordingSize(publicFlvRecording);
+				}
+			}
+			containerData.setPublicFileSize(publicFileSize);
+
+			return containerData;
+		} catch (Exception ex2) {
+			log.error("[getRecordingContainerData]: ", ex2);
+		}
+		return null;
+	}
+	
+	private long getRecordingSize(FlvRecording r) {
+		long size = 0;
+
+		if (isRecordingExists(r.getFileHash())) {
+			size += getRecording(r.getFileHash()).length();
+		}
+		if (isRecordingExists(r.getAlternateDownload())) {
+			size += getRecording(r.getAlternateDownload()).length();
+		}
+		if (isRecordingExists(r.getPreviewImage())) {
+			size += getRecording(r.getPreviewImage()).length();
+		}
+		if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+			size += getMp4Recording(r.getFileHash()).length();
+		}
+		if (isRecordingExists(r.getFileHash() + OGG_EXTENSION)) {
+			size += getOggRecording(r.getFileHash()).length();
+		}
+		for (FlvRecording flvRecording : getFlvRecordingByParent(r.getFlvRecordingId())) {
+			size += getRecordingSize(flvRecording);
+		}
+		return size;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java
new file mode 100644
index 0000000..5548ffc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingLog;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class FlvRecordingLogDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public long countErrors(Long recordingId) {
+		return em.createNamedQuery("countErrorRecordingLogsByRecording", Long.class)
+				.setParameter("recId", recordingId).getSingleResult();
+	}	
+	
+	public List<FlvRecordingLog> getByRecordingId(Long recordingId) {
+		return em.createNamedQuery("getRecordingLogsByRecording", FlvRecordingLog.class)
+				.setParameter("recId", recordingId).getResultList();
+	}	
+	
+	public void deleteByRecordingId(Long recordingId) {
+		em.createNamedQuery("deleteErrorRecordingLogsByRecording").setParameter("recId", recordingId).executeUpdate();
+	}
+	
+	public Long addFLVRecordingLog(String msgType, FlvRecording flvRecording, ConverterProcessResult returnMap) {
+		try { 
+			FlvRecordingLog flvRecordingLog = new FlvRecordingLog();
+			flvRecordingLog.setInserted(new Date());
+			flvRecordingLog.setExitValue(returnMap.getExitValue());
+			flvRecordingLog.setFlvRecording(flvRecording);
+			flvRecordingLog.setFullMessage(returnMap.buildLogMessage());
+			flvRecordingLog.setMsgType(msgType);
+			
+			flvRecordingLog = em.merge(flvRecordingLog);
+			Long flvRecordingLogId = flvRecordingLog.getFlvRecordingLogId();
+			
+			return flvRecordingLogId;
+		} catch (Exception ex2) {
+			log.error("[addFLVRecordingLog]: ",ex2);
+		}
+		return -1L;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
new file mode 100644
index 0000000..1b5677d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class FlvRecordingMetaDataDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingMetaDataDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+
+	public FlvRecordingMetaData get(Long flvRecordingMetaDataId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getMetaById", FlvRecordingMetaData.class);
+			query.setParameter("id", flvRecordingMetaDataId);
+
+			FlvRecordingMetaData flvRecordingMetaData = null;
+			try {
+				flvRecordingMetaData = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return flvRecordingMetaData;
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecordingMetaData> getByRecording(Long recordingId) {
+		return em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class).setParameter("recordingId", recordingId).getResultList();
+	}
+
+	public List<FlvRecordingMetaData> getAudioMetaDataByRecording(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getAudioMetaByRecording", FlvRecordingMetaData.class);
+			query.setParameter("recordingId", flvRecordingId);
+			query.setParameter("none", Status.NONE);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAudioMetaDataByRecording]: ", ex2);
+		}
+		return null;
+	}
+
+	public FlvRecordingMetaData getScreenMetaDataByRecording(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getScreenMetaByRecording", FlvRecordingMetaData.class);
+			query.setParameter("recordingId", flvRecordingId);
+
+			List<FlvRecordingMetaData> flvRecordingMetaDatas = query.getResultList();
+
+			if (flvRecordingMetaDatas.size() > 0) {
+				return flvRecordingMetaDatas.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getScreenMetaDataByRecording]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addFlvRecordingMetaData(Long flvRecordingId, String freeTextUserName, Date recordStart, Boolean isAudioOnly,
+			Boolean isVideoOnly, Boolean isScreenData, String streamName, Integer interiewPodId) {
+		try {
+
+			FlvRecordingMetaData flvRecordingMetaData = new FlvRecordingMetaData();
+
+			flvRecordingMetaData.setDeleted(false);
+
+			flvRecordingMetaData.setFlvRecording(flvRecordingDao.get(flvRecordingId));
+			flvRecordingMetaData.setFreeTextUserName(freeTextUserName);
+			flvRecordingMetaData.setInserted(new Date());
+
+			flvRecordingMetaData.setRecordStart(recordStart);
+
+			flvRecordingMetaData.setAudioOnly(isAudioOnly);
+			flvRecordingMetaData.setVideoOnly(isVideoOnly);
+			flvRecordingMetaData.setScreenData(isScreenData);
+
+			flvRecordingMetaData.setStreamName(streamName);
+
+			flvRecordingMetaData.setInteriewPodId(interiewPodId);
+
+			flvRecordingMetaData = em.merge(flvRecordingMetaData);
+			Long flvRecordingMetaDataId = flvRecordingMetaData.getFlvRecordingMetaDataId();
+
+			return flvRecordingMetaDataId;
+
+		} catch (Exception ex2) {
+			log.error("[addFlvRecordingMetaData]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateFlvRecordingMetaDataEndDate(Long metaId, Date recordEnd) {
+		try {
+			FlvRecordingMetaData meta = get(metaId);
+
+			meta.setRecordEnd(recordEnd);
+			
+			log.debug("updateFlvRecordingMetaDataEndDate :: Start Date :" + meta.getRecordStart());
+			log.debug("updateFlvRecordingMetaDataEndDate :: End Date :" + meta.getRecordEnd());
+			
+			update(meta);
+			
+			return metaId;
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingMetaDataEndDate]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long update(FlvRecordingMetaData flvRecordingMetaData) {
+		try {
+			if (flvRecordingMetaData.getFlvRecordingMetaDataId() == 0) {
+				em.persist(flvRecordingMetaData);
+			} else {
+				if (!em.contains(flvRecordingMetaData)) {
+					em.merge(flvRecordingMetaData);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java
new file mode 100644
index 0000000..bf89502
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ *
+ */
+@Transactional
+public class FlvRecordingMetaDeltaDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingMetaDeltaDao.class,
+			OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public List<FlvRecordingMetaDelta> getFlvRecordingMetaDeltaByMetaId(Long flvRecordingMetaDataId) {
+		try { 
+			
+			String hql = "SELECT c FROM FlvRecordingMetaDelta c " +
+					"WHERE c.flvRecordingMetaDataId = :flvRecordingMetaDataId";
+			
+			TypedQuery<FlvRecordingMetaDelta> query = em.createQuery(hql, FlvRecordingMetaDelta.class);
+			query.setParameter("flvRecordingMetaDataId", flvRecordingMetaDataId);
+			
+			List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = query.getResultList();
+			
+			return flvRecordingMetaDeltas;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingMetaDeltaByMetaId]: ",ex2);
+		}
+		return null;
+	}
+	
+	
+	
+	public Long addFlvRecordingMetaDelta(FlvRecordingMetaDelta flvRecordingMetaDelta) {
+		try { 
+			
+			flvRecordingMetaDelta = em.merge(flvRecordingMetaDelta);
+			Long flvRecordingMetaDeltaId = flvRecordingMetaDelta.getFlvRecordingMetaDeltaId();
+			
+			log.debug("flvRecordingMetaDeltaId "+flvRecordingMetaDeltaId);
+			
+			return flvRecordingMetaDeltaId;
+		} catch (Exception ex2) {
+			log.error("[addFlvRecordingMetaDelta]: ",ex2);
+		}
+		return null;
+	}
+	
+	public Long updateFlvRecordingMetaDelta(FlvRecordingMetaDelta flvRecordingMetaDelta) {
+		try { 
+			if (flvRecordingMetaDelta.getFlvRecordingMetaDataId() == 0) {
+				em.persist(flvRecordingMetaDelta);
+		    } else {
+		    	if (!em.contains(flvRecordingMetaDelta)) {
+		    		em.merge(flvRecordingMetaDelta);
+			    }
+			}
+			
+			return flvRecordingMetaDelta.getFlvRecordingMetaDataId();
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingMetaDelta]: ",ex2);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java
new file mode 100644
index 0000000..3a56399
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Persistence of client objects to database is only available if so configured!
+ * 
+ * @author sebawagner
+ *
+ */
+@Transactional
+public class ClientDao {
+	
+	@PersistenceContext
+	private EntityManager em;
+	
+	private static List<Long> EMPTY_LIST = new ArrayList<Long>(0);
+	
+	public void cleanAllClients() {
+		em.createNamedQuery("deleteAll").executeUpdate();
+	}
+
+	public void cleanClientsByServer(Server server) {
+		em.createNamedQuery("deleteClientsByServer").
+			setParameter("server", server).
+			executeUpdate();
+	}
+	
+	public Client add(Client entity) {
+		em.persist(entity);
+		return entity;
+	}
+	
+	public Client update(Client entity) {
+		em.merge(entity);
+		return entity;
+	}
+	
+	public void delete(Client entity) {
+		Query q = em.createNamedQuery("deletedById");
+		q.setParameter("id", entity.getId());
+		q.executeUpdate();
+	}
+	
+	public void removeClientByServerAndStreamId(Server server, String streamId) {
+		Query q = em.createNamedQuery("deletedByServerAndStreamId");
+		q.setParameter("server", server);
+		q.setParameter("streamid", streamId);
+		q.executeUpdate();
+	}
+	
+	public int countClients() {
+		return em.createNamedQuery("countClients", Long.class).getSingleResult().intValue();
+	}
+	
+	public int countClientsByServer(Server server) {
+		TypedQuery<Long> q = em.createNamedQuery("countClientsByServer", Long.class);
+		q.setParameter("server", server);
+		return q.getSingleResult().intValue();
+	}
+
+	public long countClientsByServerAndStreamId(Server server, String streamId) {
+		TypedQuery<Long> q = em.createNamedQuery("countClientsByServerAndStreamId", Long.class);
+		q.setParameter("streamid", streamId);
+		q.setParameter("server", server);
+		return q.getSingleResult();
+	}
+
+	/**
+	 * Query.getSingleResult would throw an error if result is null, 
+	 * see: http://stackoverflow.com/questions/2002993/jpa-getsingleresult-or-null
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return
+	 */
+	public Client getClientByServerAndStreamId(Server server, String streamId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientByServerAndStreamId", Client.class);
+		q.setParameter("streamid", streamId);
+		q.setParameter("server", server);
+		List<Client> ll = q.getResultList();
+		if (ll.size() == 1) {
+			return ll.get(0);
+		} else if (ll.size() == 0) {
+			return null;
+		}
+		throw new RuntimeException("more then one client was found streamId "+ streamId + " server "+server);
+	}
+
+	public List<Client> getClientsByPublicSIDAndServer(Server server, String publicSID) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByPublicSIDAndServer", Client.class);
+		q.setParameter("server", server);
+		q.setParameter("publicSID", publicSID);
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByPublicSID(String publicSID) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByPublicSID", Client.class);
+		q.setParameter("publicSID", publicSID);
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByServer(Server server) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByServer", Client.class);
+		q.setParameter("server", server);	
+		return q.getResultList();
+	}
+
+	public List<Client> getClients() {
+		return em.createNamedQuery("getClients", Client.class).getResultList();
+	}
+	
+	public List<Client> getClientsWithServer() {
+		return em.createNamedQuery("getClientsWithServer", Client.class).getResultList();
+	}
+
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByUserId", Client.class);
+		q.setParameter("server", server);
+		q.setParameter("user_id", userId);	
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByRoomId(Long roomId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByRoomId", Client.class);
+		q.setParameter("room_id", roomId);	
+		return q.getResultList();
+	}
+
+	/**
+	 * returns a list of servers or an empty list in case no roomIds are found
+	 * 
+	 * @param server
+	 * @return
+	 */
+	public List<Long> getRoomsIdsByServer(Server server) {
+		Query q = em.createNamedQuery("getRoomsIdsByServer");
+		q.setParameter("server", server);
+		@SuppressWarnings("unchecked")
+		List<Long> resultList = q.getResultList();
+		//if the result list contains only a value null, it means it 
+		//was empty and no roomid's have been found
+		if (resultList.size() == 1 && resultList.get(0) == null) {
+			return EMPTY_LIST;
+		}
+		return resultList;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java b/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java
new file mode 100644
index 0000000..12cbc36
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import org.apache.openmeetings.db.entity.room.Room;
+
+//FIXME HACK to bypass cross project compilation
+public interface IRoomManager {
+	Room  getRoomByOwnerAndTypeId(Long ownerId, Long roomtypesId, String roomName);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
new file mode 100644
index 0000000..19859e3
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class InvitationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationDao.class, webAppRootKey);
+	
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Invitation update(Invitation invitation) {
+		invitation.setUpdated(new Date());
+		if (invitation.getId() == null) {
+			em.persist(invitation);
+			return invitation;
+		} else {
+			if (!em.contains(invitation)) {
+				return em.merge(invitation);
+			}
+		}
+		return null;
+	}
+	
+	public Invitation get(Long invId) {
+		try {
+			
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationbyId", Invitation.class);
+			query.setParameter("invid", invId);
+			
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+		} catch (Exception e) {
+			log.error("get : ", e);
+		}
+		return null;
+	}
+	
+	public Invitation getInvitationByHashCode(String hashCode, boolean hidePass) {
+		try {
+			
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationByHashCode", Invitation.class);
+			query.setParameter("hashCode", hashCode);
+			
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			
+		} catch (Exception e) {
+			log.error("getInvitationByHashCode : ", e);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java
new file mode 100644
index 0000000..87477ff
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PollDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(PollDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomDao roomDao;
+
+	public Long addPollType(Long labelId, Boolean isNumeric) {
+		log.debug("Adding poll type: " + labelId + ", " + isNumeric);
+		PollType pt = new PollType();
+		pt.setLabel(labelId);
+		pt.setIsNumericAnswer(isNumeric);
+
+		em.persist(pt);
+		
+		return pt.getPollTypesId();
+	}
+	
+	public List<PollType> getPollTypes() {
+		return em.createNamedQuery("getPollTypes", PollType.class)
+				.getResultList();
+	}
+	
+	public PollType getPollType(Long typeId) {
+		TypedQuery<PollType> q = em.createNamedQuery("getPollType", PollType.class);
+		q.setParameter("pollTypesId", typeId);
+		return q.getSingleResult();
+	}
+	
+	public RoomPoll createPoll(Client rc, String pollName, String pollQuestion, Long pollTypeId) {
+		RoomPoll roomP = new RoomPoll();
+		
+		roomP.setCreatedBy(userDao.get(rc.getUser_id()));
+		roomP.setCreated(new Date());
+		roomP.setPollName(pollName);
+		roomP.setPollQuestion(pollQuestion);
+		roomP.setPollType(getPollType(pollTypeId));
+		roomP.setRoom(roomDao.get(rc.getRoom_id()));
+		
+		em.persist(roomP);
+		return roomP;
+	}
+	
+	public void savePollBackup(RoomPoll rp) {
+		em.persist(rp);
+	}
+
+
+	public RoomPoll updatePoll(RoomPoll rp) {
+		return em.merge(rp);
+	}
+
+	public boolean closePoll(Long room_id){
+		try {
+			log.debug(" :: closePoll :: ");
+			Query q = em.createNamedQuery("closePoll");
+			q.setParameter("rooms_id", room_id);
+			q.setParameter("archived", true);
+			return q.executeUpdate() > 0;
+		} catch (Exception err) {
+			log.error("[closePoll]", err);
+		}
+		return false;
+	}
+
+	public boolean deletePoll(Long poll_id){
+		try {
+			log.debug(" :: deletePoll :: ");
+			Query q = em.createNamedQuery("deletePoll");
+			q.setParameter("roomPollId", poll_id);
+			return q.executeUpdate() > 0;
+		} catch (Exception err) {
+			log.error("[deletePoll]", err);
+		}
+		return false;
+	}
+
+	public RoomPoll getPoll(Long room_id) {
+		try {
+			log.debug(" :: getPoll :: " + room_id);
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getPoll", RoomPoll.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", false);
+			return q.getSingleResult();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return null;
+	}
+	
+	public List<RoomPoll> getPollListBackup() {
+		try {
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getPollListBackup", RoomPoll.class);
+			return q.getResultList();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return null;
+	}
+	
+	public List<RoomPoll> getArchivedPollList(Long room_id) {
+		try {
+			log.debug(" :: getPoll :: " + room_id);
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getArchivedPollList",RoomPoll.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", true);
+			return q.getResultList();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return null;
+	}
+	
+	public boolean hasPoll(Long room_id) {
+		try {
+			log.debug(" :: hasPoll :: " + room_id);
+			TypedQuery<Long> q = em.createNamedQuery("hasPoll", Long.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", false);
+			return q.getSingleResult() > 0;
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return false;
+	}
+	
+	public boolean hasVoted(Long room_id, Long userid) {
+		try {
+			log.debug(" :: hasVoted :: " + room_id + ", " + userid);
+			TypedQuery<RoomPollAnswers> q = em.createNamedQuery("hasVoted", RoomPollAnswers.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("userid", userid);
+			q.setParameter("archived", false);
+			q.getSingleResult();
+			return true;
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return false;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java
new file mode 100644
index 0000000..32a7693
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.OpenJPAQuery;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomDao implements IDataProviderDao<Room> {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomDao.class, webAppRootKey);
+	public final static String[] searchFields = {"name"};
+	
+	@PersistenceContext
+	private EntityManager em;
+    @Autowired
+	private ConfigurationDao cfgDao;
+    @Autowired
+    private SipDao sipDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public Room get(long id) {
+		TypedQuery<Room> q = em.createNamedQuery("getRoomById", Room.class);
+		q.setParameter("id", id);
+		@SuppressWarnings("unchecked")
+		OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
+		kq.getFetchPlan().addFetchGroup("roomModerators");
+		List<Room> l = kq.getResultList();
+		return l.isEmpty() ? null : l.get(0);
+	}
+
+	public List<Room> get() {
+		TypedQuery<Room> q = em.createNamedQuery("getBackupRooms", Room.class);
+		@SuppressWarnings("unchecked")
+		OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
+		kq.getFetchPlan().addFetchGroup("roomModerators");
+		return kq.getResultList();
+	}
+	
+	public List<Room> get(int start, int count) {
+		TypedQuery<Room> q = em.createNamedQuery("getNondeletedRooms", Room.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<Room> get(String search, int start, int count, String sort) {
+		TypedQuery<Room> q = em.createQuery(DaoHelper.getSearchQuery("Room", "r", search, true, false, sort, searchFields), Room.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countRooms", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Room", "r", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	public List<Room> getPublicRooms() {
+		return em.createNamedQuery("getPublicRoomsOrdered", Room.class).getResultList();
+	}
+	
+	public List<Room> getPublicRooms(Long typeId) {
+		return em.createNamedQuery("getPublicRooms", Room.class).setParameter("typeId", typeId).getResultList();
+	}
+	
+	public List<Long> getSipRooms(List<Long> ids) {
+		TypedQuery<Long> q = em.createNamedQuery("getSipRoomIdsByIds", Long.class);
+		q.setParameter("ids", ids);
+		return q.getResultList();
+	}
+
+	public List<Room> getOrganisationRooms(long orgId) {
+		TypedQuery<Room> q = em.createNamedQuery("getOrganisationRooms", Room.class);
+		q.setParameter("orgId", orgId);
+		return q.getResultList();
+	}
+
+	public List<Room> getAppointedRoomsByUser(long userId) {
+		//TODO generalize with AppointmentDao
+		log.debug("getAppointedRoomsByUser : UserID - " + userId);
+
+		TimeZone timeZone = timezoneUtil.getTimeZone(usersDao.get(userId));
+
+		Calendar startCal = Calendar.getInstance(timeZone);
+		startCal.set(Calendar.MINUTE, 0);
+		startCal.set(Calendar.HOUR, 0);
+		startCal.set(Calendar.SECOND, 1);
+
+		Calendar endCal = Calendar.getInstance(timeZone);
+		endCal.set(Calendar.MINUTE, 23);
+		endCal.set(Calendar.HOUR, 59);
+		endCal.set(Calendar.SECOND, 59);
+
+		return em.createNamedQuery("appointedRoomsInRangeByUser", Room.class)
+				.setParameter("userId", userId)
+				.setParameter("starttime", startCal.getTime())
+				.setParameter("endtime", endCal.getTime())
+				.getResultList();
+	}
+	
+	public Long getRoomsCapacityByIds(List<Long> ids) {
+		return ids == null || ids.isEmpty() ? 0
+			: em.createNamedQuery("getRoomsCapacityByIds", Long.class).setParameter("ids", ids).getSingleResult();
+	}
+	
+	private boolean isSipEnabled() {
+		return "yes".equals(cfgDao.getConfValue("red5sip.enable", String.class, "no"));
+	}
+	
+	private String getSipNumber(long roomId) {
+        if (isSipEnabled()) {
+        	return cfgDao.getConfValue("red5sip.room_prefix", String.class, "400") + roomId;
+        }
+        return null;
+	}
+	
+	public Room update(Room entity, Long userId) {
+		if (entity.getRooms_id() == null) {
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			entity.setUpdatetime(new Date());
+		}
+		if (entity.isSipEnabled() && isSipEnabled()) {
+			String sipNumber = getSipNumber(entity.getRooms_id());
+			if (!sipNumber.equals(entity.getConfno())) {
+				entity.setConfno(sipNumber);
+			}
+			sipDao.update(sipNumber, entity.getPin());
+		} else {
+			sipDao.delete(entity.getConfno());
+			entity.setConfno(null);
+			entity.setPin(null);
+		}
+		entity = em.merge(entity);
+		return entity;
+	}
+
+	public void delete(Room entity, Long userId) {
+		entity.setDeleted(true);
+		entity.setSipEnabled(false);
+		update(entity, userId);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java
new file mode 100644
index 0000000..bfccca4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomModeratorsDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public RoomModerator get(long id) {
+		List<RoomModerator> list = em.createNamedQuery("getRoomModeratorById", RoomModerator.class)
+				.setParameter("roomModeratorsId", id).getResultList();
+		if (!list.isEmpty()) {
+			return list.get(0);
+		}
+		return null;
+	}
+	
+	public List<RoomModerator> get(Collection<Long> ids) {
+		return em.createNamedQuery("getRoomModeratorsByIds", RoomModerator.class).setParameter("ids", ids).getResultList();
+	}
+
+	public List<RoomModerator> getByRoomId(long roomId) {
+		return em.createNamedQuery("getRoomModeratorByRoomId", RoomModerator.class).setParameter("roomId", roomId).getResultList();
+	}
+
+	public RoomModerator update(RoomModerator rm, Long userId) {
+		if (rm.getRoomModeratorsId() == 0) {
+			rm.setStarttime(new Date());
+			em.persist(rm);
+		} else {
+			rm.setUpdatetime(new Date());
+			rm = em.merge(rm);
+		}
+		return rm;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java
new file mode 100644
index 0000000..373a185
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomOrganisationDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public List<RoomOrganisation> get() {
+		return em.createNamedQuery("getAllRoomsOrganisations", RoomOrganisation.class).getResultList();
+	}
+
+	public RoomOrganisation update(RoomOrganisation entity, Long userId) {
+		if (entity.getRooms_organisation_id() == null) {
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			entity.setUpdatetime(new Date());
+			entity = em.merge(entity);
+		}
+		return entity;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java
new file mode 100644
index 0000000..0c25195
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomTypeDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomTypeDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	/**
+	 * get all availible RoomTypes
+	 * 
+	 * @return List of RoomTypes
+	 */
+	public List<RoomType> getAll(long langId) {
+		TypedQuery<RoomType> query = em.createNamedQuery("getAllRoomTypes", RoomType.class);
+		query.setParameter("deleted", true);
+		List<RoomType> ll = query.getResultList();
+		return ll;
+	}
+	
+	public RoomType get(long id) {
+		TypedQuery<RoomType> query = em.createNamedQuery("getRoomTypesById", RoomType.class);
+		query.setParameter("roomtypes_id", id);
+		query.setParameter("deleted", true);
+		List<?> ll = query.getResultList();
+		if (ll.size() > 0) {
+			return (RoomType) ll.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * add a new Record to the table roomtypes
+	 * 
+	 * @param name
+	 * @return ID of new created roomtype or null
+	 */
+	public Long addRoomType(String name, long fieldvalues_id, boolean deleted) {
+		try {
+			RoomType rtype = new RoomType();
+			rtype.setName(name);
+			rtype.setStarttime(new Date());
+			rtype.setDeleted(deleted);
+			rtype.setFieldvalues_id(fieldvalues_id);
+			rtype = em.merge(rtype);
+			long returnId = rtype.getRoomtypes_id();
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addRoomType] ", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java
new file mode 100644
index 0000000..86ef780
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import org.asteriskjava.manager.ManagerConnection;
+import org.asteriskjava.manager.ManagerConnectionFactory;
+import org.asteriskjava.manager.ResponseEvents;
+import org.asteriskjava.manager.action.ConfbridgeListAction;
+import org.asteriskjava.manager.action.DbDelAction;
+import org.asteriskjava.manager.action.DbDelTreeAction;
+import org.asteriskjava.manager.action.DbGetAction;
+import org.asteriskjava.manager.action.DbPutAction;
+import org.asteriskjava.manager.action.EventGeneratingAction;
+import org.asteriskjava.manager.action.ManagerAction;
+import org.asteriskjava.manager.response.ManagerError;
+import org.asteriskjava.manager.response.ManagerResponse;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SipDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SipDao.class);
+	public static final String ASTERISK_OM_FAMILY = "openmeetings";
+	public static final String ASTERISK_OM_KEY = "rooms";
+	private String sipHostname;
+	private int sipPort;
+	private String sipUsername;
+	private String sipPassword;
+	private ManagerConnectionFactory factory;
+	private ManagerConnection connection;
+
+	@SuppressWarnings("unused")
+	private SipDao() {
+		// prohibited default constructor
+	}
+
+	public SipDao(String sipHostname, int sipPort, String sipUsername, String sipPassword) {
+		this.sipHostname = sipHostname;
+		this.sipPort = sipPort;
+		this.sipUsername = sipUsername;
+		this.sipPassword = sipPassword;
+		factory = new ManagerConnectionFactory(this.sipHostname, this.sipPort, this.sipUsername, this.sipPassword);
+		connection = factory.createManagerConnection(); // TODO secure
+	}
+
+	private ManagerResponse exec(ManagerAction action) {
+		if (connection == null) {
+			log.warn("There is no Asterisk configured");
+			return null;
+		}
+		try {
+			connection.login();
+			ManagerResponse r = connection.sendAction(action);
+			connection.logoff();
+			if (log.isDebugEnabled() && r != null) {
+				log.debug(r.toString());
+			}
+			return (r instanceof ManagerError) ? null : r;
+		} catch (Exception e) {
+			if (log.isDebugEnabled()) {
+				log.error("Error while executing ManagerAction: " + action, e);
+			}
+		}
+		return null;
+	}
+
+	private ResponseEvents execEvent(EventGeneratingAction action) {
+		if (connection == null) {
+			log.warn("There is no Asterisk configured");
+			return null;
+		}
+		try {
+			connection.login("on");
+			ResponseEvents r = connection.sendEventGeneratingAction(action);
+			connection.logoff();
+			if (log.isDebugEnabled() && r != null) {
+				log.debug(r.getResponse().toString());
+			}
+			return (r == null || r.getResponse() instanceof ManagerError) ? null : r;
+		} catch (Exception e) {
+			if (log.isDebugEnabled()) {
+				log.error("Error while executing EventGeneratingAction: " + action, e);
+			}
+		}
+		return null;
+	}
+
+	private String getKey(String confno) {
+		return ASTERISK_OM_KEY + "/" + confno;
+	}
+
+	public String get(String confno) {
+		String pin = null;
+		DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, getKey(confno));
+		ManagerResponse r = exec(da);
+		if (r != null) {
+			pin = r.getResponse();
+		}
+		return pin;
+	}
+
+	public void update(String confno, String pin) {
+		delete(confno);
+		DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, getKey(confno), pin);
+		exec(da);
+	}
+
+	public void delete() {
+		DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, ASTERISK_OM_KEY);
+		exec(da);
+	}
+
+	public void delete(String confno) {
+		DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, getKey(confno));
+		exec(da);
+	}
+
+	public Integer countUsers(String confno) {
+		if (confno == null) {
+			return null;
+		}
+		ConfbridgeListAction da = new ConfbridgeListAction(confno);
+		ResponseEvents r = execEvent(da);
+		if (r != null) {
+			log.debug("SipDao::countUsers size == " + r.getEvents().size());
+			// "- 1" here means: ListComplete event 
+			return r.getEvents().size() - 1; // TODO check if was successfull
+		}
+		return 0;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java b/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
new file mode 100644
index 0000000..663d20e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * Methods to add/get/remove {@link Client}s to the session
+ * 
+ * 
+ * @author sebawagner
+ *
+ */
+public interface ISessionManager {
+	
+	/**
+	 * Notified on server start, when the session manager should be started and
+	 * eventually caches cleared/setup
+	 */
+	public abstract void sessionStart();
+
+	/**
+	 * add a new client item
+	 * 
+	 * @param streamId
+	 * @param scopeName
+	 * @param remotePort
+	 * @param remoteAddress
+	 * @param swfUrl
+	 * @param isAVClient
+	 * @param server
+	 * @return
+	 */
+	public abstract Client addClientListItem(String streamId,
+			String scopeName, Integer remotePort, String remoteAddress,
+			String swfUrl, boolean isAVClient, Server server);
+
+	public abstract Collection<Client> getClients();
+	
+	/**
+	 * loads the server into the client (only if database cache is used)
+	 * 
+	 * @return
+	 */
+	public abstract Collection<Client> getClientsWithServer();
+
+	/**
+	 * Get a client by its streamId
+	 * 
+	 * @param streamId
+	 * @param server
+	 * @return
+	 */
+	public abstract Client getClientByStreamId(String streamId,
+			Server server);
+
+	/**
+	 * get a client by its publicSID and the server, 
+	 * isAVClient is normally false, as you want the data connection.
+	 * If you set isAVClient to true, you would obtain the RTMP 
+	 * connection that is used for Audio/Video streaming
+	 * 
+	 * @param publicSID
+	 * @param isAVClient
+	 * @param server
+	 * @return
+	 */
+	public abstract Client getClientByPublicSID(String publicSID,
+			boolean isAVClient, Server server);
+	
+	/**
+	 * same as {@link #getClientByPublicSID(String, boolean, Server)} but it ignores 
+	 * if the server part, so it will deliver any client just by its publicSID.<br/>
+	 * <br/>
+	 * <b>Note:</b>
+	 * This method requires more time to find the user, so under normal circumstances 
+	 * you should use {@link #getClientByPublicSID(String, boolean, Server)}!
+	 * 
+	 * @param publicSID
+	 * @param isAVClient
+	 * @return
+	 */
+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient);
+
+	/**
+	 * 
+	 * @param userId
+	 * @return
+	 * 
+	 * @deprecated There could be multiple users logged in with the same userid,
+	 *             then this call would return a list not a single user
+	 */
+	public abstract Client getClientByUserId(Long userId);
+
+	/**
+	 * Update the session object of the audio/video-connection and additionally
+	 * swap the values to the session object of the user that holds the full
+	 * session object
+	 * 
+	 * @param streamId
+	 * @param rcm
+	 * @return
+	 */
+	public abstract Boolean updateAVClientByStreamId(String streamId,
+			Client rcm, Server server);
+
+	/**
+	 * Update the session object
+	 * 
+	 * updateRoomCount is only <i>one</i> time true, in
+	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, Long, String)
+	 * .
+	 * 
+	 * @param streamId
+	 * @param rcm
+	 * @param updateRoomCount
+	 *            true means the count for the room has to be updated
+	 * @return
+	 */
+	public abstract Boolean updateClientByStreamId(String streamId,
+			Client rcm, boolean updateRoomCount, Server server);
+
+	/**
+	 * Remove a client from the session store
+	 * 
+	 * @param streamId
+	 * @return
+	 */
+	public abstract Boolean removeClient(String streamId, Server server);
+
+	/**
+	 * Get all ClientList Objects of that room and domain This Function is
+	 * needed cause it is invoked internally AFTER the current user has been
+	 * already removed from the ClientList to see if the Room is empty again and
+	 * the PollList can be removed
+	 * @param room_id 
+	 * @return
+	 */
+	public abstract List<Client> getClientListByRoom(Long room_id);
+	
+	public abstract Collection<Client> getClientListByRoomAll(Long room_id);
+
+	/**
+	 * get the current Moderator in this room
+	 * 
+	 * @param roomname
+	 * @return
+	 */
+	public abstract List<Client> getCurrentModeratorByRoom(Long room_id);
+
+	/**
+	 * Get list of current client sessions
+	 * 
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	public abstract SearchResult<Client> getListByStartAndMax(int start,
+			int max, String orderby, boolean asc);
+
+	/**
+	 * returns number of current users recording
+	 * 
+	 * @param roomId
+	 * @return
+	 */
+	public abstract long getRecordingCount(long roomId);
+
+	/**
+	 * returns a number of current users publishing screensharing
+	 * 
+	 * @param roomId
+	 * @return
+	 */
+	public abstract long getPublishingCount(long roomId);
+	
+	/**
+	 * Get a list of all servers of all rooms on that server, serverId = null 
+	 * means it is a local session on the master.
+	 * 
+	 * @param server
+	 * @return a set, a roomId can be only one time in this list
+	 */
+	public abstract List<Long> getActiveRoomIdsByServer(Server server);
+
+	/**
+	 * Get some statistics about the current sessions
+	 * 
+	 * @return
+	 */
+	public abstract String getSessionStatistics();
+
+}
\ No newline at end of file
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
new file mode 100644
index 0000000..28b90e2
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
@@ -0,0 +1,269 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceException;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Insert/Update/Delete {@link LdapConfig}
+ * 
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class LdapConfigDao implements IDataProviderDao<LdapConfig> {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			LdapConfigDao.class, OpenmeetingsVariables.webAppRootKey);
+	public final static String[] searchFields = {"name", "configFileName", "domain", "comment"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao usersDao;
+
+	public Long addLdapConfig(String name, Boolean addDomainToUserName,
+			String configFileName, String domain, Long insertedby,
+			Boolean isActive) {
+		try {
+
+			LdapConfig ldapConfig = new LdapConfig();
+			ldapConfig.setAddDomainToUserName(addDomainToUserName);
+			ldapConfig.setConfigFileName(configFileName);
+			ldapConfig.setDeleted(false);
+			ldapConfig.setDomain(domain);
+			ldapConfig.setIsActive(isActive);
+			ldapConfig.setName(name);
+			ldapConfig.setInserted(new Date());
+			if (insertedby != null) {
+				log.debug("addLdapConfig :1: " + usersDao.get(insertedby));
+				ldapConfig.setInsertedby(usersDao.get(insertedby));
+			}
+
+			log.debug("addLdapConfig :2: " + insertedby);
+
+			ldapConfig = em.merge(ldapConfig);
+			Long ldapConfigId = ldapConfig.getLdapConfigId();
+
+			if (ldapConfigId > 0) {
+				return ldapConfigId;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addLdapConfig]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addLdapConfigByObject(LdapConfig ldapConfig) {
+		try {
+
+			ldapConfig.setDeleted(false);
+			ldapConfig.setInserted(new Date());
+
+			ldapConfig = em.merge(ldapConfig);
+			Long ldapConfigId = ldapConfig.getLdapConfigId();
+
+			if (ldapConfigId > 0) {
+				return ldapConfigId;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addLdapConfig]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateLdapConfig(Long ldapConfigId, String name,
+			Boolean addDomainToUserName, String configFileName, String domain,
+			Long updatedby, Boolean isActive) {
+		try {
+
+			LdapConfig ldapConfig = this.get(ldapConfigId);
+
+			if (ldapConfig == null) {
+				return -1L;
+			}
+
+			ldapConfig.setAddDomainToUserName(addDomainToUserName);
+			ldapConfig.setConfigFileName(configFileName);
+			ldapConfig.setDeleted(false);
+			ldapConfig.setDomain(domain);
+			ldapConfig.setIsActive(isActive);
+			ldapConfig.setName(name);
+			ldapConfig.setUpdated(new Date());
+			if (updatedby != null) {
+				log.debug("updateLdapConfig :1: " + usersDao.get(updatedby));
+				ldapConfig.setUpdatedby(usersDao.get(updatedby));
+			}
+
+			log.debug("updateLdapConfig :2: " + updatedby);
+
+			ldapConfig = em.merge(ldapConfig);
+			ldapConfigId = ldapConfig.getLdapConfigId();
+
+			return ldapConfigId;
+
+		} catch (Exception ex2) {
+			log.error("[updateLdapConfig]: ", ex2);
+		}
+		return -1L;
+	}
+
+	public LdapConfig get(long ldapConfigId) {
+		try {
+
+			String hql = "select c from LdapConfig c "
+					+ "WHERE c.ldapConfigId = :ldapConfigId "
+					+ "AND c.deleted = :deleted";
+
+			TypedQuery<LdapConfig> query = em
+					.createQuery(hql, LdapConfig.class);
+			query.setParameter("ldapConfigId", ldapConfigId);
+			query.setParameter("deleted", false);
+
+			LdapConfig ldapConfig = null;
+			try {
+				ldapConfig = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return ldapConfig;
+
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<LdapConfig> getActive() {
+		log.debug("getActiveLdapConfigs");
+
+		// get all users
+		TypedQuery<LdapConfig> query =  em.createNamedQuery("getActiveLdapConfigs", LdapConfig.class);
+		query.setParameter("isActive", true);
+
+		return query.getResultList();
+	}
+
+	public List<LdapConfig> get() {
+		//Add localhost Domain
+		LdapConfig ldapConfig = new LdapConfig();
+		
+		ldapConfig.setName("local DB [internal]");
+		ldapConfig.setLdapConfigId(-1);
+
+		List<LdapConfig> result = new ArrayList<LdapConfig>();
+		result.add(ldapConfig);
+		result.addAll(getActive());
+		return result;
+	}
+
+	public List<LdapConfig> get(int start, int count) {
+		TypedQuery<LdapConfig> q = em.createNamedQuery("getNondeletedLdapConfigs", LdapConfig.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<LdapConfig> get(String search, int start, int count, String sort) {
+		TypedQuery<LdapConfig> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, false, sort, searchFields), LdapConfig.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		try {
+			TypedQuery<Long> query = em
+					.createQuery(
+							"select count(c.ldapConfigId) from LdapConfig c where c.deleted = false",
+							Long.class);
+			List<Long> ll = query.getResultList();
+			log.debug("selectMaxFromLdapConfig" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromLdapConfig] ", ex2);
+		}
+		return 0L;
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public LdapConfig update(LdapConfig entity, Long userId) {
+		try {
+			if (entity.getLdapConfigId() <= 0) {
+				entity.setInserted(new Date());
+				if (userId != null) {
+					entity.setInsertedby(usersDao.get(userId));
+				}
+				entity.setDeleted(false);
+				em.persist(entity);
+			} else {
+				entity.setUpdated(new Date());
+				if (userId != null) {
+					entity.setUpdatedby(usersDao.get(userId));
+				}
+				entity.setDeleted(false);
+				em.merge(entity);
+			}
+		} catch (PersistenceException ex) {
+			log.error("[update LdapConfig]", ex);
+		}
+		return entity;
+	}
+
+	public void delete(LdapConfig entity, Long userId) {
+		if (entity.getLdapConfigId() >= 0) {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(usersDao.get(userId));
+			}
+			entity.setDeleted(true);
+			em.merge(entity);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java b/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
new file mode 100644
index 0000000..b8db099
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class OAuth2Dao implements IDataProviderDao<OAuthServer> {
+
+	public final static String[] searchFields = {"name"};
+	@PersistenceContext
+	private EntityManager em;
+	
+	public List<OAuthServer> getActive() {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getEnabledOAuthServers", OAuthServer.class);
+		return query.getResultList();
+	}
+	
+	public OAuthServer get(long id) {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getOAuthServerById", OAuthServer.class);
+		query.setParameter("id", id);
+		OAuthServer result = null;
+		try {
+			result = query.getSingleResult();
+		} catch (NoResultException e) {}
+		return result;
+	}
+
+	public List<OAuthServer> get(int start, int count) {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getAllOAuthServers", OAuthServer.class);
+		query.setFirstResult(start);
+		query.setMaxResults(count);
+		return query.getResultList();
+	}
+
+	public List<OAuthServer> get(String search, int start, int count, String order) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("OAuthServer", "s", search, true, false, null, searchFields), Long.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return null;
+	}
+
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countOAuthServers", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("OAuthServer", "s", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	public OAuthServer update(OAuthServer server, Long userId) {
+		if (server.getId() == null) {
+			em.persist(server);
+		} else {
+			server = em.merge(server);
+		}
+		return server;
+	}
+
+	public void delete(OAuthServer server, Long userId) {
+		server.setDeleted(true);
+		update(server, userId);
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
new file mode 100644
index 0000000..ccd88aa
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class SOAPLoginDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SOAPLoginDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public String addSOAPLogin(String sessionHash, Long room_id,
+			boolean becomemoderator, boolean showAudioVideoTest,
+			boolean allowSameURLMultipleTimes, Long recording_id,
+			boolean showNickNameDialog, String landingZone,
+			boolean allowRecording) {
+		try {
+			String thistime = "TIME_" + (new Date().getTime());
+
+			String hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(thistime);
+
+			SOAPLogin soapLogin = new SOAPLogin();
+			soapLogin.setCreated(new Date());
+			soapLogin.setUsed(false);
+			soapLogin.setRoom_id(room_id);
+			soapLogin.setAllowSameURLMultipleTimes(allowSameURLMultipleTimes);
+			soapLogin.setHash(hash);
+			soapLogin.setRoomRecordingId(recording_id);
+			soapLogin.setSessionHash(sessionHash);
+			soapLogin.setBecomemoderator(becomemoderator);
+			soapLogin.setShowAudioVideoTest(showAudioVideoTest);
+			soapLogin.setShowNickNameDialog(showNickNameDialog);
+			soapLogin.setLandingZone(landingZone);
+			soapLogin.setAllowRecording(allowRecording);
+
+			soapLogin = em.merge(soapLogin);
+			Long soapLoginId = soapLogin.getSoapLoginId();
+
+			if (soapLoginId > 0) {
+				return hash;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addSOAPLogin]: ", ex2);
+		}
+		return null;
+	}
+
+	public SOAPLogin get(String hash) {
+		try {
+			String hql = "select sl from SOAPLogin as sl WHERE sl.hash LIKE :hash";
+			TypedQuery<SOAPLogin> query = em.createQuery(hql, SOAPLogin.class);
+			query.setParameter("hash", hash);
+			List<SOAPLogin> sList = query.getResultList();
+
+			if (sList.size() > 1) {
+				throw new Exception("there are more then one SOAPLogin with identical hash! " + hash);
+			}
+
+			if (sList.size() == 1) {
+				return sList.get(0);
+			}
+
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public void update(SOAPLogin soapLogin) {
+		try {
+			if (soapLogin.getSoapLoginId() == 0) {
+				em.persist(soapLogin);
+			} else {
+				if (!em.contains(soapLogin)) {
+					em.merge(soapLogin);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java
new file mode 100644
index 0000000..5f74fe8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * CRUD for {@link Server}
+ * 
+ * @author solomax, sebawagner
+ * 
+ */
+@Transactional
+public class ServerDao implements IDataProviderDao<Server> {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ServerDao.class, OpenmeetingsVariables.webAppRootKey);
+	public final static String[] searchFields = { "name", "address", "comment" };
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao usersDao;
+	
+	/**
+	 * Get a list of all available servers
+	 * 
+	 * @return
+	 */
+	public List<Server> getServerList() {
+		log.debug("getServerList enter");
+		TypedQuery<Server> q = em.createNamedQuery("getAllServers",
+				Server.class);
+		return q.getResultList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#get(int, int)
+	 */
+	public List<Server> get(int start, int max) {
+		TypedQuery<Server> q = em.createNamedQuery("getAllServers", Server.class);
+		q.setFirstResult(start);
+		q.setMaxResults(max);
+		return q.getResultList();
+	}
+
+	public List<Server> get(String search, int start, int count, String order) {
+		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
+				"Server", "s", search, true, false, order, searchFields),
+				Server.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	/**
+	 * get the list of all servers in the cluster that are ready to receive a
+	 * ping (active = true)
+	 * 
+	 * @return
+	 */
+	public List<Server> getActiveServers() {
+		return em.createNamedQuery("getActiveServers", Server.class)
+				.getResultList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#count()
+	 */
+	public long count() {
+		log.debug("getServerCount enter");
+		TypedQuery<Long> q = em.createNamedQuery("getServerCount", Long.class);
+
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server",
+				"s", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#get(long)
+	 */
+	public Server get(long id) {
+		Server result = null;
+		log.debug("getServer enter, id = " + id);
+		TypedQuery<Server> q = em.createNamedQuery("getServerById",
+				Server.class);
+		q.setParameter("id", id);
+		try {
+			result = q.getSingleResult();
+		} catch (NoResultException e) {
+			// noop
+		}
+		return result;
+	}
+
+	/**
+	 * Get server by its address
+	 * 
+	 * @param address
+	 * @return
+	 */
+	public Server getServerByAddress(String address) {
+		log.debug("getServer enter, address = " + address);
+		TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
+				Server.class);
+		q.setParameter("address", address);
+		List<Server> list = q.getResultList();
+		return list.size() > 0 ? list.get(0) : null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
+	 * .beans.OmEntity, long)
+	 */
+	public Server update(Server entity, Long userId) {
+		entity.setDeleted(false);
+		if (entity.getId() > 0) {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(usersDao.get(userId));
+			}
+			em.merge(entity);
+		} else {
+			entity.setInserted(new Date());
+			if (userId != null) {
+				entity.setInsertedby(usersDao.get(userId));
+			}
+			em.persist(entity);
+		}
+		return entity;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
+	 * .beans.OmEntity, long)
+	 */
+	public void delete(Server entity, Long userId) {
+		if (entity.getId() > 0) {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(usersDao.get(userId));
+			}
+			entity.setDeleted(true);
+			em.merge(entity);
+		}
+	}
+
+	/**
+	 * get {@link Server} by name
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public List<Server> getServersByName(String name) {
+		TypedQuery<Server> q = em.createNamedQuery("getServerByName",
+				Server.class);
+		q.setParameter("name", name);
+		return q.getResultList();
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
new file mode 100644
index 0000000..b954e85
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
@@ -0,0 +1,443 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner This Class handles all session management
+ * 
+ *         TODO: Delete all inactive session by a scheduler
+ * 
+ */
+@Transactional
+public class SessiondataDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SessiondataDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private ISessionManager sessionManager;
+
+	/**
+	 * creates a new session-object in the database
+	 * 
+	 * @return
+	 */
+	public Sessiondata startsession() {
+		try {
+
+			log.debug("startsession :: startsession");
+
+			long thistime = new Date().getTime();
+			Sessiondata sessiondata = new Sessiondata();
+			sessiondata.setSession_id(ManageCryptStyle.getInstanceOfCrypt()
+					.createPassPhrase(String.valueOf(thistime).toString()));
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setStarttermin_time(new Date());
+			sessiondata.setUser_id(null);
+
+			sessiondata = em.merge(sessiondata);
+
+			return sessiondata;
+		} catch (Exception ex2) {
+			log.error("[startsession]: ", ex2);
+		}
+
+		return null;
+	}
+
+	public Sessiondata getSessionByHash(String SID) {
+		try {
+			log.debug("updateUser User SID: " + SID);
+
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+
+			List<Sessiondata> fullList = q.getResultList();
+			if (fullList.size() == 0) {
+				log.error("Could not find session to update: " + SID);
+				return null;
+			}
+
+			Sessiondata sd = fullList.get(0);
+
+			return sd;
+		} catch (Exception ex2) {
+			log.error("[getSessionByHash]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @return
+	 */
+	public Long checkSession(String SID) {
+		try {
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			// Update the Session Object
+			if (sessiondata != null)
+				updatesession(SID);
+
+			// Checks if wether the Session or the User Object of that Session
+			// is set yet
+			if (sessiondata == null || sessiondata.getUser_id() == null
+					|| sessiondata.getUser_id().equals(new Long(0))) {
+				return new Long(0);
+			} else {
+				return sessiondata.getUser_id();
+			}
+		} catch (Exception ex2) {
+			log.error("[checkSession]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * update the session of a user with a new user id this is needed to see if
+	 * the session is loggedin
+	 * 
+	 * @param SID
+	 * @param USER_ID
+	 */
+	public Boolean updateUser(String SID, long USER_ID) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public boolean updateUser(String SID, long USER_ID, boolean storePermanent, Long language_id) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id() + " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (storePermanent) {
+				sessiondata.setStorePermanent(storePermanent);
+			}
+			sessiondata.setLanguage_id(language_id);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+
+			// log.debug("session updated User: "+USER_ID);
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return false;
+	}
+
+	public Boolean updateUserOrg(String SID, Long organization_id) {
+		try {
+			log.debug("updateUserOrg User: " + organization_id + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " organisation_id: " + organization_id);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setOrganization_id(organization_id);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public Boolean updateUserWithoutSession(String SID, Long USER_ID) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public Boolean updateUserRemoteSession(String SID, String sessionXml) {
+		try {
+			log.debug("updateUser User SID: " + SID);
+
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+			List<Sessiondata> fullList = q.getResultList();
+
+			if (fullList.size() == 0) {
+				log.error("Could not find session to update: " + SID);
+				return false;
+			} else {
+				// log.error("Found session to update: "+SID);
+			}
+			Sessiondata sd = fullList.get(0);
+			sd.setRefresh_time(new Date());
+			sd.setSessionXml(sessionXml);
+
+			if (sd.getId() == null) {
+				em.persist(sd);
+			} else {
+				if (!em.contains(sd)) {
+					em.merge(sd);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUserRemoteSession]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * update the session every time a user makes a request
+	 * 
+	 * @param SID
+	 */
+	private void updatesession(String SID) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+
+			List<Sessiondata> fullList = q.getResultList();
+			if (fullList.size() == 0) {
+				log.error("Found NO session to updateSession: ");
+
+			} else {
+				// log.debug("Found session to updateSession: ");
+				Sessiondata sd = fullList.iterator().next();
+				// log.debug("Found session to updateSession sd "+sd.getUser_id()+" "+sd.getSession_id());
+				sd.setRefresh_time(new Date());
+
+				if (sd.getId() == null) {
+					em.persist(sd);
+				} else {
+					if (!em.contains(sd)) {
+						em.merge(sd);
+					}
+				}
+			}
+
+		} catch (Exception ex2) {
+			log.error("[updatesession]: ", ex2);
+		}
+	}
+
+	/**
+	 * 
+	 * @param date
+	 * @return
+	 */
+	private List<Sessiondata> getSessionToDelete(Date refresh_time) {
+		try {
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionToDelete", Sessiondata.class);
+			query.setParameter("refresh_time", refresh_time);
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getSessionToDelete]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 *
+	 */
+	public void clearSessionTable() {
+		try {
+			log.debug("****** clearSessionTable: ");
+			Calendar rightNow = Calendar.getInstance();
+			rightNow.setTimeInMillis(rightNow.getTimeInMillis() - 1800000);
+			List<Sessiondata> l = this.getSessionToDelete(rightNow.getTime());
+			log.debug("clearSessionTable: " + l.size());
+			for (Iterator<Sessiondata> it = l.iterator(); it.hasNext();) {
+				Sessiondata sData = it.next();
+				sData = em.find(Sessiondata.class, sData.getId());
+				em.remove(sData);
+			}
+		} catch (Exception err) {
+			log.error("clearSessionTable", err);
+		}
+	}
+
+	/**
+	 * @param room_id
+	 */
+	public void clearSessionByRoomId(Long room_id) {
+		try {
+			for (Client rcl : sessionManager.getClientListByRoom(room_id)) {
+				String aux = rcl.getSwfurl();
+
+				int init_pos = aux.indexOf("sid=") + 4;
+				int end_pos = init_pos + 32;
+				if (end_pos > aux.length())
+					end_pos = aux.length();
+				String SID = aux.substring(init_pos, end_pos);
+
+				Sessiondata sData = this.getSessionByHash(SID);
+
+				sData = em.find(Sessiondata.class, sData.getId());
+				em.remove(sData);
+			}
+
+		} catch (Exception err) {
+			log.error("clearSessionByRoomId", err);
+		}
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java b/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
new file mode 100644
index 0000000..5031e23
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+
+//FIXME HACK to bypass cross project compilation
+public interface IUserManager {
+	Long registerUserInit(Set<Right> rights, String login, String password, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, boolean sendWelcomeMessage,
+			List<Long> organisations, String phone, boolean sendSMS, Boolean sendConfirmation,
+			TimeZone timezone, Boolean forceTimeZoneCheck,
+			String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String activatedHash) throws Exception;
+
+	Long registerUserNoEmail(String login, String Userpass,
+			String lastname, String firstname, String email, Date age,
+			String street, String additionalname, String fax, String zip,
+			long states_id, String town, long language_id, String phone, boolean sendSMS, 
+			boolean generateSipUserData, String jNameTimeZone);
+	
+	Long getLanguage(Locale loc);
+	State getCountry(Locale loc);
+	User loginOAuth(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException;
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java b/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java
new file mode 100644
index 0000000..96f64e7
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+//FIXME HACK to bypass cross project compilation
+public interface IUserService {
+	Boolean kickUserByStreamId(String SID, String streamid, long serverId);
+	Boolean kickUserBySessionId(String SID, long userId, String sessionId);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java
new file mode 100644
index 0000000..bfcd686
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class OrganisationDao implements IDataProviderDao<Organisation> {
+	public final static String[] searchFields = {"name"};
+	@PersistenceContext
+	private EntityManager em;
+
+	public Organisation get(long id) {
+		TypedQuery<Organisation> query = em.createNamedQuery("getOrganisationById", Organisation.class);
+		query.setParameter("id", id);
+		Organisation o = null;
+		try {
+			o = query.getSingleResult();
+		} catch (NoResultException e) {
+			// o = null;
+		}
+		return o;
+	}
+
+	public Organisation get(String name) {
+		List<Organisation> orgs = em.createNamedQuery("getOrganisationByName", Organisation.class).setParameter("name", name).getResultList();
+		return orgs == null || orgs.isEmpty() ? null : orgs.get(0);
+	}
+
+	public List<Organisation> get(int start, int count) {
+		TypedQuery<Organisation> q = em.createNamedQuery("getNondeletedOrganisations", Organisation.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<Organisation> get(String search, int start, int count, String sort) {
+		TypedQuery<Organisation> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, false, sort, searchFields), Organisation.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countOrganisations", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public List<Organisation> get(Collection<Long> ids) {
+		return em.createNamedQuery("getOrganisationsByIds", Organisation.class).setParameter("ids", ids).getResultList();
+	}
+
+	public Organisation update(Organisation entity, Long userId) {
+		if (entity.getOrganisation_id() == null) {
+			if (userId != null) {
+				entity.setInsertedby(userId);
+			}
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			if (userId != null) {
+				entity.setUpdatedby(userId);
+			}
+			entity.setUpdatetime(new Date());
+			em.merge(entity);
+		}
+		return entity;
+	}
+
+	public void delete(Organisation entity, Long userId) {
+		em.createNamedQuery("deleteUsersFromOrganisation")
+			.setParameter("id", entity.getOrganisation_id())
+			.executeUpdate();
+
+		entity.setDeleted(true);
+		if (userId != null) {
+			entity.setUpdatedby(userId);
+		}
+
+		em.merge(entity);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java
new file mode 100644
index 0000000..e3dc9cd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class OrganisationUserDao implements IDataProviderDao<Organisation_Users> {
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao usersDao;
+	public final static String[] searchFields = {"user.lastname", "user.firstname", "user.login", "user.adresses.email"};
+
+	public Organisation_Users get(long id) {
+		TypedQuery<Organisation_Users> q = em.createNamedQuery("getOrganisationUsersById", Organisation_Users.class);
+		q.setParameter("id", id);
+		return q.getSingleResult();
+	}
+
+	public List<Organisation_Users> get(int start, int count) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public List<Organisation_Users> get(String search, int start, int count, String sort) {
+		throw new RuntimeException("Should not be used");
+	}
+	
+	public List<Organisation_Users> get(long orgId, String search, int start, int count, String sort) {
+		TypedQuery<Organisation_Users> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", null, search, false, false, "ou.organisation.organisation_id = :orgId", sort, searchFields), Organisation_Users.class);
+		q.setParameter("orgId", orgId);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public List<Organisation_Users> get(long orgId, int start, int count) {
+		TypedQuery<Organisation_Users> q = em.createNamedQuery("getOrganisationUsersByOrgId", Organisation_Users.class);
+		q.setParameter("id", orgId);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public Organisation_Users getByOrganizationAndUser(long orgId, long userId) {
+		try {
+			List<Organisation_Users> list = em.createNamedQuery("isUserInOrganization", Organisation_Users.class)
+					.setParameter("orgId", orgId).setParameter("userId", userId).getResultList();
+			if (list != null && !list.isEmpty()) {
+				return list.get(0);
+			}
+		} catch (Exception e) {
+			//no-op
+		}
+		return null;
+	}
+	
+	public boolean isUserInOrganization(long orgId, long userId) {
+		return em.createNamedQuery("isUserInOrganization", Organisation_Users.class)
+				.setParameter("orgId", orgId).setParameter("userId", userId).getResultList().size() > 0;
+	}
+	
+	public long count() {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public long count(String search) {
+		throw new RuntimeException("Should not be used");
+	}
+	
+	public long count(long orgId, String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public long count(long orgId) {
+		TypedQuery<Long> q = em.createNamedQuery("countOrganisationUsers", Long.class);
+		q.setParameter("id", orgId);
+		return q.getSingleResult();
+	}
+
+	public void update(List<Organisation_Users> list, Long userId) {
+		for (Organisation_Users ou : list) {
+			update(ou, userId);
+		}
+	}
+	
+	public Organisation_Users update(Organisation_Users entity, Long userId) {
+		if (entity.getOrganisation_users_id() == null) {
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			entity.setUpdatetime(new Date());
+			entity = em.merge(entity);
+		}
+		updateUser(entity, false, userId);
+		return entity;
+	}
+
+	private void updateUser(Organisation_Users entity, boolean delete, Long userId) {
+		//entity has been detached need to re-fetch
+		User u = usersDao.get(entity.getUser().getUser_id());
+		int idx = u.getOrganisation_users().indexOf(entity);
+		if (delete && idx > -1) {
+			Organisation_Users ou = u.getOrganisation_users().remove(idx);
+			em.remove(ou);
+		} else if (!delete && idx < 0) {
+			u.getOrganisation_users().add(entity);
+		}
+		usersDao.update(u, userId);
+	}
+	
+	public void delete(Organisation_Users entity, Long userId) {
+		if (entity.getOrganisation_users_id() != null) {
+			updateUser(entity, true, userId);
+		}
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
new file mode 100644
index 0000000..276f1bd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PrivateMessageFolderDao implements IDataProviderDao<PrivateMessageFolder> {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessageFolderDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Long addPrivateMessageFolder(String folderName, Long userId) {
+		try {
+			PrivateMessageFolder privateMessageFolder = new PrivateMessageFolder();
+			privateMessageFolder.setFolderName(folderName);
+			privateMessageFolder.setUserId(userId);
+			privateMessageFolder.setInserted(new Date());
+			
+			privateMessageFolder = em.merge(privateMessageFolder);
+			Long privateMessageFolderId = privateMessageFolder.getPrivateMessageFolderId();
+			
+			return privateMessageFolderId;	
+		} catch (Exception e) {
+			log.error("[addPrivateMessageFolder]",e);
+		}
+		return null;
+	}
+	
+	public Long addPrivateMessageFolderObj(PrivateMessageFolder privateMessageFolder) {
+		try {
+			privateMessageFolder.setInserted(new Date());
+			
+			privateMessageFolder = em.merge(privateMessageFolder);
+			Long privateMessageFolderId = privateMessageFolder.getPrivateMessageFolderId();
+			
+			return privateMessageFolderId;	
+		} catch (Exception e) {
+			log.error("[addPrivateMessageFolder]",e);
+		}
+		return null;
+	}
+	
+	public PrivateMessageFolder get(long privateMessageFolderId) {
+		try {
+			String hql = "select c from PrivateMessageFolder c " +
+						"where c.privateMessageFolderId = :privateMessageFolderId ";
+
+			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+			query.setParameter("privateMessageFolderId", privateMessageFolderId);
+			
+			PrivateMessageFolder privateMessageFolder = null;
+			try {
+				privateMessageFolder = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+			
+			return privateMessageFolder;
+		} catch (Exception e) {
+			log.error("[getPrivateMessageFolderById]",e);
+		}
+		return null;
+	}
+
+	public List<PrivateMessageFolder> get(int start, int count) {
+		return em.createQuery("SELECT c FROM PrivateMessageFolder c ORDER BY c.privateMessageFolderId", PrivateMessageFolder.class)
+				.setFirstResult(start).setMaxResults(count)
+				.getResultList();
+	}
+
+	public PrivateMessageFolder update(PrivateMessageFolder privateMessageFolder, Long userId) {
+		if (privateMessageFolder.getPrivateMessageFolderId() == 0) {
+			em.persist(privateMessageFolder);
+	    } else {
+	    	if (!em.contains(privateMessageFolder)) {
+	    		privateMessageFolder = em.merge(privateMessageFolder);
+		    }
+		}
+		return privateMessageFolder;
+	}
+	
+	public List<PrivateMessageFolder> getPrivateMessageFolderByUserId(Long userId) {
+		try {
+			String hql = "select c from PrivateMessageFolder c " +
+						"where c.userId = :userId ";
+
+			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+			query.setParameter("userId", userId);
+			
+			List<PrivateMessageFolder> privateMessageFolders = query.getResultList();
+			
+			return privateMessageFolders;
+		} catch (Exception e) {
+			log.error("[getPrivateMessageFolderByUserId]",e);
+		}
+		return null;
+	}
+
+	public void delete(PrivateMessageFolder privateMessageFolder, Long userId) {
+		privateMessageFolder = em.find(PrivateMessageFolder.class, privateMessageFolder.getPrivateMessageFolderId());
+		em.remove(privateMessageFolder);
+	}
+
+	public List<PrivateMessageFolder> get(String search, int start, int count, String order) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long count() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public long count(String search) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java
new file mode 100644
index 0000000..b4e3ce0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.User;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PrivateMessagesDao implements IDataProviderDao<PrivateMessage> {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessagesDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Long addPrivateMessage(String subject, String message, Long parentMessageId, 
+			User from, User to, User owner, Boolean bookedRoom, Room room,
+			Boolean isContactRequest, Long userContactId) {
+		try {
+			PrivateMessage privateMessage = new PrivateMessage();
+			privateMessage.setInserted(new Date());
+			privateMessage.setSubject(subject);
+			privateMessage.setMessage(message);
+			privateMessage.setFrom(from);
+			privateMessage.setTo(to);
+			privateMessage.setOwner(owner);
+			privateMessage.setBookedRoom(Boolean.TRUE.equals(bookedRoom));
+			privateMessage.setRoom(room);
+			privateMessage.setParentMessage(parentMessageId);
+			privateMessage.setFolderId(INBOX_FOLDER_ID);
+			privateMessage.setIsRead(false);
+			privateMessage.setIsContactRequest(isContactRequest);
+			privateMessage.setUserContactId(userContactId);
+			
+			privateMessage = em.merge(privateMessage);
+			Long privateMessageId = privateMessage.getFolderId();
+			
+			return privateMessageId;			
+		} catch (Exception e) {
+			log.error("[addPrivateMessage]",e);
+		}
+		return null;
+	}
+	
+	public List<PrivateMessage> get(int first, int count) {
+		return em.createNamedQuery("getPrivateMessages", PrivateMessage.class)
+				.setFirstResult(first).setMaxResults(count)
+				.getResultList();
+	}
+	
+	public PrivateMessage get(long id) {
+		TypedQuery<PrivateMessage> query = em.createNamedQuery("getPrivateMessageById", PrivateMessage.class); 
+		query.setParameter("id", id);
+		PrivateMessage privateMessage = null;
+		try {
+			privateMessage = query.getSingleResult();
+	    } catch (NoResultException ex) {
+	    }
+		return privateMessage;
+	}
+	
+	public PrivateMessage update(PrivateMessage entity, Long userId) {
+		if (entity.getId() < 1) {
+			entity.setInserted(new Date());
+			em.persist(entity);
+	    } else {
+    		entity = em.merge(entity);
+		}
+		return entity;
+	}
+	
+	private String getQuery(boolean isCount, String search, String orderBy, boolean asc) {
+		StringBuilder hql = new StringBuilder("SELECT ");
+		hql.append(isCount ? "COUNT(" : "").append("m").append(isCount ? ")" : "")
+			.append(" FROM PrivateMessage m WHERE m.owner.user_id = :ownerId ")
+			.append(" AND m.folderId = :folderId ");
+		
+		if (!StringUtils.isEmpty(search)) {
+			hql.append(" AND ( ")
+				.append("lower(m.subject) LIKE :search ")
+				.append("OR lower(m.message) LIKE :search ")
+				.append("OR lower(m.from.firstname) LIKE :search ")
+				.append("OR lower(m.from.lastname) LIKE :search ")
+				.append("OR lower(m.from.login) LIKE :search ")
+				.append("OR lower(m.from.adresses.email) LIKE :search ")
+				.append(" ) ");
+		}
+		
+		if (!isCount && !StringUtils.isEmpty(orderBy)) {
+			hql.append(" ORDER BY ").append(orderBy).append(asc ? " ASC" : " DESC");
+		}
+		return hql.toString();
+	}
+	
+	public Long count(Long ownerId, Long folderId, String search) {
+		TypedQuery<Long> query = em.createQuery(getQuery(true, search, null, true), Long.class); 
+		query.setParameter("ownerId", ownerId);
+		if (!StringUtils.isEmpty(search)) {
+			query.setParameter("search", StringUtils.lowerCase("%" + search + "%"));
+		}
+		query.setParameter("folderId", folderId);
+		return query.getSingleResult();
+	}
+	
+	public List<PrivateMessage> get(Long ownerId, Long folderId, String search, String orderBy, boolean asc, int start, int max) {
+		TypedQuery<PrivateMessage> query = em.createQuery(getQuery(false, search, orderBy, asc), PrivateMessage.class); 
+		query.setParameter("ownerId", ownerId);
+		query.setParameter("folderId", folderId);
+		if (!StringUtils.isEmpty(search)) {
+			query.setParameter("search", StringUtils.lowerCase("%" + search + "%"));
+		}
+		query.setFirstResult(start);
+		query.setMaxResults(max);
+		return query.getResultList();
+	}
+	
+	public int updateReadStatus(Collection<Long> ids, Boolean isRead) {
+		Query query = em.createNamedQuery("updatePrivateMessagesReadStatus"); 
+		query.setParameter("isRead", isRead);
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+
+	public Integer moveMailsToFolder(Collection<Long> ids, Long folderId) {
+		Query query = em.createNamedQuery("moveMailsToFolder"); 
+		query.setParameter("folderId", folderId);
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+	
+	public int delete(Collection<Long> ids) {
+		Query query = em.createNamedQuery("deletePrivateMessages"); 
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+	
+	public List<PrivateMessage> getByRoom(Long roomId) {
+		return em.createNamedQuery("getPrivateMessagesByRoom", PrivateMessage.class)
+				.setParameter("roomId", roomId).getResultList();
+	}
+
+	public List<PrivateMessage> get(String search, int start, int count, String order) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long count() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public long count(String search) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public void delete(PrivateMessage entity, Long userId) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java
new file mode 100644
index 0000000..e3e76b6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link Salutation}
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class SalutationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SalutationDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	/**
+	 * Adds a new Salutation to the table Titles
+	 * 
+	 * @param titelname
+	 * @param fieldvalues_id
+	 * @return
+	 */
+	public Long addUserSalutation(String titelname, long fieldvalues_id) {
+		try {
+			Salutation ti = new Salutation();
+			ti.setName(titelname);
+			ti.setDeleted(false);
+			ti.setFieldvalues_id(fieldvalues_id);
+			ti.setStarttime(new Date());
+			ti = em.merge(ti);
+			Long salutations_id = ti.getSalutations_id();
+			return salutations_id;
+		} catch (Exception ex2) {
+			log.error("[addUserSalutation]", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * get a Salutation by given id
+	 * 
+	 * @param id
+	 * @param language_id
+	 * @return
+	 */
+	public Salutation get(Long id, long language_id) {
+		List<Salutation> ll = em.createNamedQuery("getSalutationById", Salutation.class)
+				.setParameter("id", id).getResultList();
+		return ll.isEmpty() ? null : ll.get(0);
+	}
+	
+	/**
+	 * get a list of all availible Salutations
+	 * 
+	 * @param language_id
+	 * @return
+	 */
+	public List<Salutation> getUserSalutations(long language_id) {
+		List<Salutation> ll = em.createNamedQuery("getSalutations", Salutation.class).getResultList();
+		return ll;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java
new file mode 100644
index 0000000..eb28ef4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link State}
+ * 
+ * @author sebawagner
+ * 
+ */
+@Transactional
+public class StateDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			StateDao.class, OpenmeetingsVariables.webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	/**
+	 * adds a new State to the states table with no short name and code
+	 * 
+	 * @param name
+	 * @return the id of the new state or null if an error occurred
+	 */
+	public Long addState(String name) {
+		return addState(name, "", 0);
+	}
+	
+	/**
+	 * adds a new State to the states table
+	 * 
+	 * @param name the name of the country
+	 * @param shortName the short name of the country
+	 * @param code the code of the country
+	 * @return the id of the new state or null if an error occurred
+	 */
+	public Long addState(String name, String shortName, int code) {
+		try {
+
+			State st = new State();
+			st.setName(name);
+			st.setShortName(shortName);
+			st.setCode(code);
+			st.setStarttime(new Date());
+			st.setDeleted(false);
+
+			st = em.merge(st);
+			Long id = st.getState_id();
+
+			log.debug("added id " + id);
+
+			return id;
+		} catch (Exception ex2) {
+			log.error("addState", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * selects a state by its id
+	 * 
+	 * @param state_id
+	 * @return the state-object or null
+	 */
+	public State getStateById(long state_id) {
+		try {
+			TypedQuery<State> query = em
+					.createNamedQuery("getStateById", State.class);
+			query.setParameter("state_id", state_id);
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("getStateById", ex2);
+		}
+		return null;
+	}
+	
+	/**
+	 * selects a state by its name
+	 * 
+	 * @param state_id
+	 * @return the state-object or null
+	 */
+	public State getStateByName(String name) {
+		try {
+			if (name == null) {
+				return null;
+			}
+			TypedQuery<State> query = em
+					.createNamedQuery("getStateByName", State.class);
+			query.setParameter("name", name.toLowerCase());
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("getStateByName", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all state-Object
+	 * 
+	 * @return List of State Objects or null
+	 */
+	public List<State> getStates() {
+		try {
+			TypedQuery<State> query = em
+					.createNamedQuery("getStates", State.class);
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("getStates", ex2);
+		}
+		return null;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java
new file mode 100644
index 0000000..091778d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java
@@ -0,0 +1,266 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class UserContactsDao {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(UserContactsDao.class, OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+    @Autowired
+    private UserDao userDao;
+
+	public Long addUserContact(Long user_id, Long ownerId, Boolean pending, String hash) {
+		try {
+			
+			UserContact userContact = new UserContact();
+			userContact.setInserted(new Date());
+			userContact.setOwner(userDao.get(ownerId));
+			userContact.setContact(userDao.get(user_id));
+			userContact.setPending(pending);
+			userContact.setHash(hash);
+			
+			userContact = em.merge(userContact);
+			Long userContactId = userContact.getUserContactId();
+			
+			return userContactId;			
+		} catch (Exception e) {
+			log.error("[addUserContact]",e);
+		}
+		return null;
+	}
+	
+	public Long addUserContactObj(UserContact userContact) {
+		try {
+			
+			userContact.setInserted(new Date());
+			
+			userContact = em.merge(userContact);
+			Long userContactId = userContact.getUserContactId();
+			
+			return userContactId;			
+		} catch (Exception e) {
+			log.error("[addUserContact]",e);
+		}
+		return null;
+	}
+	
+	/**
+	 * @param userContactDeleteId
+	 * @return rowcount of update
+	 */
+	public Integer deleteUserContact(Long userContactDeleteId) {
+		try {
+			Query query = em.createNamedQuery("deleteUserContact");
+			query.setParameter("userContactDeleteId", userContactDeleteId);
+	        return query.executeUpdate();
+		} catch (Exception e) {
+			log.error("[deleteUserContact]",e);
+		}
+		return null;
+	}
+	
+	/**
+	 * @param ownerId
+	 * @return rowcount of update
+	 */
+	public Integer deleteAllUserContacts(Long ownerId) {
+		try {
+			Query query = em.createNamedQuery("deleteAllUserContacts");
+	        query.setParameter("ownerId",ownerId);
+	        return query.executeUpdate();
+		} catch (Exception e) {
+			log.error("[deleteAllUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public Long checkUserContacts(Long user_id, Long ownerId) {
+		try {
+			TypedQuery<Long> query = em.createNamedQuery("checkUserContacts", Long.class); 
+			query.setParameter("user_id", user_id);
+			query.setParameter("ownerId", ownerId);
+			List<Long> ll = query.getResultList();
+			
+			log.info("checkUserContacts" + ll.get(0));
+			
+			return ll.get(0);
+			
+		} catch (Exception e) {
+			log.error("[checkUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public List<UserContact> get(long ownerId, int first, int count) {
+		TypedQuery<UserContact> q = em.createNamedQuery("getContactsByUser", UserContact.class);
+		q.setParameter("user_id", ownerId);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count(long ownerId) {
+		TypedQuery<Long> q = em.createNamedQuery("countContactsByUser", Long.class);
+		q.setParameter("user_id", ownerId);
+		return q.getSingleResult();
+	}
+	
+	public List<UserContact> getContactsByUserAndStatus(Long ownerId, Boolean pending) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByUserAndStatus", UserContact.class);
+			query.setParameter("ownerId", ownerId);
+			query.setParameter("pending", pending);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactsByUserAndStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact getUserContactByShareCalendar(Long contactId,
+			Boolean shareCalendar, Long userId) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactByShareCalendar",
+					UserContact.class);
+			query.setParameter("contactId", contactId);
+			query.setParameter("userId", userId);
+			query.setParameter("shareCalendar", shareCalendar);
+			List<UserContact> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception e) {
+			log.error("[getUserContactByShareCalendar]", e);
+		}
+		return null;
+	}
+
+	public List<UserContact> getContactsByShareCalendar(Long contactId, Boolean shareCalendar) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByShareCalendar", UserContact.class); 
+			query.setParameter("contactId", contactId);
+			query.setParameter("shareCalendar", shareCalendar);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactsByShareCalendar]",e);
+		}
+		return null;
+	}
+	
+	public List<UserContact> getContactRequestsByUserAndStatus(Long user_id, Boolean pending) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactRequestsByUserAndStatus", UserContact.class); 
+			query.setParameter("user_id", user_id);
+			query.setParameter("pending", pending);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactRequestsByUserAndStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact get(Long id) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactsById", UserContact.class); 
+			query.setParameter("userContactId", id);
+			UserContact userContacts = null;
+			try {
+				userContacts = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+			return userContacts;
+		} catch (Exception e) {
+			log.error("[getUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public List<UserContact> getUserContacts() {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContacts", UserContact.class); 
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public Long updateContactStatus(Long userContactId, Boolean pending) {
+		try {
+			
+			UserContact userContacts = this.get(userContactId);
+			
+			if (userContacts == null) {
+				return null;
+			}
+			userContacts.setPending(pending);
+			userContacts.setUpdated(new Date());
+			
+			if (userContacts.getUserContactId() == 0) {
+				em.persist(userContacts);
+		    } else {
+		    	if (!em.contains(userContacts)) {
+		    		em.merge(userContacts);
+			    }
+			}
+			
+			return userContactId;
+			
+		} catch (Exception e) {
+			log.error("[updateContactStatus]",e);
+		}
+		return null;
+	}
+	
+	public void updateContact(UserContact userContacts) {
+		try {
+			userContacts.setUpdated(new Date());
+			
+			if (userContacts.getUserContactId() == 0) {
+				em.persist(userContacts);
+		    } else {
+		    	if (!em.contains(userContacts)) {
+		    		em.merge(userContacts);
+			    }
+			}
+			
+		} catch (Exception e) {
+			log.error("[updateContact]",e);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java
new file mode 100644
index 0000000..e7d92ce
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java
@@ -0,0 +1,686 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+import java.util.UUID;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.OpenJPAQuery;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.db.util.UserHelper;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link User}
+ * 
+ * @author swagner, solomax, vasya
+ * 
+ */
+@Transactional
+public class UserDao implements IDataProviderDao<User> {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserDao.class, webAppRootKey);
+
+	public final static String[] searchFields = {"lastname", "firstname", "login", "adresses.email", "adresses.town"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public static Set<Right> getDefaultRights() {
+		Set<Right> rights = new HashSet<User.Right>();
+		rights.add(Right.Login);
+		rights.add(Right.Dashboard);
+		rights.add(Right.Room);
+		return rights;
+	}
+	/**
+	 * Get a new instance of the {@link User} entity, with all default values
+	 * set
+	 * 
+	 * @param currentUser - the user to copy time zone from
+	 * @return new User instance
+	 */
+	public User getNewUserInstance(User currentUser) {
+		User user = new User();
+		user.setSalutations_id(1L); // TODO: Fix default selection to be configurable
+		user.setRights(getDefaultRights());
+		user.setLanguage_id(cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1"));
+		user.setTimeZoneId(timezoneUtil.getTimeZone(currentUser).getID());
+		user.setForceTimeZoneCheck(false);
+		user.setSendSMS(false);
+		user.setAge(new Date());
+		Address adresses = new Address();
+		adresses.setStates(stateDao.getStateById(1L));
+		user.setAdresses(adresses);
+		user.setShowContactData(false);
+		user.setShowContactDataToContacts(false);
+
+		return user;
+	}
+
+	public List<User> get(int first, int count) {
+		TypedQuery<User> q = em.createNamedQuery("getNondeletedUsers", User.class);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	private String getAdditionalJoin(boolean filterContacts) {
+		return filterContacts ? "LEFT JOIN u.organisation_users ou" : null;
+	}
+	
+	private String getAdditionalWhere(boolean excludeContacts, Map<String, Object> params) {
+		if (excludeContacts) {
+			params.put("contact", Type.contact);
+			return "u.type <> :contact";
+		}
+		return null;
+	}
+	
+	private String getAdditionalWhere(boolean filterContacts, Long ownerId, Map<String, Object> params) {
+		if (filterContacts) {
+			params.put("ownerId", ownerId);
+			params.put("contact", Type.contact);
+			return "((u.type <> :contact AND ou.organisation.organisation_id IN (SELECT ou.organisation.organisation_id FROM Organisation_Users ou WHERE ou.user.user_id = :ownerId)) "
+				+ "OR (u.type = :contact AND u.ownerId = :ownerId))";
+		}
+		return null;
+	}
+	
+	private void setAdditionalParams(TypedQuery<?> q, Map<String, Object> params) {
+		for (Map.Entry<String, Object> me: params.entrySet()) {
+			q.setParameter(me.getKey(), me.getValue());
+		}
+	}
+
+	public List<User> get(String search, int start, int count, String sort, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, false
+				, getAdditionalWhere(filterContacts, currentUserId, params), sort, searchFields), User.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		setAdditionalParams(q, params);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		// get all users
+		TypedQuery<Long> q = em.createNamedQuery("countNondeletedUsers", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		return count(search, false, -1);
+	}
+	
+	public long count(String search, long currentUserId) {
+		return count(search, false, currentUserId);
+	}
+	
+	public long count(String search, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, true
+				, getAdditionalWhere(filterContacts, currentUserId, params), null, searchFields), Long.class);
+		setAdditionalParams(q, params);
+		return q.getSingleResult();
+	}
+	
+	//This is AdminDao method
+	public List<User> get(String search, boolean excludeContacts, int first, int count) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", null, search, true, true, false
+				, getAdditionalWhere(excludeContacts, params), null, searchFields), User.class);
+		setAdditionalParams(q, params);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<User> get(String search, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, false
+				, getAdditionalWhere(filterContacts, currentUserId, params), null, searchFields), User.class);
+		setAdditionalParams(q, params);
+		return q.getResultList();
+	}
+
+	public User update(User u, Long userId) {
+		if (u.getOrganisation_users() != null) {
+			for (Organisation_Users ou : u.getOrganisation_users()) {
+				ou.setUser(u);
+			}
+		}
+		if (u.getUser_id() == null) {
+			if (u.getRegdate() == null) {
+				u.setRegdate(new Date());
+			}
+			u.setStarttime(new Date());
+			em.persist(u);
+		} else {
+			u.setUpdatetime(new Date());
+			u =	em.merge(u);
+		}
+		//this is necessary due to organisation details are lost on update
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			em.refresh(ou);
+		}
+		return u;
+	}
+	
+	// TODO: Why the password field is not set via the Model is because its
+	// FetchType is Lazy, this extra hook here might be not needed with a
+	// different mechanism to protect the password from being read
+	// sebawagner, 01.10.2012
+	public User update(User user, String password, long updatedBy) throws NoSuchAlgorithmException {
+		User u = update(user, updatedBy);
+		if (password != null && !password.isEmpty()) {
+			//OpenJPA is not allowing to set fields not being fetched before
+			User u1 = get(u.getUser_id(), true);
+			u1.updatePassword(cfgDao, password);
+			update(u1, updatedBy);
+		}
+		return u;
+	}
+	
+	public void delete(User u, Long userId) {
+		deleteUserID(u.getUser_id());
+	}
+
+	public User get(long user_id) {
+		return get(user_id, false);
+	}
+	
+	private User get(long user_id, boolean force) {
+		User u = null;
+		if (user_id > 0) {
+			OpenJPAEntityManager oem = OpenJPAPersistence.cast(em);
+			boolean qrce = oem.getFetchPlan().getQueryResultCacheEnabled();
+			oem.getFetchPlan().setQueryResultCacheEnabled(false); //FIXME update in cache during update
+			TypedQuery<User> q = oem.createNamedQuery("getUserById", User.class).setParameter("id", user_id);
+			@SuppressWarnings("unchecked")
+			OpenJPAQuery<User> kq = OpenJPAPersistence.cast(q);
+			kq.getFetchPlan().addFetchGroup("orgUsers");
+			if (force) {
+				kq.getFetchPlan().addFetchGroup("backupexport");
+			}
+			try {
+				u = kq.getSingleResult();
+			} catch (NoResultException ne) {
+				//no-op
+			}
+			oem.getFetchPlan().setQueryResultCacheEnabled(qrce);
+		} else {
+			log.info("[get] " + "Info: No USER_ID given");
+		}
+		return u;
+	}
+
+	public Long deleteUserID(long userId) {
+		try {
+			if (userId != 0) {
+				User us = get(userId);
+				for (Organisation_Users ou : us.getOrganisation_users()){
+					em.remove(ou);
+				}
+				us.setOrganisation_users(null);
+				us.setDeleted(true);
+				us.setUpdatetime(new Date());
+				us.setSipUser(null);
+				Address adr = us.getAdresses();
+				if (adr != null) {
+					adr.setDeleted(true);
+				}
+
+				if (us.getUser_id() == null) {
+					em.persist(us);
+				} else {
+					if (!em.contains(us)) {
+						em.merge(us);
+					}
+				}
+				return us.getUser_id();
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteUserID]", ex2);
+		}
+		return null;
+	}
+
+	public List<User> get(Collection<Long> ids) {
+		return em.createNamedQuery("getUsersByIds", User.class).setParameter("ids", ids).getResultList();
+	}
+
+	public List<User> getAllUsers() {
+		TypedQuery<User> q = em.createNamedQuery("getNondeletedUsers", User.class);
+		return q.getResultList();
+	}
+
+	public List<User> getAllBackupUsers() {
+		try {
+			TypedQuery<User> q = em.createNamedQuery("getAllUsers", User.class);
+			@SuppressWarnings("unchecked")
+			OpenJPAQuery<User> kq = OpenJPAPersistence.cast(q);
+			kq.getFetchPlan().addFetchGroups("backupexport", "orgUsers");
+			return kq.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAllUsersDeleted] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * check for duplicates
+	 * 
+	 * @param login
+	 * @param type
+	 * @param domainId
+	 * @param id
+	 * @return
+	 */
+	public boolean checkLogin(String login, Type type, Long domainId, Long id) {
+		try {
+			User u = getByLogin(login, type, domainId);
+			return u == null || u.getUser_id().equals(id);
+		} catch (Exception e) {
+			//exception is thrown in case of non-unique result
+			return false;
+		}
+	}
+
+	/**
+	 * Checks if a mail is already taken by someone else
+	 * 
+	 * @param email
+	 * @param type
+	 * @param domainId
+	 * @param id
+	 * @return
+	 */
+	public boolean checkEmail(String email, Type type, Long domainId, Long id) {
+		log.debug("checkEmail: email = {}, id = {}", email, id);
+		try {
+			User u = getByEmail(email, type, domainId);
+			return u == null || u.getUser_id().equals(id);
+		} catch (Exception e) {
+			//exception is thrown in case of non-unique result
+			return false;
+		}
+	}
+	
+	public boolean validLogin(String login) {
+		return !Strings.isEmpty(login) && login.length() >= UserHelper.getMinLoginLength(cfgDao);
+	}
+	
+	public User getByLogin(String login, Type type, Long domainId) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getUserByLogin", User.class)
+					.setParameter("login", login)
+					.setParameter("type", type)
+					.setParameter("domainId", domainId == null ? 0 : domainId)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+
+	public User getByEmail(String email) {
+		return getByEmail(email, User.Type.user, null);
+	}
+
+	public User getByEmail(String email, User.Type type, Long domainId) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getUserByEmail", User.class)
+					.setParameter("email", email)
+					.setParameter("type", type)
+					.setParameter("domainId", domainId == null ? 0 : domainId)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+	
+	public Object getUserByHash(String hash) {
+		if (hash.length() == 0) {
+			return new Long(-5);
+		}
+		User us = null;
+		try {
+			us = em.createNamedQuery("getUserByHash", User.class)
+					.setParameter("resethash", hash)
+					.setParameter("type", User.Type.user)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		} catch (Exception e) {
+			log.error("[getUserByHash]", e);
+		}
+		if (us != null) {
+			return us;
+		} else {
+			return new Long(-5);
+		}
+	}
+
+	/**
+	 * @param search
+	 * @return
+	 */
+	public Long selectMaxFromUsersWithSearch(String search) {
+		try {
+			// get all users
+			TypedQuery<Long> query = em.createNamedQuery("selectMaxFromUsersWithSearch", Long.class);
+			query.setParameter("search", StringUtils.lowerCase(search));
+			List<Long> ll = query.getResultList();
+			log.info("selectMaxFromUsers" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromUsers] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns true if the password is correct
+	 * 
+	 * @param userId
+	 * @param password
+	 * @return
+	 */
+	public boolean verifyPassword(Long userId, String password) {
+		TypedQuery<Long> query = em.createNamedQuery("checkPassword", Long.class);
+		query.setParameter("userId", userId);
+		query.setParameter("password", ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(password));
+		return query.getResultList().get(0) == 1;
+
+	}
+
+	public User getContact(String email, long ownerId) {
+		return getContact(email, "", "", ownerId);
+	}
+	
+	public User getContact(String email, User owner) {
+		return getContact(email, "", "", null, null, owner);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, long ownerId) {
+		return getContact(email, firstName, lastName, null, null, get(ownerId));
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, long ownerId) {
+		return getContact(email, firstName, lastName, langId, tzId, get(ownerId));
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, User owner) {
+		User to = null;
+		try {
+			to = em.createNamedQuery("getContactByEmailAndUser", User.class)
+					.setParameter("email", email).setParameter("type", User.Type.contact).setParameter("ownerId", owner.getUser_id()).getSingleResult();
+		} catch (Exception e) {
+			//no-op
+		}
+		if (to == null) {
+			to = new User();
+			to.setType(Type.contact);
+			String login = owner.getUser_id() + "_" + email; //UserId prefix is used to ensure unique login
+			to.setLogin(login.length() < getMinLoginLength(cfgDao) ? UUID.randomUUID().toString() : login);
+			to.setFirstname(firstName);
+			to.setLastname(lastName);
+			to.setLanguage_id(null == langId ? owner.getLanguage_id() : langId);
+			to.setOwnerId(owner.getUser_id());
+			to.setAdresses(new Address());
+			to.getAdresses().setEmail(email);
+			to.setTimeZoneId(null == tzId ? owner.getTimeZoneId() : tzId);
+		}
+		return to;
+	}
+
+	/**
+	 * @param hash
+	 * @return
+	 */
+	public User getUserByActivationHash(String hash) {
+		TypedQuery<User> query = em.createQuery("SELECT u FROM User as u WHERE u.activatehash = :activatehash"
+				+ " AND u.deleted = false", User.class);
+		query.setParameter("activatehash", hash);
+		User u = null;
+		try {
+			u = query.getSingleResult();
+		} catch (NoResultException e) {
+			// u=null}
+		}
+		return u;
+	}
+
+	private <T> TypedQuery<T> getUserProfileQuery(Class<T> clazz, long userId, String text, String offers, String search, String orderBy, boolean asc) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		boolean filterContacts = true;
+		boolean count = clazz.isAssignableFrom(Long.class);
+		
+		StringBuilder sb = new StringBuilder("SELECT ");
+		sb.append(count ? "COUNT(" : "").append("u").append(count ? ") " : " ")
+			.append("FROM User u ").append(getAdditionalJoin(filterContacts)).append(" WHERE u.deleted = false AND ")
+			.append(getAdditionalWhere(filterContacts, userId, params));
+		if (!Strings.isEmpty(offers)) {
+			sb.append(" AND (LOWER(u.userOffers) LIKE :userOffers) ");
+			params.put("userOffers", getStringParam(offers));
+		}
+		if (!Strings.isEmpty(search)) {
+			sb.append(" AND (LOWER(u.userSearchs) LIKE :userSearchs) ");
+			params.put("userSearchs", getStringParam(search));
+		}
+		if (!Strings.isEmpty(text)) {
+			sb.append(" AND (LOWER(u.login) LIKE :search ")
+				.append("OR LOWER(u.firstname) LIKE :search ")
+				.append("OR LOWER(u.lastname) LIKE :search ")
+				.append("OR LOWER(u.adresses.email) LIKE :search ")
+				.append("OR LOWER(u.adresses.town) LIKE :search " + ") ");
+			params.put("search", getStringParam(text));
+		}
+		if (!count && !Strings.isEmpty(orderBy)) {
+			sb.append(" ORDER BY ").append(orderBy).append(asc ? " ASC" : " DESC");
+		}
+		TypedQuery<T> query = em.createQuery(sb.toString(), clazz);
+		setAdditionalParams(query, params);
+		return query;
+	}
+	
+	private String getStringParam(String param) {
+		return param == null ? "%" : "%" + StringUtils.lowerCase(param) + "%";
+	}
+	
+	public List<User> searchUserProfile(long userId, String text, String offers, String search, String orderBy, int start, int max, boolean asc) {
+		return getUserProfileQuery(User.class, userId, text, offers, search, orderBy, asc).setFirstResult(start).setMaxResults(max).getResultList();
+	}
+
+	public Long searchCountUserProfile(long userId, String text, String offers, String search) {
+		return getUserProfileQuery(Long.class, userId, text, offers, search, null, false).getSingleResult();
+	}
+
+	public User getExternalUser(String extId, String extType) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getExternalUser", User.class)
+				.setParameter("externalId", extId)
+				.setParameter("externalType", extType)
+				.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+
+	public List<User> get(String search, int start, int count, String order) {
+		return get(search, start, count, order, false, -1);
+	}
+	
+	public Set<Right> getRights(Long id) {
+		Set<Right> rights = new HashSet<Right>();
+
+		if (id == null) {
+			return rights;
+		}
+		// For direct access of linked users
+		if (id < 0) {
+			rights.add(Right.Room);
+			return rights;
+		}
+
+		User u = get(id);
+		if (u != null) {
+			return u.getRights();
+		}
+		return rights;
+	}
+	
+	/**
+	 * login logic
+	 * 
+	 * @param userOrEmail: login or email of the user being tested
+	 * @param userpass: password of the user being tested
+	 * @return User object in case of successful login
+	 * @throws OmException in case of any issue 
+	 */
+	public User login(String userOrEmail, String userpass) throws OmException {
+		List<User> users = em.createNamedQuery("getUserByLoginOrEmail", User.class)
+				.setParameter("userOrEmail", userOrEmail)
+				.setParameter("type", Type.user)
+				.getResultList();
+
+		log.debug("debug SIZE: " + users.size());
+
+		if (users.size() == 0) {
+			throw new OmException(-10L);
+		}
+		User u = users.get(0);
+
+		if (!verifyPassword(u.getUser_id(), userpass)) {
+			throw new OmException(-11L);
+		}
+		// Check if activated
+		if (!AuthLevelUtil.hasLoginLevel(u.getRights())) {
+			throw new OmException(-41L);
+		}
+		log.debug("loginUser " + u.getOrganisation_users());
+		if (u.getOrganisation_users().isEmpty()) {
+			throw new OmException("No Organization assigned to user");
+		}
+		
+		u.setLastlogin(new Date());
+		return update(u, u.getUser_id());
+	}
+	
+	public Address getAddress(String street, String zip, String town, long states_id, String additionalname, String fax, String phone, String email) {
+		Address a =  new Address();
+		a.setStreet(street);
+		a.setZip(zip);
+		a.setTown(town);
+		a.setStates(stateDao.getStateById(states_id));
+		a.setAdditionalname(additionalname);
+		a.setComment("");
+		a.setFax(fax);
+		a.setPhone(phone);
+		a.setEmail(email);
+		return a;
+	}
+	
+	public User addUser(Set<Right> rights, String firstname, String login, String lastname, long language_id,
+			String userpass, Address adress, boolean sendSMS, Date age, String hash, TimeZone timezone,
+			Boolean forceTimeZoneCheck, String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String externalId, String externalType, List<Organisation_Users> orgList, String pictureuri) throws NoSuchAlgorithmException {
+		
+		User u = new User();
+		u.setFirstname(firstname);
+		u.setLogin(login);
+		u.setLastname(lastname);
+		u.setAge(age);
+		u.setAdresses(adress);
+		u.setSendSMS(sendSMS);
+		u.setRights(rights);
+		u.setLastlogin(new Date());
+		u.setLasttrans(new Long(0));
+		u.setSalutations_id(1L);
+		u.setStarttime(new Date());
+		u.setActivatehash(hash);
+		u.setTimeZoneId(timezone.getID());
+		u.setForceTimeZoneCheck(forceTimeZoneCheck);
+		u.setExternalUserId(externalId);
+		u.setExternalUserType(externalType);
+		if (!Strings.isEmpty(u.getExternalUserType())) {
+			u.setType(Type.external);
+		}
+
+		u.setUserOffers(userOffers);
+		u.setUserSearchs(userSearchs);
+		u.setShowContactData(showContactData);
+		u.setShowContactDataToContacts(showContactDataToContacts);
+
+		// this is needed cause the language is not a needed data at registering
+		u.setLanguage_id(language_id != 0 ? language_id : null);
+		if (!Strings.isEmpty(userpass)) {
+			u.updatePassword(cfgDao, userpass);
+		}
+		u.setRegdate(new Date());
+		u.setDeleted(false);
+		u.setPictureuri(pictureuri);
+		u.setOrganisation_users(orgList);
+		
+		return update(u, null);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java b/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java
new file mode 100644
index 0000000..779d1bb
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.basic;
+
+public class ErrorResult {
+	
+	private Long errorId;
+	private String errmessage;
+	private String errortype;
+
+	public ErrorResult(Long errorId, String errmessage, String errortype) {
+		super();
+		this.errorId = errorId;
+		this.errmessage = errmessage;
+		this.errortype = errortype;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+
+	public String getErrmessage() {
+		return errmessage;
+	}
+
+	public void setErrmessage(String errmessage) {
+		this.errmessage = errmessage;
+	}
+
+	public String getErrortype() {
+		return errortype;
+	}
+
+	public void setErrortype(String errortype) {
+		this.errortype = errortype;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java
new file mode 100644
index 0000000..afd5260
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.basic;
+
+import java.util.Collection;
+
+
+public class SearchResult<T> {
+	private String objectName;
+	private Long records;
+	private Collection<T> result;
+	private Long errorId;
+	
+	public String getObjectName() {
+		return objectName;
+	}
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+	public Long getRecords() {
+		return records;
+	}
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+	public Collection<T> getResult() {
+		return result;
+	}
+	public void setResult(Collection<T> result) {
+		this.result = result;
+	}
+	public Long getErrorId() {
+		return errorId;
+	}
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
new file mode 100644
index 0000000..c51da26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public class AppointmentDTO {
+	private Long id;
+	private String title;
+	private String location;
+	private Calendar start;
+	private Calendar end;
+	private String description;
+	private UserDTO owner;
+	private Date inserted;
+	private Date updated;
+	private boolean deleted;
+	private AppointmentReminderTypeDTO reminder;
+	private RoomDTO room;
+	private String icalId;
+	private List<MeetingMemberDTO> meetingMembers;
+	private Long languageId;
+	private boolean passwordProtected;
+	private boolean connectedEvent;
+	private boolean reminderEmailSend;
+
+	public AppointmentDTO() {}
+
+	public AppointmentDTO(Appointment a) {
+		id = a.getId();
+		title = a.getTitle();
+		location = a.getLocation();
+		TimeZone tz = TimeZone.getTimeZone(a.getOwner().getTimeZoneId());
+		start = Calendar.getInstance(tz);
+		start.setTime(a.getStart());
+		end = Calendar.getInstance(tz);
+		end.setTime(a.getEnd());
+		description = a.getDescription();
+		owner = new UserDTO(a.getOwner());
+		inserted = a.getInserted();
+		updated = a.getUpdated();
+		deleted = a.isDeleted();
+		reminder = new AppointmentReminderTypeDTO(a.getRemind());
+		room = new RoomDTO(a.getRoom());
+		icalId = a.getIcalId();
+		meetingMembers = new ArrayList<>();
+		for(MeetingMember mm: a.getMeetingMembers()) {
+			meetingMembers.add(new MeetingMemberDTO(mm));
+		}
+		languageId = a.getLanguageId();
+		passwordProtected = a.isPasswordProtected();
+		connectedEvent = a.isConnectedEvent();
+		reminderEmailSend = a.isReminderEmailSend();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public Calendar getStart() {
+		return start;
+	}
+
+	public void setStart(Calendar start) {
+		this.start = start;
+	}
+
+	public Calendar getEnd() {
+		return end;
+	}
+
+	public void setEnd(Calendar end) {
+		this.end = end;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public UserDTO getOwner() {
+		return owner;
+	}
+
+	public void setOwner(UserDTO owner) {
+		this.owner = owner;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public AppointmentReminderTypeDTO getReminder() {
+		return reminder;
+	}
+
+	public void setReminder(AppointmentReminderTypeDTO reminder) {
+		this.reminder = reminder;
+	}
+
+	public RoomDTO getRoom() {
+		return room;
+	}
+
+	public void setRoom(RoomDTO room) {
+		this.room = room;
+	}
+
+	public String getIcalId() {
+		return icalId;
+	}
+
+	public void setIcalId(String icalId) {
+		this.icalId = icalId;
+	}
+
+	public List<MeetingMemberDTO> getMeetingMembers() {
+		return meetingMembers;
+	}
+
+	public void setMeetingMembers(List<MeetingMemberDTO> meetingMembers) {
+		this.meetingMembers = meetingMembers;
+	}
+
+	public Long getLanguageId() {
+		return languageId;
+	}
+
+	public void setLanguageId(Long languageId) {
+		this.languageId = languageId;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean passwordProtected) {
+		this.passwordProtected = passwordProtected;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean connectedEvent) {
+		this.connectedEvent = connectedEvent;
+	}
+
+	public boolean isReminderEmailSend() {
+		return reminderEmailSend;
+	}
+
+	public void setReminderEmailSend(boolean reminderEmailSend) {
+		this.reminderEmailSend = reminderEmailSend;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java
new file mode 100644
index 0000000..8a64d56
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+
+public class AppointmentReminderTypeDTO {
+	private Long id;
+	private String name;
+
+	public AppointmentReminderTypeDTO() {}
+
+	public AppointmentReminderTypeDTO(AppointmentReminderTyps t) {
+		this.id = t.getTypId();
+		this.name = t.getName();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
new file mode 100644
index 0000000..b90def0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public class MeetingMemberDTO {
+	private Long id;
+	private UserDTO user;
+	
+	public MeetingMemberDTO() {}
+
+	public MeetingMemberDTO(MeetingMember mm) {
+		this.id = mm.getId();
+		this.user = new UserDTO(mm.getUser());
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public UserDTO getUser() {
+		return user;
+	}
+
+	public void setUser(UserDTO user) {
+		this.user = user;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
new file mode 100644
index 0000000..7b2e9dc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+
+/**
+ * @author sebastianwagner
+ *
+ */
+public class FileExplorerObject {
+
+	private FileExplorerItem[] userHome;
+	private FileExplorerItem[] roomHome;
+	private Long userHomeSize;
+	private Long roomHomeSize;
+	
+	public FileExplorerItem[] getUserHome() {
+		return userHome;
+	}
+	public void setUserHome(FileExplorerItem[] userHome) {
+		this.userHome = userHome;
+	}
+	public FileExplorerItem[] getRoomHome() {
+		return roomHome;
+	}
+	public void setRoomHome(FileExplorerItem[] roomHome) {
+		this.roomHome = roomHome;
+	}
+	public Long getUserHomeSize() {
+		return userHomeSize;
+	}
+	public void setUserHomeSize(Long userHomeSize) {
+		this.userHomeSize = userHomeSize;
+	}
+	public Long getRoomHomeSize() {
+		return roomHomeSize;
+	}
+	public void setRoomHomeSize(Long roomHomeSize) {
+		this.roomHomeSize = roomHomeSize;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java
new file mode 100644
index 0000000..381f9a1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+/**
+ * This Object will represent a File on the File-System
+ * @author sebastianwagner
+ *
+ */
+public class FilesObject {
+	
+	private String fileName;
+	private String fileNamePure;
+	private String fileNameExt;
+	private String lastModified;
+	private String fileBytes;
+	private String isimage;
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public String getFileNamePure() {
+		return fileNamePure;
+	}
+	public void setFileNamePure(String fileNamePure) {
+		this.fileNamePure = fileNamePure;
+	}
+	public String getFileNameExt() {
+		return fileNameExt;
+	}
+	public void setFileNameExt(String fileNameExt) {
+		this.fileNameExt = fileNameExt;
+	}
+	public String getLastModified() {
+		return lastModified;
+	}
+	public void setLastModified(String lastModified) {
+		this.lastModified = lastModified;
+	}
+	public String getFileBytes() {
+		return fileBytes;
+	}
+	public void setFileBytes(String fileBytes) {
+		this.fileBytes = fileBytes;
+	}
+	public String getIsimage() {
+		return isimage;
+	}
+	public void setIsimage(String isimage) {
+		this.isimage = isimage;
+	}
+	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java
new file mode 100644
index 0000000..bba75d5
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+/**
+ * Represents a Folder in the File System
+ * @author sebastianwagner
+ *
+ */
+public class FoldersObject {
+	
+	private String folderName;
+	private String lastModified;
+	
+	public String getFolderName() {
+		return folderName;
+	}
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+	public String getLastModified() {
+		return lastModified;
+	}
+	public void setLastModified(String lastModified) {
+		this.lastModified = lastModified;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java
new file mode 100644
index 0000000..9849e26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+/**
+ * Response of one Library-Files-Request
+ * @author sebastianwagner
+ *
+ */
+import java.util.LinkedList;
+
+public class LiberaryObject {
+	
+	//These Objects here should only be initialized if needed, 
+	//an empty LinkedList thorws a ServiceInvokationTarget-Exception (makes no sense to me but it
+	//is the way in Axis2 1.3
+	private LinkedList<FilesObject> filesList;
+	private LinkedList<FoldersObject> foldersList;
+	private PresentationObject presentationObject;
+	private String error;
+	public LinkedList<FilesObject> getFilesList() {
+		return filesList;
+	}
+	public void setFilesList(LinkedList<FilesObject> filesList) {
+		this.filesList = filesList;
+	}
+	public LinkedList<FoldersObject> getFoldersList() {
+		return foldersList;
+	}
+	public void setFoldersList(LinkedList<FoldersObject> foldersList) {
+		this.foldersList = foldersList;
+	}
+	public PresentationObject getPresentationObject() {
+		return presentationObject;
+	}
+	public void setPresentationObject(PresentationObject presentationObject) {
+		this.presentationObject = presentationObject;
+	}
+	public String getError() {
+		return error;
+	}
+	public void setError(String error) {
+		this.error = error;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java
new file mode 100644
index 0000000..8c69846
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresenationThumbs {
+
+	private String name = "";
+	private LibraryPresentationThumb[] thumbs = null;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public LibraryPresentationThumb[] getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LibraryPresentationThumb[] thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java
new file mode 100644
index 0000000..02ab93f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentation {
+
+	private LibraryPresentationFile originalDocument = null;
+	private LibraryPresentationFile pdfDocument = null;
+	private LibraryPresentationFile swfDocument = null;
+	private LibraryPresenationThumbs thumbs = null;
+	
+	public LibraryPresentationFile getOriginalDocument() {
+		return originalDocument;
+	}
+	public void setOriginalDocument(LibraryPresentationFile originalDocument) {
+		this.originalDocument = originalDocument;
+	}
+	public LibraryPresentationFile getPdfDocument() {
+		return pdfDocument;
+	}
+	public void setPdfDocument(LibraryPresentationFile pdfDocument) {
+		this.pdfDocument = pdfDocument;
+	}
+	public LibraryPresentationFile getSwfDocument() {
+		return swfDocument;
+	}
+	public void setSwfDocument(LibraryPresentationFile swfDocument) {
+		this.swfDocument = swfDocument;
+	}
+	public LibraryPresenationThumbs getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LibraryPresenationThumbs thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java
new file mode 100644
index 0000000..3b2ab2d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentationFile {
+
+	private String name = null;
+	private String filename = null;
+	private String lastmod = null;
+	private Long size = null;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getFilename() {
+		return filename;
+	}
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+	public String getLastmod() {
+		return lastmod;
+	}
+	public void setLastmod(String lastmod) {
+		this.lastmod = lastmod;
+	}
+	public Long getSize() {
+		return size;
+	}
+	public void setSize(Long size) {
+		this.size = size;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java
new file mode 100644
index 0000000..2aa4e90
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentationThumb {
+	
+	private String name = null;
+	private String filename = null;
+	private String lastmod = null;
+	private Long size = null;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getFilename() {
+		return filename;
+	}
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+	public String getLastmod() {
+		return lastmod;
+	}
+	public void setLastmod(String lastmod) {
+		this.lastmod = lastmod;
+	}
+	public Long getSize() {
+		return size;
+	}
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
new file mode 100644
index 0000000..b7bcfa1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+import java.util.LinkedList;
+/**
+ * Represents a Parsed Version of a Library-File-Converted Object
+ * @author sebastianwagner
+ *
+ */
+public class PresentationObject {
+	
+	private FilesObject originalDocument;
+	private FilesObject pdfDocument;
+	private FilesObject swfDocument;
+	LinkedList<FilesObject> thumbs;
+
+	public FilesObject getOriginalDocument() {
+		return originalDocument;
+	}
+	public void setOriginalDocument(FilesObject originalDocument) {
+		this.originalDocument = originalDocument;
+	}
+	public FilesObject getPdfDocument() {
+		return pdfDocument;
+	}
+	public void setPdfDocument(FilesObject pdfDocument) {
+		this.pdfDocument = pdfDocument;
+	}
+	public FilesObject getSwfDocument() {
+		return swfDocument;
+	}
+	public void setSwfDocument(FilesObject swfDocument) {
+		this.swfDocument = swfDocument;
+	}
+	public LinkedList<FilesObject> getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LinkedList<FilesObject> thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+	
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java
new file mode 100644
index 0000000..3d0396e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.record;
+
+import java.io.Serializable;
+
+public class RecordingContainerData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7211000652612571746L;
+	
+	private long userHomeSize;
+	private long publicFileSize;
+	
+	public long getUserHomeSize() {
+		return userHomeSize;
+	}
+	public void setUserHomeSize(long userHomeSize) {
+		this.userHomeSize = userHomeSize;
+	}
+	public long getPublicFileSize() {
+		return publicFileSize;
+	}
+	public void setPublicFileSize(long publicFileSize) {
+		this.publicFileSize = publicFileSize;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java
new file mode 100644
index 0000000..492c873
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.record;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class RecordingDTO {
+	private Long id;
+	private String name;
+	private String flvName;
+	private String aviName;
+	private Long roomId;
+	private String status;
+	private boolean interview;
+	private Date start;
+	private Date end;
+
+	public RecordingDTO() {}
+	
+	public RecordingDTO(FlvRecording r) {
+		this.id = r.getFlvRecordingId();
+		this.name = r.getFileName();
+		this.flvName = r.getFileHash();
+		this.aviName = r.getAlternateDownload();
+		this.roomId = r.getRoom_id();
+		this.status = r.getStatus().name();
+		this.interview = r.getIsInterview();
+		this.start = r.getRecordStart();
+		this.end = r.getRecordEnd();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFlvName() {
+		return flvName;
+	}
+
+	public void setFlvName(String flvName) {
+		this.flvName = flvName;
+	}
+
+	public String getAviName() {
+		return aviName;
+	}
+
+	public void setAviName(String aviName) {
+		this.aviName = aviName;
+	}
+
+	public Long getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public boolean isInterview() {
+		return interview;
+	}
+
+	public void setInterview(boolean interview) {
+		this.interview = interview;
+	}
+
+	public Date getStart() {
+		return start;
+	}
+
+	public void setStart(Date start) {
+		this.start = start;
+	}
+
+	public Date getEnd() {
+		return end;
+	}
+
+	public void setEnd(Date end) {
+		this.end = end;
+	}
+	
+	public static List<RecordingDTO> list(List<FlvRecording> l) {
+		List<RecordingDTO> rList = new ArrayList<RecordingDTO>();
+		if (l != null) {
+			for (FlvRecording r : l) {
+				rList.add(new RecordingDTO(r));
+			}
+		}
+		return rList;
+
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java b/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java
new file mode 100644
index 0000000..5d707dd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+public class BrowserStatus {
+	
+	private boolean browserInited = false;
+	private String currentURL = "";
+	
+	public boolean isBrowserInited() {
+		return browserInited;
+	}
+	public void setBrowserInited(boolean browserInited) {
+		this.browserInited = browserInited;
+	}
+	public String getCurrentURL() {
+		return currentURL;
+	}
+	public void setCurrentURL(String currentURL) {
+		this.currentURL = currentURL;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java b/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java
new file mode 100644
index 0000000..9035406
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.List;
+
+public class Cliparts {
+
+	private String folderName;
+	private String[] generalList;
+	private List<Cliparts> subCategories;
+
+	public String[] getGeneralList() {
+		return generalList;
+	}
+
+	public void setGeneralList(String[] generalList) {
+		this.generalList = generalList;
+	}
+
+	public List<Cliparts> getSubCategories() {
+		return subCategories;
+	}
+
+	public void setSubCategories(List<Cliparts> subCategories) {
+		this.subCategories = subCategories;
+	}
+
+	public String getFolderName() {
+		return folderName;
+	}
+
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
new file mode 100644
index 0000000..7444755
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -0,0 +1,244 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+
+public class RoomDTO {
+	private Long id;
+	private String name;
+	private String comment;
+	private RoomType roomtype;
+	private Long numberOfPartizipants = new Long(4);
+	private boolean appointment;
+	private String confno;
+	private boolean isPublic;
+	private boolean demo;
+	private Integer demoTime;
+	private boolean moderated;
+	private boolean allowUserQuestions;
+	private boolean audioOnly;
+	private boolean topBarHidden;
+	private boolean chatHidden;
+	private boolean activitiesHidden;
+	private boolean filesExplorerHidden;
+	private boolean actionsMenuHidden;
+	private boolean screenSharingHidden;
+	private boolean whiteboardHidden;
+
+	public RoomDTO() {
+	}
+	
+	public RoomDTO(Room r) {
+		id = r.getRooms_id();
+		name = r.getName();
+		comment = r.getComment();
+		roomtype = r.getRoomtype();
+		numberOfPartizipants = r.getNumberOfPartizipants();
+		appointment = r.getAppointment();
+		confno = r.getConfno();
+		isPublic = Boolean.TRUE.equals(r.getIspublic());
+		demo = Boolean.TRUE.equals(r.getIsDemoRoom());
+		demoTime = r.getDemoTime();
+		moderated = Boolean.TRUE.equals(r.getIsModeratedRoom());
+		allowUserQuestions = Boolean.TRUE.equals(r.getAllowUserQuestions());
+		audioOnly = Boolean.TRUE.equals(r.getIsAudioOnly());
+		topBarHidden = Boolean.TRUE.equals(r.getHideTopBar());
+		chatHidden = Boolean.TRUE.equals(r.getHideChat());
+		activitiesHidden = Boolean.TRUE.equals(r.getHideActivitiesAndActions());
+		filesExplorerHidden = Boolean.TRUE.equals(r.getHideFilesExplorer());
+		actionsMenuHidden = Boolean.TRUE.equals(r.getHideActionsMenu());
+		screenSharingHidden = Boolean.TRUE.equals(r.getHideScreenSharing());
+		whiteboardHidden = Boolean.TRUE.equals(r.getHideWhiteboard());
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public RoomType getRoomtype() {
+		return roomtype;
+	}
+
+	public void setRoomtype(RoomType roomtype) {
+		this.roomtype = roomtype;
+	}
+
+	public Long getNumberOfPartizipants() {
+		return numberOfPartizipants;
+	}
+
+	public void setNumberOfPartizipants(Long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
+	}
+
+	public boolean isAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(boolean appointment) {
+		this.appointment = appointment;
+	}
+
+	public String getConfno() {
+		return confno;
+	}
+
+	public void setConfno(String confno) {
+		this.confno = confno;
+	}
+
+	public static List<RoomDTO> list(List<Room> l) {
+		List<RoomDTO> rList = new ArrayList<RoomDTO>();
+		if (l != null) {
+			for (Room r : l) {
+				rList.add(new RoomDTO(r));
+			}
+		}
+		return rList;
+	}
+
+	public boolean isDemo() {
+		return demo;
+	}
+
+	public void setDemo(boolean demo) {
+		this.demo = demo;
+	}
+
+	public Integer getDemoTime() {
+		return demoTime;
+	}
+
+	public void setDemoTime(Integer demoTime) {
+		this.demoTime = demoTime;
+	}
+
+	public boolean isModerated() {
+		return moderated;
+	}
+
+	public void setModerated(boolean moderated) {
+		this.moderated = moderated;
+	}
+
+	public boolean isAllowUserQuestions() {
+		return allowUserQuestions;
+	}
+
+	public void setAllowUserQuestions(boolean allowUserQuestions) {
+		this.allowUserQuestions = allowUserQuestions;
+	}
+
+	public boolean isAudioOnly() {
+		return audioOnly;
+	}
+
+	public void setAudioOnly(boolean audioOnly) {
+		this.audioOnly = audioOnly;
+	}
+
+	public boolean isTopBarHidden() {
+		return topBarHidden;
+	}
+
+	public void setTopBarHidden(boolean topBarHidden) {
+		this.topBarHidden = topBarHidden;
+	}
+
+	public boolean isChatHidden() {
+		return chatHidden;
+	}
+
+	public void setChatHidden(boolean chatHidden) {
+		this.chatHidden = chatHidden;
+	}
+
+	public boolean isActivitiesHidden() {
+		return activitiesHidden;
+	}
+
+	public void setActivitiesHidden(boolean activitiesHidden) {
+		this.activitiesHidden = activitiesHidden;
+	}
+
+	public boolean isFilesExplorerHidden() {
+		return filesExplorerHidden;
+	}
+
+	public void setFilesExplorerHidden(boolean filesExplorerHidden) {
+		this.filesExplorerHidden = filesExplorerHidden;
+	}
+
+	public boolean isActionsMenuHidden() {
+		return actionsMenuHidden;
+	}
+
+	public void setActionsMenuHidden(boolean actionsMenuHidden) {
+		this.actionsMenuHidden = actionsMenuHidden;
+	}
+
+	public boolean isScreenSharingHidden() {
+		return screenSharingHidden;
+	}
+
+	public void setScreenSharingHidden(boolean screenSharingHidden) {
+		this.screenSharingHidden = screenSharingHidden;
+	}
+
+	public boolean isWhiteboardHidden() {
+		return whiteboardHidden;
+	}
+
+	public void setWhiteboardHidden(boolean whiteboardHidden) {
+		this.whiteboardHidden = whiteboardHidden;
+	}
+
+	public boolean isPublic() {
+		return isPublic;
+	}
+
+	public void setPublic(boolean isPublic) {
+		this.isPublic = isPublic;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java
new file mode 100644
index 0000000..57ae324
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Room;
+
+public class RoomSearchResult {
+	private String objectName;
+	private Long records;
+	private List<RoomDTO> result;
+	private Long errorId;
+
+	public RoomSearchResult(SearchResult<Room> copy) {
+		this.objectName = copy.getObjectName();
+		this.records = copy.getRecords();
+		this.result = new ArrayList<RoomDTO>(copy.getResult().size());
+		for (Room r : copy.getResult()) {
+			result.add(new RoomDTO(r));
+		}
+		this.errorId = copy.getErrorId();
+	}
+
+	public String getObjectName() {
+		return objectName;
+	}
+
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+
+	public Long getRecords() {
+		return records;
+	}
+
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+
+	public List<RoomDTO> getResult() {
+		return result;
+	}
+
+	public void setResult(List<RoomDTO> result) {
+		this.result = result;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
new file mode 100644
index 0000000..441e812
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.room.Client;
+
+public class RoomStatus {
+	
+	List<Client> clientList;
+	BrowserStatus browserStatus;
+	Boolean roomFull = false;
+	
+	public List<Client> getClientList() {
+		return clientList;
+	}
+	public void setClientList(List<Client> clientList) {
+		this.clientList = clientList;
+	}
+	public BrowserStatus getBrowserStatus() {
+		return browserStatus;
+	}
+	public void setBrowserStatus(BrowserStatus browserStatus) {
+		this.browserStatus = browserStatus;
+	}
+	public Boolean getRoomFull() {
+		return roomFull;
+	}
+	public void setRoomFull(Boolean roomFull) {
+		this.roomFull = roomFull;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java
new file mode 100644
index 0000000..0466dde
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class WhiteboardObject {
+
+	private Long whiteBoardId;
+	private Integer x = 0;
+	private Integer y = 0;
+	private Integer zoom = 100;
+	private Boolean fullFit = true;
+	@SuppressWarnings("rawtypes")
+	private Map<String, List> roomItems = new HashMap<String, List>();
+	private Date created = new Date();
+
+	public Long getWhiteBoardId() {
+		return whiteBoardId;
+	}
+
+	public void setWhiteBoardId(Long whiteBoardId) {
+		this.whiteBoardId = whiteBoardId;
+	}
+
+	public Integer getX() {
+		return x;
+	}
+
+	public void setX(Integer x) {
+		this.x = x;
+	}
+
+	public Integer getY() {
+		return y;
+	}
+
+	public void setY(Integer y) {
+		this.y = y;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public Map<String, List> getRoomItems() {
+		return roomItems;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void setRoomItems(Map<String, List> roomItems) {
+		this.roomItems = roomItems;
+	}
+
+	public Date getCreated() {
+		return created;
+	}
+
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	public Integer getZoom() {
+		return zoom;
+	}
+
+	public void setZoom(Integer zoom) {
+		this.zoom = zoom;
+	}
+
+	public Boolean getFullFit() {
+		return fullFit;
+	}
+
+	public void setFullFit(Boolean fullFit) {
+		this.fullFit = fullFit;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java
new file mode 100644
index 0000000..1cbcac0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WhiteboardObjectList {
+
+	private Long room_id;
+	private Map<Long,WhiteboardObject> whiteboardObjects = new HashMap<Long,WhiteboardObject>();
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long roomId) {
+		room_id = roomId;
+	}
+	public Map<Long, WhiteboardObject> getWhiteboardObjects() {
+		return whiteboardObjects;
+	}
+	public void setWhiteboardObjects(Map<Long, WhiteboardObject> whiteboardObjects) {
+		this.whiteboardObjects = whiteboardObjects;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java
new file mode 100644
index 0000000..5b20c3c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.Date;
+
+public class WhiteboardSyncLockObject {
+
+	private String publicSID;
+	private boolean isInitialLoaded = false;
+	private boolean isCurrentLoadingItem = false;
+
+	private Date addtime;
+	private Date starttime;
+
+	public String getPublicSID() {
+		return publicSID;
+	}
+
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+
+	public boolean isInitialLoaded() {
+		return isInitialLoaded;
+	}
+
+	public void setInitialLoaded(boolean isInitialLoaded) {
+		this.isInitialLoaded = isInitialLoaded;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public boolean isCurrentLoadingItem() {
+		return isCurrentLoadingItem;
+	}
+
+	public void setCurrentLoadingItem(boolean isCurrentLoadingItem) {
+		this.isCurrentLoadingItem = isCurrentLoadingItem;
+	}
+
+	public Date getAddtime() {
+		return addtime;
+	}
+
+	public void setAddtime(Date addtime) {
+		this.addtime = addtime;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java b/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
new file mode 100644
index 0000000..1a375be
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.server;
+
+import org.apache.openmeetings.db.entity.room.Client;
+
+
+public class ClientSessionInfo {
+	
+	private Client rcl;
+	public Long serverId;
+	
+	public ClientSessionInfo(Client rcl, Long serverId) {
+		super();
+		this.rcl = rcl;
+		this.serverId = serverId;
+	}
+	
+	public Client getRcl() {
+		return rcl;
+	}
+	public void setRcl(Client rcl) {
+		this.rcl = rcl;
+	}
+	public Long getServerId() {
+		return serverId;
+	}
+	public void setServerId(Long serverId) {
+		this.serverId = serverId;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java b/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
new file mode 100644
index 0000000..9352c9c9
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.server;
+
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * 
+ * Bean send to the client about the server he is going to use for the conference 
+ * session
+ * 
+ * @author sebawagner
+ *
+ */
+public class ServerDTO {
+
+	private Long id;
+	private String address;
+	private int port;
+	private String protocol;
+	private String webapp;
+
+	public ServerDTO(Server server) {
+		if (server == null) {
+			return;
+		}
+		id = server.getId();
+		address = server.getAddress();
+		port = server.getPort();
+		protocol = server.getProtocol();
+		webapp = server.getWebapp();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public void setPort(int port) {
+		this.port = port;
+	}
+
+	public String getProtocol() {
+		return protocol;
+	}
+
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+
+	public String getWebapp() {
+		return webapp;
+	}
+
+	public void setWebapp(String webapp) {
+		this.webapp = webapp;
+	}
+	
+	@Override
+	public String toString() {
+		return "id "+id+" address "+address+" port "+port+" protocol "+protocol;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java b/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java
new file mode 100644
index 0000000..fa50095
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.user;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+
+public class UserDTO {
+	private Long id;
+	private String firstname;
+	private String lastname;
+	private List<String> rights;
+	private String login;
+	private Long language_id;
+	private Address adresses;
+	private String timeZoneId;
+	private Type type = Type.user;
+
+	public UserDTO() {}
+
+	public UserDTO(User u) {
+		id = u.getUser_id();
+		firstname = u.getFirstname();
+		lastname = u.getLastname();
+		rights = new ArrayList<>();
+		for (Right r : u.getRights()) {
+			rights.add(r.name());
+		}
+		login = u.getLogin();
+		language_id = u.getLanguage_id();
+		adresses = u.getAdresses();
+		timeZoneId = u.getTimeZoneId();
+		type = u.getType();
+	}
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public List<String> getRights() {
+		return rights;
+	}
+
+	public void setRights(List<String> rights) {
+		this.rights = rights;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String login) {
+		this.login = login;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public Address getAdresses() {
+		return adresses;
+	}
+
+	public void setAdresses(Address adresses) {
+		this.adresses = adresses;
+	}
+
+	public String getTimeZoneId() {
+		return timeZoneId;
+	}
+
+	public void setTimeZoneId(String timeZoneId) {
+		this.timeZoneId = timeZoneId;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java
new file mode 100644
index 0000000..39c9887
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.user;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.user.User;
+
+public class UserSearchResult {
+	private String objectName;
+	private Long records;
+	private List<UserDTO> result;
+	private Long errorId;
+	
+	public UserSearchResult() {}
+
+	public UserSearchResult(SearchResult<User> copy) {
+		this.objectName = copy.getObjectName();
+		this.records = copy.getRecords();
+		this.result = new ArrayList<UserDTO>(copy.getResult().size());
+		for (User u : copy.getResult()) {
+			result.add(new UserDTO(u));
+		}
+		this.errorId = copy.getErrorId();
+	}
+	
+	public String getObjectName() {
+		return objectName;
+	}
+
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+
+	public Long getRecords() {
+		return records;
+	}
+
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+
+	public List<UserDTO> getResult() {
+		return result;
+	}
+
+	public void setResult(List<UserDTO> result) {
+		this.result = result;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java b/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java
new file mode 100644
index 0000000..3375185
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity;
+
+public interface IDataProviderEntity {
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
new file mode 100644
index 0000000..c7ad75a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c WHERE c.id = :id")
+	, @NamedQuery(name = "getChatMessagesByUser", query = "SELECT DISTINCT c FROM ChatMessage c WHERE c.fromUser.user_id = :userId OR c.toUser.user_id = :userId ORDER BY c.sent ASC")
+	, @NamedQuery(name = "getGlobalChatMessages", query = "SELECT DISTINCT c FROM ChatMessage c WHERE c.toUser IS NULL ORDER BY c.sent ASC")
+})@Table(name = "chat")
+@Root(name = "ChatMessage")
+public class ChatMessage implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 4248081997318897605L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "id", data = true)
+	private long id;
+
+	@ManyToOne
+	@JoinColumn(name = "from_user_id")
+	@Element(name = "fromUserId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private User fromUser;
+	
+	@ManyToOne
+	@JoinColumn(name = "to_room_id")
+	@Element(name = "toRoomId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private Room toRoom;
+	
+	@ManyToOne
+	@JoinColumn(name = "to_user_id")
+	@Element(name = "toUserId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private User toUser;
+
+	@Column(name = "message")
+	@Lob
+	@Element(name = "message", data = true, required = false)
+	private String message;
+	
+	@Column(name = "sent")
+	@Element(name = "sent", data = true, required = false)
+	private Date sent;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public User getFromUser() {
+		return fromUser;
+	}
+
+	public void setFromUser(User fromUser) {
+		this.fromUser = fromUser;
+	}
+
+	public Room getToRoom() {
+		return toRoom;
+	}
+
+	public void setToRoom(Room toRoom) {
+		this.toRoom = toRoom;
+	}
+
+	public User getToUser() {
+		return toUser;
+	}
+
+	public void setToUser(User toUser) {
+		this.toUser = toUser;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public Date getSent() {
+		return sent;
+	}
+
+	public void setSent(Date sent) {
+		this.sent = sent;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java
new file mode 100644
index 0000000..42e56bc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "forceGetConfigurationByKey", query = "SELECT c FROM Configuration c " 
+				+ "WHERE c.conf_key LIKE :conf_key"),
+		@NamedQuery(name = "getConfigurationsByKeys", query = "SELECT c FROM Configuration c "
+				+ "WHERE c.conf_key IN :conf_keys and c.deleted = false"),
+		@NamedQuery(name = "getNondeletedConfiguration", query = "SELECT c FROM Configuration c  "
+				+ "LEFT JOIN FETCH c.user WHERE c.deleted = false"),
+		@NamedQuery(name = "getConfigurationById", query = "SELECT c FROM Configuration c "
+				+ "LEFT JOIN FETCH c.user "
+				+ "WHERE c.configuration_id = :configuration_id and c.deleted = false"),
+		@NamedQuery(name = "countConfigurations", query = "SELECT COUNT(c) FROM Configuration c WHERE c.deleted = false")
+})
+@Table(name = "configuration")
+@Root(name = "config")
+public class Configuration implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = -6129473946508963339L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "id", data = true)
+	private Long configuration_id;
+
+	@Column(name = "conf_key", unique = true)
+	@Element(name = "key", data = true, required = false)
+	private String conf_key;
+
+	@Column(name = "conf_value")
+	@Element(name = "value", data = true, required = false)
+	private String conf_value;
+
+	@Column(name = "starttime")
+	@Element(name = "created", data = true, required = false)
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	@Element(name = "updated", data = true, required = false)
+	private Date updatetime;
+
+	@Lob
+	@Column(name = "comment_field", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "user_id")
+	@ForeignKey(enabled = true)
+	@Element(name = "user_id", data = true, required = false)
+	private User user;
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getConf_key() {
+		return conf_key;
+	}
+
+	public void setConf_key(String conf_key) {
+		this.conf_key = conf_key;
+	}
+
+	public String getConf_value() {
+		return conf_value;
+	}
+
+	public void setConf_value(String conf_value) {
+		this.conf_value = conf_value;
+	}
+
+	public Long getConfiguration_id() {
+		return configuration_id;
+	}
+
+	public void setConfiguration_id(Long configuration_id) {
+		this.configuration_id = configuration_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java
new file mode 100644
index 0000000..5e0a349
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getErrorTypes", query = "select c from ErrorType as c "
+					+ "WHERE c.deleted <> :deleted"),
+	@NamedQuery(name = "getErrorType", query = "select c from ErrorType as c "
+					+ "WHERE c.deleted <> :deleted AND c.errortype_id = :errortype_id")
+})
+@Table(name = "errortypes")
+public class ErrorType implements Serializable {
+	private static final long serialVersionUID = 1519570470483604258L;
+
+	@Id
+	@Column(name = "id")
+	private Long errortype_id;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	public Long getErrortype_id() {
+		return errortype_id;
+	}
+
+	public void setErrortype_id(Long errortype_id) {
+		this.errortype_id = errortype_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return this.fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java
new file mode 100644
index 0000000..3bb8cea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getErrorValueById", query = "SELECT e FROM ErrorValue e WHERE e.errorvalues_id = :id AND e.deleted = false")
+})
+@Table(name = "errorvalue")
+public class ErrorValue implements Serializable {
+	private static final long serialVersionUID = -1892810463706968018L;
+
+	@Id
+	@Column(name = "id")
+	private Long errorvalues_id;
+	
+	@Column(name = "errortype_id")
+	private Long errortype_id;
+	
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	public Long getErrorvalues_id() {
+		return errorvalues_id;
+	}
+
+	public void setErrorvalues_id(Long errorvalues_id) {
+		this.errorvalues_id = errorvalues_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getErrortype_id() {
+		//return errorType.getErrortype_id();
+		return errortype_id;
+	}
+
+	public void setErrortype_id(Long errortype_id) {
+		this.errortype_id = errortype_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java b/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
new file mode 100644
index 0000000..ba569b0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.util.Calendar;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getMailMessageById", query = "SELECT m FROM MailMessage m WHERE m.id = :id")
+	, @NamedQuery(name = "getMailMessages"
+		, query = "SELECT m FROM MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")
+	, @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM MailMessage m WHERE m.status = :status")
+})
+@Table(name = "email_queue")
+public class MailMessage implements IDataProviderEntity {
+	public enum Status {
+		NONE
+		, SENDING
+		, ERROR
+		, DONE
+	}
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	
+	@Lob
+	@Column(name = "recipients")
+	private String recipients;
+	
+	@Column(name = "replyTo")
+	private String replyTo;
+	
+	@Column(name = "subject")
+	private String subject;
+	
+	@Lob
+	@Column(name = "body")
+	private String body;
+
+	@Lob
+	@Column(name = "ics")
+	private byte[] ics;
+
+	@Column(name = "status", nullable = false)
+	@Enumerated(EnumType.STRING)
+	private Status status = Status.NONE;
+
+	@Column(name = "inserted")
+	private Calendar inserted;
+	
+	@Column(name = "updated")
+	private Calendar updated;
+	
+	@Column(name = "error_count", nullable = false)
+	private int errorCount = 0;
+	
+	@Lob
+	@Column(name = "last_error")
+	private String lastError;
+
+	public MailMessage() {
+		this(null, null, null, null, null);
+	}
+	
+	public MailMessage(String recipients, String replyTo, String subject, String body) {
+		this(recipients, replyTo, subject, body, null);
+	}
+	
+	public MailMessage(String recipients, String replyTo, String subject, String body, byte[] ics) {
+		this.recipients = recipients;
+		this.replyTo = replyTo;
+		this.subject = subject;
+		this.body = body;
+		this.ics = ics;
+	}
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getRecipients() {
+		return recipients;
+	}
+
+	public void setRecipients(String recipients) {
+		this.recipients = recipients;
+	}
+
+	public String getReplyTo() {
+		return replyTo;
+	}
+
+	public void setReplyTo(String replyTo) {
+		this.replyTo = replyTo;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	public Status getStatus() {
+		return status;
+	}
+
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+
+	public Calendar getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Calendar inserted) {
+		this.inserted = inserted;
+	}
+
+	public Calendar getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Calendar updated) {
+		this.updated = updated;
+	}
+
+	public byte[] getIcs() {
+		return ics;
+	}
+
+	public void setIcs(byte[] ics) {
+		this.ics = ics;
+	}
+
+	public int getErrorCount() {
+		return errorCount;
+	}
+
+	public void setErrorCount(int errorCount) {
+		this.errorCount = errorCount;
+	}
+
+	public String getLastError() {
+		return lastError;
+	}
+
+	public void setLastError(String lastError) {
+		this.lastError = lastError;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java
new file mode 100644
index 0000000..ff743ed
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "getNavigation", query = "SELECT DISTINCT ng from Naviglobal ng JOIN ng.mainnavi nm "
+				+ "WHERE nm.deleted = false AND ng.level_id <= :level_id AND nm.level_id <= :level_id "
+				+ "AND ng.deleted = false ORDER BY ng.naviorder ASC"),
+		@NamedQuery(name = "getNavigationById", query = "SELECT ng from Naviglobal ng WHERE ng.global_id = :global_id") })
+@Table(name = "naviglobal")
+public class Naviglobal implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long global_id;
+
+	@Column(name = "name")
+	private String name;
+
+	@Column(name = "icon")
+	private String icon;
+
+	@Column(name = "isleaf")
+	private Boolean isleaf;
+
+	@Column(name = "isopen")
+	private Boolean isopen;
+
+	@Column(name = "action")
+	private String action;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "comment_field")
+	private String comment;
+
+	@Column(name = "naviorder")
+	private Integer naviorder;
+
+	@Column(name = "level_id")
+	private Long level_id;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "tooltip_fieldvalues_id")
+	private Long tooltip_fieldvalues_id;
+
+	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "global_id")
+	@ForeignKey(enabled = true)
+	@OrderBy("naviorder")
+	private List<Navimain> mainnavi;
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Long getGlobal_id() {
+		return global_id;
+	}
+
+	public void setGlobal_id(Long global_id) {
+		this.global_id = global_id;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Boolean getIsleaf() {
+		return isleaf;
+	}
+
+	public void setIsleaf(Boolean isleaf) {
+		this.isleaf = isleaf;
+	}
+
+	public Boolean getIsopen() {
+		return isopen;
+	}
+
+	public void setIsopen(Boolean isopen) {
+		this.isopen = isopen;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getNaviorder() {
+		return naviorder;
+	}
+
+	public void setNaviorder(Integer naviorder) {
+		this.naviorder = naviorder;
+	}
+
+	public Long getLevel_id() {
+		return level_id;
+	}
+
+	public void setLevel_id(Long level_id) {
+		this.level_id = level_id;
+	}
+
+	public List<Navimain> getMainnavi() {
+		return mainnavi;
+	}
+
+	public void setMainnavi(List<Navimain> mainnavi) {
+		this.mainnavi = mainnavi;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getTooltip_fieldvalues_id() {
+		return tooltip_fieldvalues_id;
+	}
+
+	public void setTooltip_fieldvalues_id(Long tooltip_fieldvalues_id) {
+		this.tooltip_fieldvalues_id = tooltip_fieldvalues_id;
+	}
+
+	@Override
+	public String toString() {
+		return "Naviglobal [global_id=" + global_id + ", name=" + name + ", action=" + action + ", naviorder=" + naviorder + ", deleted="
+				+ deleted + ", fieldvalues_id=" + fieldvalues_id + ", tooltip_fieldvalues_id=" + tooltip_fieldvalues_id + "]";
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java
new file mode 100644
index 0000000..6b290ea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "navimain")
+public class Navimain implements Serializable {
+	private static final long serialVersionUID = 1691787896183701877L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long main_id;
+
+	@Column(name = "global_id")
+	private Long global_id;
+
+	@Column(name = "name")
+	private String name;
+
+	@Column(name = "icon")
+	private String icon;
+
+	@Column(name = "isleaf")
+	private Boolean isleaf;
+
+	@Column(name = "isopen")
+	private Boolean isopen;
+
+	@Column(name = "action")
+	private String action;
+
+	@Column(name = "params")
+	private String params;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "comment_field")
+	private String comment;
+
+	@Column(name = "naviorder")
+	private Integer naviorder;
+
+	@Column(name = "level_id")
+	private Long level_id;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "tooltip_fieldvalues_id")
+	private Long tooltip_fieldvalues_id;
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public Long getLevel_id() {
+		return level_id;
+	}
+
+	public void setLevel_id(Long level_id) {
+		this.level_id = level_id;
+	}
+
+	public Long getGlobal_id() {
+		return global_id;
+	}
+
+	public void setGlobal_id(Long global_id) {
+		this.global_id = global_id;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Long getMain_id() {
+		return main_id;
+	}
+
+	public void setMain_id(Long main_id) {
+		this.main_id = main_id;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Boolean getIsleaf() {
+		return isleaf;
+	}
+
+	public void setIsleaf(Boolean isleaf) {
+		this.isleaf = isleaf;
+	}
+
+	public Boolean getIsopen() {
+		return isopen;
+	}
+
+	public void setIsopen(Boolean isopen) {
+		this.isopen = isopen;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getNaviorder() {
+		return naviorder;
+	}
+
+	public void setNaviorder(Integer naviorder) {
+		this.naviorder = naviorder;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getTooltip_fieldvalues_id() {
+		return tooltip_fieldvalues_id;
+	}
+
+	public void setTooltip_fieldvalues_id(Long tooltip_fieldvalues_id) {
+		this.tooltip_fieldvalues_id = tooltip_fieldvalues_id;
+	}
+
+	public String getParams() {
+		return params;
+	}
+
+	public void setParams(String params) {
+		this.params = params;
+	}
+
+	@Override
+	public String toString() {
+		return "Navimain [main_id=" + main_id + ", global_id=" + global_id + ", name=" + name + ", action=" + action + ", params=" + params
+				+ ", naviorder=" + naviorder + ", fieldvalues_id=" + fieldvalues_id + ", deleted=" + deleted + ", tooltip_fieldvalues_id="
+				+ tooltip_fieldvalues_id + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
new file mode 100644
index 0000000..ba63aa8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
@@ -0,0 +1,428 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "appointments")
+@NamedQueries({
+    @NamedQuery(name="getAppointmentById", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.id = :id")
+    , @NamedQuery(name="getAppointmentByIdAny", query="SELECT a FROM Appointment a WHERE a.id = :id")
+    , @NamedQuery(name="getAppointments", query="SELECT a FROM Appointment a WHERE a.deleted = false ORDER BY a.id")
+    , @NamedQuery(name="appointmentsInRange",
+    	query="SELECT a FROM Appointment a "
+			+ "WHERE a.deleted = false "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+			+ "	AND a.owner.user_id = :userId"
+    	)
+    , @NamedQuery(name="joinedAppointmentsInRange",
+		query="SELECT a FROM MeetingMember mm INNER JOIN mm.appointment a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND a.id NOT IN (SELECT a.id FROM Appointment a WHERE a.owner.user_id = :userId)"
+			+ "	AND mm.connectedEvent = false " //TODO review: isConnectedEvent is set for the MeetingMember if event is created from "Private Messages", it is weird
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="appointmentsInRangeRemind",
+		query="SELECT a FROM Appointment a "
+			//only ReminderType simple mail is concerned!
+			+ "WHERE a.deleted = false AND a.reminderEmailSend = false"
+			+ " AND (a.remind.typId = 2 OR a.remind.typId = 3) "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="getAppointmentByRoomId", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.room.rooms_id = :room_id")
+	//TODO this query returns duplicates if the user books an appointment with
+	//his own user as second meeting-member, swagner 19.02.2012
+    , @NamedQuery(name="appointmentsInRangeByUser",
+		query="SELECT a FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
+    , @NamedQuery(name="appointedRoomsInRangeByUser",
+		query="SELECT a.room FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
+    , @NamedQuery(name="getNextAppointment", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.start > :start AND a.owner.user_id = :userId")
+    , @NamedQuery(name="getAppointmentsByTitle", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.title LIKE :title AND a.owner.user_id = :userId")
+})
+@Root(name="appointment")
+public class Appointment implements Serializable {
+	private static final long serialVersionUID = 2016808778885761525L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "appointmentId", data = true)
+	private Long id;
+	
+	@Column(name = "appointmentname")
+	@Element(name="appointmentName", data=true, required=false)
+	private String title;
+	
+	@Column(name = "location")
+	@Element(name="appointmentLocation", data=true, required=false)
+	private String location;
+	
+	@Column(name = "appointment_starttime")
+	@Element(name="appointmentStarttime", data=true)
+	private Date start;
+	
+	@Column(name = "appointment_endtime")
+	@Element(name="appointmentEndtime", data=true)
+	private Date end;
+	
+	@Lob 
+	@Column(name = "description", length=2048)
+	@Element(name="appointmentDescription", data=true, required=false)
+	private String description;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "category_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="categoryId", data=true, required=false)
+	private AppointmentCategory category;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "user_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="users_id", data=true, required=false)
+	private User owner;
+
+	@Column(name = "starttime")
+	@Element(name="inserted", data=true, required=false)
+	private Date inserted;
+	
+	@Column(name = "updatetime")
+	@Element(name="updated", data=true, required=false)
+	private Date updated;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "remind_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="typId", data=true, required=false)
+	private AppointmentReminderTyps remind;
+
+	@Column(name = "isdaily")
+	@Element(data=true, required = false)
+	private Boolean isDaily;
+	
+	@Column(name = "isweekly")
+	@Element(data=true, required = false)
+	private Boolean isWeekly;
+	
+	@Column(name = "ismonthly")
+	@Element(data=true, required = false)
+	private Boolean isMonthly;
+	
+	@Column(name = "isyearly")
+	@Element(data=true, required = false)
+	private Boolean isYearly;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="room_id", data=true, required=false)
+	private Room room;
+
+	@Column(name = "icalId")
+	@Element(data=true, required=false)
+	private String icalId;
+
+	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "appointment_id")
+	private List<MeetingMember> meetingMembers;
+	
+	@Column(name = "language_id")
+	@Element(name="language_id", data=true, required=false)
+	private Long languageId;
+	
+	@Column(name = "is_password_protected")
+	@Element(name="isPasswordProtected", data=true, required=false)
+	private boolean passwordProtected;
+	
+	@Column(name = "password")
+	@Element(data=true, required=false)
+	private String password;
+
+	@Column(name = "is_connected_event")
+	private boolean connectedEvent;
+
+	@Column(name = "is_reminder_email_send")
+	private boolean reminderEmailSend;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public User getOwner() {
+		return owner;
+	}
+
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public Date getStart() {
+		return start;
+	}
+
+	public Calendar startCalendar(TimeZone timeZone) {
+		Calendar cal = Calendar.getInstance(timeZone);
+		cal.setTime(start);
+		return cal;
+	}
+
+	public void setStart(Date start) {
+		this.start = start;
+	}
+
+	public Date getEnd() {
+		return end;
+	}
+
+	public Calendar endCalendar(TimeZone timeZone) {
+		Calendar cal = Calendar.getInstance(timeZone);
+		cal.setTime(end);
+		return cal;
+	}
+
+	public void setEnd(Date end) {
+		this.end = end;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public AppointmentCategory getCategory() {
+		return category;
+	}
+
+	public void setCategory(AppointmentCategory category) {
+		this.category = category;
+	}
+
+	public AppointmentReminderTyps getRemind() {
+		return remind;
+	}
+
+	public void setRemind(AppointmentReminderTyps remind) {
+		this.remind = remind;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIsWeekly() {
+		return isWeekly;
+	}
+
+	public void setIsWeekly(Boolean isWeekly) {
+		this.isWeekly = isWeekly;
+	}
+
+	public Boolean getIsMonthly() {
+		return isMonthly;
+	}
+
+	public void setIsMonthly(Boolean isMonthly) {
+		this.isMonthly = isMonthly;
+	}
+
+	public Boolean getIsYearly() {
+		return isYearly;
+	}
+
+	public void setIsYearly(Boolean isYearly) {
+		this.isYearly = isYearly;
+	}
+
+	public Boolean getIsDaily() {
+		return isDaily;
+	}
+
+	public void setIsDaily(Boolean isDaily) {
+		this.isDaily = isDaily;
+	}
+
+	public List<MeetingMember> getMeetingMembers() {
+		return meetingMembers;
+	}
+
+	public void setMeetingMembers(List<MeetingMember> meetingMembers) {
+		this.meetingMembers = meetingMembers;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public String getIcalId() {
+		return icalId;
+	}
+
+	public void setIcalId(String icalId) {
+		this.icalId = icalId;
+	}
+
+	public Long getLanguageId() {
+		return languageId;
+	}
+
+	public void setLanguageId(Long languageId) {
+		this.languageId = languageId;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean isPasswordProtected) {
+		this.passwordProtected = isPasswordProtected;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean isConnectedEvent) {
+		this.connectedEvent = isConnectedEvent;
+	}
+
+	public boolean isReminderEmailSend() {
+		return reminderEmailSend;
+	}
+
+	public void setReminderEmailSend(boolean isReminderEmailSend) {
+		this.reminderEmailSend = isReminderEmailSend;
+	}
+
+	@Override
+	public String toString() {
+		return "Appointment [id=" + id + ", title=" + title + ", start=" + start + ", end=" + end + ", owner=" + owner
+				+ ", deleted=" + deleted + ", icalId=" + icalId + "]";
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java
new file mode 100644
index 0000000..bc125ae
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+
+@Entity
+@Table(name = "appointmentcategory")
+public class AppointmentCategory implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long categoryId;
+	
+	@Column(name="name")
+	private String name;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id", nullable=true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Lob
+	@Column(name="comment_field", length=2048)
+	private String comment;
+	
+	public Long getCategoryId() {
+		return categoryId;
+	}
+	public void setCategoryId(Long categoryId) {
+		this.categoryId = categoryId;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public String getComment() {
+		return comment;
+	}
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java
new file mode 100644
index 0000000..72364a4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+
+
+@Entity
+@Table(name = "appointmentremindertyps")
+public class AppointmentReminderTyps implements Serializable {
+	private static final long serialVersionUID = -6543593995706839669L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long typId;
+	
+	@Column(name="name")
+	private String name;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id", nullable=true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public Long getTypId() {
+		return typId;
+	}
+	public void setTypId(Long typId) {
+		this.typId = typId;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java
new file mode 100644
index 0000000..1987956
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "meeting_members")
+@NamedQueries({
+    @NamedQuery(name="getMeetingMemberById"
+    		, query="SELECT mm FROM MeetingMember mm WHERE mm.deleted = false AND mm.id = :id")
+    , @NamedQuery(name="getMeetingMembers", query="SELECT mm FROM MeetingMember mm ORDER BY mm.id")
+    , @NamedQuery(name="getMeetingMemberIdsByAppointment"
+    		, query="SELECT mm.id FROM MeetingMember mm WHERE mm.deleted = false AND mm.appointment.id = :id")
+})
+@Root(name = "meetingmember")
+public class MeetingMember implements Serializable {
+	private static final long serialVersionUID = -3864571325368787524L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "meetingMemberId", data = true)
+	private Long id;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "user_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name = "userid", data = true, required = false)
+	private User user;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "appointment_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private Appointment appointment;
+
+	@Column(name = "appointment_status")
+	@Element(data = true, required = false)
+	private String appointmentStatus; // status of the appointment denial, acceptance, wait.
+
+	@Column(name = "starttime")
+	private Date inserted;
+
+	@Column(name = "updatetime")
+	private Date updated;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "invitation", nullable = true, insertable = false)
+	@ForeignKey(enabled = true)
+	private Invitation invitation;
+
+	@Column(name = "is_connected_event")
+	private boolean connectedEvent;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public String getAppointmentStatus() {
+		return appointmentStatus;
+	}
+
+	public void setAppointmentStatus(String appointmentStatus) {
+		this.appointmentStatus = appointmentStatus;
+	}
+
+	public Appointment getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Appointment appointment) {
+		this.appointment = appointment;
+	}
+
+	public Invitation getInvitation() {
+		return invitation;
+	}
+
+	public void setInvitation(Invitation invitation) {
+		this.invitation = invitation;
+	}
+
+	public Date getStarttime() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean connectedEvent) {
+		this.connectedEvent = connectedEvent;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java b/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
new file mode 100644
index 0000000..1748299
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
@@ -0,0 +1,301 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.file;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getAllFiles", query="SELECT c FROM FileExplorerItem c ORDER BY c.fileExplorerItemId")
+    , @NamedQuery(name="getById", query="SELECT c FROM FileExplorerItem c WHERE c.fileExplorerItemId = :fileExplorerItemId")
+    , @NamedQuery(name="getByHash", query="SELECT c FROM FileExplorerItem c WHERE c.fileHash = :fileHash")
+})
+@Table(name = "fileexploreritem")
+@Root
+public class FileExplorerItem implements Serializable {
+	private static final long serialVersionUID = 242843782142620566L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private long fileExplorerItemId;
+	
+	@Column(name="filename")
+	@Element(data=true, required = false)
+	private String fileName;
+	
+	@Column(name="filehash")
+	@Element(data=true, required = false)
+	private String fileHash;
+	
+	@Column(name="parent_fileexploreritem_id")
+	@Element(data=true)
+	private Long parentFileExplorerItemId;
+	
+	@Column(name="room_id")
+	@Element(data=true, required=false)
+	private Long room_id;
+	
+	@Column(name="owner_id")
+	@Element(data=true, required=false)
+	private Long ownerId;//OwnerID => only set if its directly root in Owner Directory, other Folders and Files
+	//maybe are also in a Home directory but just because their parent is
+	
+	@Column(name="is_folder")
+	@Element(data=true)
+	private Boolean isFolder;
+	
+	@Column(name="is_image")
+	@Element(data=true)
+	private Boolean isImage;
+	
+	@Column(name="is_presentation")
+	@Element(data=true)
+	private Boolean isPresentation;
+	
+	@Column(name="is_video")
+	@Element(data=true, required=false)
+	private Boolean isVideo;
+	
+	@Column(name="inserted_by")
+	@Element(data=true)
+	private Long insertedBy;
+	
+	@Column(name="inserted")
+	@Element(data=true)
+	private Date inserted;
+	
+	@Column(name="updated")
+	@Element(data=true)
+	private Date updated;
+	
+	@Column(name="deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@Column(name="filesize")
+	@Element(data=true, required=false)
+	private Long fileSize;
+	
+	@Column(name="flv_width")
+	@Element(data=true, required=false)
+	private Integer flvWidth;
+	
+	@Column(name="flv_height")
+	@Element(data=true, required=false)
+	private Integer flvHeight;
+	
+	@Column(name="preview_image")
+	@Element(data=true, required = false)
+	private String previewImage;
+	
+	@Column(name="wml_file_path")
+	@Element(data=true, required = false)
+	private String wmlFilePath;
+	
+	@Column(name="is_stored_wml_file")
+	@Element(data=true, required = false)
+	private Boolean isStoredWmlFile;
+	
+	@Column(name="is_chart")
+	@Element(data=true, required = false)
+    private Boolean isChart;
+    
+	@Column(name="external_file_id")
+    private Long externalFileId;
+	
+	@Column(name="external_type")
+    private String externalType;
+
+		
+	public long getFileExplorerItemId() {
+		return fileExplorerItemId;
+	}
+	public void setFileExplorerItemId(long fileExplorerItemId) {
+		this.fileExplorerItemId = fileExplorerItemId;
+	}
+	
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	
+	public String getFileHash() {
+		return fileHash;
+	}
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+	
+	public Long getParentFileExplorerItemId() {
+		return parentFileExplorerItemId;
+	}
+	public void setParentFileExplorerItemId(Long parentFileExplorerItemId) {
+		this.parentFileExplorerItemId = parentFileExplorerItemId;
+	}
+	
+	public Long getOwnerId() {
+		return ownerId;
+	}
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public Boolean getIsFolder() {
+		return isFolder;
+	}
+	public void setIsFolder(Boolean isFolder) {
+		this.isFolder = isFolder;
+	}
+	
+	public Boolean getIsImage() {
+		return isImage;
+	}
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+	
+	public Boolean getIsVideo() {
+		return isVideo;
+	}
+	public void setIsVideo(Boolean isVideo) {
+		this.isVideo = isVideo;
+	}
+	
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+	
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public Long getFileSize() {
+		return fileSize;
+	}
+	public void setFileSize(Long fileSize) {
+		this.fileSize = fileSize;
+	}
+	
+	public Integer getFlvWidth() {
+		return flvWidth;
+	}
+	public void setFlvWidth(Integer flvWidth) {
+		this.flvWidth = flvWidth;
+	}
+
+	public Integer getFlvHeight() {
+		return flvHeight;
+	}
+	public void setFlvHeight(Integer flvHeight) {
+		this.flvHeight = flvHeight;
+	}
+
+	public String getPreviewImage() {
+		return previewImage;
+	}	
+	public void setPreviewImage(String previewImage) {
+		this.previewImage = previewImage;
+	}
+	
+	public String getWmlFilePath() {
+		return wmlFilePath;
+	}
+	public void setWmlFilePath(String wmlFilePath) {
+		this.wmlFilePath = wmlFilePath;
+	}
+	
+	public Boolean getIsStoredWmlFile() {
+		return isStoredWmlFile;
+	}
+	public void setIsStoredWmlFile(Boolean isStoredWmlFile) {
+		this.isStoredWmlFile = isStoredWmlFile;
+	}
+
+	public Boolean getIsChart() {
+        return isChart;
+    }
+    public void setIsChart(Boolean isChart) {
+        this.isChart = isChart;
+    }
+    
+	public Long getExternalFileId() {
+		return externalFileId;
+	}
+	public void setExternalFileId(Long externalFileId) {
+		this.externalFileId = externalFileId;
+	}
+	
+	public String getExternalType() {
+		return externalType;
+	}
+	public void setExternalType(String externalType) {
+		this.externalType = externalType;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java b/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java
new file mode 100644
index 0000000..34acd97
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.label;
+
+import java.util.AbstractMap.SimpleEntry;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+public class StringLabel extends SimpleEntry<String, String> implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	public StringLabel(String key, String value) {
+		super(key, value);
+	}
+
+	public StringLabel(StringLabel l) {
+		super(l.getKey(), l.getValue());
+	}
+	
+	@Override
+	public int hashCode() {
+		return (getKey() == null ? 0 : getKey().hashCode());
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+        if (!(o instanceof Map.Entry))
+            return false;
+        Map.Entry<?,?> e = (Map.Entry<?,?>)o;
+        return getKey() == null ? e.getKey() == null : getKey().equals(e.getKey());
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
new file mode 100644
index 0000000..5d83d77
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.log;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+
+
+@Entity
+@Table(name = "conferencelog")
+public class ConferenceLog implements Serializable {
+	private static final long serialVersionUID = 147341496943518159L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long conferenceLogId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="conferencelogtype_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private ConferenceLogType conferenceLogType;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="insertedby")
+	private long insertedby;
+	
+	//NULL means its a Guest/Invited User
+	@Column(name="user_id")
+	private Long userId;
+	
+	@Column(name="external_user_id")
+	private String externalUserId;
+	
+	@Column(name="external_user_type")
+	private String externalUserType;
+	
+	@Column(name="streamid")
+	private String streamid;
+	
+	@Column(name="room_id")
+	private Long room_id;
+	
+	@Column(name="userip")
+	private String userip;
+	
+	@Column(name="scopename")
+	private String scopeName;
+	
+	@Column(name="email")
+	private String email;
+	
+	@Column(name="firstname")
+	private String firstname;
+	
+	@Column(name="lastname")
+	private String lastname;
+	
+	public long getConferenceLogId() {
+		return conferenceLogId;
+	}
+	public void setConferenceLogId(long conferenceLogId) {
+		this.conferenceLogId = conferenceLogId;
+	}
+	
+	public ConferenceLogType getConferenceLogType() {
+		return conferenceLogType;
+	}
+	public void setConferenceLogType(ConferenceLogType conferenceLogType) {
+		this.conferenceLogType = conferenceLogType;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(long insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+	public Long getUserId() {
+		return userId;
+	}
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+	
+	public String getStreamid() {
+		return streamid;
+	}
+	public void setStreamid(String streamid) {
+		this.streamid = streamid;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public String getUserip() {
+		return userip;
+	}
+	public void setUserip(String userip) {
+		this.userip = userip;
+	}
+	
+	public String getScopeName() {
+		return scopeName;
+	}
+	public void setScopeName(String scopeName) {
+		this.scopeName = scopeName;
+	}
+	
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+	
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+	
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java
new file mode 100644
index 0000000..1d88b05
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.log;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getConferenceLogTypeByEventName", query = "select a from ConferenceLogType a " +
+					"WHERE a.eventType = :eventType")
+})
+@Table(name = "conferencelogtype")
+public class ConferenceLogType implements Serializable {
+	private static final long serialVersionUID = 4388958579350356294L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long conferenceLogTypeId;
+	
+	@Column(name="eventtype")
+	private String eventType;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="insertedby")
+	private long insertedby;
+	
+	public long getConferenceLogTypeId() {
+		return conferenceLogTypeId;
+	}
+	public void setConferenceLogTypeId(long conferenceLogTypeId) {
+		this.conferenceLogTypeId = conferenceLogTypeId;
+	}
+
+	public String getEventType() {
+		return eventType;
+	}
+	public void setEventType(String eventType) {
+		this.eventType = eventType;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(long insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java
new file mode 100644
index 0000000..579737c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java
@@ -0,0 +1,498 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+/**
+ * An item in the file explorer in the recording section. Can be either:<br/>
+ * <ul>
+ * <li>a conference recording</li>
+ * <li>a interview recording</li>
+ * <li>a folder</li>
+ * </ul>
+ * 
+ * Recorded files are situated in: webapps/openmeetings/streams/hibernate.<br/>
+ * The raw recorded files are situated in:
+ * webapps/openmeetings/streams/$ROOM_ID.<br/>
+ * 
+ * @author sebawagner
+ * 
+ */
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getRecordingById", query = "SELECT f FROM FlvRecording f WHERE f.flvRecordingId = :id") 
+	, @NamedQuery(name = "getRecordingByHash", query = "SELECT f FROM FlvRecording f WHERE f.fileHash = :fileHash") 
+	, @NamedQuery(name = "getRecordingsByExternalUser", query = "SELECT c FROM FlvRecording c, User u "
+			+ "WHERE c.insertedBy = u.user_id AND u.externalUserId = :externalUserId  AND u.externalUserType = :externalUserType "
+			+ "AND c.deleted = false") 
+	, @NamedQuery(name = "getRecordingsPublic", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.organization_id IS NULL AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByOrganization", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.organization_id = :organization_id AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByOwner", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId = :ownerId "
+			+ "AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByParent", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.parentFileExplorerItemId = :parentId "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "resetRecordingProcessingStatus", query = "UPDATE FlvRecording f SET f.status = :error WHERE f.status IN (:recording, :converting)")
+	, @NamedQuery(name = "getRecordingsByExternalType", query = "SELECT rec FROM FlvRecording rec, Room r, User u "
+			+ "WHERE rec.deleted = false AND rec.room_id = r.rooms_id AND rec.insertedBy = u.user_id "
+			+ "AND (r.externalRoomType = :externalType OR u.externalUserType = :externalType)")
+})
+@Table(name = "flvrecording")
+@Root(name = "flvrecording")
+public class FlvRecording implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	public enum Status {
+		NONE
+		, RECORDING
+		, CONVERTING
+		, PROCESSED
+		, ERROR
+	}
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private long flvRecordingId;
+
+	@Column(name = "filename")
+	@Element(data = true, required = false)
+	private String fileName;
+
+	@Column(name = "alternate_download")
+	@Element(data = true, required = false)
+	private String alternateDownload;
+
+	@Column(name = "filehash")
+	@Element(data = true, required = false)
+	private String fileHash;
+
+	@Column(name = "comment_field")
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "parent_fileexploreritem_id")
+	@Element(data = true, required = false)
+	private Long parentFileExplorerItemId;
+
+	@Column(name = "room_id")
+	@Element(data = true, required = false)
+	private Long room_id;
+
+	@Column(name = "owner_id")
+	@Element(data = true, required = false)
+	private Long ownerId;// OwnerID => only set if its directly root in Owner
+							// Directory, other Folders and Files
+							// maybe are also in a Home directory but just
+							// because their parent is
+
+	@Column(name = "is_folder")
+	@Element(data = true, required = false)
+	private boolean folder;
+
+	@Column(name = "is_image")
+	@Element(data = true, required = false)
+	private Boolean isImage;
+
+	@Column(name = "is_presentation")
+	@Element(data = true, required = false)
+	private Boolean isPresentation;
+
+	@Column(name = "is_recording")
+	@Element(data = true, required = false)
+	private Boolean isRecording;
+
+	@Column(name = "record_start")
+	@Element(data = true, required = false)
+	private Date recordStart;
+
+	@Column(name = "record_end")
+	@Element(data = true, required = false)
+	private Date recordEnd;
+
+	@Column(name = "inserted_by")
+	@Element(data = true, required = false)
+	private Long insertedBy;
+
+	@Column(name = "inserted")
+	@Element(data = true, required = false)
+	private Date inserted;
+
+	@Column(name = "updated")
+	private Date updated;
+
+	@Column(name = "deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+
+	@Column(name = "width")
+	@Element(data = true, required = false)
+	private Integer width;
+
+	@Column(name = "height")
+	@Element(data = true, required = false)
+	private Integer height;
+
+	@Column(name = "flv_width")
+	@Element(data = true, required = false)
+	private Integer flvWidth;
+
+	@Column(name = "flv_height")
+	@Element(data = true, required = false)
+	private Integer flvHeight;
+
+	@Column(name = "preview_image")
+	@Element(data = true, required = false)
+	private String previewImage;
+
+	@Column(name = "duration")
+	@Element(data = true, required = false)
+	private String duration;
+
+	@Column(name = "recorder_stream_id")
+	@Element(data = true, required = false)
+	private String recorderStreamId;
+
+	@Column(name = "organization_id")
+	@Element(data = true, required = false)
+	private Long organization_id;
+
+	@Column(name = "is_interview")
+	@Element(data = true, required = false)
+	private Boolean isInterview;
+
+	@Column(name = "progress_post_processing")
+	@Element(data = true, required = false)
+	private Integer progressPostProcessing;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "flvrecording_id")
+	@ElementList(name = "flvrecordingmetadatas", required = false)
+	private List<FlvRecordingMetaData> flvRecordingMetaData;
+
+	@Column(name = "status")
+	@Enumerated(value = EnumType.STRING)
+	@Element(data = true, required = false)
+	private Status status = Status.NONE;
+	
+	// Not Mapped
+	@Transient
+	private User creator;
+
+	@Transient
+	private Room room;
+
+	@Transient
+	private List<FlvRecordingLog> flvRecordingLog;
+
+	public long getFlvRecordingId() {
+		return flvRecordingId;
+	}
+
+	public void setFlvRecordingId(long flvRecordingId) {
+		this.flvRecordingId = flvRecordingId;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getFileHash() {
+		return fileHash;
+	}
+
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+
+	public Long getParentFileExplorerItemId() {
+		return parentFileExplorerItemId;
+	}
+
+	public void setParentFileExplorerItemId(Long parentFileExplorerItemId) {
+		this.parentFileExplorerItemId = parentFileExplorerItemId;
+	}
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public boolean isFolder() {
+		return folder;
+	}
+
+	public void setFolder(boolean folder) {
+		this.folder = folder;
+	}
+
+	public Boolean getIsImage() {
+		return isImage;
+	}
+
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+
+	public Boolean getIsRecording() {
+		return isRecording;
+	}
+
+	public void setIsRecording(Boolean isRecording) {
+		this.isRecording = isRecording;
+	}
+
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public String getDuration() {
+		return duration;
+	}
+
+	public void setDuration(String duration) {
+		this.duration = duration;
+	}
+
+	public Date getRecordStart() {
+		return recordStart;
+	}
+
+	public void setRecordStart(Date recordStart) {
+		this.recordStart = recordStart;
+	}
+
+	public Date getRecordEnd() {
+		return recordEnd;
+	}
+
+	public void setRecordEnd(Date recordEnd) {
+		this.recordEnd = recordEnd;
+	}
+
+	public String getRecorderStreamId() {
+		return recorderStreamId;
+	}
+
+	public void setRecorderStreamId(String recorderStreamId) {
+		this.recorderStreamId = recorderStreamId;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+
+	public List<FlvRecordingMetaData> getFlvRecordingMetaData() {
+		return flvRecordingMetaData;
+	}
+
+	public void setFlvRecordingMetaData(
+			List<FlvRecordingMetaData> flvRecordingMetaData) {
+		this.flvRecordingMetaData = flvRecordingMetaData;
+	}
+
+	public User getCreator() {
+		return creator;
+	}
+
+	public void setCreator(User creator) {
+		this.creator = creator;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Integer getWidth() {
+		return width;
+	}
+
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+
+	public Integer getHeight() {
+		return height;
+	}
+
+	public void setHeight(Integer height) {
+		this.height = height;
+	}
+
+	public Integer getFlvWidth() {
+		return flvWidth;
+	}
+
+	public void setFlvWidth(Integer flvWidth) {
+		this.flvWidth = flvWidth;
+	}
+
+	public Integer getFlvHeight() {
+		return flvHeight;
+	}
+
+	public void setFlvHeight(Integer flvHeight) {
+		this.flvHeight = flvHeight;
+	}
+
+	public String getPreviewImage() {
+		return previewImage;
+	}
+
+	public void setPreviewImage(String previewImage) {
+		this.previewImage = previewImage;
+	}
+
+	public String getAlternateDownload() {
+		return alternateDownload;
+	}
+
+	public void setAlternateDownload(String alternateDownload) {
+		this.alternateDownload = alternateDownload;
+	}
+
+	public List<FlvRecordingLog> getFlvRecordingLog() {
+		return flvRecordingLog;
+	}
+
+	public void setFlvRecordingLog(List<FlvRecordingLog> flvRecordingLog) {
+		this.flvRecordingLog = flvRecordingLog;
+	}
+
+	public Boolean getIsInterview() {
+		return isInterview;
+	}
+
+	public void setIsInterview(Boolean isInterview) {
+		this.isInterview = isInterview;
+	}
+
+	public Integer getProgressPostProcessing() {
+		return progressPostProcessing;
+	}
+
+	public void setProgressPostProcessing(Integer progressPostProcessing) {
+		this.progressPostProcessing = progressPostProcessing;
+	}
+
+	public Status getStatus() {
+		return status;
+	}
+
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java
new file mode 100644
index 0000000..afafcfe
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getRecordingLogsByRecording", query = "SELECT fl FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId ORDER BY fl.inserted")
+	, @NamedQuery(name = "countErrorRecordingLogsByRecording", query = "SELECT COUNT(fl) FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId AND fl.exitValue <> '0'")
+	, @NamedQuery(name = "deleteErrorRecordingLogsByRecording", query = "DELETE FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId")
+})
+@Table(name = "flvrecording_log")
+public class FlvRecordingLog implements Serializable {
+	private static final long serialVersionUID = 1L;
+	public static final int MAX_LOG_SIZE = 64 * 1024; //64K until column definition will be fixed
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long flvRecordingLogId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="flvrecording_id", nullable=true)
+	private FlvRecording flvRecording;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="msg_type")
+	private String msgType;
+	
+	@Lob
+	@Column(name="ful_message", length = MAX_LOG_SIZE)
+	private String fullMessage;
+	
+	@Column(name="exit_value")
+	private String exitValue;
+	
+	public long getFlvRecordingLogId() {
+		return flvRecordingLogId;
+	}
+	public void setFlvRecordingLogId(long flvRecordingLogId) {
+		this.flvRecordingLogId = flvRecordingLogId;
+	}
+	
+	public FlvRecording getFlvRecording() {
+		return flvRecording;
+	}
+	public void setFlvRecording(FlvRecording flvRecording) {
+		this.flvRecording = flvRecording;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public String getMsgType() {
+		return msgType;
+	}
+	public void setMsgType(String msgType) {
+		this.msgType = msgType;
+	}
+	
+	public String getFullMessage() {
+		return fullMessage;
+	}
+	public void setFullMessage(String fullMessage) {
+		this.fullMessage = fullMessage == null || fullMessage.length() < MAX_LOG_SIZE ? fullMessage : fullMessage.substring(0,  MAX_LOG_SIZE);
+	}
+	
+	public String getExitValue() {
+		return exitValue;
+	}
+	public void setExitValue(String exitValue) {
+		this.exitValue = exitValue;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
new file mode 100644
index 0000000..bedb5e4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
@@ -0,0 +1,292 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+/**
+ * contains meta data about each stream, for example if it is a screen sharing or
+ * audio/video stream. There is also a {@link Status} value
+ * {@link #streamStatus}, as long as this variable is not set
+ * to {@link Status.STOPPED}, the recording process will not proceed and start to convert all
+ * input sources to a single recording file.
+ * 
+ * @author sebawagner
+ */
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getMetaById", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecordingMetaDataId = :id")
+	, @NamedQuery(name = "getMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId AND c.deleted = false")
+	, @NamedQuery(name = "getAudioMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId "
+			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.audioOnly = true OR (c.audioOnly = false AND c.videoOnly = false))")
+	, @NamedQuery(name = "getScreenMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId"
+			+ " AND c.screenData = true")
+})
+@Table(name = "flvrecording_metadata")
+@Root(name = "flvrecordingmetadata")
+public class FlvRecordingMetaData implements Serializable {
+	private static final long serialVersionUID = 1L;
+	public enum Status {
+		NONE
+		, STARTED
+		, STOPPING
+		, STOPPED
+	}
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "flvRecordingMetaDataId", data = true, required = false)
+	private long flvRecordingMetaDataId;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "flvrecording_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private FlvRecording flvRecording;
+
+	@Column(name = "record_start")
+	@Element(data = true)
+	private Date recordStart;
+
+	@Column(name = "record_end")
+	@Element(data = true, required = false)
+	private Date recordEnd;
+
+	@Column(name = "stream_name")
+	@Element(data = true)
+	private String streamName;
+
+	@Column(name = "free_text_user_name")
+	@Element(data = true)
+	private String freeTextUserName;
+
+	@Column(name = "is_audio_only")
+	@Element(name = "isAudioOnly", data = true)
+	private boolean audioOnly;
+
+	@Column(name = "is_video_only")
+	@Element(name = "isVideoOnly", data = true)
+	private boolean videoOnly;
+
+	@Column(name = "is_screen_data")
+	@Element(name = "isScreenData", data = true)
+	private boolean screenData;
+
+	@Column(name = "inserted_by")
+	@Element(data = true, required = false)
+	private Long insertedBy;
+
+	@Column(name = "inserted")
+	@Element(data = true)
+	private Date inserted;
+
+	@Column(name = "updated")
+	@Element(data = true, required = false)
+	private Date updated;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "wav_audio_data")
+	@Element(data = true, required = false)
+	private String wavAudioData;
+
+	@Column(name = "full_wav_audio_data")
+	@Element(data = true, required = false)
+	private String fullWavAudioData;
+
+	@Column(name = "audio_is_valid")
+	@Element(name="audioIsValid", data = true, required = false)
+	private boolean audioValid;
+
+	@Column(name = "interiew_pod_id")
+	@Element(data = true, required = false)
+	private Integer interiewPodId;
+
+	/**
+	 * this is only STOPPED when the asynchronous stream writer's have completed to write packets to the file.
+	 * @see BaseStreamWriter#closeStream()
+	 */
+	@Column(name = "stream_status")
+	@Enumerated(EnumType.STRING)
+	private Status streamStatus = Status.NONE;
+
+	public long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+
+	public void setFlvRecordingMetaDataId(long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+
+	public FlvRecording getFlvRecording() {
+		return flvRecording;
+	}
+
+	public void setFlvRecording(FlvRecording flvRecording) {
+		this.flvRecording = flvRecording;
+	}
+
+	public Date getRecordStart() {
+		return recordStart;
+	}
+
+	public void setRecordStart(Date recordStart) {
+		this.recordStart = recordStart;
+	}
+
+	public Date getRecordEnd() {
+		return recordEnd;
+	}
+
+	public void setRecordEnd(Date recordEnd) {
+		this.recordEnd = recordEnd;
+	}
+
+	public String getFreeTextUserName() {
+		return freeTextUserName;
+	}
+
+	public void setFreeTextUserName(String freeTextUserName) {
+		this.freeTextUserName = freeTextUserName;
+	}
+
+	public boolean isAudioOnly() {
+		return audioOnly;
+	}
+
+	public void setAudioOnly(boolean audioOnly) {
+		this.audioOnly = audioOnly;
+	}
+
+	public boolean isVideoOnly() {
+		return videoOnly;
+	}
+
+	public void setVideoOnly(boolean videoOnly) {
+		this.videoOnly = videoOnly;
+	}
+
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isScreenData() {
+		return screenData;
+	}
+
+	public void setScreenData(boolean screenData) {
+		this.screenData = screenData;
+	}
+
+	public String getStreamName() {
+		return streamName;
+	}
+
+	public void setStreamName(String streamName) {
+		this.streamName = streamName;
+	}
+
+	public String getWavAudioData() {
+		return wavAudioData;
+	}
+
+	public void setWavAudioData(String wavAudioData) {
+		this.wavAudioData = wavAudioData;
+	}
+
+	public String getFullWavAudioData() {
+		return fullWavAudioData;
+	}
+
+	public void setFullWavAudioData(String fullWavAudioData) {
+		this.fullWavAudioData = fullWavAudioData;
+	}
+
+	public boolean isAudioValid() {
+		return audioValid;
+	}
+
+	public void setAudioValid(boolean audioValid) {
+		this.audioValid = audioValid;
+	}
+
+	public Integer getInteriewPodId() {
+		return interiewPodId;
+	}
+
+	public void setInteriewPodId(Integer interiewPodId) {
+		this.interiewPodId = interiewPodId;
+	}
+
+	public Status getStreamStatus() {
+		return streamStatus;
+	}
+
+	public void setStreamStatus(Status status) {
+		this.streamStatus = status;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
new file mode 100644
index 0000000..ce84b7c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+/**
+ * 
+ *
+ */
+@Entity
+@Table(name = "flvrecording_meta_delta")
+public class FlvRecordingMetaDelta implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long flvRecordingMetaDeltaId;
+	
+	@Column(name="flvrecording_metadata_id")
+	private Long flvRecordingMetaDataId;
+	
+	@Column(name="time_stamp")
+	private Integer timeStamp;
+	
+	@Column(name="delta_time")
+	private Long deltaTime;
+	
+	@Column(name="last_time_stamp")
+	private Long lastTimeStamp;
+	
+	@Column(name="start_time")
+	private Date startTime;
+	
+	@Column(name="current_event_time")
+	private Date currentTime;
+	
+	@Column(name="delta_time_stamp")
+	private Long deltaTimeStamp;
+	
+	@Column(name="missing_time")
+	private Long missingTime;
+	
+	@Column(name="duration")
+	private Integer duration;
+	
+	@Column(name="start_time_stamp")
+	private Integer startTimeStamp;
+	
+	@Column(name="packet_time_stamp")
+	private Integer packetTimeStamp;
+	
+	@Column(name="wave_out_put_name")
+	private String waveOutPutName;
+	
+	@Column(name="data_length_packet")
+	private Integer dataLengthPacket;
+	
+	@Column(name="received_audio_data_length")
+	private Long receivedAudioDataLength;
+	
+	@Column(name="is_end_padding")
+	private boolean endPadding;
+	
+	@Column(name="is_start_padding")
+	private boolean startPadding;
+	
+	@Column(name="debug_status")
+	private String debugStatus;
+	
+	public long getFlvRecordingMetaDeltaId() {
+		return flvRecordingMetaDeltaId;
+	}
+	public void setFlvRecordingMetaDeltaId(long flvRecordingMetaDeltaId) {
+		this.flvRecordingMetaDeltaId = flvRecordingMetaDeltaId;
+	}
+	
+	public Long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+	public void setFlvRecordingMetaDataId(Long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+	
+	public Integer getTimeStamp() {
+		return timeStamp;
+	}
+	public void setTimeStamp(Integer timeStamp) {
+		this.timeStamp = timeStamp;
+	}
+	
+	public Long getDeltaTime() {
+		return deltaTime;
+	}
+	public void setDeltaTime(Long deltaTime) {
+		this.deltaTime = deltaTime;
+	}
+	
+	public Long getLastTimeStamp() {
+		return lastTimeStamp;
+	}
+	public void setLastTimeStamp(Long lastTimeStamp) {
+		this.lastTimeStamp = lastTimeStamp;
+	}
+	
+	public Long getDeltaTimeStamp() {
+		return deltaTimeStamp;
+	}
+	public void setDeltaTimeStamp(Long deltaTimeStamp) {
+		this.deltaTimeStamp = deltaTimeStamp;
+	}
+	
+	public Integer getPacketTimeStamp() {
+		return packetTimeStamp;
+	}
+	public void setPacketTimeStamp(Integer packetTimeStamp) {
+		this.packetTimeStamp = packetTimeStamp;
+	}
+	
+	public Integer getStartTimeStamp() {
+		return startTimeStamp;
+	}
+	public void setStartTimeStamp(Integer startTimeStamp) {
+		this.startTimeStamp = startTimeStamp;
+	}
+	
+	public Long getMissingTime() {
+		return missingTime;
+	}
+	public void setMissingTime(Long missingTime) {
+		this.missingTime = missingTime;
+	}
+	
+	public Integer getDuration() {
+		return duration;
+	}
+	public void setDuration(Integer duration) {
+		this.duration = duration;
+	}
+	
+	public Date getStartTime() {
+		return startTime;
+	}
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+	
+	public Date getCurrentTime() {
+		return currentTime;
+	}
+	public void setCurrentTime(Date currentTime) {
+		this.currentTime = currentTime;
+	}
+	
+	public boolean isEndPadding() {
+		return endPadding;
+	}
+	public void setEndPadding(boolean endPadding) {
+		this.endPadding = endPadding;
+	}
+	
+	public boolean isStartPadding() {
+		return startPadding;
+	}
+	public void setStartPadding(boolean startPadding) {
+		this.startPadding = startPadding;
+	}
+	
+	public String getDebugStatus() {
+		return debugStatus;
+	}
+	public void setDebugStatus(String debugStatus) {
+		this.debugStatus = debugStatus;
+	}
+	
+	public String getWaveOutPutName() {
+		return waveOutPutName;
+	}
+	public void setWaveOutPutName(String waveOutPutName) {
+		this.waveOutPutName = waveOutPutName;
+	}
+	
+	public Integer getDataLengthPacket() {
+		return dataLengthPacket;
+	}
+	public void setDataLengthPacket(Integer dataLengthPacket) {
+		this.dataLengthPacket = dataLengthPacket;
+	}
+	
+	public Long getReceivedAudioDataLength() {
+		return receivedAudioDataLength;
+	}
+	public void setReceivedAudioDataLength(Long receivedAudioDataLength) {
+		this.receivedAudioDataLength = receivedAudioDataLength;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Client.java b/src/db/java/org/apache/openmeetings/db/entity/room/Client.java
new file mode 100644
index 0000000..5f5da5e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Client.java
@@ -0,0 +1,897 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.CalendarPatterns;
+
+/**
+ * Can be configured to be stored in memory or in database
+ * 
+ * @author sebawagner
+ */
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "deleteAll", query = "DELETE FROM Client"),
+	@NamedQuery(name = "deletedById", query = "DELETE FROM Client c WHERE c.id = :id"),
+	@NamedQuery(name = "deleteClientsByServer", query = "DELETE FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "deletedByServerAndStreamId", query = "DELETE FROM Client c WHERE c.server = :server AND c.streamid LIKE :streamid"),
+	@NamedQuery(name = "countClients", query = "SELECT count(c.id) FROM Client c"),
+	@NamedQuery(name = "countClientsByServer", query = "SELECT count(c.id) FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "countClientsByServerAndStreamId", query = "SELECT count(c.id) FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"),
+	@NamedQuery(name = "getClientByServerAndStreamId", query = "SELECT c FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"),
+	@NamedQuery(name = "getClientsByPublicSIDAndServer", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID AND c.server = :server"),
+	@NamedQuery(name = "getClientsByPublicSID", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID"),
+	@NamedQuery(name = "getClientsByServer", query = "SELECT c FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "getClients", query = "SELECT c FROM Client c"),
+	@NamedQuery(name = "getClientsWithServer", query = "SELECT c FROM Client c LEFT JOIN FETCH c.server"),
+	@NamedQuery(name = "getClientsByUserId", query = "SELECT c FROM Client c WHERE c.server = :server AND c.user_id = :user_id"),
+	@NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client c WHERE c.room_id = :room_id"),
+	@NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.room_id FROM Client c WHERE c.server = :server GROUP BY c.room_id")
+})
+@Table(name = "client")
+public class Client implements IDataProviderEntity, Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+	
+	/**
+	 * @see Client#getUsername()
+	 */
+	@Column(name = "username")
+	private String username = "";
+	
+	/**
+	 * @see Client#getStreamid()
+	 */
+	@Column(name = "streamid")
+	private String streamid = "";
+	
+	/**
+	 * @see Client#getScope()
+	 */
+	@Column(name = "scope")
+	private String scope = "";
+	
+	/**
+	 * @see Client#getVWidth()
+	 */
+	@Column(name = "vwidth")
+	private int vWidth = 0;
+	
+	/**
+	 * @see Client#getVHeight()
+	 */
+	@Column(name = "vheight")
+	private int vHeight = 0;
+	
+	/**
+	 * @see Client#getVX()
+	 */
+	@Column(name = "vx")
+	private int vX = 0;
+	
+	/**
+	 * @see Client#getVY()
+	 */
+	@Column(name = "vy")
+	private int vY = 0;
+	
+	/**
+	 * @see Client#getStreamPublishName()
+	 */
+	@Column(name = "stream_publish_name")
+	private String streamPublishName = "";
+	
+	/**
+	 * @see Client#getPublicSID()
+	 */
+	@Column(name = "public_sid")
+	private String publicSID = "";
+	
+	/**
+	 * @see Client#getIsMod()
+	 */
+	@Column(name = "is_mod")
+	private Boolean isMod = false;
+	
+	/**
+	 * @see Client#getIsSuperModerator()
+	 */
+	@Column(name = "is_supermoderator")
+	private Boolean isSuperModerator = false;
+	
+	/**
+	 * @see Client#getCanDraw()
+	 */
+	@Column(name = "can_draw")
+	private Boolean canDraw = false;
+	
+	/**
+	 * @see Client#getCanShare()
+	 */
+	@Column(name = "can_share")
+	private Boolean canShare = false;
+	
+	/**
+	 * @see Client#getCanRemote()
+	 */
+	@Column(name = "can_remote")
+	private Boolean canRemote = false;
+	
+	/**
+	 * @see Client#getCanGiveAudio()
+	 */
+	@Column(name = "can_giveaudio")
+	private Boolean canGiveAudio = false;
+
+	@Column(name = "can_video")
+	private boolean canVideo = false;
+
+	/**
+	 * @see Client#getConnectedSince()
+	 */
+	@Column(name = "connected_since")
+	private Date connectedSince;
+	
+	/**
+	 * @see Client#getFormatedDate()
+	 */
+	@Column(name = "formated_date")
+	private String formatedDate;
+	
+	/**
+	 * @see Client#getIsScreenClient()
+	 */
+	@Column(name = "is_screenclient")
+	private Boolean isScreenClient = false;
+	
+	/**
+	 * @see Client#getIsAVClient()
+	 */
+	@Column(name = "is_avclient")
+	private boolean isAVClient = false;
+	
+	/**
+	 * @see Client#getUsercolor()
+	 */
+	@Column(name = "usercolor")
+	private String usercolor;
+	
+	/**
+	 * @see Client#getUserpos()
+	 */
+	@Column(name = "userpos")
+	private Integer userpos;
+	
+	/**
+	 * @see Client#getUserip()
+	 */
+	@Column(name = "userip")
+	private String userip;
+	
+	/**
+	 * @see Client#getUserport()
+	 */
+	@Column(name = "userport")
+	private int userport;
+	
+	/**
+	 * @see Client#getRoom_id()
+	 */
+	@Column(name = "room_id")
+	private Long room_id;
+	
+	/**
+	 * @see Client#getRoomEnter()
+	 */
+	@Column(name = "room_enter")
+	private Date roomEnter = null;
+	
+	/**
+	 * @see Client#getBroadCastID()
+	 */
+	@Column(name = "broadcast_id")
+	private long broadCastID = -2;
+	
+	/**
+	 * @see Client#getUser_id()
+	 */
+	@Column(name = "user_id")
+	private Long user_id = null;
+	
+	/**
+	 * @see Client#getFirstname()
+	 */
+	@Column(name = "firstname")
+	private String firstname = "";
+	
+	/**
+	 * @see Client#getLastname()
+	 */
+	@Column(name = "lastname")
+	private String lastname = "";
+	
+	/**
+	 * @see Client#getMail()
+	 */
+	@Column(name = "email")
+	private String email;
+	
+	/**
+	 * @see Client#getLastLogin()
+	 */
+	@Column(name = "last_login")
+	private String lastLogin;
+	
+	/**
+	 * @see Client#getOfficial_code()
+	 */
+	@Column(name = "official_code")
+	private String official_code;
+	
+	/**
+	 * @see Client#getPicture_uri()
+	 */
+	@Column(name = "picture_uri")
+	private String picture_uri;
+	
+	/**
+	 * @see Client#getLanguage()
+	 */
+	@Column(name = "language")
+	private String language = "";
+	
+	/**
+	 * @see Client#getAvsettings()
+	 */
+	@Column(name = "avsettings")
+	private String avsettings = "";
+	
+	/**
+	 * @see Client#getSwfurl()
+	 */
+	// FIXME: Move to {@link ClientSession}
+	@Column(name = "swfurl", length=2048)
+	private String swfurl;
+	
+	/**
+	 * @see Client#getIsRecording()
+	 */
+	@Column(name = "is_recording")
+	private Boolean isRecording = false;
+	
+	/**
+	 * @see Client#getRoomRecordingName()
+	 */
+	@Column(name = "room_recording_name")
+	private String roomRecordingName;
+	
+	/**
+	 * @see Client#getFlvRecordingId()
+	 */
+	@Column(name = "flvrecording_id")
+	private Long flvRecordingId;
+	
+	/**
+	 * @see Client#getFlvRecordingMetaDataId()
+	 */
+	@Column(name = "flvrecordingmetadata_id")
+	private Long flvRecordingMetaDataId;
+	
+	/**
+	 * @see Client#getOrganization_id()
+	 */
+	@Column(name = "organization_id")
+	private Long organization_id;
+	
+	/**
+	 * @see Client#isStartRecording()
+	 */
+	@Column(name = "start_recording")
+	private boolean startRecording = false;
+	
+	/**
+	 * @see Client#isStartStreaming()
+	 */
+	@Column(name = "start_streaming")
+	private boolean startStreaming = false;
+	
+	/**
+	 * @see Client#isScreenPublishStarted()
+	 */
+	@Column(name = "screen_publish_started")
+	private boolean screenPublishStarted = false;
+	
+	/**
+	 * @see Client#isStreamPublishStarted()
+	 */
+	@Column(name = "stream_publish_started")
+	private boolean streamPublishStarted = false;
+	
+	/**
+	 * @see Client#getIsBroadcasting()
+	 */
+	@Column(name = "is_broadcasting")
+	private Boolean isBroadcasting = false;
+	
+	/**
+	 * @see Client#getExternalUserId()
+	 */
+	@Column(name = "external_user_id")
+	private String externalUserId;
+	
+	/**
+	 * @see Client#getExternalUserType()
+	 */
+	@Column(name = "external_user_type")
+	private String externalUserType;
+	
+	/**
+	 * @see Client#getInterviewPodId()
+	 */
+	@Column(name = "interview_pod_id")
+	private Integer interviewPodId = null;
+	
+	/**
+	 * @see Client#isAllowRecording()
+	 */
+	@Column(name = "allow_recording")
+	private boolean allowRecording = true;
+	
+	/**
+	 * @see Client#getZombieCheckFlag()
+	 */
+	@Column(name = "zombie_check_flag")
+	private Boolean zombieCheckFlag = false;
+	
+	/**
+	 * @see Client#getMicMuted()
+	 */
+	@Column(name = "mic_muted")
+	private Boolean micMuted = false;
+	
+	/**
+	 * @see Client#isSipTransport()
+	 */
+	@Column(name = "sip_transport")
+	private boolean sipTransport = false;
+	
+	@Column(name = "mobile")
+	private boolean mobile = false;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "server_id")
+	private Server server;
+    
+	public Client() {}
+    
+	public Client(String streamid, String publicSID, Long room_id,
+			Long user_id, String firstname, String lastname, boolean isAVClient,
+			String username, String connectedSince, String scope) {
+		super();
+		this.streamid = streamid;
+		this.publicSID = publicSID;
+		this.room_id = room_id;
+		this.user_id = user_id;
+		this.firstname = firstname;
+		this.lastname = lastname;
+		this.isAVClient = isAVClient;
+		this.username = username;
+		this.connectedSince = CalendarPatterns.parseDateWithHour(connectedSince);
+		this.scope = scope;
+	}
+
+	public void setUserObject(Long user_id, String username, String firstname, String lastname) {
+		this.user_id = user_id;
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+
+	public void setUserObject(String username, String firstname, String lastname) {
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Date getConnectedSince() {
+		return connectedSince;
+	}
+
+	public void setConnectedSince(Date connectedSince) {
+		this.connectedSince = connectedSince;
+	}
+
+	public Boolean getIsMod() {
+		return isMod;
+	}
+
+	public void setIsMod(Boolean isMod) {
+		this.isMod = isMod;
+	}
+	
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getStreamid() {
+		return streamid;
+	}
+
+	public void setStreamid(String streamid) {
+		this.streamid = streamid;
+	}
+
+	public String getScope() {
+		return scope;
+	}
+
+	public void setScope(String scope) {
+		this.scope = scope;
+	}
+
+	public String getFormatedDate() {
+		return formatedDate;
+	}
+
+	public void setFormatedDate(String formatedDate) {
+		this.formatedDate = formatedDate;
+	}
+
+	public String getUsercolor() {
+		return usercolor;
+	}
+
+	public void setUsercolor(String usercolor) {
+		this.usercolor = usercolor;
+	}
+
+	public Integer getUserpos() {
+		return userpos;
+	}
+
+	public void setUserpos(Integer userpos) {
+		this.userpos = userpos;
+	}
+
+	public String getUserip() {
+		return userip;
+	}
+
+	public void setUserip(String userip) {
+		this.userip = userip;
+	}
+
+	public String getSwfurl() {
+		return swfurl;
+	}
+
+	public void setSwfurl(String swfurl) {
+		this.swfurl = swfurl;
+	}
+
+	public int getUserport() {
+		return userport;
+	}
+
+	public void setUserport(int userport) {
+		this.userport = userport;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLanguage() {
+		return language;
+	}
+
+	public void setLanguage(String language) {
+		this.language = language;
+	}
+
+	public String getLastLogin() {
+		return lastLogin;
+	}
+
+	public void setLastLogin(String lastLogin) {
+		this.lastLogin = lastLogin;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getOfficial_code() {
+		return official_code;
+	}
+
+	public void setOfficial_code(String official_code) {
+		this.official_code = official_code;
+	}
+
+	public String getPicture_uri() {
+		return picture_uri;
+	}
+
+	public void setPicture_uri(String picture_uri) {
+		this.picture_uri = picture_uri;
+	}
+
+	public Long getUser_id() {
+		return user_id;
+	}
+
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+
+	public Date getRoomEnter() {
+		return roomEnter;
+	}
+
+	public void setRoomEnter(Date roomEnter) {
+		this.roomEnter = roomEnter;
+	}
+
+	public Boolean getIsRecording() {
+		return isRecording;
+	}
+
+	public void setIsRecording(Boolean isRecording) {
+		this.isRecording = isRecording;
+	}
+
+	public String getRoomRecordingName() {
+		return roomRecordingName;
+	}
+
+	public void setRoomRecordingName(String roomRecordingName) {
+		this.roomRecordingName = roomRecordingName;
+	}
+
+	public String getAvsettings() {
+		return avsettings;
+	}
+
+	public void setAvsettings(String avsettings) {
+		this.avsettings = avsettings;
+	}
+
+	public long getBroadCastID() {
+		return broadCastID;
+	}
+
+	public void setBroadCastID(long broadCastID) {
+		this.broadCastID = broadCastID;
+	}
+
+	public String getPublicSID() {
+		return publicSID;
+	}
+	
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+
+	public Boolean getZombieCheckFlag() {
+		return zombieCheckFlag;
+	}
+	
+	public void setZombieCheckFlag(Boolean zombieCheckFlag) {
+		this.zombieCheckFlag = zombieCheckFlag;
+	}
+
+	public Boolean getMicMuted() {
+		return micMuted;
+	}
+
+	public void setMicMuted(Boolean micMuted) {
+		this.micMuted = micMuted;
+	}
+
+	public Boolean getCanDraw() {
+		return canDraw;
+	}
+
+	public void setCanDraw(Boolean canDraw) {
+		this.canDraw = canDraw;
+	}
+
+	public Boolean getIsBroadcasting() {
+		return isBroadcasting;
+	}
+
+	public void setIsBroadcasting(Boolean isBroadcasting) {
+		this.isBroadcasting = isBroadcasting;
+	}
+
+	public Boolean getCanShare() {
+		return canShare;
+	}
+
+	public void setCanShare(Boolean canShare) {
+		this.canShare = canShare;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public Boolean getIsSuperModerator() {
+		return isSuperModerator;
+	}
+
+	public void setIsSuperModerator(Boolean isSuperModerator) {
+		this.isSuperModerator = isSuperModerator;
+	}
+
+	public Boolean getIsScreenClient() {
+		return isScreenClient;
+	}
+
+	public void setIsScreenClient(Boolean isScreenClient) {
+		this.isScreenClient = isScreenClient;
+	}
+
+	public int getVWidth() {
+		return vWidth;
+	}
+
+	public void setVWidth(int width) {
+		vWidth = width;
+	}
+
+	public int getVHeight() {
+		return vHeight;
+	}
+
+	public void setVHeight(int height) {
+		vHeight = height;
+	}
+
+	public int getVX() {
+		return vX;
+	}
+
+	public void setVX(int vx) {
+		vX = vx;
+	}
+
+	public int getVY() {
+		return vY;
+	}
+
+	public void setVY(int vy) {
+		vY = vy;
+	}
+
+	public String getStreamPublishName() {
+		return streamPublishName;
+	}
+
+	public void setStreamPublishName(String streamPublishName) {
+		this.streamPublishName = streamPublishName;
+	}
+
+	public Long getFlvRecordingId() {
+		return flvRecordingId;
+	}
+
+	public void setFlvRecordingId(Long flvRecordingId) {
+		this.flvRecordingId = flvRecordingId;
+	}
+
+	public Long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+
+	public void setFlvRecordingMetaDataId(Long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+
+	public boolean isScreenPublishStarted() {
+		return screenPublishStarted;
+	}
+
+	public void setScreenPublishStarted(boolean screenPublishStarted) {
+		this.screenPublishStarted = screenPublishStarted;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+
+	public boolean isStartRecording() {
+		return startRecording;
+	}
+
+	public void setStartRecording(boolean startRecording) {
+		this.startRecording = startRecording;
+	}
+
+	public boolean isStartStreaming() {
+		return startStreaming;
+	}
+
+	public void setStartStreaming(boolean startStreaming) {
+		this.startStreaming = startStreaming;
+	}
+
+	public Integer getInterviewPodId() {
+		return interviewPodId;
+	}
+
+	public void setInterviewPodId(Integer interviewPodId) {
+		this.interviewPodId = interviewPodId;
+	}
+
+	public Boolean getCanRemote() {
+		return canRemote;
+	}
+
+	public void setCanRemote(Boolean canRemote) {
+		this.canRemote = canRemote;
+	}
+
+	public Boolean getCanGiveAudio() {
+		return canGiveAudio;
+	}
+
+	public void setCanGiveAudio(Boolean canGiveAudio) {
+		this.canGiveAudio = canGiveAudio;
+	}
+
+	public boolean getCanVideo() {
+		return canVideo;
+	}
+
+	public void setCanVideo(boolean canVideo) {
+		this.canVideo = canVideo;
+	}
+
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+
+	public boolean getIsAVClient() {
+		return isAVClient;
+	}
+
+	public void setIsAVClient(boolean isAVClient) {
+		this.isAVClient = isAVClient;
+	}
+
+	public boolean isStreamPublishStarted() {
+		return streamPublishStarted;
+	}
+
+	public void setStreamPublishStarted(boolean streamPublishStarted) {
+		this.streamPublishStarted = streamPublishStarted;
+	}
+
+	public boolean isSipTransport() {
+		return sipTransport;
+	}
+
+	public void setSipTransport(boolean sipTransport) {
+		this.sipTransport = sipTransport;
+	}
+	
+	public Server getServer() {
+		return server;
+	}
+
+	public void setServer(Server server) {
+		this.server = server;
+	}
+
+	public boolean isMobile() {
+		return mobile;
+	}
+
+	public void setMobile(boolean mobile) {
+		this.mobile = mobile;
+	}
+
+	@Override
+	public String toString() {
+		return "Client [streamid=" + streamid + ", publicSID=" + publicSID + ", isScreenClient=" + isScreenClient
+				+ ", isAVClient=" + isAVClient + ", isMobile = " + mobile + ", room_id=" + room_id + ", broadCastID=" + broadCastID + ", user_id="
+				+ user_id + ", avsettings=" + avsettings + ", isRecording=" + isRecording + ", flvRecordingId="
+				+ flvRecordingId + ", flvRecordingMetaDataId=" + flvRecordingMetaDataId + ", screenPublishStarted="
+				+ screenPublishStarted + ", interviewPodId=" + interviewPodId + ", server=" + server + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java b/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java
new file mode 100644
index 0000000..bf62c65
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java
@@ -0,0 +1,255 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.user.User;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getInvitationbyId", query = "SELECT i FROM Invitation i "
+					+ "WHERE i.deleted = false AND i.id = :invid"),
+	@NamedQuery(name = "getInvitationByHashCode", query = "SELECT i FROM Invitation i "
+					+ "where i.hash LIKE :hashCode AND i.deleted = false"),
+	@NamedQuery(name = "getInvitationByAppointment", query = "SELECT i FROM Invitation i "
+					+ "WHERE i.appointment.id = :appointmentId  ")
+})
+@Table(name = "invitations")
+public class Invitation implements Serializable {
+	private static final long serialVersionUID = 1153321347974705506L;
+
+	public enum Valid {
+		OneTime
+		, Period
+		, Endless;
+		
+		public static Valid fromInt(int valid) {
+			return valid == 1 ? Endless : (valid == 2 ? Period : OneTime);
+		}
+	}
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "invited_by", nullable = true)
+	@ForeignKey(enabled = true)
+	private User invitedBy;
+	
+	@Column(name = "inserted")
+	private Date inserted;
+	
+	@Column(name = "updated")
+	private Date updated;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private Room room;
+
+	// the hash for the link
+	@Column(name = "hash")
+	private String hash;
+	
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "invitee_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private User invitee;
+
+	@Column(name = "password_protected")
+	private boolean passwordProtected;
+	
+	@Column(name = "password")
+	private String password;
+
+	// Invitations by Time are only valid between the validFrom validTo
+	// TimeStamp
+	@Column(name = "valid")
+	@Enumerated(EnumType.STRING)
+	private Valid valid = Valid.Period;
+	
+	@Column(name = "valid_from")
+	private Date validFrom;
+	
+	@Column(name = "valid_to")
+	private Date validTo;
+	
+	@Column(name = "was_used")
+	private boolean used;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "appointment_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private Appointment appointment;
+
+	//variable used in Flash
+	private boolean allowEntry = true;
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public User getInvitedBy() {
+		return invitedBy;
+	}
+
+	public void setInvitedBy(User invitedBy) {
+		this.invitedBy = invitedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	public User getInvitee() {
+		return invitee;
+	}
+
+	public void setInvitee(User invitee) {
+		this.invitee = invitee;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean passwordProtected) {
+		this.passwordProtected = passwordProtected;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public Date getValidFrom() {
+		return validFrom;
+	}
+
+	public void setValidFrom(Date validFrom) {
+		this.validFrom = validFrom;
+	}
+
+	public Date getValidTo() {
+		return validTo;
+	}
+
+	public void setValidTo(Date validTo) {
+		this.validTo = validTo;
+	}
+
+	public boolean isUsed() {
+		return used;
+	}
+
+	public void setUsed(boolean used) {
+		this.used = used;
+	}
+
+	public Appointment getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Appointment appointment) {
+		this.appointment = appointment;
+	}
+
+	public Valid getValid() {
+		return valid;
+	}
+
+	public void setValid(Valid valid) {
+		this.valid = valid;
+	}
+	
+	public boolean isAllowEntry() {
+		return allowEntry;
+	}
+
+	public void setAllowEntry(boolean allowEntry) {
+		this.allowEntry = allowEntry;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java b/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java
new file mode 100644
index 0000000..481e5ec
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getPollTypes", query = "SELECT pt FROM PollType pt"),
+	@NamedQuery(name = "getPollType", query = "SELECT pt FROM PollType pt " +
+			"WHERE pt.pollTypesId = :pollTypesId")		
+})
+@Table(name = "poll_types")
+public class PollType {
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long pollTypesId;
+	
+	@Column(name = "fieldvalues_id")
+	private Long label;
+	
+	@Column(name = "numeric_answer")
+	private Boolean isNumericAnswer;
+	
+	/**
+	 * @return the pollTypesId
+	 */
+	public Long getPollTypesId() {
+		return pollTypesId;
+	}
+	/**
+	 * @param pollTypesId the pollTypesId to set
+	 */
+	public void setPollTypesId(Long pollTypesId) {
+		this.pollTypesId = pollTypesId;
+	}
+	/**
+	 * @return the isNumericAnswer
+	 */
+	public Boolean getIsNumericAnswer() {
+		return isNumericAnswer;
+	}
+	/**
+	 * @param isNumericAnswer the isNumericAnswer to set
+	 */
+	public void setIsNumericAnswer(Boolean isNumericAnswer) {
+		this.isNumericAnswer = isNumericAnswer;
+	}
+	/**
+	 * @return the pollTypeLabelid
+	 */
+	public Long getLabel() {
+		return label;
+	}
+	/**
+	 * @param pollTypeLabelid the pollTypeLabelid to set
+	 */
+	public void setLabel(Long label) {
+		this.label = label;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Room.java b/src/db/java/org/apache/openmeetings/db/entity/room/Room.java
new file mode 100644
index 0000000..ef1d829
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -0,0 +1,588 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.openjpa.persistence.ElementDependent;
+import org.apache.openjpa.persistence.FetchAttribute;
+import org.apache.openjpa.persistence.FetchGroup;
+import org.apache.openjpa.persistence.FetchGroups;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+@Entity
+@FetchGroups({
+	@FetchGroup(name = "roomModerators", attributes = { @FetchAttribute(name = "moderators"), @FetchAttribute(name = "roomOrganisations") })
+})
+@NamedQueries({
+	@NamedQuery(name = "getNondeletedRooms", query = "SELECT r FROM Room r WHERE r.deleted = false"),
+	@NamedQuery(name = "getPublicRooms", query = "SELECT r from Room r WHERE r.ispublic = true and r.deleted = false and r.roomtype.roomtypes_id = :typeId"),
+	@NamedQuery(name = "getRoomByOwnerAndTypeId", query = "select c from Room as c "
+					+ "where c.ownerId = :ownerId "
+					+ "AND c.roomtype.roomtypes_id = :roomtypesId "
+					+ "AND c.deleted = false"),	
+										
+	@NamedQuery(name = "selectMaxFromRooms", query = "select count(c.rooms_id) from Room c "
+			+ "where c.deleted = false AND c.name LIKE :search "),
+	@NamedQuery(name = "getRoomByExternalId", query = "select c from Room as c JOIN c.roomtype as rt "
+			+ "where c.externalRoomId = :externalRoomId AND c.externalRoomType = :externalRoomType "
+			+ "AND rt.roomtypes_id = :roomtypes_id AND c.deleted = false"),
+	@NamedQuery(name = "getPublicRoomsOrdered", query = "SELECT r from Room r WHERE r.ispublic= true AND r.deleted= false AND r.appointment = false ORDER BY r.name ASC"),
+	@NamedQuery(name = "getRoomById", query = "SELECT r FROM Room r WHERE r.deleted = false AND r.rooms_id = :id"),
+	@NamedQuery(name = "getSipRoomIdsByIds", query = "SELECT r.rooms_id FROM Room r WHERE r.deleted = false AND r.sipEnabled = true AND r.rooms_id IN :ids"),
+	@NamedQuery(name = "countRooms", query = "SELECT COUNT(r) FROM Room r WHERE r.deleted = false"),
+	@NamedQuery(name = "getBackupRooms", query = "SELECT r FROM Room r ORDER BY r.rooms_id"),
+	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.numberOfPartizipants) FROM Room r WHERE r.deleted = false AND r.rooms_id IN :ids")
+	, @NamedQuery(name = "getOrganisationRooms", query = "SELECT DISTINCT c.room FROM RoomOrganisation c LEFT JOIN FETCH c.room "
+				+ "WHERE c.organisation.organisation_id = :orgId AND c.deleted = false AND c.room.deleted = false AND c.room.appointment = false "
+				+ "AND c.organisation.deleted = false ORDER BY c.room.name ASC")
+})
+@Table(name = "room")
+@Root(name = "room")
+public class Room implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, required=false)
+	private Long rooms_id;
+
+	@Column(name = "name")
+	@Element(data = true, required=false)
+	private String name;
+
+	@Lob
+	@Column(name = "comment_field")
+	@Element(data = true, required = false)
+	private String comment;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "roomtypes_id")
+	@ForeignKey(enabled = true)
+	@Element(name = "roomtypeId", data = true, required = false)
+	private RoomType roomtype;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@Column(name = "ispublic")
+	@Element(name = "ispublic", data = true, required = false)
+	private boolean ispublic;
+
+	@Column(name = "numberOfPartizipants")
+	@Element(data = true, required = false)
+	private Long numberOfPartizipants = new Long(4);
+
+	@Column(name = "appointment")
+	@Element(data = true, required = false)
+	private boolean appointment;
+
+	// Vars to simulate external Room
+	@Column(name = "externalRoomId")
+	@Element(data = true, required = false)
+	private Long externalRoomId;
+
+	@Column(name = "externalRoomType")
+	@Element(data = true, required = false)
+	private String externalRoomType;
+
+	@Column(name = "isdemoroom")
+	@Element(data = true, required = false)
+	private Boolean isDemoRoom;
+
+	@Column(name = "demo_time")
+	@Element(data = true, required = false)
+	private Integer demoTime; // In Seconds
+
+	// If this is true all participants of a meeting have to wait for the
+	// moderator to come into the room
+	@Column(name = "ismoderatedroom")
+	@Element(name="isModeratedRoom", data = true, required = false)
+	private boolean isModeratedRoom;
+
+	@Column(name = "allow_user_questions")
+	@Element(data = true, required = false)
+	private Boolean allowUserQuestions;
+
+	@Column(name = "is_audio_only")
+	@Element(name = "isAudioOnly", data = true, required = false)
+	private Boolean isAudioOnly;
+	
+	@Column(name = "allow_font_styles", nullable = false)
+	@Element(data = true, required = false)
+	private boolean allowFontStyles = false;
+
+	@Column(name = "is_closed")
+	@Element(data = true, required = false)
+	private Boolean isClosed;
+
+	@Column(name = "redirect_url")
+	@Element(data = true, required = false)
+	private String redirectURL;
+
+	@Column(name = "owner_id")
+	@Element(name = "ownerid", data = true, required = false)
+	private Long ownerId; // Those are the rooms from the myrooms section
+
+	@Column(name = "wait_for_recording")
+	@Element(data = true, required = false)
+	private Boolean waitForRecording; // Show warning that user has to start
+										// recording
+
+	@Column(name = "allow_recording")
+	@Element(name = "allowRecording", data = true, required = false)
+	private boolean allowRecording = true; // Show or show not the recording option in a conference room
+	/**
+	 * Layout of Room
+	 */
+	@Column(name = "hide_top_bar")
+	@Element(data = true, required = false)
+	private Boolean hideTopBar = false;
+
+	@Column(name = "hide_chat")
+	@Element(name = "hideChat", data = true, required = false)
+	private Boolean hideChat = false;
+
+	@Column(name = "hide_activities_and_actions")
+	@Element(name = "hideActivitiesAndActions", data = true, required = false)
+	private Boolean hideActivitiesAndActions = false;
+
+	@Column(name = "hide_files_explorer")
+	@Element(data = true, required = false)
+	private Boolean hideFilesExplorer = false;
+
+	@Column(name = "hide_actions_menu")
+	@Element(data = true, required = false)
+	private Boolean hideActionsMenu = false;
+
+	@Column(name = "hide_screen_sharing")
+	@Element(data = true, required = false)
+	private Boolean hideScreenSharing = false;
+
+	@Column(name = "hide_whiteboard")
+	@Element(data = true, required = false)
+	private Boolean hideWhiteboard = false;
+
+	@Column(name = "show_microphone_status")
+	@Element(data = true, required = false)
+	private Boolean showMicrophoneStatus = false;
+
+	@Column(name = "chat_moderated")
+	@Element(data = true, required = false)
+	private Boolean chatModerated = false;
+
+	@Column(name = "chat_opened")
+	@Element(data = true, required = false)
+	private boolean chatOpened = false;
+
+	@Column(name = "files_opened")
+	@Element(data = true, required = false)
+	private boolean filesOpened = false;
+
+	@Column(name = "auto_video_select")
+	@Element(data = true, required = false)
+	private boolean autoVideoSelect = false;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "roomId")
+	@ForeignKey(enabled = true)
+	@ElementList(name = "room_moderators", required=false)
+	private List<RoomModerator> moderators = new ArrayList<RoomModerator>();
+
+	@Column(name = "sip_enabled")
+	@Element(data = true, required = false)
+	private boolean sipEnabled;
+	
+	@Column(name = "confno")
+	@Element(data = true, required = false)
+	private String confno;
+	
+	@Column(name = "pin")
+	@Element(data = true, required = false)
+	private String pin;
+	
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "rooms_id", insertable = true, updatable = true)
+	@ElementDependent
+	@org.simpleframework.xml.Transient
+	private List<RoomOrganisation> roomOrganisations = new ArrayList<RoomOrganisation>();
+
+	@Transient
+	private List<Client> currentusers;
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getRooms_id() {
+		return rooms_id;
+	}
+
+	public void setRooms_id(Long rooms_id) {
+		this.rooms_id = rooms_id;
+	}
+
+	public RoomType getRoomtype() {
+		return roomtype;
+	}
+
+	public void setRoomtype(RoomType roomtype) {
+		this.roomtype = roomtype;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIspublic() {
+		return ispublic;
+	}
+
+	public void setIspublic(Boolean ispublic) {
+		this.ispublic = ispublic;
+	}
+
+	public List<Client> getCurrentusers() {
+		return currentusers;
+	}
+
+	public void setCurrentusers(List<Client> currentusers) {
+		this.currentusers = currentusers;
+	}
+
+	public Long getNumberOfPartizipants() {
+		return numberOfPartizipants;
+	}
+
+	public void setNumberOfPartizipants(Long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
+	}
+
+	public Boolean getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Boolean appointment) {
+		this.appointment = appointment;
+	}
+
+	public Boolean getIsDemoRoom() {
+		return isDemoRoom;
+	}
+
+	public void setIsDemoRoom(Boolean isDemoRoom) {
+		this.isDemoRoom = isDemoRoom;
+	}
+
+	public Integer getDemoTime() {
+		return demoTime;
+	}
+
+	public void setDemoTime(Integer demoTime) {
+		this.demoTime = demoTime;
+	}
+
+	public Boolean getIsModeratedRoom() {
+		return isModeratedRoom;
+	}
+
+	public void setIsModeratedRoom(Boolean isModeratedRoom) {
+		this.isModeratedRoom = isModeratedRoom;
+	}
+
+	public Long getExternalRoomId() {
+		return externalRoomId;
+	}
+
+	public void setExternalRoomId(Long externalRoomId) {
+		this.externalRoomId = externalRoomId;
+	}
+
+	public String getExternalRoomType() {
+		return externalRoomType;
+	}
+
+	public void setExternalRoomType(String externalRoomType) {
+		this.externalRoomType = externalRoomType;
+	}
+
+	public Boolean getAllowUserQuestions() {
+		return allowUserQuestions;
+	}
+
+	public void setAllowUserQuestions(Boolean allowUserQuestions) {
+		this.allowUserQuestions = allowUserQuestions;
+	}
+
+	public Boolean getIsAudioOnly() {
+		return isAudioOnly;
+	}
+
+	public void setIsAudioOnly(Boolean isAudioOnly) {
+		this.isAudioOnly = isAudioOnly;
+	}
+
+	public boolean getAllowFontStyles() {
+		return allowFontStyles;
+	}
+
+	public void setAllowFontStyles(boolean allowFontStyles) {
+		this.allowFontStyles = allowFontStyles;
+	}
+
+	public Boolean getIsClosed() {
+		return isClosed;
+	}
+
+	public void setIsClosed(Boolean isClosed) {
+		this.isClosed = isClosed;
+	}
+
+	public String getRedirectURL() {
+		return redirectURL;
+	}
+
+	public void setRedirectURL(String redirectURL) {
+		this.redirectURL = redirectURL;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public Boolean getWaitForRecording() {
+		return waitForRecording;
+	}
+
+	public void setWaitForRecording(Boolean waitForRecording) {
+		this.waitForRecording = waitForRecording;
+	}
+
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+
+	public Boolean getHideTopBar() {
+		return hideTopBar;
+	}
+
+	public void setHideTopBar(Boolean hideTopBar) {
+		this.hideTopBar = hideTopBar;
+	}
+
+	public Boolean getHideChat() {
+		return hideChat;
+	}
+
+	public void setHideChat(Boolean hideChat) {
+		this.hideChat = hideChat;
+	}
+
+	public Boolean getHideActivitiesAndActions() {
+		return hideActivitiesAndActions;
+	}
+
+	public void setHideActivitiesAndActions(Boolean hideActivitiesAndActions) {
+		this.hideActivitiesAndActions = hideActivitiesAndActions;
+	}
+
+	public Boolean getHideFilesExplorer() {
+		return hideFilesExplorer;
+	}
+
+	public void setHideFilesExplorer(Boolean hideFilesExplorer) {
+		this.hideFilesExplorer = hideFilesExplorer;
+	}
+
+	public Boolean getHideActionsMenu() {
+		return hideActionsMenu;
+	}
+
+	public void setHideActionsMenu(Boolean hideActionsMenu) {
+		this.hideActionsMenu = hideActionsMenu;
+	}
+
+	public Boolean getHideScreenSharing() {
+		return hideScreenSharing;
+	}
+
+	public void setHideScreenSharing(Boolean hideScreenSharing) {
+		this.hideScreenSharing = hideScreenSharing;
+	}
+
+	public Boolean getHideWhiteboard() {
+		return hideWhiteboard;
+	}
+
+	public void setHideWhiteboard(Boolean hideWhiteboard) {
+		this.hideWhiteboard = hideWhiteboard;
+	}
+
+	public Boolean getShowMicrophoneStatus() {
+		return showMicrophoneStatus;
+	}
+
+	public void setShowMicrophoneStatus(Boolean showMicrophoneStatus) {
+		this.showMicrophoneStatus = showMicrophoneStatus;
+	}
+
+	public List<RoomModerator> getModerators() {
+		return moderators;
+	}
+
+	public void setModerators(List<RoomModerator> moderators) {
+		if (moderators != null) {
+			this.moderators = moderators;
+		}
+	}
+
+	public Boolean getChatModerated() {
+		return chatModerated;
+	}
+
+	public void setChatModerated(Boolean chatModerated) {
+		this.chatModerated = chatModerated;
+	}
+
+	public List<RoomOrganisation> getRoomOrganisations() {
+		return roomOrganisations;
+	}
+
+	public void setRoomOrganisations(List<RoomOrganisation> roomOrganisations) {
+		this.roomOrganisations = roomOrganisations;
+	}
+
+	public boolean isChatOpened() {
+		return chatOpened;
+	}
+
+	public void setChatOpened(boolean chatOpened) {
+		this.chatOpened = chatOpened;
+	}
+
+	public boolean isFilesOpened() {
+		return filesOpened;
+	}
+
+	public void setFilesOpened(boolean filesOpened) {
+		this.filesOpened = filesOpened;
+	}
+
+	public boolean isAutoVideoSelect() {
+		return autoVideoSelect;
+	}
+
+	public void setAutoVideoSelect(boolean autoVideoSelect) {
+		this.autoVideoSelect = autoVideoSelect;
+	}
+
+	public boolean isSipEnabled() {
+		return sipEnabled;
+	}
+
+	public void setSipEnabled(boolean sipEnabled) {
+		this.sipEnabled = sipEnabled;
+	}
+
+	public String getConfno() {
+		return confno;
+	}
+
+	public void setConfno(String confno) {
+		this.confno = confno;
+	}
+
+	public String getPin() {
+		return pin;
+	}
+
+	public void setPin(String pin) {
+		this.pin = pin;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java
new file mode 100644
index 0000000..a5a7f8a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getRoomModeratorById", query = "select c from RoomModerator as c where c.roomModeratorsId = :roomModeratorsId"),
+	@NamedQuery(name = "getRoomModeratorsByIds", query = "select c from RoomModerator as c where c.roomModeratorsId IN :ids"),
+	@NamedQuery(name = "getRoomModeratorByRoomId", query = "select c from RoomModerator as c where c.roomId = :roomId AND c.deleted = false"),
+	@NamedQuery(name = "getRoomModeratorByUserAndRoomId", query = "select c from RoomModerator as c "
+			+ "where c.roomId = :roomId "
+			+ "AND c.deleted <> :deleted "
+			+ "AND c.user.user_id = :user_id")
+})
+@Table(name = "rooms_moderator")
+@Root(name = "room_moderator")
+public class RoomModerator implements Serializable {
+	private static final long serialVersionUID = 5407758673591515018L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long roomModeratorsId;
+	
+	@Column(name = "roomId")
+	private Long roomId;
+	
+	@Column(name="is_supermoderator")
+	@Element(name="is_supermoderator", data = true)
+	private Boolean isSuperModerator;
+	
+	@ManyToOne(fetch = FetchType.EAGER) 
+	@JoinColumn (name="user_id")
+	@ForeignKey(enabled = true)
+	@Element(name="user_id", data = true, required=false)
+	private User user;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	public long getRoomModeratorsId() {
+		return roomModeratorsId;
+	}
+	public void setRoomModeratorsId(long roomModeratorsId) {
+		this.roomModeratorsId = roomModeratorsId;
+	}
+	
+	public Boolean getIsSuperModerator() {
+		return isSuperModerator;
+	}
+	public void setIsSuperModerator(Boolean isSuperModerator) {
+		this.isSuperModerator = isSuperModerator;
+	}
+	
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Long getRoomId() {
+		return roomId;
+	}
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java
new file mode 100644
index 0000000..6d9fe26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllRoomsOrganisations", query = "select ro from RoomOrganisation ro ORDER BY ro.rooms_organisation_id"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationIdAndRoomType", query = "select c from RoomOrganisation as c "
+			+ "where c.room.roomtypes_id = :roomtypes_id "
+			+ "AND c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationId", query = "SELECT c FROM RoomOrganisation c "
+			+ "LEFT JOIN FETCH c.room "
+			+ "WHERE c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted AND c.room.deleted <> :deleted AND c.room.appointment = false "
+			+ "AND c.organisation.deleted <> :deleted "
+			+ "ORDER BY c.room.name ASC"),
+	@NamedQuery(name = "selectMaxFromRoomsByOrganisation", query = "select c from Rooms_Organisation as c "
+			+ "where c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationIdAndRoomId", query = "select c from RoomOrganisation as c "
+			+ "where c.room.rooms_id = :rooms_id "
+			+ "AND c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByRoomsId", query = "select c from RoomOrganisation as c "
+			+ "where c.room.rooms_id = :rooms_id "
+			+ "AND c.deleted <> :deleted")
+})
+@Table(name = "rooms_organisation")
+@Root(name="room_organisation")
+public class RoomOrganisation implements Serializable {
+	private static final long serialVersionUID = 4153935045968138984L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private Long rooms_organisation_id;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="rooms_id", nullable=true)
+	@ForeignKey(enabled = true)
+	@Element(name="rooms_id", data=true, required=false)
+	private Room room;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="organisation_id", nullable=true)
+	@ForeignKey(enabled = true)
+	@Element(name="organisation_id", data=true, required=false)
+	private Organisation organisation;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+
+	public RoomOrganisation(Organisation org, Room room) {
+		this.organisation = org;
+		this.room = room;
+	}
+
+	public RoomOrganisation() {
+	}
+
+	public Organisation getOrganisation() {
+		return organisation;
+	}
+	public void setOrganisation(Organisation organisation) {
+		this.organisation = organisation;
+	}
+	
+	public Room getRoom() {
+		return room;
+	}
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Long getRooms_organisation_id() {
+		return rooms_organisation_id;
+	}
+	public void setRooms_organisation_id(Long rooms_organisation_id) {
+		this.rooms_organisation_id = rooms_organisation_id;
+	}
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}	
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
new file mode 100644
index 0000000..5f87710
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "closePoll", query = "UPDATE RoomPoll rp SET rp.archived = :archived " +
+			"WHERE rp.room.rooms_id = :rooms_id"),
+	@NamedQuery(name = "deletePoll", query = "DELETE FROM RoomPoll rp WHERE rp.roomPollId = :roomPollId"),
+	@NamedQuery(name = "getPoll", query = "SELECT rp FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived"),
+	@NamedQuery(name = "getPollListBackup", query = "SELECT rp FROM RoomPoll rp ORDER BY rp.roomPollId"),
+	@NamedQuery(name = "getArchivedPollList", query = "SELECT rp FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived"),
+	@NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived")
+})
+@Table(name = "room_polls")
+@Root(name="roompoll")
+public class RoomPoll {
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long roomPollId;
+	
+	@Column(name = "poll_name")
+	@Element(name="pollname", data=true, required=false)
+	private String pollName;
+	
+	@Column(name = "poll_question")
+	@Element(name="pollquestion", data=true, required=false)
+	private String pollQuestion;
+	
+	@Column(name = "created")
+	@Element(data=true, required=false)
+	private Date created;
+	
+	@Column(name = "archived")
+	@Element(data=true, required=false)
+	private boolean archived;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "poll_type_id")
+	@ForeignKey(enabled = true)
+	@Element(name="polltypeid", data=true, required=false)
+	private PollType pollType;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "users_id")
+	@ForeignKey(enabled = true)
+	@Element(name="createdbyuserid", data=true, required=false)
+	private User createdBy;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "rooms_id")
+	@ForeignKey(enabled = true)
+	@Element(name="roomid", data=true, required=false)
+	private Room room;
+	
+	@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
+	@JoinColumn(name = "room_poll_id")
+	@ElementList(name="roompollanswers", required=false)
+	private List<RoomPollAnswers> roomPollAnswerList;
+
+	/**
+	 * @return the createdBy
+	 */
+	public User getCreatedBy() {
+		return createdBy;
+	}
+
+	/**
+	 * @param createdBy
+	 *            the createdBy to set
+	 */
+	public void setCreatedBy(User createdBy) {
+		this.createdBy = createdBy;
+	}
+
+	/**
+	 * @return the created
+	 */
+	public Date getCreated() {
+		return created;
+	}
+
+	/**
+	 * @param created
+	 *            the created to set
+	 */
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	/**
+	 * @return the pollQuestion
+	 */
+	public String getPollQuestion() {
+		return pollQuestion;
+	}
+
+	/**
+	 * @param pollQuestion
+	 *            the pollQuestion to set
+	 */
+	public void setPollQuestion(String pollQuestion) {
+		this.pollQuestion = pollQuestion;
+	}
+
+	/**
+	 * @return the roomPollAnswerList
+	 */
+	public List<RoomPollAnswers> getRoomPollAnswerList() {
+		if (roomPollAnswerList == null) {
+			roomPollAnswerList = new LinkedList<RoomPollAnswers>();
+		}
+		return roomPollAnswerList;
+	}
+
+	/**
+	 * @param roomPollAnswerList
+	 *            the roomPollAnswerList to set
+	 */
+	public void setRoomPollAnswerList(List<RoomPollAnswers> roomPollAnswerList) {
+		this.roomPollAnswerList = roomPollAnswerList;
+	}
+
+	/**
+	 * @return the roomPollId
+	 */
+	public Long getRoomPollId() {
+		return roomPollId;
+	}
+
+	/**
+	 * @param roomPollId
+	 *            the roomPollId to set
+	 */
+	public void setRoomPollId(Long roomPollId) {
+		this.roomPollId = roomPollId;
+	}
+
+	/**
+	 * @return the pollTypeId
+	 */
+	public PollType getPollType() {
+		return pollType;
+	}
+
+	public void setPollType(PollType pollType) {
+		this.pollType = pollType;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	/**
+	 * @return the archived
+	 */
+	public boolean isArchived() {
+		return archived;
+	}
+
+	/**
+	 * @param archived the archived to set
+	 */
+	public void setArchived(boolean archived) {
+		this.archived = archived;
+	}
+
+	/**
+	 * @return the pollName
+	 */
+	public String getPollName() {
+		return pollName;
+	}
+
+	/**
+	 * @param pollName the pollName to set
+	 */
+	public void setPollName(String pollName) {
+		this.pollName = pollName;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java
new file mode 100644
index 0000000..8ab0489
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "hasVoted", query = "SELECT rpa FROM RoomPollAnswers rpa "
+				+ "WHERE rpa.roomPoll.room.rooms_id = :room_id " +
+				"AND rpa.votedUser.user_id = :userid AND rpa.roomPoll.archived = :archived")
+})
+@Table(name = "room_poll_answers")
+@Root(name="roompollanswer")
+public class RoomPollAnswers {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "users_id")
+	@ForeignKey(enabled = true)
+	@Element(name="voteduserid", data=false, required=false)
+	private User votedUser;
+	
+	@Column(name = "answer")
+	@Element(data=false, required=false)
+	private Boolean answer;
+	
+	@Column(name = "pointList")
+	@Element(name="pointlist", data=false, required=false)
+	private Integer pointList;
+	
+	@Column(name = "voteDate")
+	@Element(name="votedate", data=false)
+	private Date voteDate;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_poll_id")
+	private RoomPoll roomPoll;
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	/**
+	 * @return the answer
+	 */
+	public Boolean getAnswer() {
+		return answer;
+	}
+
+	/**
+	 * @param answer
+	 *            the answer to set
+	 */
+	public void setAnswer(Boolean answer) {
+		this.answer = answer;
+	}
+
+	/**
+	 * @return the pointList
+	 */
+	public Integer getPointList() {
+		return pointList;
+	}
+
+	/**
+	 * @param pointList
+	 *            the pointList to set
+	 */
+	public void setPointList(Integer pointList) {
+		this.pointList = pointList;
+	}
+
+	/**
+	 * @return the voteDate
+	 */
+	public Date getVoteDate() {
+		return voteDate;
+	}
+
+	/**
+	 * @param voteDate
+	 *            the voteDate to set
+	 */
+	public void setVoteDate(Date voteDate) {
+		this.voteDate = voteDate;
+	}
+
+	/**
+	 * @return the votedClient
+	 */
+	public User getVotedUser() {
+		return votedUser;
+	}
+
+	/**
+	 * @param votedClient
+	 *            the votedClient to set
+	 */
+	public void setVotedUser(User votedUser) {
+		this.votedUser = votedUser;
+	}
+
+	public RoomPoll getRoomPoll() {
+		return roomPoll;
+	}
+
+	public void setRoomPoll(RoomPoll roomPoll) {
+		this.roomPoll = roomPoll;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java
new file mode 100644
index 0000000..95e8278
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllRoomTypes", query = "select c from RoomType as c where c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomTypesById", query = "select c from RoomType as c " +
+			"where c.roomtypes_id = :roomtypes_id AND c.deleted <> :deleted")
+})
+@Table(name = "roomtype")
+public class RoomType implements Serializable {
+	private static final long serialVersionUID = -4441029424324591356L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long roomtypes_id;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name="name")
+	private String name;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public Long getRoomtypes_id() {
+		return roomtypes_id;
+	}
+	public void setRoomtypes_id(Long roomtypes_id) {
+		this.roomtypes_id = roomtypes_id;
+	}
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}	
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java b/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java
new file mode 100644
index 0000000..17a274d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.util.Calendar;
+import java.util.Collection;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+@Entity
+@Table(name = "whiteboard")
+public class Whiteboard {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+
+	@Column(name = "room_id")
+	private Integer roomId = 0;
+
+	@Column(name = "x")
+	private Integer x = 0;
+
+	@Column(name = "y")
+	private Integer y = 0;
+
+	@Column(name = "zoom")
+	private Integer zoom = 100;
+
+	@Column(name = "full_fit")
+	private Boolean fullFit;
+
+	@Column(name = "created")
+	private Calendar created;
+
+	@OneToMany
+	@ElementJoinColumn(name = "whiteboarditem_id", referencedColumnName = "id")
+	@ForeignKey(enabled = true)
+	private Collection<WhiteboardItem> roomItems;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Integer getX() {
+		return x;
+	}
+
+	public void setX(Integer x) {
+		this.x = x;
+	}
+
+	public Integer getY() {
+		return y;
+	}
+
+	public void setY(Integer y) {
+		this.y = y;
+	}
+
+	public Integer getZoom() {
+		return zoom;
+	}
+
+	public void setZoom(Integer zoom) {
+		this.zoom = zoom;
+	}
+
+	public Boolean getFullFit() {
+		return fullFit;
+	}
+
+	public void setFullFit(Boolean fullFit) {
+		this.fullFit = fullFit;
+	}
+
+	public Calendar getCreated() {
+		return created;
+	}
+
+	public void setCreated(Calendar created) {
+		this.created = created;
+	}
+
+	public Integer getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Integer roomId) {
+		this.roomId = roomId;
+	}
+
+	public Collection<WhiteboardItem> getRoomItems() {
+		return roomItems;
+	}
+
+	public void setRoomItems(Collection<WhiteboardItem> roomItems) {
+		this.roomItems = roomItems;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java b/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java
new file mode 100644
index 0000000..fd97ac7
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "whiteboard_item")
+public class WhiteboardItem {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+	
+	@Column(name = "keyx")
+	private String key;
+	
+	@Column(name = "value")
+	private String value;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java b/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java
new file mode 100644
index 0000000..850aef8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getNondeletedLdapConfigs", query="SELECT u FROM LdapConfig u WHERE u.deleted = false")
+	, @NamedQuery(name="getActiveLdapConfigs", query="SELECT c FROM LdapConfig c WHERE c.deleted = false AND c.isActive = :isActive ORDER BY c.ldapConfigId")
+})
+@Table(name = "ldapconfig")
+@Root(name="ldapconfig")
+public class LdapConfig implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long ldapConfigId = 0L;
+	
+	@Column(name="name")
+	@Element(data=true)
+	private String name;
+	
+	@Column(name="config_file_name")
+	@Element(data=true, required = false)
+	private String configFileName;
+	
+	@Column(name="add_domain_to_user_name")
+	@Element(data=true)
+	private boolean addDomainToUserName;
+	
+	@Column(name="domain")
+	@Element(data=true, required = false)
+	private String domain;
+	
+	@Column(name="is_active")
+	@Element(data=true)
+	private boolean isActive;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="insertedby_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private User insertedby;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="updatedby_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private User updatedby;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Lob
+	@Column(name = "comment_field", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	public long getLdapConfigId() {
+		return ldapConfigId;
+	}
+	public void setLdapConfigId(long ldapConfigId) {
+		this.ldapConfigId = ldapConfigId;
+	}
+    
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public String getConfigFileName() {
+		return configFileName;
+	}
+	public void setConfigFileName(String configFileName) {
+		this.configFileName = configFileName;
+	}
+    
+	public boolean getAddDomainToUserName() {
+		return addDomainToUserName;
+	}
+	public void setAddDomainToUserName(boolean addDomainToUserName) {
+		this.addDomainToUserName = addDomainToUserName;
+	}
+    
+	public String getDomain() {
+		return domain;
+	}
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+    
+	public boolean getIsActive() {
+		return isActive;
+	}
+	public void setIsActive(boolean isActive) {
+		this.isActive = isActive;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public User getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(User insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+	public User getUpdatedby() {
+		return updatedby;
+	}
+	public void setUpdatedby(User updatedby) {
+		this.updatedby = updatedby;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java b/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java
new file mode 100644
index 0000000..b524a64
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java
@@ -0,0 +1,269 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "oauth_servers")
+@NamedQueries({
+		@NamedQuery(name = "getEnabledOAuthServers", query = "select s from OAuthServer as s where s.enabled = true and s.deleted = false"),
+		@NamedQuery(name = "getOAuthServerById", query = "select s from OAuthServer as s where s.id = :id"),
+		@NamedQuery(name = "getAllOAuthServers", query = "SELECT s FROM OAuthServer s WHERE s.deleted = false ORDER BY s.id"),
+		@NamedQuery(name = "countOAuthServers", query = "select count(s) from OAuthServer s WHERE s.deleted = false") })
+@Root
+public class OAuthServer implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private Long id;
+	
+	@Column(name = "name")
+	@Element(data = true)
+	private String name;
+	
+	@Column(name = "icon_url")
+	@Element(data = true)
+	private String iconUrl;
+	
+	@Column(name = "enabled")
+	@Element(data = true)
+	private boolean enabled;
+	
+	@Column(name = "client_id")
+	@Element(data = true)
+	private String clientId;
+	
+	@Column(name = "client_secret")
+	@Element(data = true)
+	private String clientSecret;
+	
+	@Column(name = "request_key_url")
+	@Element(data = true)
+	private String requestKeyUrl;
+	
+	@Column(name = "request_token_url")
+	@Element(data = true)
+	private String requestTokenUrl;
+	
+	@Column(name = "request_token_attributes")
+	@Element(data = true)
+	private String requestTokenAttributes;
+	
+	@Column(name = "request_method")
+	@Element(data = true)
+	@Enumerated(EnumType.STRING)
+	private RequestMethod requestTokenMethod = RequestMethod.POST;
+	
+	@Column(name = "request_info_url")
+	@Element(data = true)
+	private String requestInfoUrl;
+	
+	@Column(name = "login_param_name")
+	@Element(data = true)
+	private String loginParamName;
+	
+	@Column(name = "email_param_name")
+	@Element(data = true, required = false)
+	private String emailParamName;
+	
+	@Column(name = "firstname_param_name")
+	@Element(data = true, required = false)
+	private String firstnameParamName;
+	
+	@Column(name = "lastname_param_name")
+	@Element(data = true, required = false)
+	private String lastnameParamName;
+	
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getIconUrl() {
+		return iconUrl;
+	}
+
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public String getClientId() {
+		return clientId;
+	}
+
+	public void setClientId(String clientId) {
+		this.clientId = clientId;
+	}
+
+	public String getClientSecret() {
+		return clientSecret;
+	}
+
+	public void setClientSecret(String clientSecret) {
+		this.clientSecret = clientSecret;
+	}
+
+	public String getRequestKeyUrl() {
+		return requestKeyUrl;
+	}
+
+	public void setRequestKeyUrl(String requestKeyUrl) {
+		this.requestKeyUrl = requestKeyUrl;
+	}
+
+	public String getRequestTokenUrl() {
+		return requestTokenUrl;
+	}
+
+	public void setRequestTokenUrl(String requestTokenUrl) {
+		this.requestTokenUrl = requestTokenUrl;
+	}
+
+	public String getRequestTokenAttributes() {
+		return requestTokenAttributes;
+	}
+
+	public void setRequestTokenAttributes(String requestTokenAttributes) {
+		this.requestTokenAttributes = requestTokenAttributes;
+	}
+
+	public RequestMethod getRequestTokenMethod() {
+		return requestTokenMethod;
+	}
+
+	public void setRequestTokenMethod(RequestMethod requestTokenMethod) {
+		this.requestTokenMethod = requestTokenMethod;
+	}
+
+	public String getRequestInfoUrl() {
+		return requestInfoUrl;
+	}
+
+	public void setRequestInfoUrl(String requestInfoUrl) {
+		this.requestInfoUrl = requestInfoUrl;
+	}
+
+	public String getLoginParamName() {
+		return loginParamName;
+	}
+
+	public void setLoginParamName(String loginParamName) {
+		this.loginParamName = loginParamName;
+	}
+
+	public String getEmailParamName() {
+		return emailParamName;
+	}
+
+	public void setEmailParamName(String emailParamName) {
+		this.emailParamName = emailParamName;
+	}
+
+	public String getFirstnameParamName() {
+		return firstnameParamName;
+	}
+
+	public void setFirstnameParamName(String firstnameParamName) {
+		this.firstnameParamName = firstnameParamName;
+	}
+
+	public String getLastnameParamName() {
+		return lastnameParamName;
+	}
+
+	public void setLastnameParamName(String lastnameParamName) {
+		this.lastnameParamName = lastnameParamName;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	@Override
+	public String toString() {
+		return "OAuthServer [id=" + id + ", name=" + name + ", iconUrl=" + iconUrl + ", enabled=" + enabled
+				+ ", clientId=" + clientId + ", clientSecret=" + clientSecret + ", requestKeyUrl=" + requestKeyUrl
+				+ ", requestTokenUrl=" + requestTokenUrl + ", requestTokenAttributes=" + requestTokenAttributes
+				+ ", requestTokenMethod=" + requestTokenMethod + ", requestInfoUrl=" + requestInfoUrl
+				+ ", loginParamName=" + loginParamName + ", emailParamName=" + emailParamName + ", firstnameParamName="
+				+ firstnameParamName + ", lastnameParamName=" + lastnameParamName + ", deleted=" + deleted + "]";
+	}
+
+	public enum RequestMethod {
+		POST("post"), GET("get");
+
+		private String name;
+
+		private RequestMethod(String name) {
+			this.name = name;
+		}
+
+		@Override
+		public String toString() {
+			return name;
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java b/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java
new file mode 100644
index 0000000..1ab500c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.core.Persister;
+import org.slf4j.Logger;
+
+/**
+ * This Class is marshaled as an XML-Object and stored as a String in the DB to make
+ * it more easy to extend it
+ * 
+ * @author sebastianwagner
+ *
+ */
+@Root
+public class RemoteSessionObject {
+	private static final Logger log = Red5LoggerFactory.getLogger(RemoteSessionObject.class, webAppRootKey);
+	@Element(required = false)
+	private String username;
+	@Element(required = false)
+	private String firstname;
+	@Element(required = false)
+	private String lastname;
+	@Element(required = false)
+	private String pictureUrl;
+	@Element(required = false)
+	private String email;
+	@Element
+	private String externalUserId;
+	@Element
+	private String externalUserType;
+	
+	public RemoteSessionObject() {
+	}
+	
+	public RemoteSessionObject(String username, String firstname, String lastname,
+			String pictureUrl, String email) {
+		this(username, firstname, lastname, pictureUrl, email, "0", "");
+	}
+	
+	
+	/**
+	 * @param username
+	 * @param firstname
+	 * @param lastname
+	 * @param pictureUrl
+	 * @param email
+	 * @param externalUserId
+	 * @param externalUserType
+	 *
+	 * 06.09.2009 17:05:48
+	 * sebastianwagner
+	 * 
+	 * 
+	 */
+	public RemoteSessionObject(String username, String firstname,
+			String lastname, String pictureUrl, String email,
+			String externalUserId, String externalUserType) {
+		super();
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+		this.pictureUrl = pictureUrl;
+		this.email = email;
+		this.externalUserId = externalUserId;
+		this.externalUserType = externalUserType;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	public String getPictureUrl() {
+		return pictureUrl;
+	}
+	public void setPictureUrl(String pictureUrl) {
+		this.pictureUrl = pictureUrl;
+	}
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public String toXml() throws Exception {
+		StringWriter sw = new StringWriter();
+		Serializer serializer = new Persister();
+		serializer.write(this, sw);
+		return sw.toString();
+	}
+
+	public static RemoteSessionObject fromXml(String xml) {
+		Serializer serializer = new Persister();
+		try {
+			return serializer.read(RemoteSessionObject.class, new StringReader(xml));
+		} catch (Exception e) {
+			log.error("Unexpected error while restoring object from XML: " + xml, e);
+		}
+		return null;
+	}
+	
+	@Override
+	public String toString() {
+		return "RemoteSessionObject [username=" + username + ", firstname=" + firstname + ", lastname=" + lastname
+				+ ", pictureUrl=" + pictureUrl + ", email=" + email + ", externalUserId=" + externalUserId
+				+ ", externalUserType=" + externalUserType + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java b/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java
new file mode 100644
index 0000000..badff56
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "soaplogin")
+public class SOAPLogin implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long soapLoginId;
+	
+	@Column(name="hash")
+	private String hash;
+	
+	@Column(name="room_id")
+	private Long room_id;
+	
+	@Column(name="session_hash")
+	private String sessionHash;
+	
+	@Column(name="created")
+	private Date created;
+	
+	@Column(name="used")
+	private boolean used;
+	
+	@Column(name="use_date")
+	private Date useDate;
+	
+	@Column(name="becomemoderator")
+	private boolean becomemoderator;
+	
+	@Column(name="showaudiovideotest")
+	private boolean showAudioVideoTest;
+	
+	@Column(name="allow_same_url_multiple_times")
+	private boolean allowSameURLMultipleTimes;
+	
+	@Column(name="show_nick_name_dialog")
+	private boolean showNickNameDialog;
+	
+	@Column(name="client_url")
+	private String clientURL;
+	
+	@Column(name="room_recording_id")
+	private Long roomRecordingId;
+	
+	@Column(name="landing_zone")
+	private String landingZone;
+	
+	@Column(name="allow_recording")
+	private boolean allowRecording;
+	
+	public long getSoapLoginId() {
+		return soapLoginId;
+	}
+	public void setSoapLoginId(long soapLoginId) {
+		this.soapLoginId = soapLoginId;
+	}
+	
+	public String getHash() {
+		return hash;
+	}
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public String getSessionHash() {
+		return sessionHash;
+	}
+	public void setSessionHash(String sessionHash) {
+		this.sessionHash = sessionHash;
+	}
+	
+	public Date getCreated() {
+		return created;
+	}
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+	
+	public boolean getUsed() {
+		return used;
+	}
+	public void setUsed(boolean used) {
+		this.used = used;
+	}
+	
+	public Date getUseDate() {
+		return useDate;
+	}
+	public void setUseDate(Date useDate) {
+		this.useDate = useDate;
+	}
+	
+	public boolean getBecomemoderator() {
+		return becomemoderator;
+	}
+	public void setBecomemoderator(boolean becomemoderator) {
+		this.becomemoderator = becomemoderator;
+	}
+	
+	public boolean getShowAudioVideoTest() {
+		return showAudioVideoTest;
+	}
+	public void setShowAudioVideoTest(boolean showAudioVideoTest) {
+		this.showAudioVideoTest = showAudioVideoTest;
+	}
+	
+	public boolean getAllowSameURLMultipleTimes() {
+		return allowSameURLMultipleTimes;
+	}
+	public void setAllowSameURLMultipleTimes(boolean allowSameURLMultipleTimes) {
+		this.allowSameURLMultipleTimes = allowSameURLMultipleTimes;
+	}
+
+	public boolean getShowNickNameDialog() {
+		return showNickNameDialog;
+	}
+	public void setShowNickNameDialog(boolean showNickNameDialog) {
+		this.showNickNameDialog = showNickNameDialog;
+	}
+	
+	public String getClientURL() {
+		return clientURL;
+	}
+	public void setClientURL(String clientURL) {
+		this.clientURL = clientURL;
+	}
+	
+	public Long getRoomRecordingId() {
+		return roomRecordingId;
+	}
+	public void setRoomRecordingId(Long roomRecordingId) {
+		this.roomRecordingId = roomRecordingId;
+	}
+	
+	public String getLandingZone() {
+		return landingZone;
+	}
+	public void setLandingZone(String landingZone) {
+		this.landingZone = landingZone;
+	}
+	
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/Server.java b/src/db/java/org/apache/openmeetings/db/entity/server/Server.java
new file mode 100644
index 0000000..03a7402
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/Server.java
@@ -0,0 +1,302 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "getAllServers", query = "SELECT s FROM Server s WHERE s.deleted = false ORDER BY s.id"),
+		@NamedQuery(name = "getServerCount", query = "SELECT COUNT(s) FROM Server s WHERE s.deleted = false"),
+		@NamedQuery(name = "getServerById", query = "SELECT s FROM Server s LEFT JOIN FETCH s.insertedby LEFT JOIN FETCH s.updatedby WHERE s.deleted = false AND s.id = :id"),
+		@NamedQuery(name = "getServerByName", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.name LIKE :name"),
+		@NamedQuery(name = "getServerByAddress", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.address LIKE :address"),
+		@NamedQuery(name = "getServersWithNoUsers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.id NOT IN (SELECT u.server.id FROM User u where u.server.id IS NOT NULL)"),
+		@NamedQuery(name = "getServerWithMinimumUsers", query = "SELECT s.id, COUNT(u) AS cnt FROM User u JOIN u.server s WHERE s.deleted = false GROUP BY s.id ORDER BY cnt"),
+		@NamedQuery(name = "getActiveServers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.active = true") //
+})
+@Table(name = "server")
+@Root
+public class Server implements Serializable, IDataProviderEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private long id = 0;
+
+	@Column(name = "name")
+	@Element(data = true)
+	private String name;
+
+	@Column(name = "address")
+	@Element(data = true)
+	private String address;
+
+	@Column(name = "inserted")
+	public Date inserted;
+
+	@Column(name = "updated")
+	public Date updated;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "insertedby_id", updatable = true, insertable = true)
+	@ForeignKey(enabled = true)
+	public User insertedby;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "updatedby_id", updatable = true, insertable = true)
+	@ForeignKey(enabled = true)
+	public User updatedby;
+
+	@Lob
+	@Column(name = "comment_field", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "last_ping", nullable = true)
+	@Element(data = true, required = false)
+	private Calendar lastPing;
+	
+	@Column(name = "port", nullable = true)
+	@Element(data = true, required = false)
+	private int port;
+
+	@Column(name = "protocol", nullable = true)
+	@Element(data = true, required = false)
+	private String protocol;
+
+	@Column(name = "webapp", nullable = true)
+	@Element(data = true, required = false)
+	private String webapp;
+
+	@Column(name = "login", nullable = true)
+	@Element(data = true, required = false)
+	private String user;
+
+	@Column(name = "pass", nullable = true)
+	@Element(data = true, required = false)
+	private String pass;
+
+	@Column(name = "active", nullable = true)
+	@Element(data = true, required = false)
+	private boolean active;
+	
+	@Column(name = "deleted", nullable = false)
+	@Element(data = true)
+	private boolean deleted = false;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public User getInsertedby() {
+		return insertedby;
+	}
+
+	public void setInsertedby(User insertedby) {
+		this.insertedby = insertedby;
+	}
+
+	public User getUpdatedby() {
+		return updatedby;
+	}
+
+	public void setUpdatedby(User updatedby) {
+		this.updatedby = updatedby;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	public Calendar getLastPing() {
+		return lastPing;
+	}
+
+	public void setLastPing(Calendar lastPing) {
+		this.lastPing = lastPing;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public void setPort(int port) {
+		this.port = port;
+	}
+
+	public String getProtocol() {
+		return protocol;
+	}
+
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+
+	public String getWebapp() {
+		return webapp;
+	}
+
+	public void setWebapp(String webapp) {
+		this.webapp = webapp;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public String getPass() {
+		return pass;
+	}
+
+	public void setPass(String pass) {
+		this.pass = pass;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public boolean isActive() {
+		return active;
+	}
+
+	public void setActive(boolean active) {
+		this.active = active;
+	}
+
+	@Override
+	public String toString() {
+		return "Server [id=" + id + ", name=" + name + ", address=" + address
+				+ ", port=" + port + ", user=" + user + ", pass=" + pass
+				+ ", protocol=" + protocol 
+				+ ", active=" + active + ", webapp=" + webapp + ", deleted="
+				+ deleted + "]";
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((address == null) ? 0 : address.hashCode());
+		result = prime * result + (int) (id ^ (id >>> 32));
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		Server other = (Server) obj;
+		if (address == null) {
+			if (other.address != null) {
+				return false;
+			}
+		} else if (!address.equals(other.address)) {
+			return false;
+		}
+		if (id != other.id) {
+			return false;
+		}
+		return true;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java b/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java
new file mode 100644
index 0000000..f878e10
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getSessionById", query = "select c from Sessiondata as c "
+					+ "where c.session_id LIKE :session_id"),
+	@NamedQuery(name = "getSessionToDelete", query = "Select c from Sessiondata c "
+					+ "WHERE c.refresh_time < :refresh_time " + "AND ( "
+					+ "c.storePermanent IS NULL " + "OR "
+					+ "c.storePermanent = false " + ")")
+})
+@Table(name = "sessiondata")
+public class Sessiondata implements Serializable {
+	private static final long serialVersionUID = 1928177917452866750L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long id;
+	
+	@Column(name="user_id")
+	private Long user_id;
+	
+	@Column(name="session_id")
+	private String session_id;
+	
+	@Column(name="starttermin_time")
+	private Date starttermin_time;
+	
+	@Column(name="refresh_time")
+	private Date refresh_time;
+	
+	@Lob
+	@Column(name="sessionXml")
+	private String sessionXml;
+	
+	@Column(name="storePermanent")
+	private Boolean storePermanent;
+	
+	@Column(name="language_id")
+	private Long language_id;
+	
+	@Column(name="organization_id")
+	private Long organization_id;
+	
+	public Sessiondata() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+    
+    public Long getId() {
+        return id;
+    }
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    public Date getRefresh_time() {
+        return refresh_time;
+    }
+    public void setRefresh_time(Date refresh_time) {
+        this.refresh_time = refresh_time;
+    }
+    
+    public String getSession_id() {
+        return session_id;
+    }
+    public void setSession_id(String session_id) {
+        this.session_id = session_id;
+    }
+    
+    public Date getStarttermin_time() {
+        return starttermin_time;
+    }
+    public void setStarttermin_time(Date starttermin_time) {
+        this.starttermin_time = starttermin_time;
+    }
+    
+    public Long getUser_id() {
+        return user_id;
+    }
+    public void setUser_id(Long user_id) {
+        this.user_id = user_id;
+    }
+
+	public String getSessionXml() {
+		return sessionXml;
+	}
+	public void setSessionXml(String sessionXml) {
+		this.sessionXml = sessionXml;
+	}
+
+	public Boolean getStorePermanent() {
+		return storePermanent;
+	}
+	public void setStorePermanent(Boolean storePermanent) {
+		this.storePermanent = storePermanent;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Address.java b/src/db/java/org/apache/openmeetings/db/entity/user/Address.java
new file mode 100644
index 0000000..24b9f3a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Address.java
@@ -0,0 +1,207 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "address")
+@Root(name="address")
+public class Address implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long adresses_id;
+	
+	@Column(name = "additionalname")
+	@Element(data=true, required=false)
+	private String additionalname;
+	
+	@Lob
+	@Column(name = "comment_field", length=2048)
+	@Element(data=true, required=false)
+	private String comment;
+	
+	@Column(name = "fax")
+	@Element(data=true, required=false)
+	private String fax;
+	
+	@Column(name = "starttime")
+	@Element(data=true, required=false)
+	private Date starttime;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "state_id")
+	@Element(name="state_id", data=true, required=false)
+	private State states;
+	
+	@Column(name = "street")
+	@Element(data=true, required=false)
+	private String street;
+	
+	@Column(name = "town")
+	@Element(data=true, required=false)
+	private String town;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "zip")
+	@Element(data=true, required=false)
+	private String zip;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "email")
+	@Element(name="mail", data=true, required=false)
+	private String email;
+	
+	@Column(name = "phone")
+	@Element(data=true, required=false)
+	private String phone;
+
+	public String getAdditionalname() {
+		return additionalname;
+	}
+
+	public void setAdditionalname(String additionalname) {
+		this.additionalname = additionalname;
+	}
+
+	public Long getAdresses_id() {
+		return adresses_id;
+	}
+
+	public void setAdresses_id(Long adresses_id) {
+		this.adresses_id = adresses_id;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getFax() {
+		return fax;
+	}
+
+	public void setFax(String fax) {
+		this.fax = fax;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public State getStates() {
+		return states;
+	}
+
+	public void setStates(State states) {
+		this.states = states;
+	}
+
+	public String getStreet() {
+		return street;
+	}
+
+	public void setStreet(String street) {
+		this.street = street;
+	}
+
+	public String getTown() {
+		return town;
+	}
+
+	public void setTown(String town) {
+		this.town = town;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	@Override
+	public String toString() {
+		return "Address [id=" + adresses_id + ", states=" + states
+				+ ", street=" + street + ", town=" + town + ", zip=" + zip
+				+ ", deleted=" + deleted + ", email=" + email + ", phone="
+				+ phone + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java b/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java
new file mode 100644
index 0000000..f95e934
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java
@@ -0,0 +1,264 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "sipusers")
+@Root(name="asterisksipuser")
+public class AsteriskSipUser implements Serializable {
+	private static final long serialVersionUID = -565831761546365623L;
+	public enum Type {
+		friend,
+		user,
+		peer
+	}
+
+	@Id
+	@Column(name = "id")
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Element(data = true)
+	private long id;
+
+	@Column(name = "type", nullable = false, length=6)
+	@Enumerated(EnumType.STRING)
+	@Element(data=true, required=false)
+	private Type type = Type.friend;
+	
+	@Column(name = "name", nullable = false, length=128)
+	@Element(data=true, required=false)
+	private String name = ""; //	Varchar 128
+	
+	@Column(name = "secret", length=128)
+	@Element(data=true, required = false)
+	private String secret; //	Varchar 128
+	
+	@Column(name = "context", length=128)
+	@Element(data=true, required = false)
+	private String context; //	Varchar 128
+	
+	@Column(name = "host", nullable = false, length=128)
+	@Element(data=true, required = false)
+	private String host = "dynamic"; //	Varchar 128
+	
+	@Column(name = "ipaddr", nullable = false, length=128)
+	@Element(data=true, required=false)
+	private String ipaddr = ""; //	Varchar 128
+	
+	@Column(name = "port", nullable = false, length=8)
+	@Element(data=true, required=false)
+	private Integer port = 0; //	mediumint(8)
+	
+	@Column(name = "regseconds", nullable = false)
+	@Element(data=true, required = false)
+	private Long regseconds = 0L; //	Bigint
+	
+	@Column(name = "defaultuser", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String defaultuser; //	Varchar 128
+	
+	@Column(name = "fullcontact", length=512)
+	@Element(data=true, required = false)
+	private String fullcontact;
+	
+	@Column(name = "regserver", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String regserver; //	Varchar 128
+	
+	@Column(name = "useragent", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String useragent; //	Varchar 128
+	
+	@Column(name = "lastms")
+	@Element(data=true, required = false)
+	private Integer lastms; //	Integer
+	
+	@Column(name = "md5secret")
+	@Element(data=true, required = false)
+	private String md5secret;
+
+	@Column(name = "nat", nullable=false)
+	@Element(data=true, required = false)
+	private String nat = "force_rport,comedia";
+	
+	@Column(name = "callbackextension", nullable=true, length=250)
+	@Element(data=true, required = false)
+	private String callbackextension;
+
+	@Column(name = "allow", nullable=false, length=100)
+	@Element(data=true, required = false)
+	private String allow = "ulaw;alaw;h264";
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getSecret() {
+		return secret;
+	}
+
+	public void setSecret(String secret) {
+		this.secret = secret;
+	}
+
+	public String getContext() {
+		return context;
+	}
+
+	public void setContext(String context) {
+		this.context = context;
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public void setHost(String host) {
+		this.host = host;
+	}
+
+	public String getIpaddr() {
+		return ipaddr;
+	}
+
+	public void setIpaddr(String ipaddr) {
+		this.ipaddr = ipaddr;
+	}
+
+	public Integer getPort() {
+		return port;
+	}
+
+	public void setPort(Integer port) {
+		this.port = port;
+	}
+
+	public Long getRegseconds() {
+		return regseconds;
+	}
+
+	public void setRegseconds(Long regseconds) {
+		this.regseconds = regseconds;
+	}
+
+	public String getDefaultuser() {
+		return defaultuser;
+	}
+
+	public void setDefaultuser(String defaultuser) {
+		this.defaultuser = defaultuser;
+	}
+
+	public String getFullcontact() {
+		return fullcontact;
+	}
+
+	public void setFullcontact(String fullcontact) {
+		this.fullcontact = fullcontact;
+	}
+
+	public String getRegserver() {
+		return regserver;
+	}
+
+	public void setRegserver(String regserver) {
+		this.regserver = regserver;
+	}
+
+	public String getUseragent() {
+		return useragent;
+	}
+
+	public void setUseragent(String useragent) {
+		this.useragent = useragent;
+	}
+
+	public Integer getLastms() {
+		return lastms;
+	}
+
+	public void setLastms(Integer lastms) {
+		this.lastms = lastms;
+	}
+
+	public String getMd5secret() {
+		return md5secret;
+	}
+
+	public void setMd5secret(String md5secret) {
+		this.md5secret = md5secret;
+	}
+
+	public String getNat() {
+		return nat;
+	}
+
+	public void setNat(String nat) {
+		this.nat = nat;
+	}
+
+	public String getCallbackextension() {
+		return callbackextension;
+	}
+
+	public void setCallbackextension(String callbackextension) {
+		this.callbackextension = callbackextension;
+	}
+
+	public String getAllow() {
+		return allow;
+	}
+
+	public void setAllow(String allow) {
+		this.allow = allow;
+	}
+}
\ No newline at end of file
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java
new file mode 100644
index 0000000..9dace60
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getOrganisationById",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id = :id AND c.deleted = false")
+	, @NamedQuery(name="getOrganisationByName",
+		query="SELECT o FROM Organisation AS o WHERE o.name = :name AND o.deleted = false")
+	, @NamedQuery(name="getAnyOrganisationById",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id = :organisation_id")
+	, @NamedQuery(name="getOrganisationsByIds",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id IN :ids")
+	, @NamedQuery(name="getOrganisationsByUserId",
+		query="SELECT ou.organisation FROM User u, IN(u.organisation_users) ou WHERE u.deleted = false AND u.user_id = :user_id")
+	, @NamedQuery(name="getNondeletedOrganisations", query="SELECT o FROM Organisation o WHERE o.deleted = false ORDER BY o.organisation_id")
+	, @NamedQuery(name="countOrganisations", query="SELECT COUNT(c) FROM Organisation AS c WHERE c.deleted = false")
+})
+@Table(name = "organisation")
+@Root(name="organisation")
+public class Organisation implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private Long organisation_id;
+	
+	@Column(name="name")
+	@Element(data = true, required = false)
+	private String name;
+	
+	@Column(name="insertedby")
+	private Long insertedby;
+	
+	@Column(name="updatedby")
+	private Long updatedby;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+	
+
+	public Long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(Long insertedby) {
+		this.insertedby = insertedby;
+	}
+
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getOrganisation_id() {
+		return organisation_id;
+	}
+	public void setOrganisation_id(Long organisation_id) {
+		this.organisation_id = organisation_id;
+	}
+
+	public Long getUpdatedby() {
+		return updatedby;
+	}
+	public void setUpdatedby(Long updatedby) {
+		this.updatedby = updatedby;
+	}	
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	@Override
+	public String toString() {
+		return "Organisation [id=" + organisation_id + ", name="
+				+ name + ", deleted=" + deleted + "]";
+	}	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java
new file mode 100644
index 0000000..6fc328f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="deleteUsersFromOrganisation", query="DELETE FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="countOrganisationUsers", query="SELECT COUNT(c) FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="getOrganisationUsersById", query="SELECT c FROM Organisation_Users c WHERE c.organisation_users_id = :id")
+	, @NamedQuery(name="getOrganisationUsersByOrgId", query="SELECT c FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="isUserInOrganization", query="SELECT c FROM Organisation_Users c WHERE c.organisation.organisation_id = :orgId AND c.user.user_id = :userId")
+})
+@Table(name = "organisation_users")
+@Root(name="user_organisation")
+public class Organisation_Users implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long organisation_users_id;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "organisation_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="organisation_id", required=false)
+	private Organisation organisation;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@Column(name = "is_moderator")
+	@Element(data = true, required = false)
+	private Boolean isModerator;
+	
+	public Organisation_Users(Organisation organisation) {
+		this.organisation = organisation;
+	}
+	
+	public Organisation getOrganisation() {
+		return organisation;
+	}
+
+	public void setOrganisation(Organisation organisation) {
+		this.organisation = organisation;
+	}
+
+	public Long getOrganisation_users_id() {
+		return organisation_users_id;
+	}
+
+	public void setOrganisation_users_id(Long organisation_users_id) {
+		this.organisation_users_id = organisation_users_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIsModerator() {
+		return isModerator;
+	}
+
+	public void setIsModerator(Boolean isModerator) {
+		this.isModerator = isModerator;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((organisation_users_id == null) ? 0 : organisation_users_id.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Organisation_Users other = (Organisation_Users) obj;
+		if (organisation_users_id == null) {
+			if (other.organisation_users_id != null)
+				return false;
+		} else if (!organisation_users_id.equals(other.organisation_users_id))
+			return false;
+		return true;
+	}
+
+	@Override
+	public String toString() {
+		return "Organisation_Users [id="
+				+ organisation_users_id + ", organisation=" + organisation
+				+ ", user=" + user + ", deleted=" + deleted + "]";
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
new file mode 100644
index 0000000..89c5c3d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
@@ -0,0 +1,274 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getPrivateMessages", query = "SELECT c FROM PrivateMessage c ORDER BY c.id"),
+	@NamedQuery(name = "getPrivateMessageById", query = "SELECT c FROM PrivateMessage c WHERE c.id = :id "),
+	@NamedQuery(name = "updatePrivateMessagesReadStatus", query = "UPDATE PrivateMessage c SET c.isRead = :isRead " +
+			"WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "moveMailsToFolder", query = "UPDATE PrivateMessage c SET c.folderId = :folderId " +
+			"WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "deletePrivateMessages", query = "DELETE FROM PrivateMessage c WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "getPrivateMessagesByRoom", query = "SELECT c FROM PrivateMessage c WHERE c.room.rooms_id = :roomId ")
+})
+@Table(name = "private_message")
+@Root(name = "privatemessage")
+public class PrivateMessage implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	public final static long INBOX_FOLDER_ID = 0;
+	public final static long SENT_FOLDER_ID = -1;
+	public final static long TRASH_FOLDER_ID = -2;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, name = "privateMessageId")
+	private long id;
+
+	@Column(name = "subject")
+	@Element(data = true, required = false)
+	private String subject;
+
+	@Lob
+	@Column(name = "message")
+	@Element(data = true, required = false)
+	private String message;
+
+	@Column(name = "inserted")
+	@Element(data = true)
+	private Date inserted;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "from_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User from;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
+	@JoinColumn(name = "to_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User to;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
+	@JoinColumn(name = "owner_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User owner;
+
+	@Column(name = "booked_room")
+	@Element(data = true)
+	private boolean bookedRoom;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "rooms_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private Room room;
+
+	@Column(name = "is_read")
+	@Element(data = true)
+	private boolean isRead;
+
+	@Element(data = true)
+	private boolean isTrash;
+
+	@Column(name = "parent_message_id")
+	@Element(data = true, required = false)
+	private Long parentMessage;
+
+	@Column(name = "private_message_folder_id")
+	@Element(data = true, name = "privateMessageFolderId")
+	private Long folderId;
+
+	@Column(name = "is_contact_request")
+	@Element(data = true)
+	private boolean isContactRequest;
+
+	@Column(name = "user_contact_id")
+	@Element(data = true, required = false)
+	private Long userContactId;
+
+	public PrivateMessage() {
+	}
+	
+	public PrivateMessage(PrivateMessage copy) {
+		subject = copy.subject;
+		message = copy.message;
+		from = copy.from;
+		to = copy.to;
+		owner = copy.owner;
+		bookedRoom = copy.bookedRoom;
+		room = copy.room;
+		isRead = copy.isRead;
+		parentMessage = copy.parentMessage;
+		folderId = copy.folderId;
+		isContactRequest = copy.isContactRequest;
+		userContactId = copy.userContactId;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public User getFrom() {
+		return from;
+	}
+
+	public void setFrom(User from) {
+		this.from = from;
+	}
+
+	public User getTo() {
+		return to;
+	}
+
+	public void setTo(User to) {
+		this.to = to;
+	}
+
+	public User getOwner() {
+		return owner;
+	}
+
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+
+	public boolean isBookedRoom() {
+		return bookedRoom;
+	}
+
+	public void setBookedRoom(boolean bookedRoom) {
+		this.bookedRoom = bookedRoom;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Long getParentMessage() {
+		return parentMessage;
+	}
+
+	public void setParentMessage(Long parentMessage) {
+		this.parentMessage = parentMessage;
+	}
+
+	@Deprecated
+	public boolean getIsTrash() {
+		return TRASH_FOLDER_ID == folderId;
+	}
+
+	@Deprecated
+	public void setIsTrash(boolean isTrash) {
+		if (isTrash) {
+			folderId = TRASH_FOLDER_ID;
+		}
+	}
+
+	public Long getFolderId() {
+		return folderId;
+	}
+
+	public void setFolderId(Long folderId) {
+		this.folderId = folderId;
+	}
+
+	public Boolean getIsRead() {
+		return isRead;
+	}
+
+	public void setIsRead(Boolean isRead) {
+		this.isRead = isRead;
+	}
+
+	public Boolean getIsContactRequest() {
+		return isContactRequest;
+	}
+
+	public void setIsContactRequest(Boolean isContactRequest) {
+		this.isContactRequest = isContactRequest;
+	}
+
+	public Long getUserContactId() {
+		return userContactId;
+	}
+
+	public void setUserContactId(Long userContactId) {
+		this.userContactId = userContactId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
new file mode 100644
index 0000000..aa51e35
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "private_messages_folder")
+@Root(name="privatemessagefolder")
+public class PrivateMessageFolder implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 3689814412815025816L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private long privateMessageFolderId;
+	
+	@Column(name="folder_name")
+	@Element(data=true)
+	private String folderName;
+	
+	@Column(name="user_id")
+	@Element(data=true)
+	private Long userId;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	public long getPrivateMessageFolderId() {
+		return privateMessageFolderId;
+	}
+	public void setPrivateMessageFolderId(long privateMessageFolderId) {
+		this.privateMessageFolderId = privateMessageFolderId;
+	}
+	
+	public String getFolderName() {
+		return folderName;
+	}
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+	
+	public Long getUserId() {
+		return userId;
+	}
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java b/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java
new file mode 100644
index 0000000..2af38c6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "salutation")
+@NamedQueries({
+	@NamedQuery(name = "getSalutationById", query = "SELECT s FROM Salutation AS s WHERE s.salutations_id = :id")
+	, @NamedQuery(name = "getSalutations", query = "SELECT s FROM Salutation AS s")
+})
+@Root
+public class Salutation implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(name="id", data=true)
+	private Long salutations_id;
+	
+	@Column(name="name")
+	@Element(data=true, required=false)
+	private String name;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	@Element(data=true, required=false)
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public Long getSalutations_id() {
+		return salutations_id;
+	}
+	public void setSalutations_id(Long salutations_id) {
+		this.salutations_id = salutations_id;
+	}
+
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/State.java b/src/db/java/org/apache/openmeetings/db/entity/user/State.java
new file mode 100644
index 0000000..a6c6fec
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/State.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getStateById", query = "select c from State as c " +
+			"where c.state_id = :state_id AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getStates", query = "select c from State as c where c.deleted <> :deleted"),
+	@NamedQuery(name = "getStateByName", query = "select c from State as c " +
+			"where lower(c.name) LIKE :name AND c.deleted <> :deleted")
+})
+@Table(name = "state")
+public class State implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long state_id;
+	
+	@Column(name = "name")
+	private String name;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	@Column(name = "shortName")
+	private String shortName;
+	
+	@Column(name = "code")
+	private int code;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getState_id() {
+		return state_id;
+	}
+
+	public void setState_id(Long state_id) {
+		this.state_id = state_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	@Override
+	public String toString() {
+		return "State [id=" + state_id + ", name=" + name + ", deleted="
+				+ deleted + ", shortName=" + shortName + ", code=" + code + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/User.java b/src/db/java/org/apache/openmeetings/db/entity/user/User.java
new file mode 100644
index 0000000..b1ad229
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/User.java
@@ -0,0 +1,594 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.invalidPassword;
+
+import java.io.Serializable;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.CollectionTable;
+import javax.persistence.Column;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.openjpa.persistence.ElementDependent;
+import org.apache.openjpa.persistence.FetchAttribute;
+import org.apache.openjpa.persistence.FetchGroup;
+import org.apache.openjpa.persistence.FetchGroups;
+import org.apache.openjpa.persistence.LoadFetchGroup;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+/**
+ * Entity to store user data, password field is {@link FetchType#LAZY}, so that
+ * is why there is an extra udpate statement at this moment
+ * 
+ * @author sebawagner, solomax
+ * 
+ */
+@Entity
+@FetchGroups({
+	@FetchGroup(name = "backupexport", attributes = { @FetchAttribute(name = "password") })
+	, @FetchGroup(name = "orgUsers", attributes = { @FetchAttribute(name = "organisation_users")})
+})
+@NamedQueries({
+	@NamedQuery(name = "getUserById", query = "SELECT u FROM User u WHERE u.user_id = :id"),
+	@NamedQuery(name = "getUsersByIds", query = "select c from User c where c.user_id IN :ids"),
+	@NamedQuery(name = "getUserByLogin", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.login = :login AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"),
+	@NamedQuery(name = "getUserByEmail", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.adresses.email = :email AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"),
+	@NamedQuery(name = "getUserByHash",  query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.resethash = :resethash"),
+	@NamedQuery(name = "getContactByEmailAndUser", query = "SELECT u FROM User u WHERE u.deleted = false AND u.adresses.email = :email AND u.type = :type AND u.ownerId = :ownerId"), 
+	@NamedQuery(name = "selectMaxFromUsersWithSearch", query = "select count(c.user_id) from User c "
+			+ "where c.deleted = false " + "AND ("
+			+ "lower(c.login) LIKE :search "
+			+ "OR lower(c.firstname) LIKE :search "
+			+ "OR lower(c.lastname) LIKE :search )"),
+	@NamedQuery(name = "getAllUsers", query = "SELECT u FROM User u ORDER BY u.user_id"),
+	@NamedQuery(name = "checkPassword", query = "select count(c.user_id) from User c "
+			+ "where c.deleted = false " //
+			+ "AND c.user_id = :userId " //
+			+ "AND c.password LIKE :password"), //
+	@NamedQuery(name = "updatePassword", query = "UPDATE User u SET u.password = :password WHERE u.user_id = :userId"), //
+	@NamedQuery(name = "getNondeletedUsers", query = "SELECT u FROM User u WHERE u.deleted = false"),
+	@NamedQuery(name = "countNondeletedUsers", query = "SELECT COUNT(u) FROM User u WHERE u.deleted = false"),
+	@NamedQuery(name = "getUsersByOrganisationId", query = "SELECT u FROM User u WHERE u.deleted = false AND u.organisation_users.organisation.organisation_id = :organisation_id"), 
+	@NamedQuery(name = "getExternalUser", query = "SELECT u FROM User u WHERE u.deleted = false AND u.externalUserId LIKE :externalId AND u.externalUserType LIKE :externalType"),
+	@NamedQuery(name = "getUserByLoginOrEmail", query = "SELECT u from User u WHERE u.deleted = false AND u.type = :type AND (u.login = :userOrEmail OR u.adresses.email = :userOrEmail)")
+})
+@Table(name = "om_user")
+@Root(name = "user")
+public class User implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	
+	@XmlType(namespace="org.apache.openmeetings.user.user.right")
+	public enum Right {
+		Admin			// access to Admin module
+		, Room			// enter the room
+		, Dashboard		// access the dashboard
+		, Login			// login to Om internal DB
+		, Soap			// use rest/soap calls
+	}
+	
+	@XmlType(namespace="org.apache.openmeetings.user.user.type")
+	public enum Type {
+		user
+		, ldap
+		, oauth
+		, external
+		, contact
+	}
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, name = "user_id")
+	private Long user_id;
+
+	@Column(name = "age")
+	@Element(data = true, required = false)
+	private Date age;
+
+	@Column(name = "firstname")
+	@Element(data = true, required = false)
+	private String firstname;
+
+	@Column(name = "lastlogin")
+	private Date lastlogin;
+
+	@Column(name = "lastname")
+	@Element(data = true, required = false)
+	private String lastname;
+
+	@Column(name = "lasttrans")
+	@Element(data = true, required = false)
+	private Long lasttrans;
+
+	@Column(name = "login")
+	@Element(data = true, required = false)
+	private String login;
+
+	@Basic(fetch = FetchType.LAZY)
+	@Column(name = "password")
+	@LoadFetchGroup("backupexport")
+	@Element(name = "pass", data = true, required = false)
+	private String password;
+
+	@Column(name = "regdate")
+	@Element(data = true, required = false)
+	private Date regdate;
+
+	@Column(name = "salutations_id")
+	@Element(name = "title_id", data = true, required = false)
+	private Long salutations_id;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "pictureuri")
+	@Element(data = true, required = false)
+	private String pictureuri;
+
+	@Column(name = "deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+
+	@Column(name = "language_id")
+	@Element(name = "language_id", data = true, required = false)
+	private Long language_id;
+
+	@Column(name = "resethash")
+	@Element(data = true, required = false)
+	private String resethash;
+
+	@Column(name = "activatehash")
+	@Element(data = true, required = false)
+	private String activatehash;
+
+	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "adresses_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	@Element(name = "address", required = false)
+	private Address adresses;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@ElementList(name = "organisations", required = false)
+	@ElementDependent
+	private List<Organisation_Users> organisation_users = new ArrayList<Organisation_Users>();
+
+	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@PrimaryKeyJoinColumn(name="sip_user_id", referencedColumnName="id")
+	@Element(name = "sipUser", required = false)
+	private AsteriskSipUser sipUser;
+
+	// Vars to simulate external Users
+	@Column(name = "externalUserId")
+	@Element(data = true, required = false)
+	private String externalUserId;
+
+	@Column(name = "externalUserType")
+	@Element(data = true, required = false)
+	private String externalUserType;
+
+	/**
+	 * java.util.TimeZone Id
+	 */
+	@Column(name = "time_zone_id")
+	@Element(data = true, required = false)
+	private String timeZoneId;
+
+	@Transient
+	private Sessiondata sessionData;
+
+	@Column(name = "forceTimeZoneCheck")
+	@Element(data = true, required = false)
+	private Boolean forceTimeZoneCheck;
+
+	@Column(name = "sendSMS")
+	@Element(data = false, required = false)
+	private boolean sendSMS;
+
+	@Column(name = "user_offers")
+	@Element(data = true, required = false)
+	private String userOffers;
+
+	@Column(name = "user_searchs")
+	@Element(data = true, required = false)
+	private String userSearchs;
+
+	@Column(name = "show_contact_data")
+	@Element(data = true, required = false)
+	private Boolean showContactData;
+
+	@Column(name = "show_contact_data_to_contacts")
+	@Element(data = true, required = false)
+	private Boolean showContactDataToContacts;
+
+	@Column(name = "type")
+	@Element(data = true, required = false)
+	@Enumerated(EnumType.STRING)
+	private Type type = Type.user;
+
+	@Column(name = "owner_id")
+	@Element(data = true, required = false)
+	private Long ownerId;
+	
+	@ElementCollection(fetch = FetchType.EAGER)
+	@Column(name = "om_right")
+	@CollectionTable(name = "om_user_right", joinColumns = @JoinColumn(name = "user_id"))
+	@Enumerated(EnumType.STRING)
+	@ElementList(name="rights", data = true, required = false)
+	private Set<Right> rights = new HashSet<User.Right>();
+	
+	@Column(name = "domain_id")
+	@Element(data = true, required = false)
+	private Long domainId; // LDAP config id for LDAP, OAuth server id for OAuth
+	
+	public Long getUser_id() {
+		return user_id;
+	}
+
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+	public Address getAdresses() {
+		return adresses;
+	}
+
+	public void setAdresses(Address adresses) {
+		this.adresses = adresses;
+	}
+
+	public Date getAge() {
+		return age;
+	}
+
+	public void setAge(Date age) {
+		this.age = age == null ? new Date() :age;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public Date getLastlogin() {
+		return lastlogin;
+	}
+
+	public void setLastlogin(Date lastlogin) {
+		this.lastlogin = lastlogin;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public Long getLasttrans() {
+		return lasttrans;
+	}
+
+	public void setLasttrans(Long lasttrans) {
+		this.lasttrans = lasttrans;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String login) {
+		this.login = login;
+	}
+
+	public void updatePassword(ConfigurationDao configDao, String pass) throws NoSuchAlgorithmException {
+		updatePassword(configDao, pass, false);
+	}
+	
+	public void updatePassword(ConfigurationDao configDao, String pass, boolean empty) throws NoSuchAlgorithmException {
+		if (!empty) {
+			if (invalidPassword(pass, configDao)) {
+				throw new RuntimeException("Password of invalid length is provided");
+			}
+		}
+		String sipEnabled = configDao.getConfValue("red5sip.enable", String.class, "no");
+        if("yes".equals(sipEnabled)) {
+        	if (getSipUser() == null) {
+        		setSipUser(new AsteriskSipUser());
+        	}
+        	AsteriskSipUser u = getSipUser();
+        	String defaultRoomContext = configDao.getConfValue("red5sip.exten_context", String.class, "rooms");
+        	u.setName(login);
+        	u.setDefaultuser(login);
+        	u.setMd5secret(MD5.do_checksum(login + ":asterisk:" + pass));
+        	u.setContext(defaultRoomContext);
+        	u.setHost("dynamic");
+        } else {
+        	setSipUser(null);
+        }
+		password = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(pass);
+	}
+	
+	public String getPassword() {
+		return password;
+	}
+
+	@Deprecated //should not be used directly (for bean usage only)
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public Date getRegdate() {
+		return regdate;
+	}
+
+	public void setRegdate(Date regdate) {
+		this.regdate = regdate;
+	}
+
+	public Long getSalutations_id() {
+		return salutations_id;
+	}
+
+	public void setSalutations_id(Long salutations_id) {
+		this.salutations_id = salutations_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getPictureuri() {
+		return pictureuri;
+	}
+
+	public void setPictureuri(String pictureuri) {
+		this.pictureuri = pictureuri;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public List<Organisation_Users> getOrganisation_users() {
+		if (organisation_users == null) {
+			organisation_users = new ArrayList<Organisation_Users>();
+		}
+		return organisation_users;
+	}
+
+	public void setOrganisation_users(List<Organisation_Users> organisation_users) {
+		if (organisation_users != null) {
+			this.organisation_users = organisation_users;
+		}
+	}
+
+	public String getResethash() {
+		return resethash;
+	}
+
+	public void setResethash(String resethash) {
+		this.resethash = resethash;
+	}
+
+	public String getActivatehash() {
+		return activatehash;
+	}
+
+	public void setActivatehash(String activatehash) {
+		this.activatehash = activatehash;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public Sessiondata getSessionData() {
+		return sessionData;
+	}
+
+	public void setSessionData(Sessiondata sessionData) {
+		this.sessionData = sessionData;
+	}
+
+	public AsteriskSipUser getSipUser() {
+		return sipUser;
+	}
+
+	public void setSipUser(AsteriskSipUser sipUser) {
+		this.sipUser = sipUser;
+	}
+
+	public String getTimeZoneId() {
+		return timeZoneId;
+	}
+	public void setTimeZoneId(String timeZoneId) {
+		this.timeZoneId = timeZoneId;
+	}
+
+	public Boolean getForceTimeZoneCheck() {
+		return forceTimeZoneCheck;
+	}
+
+	public void setForceTimeZoneCheck(Boolean forceTimeZoneCheck) {
+		this.forceTimeZoneCheck = forceTimeZoneCheck;
+	}
+
+	public boolean getSendSMS() {
+		return sendSMS;
+	}
+
+	public void setSendSMS(boolean sendSMS) {
+		this.sendSMS = sendSMS;
+	}
+
+	public String getUserOffers() {
+		return userOffers;
+	}
+
+	public void setUserOffers(String userOffers) {
+		this.userOffers = userOffers;
+	}
+
+	public String getUserSearchs() {
+		return userSearchs;
+	}
+
+	public void setUserSearchs(String userSearchs) {
+		this.userSearchs = userSearchs;
+	}
+
+	public Boolean getShowContactData() {
+		return showContactData;
+	}
+
+	public void setShowContactData(Boolean showContactData) {
+		this.showContactData = showContactData;
+	}
+
+	public Boolean getShowContactDataToContacts() {
+		return showContactDataToContacts;
+	}
+
+	public void setShowContactDataToContacts(Boolean showContactDataToContacts) {
+		this.showContactDataToContacts = showContactDataToContacts;
+	}
+
+	public String getPhoneForSMS() {
+		return getSendSMS() ? getAdresses().getPhone() : "";
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+	
+	public Long getOwnerId(){
+		return ownerId;
+	}
+	
+	public void setOwnerId(Long ownerId){
+		this.ownerId = ownerId;
+	}
+
+	public Set<Right> getRights() {
+		return rights;
+	}
+
+	public void setRights(Set<Right> rights) {
+		this.rights = rights;
+	}
+
+	public Long getDomainId() {
+		return domainId;
+	}
+
+	public void setDomainId(Long domainId) {
+		this.domainId = domainId;
+	}
+
+	@Override
+	public String toString() {
+		return "User [id=" + user_id + ", firstname=" + firstname
+				+ ", lastname=" + lastname + ", login=" + login
+				+ ", pictureuri=" + pictureuri + ", deleted=" + deleted
+				+ ", language_id=" + language_id + ", adresses=" + adresses
+				+ ", externalId=" + externalUserId + ", externalType=" + externalUserType
+				+ ", type=" + type + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java b/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java
new file mode 100644
index 0000000..7442c41
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "deleteUserContact", query = "delete from UserContact u where u.userContactId = :userContactDeleteId"),
+	@NamedQuery(name = "deleteAllUserContacts", query = "delete from UserContact u where u.owner.user_id = :ownerId"),
+	@NamedQuery(name = "checkUserContacts", query = "select count(c.userContactId) from UserContact c " +
+			"where c.contact.user_id = :user_id AND c.owner.user_id = :ownerId "),
+	@NamedQuery(name = "getContactsByHash", query = "select c from UserContact c " +
+			"where c.hash like :hash "),
+	@NamedQuery(name = "getContactsByUserAndStatus", query = "select c from UserContact c " +
+			"where c.owner.user_id = :ownerId " +
+			"AND c.pending = :pending " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getUserContactByShareCalendar", query = "select c from UserContact c "
+			+ "where c.contact.user_id = :userId "
+			+ "AND c.owner.user_id = :contactId "
+			+ "AND c.shareCalendar = :shareCalendar "
+			+ "AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactsByShareCalendar", query = "select c from UserContact c " +
+			"where c.contact.user_id = :contactId " +
+			"AND c.shareCalendar = :shareCalendar " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactRequestsByUserAndStatus", query = "select c from UserContact c " +
+			"where c.contact.user_id = :user_id " +
+			"AND c.pending = :pending " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactsByUser", query = "SELECT c FROM UserContact c " +
+			"WHERE c.contact.user_id = :user_id " +
+			"AND c.contact.deleted <> true ORDER BY c.pending DESC"),
+	@NamedQuery(name = "countContactsByUser", query = "select COUNT(c) from UserContact c " +
+			"where c.contact.user_id = :user_id " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getUserContactsById", query = "SELECT c FROM UserContact c WHERE c.userContactId = :userContactId"),
+	@NamedQuery(name = "getUserContacts", query = "SELECT c FROM UserContact c ORDER BY c.userContactId")
+})
+@Table(name = "user_contact")
+@Root(name="usercontact")
+public class UserContact implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data = true, name = "userContactId")
+	private long userContactId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id")
+	@Element(data=true, required=false)
+	private User contact;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="owner_id")
+	@ForeignKey(enabled = true)
+	@Element(data=true, required=false)
+	private User owner;
+	
+	@Column(name="pending")
+	@Element(data=true)
+	private boolean pending;
+	
+	@Column(name="hash")
+	@Element(data=true, required = false)
+	private String hash;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	@Column(name="share_calendar")
+	@Element(data=true, required=false)
+	private boolean shareCalendar;
+	
+	public long getUserContactId() {
+		return userContactId;
+	}
+	public void setUserContactId(long userContactId) {
+		this.userContactId = userContactId;
+	}
+	
+	public User getContact() {
+		return contact;
+	}
+	public void setContact(User contact) {
+		this.contact = contact;
+	}
+	
+	public User getOwner() {
+		return owner;
+	}
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+	
+	public boolean getPending() {
+		return pending;
+	}
+	public void setPending(boolean pending) {
+		this.pending = pending;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public String getHash() {
+		return hash;
+	}
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+	
+	public boolean getShareCalendar() {
+		return shareCalendar;
+	}
+	public void setShareCalendar(boolean shareCalendar) {
+		this.shareCalendar = shareCalendar;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java b/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java
new file mode 100644
index 0000000..4942482
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_data")
+public class Userdata implements Serializable {
+	private static final long serialVersionUID = 8365799229794940172L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+    private Long data_id;
+	
+	@Column(name="user_id")
+    private Long user_id;
+	
+	@Column(name="data_key")
+    private String data_key;
+	
+	@Column(name="data")
+    private String data;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Lob
+	@Column(name = "comment_field")
+    private String comment;
+	
+	@Column(name = "deleted")
+    private boolean deleted;
+
+	public String getComment() {
+		return comment;
+	}
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getData() {
+		return data;
+	}
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	public String getData_key() {
+		return data_key;
+	}
+	public void setData_key(String data_key) {
+		this.data_key = data_key;
+	}
+    
+	public Long getData_id() {
+		return data_id;
+	}
+	public void setData_id(Long data_id) {
+		this.data_id = data_id;
+	}
+
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getUser_id() {
+		return user_id;
+	}
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java b/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java
new file mode 100644
index 0000000..2e424be
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getLanguagesDir;
+import static org.apache.openmeetings.util.OmFileHelper.nameOfTimeZoneFile;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TimezoneUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(TimezoneUtil.class, webAppRootKey);
+	private static final Map<String, String> ICAL_TZ_MAP = new Hashtable<String, String>();
+
+	private static void initTimeZones() {
+		SAXReader reader = new SAXReader();
+		Document document;
+		try {
+			ICAL_TZ_MAP.clear();
+			document = reader.read(new File(getLanguagesDir(), nameOfTimeZoneFile));
+
+			Element root = document.getRootElement();
+
+			for (@SuppressWarnings("rawtypes")
+			Iterator it = root.elementIterator("timezone"); it.hasNext();) {
+				Element item = (Element) it.next();
+				String timeZoneName = item.attributeValue("name");
+				String iCal = item.attributeValue("iCal");
+				ICAL_TZ_MAP.put(timeZoneName, iCal);
+			}
+		} catch (DocumentException e) {
+			log.error("Unexpected error while reading old time zone list", e);
+		}
+	}
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	/**
+	 * Parameters: ID - the ID for a TimeZone, either an abbreviation such as "PST", a full name such as
+	 * "America/Los_Angeles", or a custom ID such as "GMT-8:00". Note that the support of abbreviations is for JDK 1.1.x
+	 * compatibility only and full names should be used.
+	 * 
+	 * Returns: the specified TimeZone, or the GMT zone if the given ID cannot be understood. <br/>
+	 * <br/>
+	 * TODO: Fall-back mechanism and maybe a log output if the given timeZoneId is not found in the list of available
+	 * TimeZones of the current java.util.TimeZone package of the Java SDK the the user is running <br/>
+	 * 
+	 * @param timeZoneId
+	 * @return
+	 */
+
+	public TimeZone getTimeZone(String timeZoneId) {
+
+		if (timeZoneId == null || timeZoneId.equals("")) {
+			return getDefaultTimeZone();
+		}
+
+		// see TODO in comments
+
+		return TimeZone.getTimeZone(timeZoneId);
+	}
+
+	/**
+	 * @return The current server configured time zone in the table configuration key: "default.timezone"
+	 */
+	public TimeZone getDefaultTimeZone() {
+
+		String defaultTzName = configurationDao.getConfValue("default.timezone", String.class, "Europe/Berlin");
+
+		TimeZone timeZoneByOmTimeZone = TimeZone.getTimeZone(defaultTzName);
+
+		if (timeZoneByOmTimeZone != null) {
+			return timeZoneByOmTimeZone;
+		}
+
+		// If everything fails take the servers default one
+		log.error("There is no correct time zone set in the configuration of OpenMeetings for the key default.timezone or key is missing in table, using default locale!");
+		return TimeZone.getDefault();
+
+	}
+
+	/**
+	 * Returns the timezone based on the user profile, if not return the timezone from the server
+	 * 
+	 * @param user
+	 * @return
+	 */
+	public TimeZone getTimeZone(User user) {
+
+		if (user != null && user.getTimeZoneId() != null) {
+
+			TimeZone timeZone = TimeZone.getTimeZone(user.getTimeZoneId());
+
+			if (timeZone != null) {
+				return timeZone;
+			}
+
+		}
+
+		// if user has not time zone get one from the server configuration
+		return getDefaultTimeZone();
+	}
+
+	/**
+	 * Return the timezone based on our internal jName
+	 * 
+	 * @param jName
+	 * @return
+	 */
+	public TimeZone getTimezoneByInternalJName(String jName) {
+		if (ICAL_TZ_MAP.isEmpty()) {
+			initTimeZones();
+		}
+		String omTimeZone = ICAL_TZ_MAP.get(jName);
+
+		if (omTimeZone == null) {
+			String err = String.format("There is not omTimeZone for this jName: '%s'", jName);
+			log.error(err);
+			throw new RuntimeException(err);
+		}
+		
+		TimeZone timeZone = TimeZone.getTimeZone(omTimeZone);
+
+		if (timeZone != null) {
+			return timeZone;
+		}
+		// if user has not time zone get one from the server configuration
+		return getDefaultTimeZone();
+	}
+
+	/**
+	 * We ignore the fact that a Date Object is always in UTC internally and treat it as if it contains only dd.mm.yyyy
+	 * HH:mm:ss. We need to do this cause we cannot trust the Date Object send from the client. We have the timeZone
+	 * information additional to the Date, so we use it to transform it now to a Calendar Object.
+	 * 
+	 * @param dateTime
+	 * @param timezone
+	 * @return
+	 */
+	public static Calendar getCalendarInTimezone(String dateTimeStr, TimeZone timezone) {
+
+		Date dateTime = CalendarPatterns.parseImportDate(dateTimeStr);
+
+		Calendar calOrig = Calendar.getInstance();
+		calOrig.setTime(dateTime);
+
+		Calendar cal = Calendar.getInstance(timezone);
+		cal.set(Calendar.YEAR, calOrig.get(Calendar.YEAR));
+		cal.set(Calendar.MONTH, calOrig.get(Calendar.MONTH));
+		cal.set(Calendar.DATE, calOrig.get(Calendar.DATE));
+		cal.set(Calendar.HOUR_OF_DAY, calOrig.get(Calendar.HOUR_OF_DAY));
+		cal.set(Calendar.MINUTE, calOrig.get(Calendar.MINUTE));
+		cal.set(Calendar.SECOND, calOrig.get(Calendar.SECOND));
+		cal.set(Calendar.MILLISECOND, 0);
+
+		return cal;
+	}
+
+	public static long _getOffset(TimeZone timezone) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTimeZone(timezone);
+		return cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET);
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/util/UserHelper.java b/src/db/java/org/apache/openmeetings/db/util/UserHelper.java
new file mode 100644
index 0000000..9983b7f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/util/UserHelper.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+
+public class UserHelper {
+	public static int getMinLoginLength(ConfigurationDao cfgDao) {
+		return cfgDao.getConfValue(CONFIG_LOGIN_MIN_LENGTH_KEY, Integer.class, "" + USER_LOGIN_MINIMUM_LENGTH);
+	}
+	
+	public static int getMinPasswdLength(ConfigurationDao cfgDao) {
+		return cfgDao.getConfValue(CONFIG_PASS_MIN_LENGTH_KEY, Integer.class, "" + USER_PASSWORD_MINIMUM_LENGTH);
+	}
+	
+	public static boolean invalidPassword(String pass, ConfigurationDao cfgDao) {
+		return (pass == null || pass.length() < getMinPasswdLength(cfgDao));
+	}
+}
diff --git a/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java b/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java
new file mode 100644
index 0000000..97094a8
--- /dev/null
+++ b/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.doc;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.RootDoc;
+import com.sun.javadoc.Tag;
+import com.sun.tools.doclets.standard.Standard;
+
+public class WebServiceDoclet extends Standard {
+	private static final Logger log = Red5LoggerFactory.getLogger(WebServiceDoclet.class, webAppRootKey);
+	
+	static final String baseTemplatePath = "xdocs";
+	static final String basePath = "docs";
+	static final String templateName = "ApiMethodsTemplate.vm";
+	static final String templateNameIndex = "ApiClassesTemplate.vm";
+
+	public static boolean start(RootDoc root) {
+
+		try {
+			
+			Velocity.init();
+			out("Start WebServiceDoclet templateNameNew " + templateName);
+			
+			ArrayList<Map<String,String>> classesParsed = new ArrayList<Map<String,String>>(root.classes().length);
+			
+			// iterate over all classes.
+			ClassDoc[] classes = root.classes();
+			for (int i = 0; i < classes.length; i++) {
+				// iterate over all methods and print their names.
+				
+				VelocityContext vContext = new VelocityContext();
+				vContext.put("className", classes[i].name());
+				vContext.put("classComment", classes[i].commentText());
+				
+				String defaultOutputName = classes[i].name();
+				for (Tag tag : classes[i].tags()) {
+					if (tag.name().equals("@webservice")) {
+						defaultOutputName = tag.text();
+					}
+				}
+				
+				vContext.put("webServiceName", defaultOutputName);
+				
+				HashMap<String,String> classItem = new HashMap<String,String>();
+				classItem.put("name",defaultOutputName);
+				classItem.put("comment",classes[i].commentText());
+				classesParsed.add(classItem);
+				
+				vContext.put("methods", classes[i].methods());
+				
+				FileWriter strWriter = new FileWriter(basePath
+						+ File.separatorChar + defaultOutputName + ".html");
+
+				Velocity.mergeTemplate(baseTemplatePath + File.separatorChar
+						+ templateName, "UTF-8", vContext, strWriter);
+				
+				strWriter.flush();
+				strWriter.close();
+
+			}
+			
+			
+			VelocityContext vIndexContext = new VelocityContext();
+			vIndexContext.put("classes", classesParsed);
+			
+			FileWriter newFileIndexWriter = new FileWriter(basePath
+					+ File.separatorChar + "WebserviceIndex.html");
+
+			Velocity.mergeTemplate(baseTemplatePath + File.separatorChar
+					+ templateNameIndex, "UTF-8", vIndexContext, newFileIndexWriter);
+			
+			newFileIndexWriter.flush();
+			newFileIndexWriter.close();
+			
+
+		} catch (Exception err) {
+			log.error("[start]", err);
+		}
+
+		// No error processing done, simply return true.
+		return true;
+	}
+
+	private static void out(String msg) {
+		System.out.println(msg);
+	}
+
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java
new file mode 100644
index 0000000..560b13f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class AppointmentCategoryConverter  extends OmConverter<AppointmentCategory> {
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+	
+	public AppointmentCategoryConverter() {
+		//default constructor is for export
+	}
+	
+	public AppointmentCategoryConverter(AppointmentCategoryDao appointmentCategoryDaoImpl) {
+		this.appointmentCategoryDaoImpl = appointmentCategoryDaoImpl;
+	}
+	
+	public AppointmentCategory read(InputNode node) throws Exception {
+		return appointmentCategoryDaoImpl.get(getlongValue(node));
+	}
+
+	public void write(OutputNode node, AppointmentCategory value)
+			throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getCategoryId());
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java
new file mode 100644
index 0000000..947d769
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class AppointmentConverter extends OmConverter<Appointment> {
+	private AppointmentDao appointmentDao;
+	private Map<Long, Long> idMap;
+	
+	public AppointmentConverter() {
+		//default constructor is for export
+	}
+	
+	public AppointmentConverter(AppointmentDao appointmentDao, Map<Long, Long> idMap) {
+		this.appointmentDao = appointmentDao;
+		this.idMap = idMap;
+	}
+	
+	public Appointment read(InputNode node) throws Exception {
+		long oldId = getlongValue(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		Appointment a = appointmentDao.getAppointmentByIdBackup(newId);
+		return a == null ? new Appointment() : a;
+	}
+
+	public void write(OutputNode node, Appointment value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
new file mode 100644
index 0000000..62c7172
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class AppointmentReminderTypeConverter extends OmConverter<AppointmentReminderTyps> {
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+	
+	public AppointmentReminderTypeConverter() {
+		//default constructor is for export
+	}
+	
+	public AppointmentReminderTypeConverter(AppointmentReminderTypDao appointmentReminderTypDaoImpl) {
+		this.appointmentReminderTypDaoImpl = appointmentReminderTypDaoImpl;
+	}
+	
+	public AppointmentReminderTyps read(InputNode node) throws Exception {
+		return appointmentReminderTypDaoImpl.get(getlongValue(node));
+	}
+
+	public void write(OutputNode node, AppointmentReminderTyps value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getTypId());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/BackupExport.java b/src/install/java/org/apache/openmeetings/backup/BackupExport.java
new file mode 100644
index 0000000..8bbe495
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/BackupExport.java
@@ -0,0 +1,593 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.URI;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.convert.Registry;
+import org.simpleframework.xml.convert.RegistryStrategy;
+import org.simpleframework.xml.core.Persister;
+import org.simpleframework.xml.strategy.Strategy;
+import org.simpleframework.xml.stream.Format;
+import org.simpleframework.xml.stream.NodeBuilder;
+import org.simpleframework.xml.stream.OutputNode;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class BackupExport {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupExport.class, webAppRootKey);
+	private static final String BACKUP_COMMENT = 
+			"###############################################\n"
+			+ "This File is auto-generated by the Backup Tool \n"
+			+ "you should use the BackupPanel to modify or change this file \n"
+			+ "see http://openmeetings.apache.org/Upgrade.html for Details \n"
+			+ "###############################################\n";
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private PrivateMessageFolderDao privateMessageFolderDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private ChatDao chatDao;
+	@Autowired
+	private OAuth2Dao auth2Dao;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomOrganisationDao roomOrganisationDao;
+
+	public void performExport(File filePath, File backup_dir, boolean includeFiles, ProgressHolder progressHolder) throws Exception {
+		if (!backup_dir.exists()) {
+			backup_dir.mkdirs();
+		}
+		Serializer simpleSerializer = new Persister();
+		
+		progressHolder.setProgress(0);
+		/*
+		 * ##################### Backup Organizations
+		 */
+		writeList(simpleSerializer, backup_dir, "organizations.xml",
+				"organisations", organisationDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(5);
+		/*
+		 * ##################### Backup Users
+		 */
+		exportUsers(backup_dir, usersDao.getAllBackupUsers());
+		progressHolder.setProgress(10);
+
+		/*
+		 * ##################### Backup Room
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(RoomType.class, RoomTypeConverter.class);
+			
+			writeList(serializer, backup_dir, "rooms.xml", "rooms", roomDao.get());
+			progressHolder.setProgress(15);
+		}
+
+		/*
+		 * ##################### Backup Room Organizations
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(Organisation.class, OrganisationConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			
+			writeList(serializer, backup_dir, "rooms_organisation.xml",
+					"room_organisations", roomOrganisationDao.get());
+			progressHolder.setProgress(20);
+		}
+
+		/*
+		 * ##################### Backup Appointments
+		 */
+		{
+			List<Appointment> list = appointmentDao.getAppointments();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(AppointmentCategory.class, AppointmentCategoryConverter.class);
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(AppointmentReminderTyps.class, AppointmentReminderTypeConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getStart().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "appointements.xml", "appointments", list);
+			progressHolder.setProgress(25);
+		}
+
+		/*
+		 * ##################### Backup Meeting Members
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Appointment.class, AppointmentConverter.class);
+			
+			writeList(serializer, backup_dir, "meetingmembers.xml",
+					"meetingmembers", meetingMemberDao.getMeetingMembers());
+			progressHolder.setProgress(30);
+		}
+
+		/*
+		 * ##################### LDAP Configs
+		 */
+		List<LdapConfig> ldapList = ldapConfigDao.get();
+		if (!ldapList.isEmpty()) {
+			ldapList.remove(0);
+		}
+		writeList(simpleSerializer, backup_dir, "ldapconfigs.xml", "ldapconfigs", ldapList);
+		progressHolder.setProgress(35);
+
+		/*
+		 * ##################### Cluster servers
+		 */
+		writeList(simpleSerializer, backup_dir, "servers.xml", "servers", serverDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(40);
+
+		/*
+		 * ##################### OAuth2 servers
+		 */
+		writeList(simpleSerializer, backup_dir, "oauth2servers.xml", "oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(45);
+
+		/*
+		 * ##################### Private Messages
+		 */
+		{
+			List<PrivateMessage> list = privateMessagesDao.get(0, Integer.MAX_VALUE);
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "privateMessages.xml",
+					"privatemessages", list);
+			progressHolder.setProgress(50);
+		}
+
+		/*
+		 * ##################### Private Message Folders
+		 */
+		writeList(simpleSerializer, backup_dir, "privateMessageFolder.xml",
+				"privatemessagefolders", privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(55);
+
+		/*
+		 * ##################### User Contacts
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			
+			writeList(serializer, backup_dir, "userContacts.xml",
+					"usercontacts", userContactsDao.getUserContacts());
+			progressHolder.setProgress(60);
+		}
+
+		/*
+		 * ##################### File-Explorer
+		 */
+		{
+			List<FileExplorerItem> list = fileExplorerItemDao.getFileExplorerItems();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "fileExplorerItems.xml",
+					"fileExplorerItems", list);
+			progressHolder.setProgress(65);
+		}
+
+		/*
+		 * ##################### Recordings
+		 */
+		{
+			List<FlvRecording> list = flvRecordingDao.getAllFlvRecordings();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "flvRecordings.xml",
+					"flvrecordings", list);
+			progressHolder.setProgress(70);
+		}
+
+		/*
+		 * ##################### Polls
+		 */
+		{
+			List<RoomPoll> list = pollManager.getPollListBackup();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			registry.bind(PollType.class, PollTypeConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "roompolls.xml", "roompolls", list);
+			progressHolder.setProgress(75);
+		}
+
+		/*
+		 * ##################### Config
+		 */
+		{
+			List<Configuration> list = configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.configuration_id", true);
+			Registry registry = new Registry();
+			registry.bind(State.class, StateConverter.class);
+			registry.bind(User.class, UserConverter.class);
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getStarttime().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "configs.xml", "configs", list);
+			progressHolder.setProgress(80);
+		}
+		
+		/*
+		 * ##################### Chat
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			List<ChatMessage> list = chatDao.get(0, Integer.MAX_VALUE);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getSent().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "chat_messages.xml", "chat_messages", list);
+			progressHolder.setProgress(85);
+		}
+		if (includeFiles) {
+			/*
+			 * ##################### Backup Room Files
+			 */
+			File targetRootDir = new File(backup_dir, "roomFiles");
+
+			if (!targetRootDir.exists()) {
+				targetRootDir.mkdir();
+			}
+
+			File sourceDir = OmFileHelper.getUploadDir();
+
+			File[] files = sourceDir.listFiles();
+			for (File file : files) {
+				if (file.isDirectory()) {
+					if (!file.getName().equals("backup") && !file.getName().equals("import")) {
+						log.debug("### " + file.getName());
+
+						FileHelper.copyRec(file, new File(targetRootDir, file.getName()));
+					}
+				}
+			}
+
+			/*
+			 * ##################### Backup Recording Files
+			 */
+			File targetDirRec = new File(backup_dir, "recordingFiles");
+
+			if (!targetDirRec.exists()) {
+				targetDirRec.mkdir();
+			}
+
+			File sourceDirRec = OmFileHelper.getStreamsHibernateDir();
+
+			FileHelper.copyRec(sourceDirRec, targetDirRec);
+			progressHolder.setProgress(90);
+		}
+
+		writeZipDir(backup_dir, filePath);
+		progressHolder.setProgress(100);
+		log.debug("---Done");
+	}
+	
+	private <T> void writeList(Serializer ser, File backup_dir, String fileName, String listElement, List<T> list) throws Exception {
+		FileOutputStream fos = new FileOutputStream(new File(backup_dir, fileName));
+		writeList(ser, fos, listElement, list);
+	}
+	
+	private <T> void writeList(Serializer ser, OutputStream os, String listElement, List<T> list) throws Exception {
+		Format format = new Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+		OutputNode doc = NodeBuilder.write(new OutputStreamWriter(os, "UTF-8"), format);
+		OutputNode root = doc.getChild("root");
+		root.setComment(BACKUP_COMMENT);
+		OutputNode listNode = root.getChild(listElement);
+
+		if (list != null) {
+			for (T t : list) {
+				try {
+					ser.write(t, listNode);
+				} catch (Exception e) {
+					log.debug("Exception While writing node of type: " + t.getClass(), e);
+				}
+			}
+		}
+		root.commit();
+	}
+
+	public void exportUsers(File backup_dir, List<User> list) throws Exception {
+		FileOutputStream fos = new FileOutputStream(new File(backup_dir, "users.xml"));
+		exportUsers(fos, list);
+	}
+	
+	public void exportUsers(OutputStream os, List<User> list) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer serializer = new Persister(strategy);
+
+		registry.bind(Organisation.class, OrganisationConverter.class);
+		registry.bind(State.class, StateConverter.class);
+		if (list != null && list.size() > 0) {
+			Class<?> dateClass = list.get(0).getRegdate() != null ? list.get(0).getRegdate().getClass() : list.get(0).getStarttime().getClass();
+			registry.bind(dateClass, DateConverter.class);
+		}
+		
+		writeList(serializer, os, "users", list);
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	public void service(HttpServletRequest request, HttpServletResponse response, ServletContext ctx) throws ServletException, IOException {
+		String sid = request.getParameter("sid");
+		if (sid == null) {
+			sid = "default";
+		}
+		log.debug("sid: " + sid);
+
+		Long users_id = sessiondataDao.checkSession(sid);
+		Set<Right> rights = usersDao.get(users_id).getRights();
+
+		log.debug("users_id: " + users_id);
+		log.debug("user_level: " + rights);
+
+		if (AuthLevelUtil.hasAdminLevel(rights)) {
+			// if (true) {
+
+			String includeFileOption = request.getParameter("includeFileOption");
+			boolean includeFiles = includeFileOption == null || "yes".equals(includeFileOption);
+
+			String moduleName = request.getParameter("moduleName");
+			if (moduleName == null) {
+				moduleName = "moduleName";
+			}
+			log.debug("moduleName: " + moduleName);
+
+			if (moduleName.equals("backup")) {
+
+				/*
+				 * ##################### Create Base Folder structure
+				 */
+
+				File working_dir = OmFileHelper.getUploadBackupDir();
+
+				String dateString = "backup_"
+						+ CalendarPatterns.getTimeForStreamId(new Date());
+
+				File backup_dir = new File(working_dir, dateString);
+				String requestedFile = dateString + ".zip";
+				File backupFile = new File(backup_dir, requestedFile);
+
+				try {
+					performExport(backupFile, backup_dir, includeFiles, new ProgressHolder());
+
+					response.reset();
+					response.resetBuffer();
+					response.setContentType("APPLICATION/OCTET-STREAM");
+					response.setHeader("Content-Disposition", "attachment; filename=\"" + requestedFile + "\"");
+					response.setHeader("Content-Length", "" + backupFile.length());
+
+					OutputStream out = response.getOutputStream();
+					OmFileHelper.copyFile(backupFile, out);
+
+					out.flush();
+					out.close();
+				} catch (Exception er) {
+					log.error("Error exporting: ", er);
+				}
+
+				if (backupFile.exists()) {
+					// log.debug("DELETE :1: "+backupFile.getCanonicalPath());
+					backupFile.delete();
+				}
+
+				FileHelper.removeRec(backup_dir);
+			}
+		} else {
+			log.error("BackupExport: not authorized FileDownload ");
+		}
+	}
+
+	private void writeZipDir(File directoryToZip, File zipFile) throws IOException {
+		FileOutputStream fos = null;
+		ZipOutputStream zos = null;
+		try {
+			fos = new FileOutputStream(zipFile);
+			zos = new ZipOutputStream(fos);
+			
+			writeZipDir(directoryToZip.toURI(), directoryToZip, zos, zipFile);
+		} finally {
+			if (zos != null) {
+				try {
+					zos.close();
+				} catch (IOException e) {
+					log.debug("Enexpected error while closing ZipOutputStream", e);
+				}
+			}
+			if (fos != null) {
+				try {
+					fos.close();
+				} catch (IOException e) {
+					log.debug("Enexpected error while closing FileOutputStream", e);
+				}
+			}
+		}
+	}
+	
+	private void writeZipDir(URI base, File dir, ZipOutputStream zos, File zipFile) throws IOException {
+		for (File file : dir.listFiles()) {
+			if (zipFile.equals(file)) {
+				continue;
+			}
+			if (file.isDirectory()) {
+				writeZipDir(base, file, zos, zipFile);
+			} else {
+				String path = base.relativize(file.toURI()).toString();
+				log.debug("Writing '" + path + "' to zip file");
+				ZipEntry zipEntry = new ZipEntry(path);
+				zos.putNextEntry(zipEntry);
+
+				OmFileHelper.copyFile(file, zos);
+				zos.closeEntry();
+			}
+		}
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/BackupImport.java b/src/install/java/org/apache/openmeetings/backup/BackupImport.java
new file mode 100644
index 0000000..f09e822
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/BackupImport.java
@@ -0,0 +1,1021 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import static org.apache.commons.transaction.util.FileHelper.copyRec;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadRoomDir;
+import static org.apache.openmeetings.util.OmFileHelper.profilesPrefix;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.crypt.MD5Implementation;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.convert.Registry;
+import org.simpleframework.xml.convert.RegistryStrategy;
+import org.simpleframework.xml.core.Persister;
+import org.simpleframework.xml.strategy.Strategy;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.NodeBuilder;
+import org.simpleframework.xml.transform.RegistryMatcher;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+public class BackupImport {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupImport.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private StateDao statemanagement;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private PrivateMessageFolderDao privateMessageFolderDao;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private TimezoneUtil tzUtil;
+	@Autowired
+	private ChatDao chatDao;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private OAuth2Dao auth2Dao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private RoomOrganisationDao roomOrganisationDao;
+
+	private final Map<Long, Long> usersMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> organisationsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> appointmentsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> roomsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> messageFoldersMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> userContactsMap = new HashMap<Long, Long>();
+	private final Map<String, Integer> userEmailMap = new HashMap<String, Integer>();
+
+	private enum Maps {
+		USERS, ORGANISATIONS, APPOINTMENTS, ROOMS, MESSAGEFOLDERS, USERCONTACTS
+	};
+
+	public void performImport(InputStream is) throws Exception {
+		File working_dir = OmFileHelper.getUploadImportDir();
+		if (!working_dir.exists()) {
+			working_dir.mkdir();
+		}
+		usersMap.clear();
+		organisationsMap.clear();
+		appointmentsMap.clear();
+		roomsMap.clear();
+		messageFoldersMap.clear();
+		userContactsMap.clear();
+		userEmailMap.clear();
+		messageFoldersMap.put(INBOX_FOLDER_ID, INBOX_FOLDER_ID);
+		messageFoldersMap.put(SENT_FOLDER_ID, SENT_FOLDER_ID);
+		messageFoldersMap.put(TRASH_FOLDER_ID, TRASH_FOLDER_ID);
+		File f = OmFileHelper.getNewDir(working_dir, "import_" + CalendarPatterns.getTimeForStreamId(new Date()));
+
+		log.debug("##### WRITE FILE TO: " + f);
+		
+		ZipInputStream zipinputstream = new ZipInputStream(is);
+		ZipEntry zipentry = zipinputstream.getNextEntry();
+		while (zipentry != null) {
+			String fName = zipentry.getName();
+			if (File.pathSeparatorChar != '\\' && fName.indexOf('\\') > -1) {
+				fName = fName.replace('\\', '/');
+			}
+			// for each entry to be extracted
+			File fentry = new File(f, fName);
+			File dir = fentry.isDirectory() ? fentry : fentry.getParentFile();
+			dir.mkdirs();
+			if (fentry.isDirectory()) {
+				zipentry = zipinputstream.getNextEntry();
+				continue;
+			}
+
+			FileHelper.copy(zipinputstream, fentry);
+			zipinputstream.closeEntry();
+			zipentry = zipinputstream.getNextEntry();
+
+		}
+		zipinputstream.close();
+
+		/*
+		 * ##################### Import Configs
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			
+			List<Configuration> list = readList(serializer, f, "configs.xml", "configs", Configuration.class, true);
+			for (Configuration c : list) {
+				if (c.getConf_key() == null || c.isDeleted()) {
+					continue;
+				}
+				Configuration cfg = configurationDao.forceGet(c.getConf_key());
+				if (cfg != null && !cfg.isDeleted()) {
+					log.warn("Non deleted configuration with same key is found! old value: {}, new value: {}", cfg.getConf_value(), c.getConf_value());
+				}
+				c.setConfiguration_id(cfg == null ? null : cfg.getConfiguration_id());
+				if (c.getUser() != null && c.getUser().getUser_id() == null) {
+					c.setUser(null);
+				}
+				if (CONFIG_CRYPT_KEY.equals(c.getConf_key())) {
+					try {
+						Class.forName(c.getConf_value());
+					} catch (ClassNotFoundException e) {
+						c.setConf_value(MD5Implementation.class.getCanonicalName());
+					}
+				}
+				configurationDao.update(c, null);
+			}
+		}
+
+		log.info("Configs import complete, starting organization import");
+		/*
+		 * ##################### Import Organizations
+		 */
+		Serializer simpleSerializer = new Persister();
+		{
+			List<Organisation> list = readList(simpleSerializer, f, "organizations.xml", "organisations", Organisation.class);
+			for (Organisation o : list) {
+				long oldId = o.getOrganisation_id();
+				o.setOrganisation_id(null);
+				o = organisationDao.update(o, null);
+				organisationsMap.put(oldId, o.getOrganisation_id());
+			}
+		}
+
+		log.info("Organizations import complete, starting user import");
+		/*
+		 * ##################### Import Users
+		 */
+		{
+			String jNameTimeZone = configurationDao.getConfValue("default.timezone", String.class, "Europe/Berlin");
+			List<User> list = readUserList(f, "users.xml", "users");
+			int minLoginLength = getMinLoginLength(configurationDao);
+			for (User u : list) {
+				if (u.getLogin() == null) {
+					continue;
+				}
+				if (u.getType() == Type.contact && u.getLogin().length() < minLoginLength) {
+					u.setLogin(UUID.randomUUID().toString());
+				}
+				//FIXME: OPENMEETINGS-750
+				//Convert old Backups with OmTimeZone to new schema
+				
+				String tz = u.getTimeZoneId();
+				if (tz == null) {
+					u.setTimeZoneId(jNameTimeZone);
+					u.setForceTimeZoneCheck(true);
+				} else {
+					u.setForceTimeZoneCheck(false);
+				}
+				
+				u.setStarttime(new Date());
+				long userId = u.getUser_id();
+				u.setUser_id(null);
+				if (u.getSipUser() != null && u.getSipUser().getId() != 0) {
+					u.getSipUser().setId(0);
+				}
+				if (!Strings.isEmpty(u.getExternalUserType())) {
+					u.setType(Type.external);
+				}
+				usersDao.update(u, -1L);
+				usersMap.put(userId, u.getUser_id());
+			}
+		}
+
+		log.info("Users import complete, starting room import");
+		/*
+		 * ##################### Import Rooms
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(RoomType.class, new RoomTypeConverter(roomTypeDao));
+			
+			List<Room> list = readList(serializer, f, "rooms.xml", "rooms", Room.class);
+			for (Room r : list) {
+				Long roomId = r.getRooms_id();
+
+				// We need to reset ids as openJPA reject to store them otherwise
+				r.setRooms_id(null);
+				if (r.getModerators() != null) {
+					for (Iterator<RoomModerator> i = r.getModerators().iterator(); i.hasNext();) {
+						RoomModerator rm = i.next();
+						if (rm.getUser().getUser_id() == null) {
+							i.remove();
+						}
+					}
+				}
+				r = roomDao.update(r, null);
+				roomsMap.put(roomId, r.getRooms_id());
+			}
+		}
+
+		log.info("Room import complete, starting room organizations import");
+		/*
+		 * ##################### Import Room Organisations
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(Organisation.class, new OrganisationConverter(orgDao, organisationsMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			
+			List<RoomOrganisation> list = readList(serializer, f, "rooms_organisation.xml", "room_organisations", RoomOrganisation.class);
+			for (RoomOrganisation ro : list) {
+				if (!ro.getDeleted() && ro.getRoom() != null && ro.getRoom().getRooms_id() != null && ro.getOrganisation() != null && ro.getOrganisation().getOrganisation_id() != null) {
+					// We need to reset this as openJPA reject to store them otherwise
+					ro.setRooms_organisation_id(null);
+					roomOrganisationDao.update(ro, null);
+				}
+			}
+		}
+
+		log.info("Room organizations import complete, starting chat messages import");
+		/*
+		 * ##################### Import Chat messages
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<ChatMessage> list = readList(serializer, f, "chat_messages.xml", "chat_messages", ChatMessage.class, true);
+			for (ChatMessage m : list) {
+				chatDao.update(m);
+			}
+		}
+		
+		log.info("Chat messages import complete, starting appointement import");
+		/*
+		 * ##################### Import Appointements
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(AppointmentCategory.class, new AppointmentCategoryConverter(appointmentCategoryDaoImpl));
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(AppointmentReminderTyps.class, new AppointmentReminderTypeConverter(appointmentReminderTypDaoImpl));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<Appointment> list = readList(serializer, f, "appointements.xml", "appointments", Appointment.class);
+			log.debug(list.size() + " Appointments found in backup");
+			for (Appointment a : list) {
+				Long appId = a.getId();
+
+				// We need to reset this as openJPA reject to store them otherwise
+				a.setId(null);
+				if (a.getOwner() != null && a.getOwner().getUser_id() == null) {
+					a.setOwner(null);
+				}
+				if (a.getRoom() != null && a.getRoom().getRooms_id() == null) {
+					a.setRoom(null);
+				}
+				a = appointmentDao.update(a, null, false);
+				appointmentsMap.put(appId, a.getId());
+			}
+		}
+
+		log.info("Appointement import complete, starting meeting members import");
+		/*
+		 * ##################### Import MeetingMembers
+		 * 
+		 * Reminder Invitations will be NOT send!
+		 */
+		{
+			List<MeetingMember> list = readMeetingMemberList(f, "meetingmembers.xml", "meetingmembers");
+			for (MeetingMember ma : list) {
+				meetingMemberDao.update(ma);
+			}
+		}
+
+		log.info("Meeting members import complete, starting ldap config import");
+		/*
+		 * ##################### Import LDAP Configs
+		 */
+		{
+			List<LdapConfig> list = readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs", LdapConfig.class, true);
+			for (LdapConfig c : list) {
+				if (!"local DB [internal]".equals(c.getName())) {
+					ldapConfigDao.addLdapConfigByObject(c);
+				}
+			}
+		}
+
+		log.info("Ldap config import complete, starting cluster servers import");
+		/*
+		 * ##################### Cluster servers
+		 */
+		{
+			List<Server> list = readList(simpleSerializer, f, "servers.xml", "servers", Server.class, true);
+			for (Server s : list) {
+				serverDao.update(s, null);
+			}
+		}
+
+		log.info("Cluster servers import complete, starting OAuth2 servers import");
+		/*
+		 * ##################### OAuth2 servers
+		 */
+		{
+			List<OAuthServer> list = readList(simpleSerializer, f, "oauth2servers.xml", "oauth2servers", OAuthServer.class, true);
+			for (OAuthServer s : list) {
+				auth2Dao.update(s, null);
+			}
+		}
+
+		log.info("OAuth2 servers import complete, starting recordings import");
+		/*
+		 * ##################### Import Recordings
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<FlvRecording> list = readList(serializer, f, "flvRecordings.xml", "flvrecordings", FlvRecording.class, true);
+			for (FlvRecording fr : list) {
+				fr.setFlvRecordingId(0);
+				if (fr.getRoom_id() != null) {
+					fr.setRoom_id(roomsMap.get(fr.getRoom_id()));
+				}
+				if (fr.getOwnerId() != null) {
+					fr.setOwnerId(usersMap.get(fr.getOwnerId()));
+				}
+				if (fr.getFlvRecordingMetaData() != null) {
+					for (FlvRecordingMetaData meta : fr.getFlvRecordingMetaData()) {
+						meta.setFlvRecordingMetaDataId(0);
+						meta.setFlvRecording(fr);
+					}
+				}
+				flvRecordingDao.update(fr);
+			}
+		}
+
+		log.info("FLVrecording import complete, starting private message folder import");
+		/*
+		 * ##################### Import Private Message Folders
+		 */
+		{
+			List<PrivateMessageFolder> list = readList(simpleSerializer, f, "privateMessageFolder.xml"
+				, "privatemessagefolders", PrivateMessageFolder.class, true);
+			for (PrivateMessageFolder p : list) {
+				Long folderId = p.getPrivateMessageFolderId();
+				PrivateMessageFolder storedFolder = privateMessageFolderDao.get(folderId);
+				if (storedFolder == null) {
+					p.setPrivateMessageFolderId(0);
+					Long newFolderId = privateMessageFolderDao.addPrivateMessageFolderObj(p);
+					messageFoldersMap.put(folderId, newFolderId);
+				}
+			}
+		}
+
+		log.info("Private message folder import complete, starting user contacts import");
+		/*
+		 * ##################### Import User Contacts
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			
+			List<UserContact> list = readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class, true);
+			for (UserContact uc : list) {
+				Long ucId = uc.getUserContactId();
+				UserContact storedUC = userContactsDao.get(ucId);
+
+				if (storedUC == null && uc.getContact() != null && uc.getContact().getUser_id() != null) {
+					uc.setUserContactId(0);
+					if (uc.getOwner() != null && uc.getOwner().getUser_id() == null) {
+						uc.setOwner(null);
+					}
+					Long newId = userContactsDao.addUserContactObj(uc);
+					userContactsMap.put(ucId, newId);
+				}
+			}
+		}
+
+		log.info("Usercontact import complete, starting private messages item import");
+		/*
+		 * ##################### Import Private Messages
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<PrivateMessage> list = readList(serializer, f, "privateMessages.xml", "privatemessages", PrivateMessage.class, true);
+			boolean oldBackup = true;
+			for (PrivateMessage p : list) {
+				if (p.getFolderId() < 0) {
+					oldBackup = false;
+					break;
+				}
+				
+			}
+			for (PrivateMessage p : list) {
+				p.setId(0);
+				p.setFolderId(getNewId(p.getFolderId(), Maps.MESSAGEFOLDERS));
+				p.setUserContactId(getNewId(p.getUserContactId(), Maps.USERCONTACTS));
+				if (p.getRoom() != null && p.getRoom().getRooms_id() == null) {
+					p.setRoom(null);
+				}
+				if (p.getTo() != null && p.getTo().getUser_id() == null) {
+					p.setTo(null);
+				}
+				if (p.getFrom() != null && p.getFrom().getUser_id() == null) {
+					p.setFrom(null);
+				}
+				if (p.getOwner() != null && p.getOwner().getUser_id() == null) {
+					p.setOwner(null);
+				}
+				if (oldBackup && p.getOwner() != null && p.getOwner().getUser_id() != null 
+						&& p.getFrom() != null && p.getFrom().getUser_id() != null 
+						&& p.getOwner().getUser_id() == p.getFrom().getUser_id())
+				{
+					p.setFolderId(SENT_FOLDER_ID);
+				}
+				privateMessagesDao.update(p, null);
+			}
+		}
+
+		log.info("Private message import complete, starting file explorer item import");
+		/*
+		 * ##################### Import File-Explorer Items
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<FileExplorerItem> list = readList(serializer, f, "fileExplorerItems.xml", "fileExplorerItems", FileExplorerItem.class, true);
+			for (FileExplorerItem file : list) {
+				// We need to reset this as openJPA reject to store them otherwise
+				file.setFileExplorerItemId(0);
+				Long roomId = file.getRoom_id();
+				file.setRoom_id(roomsMap.containsKey(roomId) ? roomsMap.get(roomId) : null);
+				if (file.getOwnerId() != null) {
+					file.setOwnerId(usersMap.get(file.getOwnerId()));
+				}
+				fileExplorerItemDao.addFileExplorerItem(file);
+			}
+		}
+
+		log.info("File explorer item import complete, starting file poll import");
+		/*
+		 * ##################### Import Room Polls
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+	
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(PollType.class, new PollTypeConverter(pollManager));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<RoomPoll> list = readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class, true);
+			for (RoomPoll rp : list) {
+				if (rp.getRoom() == null || rp.getRoom().getRooms_id() == null) {
+					//room was deleted
+					continue;
+				}
+				if (rp.getCreatedBy() == null || rp.getCreatedBy().getUser_id() == null) {
+					rp.setCreatedBy(null);
+				}
+				for (RoomPollAnswers rpa : rp.getRoomPollAnswerList()) {
+					if (rpa.getVotedUser() == null || rpa.getVotedUser().getUser_id() == null) {
+						rpa.setVotedUser(null);
+					}
+				}
+				pollManager.savePollBackup(rp);
+			}
+		}
+		
+		log.info("Poll import complete, starting copy of files and folders");
+		/*
+		 * ##################### Import real files and folders
+		 */
+		importFolders(f);
+
+		log.info("File explorer item import complete, clearing temp files");
+		
+		FileHelper.removeRec(f);
+	}
+	
+	private <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz) throws Exception {
+		return readList(ser, baseDir, fileName, listNodeName, clazz, false);
+	}
+	
+	private <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz, boolean notThow) throws Exception {
+		List<T> list = new ArrayList<T>();
+		File xml = new File(baseDir, fileName);
+		if (!xml.exists()) {
+			final String msg = fileName + " missing";
+			if (notThow) {
+				log.debug(msg);
+			} else {
+				throw new Exception(msg);
+			}
+		} else {
+			InputNode root = NodeBuilder.read(new FileInputStream(xml));
+			InputNode listNode = root.getNext();
+			if (listNodeName.equals(listNode.getName())) {
+				InputNode item = listNode.getNext();
+				while (item != null) {
+					T o = ser.read(clazz, item, false);
+					list.add(o);
+					item = listNode.getNext();
+				}
+			}
+		}
+		return list;
+	}
+	
+	private Node getNode(Node doc, String name) {
+		NodeList nl = doc.getChildNodes();
+		for (int i = 0; i < nl.getLength(); ++i) {
+			Node node = nl.item(i);
+			if (node.getNodeType() == Node.ELEMENT_NODE && name.equals(node.getNodeName())) {
+				return node;
+			}
+		}
+		return null;
+	}
+	
+	public List<User> readUserList(InputStream xml, String listNodeName) throws Exception {
+		return readUserList(new InputSource(xml), listNodeName);
+	}
+	
+	public List<User> readUserList(File baseDir, String fileName, String listNodeName) throws Exception {
+		File xml = new File(baseDir, fileName);
+		if (!xml.exists()) {
+			throw new Exception(fileName + " missing");
+		}
+		
+		return readUserList(new InputSource(xml.toURI().toASCIIString()), listNodeName);
+	}
+	
+	//FIXME (need to be removed in later versions) HACK to add external attendees previously stored in MeetingMember structure
+	private List<MeetingMember> readMeetingMemberList(File baseDir, String filename, String listNodeName) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer ser = new Persister(strategy);
+
+		registry.bind(User.class, new UserConverter(usersDao, usersMap));
+		registry.bind(Appointment.class, new AppointmentConverter(appointmentDao, appointmentsMap));
+		
+		File xml = new File(baseDir, filename);
+		if (!xml.exists()) {
+			throw new Exception(filename + " missing");
+		}
+		
+		DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		Document doc = dBuilder.parse(new InputSource(xml.toURI().toASCIIString()));
+		
+		StringWriter sw = new StringWriter();
+		Transformer xformer = TransformerFactory.newInstance().newTransformer();
+        xformer.transform(new DOMSource(doc), new StreamResult(sw));
+        
+		List<MeetingMember> list = new ArrayList<MeetingMember>();
+		InputNode root = NodeBuilder.read(new StringReader(sw.toString()));
+		InputNode root1 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle external attendee's firstname, lastname, email
+		InputNode listNode = root.getNext();
+		InputNode listNode1 = root1.getNext(); //HACK to handle external attendee's firstname, lastname, email
+		if (listNodeName.equals(listNode.getName())) {
+			InputNode item = listNode.getNext();
+			InputNode item1 = listNode1.getNext(); //HACK to handle external attendee's firstname, lastname, email
+			while (item != null) {
+				MeetingMember mm = ser.read(MeetingMember.class, item, false);
+
+				boolean needToSkip1 = true;
+				if (mm.getUser() == null) {
+					mm.setUser(new User());
+				}
+				if (mm.getUser().getUser_id() == null) {
+					//HACK to handle external attendee's firstname, lastname, email
+					boolean contactValid = false;
+					do {
+						if (Type.contact == mm.getUser().getType() && "firstname".equals(item1.getName())) {
+							mm.getUser().setFirstname(item1.getValue());
+						}
+						if (Type.contact == mm.getUser().getType() && "lastname".equals(item1.getName())) {
+							mm.getUser().setLastname(item1.getValue());
+						}
+						if ("email".equals(item1.getName())) {
+							String email = item1.getValue();
+							if (mm.getAppointment() != null && mm.getAppointment().getOwner() != null) {
+								mm.setUser(usersDao.getContact(email, mm.getAppointment().getOwner()));
+							}
+							contactValid = true;
+						}
+						item1 = listNode1.getNext(); //HACK to handle old om_time_zone
+					} while (item1 != null && !"meetingmember".equals(item1.getName()));
+					if (!contactValid) {
+						mm = null;
+					}
+					needToSkip1 = false;
+				}
+				if (needToSkip1) {
+					do {
+						item1 = listNode1.getNext(); //HACK to handle Address inside user
+					} while (item1 != null && !"meetingmember".equals(item1.getName()));
+				}
+				item = listNode.getNext();
+				if (mm != null && !mm.isDeleted() && mm.getUser() != null && mm.getAppointment() != null && mm.getAppointment().getId() != null) {
+					mm.setId(null);
+					list.add(mm);
+				}
+			}
+		}
+		return list;
+	}
+	
+	//FIXME (need to be removed in later versions) HACK to fix 2 deleted nodes in users.xml and inline Adresses and sipData
+	private List<User> readUserList(InputSource xml, String listNodeName) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer ser = new Persister(strategy);
+
+		registry.bind(Organisation.class, new OrganisationConverter(orgDao, organisationsMap));
+		registry.bind(State.class, new StateConverter(statemanagement));
+		registry.bind(Date.class, DateConverter.class);
+
+		DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		Document doc = dBuilder.parse(xml);
+		NodeList nl = getNode(getNode(doc, "root"), listNodeName).getChildNodes();
+		userEmailMap.clear();
+		//add existence email from database
+		List<User>  users = usersDao.getAllUsers();
+		for (User u : users){
+			if (u.getAdresses() == null || u.getAdresses().getEmail() == null || Type.user != u.getType()) {
+				continue;
+			}
+			userEmailMap.put(u.getAdresses().getEmail(), -1);
+		}
+		// one of the old OM version created 2 nodes "deleted" this code block handles this
+		for (int i = 0; i < nl.getLength(); ++i) {
+			Node user = nl.item(i);
+			NodeList nl1 = user.getChildNodes();
+			boolean deletedFound = false;
+			for (int j = 0; j < nl1.getLength(); ++j) {
+				Node node = nl1.item(j);
+				if (node.getNodeType() == Node.ELEMENT_NODE && "deleted".equals(node.getNodeName())) {
+					if (deletedFound) {
+						user.removeChild(node);
+						break;
+					}
+					deletedFound = true;
+				}
+			}
+		}
+		
+		StringWriter sw = new StringWriter();
+		Transformer xformer = TransformerFactory.newInstance().newTransformer();
+        xformer.transform(new DOMSource(doc), new StreamResult(sw));
+        
+		List<User> list = new ArrayList<User>();
+		InputNode root = NodeBuilder.read(new StringReader(sw.toString()));
+		InputNode root1 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle Address inside user
+		InputNode root2 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle old om_time_zone, level_id, status
+		InputNode listNode = root.getNext();
+		InputNode listNode1 = root1.getNext(); //HACK to handle Address inside user
+		InputNode listNode2 = root2.getNext(); //HACK to handle old om_time_zone
+		if (listNodeName.equals(listNode.getName())) {
+			InputNode item = listNode.getNext();
+			InputNode item1 = listNode1.getNext(); //HACK to handle Address inside user
+			InputNode item2 = listNode2.getNext(); //HACK to handle old om_time_zone, level_id, status
+			while (item != null) {
+				User u = ser.read(User.class, item, false);
+				
+				boolean needToSkip1 = true;
+				//HACK to handle Address inside user
+				if (u.getAdresses() == null) {
+					Address a = ser.read(Address.class, item1, false);
+					u.setAdresses(a);
+					needToSkip1 = false;
+				}
+				if (needToSkip1) {
+					do {
+						item1 = listNode1.getNext(); //HACK to handle Address inside user
+					} while (item1 != null && !"user".equals(item1.getName()));
+				}
+				String level_id = null, status = null;
+				do {
+					if (u.getTimeZoneId() == null && "omTimeZone".equals(item2.getName())) {
+						String jName = item2.getValue();
+						u.setTimeZoneId(jName == null ? null : tzUtil.getTimezoneByInternalJName(jName).getID());
+					}
+					if ("level_id".equals(item2.getName())) {
+						level_id = item2.getValue();
+					}
+					if ("status".equals(item2.getName())) {
+						status = item2.getValue();
+					}
+					item2 = listNode2.getNext(); //HACK to handle old om_time_zone, level_id, status
+				} while (item2 != null && !"user".equals(item2.getName()));
+				if (u.getRights().isEmpty()) {
+					u.getRights().add(Right.Room);
+					if ("1".equals(status)) {
+						u.getRights().add(Right.Dashboard);
+						u.getRights().add(Right.Login);
+					}
+					if ("3".equals(level_id)) {
+						u.getRights().add(Right.Admin);
+						u.getRights().add(Right.Soap);
+					}
+					if ("4".equals(level_id)) {
+						u.getRights().add(Right.Soap);
+					}
+				}
+				// check that email is unique
+				if (u.getAdresses() != null && u.getAdresses().getEmail() != null && Type.user == u.getType()) {
+					if (userEmailMap.containsKey(u.getAdresses().getEmail())) {
+						log.warn("Email is duplicated for user " + u.toString());
+						String updateEmail = "modified_by_import_<" + list.size() + ">" + u.getAdresses().getEmail();
+						u.getAdresses().setEmail(updateEmail);
+					}
+					userEmailMap.put(u.getAdresses().getEmail(), userEmailMap.size());
+				}
+				list.add(u);
+				item = listNode.getNext();
+			}
+		}
+		return list;
+	}
+	
+	private Long getProfileId(File f) {
+		String n = f.getName();
+		if (n.indexOf(profilesPrefix) > -1) {
+			return importLongType(n.substring(profilesPrefix.length()));
+		}
+		return null;
+	}
+	
+	private void importFolders(File importBaseDir) throws IOException {
+		// Now check the room files and import them
+		File roomFilesFolder = new File(importBaseDir, "roomFiles");
+
+		File uploadDir = getUploadDir();
+
+		log.debug("roomFilesFolder PATH " + roomFilesFolder.getCanonicalPath());
+
+		if (roomFilesFolder.exists()) {
+			for (File file : roomFilesFolder.listFiles()) {
+				if (file.isDirectory()) {
+					String fName = file.getName();
+					if ("profiles".equals(fName)) {
+						// profile should correspond to the new user id
+						for (File profile : file.listFiles()) {
+							Long oldId = getProfileId(profile);
+							Long id = oldId != null ? getNewId(oldId, Maps.USERS) : null;
+							if (id != null) {
+								copyRec(profile, getUploadProfilesUserDir(id));
+							}
+						}
+						continue;
+					} else {
+						// check if folder is room folder, store it under new id if necessary
+						Long oldId = importLongType(fName);
+						Long id = oldId != null ? getNewId(oldId, Maps.ROOMS) : null;
+						if (id != null) {
+							copyRec(file, getUploadRoomDir(id.toString()));
+							continue;
+						}
+					}
+					copyRec(file, new File(uploadDir, fName));
+				}
+			}
+		}
+
+		// Now check the recordings and import them
+
+		File sourceDirRec = new File(importBaseDir, "recordingFiles");
+
+		log.debug("sourceDirRec PATH " + sourceDirRec.getCanonicalPath());
+		if (sourceDirRec.exists()) {
+			copyRec(sourceDirRec, getStreamsHibernateDir());
+		}
+	}
+
+	private Long importLongType(String value) {
+		Long val = null;
+		try {
+			val = Long.valueOf(value);
+		} catch (Exception e) {
+			// no-op
+		}
+		return val;
+	}
+
+	private Long getNewId(Long oldId, Maps map) {
+		Long newId = oldId;
+		switch (map) {
+			case USERS:
+				if (usersMap.containsKey(oldId)) {
+					newId = usersMap.get(oldId);
+				}
+				break;
+			case ORGANISATIONS:
+				if (organisationsMap.containsKey(oldId)) {
+					newId = organisationsMap.get(oldId);
+				}
+				break;
+			case APPOINTMENTS:
+				if (appointmentsMap.containsKey(oldId)) {
+					newId = appointmentsMap.get(oldId);
+				}
+				break;
+			case ROOMS:
+				if (roomsMap.containsKey(oldId)) {
+					newId = roomsMap.get(oldId);
+				}
+				break;
+			case MESSAGEFOLDERS:
+				if (messageFoldersMap.containsKey(oldId)) {
+					newId = messageFoldersMap.get(oldId);
+				}
+				break;
+			case USERCONTACTS:
+				if (userContactsMap.containsKey(oldId)) {
+					newId = userContactsMap.get(oldId);
+				}
+				break;
+			default:
+				break;
+		}
+		return newId;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/DateConverter.java b/src/install/java/org/apache/openmeetings/backup/DateConverter.java
new file mode 100644
index 0000000..57ec4f9
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/DateConverter.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Date;
+
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.simpleframework.xml.convert.Converter;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class DateConverter implements Converter<Date> {
+	public Date read(InputNode node) throws Exception {
+		String val = node.getValue();
+		return val == null || "null".equals(val) ? new Date() : CalendarPatterns.parseImportDate(val);
+	}
+
+	public void write(OutputNode node, Date value) throws Exception {
+		node.setAttribute("class", "java.util.Date");
+		node.setData(true);
+		node.setValue(value == null ? "0" : CalendarPatterns.getExportDate(value));
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/InlineConverter.java b/src/install/java/org/apache/openmeetings/backup/InlineConverter.java
new file mode 100644
index 0000000..4ab9f24
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/InlineConverter.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.stream.InputNode;
+
+public abstract class InlineConverter<T> extends OmConverter<T> {
+	
+	String getNextValue(InputNode parent, String name) throws Exception {
+		InputNode node = parent.getNext(name);
+		return node != null ? node.getValue() : null;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java b/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java
new file mode 100644
index 0000000..031c22f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.transform.Transform;
+
+public class IntegerTransform implements Transform<Integer>{
+	public Integer read(String value) throws Exception {
+		return OmConverter.getintValue(value, 0);
+	}
+
+	public String write(Integer value) throws Exception {
+		return "" + value;
+	}
+
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/LongTransform.java b/src/install/java/org/apache/openmeetings/backup/LongTransform.java
new file mode 100644
index 0000000..f3238a8
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/LongTransform.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.transform.Transform;
+
+public class LongTransform implements Transform<Long>{
+	public Long read(String value) throws Exception {
+		return OmConverter.getlongValue(value);
+	}
+
+	public String write(Long value) throws Exception {
+		return "" + value;
+	}
+
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/OmConverter.java b/src/install/java/org/apache/openmeetings/backup/OmConverter.java
new file mode 100644
index 0000000..67a3d4c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/OmConverter.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.convert.Converter;
+import org.simpleframework.xml.stream.InputNode;
+
+public abstract class OmConverter<T> implements Converter<T> {
+	static long getlongValue(InputNode node) throws Exception {
+		return getlongValue(node.getValue());
+	}
+
+	static long getlongValue(String value) {
+		return getlongValue(value, 0);
+	}
+	
+	static long getlongValue(String value, long def) {
+		long result = def;
+		try {
+			result = Long.valueOf(value).longValue();
+		} catch (Exception e) {
+			//no op
+		}
+		return result;
+	}
+
+	static int getintValue(String value, int def) {
+		int result = def;
+		try {
+			result = Integer.valueOf(value).intValue();
+		} catch (Exception e) {
+			//no op
+		}
+		return result;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java b/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java
new file mode 100644
index 0000000..a0a8a4c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class OrganisationConverter extends OmConverter<Organisation> {
+	private OrganisationDao orgDao;
+	private Map<Long, Long> idMap;
+	
+	public OrganisationConverter() {
+		//default constructor is for export
+	}
+	
+	public OrganisationConverter(OrganisationDao orgDao, Map<Long, Long> idMap) {
+		this.orgDao = orgDao;
+		this.idMap = idMap;
+	}
+	
+	public Organisation read(InputNode node) throws Exception {
+		long oldId = getlongValue(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		Organisation o = orgDao.get(newId);
+		return o == null ? new Organisation() : o;
+	}
+
+	public void write(OutputNode node, Organisation value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getOrganisation_id());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java
new file mode 100644
index 0000000..89e7e5f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class PollTypeConverter extends OmConverter<PollType> {
+	private PollDao pollManager;
+	
+	public PollTypeConverter() {
+		//default constructor is for export
+	}
+	
+	public PollTypeConverter(PollDao pollManagement) {
+		this.pollManager = pollManagement;
+	}
+	
+	public PollType read(InputNode node) throws Exception {
+		return pollManager.getPollType(getlongValue(node));
+	}
+
+	public void write(OutputNode node, PollType value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getPollTypesId());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java b/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
new file mode 100644
index 0000000..3f53b78
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.io.Serializable;
+
+public class ProgressHolder implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	private int progress;
+
+	public int getProgress() {
+		return progress;
+	}
+
+	public void setProgress(int progress) {
+		this.progress = progress;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/RoomConverter.java b/src/install/java/org/apache/openmeetings/backup/RoomConverter.java
new file mode 100644
index 0000000..e0f8eda
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/RoomConverter.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class RoomConverter extends OmConverter<Room> {
+	private RoomDao roomDao;
+	private Map<Long, Long> idMap;
+	
+	public RoomConverter() {
+		//default constructor is for export
+	}
+	
+	public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) {
+		this.roomDao = roomDao;
+		this.idMap = idMap;
+	}
+	
+	public Room read(InputNode node) throws Exception {
+		long oldId = getlongValue(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+
+		Room r = roomDao.get(newId);
+		return r == null ? new Room() : r;
+	}
+
+	public void write(OutputNode node, Room value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getRooms_id());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java
new file mode 100644
index 0000000..5401722
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class RoomTypeConverter extends OmConverter<RoomType> {
+	private RoomTypeDao dao;
+	
+	public RoomTypeConverter() {
+		//default constructor is for export
+	}
+	
+	public RoomTypeConverter(RoomTypeDao dao) {
+		this.dao = dao;
+	}
+	
+	public RoomType read(InputNode node) throws Exception {
+		RoomType rt = dao.get(getlongValue(node));
+		return rt != null ? rt : dao.get(1); // conference type will be used in case of bad type
+	}
+
+	public void write(OutputNode node, RoomType value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getRoomtypes_id());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/StateConverter.java b/src/install/java/org/apache/openmeetings/backup/StateConverter.java
new file mode 100644
index 0000000..9188089
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/StateConverter.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.entity.user.State;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class StateConverter extends OmConverter<State> {
+	private StateDao statemanagement;
+	
+	public StateConverter() {
+		//default constructor is for export
+	}
+	
+	public StateConverter(StateDao statemanagement) {
+		this.statemanagement = statemanagement;
+	}
+	
+	public State read(InputNode node) throws Exception {
+		return statemanagement.getStateById(getlongValue(node));
+	}
+
+	public void write(OutputNode node, State value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getState_id());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/UserConverter.java b/src/install/java/org/apache/openmeetings/backup/UserConverter.java
new file mode 100644
index 0000000..1b805fa
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/UserConverter.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class UserConverter extends OmConverter<User> {
+	private UserDao userDao;
+	private Map<Long, Long> idMap;
+	
+	public UserConverter() {
+		//default constructor is for export
+	}
+	
+	public UserConverter(UserDao userDao, Map<Long, Long> idMap) {
+		this.userDao = userDao;
+		this.idMap = idMap;
+	}
+	
+	public User read(InputNode node) throws Exception {
+		long oldId = getlongValue(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		User u = userDao.get(newId);
+		return u == null ? new User() : u;
+	}
+
+	public void write(OutputNode node, User value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getUser_id());
+	}
+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/cli/Admin.java b/src/install/java/org/apache/openmeetings/cli/Admin.java
new file mode 100644
index 0000000..834e89d
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/Admin.java
@@ -0,0 +1,622 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.db.util.UserHelper.invalidPassword;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Date;
+import java.util.Map;
+import java.util.TimeZone;
+
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.servlet.ServletContextEvent;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.OptionGroup;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
+import org.apache.openjpa.jdbc.schema.SchemaTool;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactoryImpl.LogImpl;
+import org.apache.openmeetings.backup.BackupExport;
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.installation.InstallationDocumentHandler;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.ImportHelper;
+import org.apache.openmeetings.util.OMContextListener;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.mail.MailUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+
+public class Admin {
+	private static final Logger log = Red5LoggerFactory.getLogger(Admin.class);
+	
+	private boolean verbose = false;
+	private InstallationConfig cfg = null;
+	private Options opts = null;
+	private CommandLine cmdl = null;
+	private ClassPathXmlApplicationContext ctx = null;
+
+	private Admin() {
+		cfg = new InstallationConfig();
+		opts = buildOptions();
+	}
+	
+	private Options buildOptions() {
+		Options options = new Options();
+		OptionGroup group = new OptionGroup()
+			.addOption(new OmOption("h", 0, "h", "help", false, "prints this message"))
+			.addOption(new OmOption("b", 1, "b", "backup", false, "Backups OM"))
+			.addOption(new OmOption("r", 2, "r", "restore", false, "Restores OM"))
+			.addOption(new OmOption("i", 3, "i", "install", false, "Fill DB table, and make OM usable"))
+			.addOption(new OmOption("l", 3, "l", "languages", false, "Reimport All language files into DB"))
+			.addOption(new OmOption("f", 4, "f", "files", false, "File operations - statictics/cleanup"));
+		group.setRequired(true); 
+		options.addOptionGroup(group);
+		//general
+		options.addOption(new OmOption(null, "v", "verbose", false, "verbose error messages"));
+		//backup/restore
+		options.addOption(new OmOption("b", null, "exclude-files", false, "should backup exclude files [default: include]", true));
+		options.addOption(new OmOption("b,r,i", "file", null, true, "file used for backup/restore/install", "b"));
+		//install
+		options.addOption(new OmOption("i", "user", null, true, "Login name of the default user, minimum " + USER_LOGIN_MINIMUM_LENGTH + " characters (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "email", null, true, "Email of the default user (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "group", null, true, "The name of the default user group (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "tz", null, true, "Default server time zone, and time zone for the selected user (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", null, "password", true, "Password of the default user, minimum " + USER_PASSWORD_MINIMUM_LENGTH + " characters (will be prompted if not set)", true));
+		options.addOption(new OmOption("i", null, "system-email-address", true, "System e-mail address [default: " + cfg.mailReferer + "]", true));
+		options.addOption(new OmOption("i", null, "smtp-server", true, "SMTP server for outgoing e-mails [default: " + cfg.smtpServer + "]", true));
+		options.addOption(new OmOption("i", null, "smtp-port", true, "SMTP server for outgoing e-mails [default: " + cfg.smtpPort + "]", true));
+		options.addOption(new OmOption("i", null, "email-auth-user", true, "Email auth username (anonymous connection will be used if not set)", true));
+		options.addOption(new OmOption("i", null, "email-auth-pass", true, "Email auth password (anonymous connection will be used if not set)", true));
+		options.addOption(new OmOption("i", null, "email-use-tls", false, "Is secure e-mail connection [default: no]", true));
+		options.addOption(new OmOption("i", null, "skip-default-rooms", false, "Do not create default rooms [created by default]", true));
+		options.addOption(new OmOption("i", null, "disable-frontend-register", false, "Do not allow front end register [allowed by default]", true));
+
+		options.addOption(new OmOption("i", null, "db-type", true, "The type of the DB to be used", true));
+		options.addOption(new OmOption("i", null, "db-host", true, "DNS name or IP address of database", true));
+		options.addOption(new OmOption("i", null, "db-port", true, "Database port", true));
+		options.addOption(new OmOption("i", null, "db-name", true, "The name of Openmeetings database", true));
+		options.addOption(new OmOption("i", null, "db-user", true, "User with write access to the DB specified", true));
+		options.addOption(new OmOption("i", null, "db-pass", true, "Password of the user with write access to the DB specified", true));
+		options.addOption(new OmOption("i", null, "drop", false, "Drop database before installation", true));
+		options.addOption(new OmOption("i", null, "force", false, "Install without checking the existence of old data in the database.", true));
+		//files
+		options.addOption(new OmOption("f", null, "cleanup", false, "Should intermediate files be clean up", true));
+		
+		return options;
+	}
+	
+	private enum Command {
+		install
+		, backup
+		, restore
+		, files
+		, usage
+	}
+	
+	private void usage() {
+		OmHelpFormatter formatter = new OmHelpFormatter();
+		formatter.setWidth(100);
+		formatter.printHelp("admin", "Please specify one of the required parameters.", opts, "Examples:\n" +
+				"\t./admin.sh -b\n" +
+				"\t./admin.sh -i -v -file backup_31_07_2012_12_07_51.zip --drop\n" +
+				"\t./admin.sh -i -v -user admin -email someemail@gmail.com -tz \"Asia/Tehran\" -group \"yourgroup\" --db-type mysql --db-host localhost");
+	}
+	
+	private void handleError(String msg, Exception e) {
+		handleError(msg, e, false);
+	}
+	
+	private void handleError(String msg, Exception e, boolean printUsage) {
+		if (printUsage) {
+			usage();
+		}
+		if (verbose) {
+			log.error(msg, e);
+		} else {
+			log.error(msg + " " + e.getMessage());
+		}
+		System.exit(1);
+	}
+	
+	private ClassPathXmlApplicationContext getApplicationContext(final String ctxName) {
+		if (ctx == null) {
+			OMContextListener omcl = new OMContextListener();
+			omcl.contextInitialized(new ServletContextEvent(new DummyServletContext(ctxName)));
+			try {
+				ctx = new ClassPathXmlApplicationContext("openmeetings-applicationContext.xml");
+			} catch (Exception e) {
+				handleError("Unable to obtain application context", e);
+			}
+			SchedulerFactoryBean sfb = ctx.getBean(SchedulerFactoryBean.class);
+			try {
+				sfb.getScheduler().shutdown(false);
+			} catch (Exception e) {
+				handleError("Unable to shutdown schedulers", e);
+			}
+		}
+		return ctx;
+	}
+	
+	private void process(String[] args) {
+		String ctxName = System.getProperty("context", "openmeetings");
+		File home = new File(System.getenv("RED5_HOME"));
+		OmFileHelper.setOmHome(new File(new File(home, "webapps"), ctxName));
+		
+		CommandLineParser parser = new DefaultParser();
+		try {
+			cmdl = parser.parse(opts, args);
+		} catch (ParseException e) {
+			System.out.println(e.getMessage());
+			usage();
+			System.exit(1);
+		}
+		verbose = cmdl.hasOption('v');
+
+		Command cmd = Command.usage;
+		if (cmdl.hasOption('i')) {
+			cmd = Command.install;
+		} else if (cmdl.hasOption('b')) {
+			cmd = Command.backup;
+		} else if (cmdl.hasOption('r')) {
+			cmd = Command.restore;
+		} else if (cmdl.hasOption('f')) {
+			cmd = Command.files;
+		}
+
+		String file = cmdl.getOptionValue("file", "");
+		switch(cmd) {
+			case install:
+				try {
+					if (cmdl.hasOption("file") && (cmdl.hasOption("user") || cmdl.hasOption("email") || cmdl.hasOption("group"))) {
+						System.out.println("Please specify even 'file' option or 'admin user'.");
+						System.exit(1);
+					}
+					boolean force = cmdl.hasOption("force");
+					if (cmdl.hasOption("skip-default-rooms")) {
+						cfg.createDefaultRooms = "0";
+					}
+					if (cmdl.hasOption("disable-frontend-register")) {
+						cfg.allowFrontendRegister = "0";
+					}
+					if (cmdl.hasOption("system-email-address")) {
+						cfg.mailReferer = cmdl.getOptionValue("system-email-address");
+					}
+					if (cmdl.hasOption("smtp-server")) {
+						cfg.smtpServer = cmdl.getOptionValue("smtp-server");
+					}
+					if (cmdl.hasOption("smtp-port")) {
+						cfg.smtpPort = Integer.valueOf(cmdl.getOptionValue("smtp-port"));
+					}
+					if (cmdl.hasOption("email-auth-user")) {
+						cfg.mailAuthName = cmdl.getOptionValue("email-auth-user");
+					}
+					if (cmdl.hasOption("email-auth-pass")) {
+						cfg.mailAuthPass = cmdl.getOptionValue("email-auth-pass");
+					}
+					if (cmdl.hasOption("email-use-tls")) {
+						cfg.mailUseTls = "1";
+					}
+					ConnectionProperties connectionProperties = new ConnectionProperties();
+					File conf = OmFileHelper.getPersistence();
+					if (!conf.exists() || cmdl.hasOption("db-type") || cmdl.hasOption("db-host") || cmdl.hasOption("db-port") || cmdl.hasOption("db-name") || cmdl.hasOption("db-user") || cmdl.hasOption("db-pass")) {
+						String dbType = cmdl.getOptionValue("db-type", "derby");
+						connectionProperties = ConnectionPropertiesPatcher.patch(dbType
+								, cmdl.getOptionValue("db-host", "localhost")
+								, cmdl.getOptionValue("db-port", null)
+								, cmdl.getOptionValue("db-name", null)
+								, cmdl.getOptionValue("db-user", null)
+								, cmdl.getOptionValue("db-pass", null)
+								);
+					} else {
+						//get properties from existent persistence.xml
+						connectionProperties = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+					}
+					if (cmdl.hasOption("file")) {
+						File backup = checkRestoreFile(file);
+						dropDB(connectionProperties);
+						
+						ImportInitvalues importInit = getApplicationContext(ctxName).getBean(ImportInitvalues.class);
+						importInit.loadSystem(cfg, force); 
+						restoreOm(ctxName, backup);
+					} else {
+						checkAdminDetails(ctxName);
+						dropDB(connectionProperties);
+						
+						ImportInitvalues importInit = getApplicationContext(ctxName).getBean(ImportInitvalues.class);
+						importInit.loadAll(cfg, force);
+					}					
+					
+					InstallationDocumentHandler.createDocument(3);
+				} catch(Exception e) {
+					handleError("Install failed", e);
+				}
+				break;
+			case backup:
+				try {
+					File f;
+					if (!cmdl.hasOption("file")) {
+						file = "backup_" + CalendarPatterns.getTimeForStreamId(new Date()) + ".zip";
+						f = new File(home, file);
+						System.out.println("File name was not specified, '" + file + "' will be used");
+					} else {
+						f = new File(file);
+					}
+					boolean includeFiles = !cmdl.hasOption("exclude-files");
+					File backup_dir = new File(OmFileHelper.getUploadTempDir(), "" + System.currentTimeMillis());
+					backup_dir.mkdirs();
+					
+					BackupExport export = getApplicationContext(ctxName).getBean(BackupExport.class);
+					export.performExport(f, backup_dir, includeFiles, new ProgressHolder());
+					FileHelper.removeRec(backup_dir);
+					backup_dir.delete();
+				} catch (Exception e) {
+					handleError("Backup failed", e);
+				}
+				break;
+			case restore:
+				try {
+					restoreOm(ctxName, checkRestoreFile(file));
+				} catch (Exception e) {
+					handleError("Restore failed", e);
+				}
+				break;
+			case files:
+				try {
+					boolean cleanup = cmdl.hasOption("cleanup");
+					if (cleanup) {
+						System.out.println("WARNING: all intermadiate files will be clean up!");
+					}
+					StringBuilder report = new StringBuilder();
+					report.append("Temporary files allocates: ").append(OmFileHelper.getHumanSize(OmFileHelper.getUploadTempDir())).append("\n");
+					{ //UPLOAD
+						long sectionSize = OmFileHelper.getSize(OmFileHelper.getUploadDir());
+						report.append("Upload totally allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						//Profiles
+						File profiles = OmFileHelper.getUploadProfilesDir();
+						long invalid = 0;
+						long deleted = 0;
+						ClassPathXmlApplicationContext ctx = getApplicationContext(ctxName);
+						UserDao udao = ctx.getBean(UserDao.class);
+						for (File profile : profiles.listFiles()) {
+							long pSize = OmFileHelper.getSize(profile);
+							long userId = getUserIdByProfile(profile.getName());
+							User u = udao.get(userId);
+							if (profile.isFile() || userId < 0 || u == null) {
+								if (cleanup) {
+									FileHelper.removeRec(profile);
+								} else {
+									invalid += pSize;
+								}
+							} else if (u.getDeleted()) {
+								if (cleanup) {
+									FileHelper.removeRec(profile);
+								} else {
+									deleted += pSize;
+								}
+							}
+						}
+						long missing = 0;
+						for (User u : udao.getAllBackupUsers()) {
+							if (!u.getDeleted() && u.getPictureuri() != null && !new File(OmFileHelper.getUploadProfilesUserDir(u.getUser_id()), u.getPictureuri()).exists()) {
+								missing++;
+							}
+						}
+						long size = OmFileHelper.getSize(profiles);
+						long restSize = sectionSize - size;
+						report.append("\t\tprofiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
+						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						size = OmFileHelper.getSize(OmFileHelper.getUploadImportDir());
+						restSize -= size;
+						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						size = OmFileHelper.getSize(OmFileHelper.getUploadBackupDir());
+						restSize -= size;
+						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						//Files
+						File files = OmFileHelper.getUploadFilesDir();
+						size = OmFileHelper.getSize(files);
+						restSize -= size;
+						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
+						invalid = 0;
+						deleted = 0;
+						for (File f : files.listFiles()) {
+							long fSize = OmFileHelper.getSize(f);
+							FileExplorerItem item = fileDao.getFileExplorerItemsByHash(f.getName());
+							if (item == null) {
+								if (cleanup) {
+									FileHelper.removeRec(f);
+								} else {
+									invalid += fSize;
+								}
+							} else if (item.getDeleted()) {
+								if (cleanup) {
+									FileHelper.removeRec(f);
+								} else {
+									deleted += fSize;
+								}
+							}
+						}
+						missing = 0;
+						for (FileExplorerItem item : fileDao.getFileExplorerItems()) {
+							if (!item.getDeleted() && item.getFileHash() != null && !new File(files, item.getFileHash()).exists()) {
+								missing++;
+							}
+						}
+						report.append("\t\tfiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
+						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+					}
+					{ //STREAMS
+						File streamsDir = OmFileHelper.getStreamsDir();
+						File hibernateDir = OmFileHelper.getStreamsHibernateDir();
+						if (cleanup) {
+							String hiberPath = hibernateDir.getCanonicalPath();
+							for (File f : streamsDir.listFiles()) {
+								if (!f.getCanonicalPath().equals(hiberPath)) {
+									FileHelper.removeRec(f);
+								}
+							}
+						}
+						long sectionSize = OmFileHelper.getSize(streamsDir);
+						report.append("Recordings allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						long size = OmFileHelper.getSize(hibernateDir);
+						long restSize = sectionSize - size;
+						FlvRecordingDao recordDao = getApplicationContext(ctxName).getBean(FlvRecordingDao.class);
+						long[] params = {0, 0}; // [0] == deleted [1] == missing
+						for (FlvRecording rec : recordDao.getAllFlvRecordings()) {
+							checkRecordingFile(hibernateDir, rec.getFileHash(), rec.getDeleted(), params, cleanup);
+							checkRecordingFile(hibernateDir, rec.getAlternateDownload(), rec.getDeleted(), params, cleanup);
+							checkRecordingFile(hibernateDir, rec.getPreviewImage(), rec.getDeleted(), params, cleanup);
+						}
+						long invalid = 0;
+						for (File f : hibernateDir.listFiles()) {
+							if (f.isFile() && f.getName().endsWith(".flv")) {
+								FlvRecording rec = recordDao.getRecordingByHash(f.getName());
+								if (rec == null) {
+									cleanUpFile(invalid, cleanup, f);
+									String name = f.getName().substring(0, f.getName().length() - 5);
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".avi"));
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".jpg"));
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".flv.meta"));
+								}
+							}
+						}
+						report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(params[0])).append("\n");
+						report.append("\t\t\tmissing count: ").append(params[1]).append("\n");
+						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+					}
+					System.out.println(report);
+				} catch (Exception e) {
+					handleError("Files failed", e);
+				}
+				break;
+			case usage:
+			default:
+				usage();
+				break;
+		}
+		
+		System.out.println("... Done");
+		System.exit(0);
+	}
+	
+	private long cleanUpFile(long invalid, boolean cleanup, File f) {
+		if (f.exists()) {
+			if (cleanup) {
+				FileHelper.removeRec(f);
+			} else {
+				invalid += f.length();
+			}
+		}
+		return invalid;
+	}
+	private void checkRecordingFile(File hibernateDir, String name, boolean deleted, long[] params, boolean cleanup) {
+		File flv = name != null ? new File(hibernateDir, name) : null;
+		if (flv != null) {
+			if (flv.exists() && flv.isFile()) {
+				if (deleted) {
+					params[0] += flv.length();
+					if (cleanup) {
+						FileHelper.removeRec(flv);
+					}
+				}
+			} else {
+				params[1]++;
+			}
+		}
+	}
+	
+	private long getUserIdByProfile(String name) {
+		long result = -1;
+		if (name.startsWith(OmFileHelper.profilesPrefix)) {
+			try {
+				result = Long.parseLong(name.substring(OmFileHelper.profilesPrefix.length()));
+			} catch (Exception e) {
+				//noop
+			}
+		}
+		return result;
+	}
+	
+	private void checkAdminDetails(String ctxName) throws Exception {
+		cfg.username = cmdl.getOptionValue("user");
+		cfg.email = cmdl.getOptionValue("email");
+		cfg.group = cmdl.getOptionValue("group");
+		if (cfg.username == null || cfg.username.length() < USER_LOGIN_MINIMUM_LENGTH) {
+			System.out.println("User login was not provided, or too short, should be at least " + USER_LOGIN_MINIMUM_LENGTH + " character long.");
+			System.exit(1);
+		}
+		
+		try {
+			if (cfg.email == null || !MailUtil.matches(cfg.email)) {
+			    throw new AddressException("Invalid address");
+			}
+			new InternetAddress(cfg.email, true);
+		} catch (AddressException ae) {
+			System.out.println("Please provide non-empty valid email: '" + cfg.email + "' is not valid.");
+			System.exit(1);
+		}
+		if (cfg.group == null || cfg.group.length() < 1) {
+			System.out.println("User group was not provided, or too short, should be at least 1 character long: " + cfg.group);
+			System.exit(1);
+		}
+		cfg.password = cmdl.getOptionValue("password");
+		ConfigurationDao cfgDao = getApplicationContext(ctxName).getBean(ConfigurationDao.class);
+		if (invalidPassword(cfg.password, cfgDao)) {
+			System.out.print("Please enter password for the user '" + cfg.username + "':");
+			cfg.password = new BufferedReader(new InputStreamReader(System.in)).readLine();
+			if (invalidPassword(cfg.password, cfgDao)) {
+				System.out.println("Password was not provided, or too short, should be at least " + getMinPasswdLength(cfgDao) + " character long.");
+				System.exit(1);
+			}
+		}
+		Map<String, String> tzMap = ImportHelper.getAllTimeZones(TimeZone.getAvailableIDs());
+		cfg.ical_timeZone = null;
+		if (cmdl.hasOption("tz")) {
+			cfg.ical_timeZone = cmdl.getOptionValue("tz");
+			cfg.ical_timeZone = tzMap.containsKey(cfg.ical_timeZone) ? cfg.ical_timeZone : null;
+		}
+		if (cfg.ical_timeZone == null) {
+			System.out.println("Please enter timezone, Possible timezones are:");
+			
+			for (Map.Entry<String,String> me : tzMap.entrySet()) {
+				System.out.println(String.format("%1$-25s%2$s", "\"" + me.getKey() + "\"", me.getValue()));
+			}
+			System.exit(1);
+		}
+	}
+	
+	public void dropDB() throws Exception {
+		File conf = OmFileHelper.getPersistence();
+		ConnectionProperties connectionProperties = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+		immediateDropDB(connectionProperties);
+	}
+	
+	private void dropDB(ConnectionProperties props) throws Exception {
+		if(cmdl.hasOption("drop")) {
+			immediateDropDB(props);
+		}
+	}
+	
+	private static LogImpl getLogImpl(JDBCConfiguration conf) {
+		return (LogImpl)conf.getLog(JDBCConfiguration.LOG_SCHEMA);
+	}
+
+	private static void runSchemaTool(JDBCConfigurationImpl conf, String action) throws Exception {
+		SchemaTool st = new SchemaTool(conf, action);
+		st.setIgnoreErrors(true);
+		st.setOpenJPATables(true);
+		st.setIndexes(false);
+		st.setPrimaryKeys(false);
+		if (!SchemaTool.ACTION_DROPDB.equals(action)) {
+			st.setSchemaGroup(st.getDBSchemaGroup());
+		}
+		st.run();
+	}
+	
+	private void immediateDropDB(ConnectionProperties props) throws Exception {
+		if (ctx != null) {
+			ctx.destroy();
+			ctx = null;
+		}
+    	JDBCConfigurationImpl conf = new JDBCConfigurationImpl();
+        try {
+        	conf.setPropertiesFile(OmFileHelper.getPersistence());
+        	conf.setConnectionDriverName(props.getDriver());
+        	conf.setConnectionURL(props.getURL());
+        	conf.setConnectionUserName(props.getLogin());
+        	conf.setConnectionPassword(props.getPassword());
+    		//HACK to suppress all warnings
+    		getLogImpl(conf).setLevel(Log.INFO);
+    		runSchemaTool(conf, SchemaTool.ACTION_DROPDB);
+    		runSchemaTool(conf, SchemaTool.ACTION_CREATEDB);
+        } finally {
+            conf.close();
+        }
+	}
+
+	private File checkRestoreFile(String file) {
+		File backup = new File(file);
+		if (!cmdl.hasOption("file") || !backup.exists() || !backup.isFile()) {
+			System.out.println("File should be specified, and point the existent zip file");
+			usage();
+			System.exit(1);
+		}
+		
+		return backup;
+	}
+	
+	private void restoreOm(String ctxName, File backup) {
+		InputStream is = null;
+		try {
+			BackupImport importCtrl = getApplicationContext(ctxName).getBean(BackupImport.class);
+			is = new FileInputStream(backup);
+			importCtrl.performImport(is);
+		} catch (Exception e) {
+			handleError("Restore failed", e);
+		} finally {
+			if (is != null) {
+				try {
+					is.close();
+				} catch (IOException e) {
+					throw new RuntimeException("Error while closing ldap config file", e);
+				}
+			}
+		}
+	}
+	
+	public static void main(String[] args) {
+		new Admin().process(args);
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java b/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java
new file mode 100644
index 0000000..ea4e012
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.Serializable;
+
+public class ConnectionProperties implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public enum DbType {
+		db2
+		, derby
+		, mssql
+		, mysql
+		, oracle
+		, postgresql
+	}
+
+	private String driver = "org.apache.derby.jdbc.EmbeddedDriver";
+	private String url = "jdbc:derby:openmeetings";
+	private String login = "user";
+	private String password = "secret";
+	private DbType dbType = DbType.derby;
+
+	public String getDriver() {
+		return driver;
+	}
+
+	public void setDriver(String driverName) {
+		this.driver = driverName;
+	}
+
+	public String getURL() {
+		return url;
+	}
+
+	public void setURL(String connectionURL) {
+		this.url = connectionURL;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String connectionLogin) {
+		this.login = connectionLogin;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String connectionPass) {
+		this.password = connectionPass;
+	}
+
+	public DbType getDbType() {
+		return dbType;
+	}
+
+	public void setDbType(DbType dbType) {
+		this.dbType = dbType;
+	}
+	
+	@Override
+	public String toString() {
+		return "ConnectionProperties [type=" + dbType + ", driver=" + driver + ", url=" + url
+				+ ", login=" + login + ", password=" + password + "]";
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java b/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
new file mode 100644
index 0000000..79819ee
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.File;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public abstract class ConnectionPropertiesPatcher {
+	protected static final String URL_PREFIX = "Url";
+	protected static final String DRIVER_PREFIX = "DriverClassName";
+	protected static final String USER_PREFIX = "Username";
+	protected static final String PASS_PREFIX = "Password";
+	protected ConnectionProperties props;
+	
+	public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) {
+		ConnectionPropertiesPatcher patcher = null;
+		switch (props.getDbType()) {
+			case db2:
+				patcher = new Db2Patcher();
+				break;
+			case mssql:
+				patcher = new MssqlPatcher();
+				break;
+			case mysql:
+				patcher = new MysqlPatcher();
+				break;
+			case oracle:
+				patcher = new OraclePatcher();
+				break;
+			case postgresql:
+				patcher = new PostgresPatcher();
+				break;
+			case derby:
+			default:
+				patcher = new DerbyPatcher();
+				break;
+		}
+		patcher.props = props;
+		return patcher;
+	}
+	
+	public static ConnectionProperties getConnectionProperties(File conf) throws Exception {
+		ConnectionProperties props = new ConnectionProperties();
+		Document doc = getDocument(conf);
+		Attr attr = getConnectionProperties(doc);
+		String[] tokens = attr.getValue().split(",");
+		loadProperties(tokens, props);
+		
+		return props;
+	}
+	
+	private static Document getDocument(File xml) throws Exception {
+		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+		//dbFactory.setNamespaceAware(true);
+		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+		return dBuilder.parse(xml);
+	}
+	
+	private static Attr getConnectionProperties(Document doc) throws Exception {
+		XPath xPath = XPathFactory.newInstance().newXPath();
+		XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']");
+
+		Element element = (Element)expr.evaluate(doc, XPathConstants.NODE);
+		return element.getAttributeNode("value");
+	}
+	
+	public static void patch(ConnectionProperties props) throws Exception {
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType()));
+		Attr attr = getConnectionProperties(doc);
+		String[] tokens = attr.getValue().split(",");
+		patcher.patchAttribute(tokens);
+		attr.setValue(StringUtils.join(tokens, ","));
+		
+		TransformerFactory transformerFactory = TransformerFactory.newInstance();
+		Transformer transformer = transformerFactory.newTransformer();
+		DOMSource source = new DOMSource(doc);
+		transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI
+	}
+	
+	public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception {
+		ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType));
+		props.setLogin(user);
+		props.setPassword(pass);
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
+		patch(props);
+		return props;
+	}
+	
+	public static void updateUrl(ConnectionProperties props, String host, String port, String db) {
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
+	}
+	
+	protected void patchAttribute(String[] tokens) {
+		for (int i = 0; i < tokens.length; ++i) {
+			patchProp(tokens, i, USER_PREFIX, props.getLogin());
+			patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword());
+			patchProp(tokens, i, URL_PREFIX, props.getURL());
+		}
+	}
+
+	protected static void patchProp(String[] tokens, int idx, String name, String value) {
+		String prop = tokens[idx].trim();
+		if (prop.startsWith(name)) {
+			prop = name + "=" + StringEscapeUtils.escapeXml10(value);
+			tokens[idx] = prop;
+		}
+	}
+	
+	private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) {
+		String prop;
+		for (int i = 0; i < tokens.length; ++i) {
+			prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX);
+			if (prop != null) {
+				connectionProperties.setDriver(prop);
+			}
+			
+			prop = getPropFromPersistence(tokens, i, USER_PREFIX);
+			if (prop != null) {
+				connectionProperties.setLogin(prop);
+			}
+			
+			prop = getPropFromPersistence(tokens, i, PASS_PREFIX);
+			if (prop != null) {
+				connectionProperties.setPassword(prop);
+			}
+
+			prop = getPropFromPersistence(tokens, i, URL_PREFIX);
+			if (prop != null) {
+				try {
+					//will try to "guess" dbType
+					String[] parts = prop.split(":");
+					connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1]));
+				} catch (Exception e) {
+					//ignore
+				}
+				connectionProperties.setURL(prop);
+			}
+		}
+	}
+	
+	protected static String getPropFromPersistence(String[] tokens, int idx, String name){
+		String prop = tokens[idx].trim();
+		if (prop.startsWith(name)) {
+			//From "Username=root" getting only "root"
+			return prop.substring(prop.indexOf("=") + 1);
+		}
+		return null;
+	}
+	
+	protected abstract String getUrl(String url, String host, String port, String db);
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java b/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java
new file mode 100644
index 0000000..b681979
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class Db2Patcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "50000" : _port;
+		String db = (_db == null) ? "openmeet" : _db;
+		return "jdbc:db2://" + host + ":" + port + "/" + db; 
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java b/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java
new file mode 100644
index 0000000..ff5498e
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class DerbyPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String db = (_db == null) ? "openmeetings" : _db;
+		String suffix = _url.substring(_url.indexOf(';'));
+		
+		if (host != null && _port != null) {
+			//return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix;
+		}
+		
+		return "jdbc:derby" + ":" + db + suffix; 
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java b/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java
new file mode 100644
index 0000000..777f983
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java
@@ -0,0 +1,348 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.FilterRegistration.Dynamic;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
+
+public class DummyServletContext implements ServletContext {
+	private String ctx;
+	
+	public DummyServletContext(String ctx) {
+		this.ctx = ctx;
+	}
+
+	@Override
+	public Dynamic addFilter(String arg0, String arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Dynamic addFilter(String arg0, Filter arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public void addListener(String arg0) {
+		// stab
+	}
+
+	@Override
+	public <T extends EventListener> void addListener(T arg0) {
+		// stab
+	}
+
+	@Override
+	public void addListener(Class<? extends EventListener> arg0) {
+		// stab
+	}
+
+	@Override
+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Class<? extends Servlet> arg1) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {
+		// stab
+		return null;
+	}
+
+	@Override
+	public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {
+		// stab
+		return null;
+	}
+
+	@Override
+	public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {
+		// stab
+		return null;
+	}
+
+	@Override
+	public void declareRoles(String... arg0) {
+		// stab
+	}
+
+	@Override
+	public Object getAttribute(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Enumeration<String> getAttributeNames() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public ClassLoader getClassLoader() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public ServletContext getContext(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getContextPath() {
+		return ctx;
+	}
+
+	@Override
+	public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public int getEffectiveMajorVersion() {
+		// stab
+		return 0;
+	}
+
+	@Override
+	public int getEffectiveMinorVersion() {
+		// stab
+		return 0;
+	}
+
+	@Override
+	public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public FilterRegistration getFilterRegistration(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getInitParameter(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Enumeration<String> getInitParameterNames() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public JspConfigDescriptor getJspConfigDescriptor() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public int getMajorVersion() {
+		// stab
+		return 0;
+	}
+
+	@Override
+	public String getMimeType(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public int getMinorVersion() {
+		// stab
+		return 0;
+	}
+
+	@Override
+	public RequestDispatcher getNamedDispatcher(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getRealPath(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public RequestDispatcher getRequestDispatcher(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public URL getResource(String arg0) throws MalformedURLException {
+		// stab
+		return null;
+	}
+
+	@Override
+	public InputStream getResourceAsStream(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Set<String> getResourcePaths(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getServerInfo() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Servlet getServlet(String arg0) throws ServletException {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getServletContextName() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Enumeration<String> getServletNames() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public ServletRegistration getServletRegistration(String arg0) {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public Enumeration<Servlet> getServlets() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public SessionCookieConfig getSessionCookieConfig() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public String getVirtualServerName() {
+		// stab
+		return null;
+	}
+
+	@Override
+	public void log(String arg0) {
+		// stab
+	}
+
+	@Override
+	public void log(Exception arg0, String arg1) {
+		// stab
+	}
+
+	@Override
+	public void log(String arg0, Throwable arg1) {
+		// stab
+	}
+
+	@Override
+	public void removeAttribute(String arg0) {
+		// stab
+	}
+
+	@Override
+	public void setAttribute(String arg0, Object arg1) {
+		// stab
+	}
+
+	@Override
+	public boolean setInitParameter(String arg0, String arg1) {
+		// stab
+		return false;
+	}
+
+	@Override
+	public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {
+		// stab
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java b/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java
new file mode 100644
index 0000000..681331d
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class MssqlPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "1433" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java b/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java
new file mode 100644
index 0000000..163e710
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class MysqlPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "3306" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		String suffix = _url.substring(_url.indexOf('?'));
+		return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java b/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java
new file mode 100644
index 0000000..8cfe911
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionGroup;
+import org.apache.commons.cli.Options;
+
+public class OmHelpFormatter extends HelpFormatter {
+	private static String GENERAL_OPTION_GROUP = "";
+	private int maxPrefixLength = 0;
+	
+	@SuppressWarnings("unchecked")
+	private List<OmOption> getReqOptions(Options opts) {
+		//suppose we have only 1 group (for now)
+		OptionGroup g = ((List<OptionGroup>)opts.getRequiredOptions()).get(0);
+		List<OmOption> result = new ArrayList<OmOption>();
+		for (Option o : g.getOptions()) {
+			result.add((OmOption)o);
+		}
+		Collections.sort(result, new Comparator<OmOption>() {
+			public int compare(OmOption o1, OmOption o2) {
+				return o1.getOrder() - o2.getOrder();
+			}
+		});
+		return result;
+	}
+	
+	private LinkedHashMap<String, List<OmOption>> getOptions(Options opts, int leftPad) {
+		final String longOptSeparator = " ";
+		final String lpad = createPadding(leftPad);
+		final String lpadParam = createPadding(leftPad + 2);
+		List<OmOption> reqOptions = getReqOptions(opts);
+		LinkedHashMap<String, List<OmOption>> map = new LinkedHashMap<String, List<OmOption>>(reqOptions.size());
+		map.put(GENERAL_OPTION_GROUP, new ArrayList<OmOption>());
+		for (OmOption o : reqOptions) {
+			map.put(o.getOpt(), new ArrayList<OmOption>());
+		}
+		for (Option _o : opts.getOptions()) {
+			OmOption o = (OmOption)_o;
+			//TODO need better check (required option should go first and should not be duplicated
+			boolean skipOption = map.containsKey(o.getOpt());
+			boolean mainOption = skipOption || o.getGroup() == null;
+			
+			// first create list containing only <lpad>-a,--aaa where
+			// -a is opt and --aaa is long opt; in parallel look for
+			// the longest opt string this list will be then used to
+			// sort options ascending
+			StringBuilder optBuf = new StringBuilder();
+			if (o.getOpt() == null) {
+				optBuf.append(mainOption ? lpad : lpadParam).append("   ").append(getLongOptPrefix())
+						.append(o.getLongOpt());
+			} else {
+				optBuf.append(mainOption ? lpad : lpadParam).append(getOptPrefix())
+						.append(o.getOpt());
+
+				if (o.hasLongOpt()) {
+					optBuf.append(',').append(getLongOptPrefix())
+							.append(o.getLongOpt());
+				}
+			}
+
+			if (o.hasArg()) {
+				String argName = o.getArgName();
+				if (argName != null && argName.length() == 0) {
+					// if the option has a blank argname
+					optBuf.append(' ');
+				} else {
+					optBuf.append(o.hasLongOpt() ? longOptSeparator : " ");
+					optBuf.append("<")
+							.append(argName != null ? o.getArgName()
+									: getArgName()).append(">");
+				}
+			}
+
+			o.setHelpPrefix(optBuf);
+			maxPrefixLength = Math.max(optBuf.length(), maxPrefixLength);
+			
+			if (skipOption) {
+				//TODO need better check (required option should go first and should not be duplicated
+				continue;
+			}
+			String grp = o.getGroup();
+			grp = grp == null ? GENERAL_OPTION_GROUP : grp;
+			String[] grps = grp.split(",");
+			for(String g : grps) {
+				map.get(g).add(o);
+			}
+		}
+		for (String _key : map.keySet()) {
+			final String key = _key;
+			List<OmOption> options = map.get(key);
+			Collections.sort(options, new Comparator<OmOption>(){
+				public int compare(OmOption o1, OmOption o2) {
+					boolean o1opt = !o1.isOptional(key);
+					boolean o2opt = !o2.isOptional(key);
+					return (o1opt && o2opt || !o1opt && !o2opt) ? (o1.getOpt() == null ? 1 : -1) : (o1opt ? -1 : 1);
+				}
+				
+			});
+			if (opts.hasOption(key)) {
+				options.add(0, (OmOption)opts.getOption(key));
+			}
+		}
+		return map;
+	}
+	
+	private StringBuilder getReqOptionsString(Options opts) {
+		String delim = "";
+		StringBuilder result = new StringBuilder();
+		for (Option o : getReqOptions(opts)) {
+			result.append(delim).append("-").append(o.getOpt());
+			delim = "|";
+		}
+		return result;
+	}
+	
+	@Override
+	protected StringBuffer renderOptions(StringBuffer sb, int width, Options options, int leftPad, int descPad) {
+		final String dpad = createPadding(descPad);
+		final String optional = "(optional) ";
+
+		LinkedHashMap<String, List<OmOption>> optList = getOptions(options, leftPad);
+
+		char[] delimiter = new char[width - 2];
+		Arrays.fill(delimiter, '-');
+
+		for (String key : optList.keySet()) {
+			if (GENERAL_OPTION_GROUP.equals(key)) {
+				sb.append("General options:").append(getNewLine());
+			}
+			for (OmOption option : optList.get(key)) {
+				StringBuilder optBuf = new StringBuilder(option.getHelpPrefix());
+
+				if (optBuf.length() < maxPrefixLength) {
+					optBuf.append(createPadding(maxPrefixLength - optBuf.length()));
+				}
+
+				optBuf.append(dpad);
+
+				int nextLineTabStop = maxPrefixLength + descPad;
+
+				if (option.isOptional(key)) {
+					optBuf.append(optional);
+				}
+				if (option.getDescription() != null) {
+					optBuf.append(option.getDescription());
+				}
+
+				renderWrappedText(sb, width, nextLineTabStop, optBuf.toString());
+
+				sb.append(getNewLine());
+			}
+			sb.append(delimiter).append(getNewLine());
+		}
+		return sb;
+	}
+
+	@Override
+	public void printHelp(PrintWriter pw, int width, String cmdLineSyntax,
+			String header, Options options, int leftPad, int descPad,
+			String footer, boolean autoUsage) {
+		if ((cmdLineSyntax == null) || (cmdLineSyntax.length() == 0)) {
+			throw new IllegalArgumentException("cmdLineSyntax not provided");
+		}
+
+		printUsage(pw, width, cmdLineSyntax, options);
+
+		if ((header != null) && (header.trim().length() > 0)) {
+			printWrapped(pw, width, header);
+		}
+
+		printOptions(pw, width, options, leftPad, descPad);
+
+		if ((footer != null) && (footer.trim().length() > 0)) {
+			printWrapped(pw, width, footer);
+		}
+	}
+    
+	public void printUsage(PrintWriter pw, int width, String app, Options opts) {
+		pw.println(String.format("usage: %1$s [%2$s] [options]", app, getReqOptionsString(opts)));
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/OmOption.java b/src/install/java/org/apache/openmeetings/cli/OmOption.java
new file mode 100644
index 0000000..bca3109
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OmOption.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.cli.Option;
+
+public class OmOption extends Option {
+	private static final long serialVersionUID = 1L;
+	private String group = null;
+	private Map<String, Boolean> optional = null;
+	private int order = 0;
+	private String helpPrefix = "";
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description, boolean optional) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+		setOptional(optional);
+	}
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description, String optional) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+		setOptional(optional);
+	}
+
+	public OmOption(String group, int order, String opt, String longOpt, boolean hasArg,
+			String description) throws IllegalArgumentException {
+		super(opt, longOpt, hasArg, description);
+		this.group = group;
+		this.setOrder(order);
+	}
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+	}
+
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public boolean isOptional(String group) {
+		boolean result = false;
+		if (optional != null) {
+			String[] grps = group.split(",");
+			for(String g : grps) {
+				result |= optional.containsKey(g) ? optional.get(g) : false;
+			}
+		}
+		return result;
+	}
+
+	public void setOptional(boolean val) {
+		setOptional(group);
+	}
+	
+	public void setOptional(String group) {
+		String[] grps = group.split(",");
+		optional = new HashMap<String, Boolean>(grps.length);
+		for(String g : grps) {
+			optional.put(g, true);
+		}
+	}
+
+	public int getOrder() {
+		return order;
+	}
+
+	public void setOrder(int order) {
+		this.order = order;
+	}
+
+	public String getHelpPrefix() {
+		return helpPrefix;
+	}
+
+	public void setHelpPrefix(StringBuilder helpPrefix) {
+		this.helpPrefix = helpPrefix.toString();
+	}
+
+	public void setHelpPrefix(String helpPrefix) {
+		this.helpPrefix = helpPrefix;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java b/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java
new file mode 100644
index 0000000..6cc9428
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class OraclePatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "1521" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		return "jdbc:oracle:thin:@" + host + ":" + port + ":" + db; 
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java b/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java
new file mode 100644
index 0000000..e1b885c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class PostgresPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "5432" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		return "jdbc:postgresql://" + host + ":" + port + "/" + db; 
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java b/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
new file mode 100644
index 0000000..8995baf
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -0,0 +1,733 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import static org.apache.openmeetings.db.dao.basic.ConfigurationDao.DEFAULT_APP_NAME;
+import static org.apache.openmeetings.db.dao.basic.ConfigurationDao.DEFAULT_MAX_UPLOAD_SIZE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_FIRST_DAY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.room.SipDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.OAuthServer.RequestMethod;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ImportInitvalues {
+	private static final Logger log = Red5LoggerFactory.getLogger(ImportInitvalues.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private StateDao statemanagement;
+	@Autowired
+	private NavigationDao navimanagement;
+	@Autowired
+	private ErrorDao errorManagement;
+	@Autowired
+	private SalutationDao salutationmanagement;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private SipDao sipDao;
+	@Autowired
+	private OAuth2Dao oauthDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomDao roomDao;
+	
+	
+	private int progress = 0;
+
+	public int getProgress() {
+		return progress;
+	}
+	
+	public void loadMainMenu() {
+		/*
+		 * ######################## Dashboard Menu Points
+		 */
+		navimanagement.addGlobalStructure("home", 1, 124, false, true, 1,
+				"home", false, 582L);
+		navimanagement.addMainStructure("dashboardModuleStartScreen", null, 1,
+				290, true, false, 1, "Dashboard Module", 1, false, 1450L);
+		navimanagement.addMainStructure("dashboardModuleCalendar", null, 2,
+				291, true, false, 1, "Module Calendar", 1, false, 1451L);
+
+		/*
+		 * ######################## Conference Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("meetings", 2, 792, false, true, 1,
+				"List of Conference Rooms Global Navi", false, 793L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"publicTabButton", 1, 777, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1506L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"privateTabButton", 2, 779, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1507L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"myTabButton", 3, 781, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1508L);
+
+		/*
+		 * ######################## Recording Menu Points - disabled by default
+		 */
+
+		navimanagement.addGlobalStructure("record", 3, 395, false, true, 1,
+				"record", false, 583L);
+		navimanagement.addMainStructure("recordModule", null, 1, 395, true,
+				false, 1, "Module Recording Player", 3, false, 1452L);
+
+		/*
+		 * ######################## Event Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("events", 4, 3, false, true, 1,
+				"List of Event Rooms Global Navi", true, 585L);
+
+		navimanagement
+				.addMainStructure("eventModuleRoomList", null, 1, 3, true,
+						false, 1, "List of Event Rooms Main Navi", 4, false,
+						null);
+
+		/*
+		 * ######################## Moderation Menu Points - disabled by default
+		 */
+		navimanagement.addGlobalStructure("moderate", 5, 649L, false, true, 2,
+				"Moderation Menu", true, 660L);
+
+		navimanagement.addMainStructure("moderatorModuleUser", null, 1, 650,
+				true, false, 1, "Moderate Users", 5, false, null);
+
+		navimanagement.addMainStructure("moderatorModuleRoom", null, 1, 651,
+				true, false, 1, "Moderate Rooms", 5, false, null);
+
+		/*
+		 * ######################## Administration Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("admin", 6, 6, false, true, 3,
+				"Administration Menu", false, 586L);
+
+		navimanagement.addMainStructure("adminModuleUser", null, 14, 125, true,
+				false, 2, "Administration of Users", 6, false, 1454L);
+
+		navimanagement.addMainStructure("adminModuleConnections", null, 15,
+				597, true, false, 3, "Aministration of Connections", 6, false,
+				1455L);
+
+		navimanagement.addMainStructure("adminModuleOrg", null, 16, 127, true,
+				false, 3, "Administration of Organizations", 6, false, 1456L);
+
+		navimanagement.addMainStructure("adminModuleRoom", null, 17, 186, true,
+				false, 3, "Administration of Rooms", 6, false, 1457L);
+
+		navimanagement.addMainStructure("adminModuleConfiguration", null, 18,
+				263, true, false, 3, "Administration of Configuration", 6,
+				false, 1458L);
+
+		navimanagement.addMainStructure("adminModuleLanguages", null, 19, 348,
+				true, false, 3, "Administration of Languages", 6, false, 1459L);
+
+		navimanagement.addMainStructure("adminModuleLDAP", null, 20, 1103,
+				true, false, 3, "Administration of LDAP Configs", 6, false,
+				1460L);
+
+		navimanagement.addMainStructure("adminModuleOAuth", null, 21, 1571, 
+				true, false, 3, "Administration of OAuth2 servers", 6, false, 1572L);
+
+		navimanagement.addMainStructure("adminModuleBackup", null, 22, 367,
+				true, false, 3, "Administration of Backups", 6, false, 1461L);
+
+		navimanagement.addMainStructure("adminModuleServers", null, 23, 1498,
+				true, false, 3, "Administration of Servers", 6, false, 1499L);
+		log.debug("MainMenu ADDED");
+	}
+	
+	public void loadErrorTypes() {
+		errorManagement.addErrorType(new Long(1), new Long(322));
+		errorManagement.addErrorType(new Long(2), new Long(323));
+		log.debug("Error types ADDED");
+	}
+
+	public void loadErrorMappingsFromXML() throws Exception {
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfErrorFile));
+
+		Element root = document.getRootElement();
+
+		for (@SuppressWarnings("unchecked")
+		Iterator<Element> it = root.elementIterator("row"); it.hasNext();) {
+
+			Element row = it.next();
+
+			Long errorvalues_id = null;
+			Long fieldvalues_id = null;
+			Long errortype_id = null;
+
+			for (@SuppressWarnings("unchecked")
+			Iterator<Element> itSub = row.elementIterator("field"); itSub.hasNext();) {
+				Element field = itSub.next();
+
+				String name = field.attributeValue("name");
+				String text = field.getText();
+				// System.out.println("NAME | TEXT "+name+" | "+text);
+				if (name.equals("errorvalues_id")) {
+					errorvalues_id = Long.valueOf(text);
+				}
+				if (name.equals("fieldvalues_id")) {
+					fieldvalues_id = Long.valueOf(text);
+				}
+				if (name.equals("errortype_id")) {
+					errortype_id = Long.valueOf(text);
+				}
+			}
+
+			errorManagement.addErrorValues(errorvalues_id, errortype_id, fieldvalues_id);
+		}
+		log.debug("ErrorMappings ADDED");
+	}
+
+	public void loadSalutations() {
+		salutationmanagement.addUserSalutation("Mr", 261);
+		salutationmanagement.addUserSalutation("Ms", 262);
+		salutationmanagement.addUserSalutation("Mrs", 841);
+		salutationmanagement.addUserSalutation("Dr", 842);
+		salutationmanagement.addUserSalutation("Prof", 1464);
+		log.debug("Salutations ADDED");
+	}
+
+	public void loadConfiguration(InstallationConfig cfg) {
+		cfgDao.add(CONFIG_CRYPT_KEY, cfg.cryptClassName, null,
+				"This Class is used for Authentification-Crypting. "
+						+ "Be carefull what you do here! If you change it while "
+						+ "running previous Pass of users will not be workign anymore! "
+						+ "for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html");
+
+		cfgDao.add(CONFIG_FRONTEND_REGISTER_KEY, cfg.allowFrontendRegister, null, "Is user register available on login screen");
+		cfgDao.add(CONFIG_SOAP_REGISTER_KEY, "1", null, "Is user register available via SOAP/REST");
+		cfgDao.add(CONFIG_OAUTH_REGISTER_KEY, "1", null, "Is user register available via OAuth");
+		// this group_id is the Organisation of users who register through the frontend or SOAP
+		cfgDao.add(CONFIG_DEFAULT_GROUP_ID, "1", null, "");
+
+		cfgDao.add("smtp_server", cfg.smtpServer, null,
+				"this is the smtp server to send messages");
+
+		cfgDao.add("smtp_port", "" + cfg.smtpPort, null,
+				"this is the smtp server port normally 25");
+
+		cfgDao.add("system_email_addr", cfg.mailReferer, null, "all send e-mails by the system will have this address");
+
+		cfgDao.add("email_username", cfg.mailAuthName, null, "System auth email username");
+
+		cfgDao.add("email_userpass", cfg.mailAuthPass, null, "System auth email password");
+
+		cfgDao.add("mail.smtp.starttls.enable", cfg.mailUseTls, null, "Enable TLS 1=true, 0=false");
+		
+		cfgDao.add("mail.smtp.connection.timeout", "30000", null,
+				"Socket connection timeout value in milliseconds. Default is 30 seconds (30000).");
+		
+		cfgDao.add("mail.smtp.timeout", "30000", null,
+				"Socket I/O timeout value in milliseconds. Default is 30 seconds (30000).");
+
+		cfgDao.add("application.name", DEFAULT_APP_NAME, null, "Name of the Browser Title window");
+
+		// "1" == "EN"
+		cfgDao.add(CONFIG_DEFAULT_LANG_KEY, cfg.defaultLangId, null, "Default System Language ID see languages.xml");
+
+		cfgDao.add("swftools_zoom", "" + cfg.swfZoom, null,
+				"dpi for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 dpi)");
+
+		cfgDao.add("swftools_jpegquality", "" + cfg.swfJpegQuality, null,
+				"compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85)");
+
+		cfgDao.add("swftools_path", cfg.swfPath, null, "Path To SWF-Tools");
+
+		cfgDao.add("imagemagick_path", cfg.imageMagicPath, null, "Path to ImageMagick tools");
+
+		cfgDao.add("sox_path", cfg.soxPath, null, "Path To SoX-Tools");
+
+		cfgDao.add("ffmpeg_path", cfg.ffmpegPath, null, "Path To FFMPEG");
+		cfgDao.add("office.path", cfg.officePath, null,
+				"The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically");
+		cfgDao.add("jod.path", cfg.jodPath, null,
+				"The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar");
+
+		cfgDao.add(CONFIG_RSS_FEED1_KEY, cfg.urlFeed, null, "Feed URL");
+
+		cfgDao.add(CONFIG_RSS_FEED2_KEY, cfg.urlFeed2, null, "Feed URL 2");
+
+		cfgDao.add("sendEmailAtRegister", cfg.sendEmailAtRegister, null,
+				"User get a EMail with their Account data. Values: 0(No) or 1(Yes)");
+
+		cfgDao.add("sendEmailWithVerficationCode", cfg.sendEmailWithVerficationCode, null,
+				"User must activate their account by clicking on the "
+					+ "activation-link in the registering Email. Values: 0(No) or 1(Yes) "
+					+ "It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while "
+					+ "sendEmailAtRegister is 0(No) cause you need"
+					+ "to send a EMail.");
+		cfgDao.add("default_export_font", cfg.defaultExportFont, null,
+				"The Name of the Font used for exporting/render Images from Whiteboard"
+					+ "The Font has to exist on the Server which runs Red5");
+
+		cfgDao.add("default.rpc.userid", "" + 1, null, "The User-Id of the Control User in OpenMeetings");
+
+		cfgDao.add(CONFIG_APPLICATION_BASE_URL, cfg.baseUrl, null, "Base URL your OPenmeetings installation will be accessible at.");
+		
+		// ***************************************
+		// ***************************************
+		// red5SIP Integration Coniguration Values
+		// ***************************************
+
+		cfgDao.add("red5sip.enable", cfg.red5SipEnable, null, "Enable to enable the red5SIP integration ");
+		cfgDao.add("red5sip.room_prefix", cfg.red5SipRoomPrefix, null,
+				"Numerical prefix for OM rooms created inside the SIP");
+		cfgDao.add("red5sip.exten_context", cfg.red5SipExtenContext, null,
+				"Enable to enable the red5SIP integration ");
+
+		// ***************************************
+		// ***************************************
+		// Timezone settings
+		// ***************************************
+
+		cfgDao.add("default.timezone", cfg.ical_timeZone, null, "This is the default timezone if nothing is specified");
+
+		// ***************************************
+		// ***************************************
+		// additional settings
+		// ***************************************
+
+		cfgDao.add(CONFIG_SCREENSHARING_QUALITY, "1", null,
+				"Default selection in ScreenSharing Quality:\n 0 - bigger frame rate, no resize\n 1 - no resize\n 2 - size == 1/2 of selected area\n 3 - size == 3/8 of selected area");
+
+		cfgDao.add(CONFIG_SCREENSHARING_FPS, "10", null, "Default selection in ScreenSharing FPS");
+		cfgDao.add(CONFIG_SCREENSHARING_FPS_SHOW, "true", null, "Is screensharing FPS should be displayed or not (true/false)");
+		cfgDao.add(CONFIG_SCREENSHARING_ALLOW_REMOTE, "true", null, "Is remote control will be enabled while screensharing. Allowing remote control will be not possible in case it is set to 'false' (true/false)");
+
+		cfgDao.add(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, "1", null, "Show My Rooms Tab");
+
+		cfgDao.add("dashboard.show.chat", "1", null, "Show Chat Tab");
+
+		cfgDao.add(CONFIG_DASHBOARD_SHOW_RSS_KEY, "0", null, "Show RSS Tab");
+
+		cfgDao.add("show.whiteboard.draw.status", "0", null,
+				"Display name of the user who draw the current object (User Name auto-disapper after 3 seconds.");
+
+		cfgDao.add(CONFIG_MAX_UPLOAD_SIZE_KEY, "" + DEFAULT_MAX_UPLOAD_SIZE, null,
+				"Maximum size of upload file (bytes)"); // defaults to 1GB
+
+		cfgDao.add(CONFIG_APPOINTMENT_REMINDER_MINUTES, "15", null,
+				"The number of minutes before reminder emails are send. Set to 0 to disable reminder emails");
+
+		cfgDao.add(CONFIG_LOGIN_MIN_LENGTH_KEY, "" + USER_LOGIN_MINIMUM_LENGTH, null,
+				"Number of chars needed in a user login");
+
+		cfgDao.add(CONFIG_PASS_MIN_LENGTH_KEY, "" + USER_PASSWORD_MINIMUM_LENGTH, null,
+				"Number of chars needed in a user login");
+
+		cfgDao.add("calendar.conference.rooms.default.size", "50", null,
+				"Default number of participants conference room created via calendar");
+
+		cfgDao.add("use.old.style.ffmpeg.map.option", "0", null,
+				"specify a 1 if you would like to use old FFMPEG -map option with 0.0 instead of 0:0");
+
+		// give exclusive audio key code
+		cfgDao.add("exclusive.audio.keycode", "123", null,
+				"A hot key code for the 'give exclusive audio' functionality. Keycode 123 is F12");
+		// mute/unmute audio key code
+		cfgDao.add("mute.keycode", "118", null,
+				"A hot key code for the 'mute/unmute audio' functionality. Keycode 118 is F7");
+		
+		// system-wide ldap params
+		cfgDao.add(CONFIG_DEFAULT_LDAP_ID, "0", null, "Ldap domain selected by default in the login screen");
+
+		// set inviter's email address as ReplyTo in email invitations
+		cfgDao.add("inviter.email.as.replyto", cfg.replyToOrganizer, null,
+				"Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)");
+
+		cfgDao.add(CONFIG_DEFAULT_LANDING_ZONE, "user/dashboard", null
+				, "Area to be shown to the user after login. Possible values are: "
+					+ "user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection"
+					+ ", admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2");
+		
+		// oauth2 params
+		cfgDao.add(CONFIG_IGNORE_BAD_SSL, "no", null, 
+				"Set \"yes\" or \"no\" to enable/disable ssl certifications checking for OAuth2");
+
+		cfgDao.add(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, "", null,
+				"Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost");
+		cfgDao.add(CONFIG_CALENDAR_FIRST_DAY, "0", null, "The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc.");
+		
+		log.debug("Configurations ADDED");
+	}
+
+	public void loadRoomTypes() {
+		long conference_Id = roomTypeDao.addRoomType(
+				"conference", 1541, false);
+		log.debug("conference_Id: " + conference_Id);
+
+		// Audience room type is not in use anymore
+		roomTypeDao.addRoomType("audience", -1, true);
+
+		long restricted_Id = roomTypeDao.addRoomType(
+				"restricted", 1542, false);
+		log.debug("restricted_Id: " + restricted_Id);
+
+		long interview_Id = roomTypeDao.addRoomType(
+				"interview", 1543, false);
+		log.debug("interview_Id: " + interview_Id);
+
+		// Custom room type is not in use anymore
+		roomTypeDao.addRoomType("custom", -2, true);
+		log.debug("RoomTypes ADDED");
+	}
+
+	private Room createRoom(String name, long typeId, long capacity, boolean isPublic, Long orgId) {
+		Room r = new Room();
+		r.setName(name);
+		r.setComment("");
+		r.setStarttime(new Date());
+		r.setNumberOfPartizipants(capacity);
+		r.setRoomtype(roomTypeDao.get(typeId));
+		r.setIspublic(isPublic);
+		r.setAllowUserQuestions(true);
+		r.setIsAudioOnly(false);
+		r.setAllowFontStyles(true);
+
+		r.setAppointment(false);
+
+		r.setIsDemoRoom(false);
+		r.setDemoTime(null);
+
+		r.setIsModeratedRoom(false);
+		r.setHideTopBar(false);
+
+		r.setDeleted(false);
+
+		r.setIsClosed(false);
+		r.setRedirectURL(null);
+
+		r.setOwnerId(null);
+
+		r.setWaitForRecording(false);
+		r.setAllowRecording(true);
+		
+		r.setHideChat(false);
+		r.setHideActivitiesAndActions(false);
+		r.setHideActionsMenu(false);
+		r.setHideFilesExplorer(false);
+		r.setHideScreenSharing(false);	
+		r.setHideWhiteboard(false);
+		if (orgId != null) {
+			RoomOrganisation ro = new RoomOrganisation();
+			ro.setRoom(r);
+			ro.setOrganisation(organisationDao.get(orgId));
+			ro.setStarttime(new Date());
+		}
+		r = roomDao.update(r, null);
+		return r;
+	}
+	public void loadDefaultRooms(boolean createRooms) {
+		if (createRooms) {
+			// hardcoded IDs (they are not intended to be changed)
+			long conference_Id = 1;
+			long restricted_Id = 3;
+			long interview_Id = 4;
+
+			createRoom("public Interview Room", interview_Id, 16L, true, null);
+			createRoom("public Conference Room", conference_Id, 32L, true, null);
+			Room r = createRoom("public Video Only Room", conference_Id, 32L, true, null);
+			r.setHideWhiteboard(true);
+			roomDao.update(r, null);
+			createRoom("public Video And Whiteboard Room", conference_Id, 32L, true, null);
+			createRoom("public Restricted Room", restricted_Id, 100L, true, null);
+			r = createRoom("restricted room with micro option set", restricted_Id, 100L, true, null);
+			r.setShowMicrophoneStatus(true);
+			roomDao.update(r, null);
+
+			r = createRoom("conference room with micro option set", conference_Id, 32L, true, null);
+			r.setShowMicrophoneStatus(true);
+			roomDao.update(r, null);
+
+			createRoom("private Conference Room", conference_Id, 32L, false, 1L);
+		}
+	}
+
+	public void loadInitUserAndOrganisation(InstallationConfig cfg) throws Exception {
+		// Add default group
+		Organisation org = new Organisation();
+		org.setName(cfg.group);
+		org.setInsertedby(1L);
+		org.setDeleted(false);
+		org.setStarttime(new Date());
+		org = organisationDao.update(org, null);
+
+		User u = userDao.getNewUserInstance(null);
+		u.setType(User.Type.user);
+		u.getRights().add(Right.Admin);
+		u.getRights().add(Right.Soap);
+		u.setLogin(cfg.username);
+		u.setFirstname("firstname");
+		u.setLastname("lastname");
+		u.getAdresses().setEmail(cfg.email);
+		u.getOrganisation_users().add(new Organisation_Users(org));
+
+		u = userDao.update(u, cfg.password, -1);
+
+		log.debug("Installation - User Added user-Id " + u.getUser_id());
+
+		if (u.getUser_id() == null) {
+			throw new Exception("Unable to add user");
+		}
+	}
+
+	/**
+	 * import all language Names from the xml file
+	 * 
+	 * @param filePath
+	 * @throws Exception
+	 */
+	private void loadCountriesFiles() throws Exception {
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(new File(
+				OmFileHelper.getLanguagesDir(),
+				OmFileHelper.nameOfCountriesFile));
+
+		Element root = document.getRootElement();
+
+		for (@SuppressWarnings("rawtypes")
+		Iterator it = root.elementIterator("country"); it.hasNext();) {
+			Element item = (Element) it.next();
+
+			statemanagement.addState(item.attributeValue("name"),
+					item.attributeValue("short"),
+					Integer.parseInt(item.attributeValue("code")));
+		}
+		log.debug("Countries ADDED");
+	}
+
+	/**
+	 * @author o.becherer initial fillment of Appointmentcategories
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadInitAppointmentCategories() {
+		log.debug("ImportInitValues.loadInitAppointmentCategories");
+
+		appointmentCategoryDaoImpl.addAppointmentCategory(new Long(-1), "default", "default");
+	}
+
+	// ------------------------------------------------------------------------------
+
+	/**
+	 * @author o.becherer initial fillment of AppointMentReminderTypes
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadInitAppointmentReminderTypes() {
+		log.debug("ImportInitValues.loadInitAppointmentReminderTypes");
+
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "do not send notification", 1568);
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "simple email", 1569);
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "iCal email", 1570);
+	}
+
+	public void loadInitialOAuthServers() throws Exception {
+		// Yandex
+		OAuthServer yandexServer = new OAuthServer();
+		yandexServer.setName("Yandex");
+		yandexServer.setIconUrl("http://yandex.st/morda-logo/i/favicon.ico");
+		yandexServer.setClientId("<put your client_id>");
+		yandexServer.setClientSecret("<put your client_secret>");
+		yandexServer.setEnabled(false);
+		yandexServer.setRequestInfoUrl("https://login.yandex.ru/info?format=json&oauth_token={$access_token}");
+		yandexServer.setRequestTokenUrl("https://oauth.yandex.ru/token");
+		yandexServer.setRequestKeyUrl("https://oauth.yandex.ru/authorize?response_type=code&client_id={$client_id}");
+		yandexServer.setRequestTokenAttributes("grant_type=authorization_code&code={$code}&client_id={$client_id}&client_secret={$client_secret}");
+		yandexServer.setRequestTokenMethod(RequestMethod.POST);
+		yandexServer.setLoginParamName("login");
+		yandexServer.setEmailParamName("default_email");
+		yandexServer.setFirstnameParamName("first_name");
+		yandexServer.setLastnameParamName("last_name");
+		oauthDao.update(yandexServer, null);
+		
+		// Google
+		OAuthServer googleServer = new OAuthServer();
+		googleServer.setName("Google");
+		googleServer.setIconUrl("https://www.google.ru/images/google_favicon_128.png");
+		googleServer.setEnabled(false);
+		googleServer.setClientId("<put your client_id>");
+		googleServer.setClientSecret("<put your client_secret>");
+		googleServer.setRequestKeyUrl("https://accounts.google.com/o/oauth2/auth?redirect_uri={$redirect_uri}&response_type=code&client_id={$client_id}"
+				+ "&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile");
+		googleServer.setRequestTokenUrl("https://accounts.google.com/o/oauth2/token");
+		googleServer.setRequestTokenMethod(RequestMethod.POST);
+		googleServer.setRequestTokenAttributes("code={$code}&client_id={$client_id}&client_secret={$client_secret}&redirect_uri={$redirect_uri}&grant_type=authorization_code");
+		googleServer.setRequestInfoUrl("https://www.googleapis.com/oauth2/v1/userinfo?access_token={$access_token}");
+		googleServer.setLoginParamName("email");
+		googleServer.setEmailParamName("email");
+		googleServer.setFirstnameParamName("given_name");
+		googleServer.setLastnameParamName("family_name");
+		oauthDao.update(googleServer, null);
+		
+		// Facebook
+		OAuthServer facebookServer = new OAuthServer();
+		facebookServer.setName("Facebook");
+		facebookServer.setIconUrl("https://www.facebook.com/images/fb_icon_325x325.png");
+		facebookServer.setEnabled(false);
+		facebookServer.setClientId("<put your client_id>");
+		facebookServer.setClientSecret("<put your client_secret>");
+		facebookServer.setRequestKeyUrl("https://www.facebook.com/dialog/oauth?client_id={$client_id}&redirect_uri={$redirect_uri}&scope=email");
+		facebookServer.setRequestTokenUrl("https://graph.facebook.com/v2.3/oauth/access_token");
+		facebookServer.setRequestTokenMethod(RequestMethod.POST);
+		facebookServer.setRequestTokenAttributes("client_id={$client_id}&redirect_uri={$redirect_uri}&client_secret={$client_secret}&code={$code}");
+		facebookServer.setRequestInfoUrl("https://graph.facebook.com/me?access_token={$access_token}&fields=id,first_name,last_name,email");
+		facebookServer.setLoginParamName("id");
+		facebookServer.setEmailParamName("email");
+		facebookServer.setFirstnameParamName("first_name");
+		facebookServer.setLastnameParamName("last_name");
+		oauthDao.update(facebookServer, null);
+	}
+	
+	// ------------------------------------------------------------------------------
+
+	/**
+	 * Create poll types
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadPollTypes() {
+		pollManager.addPollType(26L, false);
+		pollManager.addPollType(27L, true);
+	}
+
+	// ------------------------------------------------------------------------------
+
+	public void loadSystem(InstallationConfig cfg, boolean force) throws Exception {
+		// FIXME dummy check if installation was performed before
+		if (!force && userDao.count() > 0) {
+			log.debug("System contains users, no need to install data one more time.");
+		}
+		sipDao.delete();
+		progress = 8;
+		loadMainMenu();
+		progress = 16;
+		loadErrorTypes();
+		progress = 24;
+		loadErrorMappingsFromXML();
+		progress = 32;
+		loadCountriesFiles();
+		progress = 40;
+		loadSalutations();
+		progress = 48;
+		// AppointMent Categories
+		loadInitAppointmentCategories();
+		progress = 56;
+		// Appointment Reminder types
+		loadInitAppointmentReminderTypes();
+		progress = 64;
+		// Appointment poll types
+		loadPollTypes();
+		progress = 72;
+		loadRoomTypes();
+		progress = 80;
+
+		loadConfiguration(cfg);
+		progress = 88;
+		loadInitialOAuthServers();
+		progress = 96;
+	}
+
+	public void loadAll(InstallationConfig cfg, boolean force) throws Exception {
+		// FIXME dummy check if installation was performed before
+		if (!force && userDao.count() > 0) {
+			log.debug("System contains users, no need to install data one more time.");
+			return;
+		}
+		loadSystem(cfg, force);
+		loadInitUserAndOrganisation(cfg);
+		progress = 94;
+
+		loadDefaultRooms("1".equals(cfg.createDefaultRooms));
+		progress = 100;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java b/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java
new file mode 100644
index 0000000..ca3ba68
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.crypt.MD5Implementation;
+
+public class InstallationConfig implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	public String appName = ConfigurationDao.DEFAULT_APP_NAME;
+	public String username;
+	public String password;
+	public String email;
+	public String group;
+	public String allowFrontendRegister = "1";
+	public String createDefaultRooms = "1";
+	public String ical_timeZone = "Europe/Berlin";
+	
+	public String cryptClassName = MD5Implementation.class.getCanonicalName();
+	//email
+	public Integer smtpPort = 25;
+	public String smtpServer = "localhost";
+	public String mailAuthName = "";
+	public String mailAuthPass = "";
+	public String mailReferer = "noreply@openmeetings.apache.org";
+	public String mailUseTls = "0";
+	//paths
+	public Integer swfZoom = 100;
+	public Integer swfJpegQuality = 85;
+	public String swfPath = "";
+	public String imageMagicPath = "";
+	public String ffmpegPath = "";
+	public String soxPath = "";
+	public String jodPath = "/opt/jod/lib";
+	public String officePath = "";
+	
+	public String defaultLangId = "1";
+	public String sendEmailAtRegister = "0";
+	public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom";
+	public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom";
+	public String sendEmailWithVerficationCode = "0";
+	public String defaultExportFont = "TimesNewRoman";
+    public String red5SipEnable = "no";
+    public String red5SipRoomPrefix = "400";
+    public String red5SipExtenContext = "rooms";
+    public String replyToOrganizer = "1";
+    public String baseUrl = DEFAULT_BASE_URL;
+    
+	@Override
+	public String toString() {
+		return "InstallationConfig [allowFrontendRegister="
+				+ allowFrontendRegister + ", createDefaultRooms="
+				+ createDefaultRooms + ", cryptClassName=" + cryptClassName
+				+ ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer
+				+ ", mailAuthName=" + mailAuthName + ", mailAuthPass="
+				+ mailAuthPass + ", mailReferer=" + mailReferer
+				+ ", mailUseTls=" + mailUseTls + ", swfZoom=" + swfZoom
+				+ ", swfJpegQuality=" + swfJpegQuality  + ", swfPath=" + swfPath
+				+ ", imageMagicPath=" + imageMagicPath + ", ffmpegPath="
+				+ ffmpegPath + ", soxPath=" + soxPath + ", jodPath=" + jodPath
+				+ ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister="
+				+ sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2="
+				+ urlFeed2 + ", sendEmailWithVerficationCode="
+				+ sendEmailWithVerficationCode + ", defaultExportFont="
+				+ defaultExportFont + ", red5SipEnable="
+				+ red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix
+				+ ", red5SipExtenContext=" + red5SipExtenContext
+				+ ", replyToOrganizer=" + replyToOrganizer
+				+ ", ical_timeZone=" + ical_timeZone 
+				+ "]";
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java b/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java
new file mode 100644
index 0000000..cd355ad
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import java.io.FileWriter;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+import org.dom4j.io.XMLWriter;
+
+public class InstallationDocumentHandler {
+	public static void createDocument(Integer stepNo) throws Exception {
+		
+		Document document = DocumentHelper.createDocument();
+		
+		Element root = document.addElement( "install" );
+		Element step = root.addElement("step");
+		
+		step.addElement("stepnumber").addText(stepNo.toString());
+		step.addElement("stepname").addText("Step "+stepNo);
+		
+		XMLWriter writer = new XMLWriter(new FileWriter(OmFileHelper.getInstallFile()));
+        writer.write( document );
+        writer.close();
+		
+	}
+	
+	public static int getCurrentStepNumber() throws Exception{
+		
+	    SAXReader reader = new SAXReader();
+        Document document = reader.read(OmFileHelper.getInstallFile());
+        
+        Node node = document.selectSingleNode( "//install/step/stepnumber" );
+        
+        return Integer.valueOf(node.getText()).intValue();
+        
+	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java b/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java
new file mode 100644
index 0000000..63b42f6
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.batik.beans;
+
+import java.util.List;
+
+public class PrintBean {
+
+	public String hash;
+	@SuppressWarnings("rawtypes")
+	public List map;
+	public int width;
+	public int height;
+
+	public PrintBean(String hash, @SuppressWarnings("rawtypes") List map,
+			int width, int height) {
+		super();
+		this.hash = hash;
+		this.height = height;
+		this.map = map;
+		this.width = width;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getMap() {
+		return map;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void setMap(List map) {
+		this.map = map;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java b/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java
new file mode 100644
index 0000000..4a2fc86
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cluster;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openmeetings.cluster.sync.RestClient;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Manages connections to the other nodes of the cluster.
+ * 
+ * Use-case: When you kick a user via the admin-panel, it is probably on anther server.
+ * So you need to perform a REST call to the node and let that node do the actual disconnect.
+ * 
+ * @author sebawagner
+ *
+ */
+public class SlaveHTTPConnectionManager {
+
+	private static Logger log = Red5LoggerFactory.getLogger(
+			SlaveHTTPConnectionManager.class, OpenmeetingsVariables.webAppRootKey);
+
+	/**
+	 * We store the list of RestClients in the memory, so that we can simply
+	 * call ping to get the load, without the need to get a new session Hash and
+	 * to login again. <br/>
+	 * There can be only one RestClient per server, so we use the primary key of
+	 * the server to store the RestClient.
+	 */
+	private static Map<Long, RestClient> restClientsSessionStore = new HashMap<Long, RestClient>();
+
+	/**
+	 * Synchronized, cause nobody should manipulate the object while another
+	 * process requests it, the scheduler could run several times and request
+	 * the same object, add or remove it.<br/>
+	 * If there is no object yet, create one.
+	 * 
+	 * @param server
+	 */
+	private synchronized RestClient getRestClient(Server server) {
+		RestClient restClient = restClientsSessionStore.get(server.getId());
+
+		// check if any values of the server have been changed,
+		// if yes, we need a new RestClient to make sure it will re-login to the
+		// changed server details
+		if (restClient != null && restClient.hasServerDetailsChanged(server)) {
+			log.debug("Server details changed, get new rest client");
+			restClient = null;
+		}
+
+		if (restClient == null) {
+			restClient = new RestClient(server);
+			restClientsSessionStore.put(server.getId(), restClient);
+		}
+		return restClient;
+	}
+
+	/**
+	 * Gets the current {@link RestClient} from the session store and then
+	 * performs a kickUser on that. It is not possible that there is no
+	 * {@link RestClient}, because if you want to kick a user from a slave, the
+	 * master <i>must</i> already have loaded the sessions from the slave, so
+	 * there logically <i>must</i> by a {@link RestClient} available that has an 
+	 * open connection to that slave / {@link Server}
+	 * 
+	 * @param serverId
+	 * @param publicSID
+	 */
+	public void kickSlaveUser(Server server, String publicSID) throws Exception {
+		
+		RestClient rClient = getRestClient(server);
+		
+		if (rClient == null) {
+			throw new Exception("No RestClient found for server " + server);
+		}
+		
+		rClient.kickUser(publicSID);
+		
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java b/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java
new file mode 100644
index 0000000..5f88693
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java
@@ -0,0 +1,395 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cluster.sync;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Performs call to the WebService Gateway to load the server load from the
+ * slave's of the cluster
+ * 
+ * @author sebawagner
+ * 
+ */
+public class RestClient {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			RestClient.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private enum Action {
+		//kick the user from the server
+		KICK_USER,
+	}
+
+	private final String host;
+	private final int port;
+	private final String protocol;
+	private final String webapp;
+	private final String user;
+	private final String pass;
+
+	private boolean loginSuccess = false;
+	private String sessionId;
+	
+	private String publicSID;
+
+//	private static String nameSpaceForSlaveDto = "http://room.conference.openmeetings.apache.org/xsd";
+	
+	private static String NAMESPACE_PREFIX = "http://services.axis.openmeetings.apache.org";
+
+	private String getUserServiceEndPoint() {
+		return protocol + "://" + host + ":" + port + "/" + webapp
+				+ "/services/UserService";
+	}
+//
+//	private String getRoomServiceEndPoint() {
+//		return protocol + "://" + host + ":" + port + "/" + webapp
+//				+ "/services/RoomService";
+//	}
+
+	/**
+	 * The observerInstance will be notified whenever a ping was completed
+	 * 
+	 * @param observerInstance
+	 * @param host
+	 * @param port
+	 * @param protocol
+	 * @param webapp
+	 * @param user
+	 * @param pass
+	 */
+	public RestClient(Server server) {
+		//this.server = server;
+		this.host = server.getAddress();
+		this.port = server.getPort();
+		this.protocol = server.getProtocol();
+		this.webapp = server.getWebapp();
+		this.user = server.getUser();
+		this.pass = server.getPass();
+	}
+	
+	/**
+	 * Main method to perform tests
+	 * 
+	 * @param strings
+	 */
+	public static void main(String... strings) {
+		RestClient rClient = new RestClient("127.0.0.1", 5080, "http",
+				"openmeetings", "swagner", "qweqwe");
+		try {
+			rClient.loginUser(Action.KICK_USER);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * for simple testing this method provides a version of the constructor
+	 * without need for a server entity.<br/>
+	 * <br/>
+	 * There is no spring or JPA enhanced class in use here. This Object is
+	 * stored in session/memory
+	 * 
+	 * @param host
+	 * @param port
+	 * @param protocol
+	 * @param webapp
+	 * @param user
+	 * @param pass
+	 */
+	private RestClient(String host, int port, String protocol, String webapp,
+			String user, String pass) {
+		this.host = host;
+		this.port = port;
+		this.protocol = protocol;
+		this.webapp = webapp;
+		this.user = user;
+		this.pass = pass;
+	}
+
+	/**
+	 * compare if the details here and the one stored are still the same
+	 * 
+	 * @param server2
+	 * @return
+	 */
+	public boolean hasServerDetailsChanged(Server server2) {
+
+		if (!host.equals(server2.getAddress())) {
+			return true;
+		}
+		if (port != server2.getPort()) {
+			return true;
+		}
+		if (!user.equals(server2.getUser())) {
+			return true;
+		}
+		if (!pass.equals(server2.getPass())) {
+			return true;
+		}
+		if (!webapp.equals(server2.getWebapp())) {
+			return true;
+		}
+		if (!protocol.equals(server2.getProtocol())) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Login the user via REST
+	 * 
+	 * @throws Exception
+	 */
+	public void loginUser(Action action) throws Exception {
+
+		ServiceClient sender = createServiceClient(getUserServiceEndPoint());
+		
+		OMElement getSessionResult = sender
+				.sendReceive(getPayloadMethodGetSession());
+		sessionId = getSessionIdFromResult(getSessionResult);
+
+		OMElement loginUserResult = sender
+				.sendReceive(getPayloadMethodLoginUser());
+
+		loginSuccess = loginSuccessFromResult(loginUserResult);
+
+		switch (action) {
+			case KICK_USER:
+				kickUserInternl();
+				break;
+			default:
+				throw new Exception("No action defined");
+		}
+
+	}
+	
+	private ServiceClient createServiceClient(String serviceEndPoint) throws Exception {
+		ServiceClient sender = new ServiceClient();
+		sender.engageModule(new QName(Constants.MODULE_ADDRESSING)
+				.getLocalPart());
+		Options options = new Options();
+		options.setTo(new EndpointReference(serviceEndPoint));
+		options.setProperty(Constants.Configuration.ENABLE_REST,
+				Constants.VALUE_TRUE);
+		int timeOutInMilliSeconds = 2000;
+		// setting timeout to 2 second should be sufficient, if the server is
+		// not available within the 3 second interval you got a problem anyway
+		options.setTimeOutInMilliSeconds(timeOutInMilliSeconds);
+		options.setProperty(HTTPConstants.SO_TIMEOUT, timeOutInMilliSeconds);
+		options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, timeOutInMilliSeconds);
+		sender.setOptions(options);
+		
+		return sender;
+	}
+	
+	private OMElement createOMElement(OMFactory fac, OMNamespace omNs, String name, String value) {
+		OMElement omElement = fac.createOMElement(name, omNs);
+		omElement.addChild(fac.createOMText(omElement, value));
+		return omElement;
+	}
+
+	/**
+	 * sets the publicSID and removes a user from a slave host by calling a REST service
+	 * 
+	 * @param publicSID
+	 */
+	public void kickUser(String publicSID) {
+		this.publicSID = publicSID;
+		kickUserInternl();
+	}
+	
+	private void kickUserInternl() {
+		try {
+			
+			if (!loginSuccess) {
+				loginUser(Action.KICK_USER);
+			}
+
+			ServiceClient sender = createServiceClient(getUserServiceEndPoint());
+			
+			OMElement kickUserByPublicSIDResult = sender
+					.sendReceive(getPayloadMethodKickUserByPublicSID());
+			Boolean result = kickUserByPublicSIDFromResult(kickUserByPublicSIDResult);
+			
+			if (!result) {
+				throw new Exception("Could not delete user from slave host");
+			}
+
+		} catch (Exception err) {
+			log.error("[kickUser failed]", err);
+		}
+	}
+
+	private Boolean kickUserByPublicSIDFromResult(OMElement result) throws Exception {
+		QName kickUserResult = new QName(NAMESPACE_PREFIX, "return");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getChildrenWithName(kickUserResult);
+		if (elements.hasNext()) {
+			OMElement resultElement = elements.next();
+			if (resultElement.getText().equals("true")) {
+				return true;
+			} else {
+				throw new Exception("Could not delete user from slave host, returns: "
+						+ resultElement.getText());
+			}
+		} else {
+			throw new Exception("Could not parse kickUserByPublicSID result");
+		}
+	}
+
+	private OMElement getPayloadMethodKickUserByPublicSID() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("kickUserByPublicSID", omNs);
+		method.addChild(createOMElement(fac, omNs, "SID", sessionId));
+		method.addChild(createOMElement(fac, omNs, "publicSID", publicSID));
+		return method;
+	}
+
+	/**
+	 * Create the REST request to get a new session Id
+	 * 
+	 * @return
+	 */
+	private OMElement getPayloadMethodGetSession() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("getSession", omNs);
+		return method;
+	}
+
+	/**
+	 * Parse the session Id from the REST request
+	 * 
+	 * @param result
+	 * @return
+	 * @throws Exception
+	 */
+	private String getSessionIdFromResult(OMElement result) throws Exception {
+		QName sessionElements = new QName(null, "session_id");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getFirstElement()
+				.getChildrenWithName(sessionElements);
+		if (elements.hasNext()) {
+			OMElement sessionElement = elements.next();
+			return sessionElement.getText();
+		} else {
+			throw new Exception("Could not find session id");
+		}
+	}
+
+	/**
+	 * create the payload to login to another OpenMeetings instance via REST
+	 * 
+	 * @return
+	 */
+	private OMElement getPayloadMethodLoginUser() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("loginUser", omNs);
+		method.addChild(createOMElement(fac, omNs, "SID", sessionId));
+		method.addChild(createOMElement(fac, omNs, "username", user));
+		method.addChild(createOMElement(fac, omNs, "userpass", pass));
+		return method;
+	}
+
+	/**
+	 * check the result of the REST request if the login was successful
+	 * 
+	 * @param result
+	 * @return
+	 * @throws Exception
+	 */
+	private boolean loginSuccessFromResult(OMElement result) throws Exception {
+
+		QName loginResult = new QName(NAMESPACE_PREFIX, "return");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getChildrenWithName(loginResult);
+		if (elements.hasNext()) {
+			OMElement resultElement = elements.next();
+			if (resultElement.getText().equals("1")) {
+				return true;
+			} else {
+				throw new Exception("Could not login user at, error code is: "
+						+ resultElement.getText());
+			}
+		} else {
+			throw new Exception("Could not parse login result");
+		}
+
+	}
+
+	/**
+	 * Get and cast the element's text (if there is any)
+	 * 
+	 * @param resultElement
+	 * @param elementName
+	 * @param typeObject
+	 * @return
+	 */
+//	private <T> T getElementTextByName(OMElement resultElement, String elementName, Class<T> typeObject) {
+//		try {
+//			OMElement userIdElement = resultElement
+//					.getFirstChildWithName(new QName(nameSpaceForSlaveDto, elementName));
+//			if (userIdElement != null && userIdElement.getText() != null
+//					&& userIdElement.getText().length() > 0) {
+//				
+//				String defaultValue = userIdElement.getText();
+//				
+//				// Either this can be directly assigned or try to find a constructor
+//				// that handles it
+//				if (typeObject.isAssignableFrom(defaultValue.getClass())) {
+//					return typeObject.cast(defaultValue);
+//				}
+//				Constructor<T> c = typeObject.getConstructor(defaultValue
+//						.getClass());
+//				return c.newInstance(defaultValue);
+//				
+//			}
+//		} catch (Exception err) {
+//			//Catch any class cast exception, but log only
+//			log.error("[getElementTextByName]", err);
+//		}
+//		return null;
+//	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/BaseConverter.java b/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
new file mode 100644
index 0000000..564f406
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.data.flvrecord.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsSubDir;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.io.flv.impl.FLVWriter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class BaseConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(BaseConverter.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingMetaDeltaDao metaDeltaDao;
+
+	private String getPath(String key, String app) {
+		String path = configurationDao.getConfValue(key, String.class, "");
+		if (!"".equals(path) && !path.endsWith(File.separator)) {
+			path += File.separator;
+		}
+		path += app;
+		return path;
+	}
+	
+	public String getPathToFFMPEG() {
+		return getPath("ffmpeg_path", "ffmpeg");
+	}
+
+	protected String getPathToSoX() {
+		return getPath("sox_path", "sox");
+	}
+
+	protected String getPathToImageMagick() {
+		return getPath("imagemagick_path", "convert") + GenerateSWF.execExt;
+	}
+
+	protected boolean isUseOldStyleFfmpegMap() {
+		return "1".equals(configurationDao.getConfValue("use.old.style.ffmpeg.map.option", String.class, "0"));
+	}
+	
+	protected File getStreamFolder(FlvRecording flvRecording) {
+		return getStreamsSubDir(flvRecording.getRoom_id());
+	}
+
+	protected long diff(Date from, Date to) {
+		return from.getTime() - to.getTime();
+	}
+
+	protected double diffSeconds(Date from, Date to) {
+		return diffSeconds(diff(from, to));
+	}
+	
+	protected double diffSeconds(long val) {
+		return ((double)val) / 1000;
+	}
+	
+	protected String formatMillis(long millis) {
+		long hours = TimeUnit.MILLISECONDS.toHours(millis);
+		millis -= TimeUnit.HOURS.toMillis(hours);
+		long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
+		millis -= TimeUnit.MINUTES.toMillis(minutes);
+		long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
+		millis -= TimeUnit.SECONDS.toMillis(seconds);
+		return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, millis);
+	}
+
+	protected void updateDuration(FlvRecording r) {
+		r.setDuration(formatMillis(diff(r.getRecordEnd(), r.getRecordStart())));
+	}
+	
+	protected void deleteFileIfExists(String name) {
+		File f = new File(name);
+
+		if (f.exists()) {
+			f.delete();
+		}
+	}
+	
+	protected String[] mergeAudioToWaves(List<String> listOfFullWaveFiles, String outputFullWav) {
+		List<String> argv = new ArrayList<String>();
+		
+		argv.add(getPathToSoX());
+		argv.add("-m");
+		for (String arg : listOfFullWaveFiles) {
+			argv.add(arg);
+		}
+		argv.add(outputFullWav);
+		
+		return argv.toArray(new String[0]);
+	}
+	
+	protected void stripAudioFirstPass(FlvRecording flvRecording, List<ConverterProcessResult> returnLog,
+			List<String> listOfFullWaveFiles, File streamFolder)
+	{
+		stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder
+				, metaDataDao.getAudioMetaDataByRecording(flvRecording.getFlvRecordingId()));
+	}
+	
+	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, File inFile, File outFile) throws IOException {
+		//FIXME need to check this
+		if (length < 0 || position < 0) {
+			log.debug("::addSoxPad " + job + " Invalid parameters: "
+					+ " length = " + length + "; position = " + position + "; inFile = " + inFile);
+		}
+		length = length < 0 ? 0 : length;
+		position = position < 0 ? 0 : position;
+
+		String[] argv = new String[] { getPathToSoX(), inFile.getCanonicalPath(), outFile.getCanonicalPath(), "pad", "" + length, "" + position };
+
+		returnLog.add(ProcessHelper.executeScript(job, argv));
+		return argv;
+	}
+	
+	private static File getMetaFlvSer(FlvRecordingMetaData metaData) {
+		File metaDir = getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+		return new File(metaDir, metaData.getStreamName() + ".flv.ser");
+	}
+	
+	public static void printMetaInfo(FlvRecordingMetaData metaData, String prefix) {
+		if (log.isDebugEnabled()) {
+			log.debug(String.format("### %s:: recording id %s; stream with id %s; current status: %s ", prefix, metaData.getFlvRecording().getFlvRecordingId()
+					, metaData.getFlvRecordingMetaDataId(), metaData.getStreamStatus()));
+			File metaFlv = getRecordingMetaData(metaData.getFlvRecording().getRoom_id(), metaData.getStreamName());
+			File metaSer = getMetaFlvSer(metaData);
+			log.debug(String.format("### %s:: Flv file [%s] exists ? %s; size: %s, lastModified: %s ", prefix, metaFlv.getPath(), metaFlv.exists(), metaFlv.length(), metaFlv.lastModified()));
+			log.debug(String.format("### %s:: Ser file [%s] exists ? %s; size: %s, lastModified: %s ", prefix, metaSer.getPath(), metaSer.exists(), metaSer.length(), metaSer.lastModified()));
+		}
+	}
+	
+	protected FlvRecordingMetaData waitForTheStream(long metaId) throws InterruptedException {
+		FlvRecordingMetaData metaData = metaDataDao.get(metaId);
+		if (metaData.getStreamStatus() != Status.STOPPED) {
+			log.debug("### meta Stream not yet written to disk " + metaId);
+			long counter = 0;
+			long maxTimestamp = 0;
+			while(true) {
+				log.trace("### Stream not yet written Thread Sleep - " + metaId);
+				
+				metaData = metaDataDao.get(metaId);
+				
+				if (metaData.getStreamStatus() == Status.STOPPED) {
+					printMetaInfo(metaData, "Stream now written");
+					log.debug("### Thread continue ... " );
+					break;
+				} else {
+					File metaFlv = getRecordingMetaData(metaData.getFlvRecording().getRoom_id(), metaData.getStreamName());
+					if (metaFlv.exists() && maxTimestamp < metaFlv.lastModified()) {
+						maxTimestamp = metaFlv.lastModified();
+					}
+					File metaSer = getMetaFlvSer(metaData);
+					if (metaSer.exists() && maxTimestamp < metaSer.lastModified()) {
+						maxTimestamp = metaSer.lastModified();
+					}
+					if (maxTimestamp + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+						if (metaSer.exists()) {
+							log.debug("### long time without any update, trying to repair ... ");
+							try {
+								if (FLVWriter.repair(metaSer.getCanonicalPath(), null, null) && !metaSer.exists()) {
+									log.debug("### Repairing was successful ... ");
+								} else {
+									log.debug("### Repairing was NOT successful ... ");
+								}
+							} catch (IOException e) {
+								log.error("### Error while file repairing ... ", e);
+							}
+						} else {
+							log.debug("### long time without any update, closing ... ");
+						}
+						metaData.setStreamStatus(Status.STOPPED);
+						metaDataDao.update(metaData);
+						break;
+					}
+				}
+				if (++counter % 1000 == 0) {
+					printMetaInfo(metaData, "Still waiting");
+				}
+				
+				Thread.sleep(100L);
+			}
+		}
+		return metaData;
+	}
+	
+	protected void stripAudioFirstPass(FlvRecording flvRecording,
+			List<ConverterProcessResult> returnLog,
+			List<String> listOfFullWaveFiles, File streamFolder,
+			List<FlvRecordingMetaData> metaDataList) {
+		try {
+			// Init variables
+			log.debug("### meta Data Number - " + metaDataList.size());
+			log.debug("###################################################");
+	
+			for (FlvRecordingMetaData metaData : metaDataList) {
+				long metaId = metaData.getFlvRecordingMetaDataId();
+				log.debug("### processing metadata: " + metaId);
+				if (metaData.getStreamStatus() == Status.NONE) {
+					log.debug("Stream has not been started, error in recording " + metaId);
+					continue;
+				}
+				
+				metaData = waitForTheStream(metaId);
+	
+				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
+	
+				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
+	
+				metaData.setWavAudioData(outputWav.getName());
+	
+				
+				log.debug("FLV File Name: {} Length: {} ", inputFlvFile.getName(), inputFlvFile.length());
+	
+				if (inputFlvFile.exists()) {
+					String[] argv = new String[] {
+							getPathToFFMPEG(), "-y"
+							, "-i", inputFlvFile.getCanonicalPath()
+							, "-af", "aresample=32k:min_comp=0.001:min_hard_comp=0.100000"
+							, outputWav.getCanonicalPath()};
+	
+					returnLog.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
+				}
+	
+				if (outputWav.exists() && outputWav.length() != 0) {
+					metaData.setAudioValid(true);
+					// Strip Wave to Full Length
+					File outputGapFullWav = outputWav;
+	
+					// Fix Start/End in Audio
+					List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = metaDeltaDao.getFlvRecordingMetaDeltaByMetaId(metaId);
+	
+					int counter = 0;
+	
+					for (FlvRecordingMetaDelta metaDelta : flvRecordingMetaDeltas) {
+						File inputFile = outputGapFullWav;
+	
+						// Strip Wave to Full Length
+						String hashFileGapsFullName = metaData.getStreamName() + "_GAP_FULL_WAVE_" + counter + ".wav";
+						outputGapFullWav = new File(streamFolder, hashFileGapsFullName);
+	
+						metaDelta.setWaveOutPutName(hashFileGapsFullName);
+	
+						String[] argv_sox = null;
+	
+						if (metaDelta.getDeltaTime() != null) {
+							double gapSeconds = diffSeconds(metaDelta.getDeltaTime());
+							if (metaDelta.isStartPadding()) {
+								argv_sox = addSoxPad(returnLog, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
+							} else if (metaDelta.isEndPadding()) {
+								argv_sox = addSoxPad(returnLog, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
+							}
+						}
+	
+						if (argv_sox != null) {
+							log.debug("START fillGap ################# Delta-ID :: " + metaDelta.getFlvRecordingMetaDeltaId());
+	
+							metaDeltaDao.updateFlvRecordingMetaDelta(metaDelta);
+							counter++;
+						} else {
+							outputGapFullWav = inputFile;
+						}
+					}
+	
+					// Strip Wave to Full Length
+					String hashFileFullName = metaData.getStreamName() + "_FULL_WAVE.wav";
+					File outputFullWav = new File(streamFolder, hashFileFullName);
+	
+					// Calculate delta at beginning
+					double startPad = diffSeconds(metaData.getRecordStart(), flvRecording.getRecordStart());
+	
+					// Calculate delta at ending
+					double endPad = diffSeconds(flvRecording.getRecordEnd(), metaData.getRecordEnd());
+	
+					addSoxPad(returnLog, "addStartEndToAudio", startPad, endPad, outputGapFullWav, outputFullWav);
+	
+					// Fix for Audio Length - Invalid Audio Length in Recorded Files
+					// Audio must match 100% the Video
+					log.debug("############################################");
+					log.debug("Trim Audio to Full Length -- Start");
+	
+					if (!outputFullWav.exists()) {
+						throw new Exception("Audio File does not exist , could not extract the Audio correctly");
+					}
+					metaData.setFullWavAudioData(hashFileFullName);
+	
+					// Finally add it to the row!
+					listOfFullWaveFiles.add(outputFullWav.getCanonicalPath());
+				}
+	
+				metaDataDao.update(metaData);
+			}
+		} catch (Exception err) {
+			log.error("[stripAudioFirstPass]", err);
+		}
+	}
+	
+	public void convertToMp4(FlvRecording r, List<ConverterProcessResult> returnLog) throws IOException {
+		//TODO add faststart, move filepaths to helpers
+		if (!isRecordingExists(r.getFileHash())) {
+			return;
+		}
+		File file = getRecording(r.getFileHash());
+		String path = file.getCanonicalPath();
+		String mp4path = path + MP4_EXTENSION;
+		String[] argv = new String[] {
+				getPathToFFMPEG(), "-y",
+				"-i", path,
+				"-c:v", "libx264",
+				"-crf", "24",
+				"-pix_fmt", "yuv420p",
+				"-preset", "medium",
+				"-profile:v", "baseline",
+				"-c:a", "libfaac",
+				"-c:a", "libfdk_aac", "-b:a", "32k", //FIXME add quality constants 
+				"-s", r.getFlvWidth() + "x" + r.getFlvHeight(), //
+				mp4path
+				};
+		returnLog.add(ProcessHelper.executeScript("generate MP4", argv));
+		
+		argv = new String[] {
+				getPathToFFMPEG(), "-y",
+				"-i", mp4path,
+				"-vcodec", "libtheora",
+				"-acodec", "libvorbis",
+				path + OGG_EXTENSION
+				};
+
+		returnLog.add(ProcessHelper.executeScript("generate OGG", argv));
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java
new file mode 100644
index 0000000..e37d220
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvExplorerConverter extends BaseConverter {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			FlvExplorerConverter.class, OpenmeetingsVariables.webAppRootKey);
+
+	// Spring loaded Beans
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDaoImpl;
+	@Autowired
+	private FlvRecordingLogDao flvRecordingLogDaoImpl;
+	
+	private class FlvDimension {
+		public FlvDimension(int width, int height) {
+			this.width = width;
+			this.height = height;
+		}
+		public int width = 0;
+		public int height = 0;
+	}
+
+	public List<ConverterProcessResult> startConversion(Long fileExplorerItemId, String moviePath) {
+		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+		try {
+			FileExplorerItem fileExplorerItem = fileExplorerItemDaoImpl.getFileExplorerItemsById(fileExplorerItemId);
+
+			log.debug("fileExplorerItem " + fileExplorerItem.getFileExplorerItemId());
+
+			//  Convert to FLV
+			return convertToFLV(fileExplorerItem, moviePath);
+
+			// Add empty pieces at the beginning and end of the wav
+			// FIXME: Is this really needed anymore?!
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			returnLog.add(new ConverterProcessResult("startConversion", err.getMessage(), err));
+		}
+
+		return returnLog;
+	}
+
+	private List<ConverterProcessResult> convertToFLV(FileExplorerItem fileExplorerItem, String moviePath) {
+		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+		try {
+			String name = "UPLOADFLV_" + fileExplorerItem.getFileExplorerItemId();
+			File outputFullFlv = new File(getStreamsHibernateDir(), name + ".flv");
+
+			fileExplorerItem.setIsVideo(true);
+
+			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y", "-i", moviePath,
+					"-ar", "22050", "-acodec", "libmp3lame", "-ab", "32k",
+					"-vcodec", "flv",
+					outputFullFlv.getCanonicalPath() };
+			// "-s", flvWidth + "x" + flvHeight, 
+
+			ConverterProcessResult returnMapConvertFLV = ProcessHelper.executeScript("uploadFLV ID :: "
+					+ fileExplorerItem.getFileExplorerItemId(), argv_fullFLV);
+			
+			//Parse the width height from the FFMPEG output
+			FlvDimension flvDimension = getFlvDimension(returnMapConvertFLV.getError());
+			int flvWidth = flvDimension.width;
+			int flvHeight = flvDimension.height;
+			
+			
+			fileExplorerItem.setFlvWidth(flvWidth);
+			fileExplorerItem.setFlvHeight(flvHeight);
+
+			returnLog.add(returnMapConvertFLV);
+
+			String hashFileFullNameJPEG = "UPLOADFLV_" + fileExplorerItem.getFileExplorerItemId() + ".jpg";
+			File outPutJpeg = new File(getStreamsHibernateDir(), name + ".jpg");
+
+			fileExplorerItem.setPreviewImage(hashFileFullNameJPEG);
+
+			String[] argv_previewFLV = new String[] { getPathToFFMPEG(), "-y", "-i",
+					outputFullFlv.getCanonicalPath(), "-vcodec", "mjpeg", "-vframes", "1", "-an",
+					"-f", "rawvideo", "-s", flvWidth + "x" + flvHeight,
+					outPutJpeg.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("previewUpload ID :: "
+							+ fileExplorerItem.getFileExplorerItemId(),
+							argv_previewFLV));
+
+			fileExplorerItemDaoImpl.updateFileOrFolder(fileExplorerItem);
+
+			for (ConverterProcessResult returnMap : returnLog) {
+				flvRecordingLogDaoImpl.addFLVRecordingLog("generateFFMPEG", null, returnMap);
+			}
+		} catch (Exception err) {
+			log.error("[convertToFLV]", err);
+			returnLog.add(new ConverterProcessResult("convertToFLV", err.getMessage(), err));
+		}
+
+		return returnLog;
+	}
+	
+	private FlvDimension getFlvDimension(String txt) throws Exception {
+		
+		Pattern p = Pattern.compile("\\d{2,4}(x)\\d{2,4}");
+		
+		Matcher matcher = p.matcher(txt);
+		
+		while ( matcher.find() ) {
+			String foundResolution = txt.substring(matcher.start(), matcher.end());
+			
+			String[] resultions = foundResolution.split("x");
+			
+			return new FlvDimension(Integer.valueOf(resultions[0]).intValue(), Integer.valueOf(resultions[1]).intValue());
+			
+	    }
+		
+		return null;
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
new file mode 100644
index 0000000..026945b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
@@ -0,0 +1,318 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvInterviewConverter extends BaseConverter implements IRecordingConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvInterviewConverter.class, webAppRootKey);
+	private static class ReConverterParams {
+		private int leftSideLoud = 1;
+		private int rightSideLoud = 1;
+		@SuppressWarnings("unused")
+		private Integer leftSideTime = 0;
+		@SuppressWarnings("unused")
+		private Integer rightSideTime = 0;
+	}
+
+	// Spring loaded Beans
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingLogDao logDao;
+
+	private String[] mergeAudioToWaves(List<String> listOfFullWaveFiles, String outputFullWav,
+			List<FlvRecordingMetaData> metaDataList, ReConverterParams rcv) {
+		String[] argv_full_sox = new String[listOfFullWaveFiles.size() + 5];
+		argv_full_sox[0] = this.getPathToSoX();
+		argv_full_sox[1] = "-m";
+
+		int counter = 2;
+		for (int i = 0; i < listOfFullWaveFiles.size(); i++) {
+			for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {
+				String hashFileFullNameStored = flvRecordingMetaData.getFullWavAudioData();
+
+				String fullFilePath = listOfFullWaveFiles.get(i);
+				String fileNameOnly = new File(fullFilePath).getName();
+
+				if (hashFileFullNameStored.equals(fileNameOnly)) {
+					if (flvRecordingMetaData.getInteriewPodId() == 1) {
+						argv_full_sox[counter] = "-v " + rcv.leftSideLoud;
+						counter++;
+					}
+					if (flvRecordingMetaData.getInteriewPodId() == 2) {
+						argv_full_sox[counter] = "-v " + rcv.rightSideLoud;
+						counter++;
+					}
+				}
+			}
+			argv_full_sox[counter] = listOfFullWaveFiles.get(i);
+			counter++;
+		}
+
+		argv_full_sox[counter] = outputFullWav;
+
+		return argv_full_sox;
+	}
+
+	public void startConversion(Long flvRecordingId) {
+		startConversion(flvRecordingId, false, new ReConverterParams());
+	}
+
+	public void startConversion(Long flvRecordingId, boolean reconversion, ReConverterParams rcv) {
+		FlvRecording flvRecording = null;
+		try {
+			flvRecording = recordingDao.get(flvRecordingId);
+			log.debug("flvRecording " + flvRecording.getFlvRecordingId());
+			flvRecording.setStatus(FlvRecording.Status.CONVERTING);
+			flvRecording = recordingDao.update(flvRecording);
+
+			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+			List<String> listOfFullWaveFiles = new LinkedList<String>();
+			File streamFolder = getStreamFolder(flvRecording);
+			List<FlvRecordingMetaData> metaDataList = metaDataDao.getAudioMetaDataByRecording(flvRecording.getFlvRecordingId());
+	
+			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder, metaDataList);
+		
+			// Merge Wave to Full Length
+			File streamFolderGeneral = getStreamsHibernateDir();
+
+			String hashFileFullName = "INTERVIEW_" + flvRecording.getFlvRecordingId() + "_FINAL_WAVE.wav";
+			String outputFullWav = streamFolder.getAbsolutePath() + File.separatorChar + hashFileFullName;
+			deleteFileIfExists(outputFullWav);
+
+			if (listOfFullWaveFiles.size() == 1) {
+				outputFullWav = listOfFullWaveFiles.get(0);
+			} else if (listOfFullWaveFiles.size() > 0) {
+				String[] argv_full_sox;
+				if (reconversion) {
+					argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav, metaDataList, rcv);
+				} else {
+					argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
+				}
+
+				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
+			} else {
+				// create default Audio to merge it.
+				// strip to content length
+				File outputWav = new File(streamFolderGeneral, "one_second.wav");
+
+				// Calculate delta at beginning
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
+
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", "" + deltaPadding };
+
+				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
+			}
+			// Default Image for empty interview video pods
+			final File defaultInterviewImageFile = new File(streamFolderGeneral, "default_interview_image.png");
+
+			if (!defaultInterviewImageFile.exists()) {
+				throw new Exception("defaultInterviewImageFile does not exist!");
+			}
+
+			final int flvWidth = 320;
+			final int flvHeight = 260;
+			final int frameRate = 25;
+			// Merge Audio with Video / Calculate resulting FLV
+
+			String[] pods = new String[2];
+			boolean found = false;
+			for (FlvRecordingMetaData meta : metaDataList) {
+				File flv = getRecordingMetaData(flvRecording.getRoom_id(), meta.getStreamName());
+
+				Integer pod = meta.getInteriewPodId();
+				if (flv.exists() && pod != null && pod > 0 && pod < 3) {
+					String path = flv.getCanonicalPath();
+					/*
+					 * CHECK FILE:
+					 * ffmpeg -i rec_316_stream_567_2013_08_28_11_51_45.flv -v error -f null file.null
+					 */ 
+					String[] args = new String[] {getPathToFFMPEG(), "-y"
+							, "-i", path
+							, "-an" // only input files with video will be treated as video sources
+							, "-v", "error"
+							, "-f", "null"
+							, "file.null"};
+					ConverterProcessResult r = ProcessHelper.executeScript("checkFlvPod_" + pod , args);
+					returnLog.add(r);
+					if ("0".equals(r.getExitValue())) {
+						//TODO need to remove smallest gap
+						long diff = diff(meta.getRecordStart(), meta.getFlvRecording().getRecordStart());
+						if (diff != 0L) {
+							// stub to add
+							// ffmpeg -y -loop 1 -i /home/solomax/work/openmeetings/branches/3.0.x/dist/red5/webapps/openmeetings/streams/hibernate/default_interview_image.jpg -filter_complex '[0:0]scale=320:260' -c:v libx264 -t 00:00:29.059 -pix_fmt yuv420p out.flv
+							File podFB = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + "_blank.flv");
+							String podPB = podFB.getCanonicalPath();
+							String[] argsPodB = new String[] { getPathToFFMPEG(), "-y" //
+									, "-loop", "1", "-i", defaultInterviewImageFile.getCanonicalPath() //
+									, "-filter_complex", String.format("[0:0]scale=%1$d:%2$d", flvWidth, flvHeight) //
+									, "-c:v", "libx264" //
+									, "-t", formatMillis(diff) //
+									, "-pix_fmt", "yuv420p" //
+									, podPB };
+							returnLog.add(ProcessHelper.executeScript("blankFlvPod_" + pod , argsPodB));
+							
+							//ffmpeg -y -i out.flv -i rec_15_stream_4_2014_07_15_20_41_03.flv -filter_complex '[0:0]setsar=1/1[sarfix];[1:0]scale=320:260,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]' -map '[v]'  output1.flv
+							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + ".flv");
+							String podP = podF.getCanonicalPath();
+							String[] argsPod = new String[] { getPathToFFMPEG(), "-y"//
+									, "-i", podPB //
+									, "-i", path //
+									, "-filter_complex", String.format("[0:0]setsar=1/1[sarfix];[1:0]scale=%1$d:%2$d,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]", flvWidth, flvHeight) //
+									, "-map", "[v]" //
+									, podP };
+							returnLog.add(ProcessHelper.executeScript("shiftedFlvPod_" + pod , argsPod));
+	
+							pods[pod - 1] = podP;
+						} else {
+							pods[pod - 1] = path;
+						}
+					}
+					found = true;
+				}
+			}
+			if (!found) {
+				ConverterProcessResult r = new ConverterProcessResult();
+				r.setProcess("CheckFlvFilesExists");
+				r.setError("No valid pods found");
+				returnLog.add(r);
+				return;
+			}
+			boolean shortest = false;
+			List<String> args = new ArrayList<String>();
+			args.add(getPathToFFMPEG());
+			args.add("-y"); 
+			for (int i = 0; i < 2; ++i) {
+				/*
+				 * INSERT BLANK INSTEAD OF BAD PAD:
+				 * ffmpeg -loop 1 -i default_interview_image.jpg -i rec_316_stream_569_2013_08_28_11_51_45.flv -filter_complex '[0:v]scale=320:260,pad=2*320:260[left];[1:v]scale=320:260[right];[left][right]overlay=main_w/2:0' -shortest -y out4.flv
+				 *
+				 * JUST MERGE:
+				 * ffmpeg -i rec_316_stream_569_2013_08_28_11_51_45.flv -i rec_316_stream_569_2013_08_28_11_51_45.flv -filter_complex '[0:v]scale=320:260,pad=2*320:260[left];[1:v]scale=320:260[right];[left][right]overlay=main_w/2:0' -y out4.flv
+				 */
+				if (pods[i] == null) {
+					shortest = true;
+					args.add("-loop"); args.add("1");
+					args.add("-i"); args.add(defaultInterviewImageFile.getCanonicalPath());
+				} else {
+					args.add("-i"); args.add(pods[i]);
+				}
+			}
+			args.add("-i"); args.add(outputFullWav);
+			args.add("-ar"); args.add("22050");
+			args.add("-ab"); args.add("32k");
+			args.add("-filter_complex");
+			args.add(String.format("[0:v]scale=%1$d:%2$d,pad=2*%1$d:%2$d[left];[1:v]scale=%1$d:%2$d[right];[left][right]overlay=main_w/2:0%3$s"
+					, flvWidth, flvHeight, shortest ? ":shortest=1" : ""));
+			if (shortest) {
+				args.add("-shortest");
+			}
+			args.add("-map"); args.add("0:0");
+			args.add("-map"); args.add("1:0");
+			args.add("-map"); args.add("2:0");
+			args.add("-r"); args.add("" + frameRate);
+			args.add("-qmax"); args.add("1");
+			args.add("-qmin"); args.add("1");
+			args.add("-y");
+			String hashFileFullNameFlv = "flvRecording_" + flvRecording.getFlvRecordingId() + ".flv";
+			String outputFullFlv = new File(streamFolderGeneral, hashFileFullNameFlv).getCanonicalPath();
+			args.add(outputFullFlv);
+			// TODO additional flag to 'quiet' output should be added
+			returnLog.add(ProcessHelper.executeScript("generateFullBySequenceFLV", args.toArray(new String[]{})));
+
+			flvRecording.setFlvWidth(2 * flvWidth);
+			flvRecording.setFlvHeight(flvHeight);
+
+			flvRecording.setFileHash(hashFileFullNameFlv);
+
+			// Extract first Image for preview purpose
+			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
+			// 320x240 movie.jpg
+
+			String hashFileFullNameJPEG = "flvRecording_" + flvRecording.getFlvRecordingId() + ".jpg";
+			String outPutJpeg = new File(streamFolderGeneral, hashFileFullNameJPEG).getCanonicalPath();
+			deleteFileIfExists(outPutJpeg);
+
+			flvRecording.setPreviewImage(hashFileFullNameJPEG);
+
+			String[] argv_previewFLV = new String[] { //
+					getPathToFFMPEG(), "-y", //
+					"-i", outputFullFlv, //
+					"-vcodec", "mjpeg", //
+					"-vframes", "100", "-an", //
+					"-f", "rawvideo", //
+					"-s", (2 * flvWidth) + "x" + flvHeight, //
+					outPutJpeg };
+
+			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_previewFLV));
+
+			String alternateDownloadName = "flvRecording_" + flvRecording.getFlvRecordingId() + ".avi";
+			String alternateDownloadFullName = new File(streamFolderGeneral, alternateDownloadName).getCanonicalPath();
+			deleteFileIfExists(alternateDownloadFullName);
+
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv, alternateDownloadFullName };
+
+			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
+
+			flvRecording.setAlternateDownload(alternateDownloadName);
+
+			updateDuration(flvRecording);
+			convertToMp4(flvRecording, returnLog);
+			flvRecording.setStatus(FlvRecording.Status.PROCESSED);
+
+			logDao.deleteByRecordingId(flvRecording.getFlvRecordingId());
+			for (ConverterProcessResult returnMap : returnLog) {
+				logDao.addFLVRecordingLog("generateFFMPEG", flvRecording, returnMap);
+			}
+
+			// Delete Wave Files
+			for (String fileName : listOfFullWaveFiles) {
+				File audio = new File(fileName);
+				if (audio.exists()) {
+					audio.delete();
+				}
+			}
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			flvRecording.setStatus(FlvRecording.Status.ERROR);
+		}
+		recordingDao.update(flvRecording);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
new file mode 100644
index 0000000..da133e1
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvRecorderConverter extends BaseConverter implements IRecordingConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverter.class, webAppRootKey);
+
+	// Spring loaded Beans
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingLogDao logDao;
+
+	private String FFMPEG_MAP_PARAM = ":";
+
+	public void startConversion(Long flvRecordingId) {
+		FlvRecording flvRecording = null;
+		try {
+			if (isUseOldStyleFfmpegMap()) {
+				FFMPEG_MAP_PARAM = ".";
+			}
+
+			String finalNamePrefix = "flvRecording_" + flvRecordingId;
+			flvRecording = recordingDao.get(flvRecordingId);
+			log.debug("flvRecording " + flvRecording.getFlvRecordingId());
+
+			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+			List<String> listOfFullWaveFiles = new ArrayList<String>();
+			File streamFolder = getStreamFolder(flvRecording);
+			
+			FlvRecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(flvRecording.getFlvRecordingId());
+
+			if (screenMetaData == null) {
+				throw new Exception("screenMetaData is Null FlvRecordingId " + flvRecording.getFlvRecordingId());
+			}
+
+			if (screenMetaData.getStreamStatus() == Status.NONE) {
+				throw new Exception("Stream has not been started, error in recording");
+			}
+			flvRecording.setStatus(FlvRecording.Status.CONVERTING);
+			flvRecording = recordingDao.update(flvRecording);
+
+			screenMetaData = waitForTheStream(screenMetaData.getFlvRecordingMetaDataId());
+
+			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder);
+
+			// Merge Wave to Full Length
+			String hashFileFullName = screenMetaData.getStreamName() + "_FINAL_WAVE.wav";
+			String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
+
+			if (listOfFullWaveFiles.size() == 1) {
+				outputFullWav = listOfFullWaveFiles.get(0);
+			} else if (listOfFullWaveFiles.size() > 0) {
+				String[] argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
+
+				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
+			} else {
+				// create default Audio to merge it. strip to content length
+				String outputWav = new File(getStreamsHibernateDir(), "one_second.wav").getCanonicalPath();
+
+				// Calculate delta at beginning
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
+
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", "" + deltaPadding };
+
+				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
+			}
+			screenMetaData.setFullWavAudioData(hashFileFullName);
+			metaDataDao.update(screenMetaData);
+
+			// Merge Audio with Video / Calculate resulting FLV
+
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
+
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
+
+			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
+			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
+			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17.flv
+			// final1.flv
+
+			int flvWidth = flvRecording.getWidth();
+			int flvHeight = flvRecording.getHeight();
+
+			log.debug("flvWidth -1- " + flvWidth);
+			log.debug("flvHeight -1- " + flvHeight);
+
+			flvWidth = Double.valueOf((Math.floor(flvWidth / 16)) * 16).intValue();
+			flvHeight = Double.valueOf((Math.floor(flvHeight / 16)) * 16).intValue();
+
+			log.debug("flvWidth -2- " + flvWidth);
+			log.debug("flvHeight -2- " + flvHeight);
+
+			flvRecording.setFlvWidth(flvWidth);
+			flvRecording.setFlvHeight(flvHeight);
+
+			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y",//
+					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), flvRecording.getRecordStart())),
+					"-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
+					"-acodec", "libmp3lame", //
+					"-ab", "32k", //
+					"-s", flvWidth + "x" + flvHeight, //
+					"-vcodec", "flashsv", //
+					"-map", "0" + FFMPEG_MAP_PARAM + "0", //
+					"-map", "1" + FFMPEG_MAP_PARAM + "0", //
+					outputFullFlv.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_fullFLV));
+
+			flvRecording.setFileHash(outputFullFlv.getName());
+
+			// Extract first Image for preview purpose
+			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
+			// 320x240 movie.jpg
+
+			File outPutJpeg = new File(getStreamsHibernateDir(), finalNamePrefix + ".jpg");
+
+			flvRecording.setPreviewImage(outPutJpeg.getName());
+
+			String[] argv_previewFLV = new String[] { //
+					getPathToFFMPEG(), "-y",//
+					"-i", outputFullFlv.getCanonicalPath(), //
+					"-vcodec", "mjpeg", //
+					"-vframes", "1", "-an", //
+					"-f", "rawvideo", //
+					"-s", flvWidth + "x" + flvHeight, //
+					outPutJpeg.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("previewFullFLV", argv_previewFLV));
+
+			File alternateDownload = new File(getStreamsHibernateDir(), finalNamePrefix + ".avi");
+
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv.getCanonicalPath(), "-vcodec",
+					"copy", alternateDownload.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
+
+			flvRecording.setAlternateDownload(alternateDownload.getName());
+
+			updateDuration(flvRecording);
+			convertToMp4(flvRecording, returnLog);
+			flvRecording.setStatus(FlvRecording.Status.PROCESSED);
+
+			logDao.deleteByRecordingId(flvRecording.getFlvRecordingId());
+			for (ConverterProcessResult returnMap : returnLog) {
+				logDao.addFLVRecordingLog("generateFFMPEG", flvRecording, returnMap);
+			}
+
+			// Delete Wave Files
+			for (String fileName : listOfFullWaveFiles) {
+				File audio = new File(fileName);
+				if (audio.exists()) {
+					audio.delete();
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			flvRecording.setStatus(FlvRecording.Status.ERROR);
+		}
+		if (flvRecording != null) {
+			recordingDao.update(flvRecording);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateImage.java b/src/main/java/org/apache/openmeetings/converter/GenerateImage.java
new file mode 100644
index 0000000..dc2fdcc
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateImage.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir;
+import static org.apache.openmeetings.util.OmFileHelper.JPG_EXTENTION;
+import static org.apache.openmeetings.util.OmFileHelper.profileFileName;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GenerateImage extends BaseConverter {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(GenerateImage.class, webAppRootKey);
+
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+
+	public ConverterProcessResultList convertImage(String fileName, String fileExt,
+			String roomName, String fileNameShort, boolean fullProcessing)
+			throws Exception {
+
+		ConverterProcessResultList returnMap = new ConverterProcessResultList();
+
+		File fileFullPath = new File(OmFileHelper.getUploadTempRoomDir(roomName), fileName + fileExt);
+
+		File destinationFile = OmFileHelper.getNewFile(OmFileHelper.getUploadRoomDir(roomName), fileName, ".jpg");
+
+		log.debug("##### convertImage destinationFile: " + destinationFile);
+
+		ConverterProcessResult processJPG = convertSingleJpg(fileFullPath.getCanonicalPath(), destinationFile);
+		ConverterProcessResult processThumb = generateThumbs.generateThumb(thumbImagePrefix, destinationFile, 50);
+
+		returnMap.addItem("processJPG", processJPG);
+		returnMap.addItem("processThumb", processThumb);
+
+		// Delete old one
+		fileFullPath.delete();
+
+		return returnMap;
+	}
+
+	public ConverterProcessResultList convertImageUserProfile(File file, Long users_id, boolean skipConvertion) throws Exception {
+		ConverterProcessResultList returnMap = new ConverterProcessResultList();
+		
+		// User Profile Update
+		for (File f : getUploadProfilesUserDir(users_id).listFiles(new FileFilter() {
+			public boolean accept(File pathname) {
+				return pathname.getName().endsWith(JPG_EXTENTION);
+			}
+		})) {
+			FileHelper.removeRec(f);
+		}
+		
+		File destinationFile = OmFileHelper.getNewFile(getUploadProfilesUserDir(users_id), profileFileName, JPG_EXTENTION);
+		if (!skipConvertion) {
+			returnMap.addItem("processJPG", convertSingleJpg(file.getCanonicalPath(), destinationFile));
+		} else {
+			FileHelper.copy(file, destinationFile);
+		}
+		returnMap.addItem("processThumb1", generateThumbs.generateThumb(chatImagePrefix, destinationFile, 40));
+		returnMap.addItem("processThumb2", generateThumbs.generateThumb(profileImagePrefix, destinationFile, 126));
+		returnMap.addItem("processThumb3", generateThumbs.generateThumb(bigImagePrefix, destinationFile, 240));
+
+		if (!skipConvertion) {
+			// Delete old one
+			file.delete();
+		}
+
+		String pictureuri = destinationFile.getName();
+		User us = usersDao.get(users_id);
+		us.setUpdatetime(new java.util.Date());
+		us.setPictureuri(pictureuri);
+		usersDao.update(us, users_id);
+
+		//FIXME: After uploading a new picture all other clients should refresh
+		//scopeApplicationAdapter.updateUserSessionObject(users_id, pictureuri);
+
+		return returnMap;
+	}
+
+	/**
+	 * -density 150 -resize 800
+	 * @throws IOException 
+	 * 
+	 */
+	private ConverterProcessResult convertSingleJpg(String inputFile, File outputfile) throws IOException {
+		String[] argv = new String[] { getPathToImageMagick(), inputFile, outputfile.getCanonicalPath() };
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult convertImageByTypeAndSize(String inputFile,
+			String outputfile, int width, int height) {
+		String[] argv = new String[] { getPathToImageMagick(), "-size",
+				width + "x" + height, inputFile, outputfile };
+		return ProcessHelper.executeScript("convertImageByTypeAndSizeAndDepth", argv);
+	}
+
+	public ConverterProcessResult convertImageByTypeAndSizeAndDepth(
+			String inputFile, String outputfile, int width, int height,
+			int depth) {
+		String[] argv = new String[] { getPathToImageMagick(), "-size",
+				width + "x" + height, "-depth", Integer.toString(depth),
+				inputFile, outputfile };
+		return ProcessHelper.executeScript("convertImageByTypeAndSizeAndDepth", argv);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java b/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java
new file mode 100644
index 0000000..7ae7601
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GenerateSWF {
+
+	public static final Logger log = Red5LoggerFactory.getLogger(GenerateSWF.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public final static boolean isPosix = System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1;
+
+	public final static String execExt = isPosix ? "" : ".exe";
+
+	private String getPathToSwfTools() {
+		String pathToSWFTools = configurationDao.getConfValue("swftools_path", String.class, "");
+		// If SWFTools Path is not blank a File.separator at the end of the path
+		// is needed
+		if (!"".equals(pathToSWFTools) && !pathToSWFTools.endsWith(File.separator)) {
+			pathToSWFTools = pathToSWFTools + File.separator;
+		}
+		return pathToSWFTools;
+	}
+
+	private String getSwfZoom() {
+		String valueForSwfZoom = configurationDao.getConfValue("swftools_zoom", String.class, "");
+		// WARNING CODE NOT COMPLETE: If SWFTools zoom (dpi) should be an integer between 50 and  600 with a default value of 100 dpi
+		if ("".equals(valueForSwfZoom)) {
+			valueForSwfZoom = "72";
+		}
+		return valueForSwfZoom;
+	}
+
+	private String getSwfJpegQuality() {
+		String valueForSwfJpegQuality = configurationDao.getConfValue("swftools_jpegquality", String.class, "");
+		// WARNING CODE NOT COMPLETE: If SWFTools JPEG Quality should be an integer between 1 and 100, with a default value of 85
+		if ("".equals(valueForSwfJpegQuality)) {
+			valueForSwfJpegQuality = "85";
+		}
+		return valueForSwfJpegQuality;
+	}
+
+	public ConverterProcessResult generateSwf(File originalFolder, File destinationFolder, String fileNamePure) throws IOException {
+		
+		// Create the Content of the Converter Script (.bat or .sh File)
+		String[] argv = new String[] {
+				getPathToSwfTools() + "pdf2swf" + execExt, "-s",
+				"insertstop", // insert Stop command into every frame
+				"-s","poly2bitmap", //http://www.swftools.org/gfx_tutorial.html#Rendering_pages_to_SWF_files
+				"-i", // change draw order to reduce pdf complexity
+				"-j", "" + getSwfJpegQuality(), // JPEG Quality 
+				"-s", "zoom=" + getSwfZoom(), // set zoom dpi 
+				new File(originalFolder, fileNamePure + ".pdf").getCanonicalPath(),
+				new File(destinationFolder, fileNamePure + ".swf").getCanonicalPath() };
+
+		return ProcessHelper.executeScript("generateSwf", argv);
+	}
+
+	/**
+	 * Generates an SWF from the list of files.
+	 */
+	public ConverterProcessResult generateSwfByImages(List<String> images, String outputfile, int fps) {
+		List<String> argvList = Arrays.asList(new String[] {
+				getPathToSwfTools() + "png2swf" + execExt, "-s", 
+				"insertstop", // Insert Stop command into every frame
+				"-o", outputfile, "-r", Integer.toString(fps), "-z" });
+
+		argvList.addAll(images);
+		return ProcessHelper.executeScript("generateSwfByImages", argvList.toArray(new String[0]));
+	}
+
+	/**
+	 * Combines a bunch of SWFs into one SWF by concatenate.
+	 */
+	public ConverterProcessResult generateSWFByCombine(List<String> swfs, String outputswf, int fps) {
+		List<String> argvList = Arrays.asList(new String[] {
+				getPathToSwfTools() + "swfcombine" + execExt, "-s",
+				"insertstop", // Insert Stop command into every frame
+				"-o", outputswf, "-r", Integer.toString(fps), "-z", "-a" });
+
+		argvList.addAll(swfs);
+		return ProcessHelper.executeScript("generateSWFByCombine", argvList.toArray(new String[0]));
+	}
+
+	public ConverterProcessResult generateSWFByFFMpeg(String inputWildCard,
+			String outputswf, int fps, int width, int height) {
+		// FIXME: ffmpeg should be on the system path
+		String[] argv = new String[] { "ffmpeg" + execExt, "-r",
+				Integer.toString(fps), "-i", inputWildCard, "-s",
+				width + "x" + height, "-b", "750k", "-ar", "44100", "-y",
+				outputswf };
+
+		return ProcessHelper.executeScript("generateSWFByFFMpeg", argv);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java b/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java
new file mode 100644
index 0000000..2817b62
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class GenerateThumbs extends BaseConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(GenerateThumbs.class, webAppRootKey);
+
+	public ConverterProcessResult generateThumb(String pre, File f, Integer thumbSize) throws IOException {
+		log.debug("generateThumb");
+		// Init variables
+		String name = f.getName();
+		File parent = f.getParentFile();
+
+		String[] argv = new String[] {
+			getPathToImageMagick()
+			, "-thumbnail"
+			, Integer.toString(thumbSize) + "x" + Integer.toString(thumbSize)
+			, f.getCanonicalPath()
+			, new File(parent, pre + name).getCanonicalPath()
+			};
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult decodePDF(String inputfile, String outputfile) {
+		log.debug("decodePDF");
+		String[] argv = new String[] { getPathToImageMagick(), inputfile, outputfile };
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult generateBatchThumb(File inputfile, File outputpath, Integer thumbSize, String pre) throws IOException {
+		log.debug("generateBatchThumbByWidth");
+		String[] argv = new String[] {
+			getPathToImageMagick()
+			, "-thumbnail" // FIXME
+			, Integer.toString(thumbSize)
+			, inputfile.getCanonicalPath()
+			, new File(outputpath, "_" + pre + "_page-%04d.jpg").getCanonicalPath()
+			};
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult generateImageBatchByWidth(
+			String current_dir, String inputfile, String outputpath,
+			Integer thumbWidth, String pre) {
+		log.debug("generateImageBatchByWidth");
+
+		String[] argv = new String[] { getPathToImageMagick(),
+				"-resize", Integer.toString(thumbWidth), inputfile,
+				outputpath + "_" + pre + "_page.png" };
+
+		return ProcessHelper.executeScript("generateImageBatchByWidth", argv);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java b/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java
new file mode 100644
index 0000000..1a53c2e
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+public interface IRecordingConverter {
+	void startConversion(Long recordingId);
+}
diff --git a/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java b/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java
new file mode 100644
index 0000000..0228088
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.beans.rooms;
+
+import org.apache.openmeetings.db.entity.room.Room;
+
+public class RoomsList {
+	
+	Room[] roomList = null;
+
+	public Room[] getRoomList() {
+		return roomList;
+	}
+	public void setRoomList(Room[] roomList) {
+		this.roomList = roomList;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java b/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java
new file mode 100644
index 0000000..9ae0a55
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.calendar.management;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.web.mail.template.AppointmentReminderTemplate;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class AppointmentLogic {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentLogic.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private LabelDao langDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private InvitationDao invitationDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	private static int DEFAULT_MINUTES_REMINDER_SEND = 15;
+
+	public List<Appointment> getTodaysAppointmentsForUser(Long userId) {
+		try {
+			log.debug("getTodaysAppointmentsForUser");
+			List<Appointment> points = appointmentDao.getTodaysAppointmentsbyRangeAndMember(userId);
+			log.debug("Count Appointments for Today : " + points.size());
+			return points;
+		} catch (Exception err) {
+			log.error("[getTodaysAppointmentsForUser]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * @author o.becherer
+	 * @param room_id
+	 * @return
+	 */
+	// --------------------------------------------------------------------------------------------
+	public Appointment getAppointmentByRoom(Long room_id) throws Exception {
+		log.debug("getAppointmentByRoom");
+
+		Room room = roomDao.get(room_id);
+
+		if (room == null) {
+			throw new Exception("Room does not exist in database!");
+		}
+
+		if (!room.getAppointment()) {
+			throw new Exception("Room " + room.getName() + " isnt part of an appointed meeting");
+		}
+
+		return appointmentDao.getAppointmentByRoom(room_id);
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	private void sendReminder(User u, Appointment a) throws Exception {
+		Invitation i = new Invitation();
+		i.setInvitedBy(u);
+		i.setInvitee(u);
+		i.setAppointment(a);
+		i.setRoom(a.getRoom());
+		sendReminder(u, a, i);
+	}
+	
+	private void sendReminder(User u, Appointment a, Invitation inv) throws Exception {
+		if (inv == null) {
+			log.error(String.format("Error retrieving Invitation for member %s in Appointment %s"
+					, u.getAdresses().getEmail(), a.getTitle()));
+			return;
+		}
+
+		TimeZone tz = timezoneUtil.getTimeZone(u.getTimeZoneId());
+
+		long langId = u.getLanguage_id();
+		// Get the required labels one time for all meeting members. The
+		// Language of the email will be the system default language
+
+		String smsSubject = generateSMSSubject(langDao.getString(1158L, langId), a);
+
+		AppointmentReminderTemplate t = AppointmentReminderTemplate.get(langId, a, tz);
+		invitationManager.sendInvitionLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
+
+		invitationManager.sendInvitationReminderSMS(u.getAdresses().getPhone(), smsSubject, langId);
+		if (inv.getHash() != null) {
+			inv.setUpdated(new Date());
+			invitationDao.update(inv);
+		}
+	}
+	
+	/**
+	 * Sending Reminder in Simple mail format 5 minutes before Meeting begins
+	 */
+	// ----------------------------------------------------------------------------------------------
+	public void doScheduledMeetingReminder() throws Exception {
+		// log.debug("doScheduledMeetingReminder");
+		String baseUrl = configurationDao.getConfValue(CONFIG_APPLICATION_BASE_URL, String.class, DEFAULT_BASE_URL);
+		if (baseUrl == null || baseUrl.length() < 1) {
+			log.error("Error retrieving baseUrl for application");
+			return;
+		}
+		Integer minutesReminderSend = configurationDao.getConfValue(CONFIG_APPOINTMENT_REMINDER_MINUTES, Integer.class
+				, "" + DEFAULT_MINUTES_REMINDER_SEND);
+		if (minutesReminderSend == null) {
+			throw new Exception("minutesReminderSend is null!");
+		}
+
+		if (minutesReminderSend == 0) {
+			log.warn("minutesReminderSend is 0, disabling reminder scheduler");
+			return;
+		}
+
+		long milliseconds = (minutesReminderSend * 60 * 1000L);
+		Calendar start = Calendar.getInstance();
+		if (milliseconds < 0) {
+			start.setTimeInMillis(start.getTimeInMillis() + milliseconds);
+		}
+		Calendar end = Calendar.getInstance();
+		if (milliseconds > 0) {
+			end.setTimeInMillis(end.getTimeInMillis() + milliseconds);
+		}
+
+		for (Appointment a : appointmentDao.getAppointmentsInRange(start, end)) {
+			// Prevent email from being send twice, even if the cycle takes
+			// very long to send each
+			if (a.isReminderEmailSend()) {
+				continue;
+			}
+			TimeZone ownerZone = timezoneUtil.getTimeZone(a.getOwner().getTimeZoneId());
+			Calendar aNow = Calendar.getInstance(ownerZone);
+			Calendar aStart = a.startCalendar(ownerZone);
+			aStart.add(Calendar.MINUTE, -minutesReminderSend);
+			if (aStart.after(aNow)) {
+				// to early to send reminder
+				continue;
+			}
+			// Update Appointment to not send invitation twice
+			a.setReminderEmailSend(true);
+			appointmentDao.update(a, null, false);
+
+			List<MeetingMember> members = a.getMeetingMembers();
+
+			sendReminder(a.getOwner(), a);
+			if (members == null) {
+				log.debug("doScheduledMeetingReminder : no members in meeting!");
+				continue;
+			}
+			//TODO should we add reminder for the owner????
+
+			// Iterate through all MeetingMembers
+			for (MeetingMember mm : members) {
+				log.debug("doScheduledMeetingReminder : Member " + mm.getUser().getAdresses().getEmail());
+
+				Invitation inv = mm.getInvitation();
+
+				sendReminder(mm.getUser(), a, inv);
+			}
+		}
+	}
+
+	private String generateSMSSubject(String labelid1158, Appointment ment) {
+		String subj = configurationDao.getConfValue("sms.subject", String.class, null);
+		return subj == null || subj.length() == 0 ? 
+				labelid1158 + " " + ment.getTitle() : subj;
+	}
+
+	public Appointment getAppointment(String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId, Long users_id) {
+		Appointment a = new Appointment();
+		a.setTitle(appointmentName);
+		a.setLocation(appointmentLocation);
+		a.setDescription(appointmentDescription);
+		a.setStart(appointmentstart.getTime());
+		a.setEnd(appointmentend.getTime());
+		a.setIsDaily(isDaily);
+		a.setIsWeekly(isWeekly);
+		a.setIsMonthly(isMonthly);
+		a.setIsYearly(isYearly);
+		a.setCategory(appointmentCategoryDao.get(categoryId));
+		a.setRemind(appointmentReminderTypDao.get(remind));
+		if (roomId > 0) {
+			a.setRoom(roomDao.get(roomId));
+		} else {
+			a.setRoom(new Room());
+			a.getRoom().setComment(appointmentDescription);
+			a.getRoom().setName(appointmentName);
+			a.getRoom().setRoomtype(roomTypeDao.get(roomType));
+		}
+		a.setOwner(userDao.get(users_id));
+		a.setPasswordProtected(isPasswordProtected);
+		a.setPassword(password);
+		a.setMeetingMembers(new ArrayList<MeetingMember>());
+		for (String singleClient : mmClient) {
+			if (Strings.isEmpty(singleClient)) {
+				continue;
+			}
+			MeetingMember mm = getMeetingMember(users_id, languageId, singleClient);
+			mm.setAppointment(a);
+			a.getMeetingMembers().add(mm);
+		}
+		return a;
+	}
+
+	public MeetingMember getMeetingMember(Long userId, Long langId, String str) {
+		String[] params = str.split(",");
+		
+		try {
+			return meetingMemberDao.get(Long.valueOf(params[0]));
+		} catch (Exception e) {
+			//no-op
+		}
+		MeetingMember mm = new MeetingMember();
+		try {
+			mm.setUser(userDao.get(Long.valueOf(params[4])));
+		} catch (Exception e) {
+			//no-op
+		}
+		if (mm.getUser() == null) {
+			mm.setUser(userDao.getContact(params[3], params[1], params[2], langId, params[5], userId));
+		}
+		
+		return mm;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java b/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java
new file mode 100644
index 0000000..fffc778
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java
@@ -0,0 +1,392 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.conference;
+
+import static org.apache.openmeetings.util.CalendarHelper.getZoneId;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.TimeZone;
+import java.util.Vector;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.mail.SMSHandler;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.util.LinkHelper;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.util.mail.IcalHandler;
+import org.apache.openmeetings.web.mail.template.AbstractAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.CanceledAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.CreatedAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.InvitationTemplate;
+import org.apache.openmeetings.web.mail.template.UpdatedAppointmentTemplate;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class InvitationManager implements IInvitationManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationManager.class, webAppRootKey);
+
+	@Autowired
+	private InvitationDao invitationDao;
+	@Autowired
+	private MailHandler mailHandler;
+	@Autowired
+	private SMSHandler smsHandler;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private ConfigurationDao configDao;
+
+	/**
+	 * @author vasya
+	 * 
+	 * @param mm
+	 * @param a
+	 * @param message
+	 * @param subject
+	 * @throws Exception 
+	 */
+	private void sendInvitionLink(Appointment a, MeetingMember mm, MessageType type, boolean ical) throws Exception	{
+		User owner = a.getOwner();
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		Long langId = mm.getUser().getLanguage_id();
+		TimeZone tz = timezoneUtil.getTimeZone(mm.getUser());
+		AbstractAppointmentTemplate t = null;
+		switch (type) {
+			case Cancel:
+				t = CanceledAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			case Create:
+				t = CreatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			case Update:
+			default:
+				t = UpdatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			
+		}
+		sendInvitionLink(mm.getInvitation(), type, t.getSubject(), t.getEmail(), ical);
+	}
+	
+	public void sendInvitionLink(Invitation i, MessageType type, String subject, String message, boolean ical) throws Exception {
+		String invitation_link = type == MessageType.Cancel ? null : LinkHelper.getInvitationLink(configDao.getBaseUrl(), i);
+		User owner = i.getInvitedBy();
+		
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		String template = InvitationTemplate.getEmail(i.getInvitee().getLanguage_id(), invitorName, message, invitation_link);
+		String email = i.getInvitee().getAdresses().getEmail();
+		String replyToEmail = owner.getAdresses().getEmail();
+		
+		if (ical) {
+			String username = i.getInvitee().getLogin();
+			boolean isOwner = owner.getUser_id().equals(i.getInvitee().getUser_id());
+			IcalHandler handler = new IcalHandler(MessageType.Cancel == type ? IcalHandler.ICAL_METHOD_CANCEL : IcalHandler.ICAL_METHOD_REQUEST);
+
+			HashMap<String, String> attendeeList = handler.getAttendeeData(email, username, isOwner);
+
+			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
+			atts.add(attendeeList);
+
+			// Defining Organizer
+
+			HashMap<String, String> organizerAttendee = handler.getAttendeeData(email, username, isOwner);
+			organizerAttendee = handler.getAttendeeData(replyToEmail, owner.getLogin(), isOwner);
+
+			Appointment a = i.getAppointment();
+			// Create ICal Message
+			//FIXME should be checked to generate valid time
+			String meetingId = handler.addNewMeeting(a.getStart(), a.getEnd(),
+					a.getTitle(), atts, invitation_link,
+					organizerAttendee, a.getIcalId(), timezoneUtil.getTimeZone(owner));
+
+			// Writing back meetingUid
+			if (Strings.isEmpty(a.getIcalId())) {
+				a.setIcalId(meetingId);
+				// TODO should it be saved ???
+			}
+
+			log.debug(handler.getICalDataAsString());
+			mailHandler.send(new MailMessage(email, replyToEmail, subject, template, handler.getIcalAsByteArray()));
+		} else {
+			mailHandler.send(email, replyToEmail, subject, template);
+		}
+	}
+
+	/**
+	 * This method sends invitation reminder SMS
+	 * @param phone user's phone
+	 * @param subject 
+	 * @return
+	 */
+	public boolean sendInvitationReminderSMS(String phone, String subject, long language_id) {
+		if (!Strings.isEmpty(phone)) {
+			log.debug("sendInvitationReminderSMS to " + phone + ": " + subject);
+			try {
+				return smsHandler.sendSMS(phone, subject, language_id);
+			} catch (Exception e) {
+				log.error("sendInvitationReminderSMS", e);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param hashCode
+	 * @param hidePass
+	 * @return
+	 */
+	public Object getInvitationByHashCode(String hashCode, boolean hidePass) {
+		try {
+			log.debug("Invitation was requested by hashcode: " + hashCode);
+			Invitation i = invitationDao.getInvitationByHashCode(hashCode, hidePass);
+
+			if (i == null) {
+				// already deleted or does not exist
+				return new Long(-31);
+			} else {
+				switch (i.getValid()) {
+					case OneTime:
+						// do this only if the user tries to get the Invitation, not
+						// while checking the PWD
+						if (hidePass) {
+							// one-time invitation
+							if (i.isUsed()) {
+								// Invitation is of type *only-one-time* and was
+								// already used
+								return new Long(-32);
+							} else {
+								// set to true if this is the first time / a normal
+								// getInvitation-Query
+								i.setUsed(true);
+								invitationDao.update(i);
+								// invitation.setInvitationpass(null);
+								i.setAllowEntry(true);
+							}
+						} else {
+							i.setAllowEntry(true);
+						}
+						break;
+					case Period:
+						LocalDateTime now = ZonedDateTime.now(getZoneId(i.getInvitee().getTimeZoneId())).toLocalDateTime();
+						LocalDateTime from = CalendarHelper.getDateTime(i.getValidFrom(), i.getInvitee().getTimeZoneId());
+						LocalDateTime to = CalendarHelper.getDateTime(i.getValidTo(), i.getInvitee().getTimeZoneId());
+						if (now.isAfter(from) && now.isBefore(to)) {
+							invitationDao.update(i);
+							// invitation.setInvitationpass(null);
+							i.setAllowEntry(true);
+						} else {
+
+							// Invitation is of type *period* and is not valid
+							// anymore, this is an extra hook to display the time
+							// correctly
+							// in the method where it shows that the hash code does
+							// not work anymore
+							i.setAllowEntry(false);
+						}
+						break;
+					case Endless:
+					default:
+						invitationDao.update(i);
+
+						i.setAllowEntry(true);
+						// invitation.setInvitationpass(null);
+						break;
+				}
+				return i;
+			}
+
+		} catch (Exception err) {
+			log.error("[getInvitationByHashCode]", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * @param hashCode
+	 * @param pass
+	 * @return
+	 */
+	public Object checkInvitationPass(String hashCode, String pass) {
+		try {
+			Object obj = getInvitationByHashCode(hashCode, false);
+			log.debug("checkInvitationPass - obj: " + obj);
+			if (obj instanceof Invitation) {
+				Invitation invitation = (Invitation) obj;
+
+
+				if (ManageCryptStyle.getInstanceOfCrypt().verifyPassword(pass, invitation.getPassword())) {
+					return new Long(1);
+				} else {
+					return new Long(-34);
+				}
+			} else {
+				return obj;
+			}
+		} catch (Exception ex2) {
+			log.error("[checkInvitationPass] ", ex2);
+		}
+		return new Long(-1);
+	}
+	
+	/**
+	 * @author vasya
+	 * 
+	 * @param member
+	 * @param a
+	 */
+	public void processInvitation(Appointment a, MeetingMember member, MessageType type) {
+		processInvitation(a, member, type, true);
+	}
+
+	public void processInvitation(Appointment a, MeetingMember mm, MessageType type, boolean sendMail) {
+		if (a.getRemind() == null) {
+			log.error("Appointment doesn't have reminder set!");
+			return;
+		}
+		long remindType = a.getRemind().getTypId();
+		if (remindType < 2) {
+			log.error("MeetingMember should not have invitation!");
+			return;
+		}
+
+		log.debug(":::: processInvitation ..... " + remindType);
+
+		// appointment.getRemind().getTypId() == 1 will not receive emails
+		if (remindType > 1) {
+			log.debug("Invitation for Appointment : simple email");
+
+			try {
+				mm.setInvitation(getInvitation(mm.getInvitation()
+						, mm.getUser(), a.getRoom(), a.isPasswordProtected(), a.getPassword()
+						, Valid.Period, a.getOwner(), null, a.getStart(), a.getEnd(), a));
+				if (sendMail) {
+					sendInvitionLink(a, mm, type, remindType > 2);
+				}
+			} catch (Exception e) {
+				log.error("Unexpected error while setting invitation", e);
+			}
+		}
+	}
+
+	public Invitation getInvitation(Invitation _invitation, User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment) {
+		
+		Invitation invitation = _invitation;
+		if (null == _invitation) {
+			invitation = new Invitation();
+			String hashRaw = "HASH" + (System.currentTimeMillis());
+			try {
+				invitation.setHash(MD5.do_checksum(hashRaw));
+			} catch (NoSuchAlgorithmException e) {
+				log.error("Unexpected error while creating invitation", e);
+				throw new RuntimeException(e);
+			}
+		}
+
+		invitation.setPasswordProtected(isPasswordProtected);
+		if (isPasswordProtected) {
+			invitation.setPassword(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(invitationpass));
+		}
+
+		invitation.setUsed(false);
+		invitation.setValid(valid);
+		
+		// valid period of Invitation
+		switch (valid) {
+			case Period:
+				invitation.setValidFrom(new Date(gmtTimeStart.getTime() - (5 * 60 * 1000)));
+				invitation.setValidTo(gmtTimeEnd);
+				break;
+			case Endless:
+			case OneTime:
+			default:
+				break;
+		}
+
+		invitation.setDeleted(false);
+
+		invitation.setInvitedBy(createdBy);
+		invitation.setInvitee(inveetee);
+		if (language_id != null && Type.contact == invitation.getInvitee().getType()) {
+			invitation.getInvitee().setLanguage_id(language_id);
+		}
+		invitation.setRoom(room);
+		invitation.setInserted(new Date());
+		invitation.setAppointment(appointment);
+
+		return invitation;
+	}
+
+	/**
+	 * Sending invitation within plain mail
+	 * 
+	 * @param user_level
+	 * @param username
+	 * @param message
+	 * @param email
+	 * @param subject
+	 * @param rooms_id
+	 * @param conferencedomain
+	 * @param isPasswordProtected
+	 * @param invitationpass
+	 * @param valid
+	 * @param validFrom
+	 * @param validTo
+	 * @param createdBy
+	 * @return
+	 */
+	public Invitation getInvitation(User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment)
+	{
+		Invitation i = getInvitation(null, inveetee, room, isPasswordProtected, invitationpass, valid, createdBy
+				, language_id, gmtTimeStart, gmtTimeEnd, appointment);
+		i = invitationDao.update(i);
+		return i;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java b/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java
new file mode 100644
index 0000000..1fc3a07
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java
@@ -0,0 +1,1103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.conference;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.room.SipDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class RoomManager implements IRoomManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomManager.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private ISessionManager sessionManager;
+    @Autowired
+	private RoomDao roomDao;
+    @Autowired
+	private SipDao sipDao;
+    @Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * Get a Rooms-Object or NULL
+	 * 
+	 * @param externalRoomId
+	 * @return Rooms-Object or NULL
+	 */
+	public Room getRoomByExternalId(Long externalRoomId,
+			String externalRoomType, long roomtypes_id) {
+		log.debug("getRoombyExternalId : " + externalRoomId + " - "
+				+ externalRoomType + " - " + roomtypes_id);
+		try {
+			TypedQuery<Room> query = em.createNamedQuery("getRoomByExternalId", Room.class);
+			query.setParameter("externalRoomId", externalRoomId);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("roomtypes_id", roomtypes_id);
+			List<?> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return (Room) ll.get(0);
+			} else {
+				log.error("Could not find room " + externalRoomId);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomByExternalId] ", ex2);
+		}
+		return null;
+	}
+
+	public SearchResult<Room> getRooms(int start, int max, String orderby, boolean asc, String search) {
+		try {
+			SearchResult<Room> sResult = new SearchResult<Room>();
+			sResult.setRecords(this.selectMaxFromRooms(search));
+			sResult.setObjectName(Room.class.getName());
+			sResult.setResult(this.getRoomsInternatlByHQL(start, max,
+					orderby, asc, search));
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+	
+	public SearchResult<Room> getRoomsWithCurrentUsers(int start, int max, String orderby, boolean asc) {
+		try {
+			SearchResult<Room> sResult = new SearchResult<Room>();
+			sResult.setRecords(this.selectMaxFromRooms(""));
+			sResult.setObjectName(Room.class.getName());
+
+			List<Room> rooms = this.getRoomsInternatl(start, max, orderby,
+					asc);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			sResult.setResult(rooms);
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByList(int start, int max, String orderby, boolean asc) {
+		try {
+			List<Room> rooms = this.getRoomsInternatl(start, max, orderby,
+					asc);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			return rooms;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByListAndType(int start, int max, String orderby, boolean asc, String externalRoomType) {
+		try {
+			List<Room> rooms = this.getRoomsInternatlbyType(start, max,
+					orderby, asc, externalRoomType);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			return rooms;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public Long selectMaxFromRooms(String search) {
+		try {
+			if (search.length() == 0) {
+				search = "%";
+			} else {
+				search = "%" + search + "%";
+			}
+			// get all users
+			TypedQuery<Long> query = em.createNamedQuery("selectMaxFromRooms", Long.class);
+			query.setParameter("search", search);
+			List<Long> ll = query.getResultList();
+			log.debug("Number of records" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromRooms] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all availible rooms
+	 * 
+	 * @param user_level
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	public List<Room> getRoomsInternatl(int start, int max, String orderby,
+			boolean asc) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			cq.where(condition);
+			cq.distinct(asc);
+			if (asc) {
+				cq.orderBy(cb.asc(c.get(orderby)));
+			} else {
+				cq.orderBy(cb.desc(c.get(orderby)));
+			}
+			TypedQuery<Room> q = em.createQuery(cq);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all availible rooms
+	 * 
+	 * @param user_level
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	public List<Room> getRoomsInternatlByHQL(int start, int max,
+			String orderby, boolean asc, String search) {
+		try {
+
+			String hql = "select c from Room c where c.deleted = false AND c.name LIKE :search ";
+
+			if (search.length() == 0) {
+				search = "%";
+			} else {
+				search = "%" + search + "%";
+			}
+			if (orderby != null) {
+				hql += " ORDER BY " + (orderby.startsWith("c.") ? "" : "c.") + orderby;
+	
+				if (asc) {
+					hql += " ASC";
+				} else {
+					hql += " DESC";
+				}
+			}
+			TypedQuery<Room> query = em.createQuery(hql, Room.class);
+			query.setParameter("search", search);
+			query.setFirstResult(start);
+			query.setMaxResults(max);
+
+			return query.getResultList();
+
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getAllRooms() {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			cq.where(condition);
+			TypedQuery<Room> q = em.createQuery(cq);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getAllRooms]", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsInternatlbyType(int start, int max,
+			String orderby, boolean asc, String externalRoomType) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			Predicate subCondition = cb.equal(c.get("externalRoomType"),
+					externalRoomType);
+			cq.where(condition, subCondition);
+			cq.distinct(asc);
+			if (asc) {
+				cq.orderBy(cb.asc(c.get(orderby)));
+			} else {
+				cq.orderBy(cb.desc(c.get(orderby)));
+			}
+			TypedQuery<Room> q = em.createQuery(cq);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	public List<RoomOrganisation> getOrganisationsByRoom(long rooms_id) {
+		try {
+			String hql = "select c from RoomOrganisation as c "
+					+ "where c.room.rooms_id = :rooms_id "
+					+ "AND c.deleted = false";
+			TypedQuery<RoomOrganisation> q = em.createQuery(hql, RoomOrganisation.class);
+
+			q.setParameter("rooms_id", rooms_id);
+			List<RoomOrganisation> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getOrganisationsByRoom] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsByIds(List<Integer> roomIds) {
+		try {
+			if (roomIds == null || roomIds.size() == 0) {
+				return new LinkedList<Room>();
+			}
+
+			String queryString = "SELECT r from Room r " + "WHERE ";
+
+			queryString += "(";
+
+			int i = 0;
+			for (Integer room_id : roomIds) {
+				if (i != 0) {
+					queryString += " OR ";
+				}
+				queryString += " r.rooms_id = " + room_id;
+				i++;
+			}
+
+			queryString += ")";
+
+			TypedQuery<Room> q = em.createQuery(queryString, Room.class);
+
+			List<Room> ll = q.getResultList();
+
+			return ll;
+
+		} catch (Exception ex2) {
+			log.error("[getRoomsByIds] ", ex2);
+		}
+		return null;
+	}
+
+	// ---------------------------------------------------------------------------------------------
+
+    /**
+     * Returns number of SIP conference participants
+     * @param rooms_id id of room
+     * @return number of participants
+     */
+    public Integer getSipConferenceMembersNumber(Long rooms_id) {
+    	Room r = roomDao.get(rooms_id);
+    	return r == null || r.getConfno() == null ? null : sipDao.countUsers(r.getConfno());
+    }
+
+    private List<RoomModerator> getModerators(List<Map<String, Object>> list, Long roomId) {
+		List<RoomModerator> result = new ArrayList<RoomModerator>();
+
+		for (Map<String, Object> roomModeratorObj : list) {
+			Long roomModeratorsId = roomModeratorObj.containsKey("roomModeratorsId") ? Long.parseLong(roomModeratorObj.get("roomModeratorsId").toString()) : null;
+			Long userId = Long.parseLong(roomModeratorObj.get("userId").toString());
+			Boolean isSuperModerator = Boolean.parseBoolean(roomModeratorObj.get("isSuperModerator").toString());
+
+			RoomModerator rm = new RoomModerator();
+			rm.setRoomModeratorsId(roomModeratorsId);
+			rm.setRoomId(roomId);
+			rm.setUser(usersDao.get(userId));
+			rm.setIsSuperModerator(isSuperModerator);
+			
+			result.add(rm);
+		}
+		return result;
+    }
+
+	/**
+	 * adds a new Record to the table rooms
+	 * @param name
+	 * @param roomtypes_id
+	 * @param ispublic
+	 * @param hideActivitiesAndActions TODO
+	 * @param hideFilesExplorer TODO
+	 * @param hideActionsMenu TODO
+	 * @param hideScreenSharing TODO
+	 * @param hideWhiteboard TODO
+	 * @return id of the newly created room or NULL
+	 */
+	public Long addRoom(String name, long roomtypes_id,
+			String comment, Long numberOfPartizipants, boolean ispublic,
+			List<Integer> organisations, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			List<Map<String, Object>> roomModerators,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, String conferencePin,
+			Long ownerId, Boolean waitForRecording, boolean allowRecording,
+			Boolean hideTopBar, Boolean hideChat, Boolean hideActivitiesAndActions, Boolean hideFilesExplorer, 
+			Boolean hideActionsMenu, Boolean hideScreenSharing, Boolean hideWhiteboard,
+			Boolean showMicrophoneStatus, Boolean chatModerated, boolean chatOpened
+			, boolean filesOpened, boolean autoVideoSelect, boolean sipEnabled) {
+
+		try {
+			Room r = new Room();
+			r.setName(name);
+			r.setComment(comment);
+			r.setStarttime(new Date());
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setIspublic(ispublic);
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setAppointment(appointment);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+			r.setHideTopBar(hideTopBar);
+
+			r.setDeleted(false);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+
+			r.setOwnerId(ownerId);
+
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+			
+			r.setHideChat(hideChat);
+			r.setHideActivitiesAndActions(hideActivitiesAndActions);
+			r.setHideActionsMenu(hideActionsMenu);
+			r.setHideFilesExplorer(hideFilesExplorer);
+			r.setHideScreenSharing(hideScreenSharing);	
+			r.setHideWhiteboard(hideWhiteboard);
+			r.setShowMicrophoneStatus(showMicrophoneStatus);
+			r.setChatModerated(chatModerated);
+			r.setChatOpened(chatOpened);
+			r.setFilesOpened(filesOpened);
+			r.setAutoVideoSelect(autoVideoSelect);
+			r.setSipEnabled(sipEnabled);
+			r.setPin(conferencePin);
+			
+			r = roomDao.update(r, ownerId);
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, ownerId);
+			}
+
+			return r.getRooms_id();
+		} catch (Exception ex2) {
+			log.error("[addRoom] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * adds/check a new Record to the table rooms with external fields
+	 * 
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param organisations
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param roomModerators
+	 * @param externalRoomId
+	 * @param externalRoomType
+	 * @param allowUserQuestions
+	 * @param isAudioOnly
+	 * @param allowFontStyles
+	 * @param isClosed
+	 * @param redirectURL
+	 * @param waitForRecording
+	 * @param allowRecording
+	 * @param hideTopBar
+	 * @return id of (the newly created) room or NULL
+	 */
+	public Long addExternalRoom(String name, long roomtypes_id, String comment,
+			Long numberOfPartizipants, boolean ispublic, List<Integer> organisations,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, List<Map<String, Object>> roomModerators,
+			Long externalRoomId, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, Boolean waitForRecording,
+			boolean allowRecording, Boolean hideTopBar) {
+
+		log.debug("addExternalRoom");
+
+		try {
+			Room r = new Room();
+			r.setName(name);
+			r.setComment(comment);
+			r.setStarttime(new Date());
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setIspublic(ispublic);
+
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setAppointment(appointment);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+
+			r.setDeleted(false);
+
+			r.setExternalRoomId(externalRoomId);
+			r.setExternalRoomType(externalRoomType);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+
+			r.setHideTopBar(hideTopBar);
+
+			r = em.merge(r);
+
+			long returnId = r.getRooms_id();
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, null);
+			}
+
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addExternalRoom] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * adds a new record to the table rooms_organisation
+	 * 
+	 * @param rooms_id
+	 * @param organisation_id
+	 * @return the id of the newly created Rooms_Organisation or NULL
+	 */
+	public Long addRoomToOrganisation(long rooms_id,
+			long organisation_id) {
+		try {
+			RoomOrganisation rOrganisation = new RoomOrganisation();
+			rOrganisation.setRoom(roomDao.get(rooms_id));
+			log.debug("addRoomToOrganisation rooms '"
+					+ rOrganisation.getRoom().getName() + "'");
+			rOrganisation.setStarttime(new Date());
+			rOrganisation.setOrganisation(orgDao.get(organisation_id));
+			rOrganisation.setDeleted(false);
+
+			rOrganisation = em.merge(rOrganisation);
+			long returnId = rOrganisation.getRooms_organisation_id();
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addRoomToOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param rooms_organisation_id
+	 * @return
+	 */
+	public RoomOrganisation getRoomsOrganisationById(
+			long rooms_organisation_id) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<RoomOrganisation> cq = cb
+					.createQuery(RoomOrganisation.class);
+			Root<RoomOrganisation> c = cq.from(RoomOrganisation.class);
+			Predicate condition = cb.equal(c.get("rooms_organisation_id"),
+					rooms_organisation_id);
+			cq.where(condition);
+			TypedQuery<RoomOrganisation> q = em.createQuery(cq);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * get List of Rooms_Organisation by organisation and roomtype
+	 * 
+	 * @param user_level
+	 * @param organisation_id
+	 * @param roomtypes_id
+	 * @return
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByOrganisationIdAndRoomType(long organisation_id, long roomtypes_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationIdAndRoomType", RoomOrganisation.class);
+			q.setParameter("roomtypes_id", roomtypes_id);
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Gets all rooms by an organisation
+	 * 
+	 * @param organisation_id
+	 * @return list of Rooms_Organisation with Rooms as Sub-Objects or null
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByOrganisationId(long organisation_id) {
+		try {
+			TypedQuery<RoomOrganisation> query = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationId", RoomOrganisation.class);
+
+			query.setParameter("organisation_id", organisation_id);
+			query.setParameter("deleted", true);
+
+			List<RoomOrganisation> ll = query.getResultList();
+
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getPublicRoomsWithoutType] ", ex2);
+		}
+		return null;
+	}
+
+	public SearchResult<RoomOrganisation> getRoomsOrganisationsByOrganisationId(long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			SearchResult<RoomOrganisation> sResult = new SearchResult<RoomOrganisation>();
+			sResult.setObjectName(RoomOrganisation.class.getName());
+			sResult.setRecords(this.selectMaxFromRoomsByOrganisation(
+					organisation_id).longValue());
+			sResult.setResult(getRoomsOrganisationByOrganisationId(organisation_id, start, max, orderby, asc));
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public Integer selectMaxFromRoomsByOrganisation(long organisation_id) {
+		try {
+			// get all users
+			TypedQuery<RoomOrganisation> q = em.createNamedQuery("selectMaxFromRoomsByOrganisation", RoomOrganisation.class);
+
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			return ll.size();
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromRooms] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param organisation_id
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	private List<RoomOrganisation> getRoomsOrganisationByOrganisationId(
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			String hql = "select c from RoomOrganisation as c "
+					+ "where c.organisation.organisation_id = :organisation_id "
+					+ "AND c.deleted = false";
+			if (orderby.startsWith("c.")) {
+				hql += "ORDER BY " + orderby;
+			} else {
+				hql += "ORDER BY " + "c." + orderby;
+			}
+			if (asc) {
+				hql += " ASC";
+			} else {
+				hql += " DESC";
+			}
+
+			TypedQuery<RoomOrganisation> q = em.createQuery(hql, RoomOrganisation.class);
+
+			q.setParameter("organisation_id", organisation_id);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public RoomOrganisation getRoomsOrganisationByOrganisationIdAndRoomId(
+			long organisation_id, long rooms_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationIdAndRoomId", RoomOrganisation.class);
+
+			q.setParameter("rooms_id", rooms_id);
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomsOrganisationByOrganisationIdAndRoomId] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param organisation_id
+	 * @return
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByRoomsId(long rooms_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.createNamedQuery("getRoomsOrganisationByRoomsId", RoomOrganisation.class);
+			q.setParameter("rooms_id", rooms_id);
+			q.setParameter("deleted", true);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateRoomInternal(long rooms_id, long roomtypes_id,
+			String name, boolean ispublic, String comment,
+			Long numberOfPartizipants, List<Integer> organisations,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, List<Map<String, Object>> roomModerators,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, String conferencePin,
+			Long ownerId, Boolean waitForRecording, boolean allowRecording,
+			Boolean hideTopBar, Boolean hideChat, Boolean hideActivitiesAndActions, Boolean hideFilesExplorer, 
+			Boolean hideActionsMenu, Boolean hideScreenSharing, Boolean hideWhiteboard, 
+			Boolean showMicrophoneStatus, Boolean chatModerated, boolean chatOpened, boolean filesOpened
+			, boolean autoVideoSelect, boolean sipEnabled) {
+		try {
+			log.debug("*** updateRoom numberOfPartizipants: "
+					+ numberOfPartizipants);
+			Room r = roomDao.get(rooms_id);
+			r.setComment(comment);
+
+			r.setIspublic(ispublic);
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setName(name);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setUpdatetime(new Date());
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setAppointment(appointment);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+			r.setHideTopBar(hideTopBar);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+			r.setOwnerId(ownerId);
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+			
+			r.setHideChat(hideChat);
+			r.setHideActivitiesAndActions(hideActivitiesAndActions);
+			r.setHideActionsMenu(hideActionsMenu);
+			r.setHideFilesExplorer(hideFilesExplorer);
+			r.setHideScreenSharing(hideScreenSharing);
+			r.setHideWhiteboard(hideWhiteboard);
+			r.setShowMicrophoneStatus(showMicrophoneStatus);
+			r.setChatModerated(chatModerated);
+			r.setChatOpened(chatOpened);
+			r.setFilesOpened(filesOpened);
+			r.setAutoVideoSelect(autoVideoSelect);
+			r.setPin(conferencePin);
+			r.setSipEnabled(sipEnabled);
+			r = roomDao.update(r, ownerId);
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, null);
+			}
+
+			return r.getRooms_id();
+		} catch (Exception ex2) {
+			log.error("[updateRoom] ", ex2);
+		}
+		return null;
+	}
+
+	@SuppressWarnings("rawtypes")
+	private boolean checkRoomAlreadyInOrg(Long orgid, List organisations)
+			throws Exception {
+		for (Iterator it = organisations.iterator(); it.hasNext();) {
+			RoomOrganisation rOrganisation = (RoomOrganisation) it.next();
+			if (rOrganisation.getOrganisation().getOrganisation_id()
+					.equals(orgid))
+				return true;
+		}
+		return false;
+	}
+
+	private boolean checkRoomShouldByDeleted(long orgId, List<Integer> organisations) throws Exception {
+		for (Iterator<Integer> it = organisations.iterator(); it.hasNext();) {
+			Integer key = it.next();
+			Long storedOrgId = key.longValue();
+			if (storedOrgId.equals(orgId))
+				return true;
+		}
+		return false;
+	}
+
+	private Long updateRoomOrganisations(List<Integer> organisations, Room room) throws Exception {
+		List<RoomOrganisation> roomOrganisations = getOrganisationsByRoom(room.getRooms_id());
+
+		List<Long> roomsToAdd = new LinkedList<Long>();
+		List<Long> roomsToDel = new LinkedList<Long>();
+
+		for (Iterator<Integer> it = organisations.iterator(); it.hasNext();) {
+			Integer key = it.next();
+			Long orgIdToAdd = key.longValue();
+			if (!this.checkRoomAlreadyInOrg(orgIdToAdd, roomOrganisations))
+				roomsToAdd.add(orgIdToAdd);
+		}
+
+		for (Iterator<RoomOrganisation> it = roomOrganisations.iterator(); it.hasNext();) {
+			RoomOrganisation rOrganisation = it.next();
+			Long orgIdToDel = rOrganisation.getOrganisation()
+					.getOrganisation_id();
+			if (!this.checkRoomShouldByDeleted(orgIdToDel, organisations))
+				roomsToDel.add(orgIdToDel);
+		}
+
+		// log.error("updateRoomOrganisations roomsToAdd: "+roomsToAdd.size());
+		// log.error("updateRoomOrganisations roomsToDel: "+roomsToDel.size());
+
+		for (Iterator<Long> it = roomsToAdd.iterator(); it.hasNext();) {
+			Long orgIdToAdd = it.next();
+			addRoomToOrganisation(room.getRooms_id(), orgIdToAdd);
+		}
+		for (Iterator<Long> it = roomsToDel.iterator(); it.hasNext();) {
+			Long orgToDel = it.next();
+			deleteRoomFromOrganisationByRoomAndOrganisation(room.getRooms_id(), orgToDel);
+		}
+
+		return new Long(1);
+	}
+
+	/**
+	 * delete all Rooms_Organisations and Room by a given room_id
+	 * 
+	 * @param rooms_id
+	 */
+	public Long deleteRoomById(long rooms_id) {
+		try {
+			deleteAllRoomsOrganisationOfRoom(rooms_id);
+			roomDao.delete(roomDao.get(rooms_id), -1L);
+			return rooms_id;
+		} catch (Exception ex2) {
+			log.error("[deleteRoomById] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * delete all Rooms_Organisation by a rooms_id
+	 * 
+	 * @param rooms_id
+	 */
+	@SuppressWarnings("rawtypes")
+	public void deleteAllRoomsOrganisationOfRoom(long rooms_id) {
+		try {
+			List ll = this.getRoomsOrganisationByRoomsId(rooms_id);
+			for (Iterator it = ll.iterator(); it.hasNext();) {
+				RoomOrganisation rOrg = (RoomOrganisation) it.next();
+				this.deleteRoomsOrganisation(rOrg);
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteAllRoomsOrganisationOfRoom] ", ex2);
+		}
+	}
+
+	/**
+	 * Delete all room of a given Organisation
+	 * 
+	 * @param organisation_id
+	 */
+	public void deleteAllRoomsOrganisationOfOrganisation(long organisation_id) {
+		try {
+			for (RoomOrganisation rOrg : getRoomsOrganisationByOrganisationId(organisation_id)) {
+				this.deleteRoomsOrganisation(rOrg);
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteAllRoomsOfOrganisation] ", ex2);
+		}
+	}
+
+	/**
+	 * Delete a Rooms_Organisation by its id
+	 * 
+	 * @param rooms_organisation_id
+	 */
+	public Long deleteRoomsOrganisationByID(long rooms_organisation_id) {
+		try {
+			RoomOrganisation rOrg = this
+					.getRoomsOrganisationById(rooms_organisation_id);
+			return this.deleteRoomsOrganisation(rOrg);
+		} catch (Exception ex2) {
+			log.error("[deleteRoomsOrganisationByID] ", ex2);
+		}
+		return null;
+	}
+
+	private Long deleteRoomFromOrganisationByRoomAndOrganisation(long rooms_id,
+			long organisation_id) {
+		try {
+			RoomOrganisation rOrganisation = this
+					.getRoomsOrganisationByOrganisationIdAndRoomId(
+							organisation_id, rooms_id);
+			return this.deleteRoomsOrganisation(rOrganisation);
+		} catch (Exception ex2) {
+			log.error("[deleteRoomFromOrganisationByRoomAndOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * delete a Rooms_Organisation-Object
+	 * 
+	 * @param rOrg
+	 */
+	public Long deleteRoomsOrganisation(RoomOrganisation rOrg) {
+		try {
+			rOrg.setDeleted(true);
+			rOrg.setUpdatetime(new Date());
+			if (rOrg.getRooms_organisation_id() == null) {
+				em.persist(rOrg);
+			} else {
+				if (!em.contains(rOrg)) {
+					em.merge(rOrg);
+				}
+			}
+			return rOrg.getRooms_organisation_id();
+		} catch (Exception ex2) {
+			log.error("[deleteRoomsOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	public void closeRoom(Long rooms_id, Boolean status) {
+		try {
+
+			Room room = roomDao.get(rooms_id);
+
+			room.setIsClosed(status);
+
+			roomDao.update(room, -1L);
+
+		} catch (Exception e) {
+			log.error("Error updateRoomObject : ", e);
+		}
+	}
+
+	/**
+	 * Get a Rooms-Object or NULL
+	 * 
+	 * @param rooms_id
+	 * @return Rooms-Object or NULL
+	 */
+	public Room getRoomByOwnerAndTypeId(Long ownerId, Long roomtypesId, String roomName) {
+		try {
+
+			if (roomtypesId == null || roomtypesId == 0) {
+				return null;
+			}
+			log.debug("getRoomByOwnerAndTypeId : " + ownerId + " || " + roomtypesId);
+			Room room = null;
+			TypedQuery<Room> query = em.createNamedQuery("getRoomByOwnerAndTypeId", Room.class);
+			query.setParameter("ownerId", ownerId);
+			query.setParameter("roomtypesId", roomtypesId);
+			List<Room> ll = query.getResultList();
+			if (ll.size() > 0) {
+				room = ll.get(0);
+			}
+
+			if (room != null) {
+				return room;
+			} else {
+				log.debug("Could not find room " + ownerId + " || " + roomtypesId);
+				
+				Long rooms_id = addRoom(roomName, roomtypesId,
+						"My Rooms of ownerId " + ownerId,
+						(roomtypesId == 1) ? 25L : 150L, // numberOfPartizipants
+						false, // ispublic
+						null, // organisations
+						false, // appointment
+						false, // isDemoRoom
+						null, // demoTime
+						false, // isModeratedRoom
+						null, // roomModerators
+						true, // allowUserQuestions
+						false, // isAudioOnly
+						true, // allowFontStyle
+						false, // isClosed
+						"", // redirectURL
+						"", // conferencePin
+						ownerId, null,
+						true,  // allowRecording 
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing 
+						false, // hideWhiteboard
+						false, //showMicrophoneStatus
+						false, // chatModerated
+						false, //chatOpened
+						false, //filesOpened
+						false, //autoVideoSelect
+						false //sipEnabled
+						);
+
+				if (rooms_id != null) {
+					return roomDao.get(rooms_id);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomByOwnerAndTypeId] ", ex2);
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java b/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java
new file mode 100644
index 0000000..bf09ac0
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.FlvExplorerConverter;
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.documents.GeneratePDF;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FileProcessor {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(FileProcessor.class, OpenmeetingsVariables.webAppRootKey);
+
+	//Spring loaded Beans
+	@Autowired
+	private FlvExplorerConverter flvExplorerConverter;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private GenerateImage generateImage;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GeneratePDF generatePDF;
+
+	public ConverterProcessResultList processFile(Long userId, Long room_id, 
+			boolean isOwner, InputStream is, Long parentFolderId, String fileSystemName, 
+			Long externalFileId, String externalType) throws Exception {
+		
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+		
+		int dotidx = fileSystemName.lastIndexOf('.');
+
+        // Generate a random string to prevent any problems with
+        // foreign characters and duplicates
+        Date d = new Date();
+        String newFileSystemName = MD5.do_checksum("FILE_" + d.getTime());
+
+        String newFileExtDot = fileSystemName.substring(dotidx, fileSystemName.length()).toLowerCase();
+        String newFileExt = newFileExtDot.substring(1);
+        log.debug("newFileExt: " + newFileExt);
+        StoredFile storedFile = new StoredFile(newFileSystemName, newFileExt); 
+
+        // Check variable to see if this file is a presentation
+        // check if this is a a file that can be converted by
+        // openoffice-service
+        boolean canBeConverted = storedFile.isConvertable();
+        boolean isPdf = storedFile.isPdf();
+        boolean isImage = storedFile.isImage();
+        boolean isChart = storedFile.isChart();
+        boolean isAsIs = storedFile.isAsIs();
+        boolean isVideo = storedFile.isVideo();
+
+        log.debug("isAsIs: " + isAsIs);
+
+        // add outputfolders for profiles
+        // if it is a presenation it will be copied to another place
+        if (!(canBeConverted || isPdf || isImage || isVideo || isAsIs)) {
+        	returnError.addItem("wrongType", new ConverterProcessResult("The file type cannot be converted"));
+            return returnError;
+        }
+
+        File completeName = new File(
+        	isAsIs ? OmFileHelper.getUploadFilesDir() : OmFileHelper.getUploadTempFilesDir()
+        	, newFileSystemName + newFileExtDot);
+        log.debug("writing file to: " + completeName);
+        FileHelper.copy(is, completeName);
+        is.close();
+
+        Long ownerId = null;
+        if (parentFolderId == -2) {
+            parentFolderId = 0L;
+            ownerId = userId;
+        }
+        if (isOwner) {
+            ownerId = userId;
+        }
+
+        String fileHashName = newFileSystemName + newFileExtDot;
+        Boolean isPresentation = false;
+        if (canBeConverted || isPdf) {
+            // In case of a presentation the hash is a folder-name
+            fileHashName = newFileSystemName;
+            isPresentation = true;
+        }
+        if (isImage) {
+            fileHashName = newFileSystemName + ".jpg";
+        }
+        if (isVideo) {
+            fileHashName = newFileSystemName + ".flv";
+        }
+
+        FileExplorerItem fileExplorerItem = fileExplorerItemDao.getFileExplorerItemsById(parentFolderId);
+
+        if (fileExplorerItem != null) {
+            if (fileExplorerItem.getIsFolder() == null
+                    || !fileExplorerItem.getIsFolder()) {
+                parentFolderId = 0L;
+            }
+        }
+
+        Long fileExplorerItemId = fileExplorerItemDao.add(
+                fileSystemName, fileHashName, // The Hashname of the file
+                parentFolderId, ownerId, room_id, userId, false, // isFolder
+                isImage, isPresentation, "", false, isChart, 
+                externalFileId, externalType);
+        log.debug("fileExplorerItemId: " + fileExplorerItemId);
+        
+        
+        
+        log.debug("canBeConverted: " + canBeConverted);
+        if (canBeConverted) {
+            // convert to pdf, thumbs, swf and xml-description
+            returnError = generatePDF.convertPDF(newFileSystemName, "files", true, completeName);
+        } else if (isPdf) {
+            // convert to thumbs, swf and xml-description
+            returnError = generatePDF.convertPDF(newFileSystemName, "files", false, completeName);
+        } else if (isChart) {
+            log.debug("uploaded chart file");
+        } else if (isImage && !isAsIs) {
+            // convert it to JPG
+            log.debug("##### convert it to JPG: ");
+            returnError = generateImage.convertImage(newFileSystemName, newFileExtDot, "files",
+                    newFileSystemName, false);
+        } else if (isAsIs) {
+        	ConverterProcessResult processThumb = generateThumbs.generateThumb(thumbImagePrefix, completeName, 50);
+            returnError.addItem("processThumb", processThumb);
+        } else if (isVideo) {
+        	List<ConverterProcessResult> returnList = flvExplorerConverter.startConversion(fileExplorerItemId, completeName.getCanonicalPath());
+        	
+        	int i=0;
+        	for (ConverterProcessResult returnMap : returnList) {
+        		returnError.addItem("processFLV "+i, returnMap);
+        	}
+        	
+        }
+        
+        // has to happen at the end, otherwise it will be overwritten
+        //cause the variable is new initialized
+        returnError.setCompleteName(completeName.getName());
+        returnError.setFileExplorerItemId(fileExplorerItemId);
+        
+		return returnError;
+		
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/data/file/FileUtils.java b/src/main/java/org/apache/openmeetings/data/file/FileUtils.java
new file mode 100644
index 0000000..930299d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/file/FileUtils.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FileUtils {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			FileProcessor.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+
+	public long getSizeOfDirectoryAndSubs(FileExplorerItem fileExplorerItem) {
+		try {
+
+			long fileSize = 0;
+
+			File base = OmFileHelper.getUploadFilesDir();
+			if (fileExplorerItem.getIsImage()) {
+
+				File tFile = new File(base, fileExplorerItem.getFileHash());
+				if (tFile.exists()) {
+					fileSize += tFile.length();
+				}
+
+				File thumbFile = new File(base, thumbImagePrefix + fileExplorerItem.getFileHash());
+				if (thumbFile.exists()) {
+					fileSize += thumbFile.length();
+				}
+
+			}
+
+			if (fileExplorerItem.getIsPresentation()) {
+
+				File tFolder = new File(base, fileExplorerItem.getFileHash());
+
+				if (tFolder.exists()) {
+					fileSize += OmFileHelper.getSize(tFolder);
+				}
+
+			}
+
+			log.debug("calling [1] FileExplorerItemDaoImpl.updateFileOrFolder()");
+			fileExplorerItemDao.updateFileOrFolder(fileExplorerItem);
+
+			FileExplorerItem[] childElements = fileExplorerItemDao
+					.getFileExplorerItemsByParent(fileExplorerItem
+							.getFileExplorerItemId());
+
+			for (FileExplorerItem childExplorerItem : childElements) {
+
+				fileSize += this.getSizeOfDirectoryAndSubs(childExplorerItem);
+
+			}
+
+			return fileSize;
+
+		} catch (Exception err) {
+			log.error("[getSizeOfDirectoryAndSubs] ", err);
+		}
+		return 0;
+	}
+
+	public void setFileToOwnerOrRoomByParent(FileExplorerItem fileExplorerItem,
+			Long users_id, Long room_id) {
+		try {
+
+			fileExplorerItem.setOwnerId(users_id);
+			fileExplorerItem.setRoom_id(room_id);
+
+			log.debug("calling [2] FileExplorerItemDaoImpl.updateFileOrFolder()");
+			fileExplorerItemDao.updateFileOrFolder(fileExplorerItem);
+
+			FileExplorerItem[] childElements = fileExplorerItemDao
+					.getFileExplorerItemsByParent(fileExplorerItem
+							.getFileExplorerItemId());
+
+			for (FileExplorerItem childExplorerItem : childElements) {
+
+				this.setFileToOwnerOrRoomByParent(childExplorerItem, users_id,
+						room_id);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[setFileToOwnerOrRoomByParent] ", err);
+		}
+	}
+
+	public String formatDate(Date date) {
+		SimpleDateFormat formatter;
+		String pattern = "dd/MM/yy H:mm:ss";
+		Locale locale = new Locale("en", "US");
+		formatter = new SimpleDateFormat(pattern, locale);
+		return formatter.format(date);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java
new file mode 100644
index 0000000..c6bb890
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.converter.FlvInterviewConverter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+public class FlvInterviewConverterTask {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvInterviewConverterTask.class, webAppRootKey);
+
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private FlvInterviewConverter flvInterviewConverter;
+
+	public void startConversionThread(final Long flvRecordingId) {
+		try {
+			log.debug("[-1-]" + taskExecutor);
+
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					flvInterviewConverter.startConversion(flvRecordingId);
+				}
+			});
+		} catch (Exception err) {
+			log.error("[startConversionThread]", err);
+		}
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java
new file mode 100644
index 0000000..05b85bd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.converter.FlvRecorderConverter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+public class FlvRecorderConverterTask {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverterTask.class, webAppRootKey);
+
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private FlvRecorderConverter flvRecorderConverter;
+
+	public void startConversionThread(final Long flvRecordingId) {
+		try {
+			log.debug("[-1-]" + taskExecutor);
+
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					flvRecorderConverter.startConversion(flvRecordingId);
+				}
+			});
+		} catch (Exception err) {
+			log.error("[startConversionThread]", err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
new file mode 100644
index 0000000..3c738b8
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import org.apache.openmeetings.data.flvrecord.listener.async.BaseStreamWriter;
+import org.apache.openmeetings.data.flvrecord.listener.async.CachedEvent;
+import org.apache.openmeetings.data.flvrecord.listener.async.StreamAudioWriter;
+import org.apache.openmeetings.data.flvrecord.listener.async.StreamVideoWriter;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.stream.IBroadcastStream;
+import org.red5.server.api.stream.IStreamListener;
+import org.red5.server.api.stream.IStreamPacket;
+import org.red5.server.net.rtmp.event.VideoData;
+import org.slf4j.Logger;
+
+public class StreamListener implements IStreamListener {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamListener.class, webAppRootKey);
+
+	private final BaseStreamWriter streamWriter;
+
+	public StreamListener(boolean isAudio, String streamName, IScope scope, Long metaDataId,
+			boolean isScreenData, boolean isInterview, FlvRecordingMetaDataDao metaDataDao
+			, FlvRecordingMetaDeltaDao metaDeltaDao) {
+		streamWriter = isAudio
+			? new StreamAudioWriter(streamName, scope, metaDataId, isScreenData, isInterview, metaDataDao, metaDeltaDao)
+			: new StreamVideoWriter(streamName, scope, metaDataId, isScreenData, isInterview, metaDataDao);
+	}
+
+	public void packetReceived(IBroadcastStream broadcastStream, IStreamPacket streampacket) {
+		try {
+			CachedEvent cachedEvent = new CachedEvent();
+			cachedEvent.setData(streampacket.getData().duplicate());
+			cachedEvent.setDataType(streampacket.getDataType());
+			cachedEvent.setTimestamp(streampacket.getTimestamp());
+			cachedEvent.setCurrentTime(new Date());
+			if (streampacket instanceof VideoData) {
+				cachedEvent.setFrameType(((VideoData) streampacket).getFrameType());
+			}
+
+			if (log.isTraceEnabled()) {
+				log.trace("##REC:: Packet recieved. type: {} frame type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
+			}
+			streamWriter.append(cachedEvent);
+		} catch (Exception e) {
+			log.error("##REC:: [packetReceived]", e);
+		}
+	}
+
+	public void closeStream() {
+		streamWriter.stop();
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
new file mode 100644
index 0000000..1db384c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.io.IStreamableFile;
+import org.red5.io.ITagWriter;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IStreamableFileService;
+import org.red5.server.api.stream.IStreamableFileFactory;
+import org.red5.server.stream.StreamableFileFactory;
+import org.red5.server.util.ScopeUtils;
+import org.slf4j.Logger;
+
+public abstract class BaseStreamWriter implements Runnable {
+	private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+	private final static int MINUTE_MULTIPLIER = 60 * 1000;
+	public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;
+	protected int startTimeStamp = -1;
+	protected long initialDelta = 0;
+
+	// thread is running
+	private boolean running = false;
+	// thread is stopped
+	private boolean stopping = false;
+	// thread will be stopped as soon as the queue is empty
+	private boolean dostopping = false;
+
+	protected ITagWriter writer = null;
+
+	protected Long metaDataId = null;
+
+	protected Date startedSessionTimeDate = null;
+
+	protected File file;
+
+	protected IScope scope;
+
+	protected boolean isScreenData = false;
+
+	protected String streamName = "";
+	protected final FlvRecordingMetaDataDao metaDataDao;
+	private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<CachedEvent>();
+
+	public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, FlvRecordingMetaDataDao metaDataDao) {
+		startedSessionTimeDate = new Date();
+		this.isScreenData = isScreenData;
+		this.streamName = streamName;
+		this.metaDataId = metaDataId;
+		this.metaDataDao = metaDataDao;
+		this.scope = scope;
+		try {
+			init();
+		} catch (IOException ex) {
+			log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);
+		}
+		FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
+		metaData.setStreamStatus(Status.STARTED);
+		metaDataDao.update(metaData);
+		
+		open();
+	}
+
+	/**
+	 * Initialization
+	 * 
+	 * @throws IOException
+	 *             I/O exception
+	 */
+	private void init() throws IOException {
+		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + ".flv");
+
+		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
+				StreamableFileFactory.class);
+
+		if (!file.isFile()) {
+			// Maybe the (previously existing) file has been deleted
+			file.createNewFile();
+
+		} else if (!file.canWrite()) {
+			throw new IOException("The file is read-only");
+		}
+
+		IStreamableFileService service = factory.getService(file);
+		IStreamableFile flv = service.getStreamableFile(file);
+		writer = flv.getWriter();
+	}
+
+	private void open() {
+		running = true;
+		new Thread(this, "Recording " + file.getName()).start();
+	}
+
+	public void stop() {
+		dostopping = true;
+	}
+
+	public void run() {
+		log.debug("##REC:: stream writer started");
+		long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;
+		long counter = 0;
+		while (!stopping) {
+			try {
+				CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
+				if (item != null) {
+					log.trace("##REC:: got packet"); 
+					lastPackedRecieved = System.currentTimeMillis();
+					if (dostopping) {
+						log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);
+					}
+
+					packetReceived(item);
+				} else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+					log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER)); 
+					stopping = true;
+					closeStream();
+				}
+				if (++counter % 5000 == 0) {
+					log.debug("##REC:: Stream writer is still listening:: " + file.getName());;
+				}
+			} catch (InterruptedException e) {
+				log.error("##REC:: [run]", e);
+			}
+		}
+		log.debug("##REC:: stream writer stopped");
+	}
+
+	/**
+	 * Write the actual packet data to the disk and do calculate any needed additional information
+	 * 
+	 * @param streampacket
+	 */
+	public abstract void packetReceived(CachedEvent streampacket);
+
+	protected abstract void internalCloseStream();
+	/**
+	 * called when the stream is finished written on the disk
+	 */
+	public void closeStream() {
+		try {
+			writer.close();
+		} catch (Exception err) {
+			log.error("[closeStream, close writer]", err);
+		}
+		internalCloseStream();
+		// Write the complete Bit to the meta data, the converter task will wait for this bit!
+		try {
+			FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
+			log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);
+			metaData.setStreamStatus(Status.STOPPED);
+			metaDataDao.update(metaData);
+		} catch (Exception err) {
+			log.error("##REC:: [closeStream, complete Bit]", err);
+		}
+	}
+
+	public void append(CachedEvent streampacket) {
+		if (!running) {
+			throw new IllegalStateException("Append called before the Thread was started!");
+		}
+		try {
+			queue.put(streampacket);
+			log.trace("##REC:: Q put, successful: " + queue.size());
+		} catch (InterruptedException ignored) {
+			log.error("##REC:: [append]", ignored);
+		}
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java
new file mode 100644
index 0000000..6e160dd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener.async;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.api.stream.IStreamPacket;
+import org.red5.server.net.rtmp.event.VideoData.FrameType;
+
+public class CachedEvent implements IStreamPacket {
+	private byte dataType;
+	private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
+	private IoBuffer data;
+	private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
+	private FrameType frameType = FrameType.UNKNOWN;
+
+	public Date getCurrentTime() {
+		return currentTime;
+	}
+
+	public void setCurrentTime(Date currentTime) {
+		this.currentTime = currentTime;
+	}
+
+	public void setDataType(byte dataType) {
+		this.dataType = dataType;
+	}
+
+	public void setTimestamp(int timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	public void setData(IoBuffer data) {
+		this.data = data;
+	}
+
+	public byte getDataType() {
+		return dataType;
+	}
+
+	public int getTimestamp() {
+		return timestamp;
+	}
+
+	public IoBuffer getData() {
+		return data;
+	}
+
+	public FrameType getFrameType() {
+		return frameType;
+	}
+
+	public void setFrameType(FrameType frameType) {
+		this.frameType = frameType;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
new file mode 100644
index 0000000..cd2cbbf
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.io.IoConstants.TYPE_AUDIO;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamAudioWriter extends BaseStreamWriter {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);
+
+	private int duration = 0;
+
+	private Integer lastTimeStamp = -1;
+	private Date lastcurrentTime = null;
+
+	private int lastStreamPacketTimeStamp = -1;
+
+	private long byteCount = 0;
+
+	// Autowire is not possible
+	protected final FlvRecordingMetaDeltaDao metaDeltaDao;
+
+	private boolean isInterview = false;
+
+	public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+			boolean isInterview, FlvRecordingMetaDataDao metaDataDao, FlvRecordingMetaDeltaDao metaDeltaDao) {
+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+
+		this.metaDeltaDao = metaDeltaDao;
+		this.isInterview = isInterview;
+	}
+
+	@Override
+	public void packetReceived(CachedEvent streampacket) {
+		try {
+			// We only care about audio at this moment
+			if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
+				if (streampacket.getTimestamp() <= 0) {
+					log.warn("##REC:: Negative TimeStamp");
+					return;
+				}
+				// we should not skip audio data in case it is Audio only interview
+				if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+					//skip until keyframe
+					log.trace("##REC:: no KEYFRAME, skipping");
+					return;
+				}
+				IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+				if (data.limit() == 0) {
+					log.trace("##REC:: data.limit() == 0 ");
+					return;
+				}
+
+				byteCount += data.limit();
+
+				lastcurrentTime = streampacket.getCurrentTime();
+				int timeStamp = streampacket.getTimestamp();
+				Date virtualTime = streampacket.getCurrentTime();
+
+				if (startTimeStamp == -1) {
+					// Calculate the delta between the initial start and the first audio-packet data
+
+					initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+					FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
+
+					metaDelta.setDeltaTime(initialDelta);
+					metaDelta.setFlvRecordingMetaDataId(metaDataId);
+					metaDelta.setTimeStamp(0);
+					metaDelta.setDebugStatus("INIT AUDIO");
+					metaDelta.setStartPadding(true);
+					metaDelta.setEndPadding(false);
+					metaDelta.setDataLengthPacket(data.limit());
+					metaDelta.setReceivedAudioDataLength(byteCount);
+					metaDelta.setStartTime(startedSessionTimeDate);
+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+					Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+					metaDelta.setDuration(0);
+
+					Long missingTime = deltaTimeStamp - 0;
+
+					metaDelta.setMissingTime(missingTime);
+
+					metaDelta.setCurrentTime(virtualTime);
+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+					metaDelta.setStartTimeStamp(startTimeStamp);
+
+					metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
+
+					// That will be not bigger then long value
+					startTimeStamp = streampacket.getTimestamp();
+				
+					FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
+					metaData.setRecordStart(virtualTime);
+					metaDataDao.update(metaData);
+				}
+
+				lastStreamPacketTimeStamp = streampacket.getTimestamp();
+
+				timeStamp -= startTimeStamp;
+
+				// Offset at the beginning is calculated above
+				long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
+
+				Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
+
+				lastTimeStamp = timeStamp;
+
+				if (deltaTime > 75) {
+					FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
+
+					metaDelta.setDeltaTime(deltaTime);
+					metaDelta.setFlvRecordingMetaDataId(metaDataId);
+					metaDelta.setTimeStamp(timeStamp);
+					metaDelta.setDebugStatus("RUN AUDIO");
+					metaDelta.setStartPadding(false);
+					metaDelta.setLastTimeStamp(preLastTimeStamp);
+					metaDelta.setEndPadding(false);
+					metaDelta.setDataLengthPacket(data.limit());
+					metaDelta.setReceivedAudioDataLength(byteCount);
+					metaDelta.setStartTime(startedSessionTimeDate);
+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+					Date current_date = new Date();
+					Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
+
+					duration = Math.max(duration, timeStamp + writer.getOffset());
+					metaDelta.setDuration(duration);
+
+					Long missingTime = deltaTimeStamp - timeStamp;
+
+					metaDelta.setMissingTime(missingTime);
+
+					metaDelta.setCurrentTime(current_date);
+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+					metaDelta.setStartTimeStamp(startTimeStamp);
+
+					metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
+				}
+
+				log.trace("##REC:: timeStamp :: " + timeStamp);
+				ITag tag = new Tag();
+				tag.setDataType(streampacket.getDataType());
+
+				// log.debug("data.limit() :: "+data.limit());
+				tag.setBodySize(data.limit());
+				tag.setTimestamp(timeStamp);
+				tag.setBody(data);
+
+				writer.writeTag(tag);
+
+			}
+		} catch (Exception e) {
+			log.error("##REC:: [packetReceived]", e);
+		}
+	}
+
+	@Override
+	protected void internalCloseStream() {
+		try {
+			// We do not add any End Padding or count the gaps for the
+			// Screen Data, cause there is no!
+
+			Date virtualTime = lastcurrentTime;
+			log.debug("##REC:: virtualTime: " + virtualTime);
+			log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);
+
+			long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+			log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);
+			log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);
+			log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);
+
+			long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;
+
+			log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
+
+			FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
+
+			metaDelta.setDeltaTime(deltaTimePaddingEnd);
+			metaDelta.setFlvRecordingMetaDataId(metaDataId);
+			metaDelta.setTimeStamp(lastTimeStamp);
+			metaDelta.setDebugStatus("END AUDIO");
+			metaDelta.setStartPadding(false);
+			metaDelta.setEndPadding(true);
+			metaDelta.setDataLengthPacket(null);
+			metaDelta.setReceivedAudioDataLength(byteCount);
+			metaDelta.setStartTime(startedSessionTimeDate);
+			metaDelta.setCurrentTime(new Date());
+
+			metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
+		} catch (Exception err) {
+			log.error("##REC:: [internalCloseStream]", err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
new file mode 100644
index 0000000..5a40eea
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamVideoWriter extends BaseStreamWriter {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
+	private Date startedSessionScreenTimeDate = null;
+
+	public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+			boolean isInterview, FlvRecordingMetaDataDao metaDataDao) {
+
+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+	}
+
+	@Override
+	public void packetReceived(CachedEvent streampacket) {
+		try {
+			int timeStamp = streampacket.getTimestamp();
+			log.trace("incoming timeStamp :: " + timeStamp);
+			if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+				//skip until keyframe
+				log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());
+				return;
+			}
+			if (timeStamp <= 0) {
+				log.warn("Negative TimeStamp");
+				return;
+			}
+			IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+			if (data.limit() == 0) {
+				log.trace("Data.limit() == 0");
+				return;
+			}
+			Date virtualTime = streampacket.getCurrentTime();
+
+			if (startedSessionScreenTimeDate == null) {
+				startedSessionScreenTimeDate = virtualTime;
+
+				FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
+				metaData.setRecordStart(virtualTime);
+				metaDataDao.update(metaData);
+			}
+
+			if (startTimeStamp == -1) {
+				// That will be not bigger then long value
+				startTimeStamp = timeStamp;
+			}
+
+			timeStamp -= startTimeStamp;
+
+			log.trace("timeStamp :: " + timeStamp);
+			ITag tag = new Tag();
+			tag.setDataType(streampacket.getDataType());
+
+			tag.setBodySize(data.limit());
+			tag.setTimestamp(timeStamp);
+			tag.setBody(data);
+
+			writer.writeTag(tag);
+		} catch (Exception e) {
+			log.error("[packetReceived]", e);
+		}
+	}
+
+	@Override
+	protected void internalCloseStream() {
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java b/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java
new file mode 100644
index 0000000..909fb6f
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java
@@ -0,0 +1,525 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.record;
+
+import java.awt.AlphaComposite;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JTextArea;
+
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.geom.ArrowStyle;
+import org.apache.openmeetings.util.geom.GeomPoint;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class BatikMethods {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(BatikMethods.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public void paintTextByWidthHeight(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor) throws Exception {
+
+		//String default_export_font = Configurationmanagement.getInstance().getConfKey(3,"default_export_font").getConf_value();
+		
+		this.drawTextByJTextArea(g2d, x1, y1, width, height, text, "Verdana", style, size, fontColor);
+
+	}
+	
+	public void _paintTextByWidthHeight(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor) throws Exception {
+
+		String default_export_font = configurationDao.getConfValue("default_export_font", String.class, "");
+		
+		this.drawTextByString(g2d, x1, y1, width, height, text, default_export_font, style, size, fontColor);
+
+	}
+	
+	@SuppressWarnings("rawtypes")
+	public void drawPointsObject(Graphics2D g2d, List pointsList, Color lineColor, int size, 
+			double xObj, double yObj, float alpha) throws Exception {
+		
+		for (Iterator iter = pointsList.iterator();iter.hasNext();) {
+			List point = (List) iter.next();
+			
+//			log.debug("POINT FROM TO :" +
+//					Double.valueOf(point.get(1).toString()).doubleValue()+","+
+//					Double.valueOf(point.get(2).toString()).doubleValue()+","+ 
+//					Double.valueOf(point.get(3).toString()).doubleValue()+","+
+//					Double.valueOf(point.get(4).toString()).doubleValue());
+			
+			this.drawThickLine2DPaint(g2d, Double.valueOf(point.get(1).toString()).doubleValue(), 
+					Double.valueOf(point.get(2).toString()).doubleValue(), 
+					Double.valueOf(point.get(3).toString()).doubleValue(), 
+					Double.valueOf(point.get(4).toString()).doubleValue(),  
+					size, lineColor, xObj, yObj, alpha);
+		}
+		
+		
+	}
+	
+	public void drawLine(Graphics2D g2d, Double x1, Double y1, Double x2, Double y2, Color lineColor, int size, 
+			double xObj, double yObj, float alpha) throws Exception {
+		
+		this.drawThickLine2D(g2d, x1, y1, x2, y2,  
+				size, lineColor, xObj, yObj, alpha);
+		
+	}
+	
+	public void paintEllipse2D(Graphics2D g2d, double x, double y, double width, double height, 
+			Color linecoler, int thickness, Color fillColor, float alpha) throws Exception {
+		
+		g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		
+        //int x, int y, int width, int height
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(new Ellipse2D.Double(x,y,width,height));
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+            g2d.fill(new Ellipse2D.Double(x,y,width,height));
+        }
+        
+    }
+	
+	public void paintRect2D(Graphics2D g2d, double x, double y, double width, double height, 
+			Color linecoler, int thickness, Color fillColor, float alpha) throws Exception {
+		
+		g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		
+        //int x, int y, int width, int height
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(new Rectangle2D.Double(x,y,width,height));
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+            g2d.fill(new Rectangle2D.Double(x,y,width,height));
+        }
+        
+    }
+	
+	public void paintRect(Graphics2D g2d, int x, int y, int width, int height, 
+			Color linecoler, int thickness, Color fillColor) throws Exception {
+		
+		//int x, int y, int width, int height
+        //g2d.fill(new Rectangle(x,y,width,height));
+        
+        g2d.setStroke(new BasicStroke(thickness));
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.drawRect(x, y, width, height);
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+	        g2d.fillRect(x, y, width, height);
+        }
+        
+    }
+	
+	public void paintLine(Graphics2D g2d, int x1, int y1, int x2, int y2, Color col) throws Exception {
+		g2d.setPaint(col);
+		g2d.drawLine(x1, y1, x2, y2);
+	}
+	
+	public void drawThickLine2DPaint(Graphics2D g2d, double x1, double y1, double x2, double y2, 
+			int width, Color c, double xObj, double yObj, float alpha) throws Exception {
+		g2d.setPaint(c);
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		Line2D line = new Line2D.Double(x1, y1, x2, y2);
+	    g2d.draw(line);
+	}
+
+	
+	public void drawThickLine2D(Graphics2D g2d, double x1, double y1, double x2, double y2, 
+			int width, Color c, double xObj, double yObj, float alpha) throws Exception {
+		g2d.setPaint(c);
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		Line2D line = new Line2D.Double(x1+xObj, y1+yObj, x2+xObj, y2+yObj);
+	    g2d.draw(line);
+	}
+
+	public void drawThickLine(Graphics2D g2d, int x1, int y1, int x2, int y2, int width, Color c) throws Exception {
+		g2d.setPaint(c);
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+	    g2d.drawLine(x1, y1, x2, y2);
+	}	
+	
+	public void paintTextByWidthHeightAndDocument(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor, Document document) throws Exception {
+
+		// String default_export_font =
+		// Configurationmanagement.getInstance().getConfKey("default_export_font").getConf_value();
+		
+		this.drawText(g2d, x1, y1, width, height, text, "Verdana", style, size, fontColor, document);
+
+	}
+
+	public void drawText(SVGGraphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor,
+			Document document) throws Exception {
+		
+//		g2d.setClip(x, y, width, height);
+//		g2d.setColor(Color.black);
+//		g2d.drawString(text, x, y+20);
+		
+		String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+		// Get the root element (the 'svg' element).
+		Element svgRoot = document.getDocumentElement();
+
+		log.debug("svgNS DEBUG: "+svgNS);
+		
+		//Element textElement = g2d.getDOMFactory().createElementNS(svgNS,"text");
+		Element rectangle = document.createElementNS(svgNS, "rect");
+		rectangle.setAttributeNS(svgNS, "x", "10");
+		rectangle.setAttributeNS(svgNS, "y", "20");
+		rectangle.setAttributeNS(svgNS, "width", "100");
+		rectangle.setAttributeNS(svgNS, "height", "50");
+		rectangle.setAttributeNS(svgNS, "fill", "red");
+
+		// Attach the rectangle to the root 'svg' element.
+		svgRoot.appendChild(rectangle);
+
+
+	}
+	
+	public void drawTextByString(SVGGraphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor) throws Exception {
+		
+		//g2d.setClip(x, y, width, height);
+		g2d.setColor(Color.black);
+		g2d.drawString(text, x, y);
+		
+		
+	}
+
+	public void drawTextByJTextArea(Graphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor) throws Exception {
+		
+//		g2d.setClip(x, y, width, height);
+//		g2d.setColor(Color.black);
+//		g2d.drawString(text, x, y+20);
+		
+		//Font font = new Font("Verdana", Font.PLAIN, 11);
+		Font font = new Font(default_export_font, style, size);
+
+		String[] stringsText = text.split("\r");
+		//log.debug("TEXT: "+stringsText);
+		//log.debug("TEXT: "+stringsText.length);
+		
+		String newText = "";
+		
+		for (int i=0;i<stringsText.length;i++) {
+			newText += stringsText[i];
+			if (i+1<stringsText.length) {
+				newText += "\n";
+			}
+		}
+		
+		JTextArea n = new JTextArea( newText );
+		n.setFont(font);
+		n.setWrapStyleWord( true );
+		n.setLineWrap( true );
+		n.setForeground( fontColor );
+		
+		//log.debug("Text at: "+x+" "+y);
+			//int x, int y, int width, int height
+		n.setBounds( x, y , width, height );
+		n.setOpaque( false );
+		
+		//Text
+		SVGGraphics2D svgGenerator2 = (SVGGraphics2D) g2d.create(x, y, width, height);
+
+		//svgGenerator2.create(x, y, width, height);
+		//svgGenerator2.draw(.dra)
+		n.paint( svgGenerator2 );
+		
+	}
+	
+
+	public void drawArrow(SVGGraphics2D g2d,
+			GeomPoint start, GeomPoint end, float thickness, float alpha,
+			Color linecoler, Color fillColor) {
+		
+		if (start.equals(end)) return;
+		
+		
+//		(double edgeControlPosition, double edgeControlSize,
+//				double headLength, double headWidth, double shaftControlPosition,
+//				double shaftControlSize, float shaftPosition, double shaftThickness)
+		ArrowStyle arrowStyle = new ArrowStyle(0.5, 0.5, thickness*5, 
+				thickness*5, 0.5, 0.5, 0, thickness);
+		
+		GeomPoint fullVect = end.subtract(start);
+		double halfWidth = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+		
+		//Figure out the line start/end points
+		GeomPoint startNorm = new GeomPoint();
+		startNorm.setLocation(fullVect.getY(),-fullVect.getX());
+		startNorm.normalize(arrowStyle.shaftThickness/2);
+		GeomPoint start1 = start.add(startNorm);
+		GeomPoint start2 = start.subtract(startNorm);
+		GeomPoint end1 = end.add(startNorm);
+		GeomPoint end2 = end.subtract(startNorm);
+				
+		//log.debug("startNorm: "+startNorm.toString());
+        //log.debug("start1: "+start1.toString());
+        //log.debug("start2: "+start2.toString());
+        //log.debug("end1: "+end1.toString());
+        //log.debug("end2: "+end2.toString());
+		
+		//figure out where the arrow head starts
+		GeomPoint headPnt = fullVect.clone();
+		//log.debug("headPnt 1: "+headPnt.toString());
+		//log.debug("headPnt.length 1: "+headPnt.length());
+		//log.debug("arrowStyle.headLength 1: "+arrowStyle.headLength);
+		headPnt.normalize(headPnt.length()-arrowStyle.headLength);
+		//log.debug("headPnt 2: "+headPnt.toString());
+		headPnt = headPnt.add(start);
+		//log.debug("headPnt 3: "+headPnt.toString());
+		
+		//calculate the arrowhead corners
+		GeomPoint headPntNorm = startNorm.clone();
+		//log.debug("headPntNorm ^^: "+headPntNorm.toString());
+		//log.debug("halfWidth ^^: "+halfWidth);
+		headPntNorm.normalize(halfWidth);
+		//log.debug("headPntNorm: "+headPntNorm.toString());
+		GeomPoint edge1 = headPnt.add(headPntNorm);
+		GeomPoint edge2 = headPnt.subtract(headPntNorm);
+		
+		//log.debug("edge1: "+edge1.toString());
+        //log.debug("edge2: "+edge2.toString());
+		
+		//Figure out where the arrow connects the the shaft, then calc the intersections
+		GeomPoint shaftCenter = GeomPoint.interpolate(end,headPnt,arrowStyle.shaftPosition);
+		//log.debug("end"+end.toString());
+		//log.debug("headPnt: "+headPnt.toString());
+		//log.debug("arrowStyle.shaftPosition: "+arrowStyle.shaftPosition);
+		//log.debug("shaftCenter: "+shaftCenter);
+		//log.debug("edge1: "+edge1);
+		//shaftCenter.setLocation(185.857864376269, 185.857864376269);
+		GeomPoint inter1 = GeomPoint.getLineIntersection(start1,end1,shaftCenter,edge1);
+		GeomPoint inter2 = GeomPoint.getLineIntersection(start2,end2,shaftCenter,edge2);
+		
+		//log.debug("inter1: "+inter1.toString());
+        //log.debug("inter2: "+inter2.toString());
+		
+		//Figure out the control points
+		GeomPoint edgeCenter = GeomPoint.interpolate(end,headPnt,(float) arrowStyle.edgeControlPosition);
+		GeomPoint edgeNorm = startNorm.clone();
+		edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+		//log.debug("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+		//log.debug("edgeNorm: "+edgeNorm.toString());
+		GeomPoint edgeCntrl1 = edgeCenter.add(edgeNorm);
+		GeomPoint edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+		
+		//log.debug("edgeCntrl1: "+edgeCntrl1.toString());
+        //log.debug("edgeCntrl2: "+edgeCntrl2.toString());
+
+		g2d.setPaint(new Color(255,0,0));
+		
+//		graphics.moveTo(start1.x,start1.y);
+//		graphics.lineTo(inter1.x,inter1.y);
+//		graphics.lineTo(edge1.x,edge1.y);
+//		graphics.curveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+//		graphics.curveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+//		graphics.lineTo(inter2.x,inter2.y);
+//		graphics.lineTo(start2.x,start2.y);
+//		graphics.lineTo(start1.x,start1.y);
+		
+//		log.debug("moveTo"+start1.x+","+start1.y);
+//		log.debug("lineTo"+inter1.x+","+inter1.y);
+//		log.debug("lineTo"+edge1.x+","+edge1.y);
+//		log.debug("quadTo"+edgeCntrl1.x+","+edgeCntrl1.y+","+end.x+","+end.y);
+//		log.debug("quadTo"+edgeCntrl2.x+","+edgeCntrl2.y+","+edge2.x+","+edge2.y);
+//		log.debug("lineTo"+inter2.x+","+inter2.y);
+//		log.debug("lineTo"+start2.x+","+start2.y);
+//		log.debug("lineTo"+start1.x+","+start1.y);
+		
+		GeneralPath graphics = new GeneralPath();
+		graphics.moveTo(start1.x,start1.y);
+		graphics.lineTo(inter1.x,inter1.y);
+		graphics.lineTo(edge1.x,edge1.y);
+		graphics.quadTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+		graphics.quadTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+		graphics.lineTo(inter2.x,inter2.y);
+		graphics.lineTo(start2.x,start2.y);
+		graphics.lineTo(start1.x,start1.y);
+		graphics.closePath();
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		
+		if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(graphics);
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+	        g2d.fill(graphics);
+        }
+        
+	}
+	
+
+	
+	
+	
+	
+	
+	public String workAroundPixelErrorInSVG(String xmlDef) throws Exception {
+		String resultingString = "";
+        
+        boolean byPassedFirst = false;
+        
+        while (xmlDef.indexOf("font-size:") != -1) {
+        	
+        	log.debug("xmlDef "+xmlDef);
+        	int i = xmlDef.indexOf("font-size:");
+        	
+        	log.debug("Found i "+i);
+        	if (byPassedFirst) {
+        		log.debug("byPassedFirst DO PROCESS ");
+	        	String start = xmlDef.substring(0, i+10);
+	        	xmlDef = xmlDef.substring(i+10, xmlDef.length());
+	        	log.debug("byPassedFirst FIRST PART Process "+start);
+	        	log.debug("byPassedFirst END PART Process "+xmlDef);
+	        	
+	        	int firstSemicolon = xmlDef.indexOf(";");
+	        	log.debug("firstSemicolon "+firstSemicolon);
+	        	String fontSize = xmlDef.substring(0, firstSemicolon);
+	        	log.debug("fontSize "+fontSize);
+	        	
+	        	xmlDef = xmlDef.substring(firstSemicolon, xmlDef.length());
+	        	
+	        	resultingString += start + fontSize + "px";
+        	} else {
+        		log.debug("byPassedFirst DO NOT PROCESS ");
+        		String start = xmlDef.substring(0, i+10);
+        		log.debug("byPassedFirst FIRST PART "+start);
+        		xmlDef = xmlDef.substring(i+10, xmlDef.length());
+        		log.debug("byPassedFirst END PART "+xmlDef);
+        		resultingString += start;
+        		byPassedFirst = true;
+        	}
+        }
+        
+        resultingString += xmlDef;
+        
+        log.debug("###################### ");
+        log.debug("resultingString "+resultingString);
+        
+        return resultingString;
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java b/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java
new file mode 100644
index 0000000..080ee8e
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java
@@ -0,0 +1,305 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.record;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Image;
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.geom.GeomPoint;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class WhiteboardMapToSVG extends BatikMethods {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(WhiteboardMapToSVG.class, OpenmeetingsVariables.webAppRootKey);
+
+	private WhiteboardMapToSVG() {
+	}
+
+	private static WhiteboardMapToSVG instance = null;
+
+	public static synchronized WhiteboardMapToSVG getInstance() {
+		if (instance == null) {
+			instance = new WhiteboardMapToSVG();
+		}
+
+		return instance;
+	}
+	
+	@SuppressWarnings("rawtypes")
+	public SVGGraphics2D convertMapToSVG(SVGGraphics2D svgGenerator, List whiteBoardMap) throws Exception {
+		
+		//log.debug("convertMapToSVG: "+whiteBoardMap.size());
+		
+        for (Iterator iter = whiteBoardMap.iterator();iter.hasNext();) {
+        	
+        	List graphObject = (List) iter.next();
+        	
+        	String graphType = graphObject.get(0).toString();
+        	
+        	//log.debug("graphType: "+graphType);
+        	
+        	if (graphType.equals("paint")) {
+        		
+        		List pointsList = (List) graphObject.get(1);
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer col = Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Float alpha = Float.valueOf(graphObject.get(5).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		
+        		//log.debug("x,y,width,height: "+x+","+y+","+width+","+height);
+        		
+        		//Draw a Painting
+    	        SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+    	        //SVGGraphics2D svgGenerator2 = new SVGGraphics2D(document);
+    	         
+    	        log.debug("pointsList: "+pointsList);
+    	        this.drawPointsObject(svgGenerator_temp, pointsList, new Color(col), lineWidth, x, y, alpha);
+    	        
+        	} else if (graphType.equals("rectangle")) {
+        		
+        		/*actionObject[0] = 'rectangle';
+		        actionObject[1] = stroke;
+		        actionObject[2] = line;
+		        actionObject[3] = fill;
+		        actionObject[4] = strokeDis;
+		        actionObject[5] = fillDis;
+		        actionObject[6] = this.currentrectangleOpacity;*/
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        	
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintRect2D(svgGenerator_temp, x, y, width, height, strokeColor, lineWidth, fillColor, alpha);
+        		
+        	} else if (graphType.equals("ellipse")) {
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        	
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintEllipse2D(svgGenerator_temp, x, y, width, height, strokeColor, lineWidth, fillColor, alpha);
+        		
+        	} else if (graphType.equals("letter")) {
+        		
+        		String text = graphObject.get(1).toString();
+        		Color fontColor = new Color (Integer.valueOf(graphObject.get(2).toString()).intValue());
+        		Integer fontSize = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		
+        		String fontStyle = graphObject.get(4).toString();
+        		Integer style = null;
+        		if (fontStyle.equals("plain")) {
+        			style = Font.PLAIN;
+        		} else if (fontStyle.equals("bold")) {
+        			style = Font.BOLD;
+        		} else if (fontStyle.equals("italic")) {
+        			style = Font.ITALIC;
+        		} else if (fontStyle.equals("bolditalic")) {
+        			style = Font.ITALIC+Font.BOLD;
+        		}
+        		
+        		log.debug("fontStyle,style "+style+" fs: "+fontStyle);
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        		
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintTextByWidthHeight(svgGenerator_temp, (int) Math.round(x), (int) Math.round(y), (int) Math.round(width), 
+        					(int) Math.round(height), text, style, fontSize, fontColor);
+        		
+        	} else if (graphType.equals("drawarrow")) {
+        		
+        		Integer thickness = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		//Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		//Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        		
+        		Double x1 = Double.valueOf(graphObject.get(7).toString()).doubleValue();
+        		Double y1 = Double.valueOf(graphObject.get(8).toString()).doubleValue();
+        		Double x2 = Double.valueOf(graphObject.get(9).toString()).doubleValue();
+        		Double y2 = Double.valueOf(graphObject.get(10).toString()).doubleValue();
+        		
+        		GeomPoint start = new GeomPoint();
+    	        start.setLocation(x+x1,y+y1);
+    	        GeomPoint end = new GeomPoint();
+    	        end.setLocation(x+x2,y+y2);
+    	        
+    	        SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+    	        this.drawArrow(svgGenerator_temp, start, end, thickness, alpha, strokeColor,fillColor);
+        	} else if (graphType.equals("image")) {
+        		
+        		//log.debug("graphObject image "+graphObject);
+        		//log.debug("",graphObject);
+        		
+        		String room = graphObject.get(6).toString();
+        		String parentPath = graphObject.get(5).toString();
+        		String fileItemName = graphObject.get(3).toString();
+        		
+        		File imageFile = new File(OmFileHelper.getUploadDir(), room);
+        		
+        		if (parentPath.length() > 1) {
+        			imageFile = new File(imageFile, parentPath);
+        		}
+        		
+        		//log.debug("fileItemName: "+fileItemName);
+        		
+        		File myFile = new File(imageFile, fileItemName);
+        		
+        		if (myFile.exists() && myFile.canRead()) {
+        			
+        			Image myImage = ImageIO.read(myFile);
+        			
+        			int x = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue());
+        			int y = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue());
+        			int width = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue());
+        			int height = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue());
+	        		
+	        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+	        		svgGenerator_temp.drawImage(myImage, x, y, width, height, null);
+        			
+        		} else {
+        			log.error("tried to inculde a non existing File into SVG/Image Export Path: " + myFile);
+        		}
+        		
+        	} else if(graphType.equals("line") || graphType.equals("uline")) {
+        		
+//        		actionObject[0] = 'line';
+//                actionObject[1] = stroke;
+//                actionObject[2] = line;
+//                actionObject[3] = opacity;
+//                actionObject[4] = x1  
+//                actionObject[5] = y1;  
+//                actionObject[6] = x2;    
+//                actionObject[7] = y2;    
+//                actionObject[8] = this.counter; 
+//                actionObject[9] = x;
+//                actionObject[10] = y;
+//                actionObject[11] = width;
+//                actionObject[12] = height;  
+//                actionObject[13] = newName;
+        		
+    			Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Color strokeColor = new Color(stroke);
+        		
+        		Float alpha = Float.valueOf(graphObject.get(3).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		//Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		//Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+
+        		Double x1 = Double.valueOf(graphObject.get(4).toString()).doubleValue();
+        		Double y1 = Double.valueOf(graphObject.get(5).toString()).doubleValue();
+        		Double x2 = Double.valueOf(graphObject.get(6).toString()).doubleValue();
+        		Double y2 = Double.valueOf(graphObject.get(7).toString()).doubleValue();
+        		
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.drawLine(svgGenerator_temp, x1, y1, x2, y2, strokeColor, lineWidth, x, y, alpha);
+        		
+        	} else {
+        		log.error("tried to include a non supported Graph-Object graphType: "+graphType);
+        	}
+        	
+        }
+        
+        return svgGenerator;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/user/EmailManager.java b/src/main/java/org/apache/openmeetings/data/user/EmailManager.java
new file mode 100644
index 0000000..af1ba85
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/user/EmailManager.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.FeedbackTemplate;
+import org.apache.openmeetings.web.mail.template.RegisterUserTemplate;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author swagner
+ *
+ */
+public class EmailManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(EmailManager.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private MailHandler mailHandler;
+
+	/**
+	 * sends a mail adress to the user with his account data
+	 * 
+	 * @param username
+	 * @param userpass
+	 * @param email
+	 * @return
+	 * @throws Exception
+	 */
+	public String sendMail(String username, String userpass, String email, String link, Boolean sendEmailWithVerficationCode, Long langId) {
+		log.debug("sendMail:: username = {}, email = {}", username, email);
+		Integer sendEmailAtRegister = configurationDao.getConfValue("sendEmailAtRegister", Integer.class, "0");
+
+		if (sendEmailAtRegister == 1) {
+			RegisterUserTemplate.ensureApplication(langId != null ? langId :
+					configurationDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1"));
+			mailHandler.send(email, Application.getString(512)  
+				, RegisterUserTemplate.getEmail(username, userpass, email, sendEmailWithVerficationCode ? link : null));
+		}
+		return "success";
+	}
+
+	//FIXME, seems to be not used
+	public void sendFeedback(String username, String email, String message) {
+		mailHandler.send("user@openmeetings.apache.org", Application.getString(499), FeedbackTemplate.getEmail(username, email, message));
+	}
+	
+	public String addEmailCon(String EMail, int CONTACT_ID) {
+		String succ = "invalid email";
+		return succ;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/user/UserManager.java b/src/main/java/org/apache/openmeetings/data/user/UserManager.java
new file mode 100644
index 0000000..85bf72b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/user/UserManager.java
@@ -0,0 +1,607 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.entity.user.Userdata;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class UserManager implements IUserManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserManager.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private EmailManager emailManagement;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public SearchResult<User> getAllUserByRange(String search, int start, int max,
+			String orderby, boolean asc) {
+		try {
+			SearchResult<User> sresult = new SearchResult<User>();
+			sresult.setObjectName(User.class.getName());
+			sresult.setRecords(userDao.count(search));
+
+			String sort = null;
+			if (orderby != null && orderby.length() > 0) {
+				sort = orderby;
+			}
+			if (asc) {
+				sort += " ASC ";
+			} else {
+				sort += " DESC ";
+			}
+			String hql = DaoHelper.getSearchQuery("User", "u", search, true, false, sort, UserDao.searchFields);
+
+			log.debug("Show HQL: " + hql);
+
+			TypedQuery<User> query = em.createQuery(hql, User.class);
+			// query.setParameter("macomUserId", userId);
+
+			// query
+			// if (asc) ((Criteria) query).addOrder(Order.asc(orderby));
+			// else ((Criteria) query).addOrder(Order.desc(orderby));
+			query.setFirstResult(start);
+			query.setMaxResults(max);
+			List<User> ll = query.getResultList();
+
+			sresult.setResult(ll);
+
+			return sresult;
+
+		} catch (Exception ex2) {
+			log.error("[getAllUserByRange] ", ex2);
+		}
+		return null;
+	}
+
+	public User loginUserByRemoteHash(String SID, String remoteHash) {
+		try {
+
+			Sessiondata sessionData = sessiondataDao
+					.getSessionByHash(remoteHash);
+
+			if (sessionData != null) {
+
+				User u = userDao.get(sessionData.getUser_id());
+
+				sessiondataDao.updateUserWithoutSession(SID, u.getUser_id());
+
+				return u;
+			}
+
+		} catch (Exception ex2) {
+			log.error("[loginUserByRemoteHash]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long logout(String SID, long USER_ID) {
+		sessiondataDao.updateUser(SID, 0, false, null);
+		return -12L;
+	}
+
+	public List<Userdata> getUserdataDashBoard(Long user_id) {
+		if (user_id != null && user_id.longValue() > 0) {
+			try {
+				TypedQuery<Userdata> query = em.createQuery("select c from Userdata as c where c.user_id = :user_id AND c.deleted = false", Userdata.class);
+				query.setParameter("user_id", user_id);
+				List<Userdata> ll = query.getResultList();
+				return ll;
+			} catch (Exception ex2) {
+				log.error("getUserdataDashBoard", ex2);
+			}
+		}
+		return null;
+	}
+
+	public Userdata getUserdataByKey(Long user_id, String DATA_KEY) {
+		Userdata userdata = new Userdata();
+		if (user_id != null && user_id.longValue() > 0) {
+			try {
+				TypedQuery<Userdata> query = em.createQuery("select c from Userdata as c where c.user_id = :user_id AND c.data_key = :data_key AND c.deleted = false", Userdata.class);
+				query.setParameter("user_id", user_id);
+				query.setParameter("data_key", DATA_KEY);
+				for (Iterator<Userdata> it2 = query.getResultList().iterator(); it2.hasNext();) {
+					userdata = it2.next();
+				}
+			} catch (Exception ex2) {
+				log.error("getUserdataByKey", ex2);
+			}
+		} else {
+			userdata.setComment("Error: No USER_ID given");
+		}
+		return userdata;
+	}
+
+	public String updateUserdata(int DATA_ID, long USER_ID, String DATA_KEY,
+			String DATA, String Comment) {
+		String res = "Fehler beim Update";
+		try {
+			String hqlUpdate = "update userdata set DATA_KEY= :DATA_KEY, USER_ID = :USER_ID, DATA = :DATA, updatetime = :updatetime, comment = :Comment where DATA_ID= :DATA_ID";
+			int updatedEntities = em.createQuery(hqlUpdate)
+					.setParameter("DATA_KEY", DATA_KEY)
+					.setParameter("USER_ID", USER_ID)
+					.setParameter("DATA", DATA)
+					.setParameter("updatetime", -1L)
+					.setParameter("Comment", Comment)
+					.setParameter("DATA_ID", DATA_ID).executeUpdate();
+			res = "Success" + updatedEntities;
+		} catch (Exception ex2) {
+			log.error("updateUserdata", ex2);
+		}
+		return res;
+	}
+
+	public String updateUserdataByKey(Long USER_ID, String DATA_KEY,
+			String DATA, String Comment) {
+		String res = "Fehler beim Update";
+		try {
+			String hqlUpdate = "UPDATE Userdata set data = :data, updatetime = :updatetime, "
+					+ "comment = :comment where user_id= :user_id AND data_key = :data_key";
+			int updatedEntities = em.createQuery(hqlUpdate)
+					.setParameter("data", DATA)
+					.setParameter("updatetime", -1L)
+					.setParameter("comment", Comment)
+					.setParameter("user_id", USER_ID)
+					.setParameter("data_key", DATA_KEY).executeUpdate();
+			res = "Success" + updatedEntities;
+		} catch (Exception ex2) {
+			log.error("updateUserdataByKey", ex2);
+		}
+		return res;
+	}
+
+	public String addUserdata(long USER_ID, String DATA_KEY, String DATA,
+			String Comment) {
+		String ret = "Fehler beim speichern der Userdata";
+		Userdata userdata = new Userdata();
+		userdata.setData_key(DATA_KEY);
+		userdata.setData(DATA);
+		userdata.setStarttime(new Date());
+		userdata.setUpdatetime(null);
+		userdata.setComment(Comment);
+		userdata.setUser_id(USER_ID);
+		userdata.setDeleted(false);
+		try {
+			em.merge(userdata);
+			ret = "success";
+		} catch (Exception ex2) {
+			log.error("addUserdata", ex2);
+		}
+		return ret;
+	}
+
+	/**
+	 * Method to register a new User, User will automatically be added to the
+	 * default user_level(1) new users will be automatically added to the
+	 * Organisation with the id specified in the configuration value
+	 * default_group_id
+	 * 
+	 * @param user_level
+	 * @param availible
+	 * @param status
+	 * @param login
+	 * @param Userpass
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param age
+	 * @param street
+	 * @param additionalname
+	 * @param fax
+	 * @param zip
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @return
+	 */
+	public Long registerUser(String login, String Userpass, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, String phone, boolean sendSMS, boolean generateSipUserData, String jNameTimeZone) {
+		
+		String baseURL = cfgDao.getBaseUrl();
+		boolean sendConfirmation = baseURL != null
+				&& !baseURL.isEmpty()
+				&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+		
+		return registerUser(login, Userpass, lastname, firstname, email, age,
+				street, additionalname, fax, zip, states_id, town, language_id,
+				phone, sendSMS, generateSipUserData, jNameTimeZone, sendConfirmation);
+	}
+
+	public Long registerUserNoEmail(String login, String Userpass,
+			String lastname, String firstname, String email, Date age,
+			String street, String additionalname, String fax, String zip,
+			long states_id, String town, long language_id, String phone, boolean sendSMS, 
+			boolean generateSipUserData, String jNameTimeZone) {
+		
+		return registerUser(login, Userpass, lastname, firstname, email, age,
+				street, additionalname, fax, zip, states_id, town, language_id,
+				phone, sendSMS, generateSipUserData, jNameTimeZone, false);
+	}
+
+	private Long registerUser(String login, String Userpass, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, String phone, boolean sendSMS,
+			boolean generateSipUserData, String jNameTimeZone, Boolean sendConfirmation) {
+		try {
+			// Checks if FrontEndUsers can register
+			if ("1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0"))) {
+				
+				// TODO: Read and generate SIP-Data via RPC-Interface Issue 1098
+
+				Long user_id = registerUserInit(UserDao.getDefaultRights(), login,
+						Userpass, lastname, firstname, email, age, street,
+						additionalname, fax, zip, states_id, town, language_id,
+						true, Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)), phone,
+						sendSMS, sendConfirmation, timezoneUtil.getTimeZone(jNameTimeZone), false, "", "", false, true, null);
+
+				if (user_id > 0 && sendConfirmation) {
+					return -40L;
+				}
+
+				return user_id;
+			}
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+		return null;
+	}
+
+	/**
+	 * @param user_level
+	 * @param availible
+	 * @param status
+	 * @param login
+	 * @param password
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param age
+	 * @param street
+	 * @param additionalname
+	 * @param fax
+	 * @param zip
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @param sendWelcomeMessage
+	 * @param organisations
+	 * @param phone
+	 * @param sendSMS
+	 * @param sendConfirmation
+	 * @param timezone
+	 * @param forceTimeZoneCheck
+	 * @param userOffers
+	 * @param userSearchs
+	 * @param showContactData
+	 * @param showContactDataToContacts
+	 * @return new users_id OR null if an exception, -1 if an error, -4 if mail
+	 *         already taken, -5 if username already taken, -3 if login or pass
+	 *         or mail is empty
+	 * @throws Exception
+	 */
+	public Long registerUserInit(Set<Right> rights, String login, String password, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, boolean sendWelcomeMessage,
+			List<Long> organisations, String phone, boolean sendSMS, Boolean sendConfirmation,
+			TimeZone timezone, Boolean forceTimeZoneCheck,
+			String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String activatedHash) throws Exception {
+		// TODO: make phone number persistent
+		// Check for required data
+		if (login.length() >= getMinLoginLength(cfgDao)) {
+			// Check for duplicates
+			boolean checkName = userDao.checkLogin(login, User.Type.user, null, null);
+			boolean checkEmail = Strings.isEmpty(email) || userDao.checkEmail(email, User.Type.user, null, null);
+			if (checkName && checkEmail) {
+
+				String link = cfgDao.getBaseUrl();
+				String hash = activatedHash;
+				if (hash == null){
+					hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(login
+							+ CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+				}
+				link += "activate?u=" + hash;
+
+				if (sendWelcomeMessage && email.length() != 0) {
+					String sendMail = emailManagement.sendMail(login, password, email, link, sendConfirmation, language_id);
+					if (!sendMail.equals("success")) {
+						return -19L;
+					}
+				}
+				Address adr =  userDao.getAddress(street, zip, town, states_id, additionalname, fax, phone, email);
+
+				// If this user needs first to click his E-Mail verification
+				// code then set the status to 0
+				if (sendConfirmation && rights.contains(Right.Login)) {
+					rights.remove(Right.Login);
+				}
+
+				List<Organisation_Users> orgList = new ArrayList<Organisation_Users>();
+				for (Long id : organisations) {
+					orgList.add(new Organisation_Users(orgDao.get(id)));
+				}
+				User u = userDao.addUser(rights, firstname, login, lastname, language_id,
+						password, adr, sendSMS, age, hash, timezone,
+						forceTimeZoneCheck, userOffers, userSearchs, showContactData,
+						showContactDataToContacts, null, null, orgList, null);
+				if (u == null) {
+					return -111L;
+				}
+				log.debug("Added user-Id " + u.getUser_id());
+
+				/*
+				 * Long adress_emails_id =
+				 * emailManagement.registerEmail(email, address_id,""); if
+				 * (adress_emails_id==null) { return new Long(-112); }
+				 */
+
+				if (adr.getAdresses_id() > 0 && u.getUser_id() > 0) {
+					return u.getUser_id();
+				} else {
+					return -16L;
+				}
+			} else {
+				if (!checkName) {
+					return -15L;
+				} else if (!checkEmail) {
+					return -17L;
+				}
+			}
+		}
+		return -1L;
+	}
+
+	/**
+	 * @param admin
+	 * @param room_id
+	 * @return
+	 */
+	public Boolean kickUserByStreamId(String SID, Long room_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// admins only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				sessiondataDao.clearSessionByRoomId(room_id);
+
+				for (Client rcl : sessionManager.getClientListByRoom(room_id)) {
+					if (rcl == null) {
+						return true;
+					}
+					String scopeName = "hibernate";
+					if (rcl.getRoom_id() != null) {
+						scopeName = rcl.getRoom_id().toString();
+					}
+					IScope currentScope = scopeApplicationAdapter
+							.getRoomScope(scopeName);
+					scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+					HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+					messageObj.put(0, "kick");
+					scopeApplicationAdapter.sendMessageById(messageObj,
+							rcl.getStreamid(), currentScope);
+
+				}
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return null;
+	}
+
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// admins only
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Client rcl = sessionManager
+						.getClientByPublicSID(publicSID, false, null);
+
+				if (rcl == null) {
+					return true;
+				}
+
+				String scopeName = "hibernate";
+				if (rcl.getRoom_id() != null) {
+					scopeName = rcl.getRoom_id().toString();
+				}
+				IScope currentScope = scopeApplicationAdapter
+						.getRoomScope(scopeName);
+
+				HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+				messageObj.put(0, "kick");
+				scopeApplicationAdapter.sendMessageById(messageObj,
+						rcl.getStreamid(), currentScope);
+
+				scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return null;
+	}
+	
+	public Long getLanguage(Locale loc) {
+		if (loc != null) {
+			for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+				if (loc.equals(e.getValue())) {
+					return e.getKey();
+				}
+			}
+		}
+		return cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+	}
+
+	public State getCountry(Locale loc) {
+		List<State> states = stateDao.getStates();
+		if (loc != null) {
+			String code = loc.getISO3Country().toUpperCase();
+			for (State s : states) {
+				if (s.getShortName().toUpperCase().equals(code)) {
+					return s;
+				}
+			}
+		}
+		return states.get(0);
+	}
+
+	public User loginOAuth(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException {
+		String login = params.get("login");
+		String email = params.get("email");
+		String lastname = params.get("lastname");
+		String firstname = params.get("firstname");
+		if (firstname == null) {
+			firstname = "";
+		}
+		if (lastname == null) {
+			lastname = "";
+		}
+		if (!userDao.validLogin(login)) {
+			log.error("Invalid login, please check parameters");
+			return null; //TODO FIXME need to be checked
+		}
+		User u = userDao.getByLogin(login, Type.oauth, serverId);
+		if (!userDao.checkEmail(email, Type.oauth, serverId, u == null ? null : u.getUser_id())) {
+			log.error("Another user with the same email exists");
+			return null; //TODO FIXME need to be checked
+		}
+		// generate random password
+		byte[] rawPass = new byte[25];
+		Random rnd = new Random();
+		for (int i = 0; i < rawPass.length; ++i) {
+			rawPass[i] = (byte) ('!' + rnd.nextInt(93));
+		}
+		String pass = new String(rawPass, "UTF-8");
+		// check if the user already exists and register new one if it's needed
+		if (u == null) {
+			u = userDao.getNewUserInstance(null);
+			u.setType(Type.oauth);
+			u.getRights().remove(Right.Login);;
+			u.setDomainId(serverId);
+			u.getOrganisation_users().add(new Organisation_Users(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, "-1"))));
+			u.setLogin(login);
+			u.setShowContactDataToContacts(true);
+			u.setLastname(lastname);
+			u.setFirstname(firstname);
+			u.getAdresses().setEmail(email);
+			String picture = params.get("picture");
+			if (picture != null) {
+				u.setPictureuri(picture);
+			}
+			String locale = params.get("locale");
+			if (locale != null) {
+				Locale loc = Locale.forLanguageTag(locale);
+				if (loc != null) {
+					u.setLanguage_id(getLanguage(loc));
+					u.getAdresses().setStates(getCountry(loc));
+				}
+			}
+		}
+		//TODO FIXME should we update fields on login ????
+		u.setLastlogin(new Date());
+		u = userDao.update(u, pass, -1);
+		
+		return u;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java
new file mode 100644
index 0000000..ecda7f9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.LinkedList;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.ChatString;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+/**
+ * Load the list of available emoticons from the XML file and store them in
+ * memory to load faster, {@link #loadEmot()} is only called once: during server
+ * startup
+ * 
+ * @author sebawagner
+ * 
+ */
+public class EmoticonsManager {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(EmoticonsManager.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private LinkedList<LinkedList<String>> emotfilesList = new LinkedList<LinkedList<String>>();
+
+	@SuppressWarnings("unchecked")
+	public void loadEmot(){
+		try {
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			BufferedReader reader = new BufferedReader(new FileReader(new File(OmFileHelper.getPublicEmotionsDir(), "emotes.xml")));
+		    String xmlString = "";
+		    while (reader.ready()) {
+		    	xmlString += reader.readLine();
+		    }
+		    reader.close();
+		    emotfilesList = ChatString.replaceAllRegExp((LinkedList<LinkedList<String>>) xStream.fromXML(xmlString));
+		    
+		    log.debug("##### loadEmot completed");
+		    
+		} catch (Exception err) {
+			log.error("[loadEmot]",err);
+		}
+	}
+	
+	public synchronized LinkedList<LinkedList<String>> getEmotfilesList() {
+		return emotfilesList;
+	}
+	
+	public synchronized void setEmotfilesList(LinkedList<LinkedList<String>> emotfilesListNew) {
+		emotfilesList = emotfilesListNew;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java
new file mode 100644
index 0000000..ee9c8ad
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
+
+/**
+ * Memory based cache, configured as singleton in spring configuration
+ * 
+ * @author sebawagner
+ *
+ */
+public class WhiteBoardObjectListManagerById {
+	
+	private HashMap<Long,WhiteboardObjectList> whiteBoardObjectList = new HashMap<Long,WhiteboardObjectList>();
+	
+	private Long whiteboardId = 0L;
+	
+	public Long getNewWhiteboardId(Long room_id) throws Exception {
+		whiteboardId++;
+		this.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id, new WhiteboardObject(), whiteboardId);
+		return whiteboardId;
+	}
+	
+	/*
+	 * Room items a Whiteboard
+	 */
+	public synchronized WhiteboardObjectList getWhiteBoardObjectListByRoomId(Long room_id){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+		}
+		return whiteboardObjectList;
+	}
+	
+	public synchronized WhiteboardObject getWhiteBoardObjectListByRoomIdAndWhiteboard(Long room_id, Long whiteBoardId){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+		}
+		WhiteboardObject whiteboardObjects = whiteboardObjectList.getWhiteboardObjects().get(whiteBoardId);
+		if (whiteboardObjects == null) {
+			whiteboardObjects = new WhiteboardObject();
+		}
+		return whiteboardObjects;
+	}
+	
+	/*
+	 * Whiteboard Object List
+	 * 
+	 */
+	
+	public synchronized void setWhiteBoardObjectListRoomObj(Long room_id, WhiteboardObjectList whiteboardObjectList){
+		whiteBoardObjectList.put(room_id, whiteboardObjectList);
+	}
+	
+	public synchronized void setWhiteBoardObjectListRoomObjAndWhiteboardId(Long room_id, WhiteboardObject whiteboardObjects, Long whiteBoardId){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+			whiteboardObjectList.setRoom_id(room_id);
+		}
+		whiteboardObjects.setWhiteBoardId(whiteBoardId);
+		whiteboardObjectList.getWhiteboardObjects().put(whiteBoardId, whiteboardObjects);
+		whiteBoardObjectList.put(room_id, whiteboardObjectList);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java
new file mode 100644
index 0000000..2f3e38c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardSyncLockObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Memory based, configured as singleton in spring configuration
+ * 
+ * @author sebawagner
+ *
+ */
+public class WhiteBoardObjectSyncManager {
+
+	private HashMap<Long, Map<String, WhiteboardSyncLockObject>> whiteBoardSyncList = new HashMap<Long, Map<String, WhiteboardSyncLockObject>>();
+
+	private HashMap<Long, Map<String, Map<String, WhiteboardSyncLockObject>>> whiteBoardObjectSyncList = new HashMap<Long, Map<String, Map<String, WhiteboardSyncLockObject>>>();
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteBoardObjectSyncManager.class,
+			OpenmeetingsVariables.webAppRootKey);
+
+	/*
+	 * Initial Sync Process
+	 */
+	public synchronized void setWhiteBoardSyncListByRoomid(Long room_id,
+			Map<String, WhiteboardSyncLockObject> mapObject) {
+		whiteBoardSyncList.put(room_id, mapObject);
+	}
+
+	public synchronized Map<String, WhiteboardSyncLockObject> getWhiteBoardSyncListByRoomid(
+			Long room_id) {
+		Map<String, WhiteboardSyncLockObject> roomList = whiteBoardSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, WhiteboardSyncLockObject>();
+		}
+		return roomList;
+	}
+
+	/*
+	 * Image Sync Process
+	 */
+	public synchronized void setWhiteBoardImagesSyncListByRoomid(Long room_id,
+			Map<String, Map<String, WhiteboardSyncLockObject>> mapObject) {
+		whiteBoardObjectSyncList.put(room_id, mapObject);
+	}
+
+	public synchronized void setWhiteBoardImagesSyncListByRoomAndObjectId(
+			Long room_id, String object_id,
+			Map<String, WhiteboardSyncLockObject> imageSyncList) {
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		if (imageSyncList.size() == 0) {
+			roomList.remove(object_id);
+		} else {
+			roomList.put(object_id, imageSyncList);
+		}
+		setWhiteBoardImagesSyncListByRoomid(room_id, roomList);
+	}
+
+	public synchronized Map<String, Map<String, WhiteboardSyncLockObject>> getWhiteBoardObjectSyncListByRoomid(
+			Long room_id) {
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		return roomList;
+	}
+
+	public synchronized Map<String, WhiteboardSyncLockObject> getWhiteBoardObjectSyncListByRoomAndObjectId(
+			Long room_id, String object_id) {
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid room_id: "
+				+ room_id);
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid roomList: "
+				+ roomList);
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid object_id: "
+				+ object_id);
+		if (roomList.size() == 1) {
+			log.debug("getWhiteBoardImagesSyncListByRoomAndImageid roomList Key image_id: "
+					+ roomList.keySet().iterator().next());
+		}
+		Map<String, WhiteboardSyncLockObject> imageSyncList = roomList
+				.get(object_id);
+		if (imageSyncList == null) {
+			imageSyncList = new HashMap<String, WhiteboardSyncLockObject>();
+		}
+		return imageSyncList;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java
new file mode 100644
index 0000000..964b23a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class WhiteboardManager {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteboardManager.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private WhiteBoardObjectListManagerById whiteBoardObjectListManagerById;
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void addWhiteBoardObjectById(Long room_id, Map whiteboardObj,
+			Long whiteBoardId) {
+		try {
+			log.debug("addWhiteBoardObjectById: ", whiteboardObj);
+
+			// log.debug("whiteboardObj 0: Event: "+whiteboardObj.get(0));
+			// log.debug("whiteboardObj 1: Event: "+whiteboardObj.get(1));
+			// log.debug("whiteboardObj 2: Event: "+whiteboardObj.get(2));
+			// log.debug("whiteboardObj 3: Event: "+whiteboardObj.get(3));
+
+			// log.debug("whiteboardObj NUMB3: Event: "+whiteboardObj.get(3).getClass().getName());
+
+			// Date dateOfEvent = (Date) whiteboardObj.get(1);
+			String action = whiteboardObj.get(2).toString();
+
+			log.debug("action: " + action);
+			log.debug("actionObject: " + whiteboardObj.get(3));
+
+			List actionObject = (List) whiteboardObj.get(3);
+
+			if (action.equals("moveMap")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				whiteboardObject.setX(Integer.valueOf(
+						actionObject.get(1).toString()).intValue());
+				whiteboardObject.setY(Integer.valueOf(
+						actionObject.get(2).toString()).intValue());
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("draw") || action.equals("redo")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				// log.debug(actionObject);
+				// log.debug(actionObject.size()-1);
+				// log.debug(actionObject.get(actionObject.size()-1));
+				String objectType = actionObject.get(0).toString();
+				if (!objectType.equals("pointerWhiteBoard")) {
+					String objectOID = actionObject
+							.get(actionObject.size() - 1).toString();
+					log.debug("objectOID: " + objectOID);
+					whiteboardObject.getRoomItems()
+							.put(objectOID, actionObject);
+					whiteBoardObjectListManagerById
+							.setWhiteBoardObjectListRoomObjAndWhiteboardId(
+									room_id, whiteboardObject, whiteBoardId);
+				}
+			} else if (action.equals("clear")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				whiteboardObject.setRoomItems(new HashMap<String, List>());
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("delete") || action.equals("undo")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				String objectOID = actionObject.get(actionObject.size() - 1)
+						.toString();
+				String objectType = actionObject.get(0).toString();
+				log.debug("removal of objectOID: " + objectOID);
+
+				log.debug("removal of objectOID: " + objectOID);
+
+				// "ellipse"
+				// || this.baseactionobjectList[i][0] == "drawarrow"
+				// || this.baseactionobjectList[i][0] == "line"
+				// || this.baseactionobjectList[i][0] == "paint"
+				// || this.baseactionobjectList[i][0] == "rectangle"
+				// || this.baseactionobjectList[i][0] == "uline"
+				// || this.baseactionobjectList[i][0] == "image"
+				// || this.baseactionobjectList[i][0] == "letter"
+
+				// Re-Index all items in its zIndex
+				if (objectType.equals("ellipse")
+						|| objectType.equals("drawarrow")
+						|| objectType.equals("line")
+						|| objectType.equals("paint")
+						|| objectType.equals("rectangle")
+						|| objectType.equals("uline")
+						|| objectType.equals("image")
+						|| objectType.equals("letter")
+						|| objectType.equals("clipart")
+						|| objectType.equals("swf")
+						|| objectType.equals("mindmapnode")
+						|| objectType.equals("flv")) {
+
+					Integer zIndex = Integer.valueOf(
+							actionObject.get(actionObject.size() - 8)
+									.toString()).intValue();
+
+					log.debug("1|zIndex " + zIndex);
+					log.debug("2|zIndex "
+							+ actionObject.get(actionObject.size() - 8)
+									.toString());
+					log.debug("3|zIndex "
+							+ actionObject.get(actionObject.size() - 8));
+
+					int l = 0;
+					for (Iterator debugIter = actionObject.iterator(); debugIter
+							.hasNext();) {
+						log.debug("4|zIndex " + l + " -- " + debugIter.next());
+						l++;
+					}
+
+					for (Iterator<String> iter = whiteboardObject
+							.getRoomItems().keySet().iterator(); iter.hasNext();) {
+						String whiteboardObjKey = iter.next();
+						List actionObjectStored = whiteboardObject
+								.getRoomItems().get(whiteboardObjKey);
+
+						Integer zIndexStored = Integer.valueOf(
+								actionObjectStored.get(
+										actionObjectStored.size() - 8)
+										.toString()).intValue();
+
+						log.debug("zIndexStored|zIndex " + zIndexStored + "|"
+								+ zIndex);
+
+						if (zIndexStored >= zIndex) {
+							zIndexStored -= 1;
+							log.debug("new-zIndex " + zIndexStored);
+						}
+						actionObjectStored.set(actionObjectStored.size() - 8,
+								zIndexStored);
+
+						whiteboardObject.getRoomItems().put(whiteboardObjKey,
+								actionObjectStored);
+					}
+
+				}
+
+				whiteboardObject.getRoomItems().remove(objectOID);
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("size") || action.equals("editProp")
+					|| action.equals("editTextMindMapNode")
+					|| action.equals("editText") || action.equals("swf")
+					|| action.equals("flv")
+					|| action.equals("editTextMindMapColor")
+					|| action.equals("editTextMindMapFontColor")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				String objectOID = actionObject.get(actionObject.size() - 1)
+						.toString();
+				// List roomItem = roomList.get(objectOID);
+				List currentObject = whiteboardObject.getRoomItems().get(
+						objectOID);
+				if (actionObject.get(0).equals("paint")) {
+					actionObject.set(1, currentObject.get(1));
+				}
+				whiteboardObject.getRoomItems().put(objectOID, actionObject);
+
+				Map roomList = whiteboardObject.getRoomItems();
+
+				if (action.equals("swf")) {
+
+					log.debug("actionObject " + actionObject);
+
+					if (actionObject.get(0).equals("swf")) {
+
+						if (actionObject.get(8) != currentObject.get(8)) {
+
+							String baseObjectName = actionObject.get(
+									actionObject.size() - 1).toString();
+							Integer slidesNumber = Integer.valueOf(
+									actionObject.get(8).toString()).intValue();
+
+							log.debug("updateObjectsToSlideNumber :: "
+									+ baseObjectName + "," + slidesNumber);
+
+							for (Iterator<String> iter = roomList.keySet()
+									.iterator(); iter.hasNext();) {
+								String whiteboardObjKey = iter.next();
+								List actionObjectStored = (List) roomList
+										.get(whiteboardObjKey);
+
+								if (actionObjectStored.get(0).equals("ellipse")
+										|| actionObjectStored.get(0).equals(
+												"drawarrow")
+										|| actionObjectStored.get(0).equals(
+												"line")
+										|| actionObjectStored.get(0).equals(
+												"clipart")
+										|| actionObjectStored.get(0).equals(
+												"paint")
+										|| actionObjectStored.get(0).equals(
+												"rectangle")
+										|| actionObjectStored.get(0).equals(
+												"uline")
+										|| actionObjectStored.get(0).equals(
+												"image")
+										|| actionObjectStored.get(0).equals(
+												"letter")) {
+
+									Map swfObj = (Map) actionObjectStored
+											.get(actionObjectStored.size() - 7);
+									log.debug("swfObj :1: " + swfObj);
+
+									if (swfObj != null) {
+
+										if (swfObj.get("name").equals(
+												baseObjectName)) {
+
+											if (Integer.valueOf(
+													swfObj.get("slide")
+															.toString())
+													.intValue() == slidesNumber) {
+
+												swfObj.put("isVisible", true);
+
+												actionObjectStored.set(
+														actionObjectStored
+																.size() - 7,
+														swfObj);
+
+											} else {
+
+												swfObj.put("isVisible", false);
+
+												actionObjectStored.set(
+														actionObjectStored
+																.size() - 7,
+														swfObj);
+
+											}
+
+										}
+
+									}
+
+									log.debug("swfObj :1: " + swfObj);
+
+								}
+
+							}
+
+						}
+
+					}
+				}
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("clearSlide")) {
+
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				Map roomList = whiteboardObject.getRoomItems();
+
+				for (String objectName : (List<String>) actionObject) {
+
+					roomList.remove(objectName);
+
+				}
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("whiteboardObj")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				whiteboardObject.setFullFit((Boolean) actionObject.get(1));
+				whiteboardObject.setZoom((Integer) actionObject.get(2));
+
+				whiteBoardObjectListManagerById
+				.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+						whiteboardObject, whiteBoardId);
+			} else {
+				log.warn("Unkown Type: " + action + " actionObject: "
+						+ actionObject);
+			}
+
+		} catch (Exception err) {
+			log.error("[addWhiteBoardObject]", err);
+		}
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java b/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java
new file mode 100644
index 0000000..4b8a6b7
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.util.Arrays;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.XMLWriter;
+
+public class CreateLibraryPresentation {
+	public static ConverterProcessResult generateXMLDocument(File targetDirectory, String originalDocument, 
+			String pdfDocument, String swfDocument){
+		ConverterProcessResult returnMap = new ConverterProcessResult();
+		returnMap.setProcess("generateXMLDocument");		
+		try {
+			
+	        Document document = DocumentHelper.createDocument();
+	        Element root = document.addElement( "presentation" );
+
+	        File file = new File(targetDirectory, originalDocument);
+	        root.addElement( "originalDocument" )
+				.addAttribute("lastmod", (new Long(file.lastModified())).toString())
+				.addAttribute("size", (new Long(file.length())).toString())	        
+	            .addText( originalDocument );
+	        
+	        if (pdfDocument!=null){
+	        	File pdfDocumentFile = new File(targetDirectory, pdfDocument);
+		        root.addElement( "pdfDocument" )
+					.addAttribute("lastmod", (new Long(pdfDocumentFile.lastModified())).toString())
+					.addAttribute("size", (new Long(pdfDocumentFile.length())).toString())	   		        
+		            .addText( pdfDocument );
+	        }
+	        
+	        if (swfDocument!=null){
+	        	File swfDocumentFile = new File(targetDirectory, originalDocument);
+		        root.addElement( "swfDocument" )
+					.addAttribute("lastmod", (new Long(swfDocumentFile.lastModified())).toString())
+					.addAttribute("size", (new Long(swfDocumentFile.length())).toString())	  		        
+	            	.addText( swfDocument );	  
+	        }
+	        
+	        Element thumbs = root.addElement( "thumbs" );
+	        
+			//Secoond get all Files of this Folder
+			FilenameFilter ff = new FilenameFilter() {
+			     public boolean accept(File b, String name) {
+			    	  File f = new File(b, name);
+			          return f.isFile();
+			     }
+			};	
+			
+			String[] allfiles = targetDirectory.list(ff);			
+			if(allfiles!=null){
+				Arrays.sort(allfiles);
+				for(int i=0; i<allfiles.length; i++){
+					File thumbfile = new File(targetDirectory, allfiles[i]);
+					if (allfiles[i].startsWith(thumbImagePrefix)){
+						thumbs.addElement( "thumb" )
+							.addAttribute("lastmod", (new Long(thumbfile.lastModified())).toString())
+							.addAttribute("size", (new Long(thumbfile.length())).toString())
+			            	.addText( allfiles[i] );
+					}
+				}
+			}
+	        
+	        // lets write to a file
+	        XMLWriter writer = new XMLWriter(
+	            new FileOutputStream(new File(targetDirectory, OmFileHelper.libraryFileName))
+	        );
+	        writer.write( document );
+	        writer.close();
+			
+	        returnMap.setExitValue("0");
+	        
+			return returnMap;
+		} catch (Exception err) {
+			err.printStackTrace();
+			returnMap.setError(err.getMessage());
+			returnMap.setExitValue("-1");
+			return returnMap;
+		}
+	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java b/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java
new file mode 100644
index 0000000..a0bcd0c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.GenerateSWF;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GeneratePDF {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			GeneratePDF.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GenerateSWF generateSWF;
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public ConverterProcessResultList convertPDF(String fileName,
+			String roomName, boolean fullProcessing, File inFile)
+			throws Exception {
+
+		String inFileName = inFile.getName();
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+
+		File fileFullPath = new File(OmFileHelper.getUploadTempRoomDir(roomName), inFileName);
+		File destinationFolder = OmFileHelper.getNewDir(OmFileHelper.getUploadRoomDir(roomName), fileName);
+
+		log.debug("fullProcessing: " + fullProcessing);
+		if (fullProcessing) {
+			ConverterProcessResult processOpenOffice = doJodConvert(
+					fileFullPath, destinationFolder, fileName);
+			returnError.addItem("processOpenOffice", processOpenOffice);
+			ConverterProcessResult processThumb = generateThumbs
+					.generateBatchThumb(new File(destinationFolder, fileName + ".pdf"), destinationFolder, 80, "thumb");
+			returnError.addItem("processThumb", processThumb);
+			ConverterProcessResult processSWF = generateSWF
+					.generateSwf(destinationFolder, destinationFolder, fileName);
+			returnError.addItem("processSWF", processSWF);
+		} else {
+
+			log.debug("-- generateBatchThumb --");
+
+			ConverterProcessResult processThumb = generateThumbs
+					.generateBatchThumb(fileFullPath, destinationFolder, 80, "thumb");
+			returnError.addItem("processThumb", processThumb);
+
+			ConverterProcessResult processSWF = generateSWF.generateSwf(
+					fileFullPath.getParentFile(), destinationFolder, fileName);
+			returnError.addItem("processSWF", processSWF);
+		}
+
+		// now it should be completed so copy that file to the expected location
+		File fileWhereToMove = new File(destinationFolder, inFileName);
+		fileWhereToMove.createNewFile();
+		FileHelper.moveRec(inFile, fileWhereToMove);
+
+		if (fullProcessing) {
+			ConverterProcessResult processXML = CreateLibraryPresentation
+					.generateXMLDocument(destinationFolder,
+							inFileName, fileName + ".pdf",
+							fileName + ".swf");
+			returnError.addItem("processXML", processXML);
+		} else {
+			ConverterProcessResult processXML = CreateLibraryPresentation
+					.generateXMLDocument(destinationFolder,
+							inFileName, null, fileName + ".swf");
+			returnError.addItem("processXML", processXML);
+		}
+
+		return returnError;
+	}
+
+	/**
+	 * Generates PDF using JOD Library (external library)
+	 */
+	public ConverterProcessResult doJodConvert(File fileFullPath, File destinationFolder, String outputfile) {
+		try {
+
+			String jodPath = configurationDao.getConfValue("jod.path",
+					String.class, "./jod");
+			String officePath = configurationDao.getConfValue(
+					"office.path", String.class, "");
+
+			File jodFolder = new File(jodPath);
+			if (!jodFolder.exists() || !jodFolder.isDirectory()) {
+				throw new Exception("Path to JOD Library folder does not exist");
+			}
+
+			ArrayList<String> argv = new ArrayList<String>();
+			argv.add("java");
+
+			if (officePath.trim().length() > 0) {
+				argv.add("-Doffice.home=" + officePath);
+			}
+			String jodConverterJar = "";
+
+			for (String jar : jodFolder.list(new FilenameFilter() {
+				public boolean accept(File file1, String name) {
+					return name.endsWith(".jar");
+				}
+			})) {
+				argv.add("-cp");
+				if (jar.startsWith("jodconverter")) {
+					jodConverterJar = jar;
+				}
+				argv.add(new File(jodFolder, jar).getCanonicalPath());
+			}
+			if (jodConverterJar.length() == 0) {
+				throw new Exception(
+						"Could not find jodConverter JAR file in JOD folder");
+			}
+
+			argv.add("-jar");
+			argv.add(new File(jodFolder, jodConverterJar).getCanonicalPath());
+			argv.add(fileFullPath.getCanonicalPath());
+			argv.add(new File(destinationFolder, outputfile + ".pdf").getCanonicalPath());
+
+			return ProcessHelper.executeScript("doJodConvert",
+					argv.toArray(new String[argv.size()]));
+
+		} catch (Exception ex) {
+			log.error("doJodConvert", ex);
+			return new ConverterProcessResult("doJodConvert", ex.getMessage(), ex);
+		}
+	}
+
+	
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java b/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java
new file mode 100644
index 0000000..0e6e955
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+
+import org.apache.openmeetings.util.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryChartLoader {
+
+    private static final Logger log = new Logger();
+
+    private static final String fileExt = ".xchart";
+
+    private static LibraryChartLoader instance;
+
+    private LibraryChartLoader() {
+    }
+
+    public static synchronized LibraryChartLoader getInstance() {
+        if (instance == null) {
+            instance = new LibraryChartLoader();
+        }
+        return instance;
+    }
+
+    @SuppressWarnings("rawtypes")
+	public ArrayList loadChart(File dir, String fileName) {
+        try {
+            File file = new File(dir, fileName + fileExt);
+
+            log.error("filepathComplete: " + file);
+
+            XStream xStream = new XStream(new XppDriver());
+            xStream.setMode(XStream.NO_REFERENCES);
+
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String xmlString = "";
+            while (reader.ready()) {
+                xmlString += reader.readLine();
+            }
+            reader.close();
+            // lMap = (LinkedHashMap) xStream.fromXML(xmlString);
+            ArrayList lMapList = (ArrayList) xStream.fromXML(xmlString);
+
+            return lMapList;
+        } catch (Exception err) {
+            log.error(err);
+        }
+
+        return null;
+
+    }
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java b/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java
new file mode 100644
index 0000000..a7cb531
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.StringComparer;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryDocumentConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryDocumentConverter.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static final String fileExt = ".wml";
+	
+	public static String writeToLocalFolder(String fileName, @SuppressWarnings("rawtypes")ArrayList objList) {
+		try {
+			
+			log.debug("filePath: " + OmFileHelper.getUploadWmlDir().getCanonicalPath());
+			
+			String fileNameExtName = fileName.substring(fileName.length()-4,fileName.length());
+			if (fileNameExtName.equals(fileExt)){
+				fileName = StringComparer.getInstance().compareForRealPaths(fileName.substring(0, fileName.length()-4));
+			} else {
+				fileName = StringComparer.getInstance().compareForRealPaths(fileName.substring(0, fileName.length()));
+			}
+			
+			if (fileName.length()<=0){
+				//return new Long(-21);
+				return "-20";
+			}
+			//Add the Folder for the wmlFiles if it does not exist yet
+			File filePathComplete = new File(OmFileHelper.getUploadWmlDir(), fileName + fileExt);
+			
+			if (filePathComplete.exists()){
+				return "-20";
+			}		
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			String xmlString = xStream.toXML(objList);	
+			
+			log.debug("Write to "+filePathComplete);
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(filePathComplete));
+		    pw.println(xmlString);
+		    pw.flush();
+		    pw.close();
+	    
+		    //return new Long(1);
+		    
+		    return filePathComplete.getCanonicalPath();
+		} catch (Exception err){
+			log.error("writeToLocalFolder",err);
+		}
+		
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java b/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java
new file mode 100644
index 0000000..54d10ba
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LibraryDocuments {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryDocuments.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static LibraryDocuments instance;
+
+	private LibraryDocuments() {}
+
+	public static synchronized LibraryDocuments getInstance() {
+		if (instance == null) {
+			log.debug("instance created");
+			instance = new LibraryDocuments();
+		}
+		return instance;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java b/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java
new file mode 100644
index 0000000..b7f6f96
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java
@@ -0,0 +1,252 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Element;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryWmlLoader {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryWmlLoader.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static final String fileExt = ".wml";
+	
+	@SuppressWarnings({ "rawtypes" })
+	public ArrayList loadWmlFile(String fileName){
+		try {
+			String name = fileName;
+			if (!name.endsWith(fileExt)) {
+				name += fileExt;
+			}
+			File filepathComplete = new File(OmFileHelper.getUploadWmlDir(), name);
+			log.debug("filepathComplete: "+filepathComplete);
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			
+			BufferedReader reader = new BufferedReader(new FileReader(filepathComplete));
+		    String xmlString = "";
+		    while (reader.ready()) {
+		    	xmlString += reader.readLine();
+		    }
+		    reader.close();
+		    //lMap = (LinkedHashMap) xStream.fromXML(xmlString);
+		    ArrayList lMapList = (ArrayList) xStream.fromXML(xmlString);
+			
+			return lMapList;
+		} catch (Exception err){
+			log.error("loadWmlFile",err);
+		}
+		
+		return null;
+		
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	@SuppressWarnings({ "unused", "rawtypes" })
+	private void createListObjectPaintByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+			
+			LinkedHashMap<Integer,LinkedHashMap> pointMap = new LinkedHashMap<Integer,LinkedHashMap>();
+			Element pointElements = paintElement.element("points");
+			Integer k = 0;
+			
+			for ( Iterator i = pointElements.elementIterator( "point" ); i.hasNext(); ) {
+				Element pointElement = (Element) i.next();
+				LinkedHashMap<Integer,Object> singlePoint = new LinkedHashMap<Integer,Object>();
+				singlePoint.put(0, pointElement.getName());
+				singlePoint.put(1, Integer.valueOf(pointElement.attribute("val1").getText()).intValue());
+				singlePoint.put(2, Integer.valueOf(pointElement.attribute("val2").getText()).intValue());
+				singlePoint.put(3, Integer.valueOf(pointElement.attribute("val3").getText()).intValue());
+				singlePoint.put(4, Integer.valueOf(pointElement.attribute("val4").getText()).intValue());
+				pointMap.put(k, singlePoint);
+				log.debug("createListObjectPaintByNode"+singlePoint);
+				k++;
+			}
+			subMap.put(1, pointMap);
+
+			subMap.put(2, paintElement.element("fillstyle").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("linewidth").getText()).intValue());
+			subMap.put(4, Integer.valueOf(paintElement.element("strokestyle").getText()).intValue());
+			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(6, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(8, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(9, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(10, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectPaintByNode",err);
+		}
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectLetterByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("textforfield").getText());
+			subMap.put(2, Integer.valueOf(paintElement.element("fgcolor").getText()).intValue());
+			subMap.put(3, Integer.valueOf(paintElement.element("fontsize").getText()).intValue());
+			subMap.put(4, paintElement.element("fontstyle").getText());
+			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(6, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("y").getText()).floatValue());			
+			subMap.put(8, Float.valueOf(paintElement.element("width").getText()).floatValue());		
+			subMap.put(9, Float.valueOf(paintElement.element("height").getText()).floatValue());		
+			subMap.put(10, paintElement.element("layername").getText());
+			
+		} catch (Exception err) {
+			log.error("createListObjectLetterByNode",err);
+		}
+	}	
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectImageByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("urlname").getText());
+			subMap.put(2, paintElement.element("baseurl").getText());
+			subMap.put(3, paintElement.element("filename").getText());
+			subMap.put(4, paintElement.element("modulename").getText());
+			subMap.put(5, paintElement.element("parentpath").getText());
+			subMap.put(6, paintElement.element("room").getText());
+			subMap.put(7, paintElement.element("domain").getText());
+			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(13, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectImageByNode",err);
+		}
+	}	
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectObjecByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {	
+			
+			subMap.put(1, paintElement.element("fillstyle").getText());
+			subMap.put(2, paintElement.element("linewidth").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("strokestyle").getText()).intValue());
+			subMap.put(4, Float.valueOf(paintElement.element("startx").getText()).floatValue());
+			subMap.put(5, Float.valueOf(paintElement.element("starty").getText()).floatValue());
+			subMap.put(6, Float.valueOf(paintElement.element("endx").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("endy").getText()).floatValue());
+			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(13, paintElement.element("layername").getText());
+			
+		} catch (Exception err) {
+			log.error("createListObjectObjecByNode",err);
+		}
+	}		
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectRectAndEllipseByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {	
+			
+			subMap.put(1, Integer.valueOf(paintElement.element("stroke").getText()).intValue());
+			subMap.put(2, paintElement.element("line").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(4, Float.valueOf(paintElement.element("x").getText()).floatValue());		
+			subMap.put(5, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(6, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(8, paintElement.element("layername").getText());
+
+		} catch (Exception err) {
+			log.error("createListObjectObjecByNode",err);
+		}
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectSWFByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("urlname").getText());
+			subMap.put(2, paintElement.element("baseurl").getText());
+			subMap.put(3, paintElement.element("filename").getText());
+			subMap.put(4, paintElement.element("modulename").getText());
+			subMap.put(5, paintElement.element("parentpath").getText());
+			subMap.put(6, paintElement.element("room").getText());
+			subMap.put(7, paintElement.element("domain").getText());
+			subMap.put(8, Integer.valueOf(paintElement.element("slideNumber").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("innerx").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("innery").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("innerwidth").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("innerheight").getText()).floatValue());
+			subMap.put(13, Integer.valueOf(paintElement.element("zoomlevel").getText()).intValue());
+			subMap.put(14, Float.valueOf(paintElement.element("initwidth").getText()).floatValue());
+			subMap.put(15, Float.valueOf(paintElement.element("initheight").getText()).floatValue());
+			subMap.put(16, Integer.valueOf(paintElement.element("currentzoom").getText()).intValue());
+			subMap.put(17, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(18, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(19, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(20, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(21, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(22, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectImageByNode",err);
+		}
+	}		
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java
new file mode 100644
index 0000000..343417a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dto.file.LibraryPresenationThumbs;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.dto.file.LibraryPresentationFile;
+import org.apache.openmeetings.db.dto.file.LibraryPresentationThumb;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadLibraryPresentation {
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadLibraryPresentation.class, OpenmeetingsVariables.webAppRootKey);
+	
+	public static LibraryPresentation parseLibraryFileToObject(File file){
+		try {
+			LibraryPresentation lPresentation = new LibraryPresentation();
+			
+	        SAXReader reader = new SAXReader();
+	        Document document = reader.read( new FileInputStream(file) );
+	        
+	        Element root = document.getRootElement();
+	        
+	        for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = root.elementIterator(); i.hasNext(); ) {
+	        	
+	            Element item = i.next();
+	            
+	            log.debug(item.getName());
+	            
+	            String nodeVal = item.getName();
+	            
+	            //LinkedHashMap<String,Object> subMap = new LinkedHashMap<String,Object>();
+	            
+	            //subMap.put("name", nodeVal);
+
+				if (nodeVal.equals("originalDocument")){
+					
+					lPresentation.setOriginalDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("pdfDocument")){
+					
+					lPresentation.setPdfDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("swfDocument")){
+					
+					lPresentation.setSwfDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("thumbs")) {
+					
+					lPresentation.setThumbs(createListObjectLibraryByFileDocumentThumbs(item));
+					
+				} else {
+					throw new Exception("Unkown Library type: "+nodeVal);
+				}
+	            
+	        }
+	        
+	        log.debug("Returning presentation file object");
+			
+			return lPresentation;
+		} catch (Exception err) {
+			log.error("parseLibraryFileToObject",err);
+			return null;
+		}
+	}
+	
+	public static LibraryPresentationFile createListObjectLibraryByFileDocument(Element fileElement){
+		try {
+			
+			log.info("createListObjectLibraryByFileDocument"+fileElement);
+			
+			LibraryPresentationFile libraryPresentationFile = new LibraryPresentationFile();
+			libraryPresentationFile.setName(fileElement.getName());
+			libraryPresentationFile.setFilename(fileElement.getText());
+			libraryPresentationFile.setLastmod(fileElement.attribute("lastmod").getText());
+			libraryPresentationFile.setSize(Long.valueOf(fileElement.attribute("size").getText()).longValue());
+			
+			return libraryPresentationFile;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocument",err);
+		}
+		return null;
+	}		
+	
+	public static LibraryPresenationThumbs createListObjectLibraryByFileDocumentThumbs(Element fileElement){
+		try {
+			
+			LibraryPresenationThumbs thumbMap = new LibraryPresenationThumbs();
+			thumbMap.setName(fileElement.getName());
+			
+			Integer k = 0;
+			for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); i.next()) {
+				k++;
+			}
+			
+			thumbMap.setThumbs(new LibraryPresentationThumb[k]);
+			
+			
+			k = 0;
+			for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); ) {
+				Element thumbElement = i.next();
+				//log.info("createListObjectLibraryByFileDocumentThumbs"+thumbElement);
+				LibraryPresentationThumb singleThumb = new LibraryPresentationThumb();
+				singleThumb.setName(thumbElement.getName());
+				singleThumb.setFilename(thumbElement.getText());
+				singleThumb.setLastmod(thumbElement.attribute("lastmod").getText());
+				singleThumb.setSize(Long.valueOf(thumbElement.attribute("size").getText()).longValue());
+				thumbMap.getThumbs()[k] = singleThumb;
+				k++;
+			}
+			
+			
+			return thumbMap;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocumentThumbs",err);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java
new file mode 100644
index 0000000..179bb0a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.openmeetings.db.dto.file.FilesObject;
+import org.apache.openmeetings.db.dto.file.PresentationObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadLibraryPresentationToObject {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadLibraryPresentationToObject.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static LoadLibraryPresentationToObject instance;
+
+	private LoadLibraryPresentationToObject() {}
+
+	public static synchronized LoadLibraryPresentationToObject getInstance() {
+		if (instance == null) {
+			instance = new LoadLibraryPresentationToObject();
+		}
+		return instance;
+	}	
+	
+	public PresentationObject parseLibraryFileToObject(String filePath){
+		try {
+			PresentationObject lMap = new PresentationObject();
+			
+	        SAXReader reader = new SAXReader();
+	        Document document = reader.read(filePath);
+	        
+	        Element root = document.getRootElement();
+	        Integer k = 0;
+	        
+	        for (@SuppressWarnings("unchecked")
+			Iterator<Element> i = root.elementIterator(); i.hasNext(); ) {
+	            Element item = i.next();
+	            log.error(item.getName());
+	            
+	            String nodeVal = item.getName();
+	            
+				if (nodeVal.equals("originalDocument")){
+					lMap.setOriginalDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("pdfDocument")){
+					lMap.setPdfDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("swfDocument")) {
+					lMap.setSwfDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("thumbs")) {
+					lMap.setThumbs(this.createListObjectLibraryByFileDocumentThumbs(item));
+				}
+	            
+	            k++;
+
+	        }
+			
+			return lMap;
+		} catch (Exception err) {
+			log.error("parseLibraryFileToObject",err);
+			return null;
+		}
+	}
+	
+	public FilesObject createListObjectLibraryByFileDocument(Element fileElement){
+		try {
+			
+			log.info("createListObjectLibraryByFileDocument"+fileElement);
+			FilesObject fileObject = new FilesObject();
+			fileObject.setFileName(fileElement.getText());
+			fileObject.setLastModified(fileElement.attribute("lastmod").getText());
+			fileObject.setFileBytes(fileElement.attribute("size").getText());
+			return fileObject;
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocument",err);
+		}
+		return null;
+	}		
+	
+	public LinkedList<FilesObject> createListObjectLibraryByFileDocumentThumbs(Element fileElement){
+		try {
+
+			LinkedList<FilesObject> thumbMap = new LinkedList<FilesObject>();
+			
+			for (@SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); ) {
+				Element thumbElement = i.next();
+				log.info("createListObjectLibraryByFileDocumentThumbs"+thumbElement);
+				FilesObject singleThumb = new FilesObject();
+				singleThumb.setFileName(thumbElement.getName());
+				singleThumb.setFileNamePure(thumbElement.getText());
+				singleThumb.setLastModified(thumbElement.attribute("lastmod").getText());
+				singleThumb.setFileBytes(thumbElement.attribute("size").getText());
+				thumbMap.add(singleThumb);
+			}
+			
+			return thumbMap;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocumentThumbs",err);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java b/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
new file mode 100644
index 0000000..511bf0d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
@@ -0,0 +1,461 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.ldap;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.directory.api.ldap.model.cursor.CursorLdapReferralException;
+import org.apache.directory.api.ldap.model.cursor.EntryCursor;
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.exception.LdapAuthenticationException;
+import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
+import org.apache.directory.api.ldap.model.message.AliasDerefMode;
+import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
+import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.name.Rdn;
+import org.apache.directory.ldap.client.api.EntryCursorImpl;
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Management of optional LDAP Login
+ * 
+ * @author o.becherer
+ * 
+ */
+public class LdapLoginManagement {
+	private static final Logger log = Red5LoggerFactory.getLogger(LdapLoginManagement.class, webAppRootKey);
+	// Config constants
+	private static final String CONFIGKEY_LDAP_HOST = "ldap_conn_host";
+	private static final String CONFIGKEY_LDAP_PORT = "ldap_conn_port";
+	private static final String CONFIGKEY_LDAP_SECURE = "ldap_conn_secure";
+	private static final String CONFIGKEY_LDAP_ADMIN_DN = "ldap_admin_dn";
+	private static final String CONFIGKEY_LDAP_ADMIN_PASSWD = "ldap_passwd";
+	private static final String CONFIGKEY_LDAP_AUTH_TYPE = "ldap_auth_type";
+	private static final String CONFIGKEY_LDAP_PROV_TYPE = "ldap_provisionning";
+
+	private static final String CONFIGKEY_LDAP_SYNC_PASSWD_OM = "ldap_sync_password_to_om"; // 'true' or 'false'
+	private static final String CONFIGKEY_LDAP_USE_LOWER_CASE = "ldap_use_lower_case";
+	private static final String CONFIGKEY_LDAP_TIMEZONE_NAME = "ldap_user_timezone";
+	private static final String CONFIGKEY_LDAP_SEARCH_BASE = "ldap_search_base";
+	private static final String CONFIGKEY_LDAP_SEARCH_QUERY = "ldap_search_query";
+	private static final String CONFIGKEY_LDAP_SEARCH_SCOPE = "ldap_search_scope";
+	private static final String CONFIGKEY_LDAP_USERDN_FORMAT = "ldap_userdn_format";
+	private static final String CONFIGKEY_LDAP_USE_ADMIN_4ATTRS = "ldap_use_admin_to_get_attrs";
+	private static final String CONFIGKEY_LDAP_DEREF_MODE = "ldap_deref_mode";
+	private static final String CONFIGKEY_LDAP_GROUP_MODE = "ldap_group_mode";
+	private static final String CONFIGKEY_LDAP_GROUP_QUERY = "ldap_group_query";
+	
+	// LDAP custom attribute mapping keys
+	private static final String CONFIGKEY_LDAP_KEY_LASTNAME = "ldap_user_attr_lastname";
+	private static final String CONFIGKEY_LDAP_KEY_FIRSTNAME = "ldap_user_attr_firstname";
+	private static final String CONFIGKEY_LDAP_KEY_MAIL = "ldap_user_attr_mail";
+	private static final String CONFIGKEY_LDAP_KEY_STREET = "ldap_user_attr_street";
+	private static final String CONFIGKEY_LDAP_KEY_ADDITIONAL_NAME = "ldap_user_attr_additionalname";
+	private static final String CONFIGKEY_LDAP_KEY_FAX = "ldap_user_attr_fax";
+	private static final String CONFIGKEY_LDAP_KEY_ZIP = "ldap_user_attr_zip";
+	private static final String CONFIGKEY_LDAP_KEY_COUNTRY = "ldap_user_attr_country";
+	private static final String CONFIGKEY_LDAP_KEY_TOWN = "ldap_user_attr_town";
+	private static final String CONFIGKEY_LDAP_KEY_PHONE = "ldap_user_attr_phone";
+	private static final String CONFIGKEY_LDAP_KEY_PICTURE_URI = "ldap_user_picture_uri";
+	private static final String CONFIGKEY_LDAP_KEY_GROUP = "ldap_group_attr";
+
+	// LDAP default attributes mapping
+	private static final String LDAP_KEY_LASTNAME = "sn";
+	private static final String LDAP_KEY_FIRSTNAME = "givenName";
+	private static final String LDAP_KEY_MAIL = "mail";
+	private static final String LDAP_KEY_STREET = "streetAddress";
+	private static final String LDAP_KEY_ADDITIONAL_NAME = "description";
+	private static final String LDAP_KEY_FAX = "facsimileTelephoneNumber";
+	private static final String LDAP_KEY_ZIP = "postalCode";
+	private static final String LDAP_KEY_COUNTRY = "co";
+	private static final String LDAP_KEY_TOWN = "l";
+	private static final String LDAP_KEY_PHONE = "telephoneNumber";
+	private static final String LDAP_KEY_TIMEZONE = "timezone";
+	private static final String LDAP_KEY_PICTURE_URI = "pictureUri";
+	private static final String LDAP_KEY_GROUP = "memberOf";
+
+	public enum AuthType {
+		NONE
+		, SEARCHANDBIND
+		, SIMPLEBIND
+	}
+	
+	public enum Provisionning {
+		NONE
+		, AUTOUPDATE
+		, AUTOCREATE
+	}
+	
+	public enum GroupMode {
+		NONE
+		, ATTRIBUTE
+		, QUERY
+	}
+	
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	private Dn getUserDn(Properties config, String user) throws LdapInvalidDnException {
+		return new Dn(String.format(config.getProperty(CONFIGKEY_LDAP_USERDN_FORMAT, "%s"), user));
+	}
+	
+	private void bindAdmin(LdapConnection conn, String admin, String pass) throws LdapException {
+		if (!Strings.isEmpty(admin)) {
+			conn.bind(admin, pass);
+		} else {
+			conn.bind();
+		}
+	}
+	
+	private String getAttr(Properties config, Entry entry, String aliasCode, String defaultAlias) throws LdapInvalidAttributeValueException {
+		String alias = config.getProperty(aliasCode, "");
+		Attribute a = entry.get(Strings.isEmpty(alias) ? defaultAlias : alias);
+		return a == null ? null : a.getString();
+	}
+	/**
+	 * Ldap Login
+	 * 
+	 * Connection Data is retrieved from ConfigurationFile
+	 * 
+	 */
+	// ----------------------------------------------------------------------------------------
+	public User login(String login, String passwd, Long domainId) throws OmException {
+		log.debug("LdapLoginmanagement.doLdapLogin");
+		if (!userDao.validLogin(login)) {
+			log.error("Invalid login provided");
+			return null;
+		}
+
+		Properties config = new Properties();
+		Reader r = null;
+		try {
+			LdapConfig ldapConfig = ldapConfigDao.get(domainId);
+			r = new InputStreamReader(new FileInputStream(new File(OmFileHelper.getConfDir(), ldapConfig.getConfigFileName())), "UTF-8");
+			config.load(r);
+		} catch (Exception e) {
+			log.error("Error on LdapLogin : Configurationdata couldn't be retrieved!");
+			return null;
+		} finally {
+			if (r != null) {
+				try {
+					r.close();
+				} catch (IOException e) {
+					log.error("Error while closing ldap config file");
+					return null;
+				}
+			}
+		}
+		if (config.isEmpty()) {
+			log.error("Error on LdapLogin : Configurationdata couldnt be retrieved!");
+			return null;
+		}
+
+		String ldap_use_lower_case = config.getProperty(CONFIGKEY_LDAP_USE_LOWER_CASE, "false");
+		if ("true".equals(ldap_use_lower_case)) {
+			login = login.toLowerCase();
+		}
+
+		String ldap_auth_type = config.getProperty(CONFIGKEY_LDAP_AUTH_TYPE, "");
+		AuthType type = AuthType.SIMPLEBIND;
+		try {
+			type = AuthType.valueOf(ldap_auth_type);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type));
+		}
+		
+		String ldap_prov_type = config.getProperty(CONFIGKEY_LDAP_PROV_TYPE, "");
+		Provisionning prov = Provisionning.AUTOCREATE;
+		try {
+			prov = Provisionning.valueOf(ldap_prov_type);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov));
+		}
+		
+		String ldap_deref_mode = config.getProperty(CONFIGKEY_LDAP_DEREF_MODE, "");
+		AliasDerefMode derefMode = AliasDerefMode.DEREF_ALWAYS;
+		try {
+			derefMode = AliasDerefMode.getDerefMode(ldap_deref_mode);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid deref mode : '%s' -> Defaulting to %s", ldap_deref_mode, derefMode));
+		}
+		
+		if (AuthType.NONE == type && Provisionning.NONE == prov) {
+			log.error("Both AuthType and Provisionning are NONE!");
+			return null;
+		}
+		boolean useAdminForAttrs = true;
+		try {
+			useAdminForAttrs = "true".equals(config.getProperty(CONFIGKEY_LDAP_USE_ADMIN_4ATTRS, ""));
+		} catch (Exception e) {
+			//no-op
+		}
+		GroupMode groupMode = GroupMode.NONE;
+		try {
+			groupMode = GroupMode.valueOf(config.getProperty(CONFIGKEY_LDAP_GROUP_MODE, "NONE"));
+		} catch (Exception e) {
+			//no-op
+		}
+		if (AuthType.NONE == type && !useAdminForAttrs) {
+			log.error("Unable to get Attributes, please change Auth type and/or Use Admin to get attributes");
+			return null;
+		}
+
+		// Connection URL
+		String ldap_host = config.getProperty(CONFIGKEY_LDAP_HOST);
+		int ldap_port = Integer.parseInt(config.getProperty(CONFIGKEY_LDAP_PORT, "389"));
+		boolean ldap_secure = "true".equals(config.getProperty(CONFIGKEY_LDAP_SECURE, "false"));
+
+		// Username for LDAP SERVER himself
+		String ldap_admin_dn = config.getProperty(CONFIGKEY_LDAP_ADMIN_DN);
+
+		// Password for LDAP SERVER himself
+		String ldap_admin_passwd = config.getProperty(CONFIGKEY_LDAP_ADMIN_PASSWD);
+
+		User u = null;
+		LdapConnection conn = null;
+		try {
+			boolean authenticated = true;
+			conn = new LdapNetworkConnection(ldap_host, ldap_port, ldap_secure);
+			Dn userDn = null;
+			Entry entry = null;
+			switch (type) {
+				case SEARCHANDBIND:
+				{
+					bindAdmin(conn, ldap_admin_dn, ldap_admin_passwd);
+					Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
+					String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_SEARCH_QUERY, "%s"), login);
+					SearchScope scope = SearchScope.valueOf(config.getProperty(CONFIGKEY_LDAP_SEARCH_SCOPE, SearchScope.ONELEVEL.name()));
+			        
+					EntryCursor cursor = new EntryCursorImpl(conn.search(
+							new SearchRequestImpl()
+								.setBase(baseDn)
+								.setFilter(searchQ)
+								.setScope(scope)
+								.addAttributes("*")
+								.setDerefAliases(derefMode)));
+					while (cursor.next()) {
+						try {
+							Entry e = cursor.get();
+							if (userDn != null) {
+								log.error("more than 1 user found in LDAP");
+								throw new OmException(-1L);
+							}
+							userDn = e.getDn();
+							if (useAdminForAttrs) {
+								entry = e;
+							}
+						} catch (CursorLdapReferralException cle) {
+							log.warn("Referral LDAP entry found, ignore it");
+						}
+					}
+					cursor.close();
+					if (userDn == null) {
+						log.error("NONE users found in LDAP");
+						throw new OmException(-11L);
+					}
+					conn.bind(userDn, passwd);
+				}
+					break;
+				case SIMPLEBIND:
+				{
+					userDn = getUserDn(config, login);
+					conn.bind(userDn, passwd);
+				}
+					break;
+				case NONE:
+				default:
+					authenticated = false;
+					break;
+			}
+			u = authenticated ? userDao.getByLogin(login, Type.ldap, domainId) : userDao.login(login, passwd);
+			if (u == null && Provisionning.AUTOCREATE != prov) {
+				log.error("User not found in OM DB and Provisionning.AUTOCREATE was not set");
+				throw new OmException(-11L);
+			}
+			if (authenticated && entry == null) {
+				if (useAdminForAttrs) {
+					bindAdmin(conn, ldap_admin_dn, ldap_admin_passwd);
+				}
+				entry = conn.lookup(userDn);
+			}
+			switch (prov) {
+				case AUTOUPDATE:
+				case AUTOCREATE:
+					if (entry == null) {
+						log.error("LDAP entry is null, search or lookup by Dn failed");
+						throw new OmException(-11L);
+					}
+					if (u == null) {
+						u = userDao.getNewUserInstance(null);
+						u.setType(Type.ldap);
+						u.getRights().remove(Right.Login);
+						u.setDomainId(domainId);
+						u.getOrganisation_users().add(new Organisation_Users(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, "-1"))));
+						u.setLogin(login);
+						u.setShowContactDataToContacts(true);
+					}
+					if ("true".equals(config.getProperty(CONFIGKEY_LDAP_SYNC_PASSWD_OM, ""))) {
+						u.updatePassword(cfgDao, passwd);
+					}
+					u.setLastname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_LASTNAME, LDAP_KEY_LASTNAME));
+					u.setFirstname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_FIRSTNAME, LDAP_KEY_FIRSTNAME));
+					u.getAdresses().setEmail(getAttr(config, entry, CONFIGKEY_LDAP_KEY_MAIL, LDAP_KEY_MAIL));
+					u.getAdresses().setStreet(getAttr(config, entry, CONFIGKEY_LDAP_KEY_STREET, LDAP_KEY_STREET));
+					u.getAdresses().setAdditionalname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_ADDITIONAL_NAME, LDAP_KEY_ADDITIONAL_NAME));
+					u.getAdresses().setFax(getAttr(config, entry, CONFIGKEY_LDAP_KEY_FAX, LDAP_KEY_FAX));
+					u.getAdresses().setZip(getAttr(config, entry, CONFIGKEY_LDAP_KEY_ZIP, LDAP_KEY_ZIP));
+					u.getAdresses().setStates(stateDao.getStateByName(getAttr(config, entry, CONFIGKEY_LDAP_KEY_COUNTRY, LDAP_KEY_COUNTRY)));
+					u.getAdresses().setTown(getAttr(config, entry, CONFIGKEY_LDAP_KEY_TOWN, LDAP_KEY_TOWN));
+					u.getAdresses().setPhone(getAttr(config, entry, CONFIGKEY_LDAP_KEY_PHONE, LDAP_KEY_PHONE));
+					String tz = getAttr(config, entry, CONFIGKEY_LDAP_TIMEZONE_NAME, LDAP_KEY_TIMEZONE);
+					if (tz == null) {
+						tz = config.getProperty(CONFIGKEY_LDAP_TIMEZONE_NAME, null);
+					}
+					u.setTimeZoneId(timezoneUtil.getTimeZone(tz).getID());
+					String picture = getAttr(config, entry, CONFIGKEY_LDAP_KEY_PICTURE_URI, LDAP_KEY_PICTURE_URI);
+					if (picture == null) {
+						picture = config.getProperty(CONFIGKEY_LDAP_KEY_PICTURE_URI, null);
+					}
+					u.setPictureuri(picture);
+					
+					u = userDao.update(u, null);
+					
+					List<Dn> groups = new ArrayList<>();
+					if (GroupMode.ATTRIBUTE == groupMode) {
+						Attribute a = entry.get(config.getProperty(CONFIGKEY_LDAP_KEY_GROUP, LDAP_KEY_GROUP));
+						String attr = a == null ? "" : a.getString();
+						for (String g : attr.split("|")) {
+							groups.add(new Dn(g));
+						}
+					} else if (GroupMode.QUERY == groupMode) {
+						Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
+						String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_GROUP_QUERY, "%s"), login);
+				        
+						EntryCursor cursor = new EntryCursorImpl(conn.search(
+								new SearchRequestImpl()
+									.setBase(baseDn)
+									.setFilter(searchQ)
+									.setScope(SearchScope.SUBTREE)
+									.addAttributes("*")
+									.setDerefAliases(AliasDerefMode.DEREF_ALWAYS)));
+						while (cursor.next()) {
+							try {
+								Entry e = cursor.get();
+								groups.add(e.getDn());
+							} catch (CursorLdapReferralException cle) {
+								log.warn("Referral LDAP entry found, ignore it");
+							}
+						}
+						cursor.close();
+					}
+					for (Dn g : groups) {
+						Rdn namer = g.getRdn();
+						String name = namer.getValue().toString();
+						if (!Strings.isEmpty(name)) {
+							Organisation o = orgDao.get(name);
+							boolean found = false;
+							if (o == null) {
+								o = new Organisation();
+								o.setName(name);
+								o = orgDao.update(o, u.getUser_id());
+							} else {
+								for (Organisation_Users ou : u.getOrganisation_users()) {
+									if (ou.getOrganisation().getName().equals(name)) {
+										found = true;
+										break;
+									}
+								}
+							}
+							if (!found) {
+								u.getOrganisation_users().add(new Organisation_Users(o));
+								userDao.update(u, u.getUser_id());
+								log.debug("Going to add user to group:: " + name);
+							}
+						}
+					}
+					break;
+				case NONE:
+				default:
+					break;
+			}
+		} catch (LdapAuthenticationException ae) {
+			log.error("Not authenticated.", ae);
+			throw new OmException(-11L);
+		} catch (OmException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Unexpected exception.", e);
+			throw new OmException(e);
+		} finally {
+			if (conn != null) {
+				try {
+					conn.unBind();
+					conn.close();
+				} catch (Exception e) {
+					log.error("Unexpected exception.", e);
+					throw new OmException(e);
+				}
+			}
+		}
+		return u;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/mail/MailHandler.java b/src/main/java/org/apache/openmeetings/mail/MailHandler.java
new file mode 100644
index 0000000..ffeda85
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/mail/MailHandler.java
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.mail;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.MailMessageDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
+import org.apache.openmeetings.util.mail.MailUtil;
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+import com.sun.mail.util.MailSSLSocketFactory;
+
+/**
+ * 
+ * @author swagner
+ * 
+ * For a documentation about Javax mail please see fro example:
+ * http://connector.sourceforge.net/doc-files/Properties.html
+ * 
+ */
+public class MailHandler {
+	private static final Logger log = Red5LoggerFactory.getLogger(MailHandler.class, webAppRootKey);
+	private static final int MAIL_SEND_TIMEOUT = 60 * 60 * 1000; // 1 hour
+	private static final int MAXIMUM_ERROR_COUNT = 5;
+	
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private MailMessageDao mailMessageDao;
+	private String smtpServer;
+	private String smtpPort;
+	private String from;
+	private String mailAuthUser;
+	private String mailAuthPass;
+	private boolean mailTls;
+	private boolean mailAddReplyTo;
+	private int smtpConnectionTimeOut;
+	private int smtpTimeOut;
+
+	private void init() {
+		smtpServer = cfgDao.getConfValue("smtp_server", String.class, null);
+		smtpPort = cfgDao.getConfValue("smtp_port", String.class, "25");
+		from = cfgDao.getConfValue("system_email_addr", String.class, null);
+		mailAuthUser = cfgDao.getConfValue("email_username", String.class, null);
+		mailAuthPass = cfgDao.getConfValue("email_userpass", String.class, null);
+		mailTls = "1".equals(cfgDao.getConfValue("mail.smtp.starttls.enable", String.class, "0"));
+		mailAddReplyTo = "1".equals(cfgDao.getConfValue("inviter.email.as.replyto", String.class, "1"));
+		smtpConnectionTimeOut = cfgDao.getConfValue("mail.smtp.connection.timeout", Integer.class, "30000");
+		smtpTimeOut = cfgDao.getConfValue("mail.smtp.timeout", Integer.class, "30000");
+	}
+	
+	protected MimeMessage appendIcsBody(MimeMessage msg, MailMessage m) throws Exception {
+		log.debug("setMessageBody for iCal message");
+		// -- Create a new message --
+		Multipart multipart = new MimeMultipart();
+
+		Multipart multiBody = new MimeMultipart("alternative");
+		BodyPart html = new MimeBodyPart();
+		html.setDataHandler(new DataHandler(new ByteArrayDataSource(m.getBody(), "text/html; charset=UTF-8")));
+		multiBody.addBodyPart(html);
+
+		BodyPart iCalContent = new MimeBodyPart();
+		iCalContent.addHeader("content-class", "urn:content-classes:calendarmessage");
+		iCalContent.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+				"text/calendar; charset=UTF-8; method=REQUEST")));
+		multiBody.addBodyPart(iCalContent);
+		BodyPart body = new MimeBodyPart();
+		body.setContent(multiBody);
+		multipart.addBodyPart(body);
+		
+		BodyPart iCalAttachment = new MimeBodyPart();
+		iCalAttachment.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+				"application/ics")));
+		iCalAttachment.removeHeader("Content-Transfer-Encoding");
+		iCalAttachment.addHeader("Content-Transfer-Encoding", "base64");
+		iCalAttachment.removeHeader("Content-Type");
+		iCalAttachment.addHeader("Content-Type", "application/ics");
+		iCalAttachment.setFileName("invite.ics");
+		multipart.addBodyPart(iCalAttachment);
+
+		msg.setContent(multipart);
+		return msg;
+	}
+	
+	private MimeMessage appendBody(MimeMessage msg, MailMessage m) throws MessagingException, IOException {
+		// -- Set the subject and body text --
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(m.getBody(), "text/html; charset=\"utf-8\"")));
+
+		// -- Set some other header information --
+		msg.setHeader("X-Mailer", "XML-Mail");
+		msg.setSentDate(new Date());
+		
+		return msg;
+	}
+	
+	private MimeMessage getBasicMimeMessage() throws Exception {
+		log.debug("getBasicMimeMessage");
+		if (smtpServer == null) {
+			init();
+		}
+		Properties props = new Properties(System.getProperties());
+
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+		
+		props.put("mail.smtp.connectiontimeout", smtpConnectionTimeOut); 
+		props.put("mail.smtp.timeout", smtpTimeOut);
+
+		if (mailTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+			MailSSLSocketFactory sf = new MailSSLSocketFactory();
+		    sf.setTrustAllHosts(true);
+		    props.put("mail.smtp.ssl.socketFactory", sf);
+		}
+
+		// Check for Authentication
+		Session session = null;
+		if (mailAuthUser != null && mailAuthUser.length() > 0
+				&& mailAuthPass != null && mailAuthPass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getInstance(props, new SmtpAuthenticator(mailAuthUser, mailAuthPass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage msg = new MimeMessage(session);
+		msg.setFrom(new InternetAddress(from));
+		return msg;
+	}
+	
+	private MimeMessage getMimeMessage(MailMessage m) throws Exception {
+		log.debug("getMimeMessage");
+		// Building MimeMessage
+		MimeMessage msg = getBasicMimeMessage();
+		msg.setSubject(m.getSubject(), "UTF-8");
+		String replyTo = m.getReplyTo();
+		if (replyTo != null && mailAddReplyTo) {
+			log.debug("setReplyTo " + replyTo);
+			if (MailUtil.matches(replyTo)) {
+				msg.setReplyTo(new InternetAddress[]{new InternetAddress(replyTo)});
+			}
+		}
+		msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(m.getRecipients(), false));
+		
+		return m.getIcs() == null ? appendBody(msg, m) : appendIcsBody(msg, m);
+	}
+	
+	public void send(String toEmail, String subj, String message) {
+		send(toEmail, null, subj, message);
+	}
+	
+	public void send(String toEmail, String replyTo, String subj, String message) {
+		send(new MailMessage(toEmail, replyTo, subj, message));
+	}
+	
+	public void send(MailMessage m) {
+		send(m, false);
+	}
+	
+	public void send(final MailMessage m, boolean send) {
+		if (send) {
+			if (m.getId() != null) {
+				m.setStatus(Status.SENDING);
+				mailMessageDao.update(m, null);
+			}
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					log.debug("Message sending in progress");
+					log.debug("  To: " + m.getRecipients());
+					log.debug("  Subject: " + m.getSubject());
+
+					// -- Send the message --
+					try {
+						Transport.send(getMimeMessage(m));
+						m.setLastError("");
+						m.setStatus(Status.DONE);
+					} catch (Exception e) {
+						log.error("Error while sending message", e);
+						m.setErrorCount(m.getErrorCount() + 1);
+						StringWriter sw = new StringWriter();
+						PrintWriter pw = new PrintWriter(sw);
+						e.printStackTrace(pw);
+						pw.close();
+						m.setLastError(sw.getBuffer().toString());
+						m.setStatus(m.getErrorCount() < MAXIMUM_ERROR_COUNT ? Status.NONE : Status.ERROR);
+					}
+					if (m.getId() != null) {
+						mailMessageDao.update(m, null);
+					}
+				}
+			});
+		} else {
+			m.setStatus(Status.NONE);
+			mailMessageDao.update(m, null);
+		}
+	}
+	
+	public void resetSendingStatus() {
+		log.debug("resetSendingStatus enter ...");
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.MILLISECOND, -MAIL_SEND_TIMEOUT);
+		mailMessageDao.resetSendingStatus(c);
+		log.debug("... resetSendingStatus done.");
+	}
+	
+	public void sendMails() throws Exception {
+		init();
+		log.debug("sendMails enter ...");
+		List<MailMessage> list = mailMessageDao.get(0, 1);
+		log.debug("Number of emails in init queue " + list.size());
+		while (!list.isEmpty()) {
+			send(list.get(0), true);
+			list = mailMessageDao.get(0, 1);
+		}
+		log.debug("... sendMails done.");
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/mail/SMSHandler.java b/src/main/java/org/apache/openmeetings/mail/SMSHandler.java
new file mode 100644
index 0000000..f78bfca
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/mail/SMSHandler.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.mail;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.smslib.Message.MessageEncodings;
+import org.smslib.OutboundMessage;
+import org.smslib.Service;
+import org.smslib.http.BulkSmsHTTPGateway;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+/**
+ * 
+ * @author iarkh
+ * 
+ */
+
+public class SMSHandler {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			SMSHandler.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	protected ConfigurationDao configurationDao;
+	@Autowired
+	protected TaskExecutor taskExecutor;
+
+	private BulkSmsHTTPGateway gateway = null;
+	
+	private boolean checkBalance() throws Exception {
+		if (gateway == null) {
+			String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);
+			String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);
+			String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);
+
+			if (smsProvider == null || smsProvider.length() == 0 ||
+					smsUsername == null || smsUsername.length() == 0) {
+				log.error("SMS Provider is not configured properly!");
+				return false;
+			}
+			gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
+			gateway.setOutbound(true);
+			Service.getInstance().addGateway(gateway);
+			Service.getInstance().startService();
+		}
+		return gateway.queryBalance() >= 1; 
+	}
+	
+	public boolean sendSMS(String phone, String subj, long language_id) {
+		try {
+			taskExecutor.execute(new SMSSenderTask(phone, subj, language_id));
+			return true;
+		} catch (Exception ex) {
+			log.error("sendSMS", ex);
+			return false;
+		}
+	}
+	
+	protected class SMSSenderTask implements Runnable {
+		private final String phone;
+		private final String subject;
+		private long language_id;
+
+		public SMSSenderTask(String phone, String subject, long language_id) {
+			this.phone = phone;
+			this.subject = subject;
+			this.language_id = language_id;
+		}
+
+		public void run() {
+			this.send();
+		}
+
+		/**
+		 * Sending an SMS with the given values.
+		 * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
+		 */
+		public boolean send() {
+			try {
+				log.debug("SMS sending to: " + phone + ", subject is: " + subject);
+				if (checkBalance()) {
+					OutboundMessage msg = new OutboundMessage(phone, subject);
+					if (language_id != 1) {
+						msg.setEncoding(MessageEncodings.ENCUCS2);
+					}
+					return Service.getInstance().sendMessage(msg);
+				} else {
+					log.error("Error: insufficient funds on SMS provider account!");
+					return false; 
+				}
+			} catch (Exception ex) {
+				log.error("Error sending sms: ", ex);
+				return false;
+			} 
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java
new file mode 100644
index 0000000..e62067a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.quartz.scheduler;
+
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class MeetingReminderJob {
+	private static Logger log = Red5LoggerFactory.getLogger(MeetingReminderJob.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	
+	public void doIt() {
+		log.debug("MeetingReminderJob.execute");
+		try {
+			appointmentLogic.doScheduledMeetingReminder();
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java
new file mode 100644
index 0000000..c1abc2b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.quartz.scheduler;
+
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+ 
+public class SessionClearJob {
+	private static Logger log = Red5LoggerFactory.getLogger(SessionClearJob.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public void doIt() {
+		log.trace("SessionClearJob.execute");
+		try {
+			// TODO Generate report
+			sessiondataDao.clearSessionTable();
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java
new file mode 100644
index 0000000..7e4d154
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.quartz.scheduler;
+
+import java.io.File;
+import java.io.FileFilter;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class TestSetupCleanupJob {
+	private static Logger log = Red5LoggerFactory.getLogger(TestSetupCleanupJob.class, OpenmeetingsVariables.webAppRootKey);
+	private long expirationInterval = 60 * 60 * 1000; // 1 hour
+
+	public void doIt() {
+		log.debug("TestSetupClearJob.execute");
+		try {
+			//FIXME need to move all these staff to helper
+			File[] folders = OmFileHelper.getStreamsDir().listFiles();
+			if (folders != null) {
+				for (File folder : folders) {
+					if (folder.isDirectory()) {
+						//TODO need to rework this and remove hardcodings
+						for (File file : folder.listFiles(new FileFilter() {
+							public boolean accept(File file) {
+								return file.getName().startsWith("TEST_SETUP_");
+							}
+						}))
+						{
+							if (file.isFile() && file.lastModified() + expirationInterval < System.currentTimeMillis()) {
+								log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
+								file.delete();
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("Unexpected exception while processing tests setup videous.", e);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ChatService.java b/src/main/java/org/apache/openmeetings/remote/ChatService.java
new file mode 100644
index 0000000..4247948
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ChatService.java
@@ -0,0 +1,372 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.openmeetings.data.whiteboard.EmoticonsManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.ChatString;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IClient;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebawagner
+ *
+ */
+public class ChatService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(ChatService.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ISessionManager sessionManager = null;
+	@Autowired
+	private EmoticonsManager emoticonsManager;
+	@Autowired
+	private RoomDao roomDao;
+	
+	//number of items in the chat room history
+	private static final int chatRoomHistory = 50;
+	
+	private static LinkedHashMap<Long,List<HashMap<String,Object>>> myChats = new LinkedHashMap<Long,List<HashMap<String,Object>>>();
+	
+	private String parseDateAsTimeString() {
+		Calendar cal=Calendar.getInstance();
+		
+		int h = cal.get(Calendar.HOUR_OF_DAY);
+		int m = cal.get(Calendar.MINUTE);
+
+		String str_h,str_m;
+		if (h<10) 
+			str_h = "0"+Integer.toString(h);
+		else
+			str_h = Integer.toString(h);
+
+		if (m<10) 
+			str_m = "0"+Integer.toString(m);
+		else
+			str_m = Integer.toString(m);
+		
+		return str_h+':'+str_m;
+	}
+
+	public void sendChatMessage(String message) {
+		IConnection current = Red5.getConnectionLocal();
+		Client client = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		List<String> msg = new ArrayList<String>();
+		msg.add("chat"); //'privatechat'
+		msg.add(""); //date-time
+		msg.add("newtextmessage");
+		msg.add(client.getUsername());
+		msg.add(message);
+		msg.add(client.getUsercolor());
+		msg.add(client.getPublicSID()); //om[6] = parent.parent.isPrivate ? parent.parent.parent.refObj.publicSID : canvas.publicSID;
+		msg.add("false");// canvas.isrtl;
+		msg.add("" + client.getUser_id());
+		Room room = roomDao.get(client.getRoom_id());
+		msg.add("" + (room.getChatModerated() && !(client.getIsMod() || client.getIsSuperModerator())));
+		sendMessageWithClient(msg);
+	}
+	
+	/**
+	 * sends a Chat-Message
+	 * to all members of the Chatroom
+	 * and all additional users (waitng for a free entry for example)
+	 * 
+	 * @param newMessage
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	@SuppressWarnings("unchecked")
+	public int sendMessageWithClient(Object newMessage) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();			
+			log.debug("room_id: " + room_id);
+			
+			if (room_id == null) {
+				return 1; //TODO weird
+			}
+			Room room = roomDao.get(room_id);
+			@SuppressWarnings("rawtypes")
+			ArrayList messageMap = (ArrayList) newMessage;
+			// adding delimiter space, cause otherwise an emoticon in the last
+			// string would not be found
+			String messageText = messageMap.get(4) + " ";
+			LinkedList<String[]> parsedStringObjects = ChatString.parseChatString(messageText, emoticonsManager.getEmotfilesList(), room.getAllowFontStyles());
+			// log.error("parsedStringObjects"+parsedStringObjects.size());
+			log.debug("size:" + messageMap.size());
+			messageMap.add(parsedStringObjects);
+			newMessage = messageMap;			
+
+			boolean needModeration = Boolean.valueOf("" + messageMap.get(9));
+			List<HashMap<String, Object>> myChatList = myChats.get(room_id);
+			if (myChatList == null) myChatList = new LinkedList<HashMap<String, Object>>();
+			
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("message", newMessage);
+			String publicSID = "" + messageMap.get(6);
+			if (!publicSID.equals(currentClient.getPublicSID())) {
+				hsm.put("client", sessionManager.getClientByPublicSID("" + messageMap.get(6), false, null));
+				//need to remove unconfirmed chat message if any
+				for (int i = myChatList.size() - 1; i > -1; --i) {
+					Client msgClient = (Client)myChatList.get(i).get("client");
+					@SuppressWarnings("rawtypes")
+					List msgList = (List)myChatList.get(i).get("message");
+					if (publicSID.equals(msgClient.getPublicSID())
+						&& ("" + msgList.get(4)).equals(messageMap.get(4))
+						&& ("" + msgList.get(1)).equals(messageMap.get(1))
+						&& Boolean.valueOf("" + msgList.get(9))) {
+						myChatList.remove(i);
+						break;
+					}
+				}
+				
+			} else {
+				// add server time
+				messageMap.set(1, parseDateAsTimeString());
+				hsm.put("client", currentClient);
+			}
+
+			if (myChatList.size() == chatRoomHistory) myChatList.remove(0);
+			myChatList.add(hsm);
+			myChats.put(room_id, myChatList);
+			log.debug("SET CHATROOM: " + room_id);
+
+			//broadcast to everybody in the room/domain
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						
+						Client rcl = this.sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+						
+						if (rcl == null) {
+							continue;
+						}
+						if (rcl.getIsAVClient()) {
+							continue;
+						}
+						if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
+    						continue;
+    					}
+						if (needModeration && Boolean.TRUE != rcl.getIsMod() && Boolean.TRUE != rcl.getIsSuperModerator()) {
+							continue;
+						}
+						((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient",new Object[] { hsm }, this);
+    			 	}
+    			}
+			}
+		} catch (Exception err) {
+			log.error("[ChatService sendMessageWithClient] ",err);
+			return -1;
+		}
+		return 1;
+	}
+
+	//FIXME copy/past need to be removed
+	@SuppressWarnings("unchecked")
+	public int sendMessageWithClientByPublicSID(Object newMessage, String publicSID) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			Room room = roomDao.get(room_id);
+			log.debug("room_id: " + room_id);
+
+			@SuppressWarnings("rawtypes")
+			ArrayList messageMap = (ArrayList) newMessage;
+			// adding delimiter space, cause otherwise an emoticon in the last
+			// string would not be found
+			String messageText = messageMap.get(4).toString() + " ";
+			// add server time
+			messageMap.set(1, parseDateAsTimeString());
+			LinkedList<String[]> parsedStringObjects = ChatString.parseChatString(messageText, emoticonsManager.getEmotfilesList(), room.getAllowFontStyles());
+			// log.error("parsedStringObjects"+parsedStringObjects.size());
+			log.debug("size:" + messageMap.size());
+			messageMap.add(parsedStringObjects);
+			newMessage = messageMap;
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			// broadcast to everybody in the room/domain
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						IClient client = conn.getClient();
+						if (SessionVariablesUtil.isScreenClient(client)) {
+							// screen sharing clients do not receive events
+							continue;
+						} else if (SessionVariablesUtil.isAVClient(client)) {
+							// AVClients or potential AVClients do not receive events
+							continue;
+						}
+
+						if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)
+								|| SessionVariablesUtil.getPublicSID(client).equals(
+										currentClient.getPublicSID())) {
+							((IServiceCapableConnection) conn).invoke(
+								"sendVarsToMessageWithClient",
+									new Object[] { hsm }, this);
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[ChatService sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	public List<HashMap<String,Object>> clearChat() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			
+			Long chatroom = room_id;
+			log.debug("### GET CHATROOM: "+chatroom);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(chatroom);
+			myChatList = new LinkedList<HashMap<String,Object>>();
+			
+			myChats.put(chatroom,myChatList);
+			
+			HashMap<String,Object> hsm = new HashMap<String,Object>();
+			
+			scopeApplicationAdapter.sendMessageToCurrentScope("clearChatContent", hsm, true);
+			
+			return myChatList;
+			
+		} catch (Exception err) {
+			log.error("[clearChat] ",err);
+			return null;
+		}
+	}
+	
+	public List<HashMap<String,Object>> getRoomChatHistory() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			
+			log.debug("GET CHATROOM: " + room_id);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(room_id);
+			if (myChatList==null) myChatList = new LinkedList<HashMap<String,Object>>();
+			
+			if (Boolean.TRUE != currentClient.getIsMod() && Boolean.TRUE != currentClient.getIsSuperModerator()) {
+				//current user is not moderator, chat history need to be filtered
+				List<HashMap<String,Object>> tmpChatList = new LinkedList<HashMap<String,Object>>(myChatList);
+				for (int i = tmpChatList.size() - 1; i > -1; --i) {
+					@SuppressWarnings("rawtypes")
+					List msgList = (List)tmpChatList.get(i).get("message");
+					if (Boolean.valueOf("" + msgList.get(9))) { //needModeration
+						tmpChatList.remove(i);
+					}
+				}
+				myChatList = tmpChatList;
+			}
+			
+			return myChatList;
+		} catch (Exception err) {
+			log.error("[getRoomChatHistory] ",err);
+			return null;
+		}
+	}
+	
+	/**
+	 * gets the chat history by string for non-conference-clients
+	 * 
+	 * @param room_id
+	 * @return - chat history of the room given, null in case of exception
+	 */
+	public List<HashMap<String,Object>> getRoomChatHistoryByString(Long room_id) {
+		try {
+			
+			Long chatroom = room_id;
+			log.debug("GET CHATROOM: "+chatroom);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(chatroom);
+			if (myChatList==null) myChatList = new LinkedList<HashMap<String,Object>>();	
+			
+			return myChatList;
+		} catch (Exception err) {
+			log.error("[getRoomChatHistory] ",err);
+			return null;
+		}
+	}	
+	
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+		log.error("resultReceived ChatService "+arg0);
+	}
+	
+	public LinkedList<LinkedList<String>> getAllPublicEmoticons(){
+		try {
+			LinkedList<LinkedList<String>> publicemotes = new LinkedList<LinkedList<String>>();
+			LinkedList<LinkedList<String>> allEmotes = emoticonsManager.getEmotfilesList();
+			for (Iterator<LinkedList<String>> iter = allEmotes.iterator();iter.hasNext();){
+				LinkedList<String> emot = iter.next();
+				LinkedList<String> emotPub = new LinkedList<String>();
+				if (emot.get((emot.size()-1)).equals("y")){
+					emotPub.add(emot.get(0));
+					emotPub.add(emot.get(1).replace("\\", ""));
+					if (emot.size()>4) {
+						emotPub.add(emot.get(2).replace("\\", ""));
+						emotPub.add(emot.get(3));
+						emotPub.add(emot.get(4));
+					} else {
+						emotPub.add(emot.get(2));
+						emotPub.add(emot.get(3));
+					}
+					publicemotes.add(emotPub);
+				}
+			}
+			return publicemotes;
+		} catch (Exception err) {
+			log.error("[getAllPublicEmoticons] ",err);
+			return null;
+		}
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java b/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java
new file mode 100644
index 0000000..248f8ee
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java
@@ -0,0 +1,309 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.data.whiteboard.WhiteboardManager;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.documents.LibraryChartLoader;
+import org.apache.openmeetings.documents.LibraryDocumentConverter;
+import org.apache.openmeetings.documents.LibraryWmlLoader;
+import org.apache.openmeetings.documents.LoadLibraryPresentation;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class ConferenceLibrary implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ConferenceLibrary.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private LibraryWmlLoader libraryWmlLoader;
+	@Autowired
+	private WhiteboardManager whiteboardManagement;
+
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			log.debug("#############users_id : " + users_id);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				File working_dir = new File(OmFileHelper.getUploadFilesDir(), parentFolder);
+				log.debug("############# working_dir : " + working_dir);
+
+				File file = new File(working_dir, OmFileHelper.libraryFileName);
+
+				if (!file.exists()) {
+					throw new Exception(file.getCanonicalPath() + ": does not exist");
+				}
+
+				return LoadLibraryPresentation.parseLibraryFileToObject(file);
+
+			} else {
+				throw new Exception("not Authenticated");
+			}
+
+		} catch (Exception e) {
+			log.error("[getListOfFilesByAbsolutePath]", e);
+			return null;
+		}
+
+	}
+
+	/**
+	 * 
+	 * Save an Object to the library and returns the file-explorer Id
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileName
+	 * @param tObjectRef
+	 * @return - file-explorer Id in case of success, -1 otherwise
+	 */
+	public Long saveAsObject(String SID, Long room_id, String fileName,
+			Object tObjectRef) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				// LinkedHashMap tObject = (LinkedHashMap)t;
+				// ArrayList tObject = (ArrayList)t;
+
+				log.debug("saveAsObject :1: " + tObjectRef);
+				log.debug("saveAsObject :2: " + tObjectRef.getClass().getName());
+
+				@SuppressWarnings("rawtypes")
+				ArrayList tObject = (ArrayList) tObjectRef;
+
+				log.debug("saveAsObject" + tObject.size());
+
+				String localFileName = MD5.do_checksum(new Date().toString()) + ".wml";
+
+				LibraryDocumentConverter.writeToLocalFolder(localFileName, tObject);
+
+				// String wmlPath = current_dir + File.separatorChar+fileName
+				// +".xml";
+				// OwnerID == null
+				Long fileExplorerId = fileExplorerItemDao.add(fileName, "", 0L,
+						null, room_id, users_id, false, // isFolder
+						false, // isImage
+						false, // isPresentation
+						localFileName, // WML localFileName
+						true, // isStoredWML file
+						true, 0L, "");
+
+				return fileExplorerId;
+			}
+		} catch (Exception err) {
+			log.error("[saveAsObject] ", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * 
+	 * Loads a Object from the library into the whiteboard of all participant of
+	 * the current room
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileExplorerItemId
+	 * @param whiteboardId
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void loadWmlObject(String SID, Long room_id,
+			Long fileExplorerItemId, Long whiteboardId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				IConnection current = Red5.getConnectionLocal();
+				Client currentClient = this.sessionManager
+						.getClientByStreamId(current.getClient().getId(), null);
+
+				if (currentClient == null) {
+					return;
+				}
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				ArrayList roomItems = libraryWmlLoader.loadWmlFile(fileExplorerItem.getWmlFilePath());
+
+				Map whiteboardObjClear = new HashMap();
+				whiteboardObjClear.put(2, "clear");
+				whiteboardObjClear.put(3, null);
+
+				whiteboardManagement.addWhiteBoardObjectById(
+						room_id, whiteboardObjClear, whiteboardId);
+
+				for (int k = 0; k < roomItems.size(); k++) {
+
+					ArrayList actionObject = (ArrayList) roomItems.get(k);
+
+					Map whiteboardObj = new HashMap();
+					whiteboardObj.put(2, "draw");
+					whiteboardObj.put(3, actionObject);
+
+					whiteboardManagement.addWhiteBoardObjectById(
+							room_id, whiteboardObj, whiteboardId);
+
+				}
+
+				Map<String, Object> sendObject = new HashMap<String, Object>();
+				sendObject.put("id", whiteboardId);
+				sendObject.put("roomitems", roomItems);
+
+				// Notify all Clients of that Scope (Room)
+				for (IConnection conn : current.getScope().getClientConnections()) {
+					if (conn != null) {
+						if (conn instanceof IServiceCapableConnection) {
+							Client rcl = this.sessionManager
+									.getClientByStreamId(conn.getClient()
+											.getId(), null);
+							if ((rcl == null)
+									|| (rcl.getIsScreenClient() != null && rcl
+											.getIsScreenClient())) {
+								continue;
+							} else {
+								((IServiceCapableConnection) conn).invoke(
+										"loadWmlToWhiteboardById",
+										new Object[] { sendObject }, this);
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[loadWmlObject] ", err);
+		}
+	}
+
+	/**
+	 * 
+	 * Loads a chart object
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileName
+	 * @return - chart object
+	 */
+	@SuppressWarnings("rawtypes")
+	public ArrayList loadChartObject(String SID, Long room_id, String fileName) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return LibraryChartLoader.getInstance().loadChart(OmFileHelper.getUploadRoomDir(room_id.toString()),
+						fileName);
+			}
+		} catch (Exception err) {
+			log.error("[loadChartObject] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * @param SID
+	 * @param flvFileExplorerId
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public Long copyFileToCurrentRoom(String SID, Long flvFileExplorerId) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				IConnection current = Red5.getConnectionLocal();
+				String streamid = current.getClient().getId();
+
+				Client currentClient = this.sessionManager
+						.getClientByStreamId(streamid, null);
+
+				Long room_id = currentClient.getRoom_id();
+
+				if (room_id != null) {
+					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir()
+						, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+
+					File targetFolder = OmFileHelper.getStreamsSubDir(room_id);
+
+					File targetFullFlvFile = new File(targetFolder
+						, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					if (outputFullFlvFile.exists() && !targetFullFlvFile.exists()) {
+						FileHelper.copy(outputFullFlvFile, targetFullFlvFile);
+					}
+
+					return 1L;
+				}
+
+			}
+
+		} catch (Exception err) {
+			log.error("[copyFileToCurrentRoom] ", err);
+		}
+		return -1L;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ConferenceService.java b/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
new file mode 100644
index 0000000..f2e8f9a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
@@ -0,0 +1,512 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomModeratorsDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebawagner
+ * 
+ */
+public class ConferenceService {
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private RoomModeratorsDao roomModeratorsDao;
+	@Autowired
+	private ISessionManager sessionManager = null;
+	@Autowired
+	private ConfigurationDao cfgDao;
+
+	/**
+	 * ( get a List of all available Rooms of this organization
+	 * (non-appointments)
+	 * 
+	 * @param SID
+	 * @param organisation_id
+	 * @return - all available Rooms of this organization
+	 */
+	public List<RoomOrganisation> getRoomsByOrganisationAndType(String SID,
+			long organisation_id, long roomtypes_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("getRoomsByOrganisationAndType");
+				List<RoomOrganisation> roomOrgsList = roomManager.getRoomsOrganisationByOrganisationIdAndRoomType(organisation_id, roomtypes_id);
+	
+				List<RoomOrganisation> filtered = new ArrayList<RoomOrganisation>();
+	
+				for (Iterator<RoomOrganisation> iter = roomOrgsList.iterator(); iter
+						.hasNext();) {
+					RoomOrganisation orgRoom = iter.next();
+	
+					if (!orgRoom.getRoom().getAppointment()) {
+						orgRoom.getRoom().setCurrentusers(
+								this.getRoomClientsListByRoomId(orgRoom.getRoom()
+										.getRooms_id()));
+						filtered.add(orgRoom);
+					}
+				}
+				return filtered;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	public List<RoomOrganisation> getRoomsByOrganisationWithoutType(
+			String SID, long organisation_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("getRoomsByOrganisationAndType");
+				List<RoomOrganisation> roomOrgsList = roomManager.getRoomsOrganisationByOrganisationId(organisation_id);
+				
+				for (RoomOrganisation roomOrg : roomOrgsList) {
+					roomOrg.getRoom().setCurrentusers(sessionManager.getClientListByRoom(roomOrg.getRoom().getRooms_id()));
+				}
+	
+				return roomOrgsList;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * gets all rooms of an organization TODO:check if the requesting user is
+	 * also member of that organization
+	 * 
+	 * @param SID
+	 * @param organisation_id
+	 * @return - all rooms of an organization
+	 */
+	public SearchResult<RoomOrganisation> getRoomsByOrganisation(String SID,
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+
+		log.debug("getRoomsByOrganisation");
+
+		Long user_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasModLevel(userDao.get(user_id), organisation_id)) {
+			return roomManager.getRoomsOrganisationsByOrganisationId(organisation_id, start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	/**
+	 * get a List of all public availible rooms (non-appointments)
+	 * 
+	 * @param SID
+	 * @param roomtypes_id
+	 * @return - public rooms with given type, null in case of the error
+	 */
+	public List<Room> getRoomsPublic(String SID, Long roomtypes_id) {
+		try {
+			log.debug("getRoomsPublic");
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	
+				List<Room> roomList = roomDao.getPublicRooms(roomtypes_id);
+	
+				// Filter : no appointed meetings
+				List<Room> filtered = new ArrayList<Room>();
+	
+				for (Iterator<Room> iter = roomList.iterator(); iter.hasNext();) {
+					Room rooms = iter.next();
+	
+					if (!rooms.getAppointment()) {
+						rooms.setCurrentusers(this.getRoomClientsListByRoomId(rooms
+								.getRooms_id()));
+						filtered.add(rooms);
+					}
+				}
+	
+				return filtered;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsPublicWithoutType(String SID) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	
+				List<Room> roomList = roomDao.getPublicRooms();
+				
+				for (Room room : roomList) {
+					room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+				}
+	
+				return roomList;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsPublicWithoutType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * retrieving ServerTime
+	 * 
+	 * @return - server time
+	 */
+	// --------------------------------------------------------------------------------------------
+	public Date getServerTime() {
+		log.debug("getServerTime");
+
+		return new Date(System.currentTimeMillis());
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	/**
+	 * 
+	 * retrieving Appointment for Room
+	 * 
+	 * @param room_id
+	 * @return - Appointment in case the room is appointment, null otherwise
+	 */
+	public Appointment getAppointMentDataForRoom(Long room_id) {
+		log.debug("getAppointMentDataForRoom");
+
+		Room room = roomDao.get(room_id);
+
+		if (room.getAppointment() == false)
+			return null;
+
+		try {
+			Appointment ment = appointmentLogic.getAppointmentByRoom(room_id);
+
+			return ment;
+		} catch (Exception e) {
+			log.error("getAppointMentDataForRoom " + e.getMessage());
+			return null;
+		}
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	/**
+	 * 
+	 */
+	// --------------------------------------------------------------------------------------------
+	public List<Room> getAppointedMeetings(String SID, Long room_types_id) {
+		log.debug("ConferenceService.getAppointedMeetings");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+			List<Appointment> points = appointmentLogic
+					.getTodaysAppointmentsForUser(users_id);
+			List<Room> result = new ArrayList<Room>();
+
+			if (points != null) {
+				for (int i = 0; i < points.size(); i++) {
+					Appointment ment = points.get(i);
+
+					Long rooms_id = ment.getRoom().getRooms_id();
+					Room rooom = roomDao.get(rooms_id);
+
+					if (!rooom.getRoomtype().getRoomtypes_id()
+							.equals(room_types_id))
+						continue;
+
+					rooom.setCurrentusers(getRoomClientsListByRoomId(rooom
+							.getRooms_id()));
+					result.add(rooom);
+				}
+			}
+
+			log.debug("Found " + result.size() + " rooms");
+			return result;
+
+		} else {
+			return null;
+		}
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	public List<Room> getAppointedMeetingRoomsWithoutType(String SID) {
+		log.debug("ConferenceService.getAppointedMeetings");
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<Appointment> appointments = appointmentLogic
+						.getTodaysAppointmentsForUser(users_id);
+				List<Room> result = new ArrayList<Room>();
+
+				if (appointments != null) {
+					for (int i = 0; i < appointments.size(); i++) {
+						Appointment ment = appointments.get(i);
+
+						Long rooms_id = ment.getRoom().getRooms_id();
+						Room rooom = roomDao.get(rooms_id);
+
+						rooom.setCurrentusers(this
+								.getRoomClientsListByRoomId(rooom.getRooms_id()));
+						result.add(rooom);
+					}
+				}
+
+				log.debug("Found " + result.size() + " rooms");
+				return result;
+			}
+		} catch (Exception err) {
+			log.error("[getAppointedMeetingRoomsWithoutType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @return - all room types available
+	 */
+	public List<RoomType> getRoomTypes(String SID) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			User user = userDao.get(users_id);
+			return roomTypeDao.getAll(user == null
+					? cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : user.getLanguage_id());
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param rooms_id
+	 * @return - room with the id given
+	 */
+	public Room getRoomById(String SID, long rooms_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomDao.get(rooms_id);
+		}
+		return null;
+	}
+
+	public Room getRoomWithCurrentUsersById(String SID, long rooms_id) {
+		Room room = null;
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			room = roomDao.get(rooms_id);
+			room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+		}
+		return room;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @param roomtypes_id
+	 * @return - room with the given external id
+	 */
+	public Room getRoomByExternalId(String SID, Long externalUserId, String externalUserType, long roomtypes_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomByExternalId(externalUserId, externalUserType, roomtypes_id);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all available rooms
+	 * 
+	 * @param SID
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return - list of rooms being searched
+	 */
+	public SearchResult<Room> getRooms(String SID, int start, int max,
+			String orderby, boolean asc, String search) {
+		log.debug("getRooms");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRooms(start, max, orderby, asc, search);
+		}
+		return null;
+	}
+
+	public SearchResult<Room> getRoomsWithCurrentUsers(String SID, int start,
+			int max, String orderby, boolean asc) {
+		log.debug("getRooms");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsers(start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	public List<RoomModerator> getRoomModeratorsByRoomId(String SID,
+			Long roomId) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				return roomModeratorsDao.getByRoomId(roomId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[getRoomModeratorsByRoomId]", err);
+			err.printStackTrace();
+		}
+
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param rooms_id
+	 * @return - id of the room being deleted
+	 */
+	public Long deleteRoom(String SID, long rooms_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			return roomManager.deleteRoomById(rooms_id);
+		}
+		return null;
+	}
+	
+	/**
+	 * return all participants of a room
+	 * 
+	 * @param room_id
+	 * @return - true if room is full, false otherwise
+	 */
+	public boolean isRoomFull(Long room_id) {
+		try {
+			Room room = roomDao.get(room_id);
+			
+			if (room.getNumberOfPartizipants() <= this.sessionManager
+					.getClientListByRoom(room_id).size()) {
+				return true;
+			}
+			
+			return false;
+		} catch (Exception err) {
+			log.error("[isRoomFull]", err);
+		}
+		return true;
+	}
+
+	/**
+	 * return all participants of a room
+	 * 
+	 * @param room_id
+	 * @return - all participants of a room
+	 */
+	public List<Client> getRoomClientsListByRoomId(Long room_id) {
+		return sessionManager.getClientListByRoom(room_id);
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByList(String SID, int start, int max, String orderby, boolean asc) {
+		log.debug("getRoomsWithCurrentUsersByList");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsersByList(start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByListAndType(String SID, int start, int max, String orderby, boolean asc, String externalRoomType) {
+		log.debug("getRoomsWithCurrentUsersByListAndType");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsersByListAndType(start, max, orderby, asc, externalRoomType);
+		}
+		return null;
+	}
+
+	public Room getRoomByOwnerAndType(String SID, Long roomtypesId, String roomName) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomByOwnerAndTypeId(users_id,
+					roomtypesId, roomName);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ContactService.java b/src/main/java/org/apache/openmeetings/remote/ContactService.java
new file mode 100644
index 0000000..19a301b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ContactService.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+
+/**
+ * 
+ * @author swagner
+ *
+ */
+public class ContactService {
+	
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/DocumentService.java b/src/main/java/org/apache/openmeetings/remote/DocumentService.java
new file mode 100644
index 0000000..456cd61
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/DocumentService.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.List;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class DocumentService {
+
+	@SuppressWarnings("unused")
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			DocumentService.class, OpenmeetingsVariables.webAppRootKey);
+
+	public List<?> getUserFiles(String SID, String parentFolder) {
+
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ErrorService.java b/src/main/java/org/apache/openmeetings/remote/ErrorService.java
new file mode 100644
index 0000000..b3ccf20
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ErrorService.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class ErrorService {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorService.class, webAppRootKey);
+
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private ErrorDao errorDao;
+
+	/**
+	 * Gets an Error-Object by its id TODO: add error-code-handlers -20
+	 * duplicate FileName -21 FileName too short (length = 0) and make the
+	 * persistent in the DataBase
+	 * 
+	 * @param SID
+	 * @param errorid
+	 * @return - ErrorResult object with the id given
+	 */
+	public ErrorResult getErrorByCode(String SID, Long errorid, Long langId) {
+		if (errorid < 0) {
+			log.debug("errorid, language_id: " + errorid + "|" + langId);
+			ErrorValue eValues = errorDao.get(-1 * errorid);
+			if (eValues != null) {
+				ErrorType eType = errorDao.getErrorType(eValues.getErrortype_id());
+				log.debug("eValues.getFieldvalues_id() = " + eValues.getFieldvalues_id());
+				log.debug("eValues.getErrorType() = " + eType);
+				String eValue = labelDao.getString(eValues.getFieldvalues_id(), langId);
+				String tValue = labelDao.getString(eType.getFieldvalues_id(), langId);
+				if (eValue != null) {
+					return new ErrorResult(errorid, eValue, tValue);
+				}
+			}
+		} else {
+			return new ErrorResult(errorid, "Error ... please check your input", "Error");
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java b/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
new file mode 100644
index 0000000..aa318ca
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
@@ -0,0 +1,500 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.openmeetings.converter.BaseConverter;
+import org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverterTask;
+import org.apache.openmeetings.data.flvrecord.converter.FlvRecorderConverterTask;
+import org.apache.openmeetings.data.flvrecord.listener.StreamListener;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.red5.server.api.stream.IStreamListener;
+import org.red5.server.stream.ClientBroadcastStream;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FLVRecorderService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(FLVRecorderService.class, webAppRootKey);
+
+	/**
+	 * Stores a reference to all available listeners we need that reference, as the internal references stored with the
+	 * red5 stream object might be gone when the user closes the browser. But each listener has an asynchronous
+	 * component that needs to be closed no matter how the user leaves the application!
+	 */
+	private static final Map<Long, StreamListener> streamListeners = new ConcurrentHashMap<Long, StreamListener>();
+
+	// Spring Beans
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private FlvRecordingDao flvRecordingDaoImpl;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FlvRecorderConverterTask flvRecorderConverterTask;
+	@Autowired
+	private FlvInterviewConverterTask flvInterviewConverterTask;
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private FlvRecordingMetaDeltaDao metaDeltaDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+
+	public void resultReceived(IPendingServiceCall arg0) {
+	}
+
+	private static String generateFileName(Long flvRecording_id, String streamid) throws Exception {
+		String dateString = CalendarPatterns.getTimeForStreamId(new Date());
+		return "rec_" + flvRecording_id + "_stream_" + streamid + "_" + dateString;
+	}
+
+	public String recordMeetingStream(IConnection current, Client client, String roomRecordingName, String comment, Boolean isInterview) {
+		try {
+			log.debug("##REC:: recordMeetingStream ::");
+
+			Long room_id = client.getRoom_id();
+
+			Date now = new Date();
+
+			FlvRecording flvRecording = new FlvRecording();
+
+			flvRecording.setFileHash("");
+			flvRecording.setFileName(roomRecordingName);
+			Long ownerId = client.getUser_id();
+			if (ownerId != null && ownerId < 0) {
+				User c = userDao.get(-ownerId);
+				if (c != null) {
+					ownerId = c.getOwnerId();
+				}
+			}
+			flvRecording.setInsertedBy(ownerId);
+			flvRecording.setFolder(false);
+			flvRecording.setIsImage(false);
+			flvRecording.setIsPresentation(false);
+			flvRecording.setIsRecording(true);
+			flvRecording.setComment(comment);
+			flvRecording.setIsInterview(isInterview);
+
+			flvRecording.setRoom_id(room_id);
+			flvRecording.setRecordStart(now);
+
+			flvRecording.setWidth(client.getVWidth());
+			flvRecording.setHeight(client.getVHeight());
+
+			flvRecording.setOwnerId(ownerId);
+			flvRecording.setStatus(FlvRecording.Status.RECORDING);
+			flvRecording = recordingDao.update(flvRecording);
+			// Receive flvRecordingId
+			Long flvRecordingId = flvRecording.getFlvRecordingId();
+			log.debug("##REC:: recording created by USER: " + ownerId);
+
+			// Update Client and set Flag
+			client.setIsRecording(true);
+			client.setFlvRecordingId(flvRecordingId);
+			sessionManager.updateClientByStreamId(client.getStreamid(), client, false, null);
+
+			// get all stream and start recording them
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+						// Send every user a notification that the recording did start
+						if (!rcl.getIsAVClient()) {
+							((IServiceCapableConnection) conn).invoke("startedRecording", new Object[] { client }, this);
+						}
+
+						// If its the recording client we need another type of Meta Data
+						if (rcl.getIsScreenClient()) {
+							if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+								String streamName_Screen = generateFileName(flvRecordingId, rcl.getStreamPublishName().toString());
+
+								Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(
+										flvRecordingId, rcl.getFirstname() + " " + rcl.getLastname(), now, false,
+										false, true, streamName_Screen, rcl.getInterviewPodId());
+
+								// Start FLV Recording
+								recordShow(conn, rcl.getStreamPublishName(), streamName_Screen, flvRecordingMetaDataId, true, isInterview);
+
+								// Add Meta Data
+								rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+								sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+							}
+						} else if ((rcl.isMobile() || rcl.getIsAVClient())
+								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+							// if the user does publish av, a, v
+							// But we only record av or a, video only is not interesting
+							String broadcastId = "" + rcl.getBroadCastID();
+							String streamName = generateFileName(flvRecordingId, broadcastId);
+
+							// Add Meta Data
+							boolean isAudioOnly = false;
+							if (rcl.getAvsettings().equals("a")) {
+								isAudioOnly = true;
+							}
+
+							boolean isVideoOnly = false;
+							if (rcl.getAvsettings().equals("v")) {
+								isVideoOnly = true;
+							}
+
+							Long metaId = metaDataDao.addFlvRecordingMetaData(flvRecordingId,
+									rcl.getFirstname() + " " + rcl.getLastname(), now, isAudioOnly, isVideoOnly, false, streamName,
+									rcl.getInterviewPodId());
+
+							rcl.setFlvRecordingMetaDataId(metaId);
+
+							sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+							// Start FLV recording
+							recordShow(conn, broadcastId, streamName, metaId, !isAudioOnly, isInterview);
+						}
+					}
+				}
+			}
+			return roomRecordingName;
+
+		} catch (Exception err) {
+			log.error("[recordMeetingStream]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Start recording the published stream for the specified broadcast-Id
+	 * 
+	 * @param conn
+	 * @param broadcastid
+	 * @param streamName
+	 * @param metaId
+	 * @throws Exception
+	 */
+	private void recordShow(IConnection conn, String broadcastid, String streamName, Long metaId, boolean isScreenData, Boolean isInterview) throws Exception {
+		try {
+			log.debug("Recording show for: " + conn.getScope().getContextPath());
+			log.debug("Name of CLient and Stream to be recorded: " + broadcastid);
+			// log.debug("Application.getInstance()"+Application.getInstance());
+			log.debug("Scope " + conn);
+			log.debug("Scope " + conn.getScope());
+			// Get a reference to the current broadcast stream.
+			ClientBroadcastStream stream = (ClientBroadcastStream) scopeApplicationAdapter.getBroadcastStream(conn.getScope(), broadcastid);
+
+			if (stream == null) {
+				log.debug("Unable to get stream: " + streamName);
+				return;
+			}
+			// Save the stream to disk.
+			log.debug("### stream " + stream);
+			log.debug("### streamName " + streamName);
+			log.debug("### conn.getScope() " + conn.getScope());
+			log.debug("### flvRecordingMetaDataId " + metaId);
+			log.debug("### isScreenData " + isScreenData);
+			log.debug("### isInterview " + isInterview);
+			StreamListener streamListener = new StreamListener(!isScreenData, streamName, conn.getScope(), metaId, isScreenData, isInterview, metaDataDao, metaDeltaDao);
+
+			streamListeners.put(metaId, streamListener);
+
+			stream.addStreamListener(streamListener);
+			// Just for Debug Purpose
+			// stream.saveAs(streamName+"_DEBUG", false);
+		} catch (Exception e) {
+			log.error("Error while saving stream: " + streamName, e);
+		}
+	}
+
+	/**
+	 * Stops recording the publishing stream for the specified IConnection.
+	 * 
+	 * @param conn
+	 */
+	public synchronized void stopRecordingShow(IConnection conn, String broadcastId, Long metaId) {
+		try {
+			if (metaId == null) {
+				// this should be fixed, can be useful for debugging, after all this is an error
+				// but we don't want the application to completely stop the process
+				log.error("flvRecordingMetaDataId is null");
+			}
+
+			log.debug("** stopRecordingShow: " + conn);
+			log.debug("### Stop recording show for broadcastId: " + broadcastId + " || " + conn.getScope().getContextPath());
+
+			Object streamToClose = scopeApplicationAdapter.getBroadcastStream(conn.getScope(), broadcastId);
+
+			StreamListener listenerAdapter = streamListeners.get(metaId);
+
+			log.debug("Stream Closing :: " + metaId);
+
+			ClientBroadcastStream stream = (ClientBroadcastStream) streamToClose;
+
+			// the stream can be null if the user just closes the browser
+			// without canceling the recording before leaving
+			if (stream != null) {
+				// Iterate through all stream listeners and stop the appropriate
+				if (stream.getStreamListeners() != null) {
+					for (IStreamListener iStreamListener : stream.getStreamListeners()) {
+						stream.removeStreamListener(iStreamListener);
+					}
+				}
+			}
+
+			FlvRecordingMetaData metaData = metaDataDao.get(metaId);
+			BaseConverter.printMetaInfo(metaData, "Stopping the stream");
+			// Manually call finish on the stream so that there is no endless loop waiting in the FlvRecorderConverter waiting for the stream to finish
+			// this would normally happen in the Listener
+			Status s = metaData.getStreamStatus();
+			if (Status.NONE == s) {
+				log.debug("Stream was not started, no need to stop :: stream with id " + metaId);
+			} else {
+				metaData.setStreamStatus(listenerAdapter == null && s == Status.STARTED ? Status.STOPPED : Status.STOPPING);
+				log.debug("Stopping the stream :: New status == " + metaData.getStreamStatus());
+			}
+			metaDataDao.update(metaData);
+			if (listenerAdapter == null) {
+				log.debug("Stream Not Found :: " + metaId);
+				log.debug("Available Streams :: " + streamListeners.size());
+
+				for (Long entryKey : streamListeners.keySet()) {
+					log.debug("Stored flvRecordingMetaDataId in Map: " + entryKey);
+				}
+				throw new IllegalStateException("Could not find Listener to stop! flvRecordingMetaDataId " + metaId);
+			}
+
+			listenerAdapter.closeStream();
+			streamListeners.remove(metaId);
+
+		} catch (Exception err) {
+			log.error("[stopRecordingShow]", err);
+		}
+	}
+
+	public Long stopRecordAndSave(IScope scope, Client currentClient, Long storedFlvRecordingId) {
+		try {
+			log.debug("stopRecordAndSave " + currentClient.getUsername() + "," + currentClient.getUserip());
+
+			// get all stream and stop recording them
+			for (IConnection conn : scope.getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+						if (rcl == null) {
+							continue;
+						}
+						log.debug("is this users still alive? stop it :" + rcl);
+
+						if (rcl.getIsScreenClient()) {
+							if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+								// Stop FLV Recording
+								stopRecordingShow(conn, rcl.getStreamPublishName(), rcl.getFlvRecordingMetaDataId());
+
+								// Update Meta Data
+								metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+							}
+						} else if ((rcl.isMobile() || rcl.getIsAVClient())
+								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+
+							stopRecordingShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), rcl.getFlvRecordingMetaDataId());
+
+							// Update Meta Data
+							metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+						}
+					}
+				}
+			}
+			// Store to database
+			Long flvRecordingId = currentClient.getFlvRecordingId();
+
+			// In the Case of an Interview the stopping client does not mean
+			// that its actually the recording client
+			if (storedFlvRecordingId != null) {
+				flvRecordingId = storedFlvRecordingId;
+			}
+
+			if (flvRecordingId != null) {
+				flvRecordingDaoImpl.updateFlvRecordingEndTime(flvRecordingId, new Date(), currentClient.getOrganization_id());
+
+				// Reset values
+				currentClient.setFlvRecordingId(null);
+				currentClient.setIsRecording(false);
+
+				sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+				log.debug("flvRecorderConverterTask ", flvRecorderConverterTask);
+
+				FlvRecording flvRecording = flvRecordingDaoImpl.get(flvRecordingId);
+				if (flvRecording.getIsInterview() == null || !flvRecording.getIsInterview()) {
+					flvRecorderConverterTask.startConversionThread(flvRecordingId);
+				} else {
+					flvInterviewConverterTask.startConversionThread(flvRecordingId);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[-- stopRecordAndSave --]", err);
+		}
+		return new Long(-1);
+	}
+
+	public Client checkLzRecording() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("getCurrentRoomClient -2- " + streamid);
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			log.debug("getCurrentRoomClient -#########################- " + currentClient.getRoom_id());
+
+			for (Client rcl : sessionManager.getClientListByRoomAll(currentClient.getRoom_id())) {
+				if (rcl.getIsRecording()) {
+					return rcl;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[checkLzRecording]", err);
+		}
+		return null;
+	}
+
+	public void stopRecordingShowForClient(IConnection conn, Client rcl) {
+		try {
+			// this cannot be handled here, as to stop a stream and to leave a
+			// room is not
+			// the same type of event.
+			// StreamService.addRoomClientEnterEventFunc(rcl, roomrecordingName,
+			// rcl.getUserip(), false);
+			log.debug("### stopRecordingShowForClient: " + rcl);
+
+			if (rcl.getIsScreenClient()) {
+
+				if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+
+					// Stop FLV Recording
+					// FIXME: Is there really a need to stop it manually if the
+					// user just
+					// stops the stream?
+					stopRecordingShow(conn, rcl.getStreamPublishName(), rcl.getFlvRecordingMetaDataId());
+
+					// Update Meta Data
+					metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+				}
+
+			} else if (rcl.getIsAVClient()
+					&& (rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v") || rcl.getAvsettings().equals("av"))) {
+
+				// FIXME: Is there really a need to stop it manually if the user
+				// just stops the stream?
+				stopRecordingShow(conn, String.valueOf(rcl.getBroadCastID()), rcl.getFlvRecordingMetaDataId());
+
+				// Update Meta Data
+				metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+			}
+
+		} catch (Exception err) {
+			log.error("[stopRecordingShowForClient]", err);
+		}
+	}
+
+	public void addRecordingByStreamId(IConnection conn, String streamId, Client rcl, Long flvRecordingId) {
+		try {
+			FlvRecording flvRecording = flvRecordingDaoImpl.get(flvRecordingId);
+
+			Date now = new Date();
+
+			// If its the recording client we need another type of Meta Data
+			if (rcl.getIsScreenClient()) {
+				if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+					String streamName_Screen = generateFileName(flvRecordingId, rcl.getStreamPublishName().toString());
+
+					log.debug("##############  ADD SCREEN OF SHARER :: " + rcl.getStreamPublishName());
+
+					Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId, rcl.getFirstname()
+							+ " " + rcl.getLastname(), now, false, false, true, streamName_Screen, rcl.getInterviewPodId());
+
+					// Start FLV Recording
+					recordShow(conn, rcl.getStreamPublishName(), streamName_Screen, flvRecordingMetaDataId, true,
+							flvRecording.getIsInterview());
+
+					// Add Meta Data
+					rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+					sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+				}
+			} else if (rcl.getIsAVClient()
+					&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+				// if the user does publish av, a, v
+				// But we only record av or a, video only is not interesting
+
+				String streamName = generateFileName(flvRecordingId, String.valueOf(rcl.getBroadCastID()).toString());
+
+				// Add Meta Data
+				boolean isAudioOnly = false;
+				if (rcl.getAvsettings().equals("a")) {
+					isAudioOnly = true;
+				}
+				boolean isVideoOnly = false;
+				if (rcl.getAvsettings().equals("v")) {
+					isVideoOnly = true;
+				}
+
+				Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId, rcl.getFirstname() + " "
+						+ rcl.getLastname(), now, isAudioOnly, isVideoOnly, false, streamName, rcl.getInterviewPodId());
+
+				// Start FLV recording
+				recordShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), streamName, flvRecordingMetaDataId, false,
+						flvRecording.getIsInterview());
+
+				rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+				sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[addRecordingByStreamId]", err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/GroupService.java b/src/main/java/org/apache/openmeetings/remote/GroupService.java
new file mode 100644
index 0000000..4ffb584
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/GroupService.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+
+public class GroupService {
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/InvitationService.java b/src/main/java/org/apache/openmeetings/remote/InvitationService.java
new file mode 100644
index 0000000..ba9d981
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/InvitationService.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.threeten.bp.LocalDateTime;
+
+public class InvitationService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationService.class, webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private RoomDao roomDao;
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("InvitationService resultReceived" + arg0);
+	}
+
+	private Date getDate(String date, String time, String tzId) {
+		LocalDateTime d = LocalDateTime.of(
+				Integer.parseInt(date.substring(6)) //year
+				, Integer.parseInt(date.substring(3, 5)) //month
+				, Integer.parseInt(date.substring(0, 2)) //dayOfMonth
+				, Integer.parseInt(time.substring(0, 2)) //hour
+				, Integer.parseInt(time.substring(3, 5)) //minute
+				);
+		return CalendarHelper.getDate(d, tzId);
+	}
+	
+	/**
+	 * send an invitation to another user by Mail
+	 * 
+	 * @param SID
+	 * @param firstname
+	 * @param lastname
+	 * @param message
+	 * @param email
+	 * @param subject
+	 * @param room_id
+	 * @param conferencedomain
+	 * @param isPasswordProtected
+	 * @param invitationpass
+	 * @param valid
+	 * @param validFromDate
+	 * @param validFromTime
+	 * @param validToDate
+	 * @param validToTime
+	 * @param language_id
+     * @param iCalTz
+	 * @return - invitation object in case of success, "Sys - Error" string or null in case of error
+	 */
+	public Object sendInvitationHash(String SID, String firstname, String lastname,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Long language_id, String iCalTz, boolean sendMail) {
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("sendInvitationHash: ");
+	
+				Date from = getDate(validFromDate, validFromTime, iCalTz);
+				Date to = getDate(validToDate, validToTime, iCalTz);
+	
+				User owner = null;
+				if (users_id < 0) {
+					owner = userDao.get(-users_id);
+				}
+				users_id = owner == null ? users_id : owner.getOwnerId();
+				User invitee = userDao.getContact(email, firstname, lastname, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id,
+								from, to, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation;
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need User Privileges to perfom the Action";
+			}
+
+		} catch (Exception err) {
+			log.error("[sendInvitationHash]", err);
+		}
+
+		return null;
+	}
+
+	public String sendInvitationByHash(String SID, String invitationHash, String message, String subject
+			, Long language_id) throws Exception {
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			Invitation inv = (Invitation)invitationManager.getInvitationByHashCode(invitationHash, false);
+			inv.getInvitee().setLanguage_id(language_id);
+			invitationManager.sendInvitionLink(inv, MessageType.Create, subject, message, false);
+		} else {
+			return "Need User Privileges to perfom the Action";
+		}
+		return "Success";
+	}
+	
+	public Object getInvitationByHash(String hashCode) {
+		return invitationManager.getInvitationByHashCode(hashCode, true);
+	}
+
+	public Object checkInvitationPass(String hashCode, String pass) {
+		return invitationManager.checkInvitationPass(hashCode, pass);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/LanguageService.java b/src/main/java/org/apache/openmeetings/remote/LanguageService.java
new file mode 100644
index 0000000..3917687
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/LanguageService.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class LanguageService {
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private LabelDao labelDao;
+
+	/**
+	 * @return - List of all available Languages
+	 */
+	public List<Language> getLanguages() {
+		List<Language> result = new ArrayList<Language>();
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			result.add(new Language(e.getKey(), e.getValue().toLanguageTag(), e.getValue().getDisplayName(Locale.ENGLISH)));
+		}
+		return result;
+	}
+
+	public Integer getDefaultLanguage() {
+		return configurationDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Integer.class, "1");
+	}
+
+	/**
+	 * get all fields of a given Language_id by params
+	 * 
+	 * @param language_id
+	 * @param start
+	 * @param count
+	 * @return - all fields of a given Language_id in the range given
+	 */
+	public List<Map<String, Object>> getLanguageByIdAndMax(int language_id, int start, int count) {
+		return labelDao.getStrings((long)language_id, start, count);
+	}
+
+	public static class Language implements Serializable {
+		private static final long serialVersionUID = 1L;
+		public long language_id;
+		public String code;
+		public String name;
+		
+		public Language() {}
+		
+		public Language(long language_id, String code, String name) {
+			this.language_id = language_id;
+			this.code = code;
+			this.name = name;
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/MainService.java b/src/main/java/org/apache/openmeetings/remote/MainService.java
new file mode 100644
index 0000000..3e3a873
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/MainService.java
@@ -0,0 +1,571 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.Userdata;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class MainService implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private ConferenceLogDao conferenceLogDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private SOAPLoginDao soapLoginDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	// External User Types
+	public static final String EXTERNAL_USER_TYPE_LDAP = "LDAP";
+
+
+	/**
+	 * gets a user by its SID
+	 * 
+	 * @param SID
+	 * @param USER_ID
+	 * @return - user with SID given
+	 */
+	public User getUser(String SID, int USER_ID) {
+		User users = new User();
+		Long users_id = sessiondataDao.checkSession(SID);
+		Set<Right> rights = userDao.getRights(users_id);
+		if (AuthLevelUtil.hasAdminLevel(rights) || AuthLevelUtil.hasWebServiceLevel(rights)) {
+			users = userDao.get(USER_ID);
+		} else {
+			users.setFirstname("No rights to do this");
+		}
+		return users;
+	}
+
+	public Client getCurrentRoomClient(String SID) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("getCurrentRoomClient -1- " + SID);
+			log.debug("getCurrentRoomClient -2- " + streamid);
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[getCurrentRoomClient]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * load this session id before doing anything else
+	 * 
+	 * @return a unique session identifier
+	 */
+	public Sessiondata getsessiondata() {
+		return sessiondataDao.startsession();
+	}
+
+	public Long setCurrentUserOrganization(String SID, Long organization_id) {
+		try {
+			sessiondataDao.updateUserOrg(SID, organization_id);
+			return 1L;
+		} catch (Exception err) {
+			log.error("[setCurrentUserOrganization]", err);
+		}
+		return -1L;
+	}
+
+	public User loginWicket(String SID, String wicketSID, Long wicketroomid) {
+		log.debug("[loginWicket] SID: '{}'; wicketSID: '{}'; wicketroomid: '{}'", SID, wicketSID, wicketroomid);
+		Long userId = sessiondataDao.checkSession(wicketSID);
+		User u = userId == null ? null : userDao.get(userId);
+		if (u != null && wicketroomid != null) {
+			log.debug("[loginWicket] user and roomid are not empty: " + userId + ", " + wicketroomid);
+			boolean allowed = false;
+			Room r = roomDao.get(wicketroomid);
+			if (r != null) {
+				if (r.getAppointment() != null && r.getAppointment()) {
+					Appointment a = appointmentDao.getAppointmentByRoom(wicketroomid);
+					if (a != null && !a.isDeleted()) {
+						allowed = a.getOwner().getUser_id().equals(userId);
+						log.debug("[loginWicket] appointed room, isOwner ? " + allowed);
+						if (!allowed) {
+							for (MeetingMember mm : a.getMeetingMembers()) {
+								if (mm.getUser().getUser_id().equals(userId)) {
+									allowed = true;
+									break;
+								}
+							}
+						}
+						/*
+						TODO need to be reviewed
+						Calendar c = WebSession.getCalendar();
+						if (c.getTime().after(a.getStart()) && c.getTime().before(a.getEnd())) {
+							allowed = true;
+						} else {
+							SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
+							deniedMessage = Application.getString(1271) + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
+						}
+						*/
+					}
+				} else {
+					allowed = r.getIspublic() || (r.getOwnerId() != null && r.getOwnerId().equals(userId));
+					log.debug("[loginWicket] public ? " + r.getIspublic() + ", ownedId ? " + r.getOwnerId() + " " + allowed);
+					if (!allowed) {
+						for (RoomOrganisation ro : r.getRoomOrganisations()) {
+							for (Organisation_Users ou : u.getOrganisation_users()) {
+								if (ro.getOrganisation().getOrganisation_id().equals(ou.getOrganisation().getOrganisation_id())) {
+									allowed = true;
+									break;
+								}
+							}
+							if (allowed) {
+								break;
+							}
+						}
+					}
+				}
+			}
+			if (allowed) {
+				IConnection current = Red5.getConnectionLocal();
+				String streamId = current.getClient().getId();
+				Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+				
+				if (!u.getOrganisation_users().isEmpty()) {
+					u.setSessionData(sessiondataDao.getSessionByHash(wicketSID));
+					currentClient.setUser_id(u.getUser_id());
+					currentClient.setRoom_id(wicketroomid);
+					SessionVariablesUtil.setUserId(current.getClient(), u.getUser_id());
+				
+					currentClient.setUsername(u.getLogin());
+					currentClient.setFirstname(u.getFirstname());
+					currentClient.setLastname(u.getLastname());
+					currentClient.setPicture_uri(u.getPictureuri());
+					sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+					
+					scopeApplicationAdapter.sendMessageToCurrentScope("roomConnect", currentClient, false);
+					
+					return u;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public Object secureLoginByRemote(String SID, String secureHash) {
+		try {
+
+			log.debug("############### secureLoginByRemote " + secureHash);
+
+			String clientURL = Red5.getConnectionLocal().getRemoteAddress();
+
+			log.debug("swfURL " + clientURL);
+
+			SOAPLogin soapLogin = soapLoginDao.get(secureHash);
+
+			if (soapLogin.getUsed()) {
+
+				if (soapLogin.getAllowSameURLMultipleTimes()) {
+
+					if (!soapLogin.getClientURL().equals(clientURL)) {
+						log.debug("does not equal " + clientURL);
+						return -42L;
+					}
+
+				} else {
+					log.debug("Already used " + secureHash);
+					return -42L;
+				}
+			}
+
+			Long loginReturn = loginUserByRemote(soapLogin.getSessionHash());
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamId = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+
+			if (currentClient.getUser_id() != null) {
+				sessiondataDao.updateUser(SID, currentClient.getUser_id());
+			}
+
+			currentClient.setAllowRecording(soapLogin.isAllowRecording());
+			sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+
+			if (loginReturn == null) {
+				log.debug("loginReturn IS NULL for SID: " + soapLogin.getSessionHash());
+
+				return -1L;
+			} else if (loginReturn < 0) {
+				log.debug("loginReturn IS < 0 for SID: " + soapLogin.getSessionHash());
+
+				return loginReturn;
+			} else {
+
+				soapLogin.setUsed(true);
+				soapLogin.setUseDate(new Date());
+
+				soapLogin.setClientURL(clientURL);
+
+				soapLoginDao.update(soapLogin);
+
+				// Create Return Object and hide the validated
+				// sessionHash that is stored server side
+				// this hash should be never thrown back to the user
+
+				SOAPLogin returnSoapLogin = new SOAPLogin();
+
+				returnSoapLogin.setRoom_id(soapLogin.getRoom_id());
+				returnSoapLogin.setBecomemoderator(soapLogin.getBecomemoderator());
+				returnSoapLogin.setShowAudioVideoTest(soapLogin.getShowAudioVideoTest());
+				returnSoapLogin.setRoomRecordingId(soapLogin.getRoomRecordingId());
+				returnSoapLogin.setShowNickNameDialog(soapLogin.getShowNickNameDialog());
+				returnSoapLogin.setLandingZone(soapLogin.getLandingZone());
+
+				return returnSoapLogin;
+			}
+
+		} catch (Exception err) {
+			log.error("[secureLoginByRemote]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Function is called if the user loggs in via a secureHash and sets the
+	 * param showNickNameDialog in the Object SOAPLogin to true the user gets
+	 * displayed an additional dialog to enter his nickname
+	 * 
+	 * @param firstname
+	 * @param lastname
+	 * @param email
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	public Long setUserNickName(String firstname, String lastname, String email) {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamId = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamId, null);
+
+			currentClient.setFirstname(firstname);
+			currentClient.setLastname(lastname);
+			currentClient.setEmail(email);
+
+			// Log the User
+			conferenceLogDao.addConferenceLog(
+					"nicknameEnter", currentClient.getUser_id(), streamId,
+					null, currentClient.getUserip(), currentClient.getScope(),
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+
+			this.sessionManager.updateClientByStreamId(streamId,
+					currentClient, false, null);
+
+			return 1L;
+
+		} catch (Exception err) {
+			log.error("[setUserNickName] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Attention! This SID is NOT the default session id! its the Session id
+	 * retrieved in the call from the SOAP Gateway!
+	 * 
+	 * @param SID
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	public Long loginUserByRemote(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Sessiondata sd = sessiondataDao.getSessionByHash(SID);
+				if (sd == null || sd.getSessionXml() == null) {
+					return new Long(-37);
+				} else {
+					RemoteSessionObject userObject = RemoteSessionObject.fromXml(sd.getSessionXml());
+
+					log.debug(userObject.toString());
+
+					IConnection current = Red5.getConnectionLocal();
+					String streamId = current.getClient().getId();
+					Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+
+					// Check if this User is simulated in the OpenMeetings
+					// Database
+
+					if (!Strings.isEmpty(userObject.getExternalUserId())) {
+						// If so we need to check that we create this user in
+						// OpenMeetings and update its record
+
+						User user = userDao.getExternalUser(userObject.getExternalUserId(), userObject.getExternalUserType());
+
+						if (user == null) {
+							String iCalTz = configurationDao.getConfValue("default.timezone", String.class, "");
+
+							Address a = userDao.getAddress(null, null, null, 1L, null, null, null, userObject.getEmail());
+
+							Set<Right> rights = UserDao.getDefaultRights();
+							rights.remove(Right.Login);
+							rights.remove(Right.Dashboard);
+							User u = userDao.addUser(rights, userObject.getFirstname(), userObject.getUsername(),
+											userObject.getLastname(), 1L, "" // password is empty by default
+											, a, false, null, null, timezoneUtil.getTimeZone(iCalTz), false
+											, null, null, false, false, userObject.getExternalUserId()
+											, userObject.getExternalUserType(), null, userObject.getPictureUrl());
+
+							long userId = u.getUser_id();
+							currentClient.setUser_id(userId);
+							SessionVariablesUtil.setUserId(current.getClient(), userId);
+						} else {
+							user.setPictureuri(userObject.getPictureUrl());
+
+							userDao.update(user, users_id);
+
+							currentClient.setUser_id(user.getUser_id());
+							SessionVariablesUtil.setUserId(current.getClient(), user.getUser_id());
+						}
+					}
+
+					log.debug("userObject.getExternalUserId() -2- " + currentClient.getUser_id());
+
+					currentClient.setUserObject(userObject.getUsername(), userObject.getFirstname(), userObject.getLastname());
+					currentClient.setPicture_uri(userObject.getPictureUrl());
+					currentClient.setEmail(userObject.getEmail());
+
+					log.debug("UPDATE USER BY STREAMID " + streamId);
+
+					if (currentClient.getUser_id() != null) {
+						sessiondataDao.updateUser(SID, currentClient.getUser_id());
+					}
+
+					sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+
+					return new Long(1);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[loginUserByRemote] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * this function returns a user object with organization objects set only
+	 * the organization is not available for users that are using a HASH mechanism
+	 * cause the SOAP/REST API does not guarantee that the user connected to the HASH
+	 * has a valid user object set
+	 * 
+	 * @param SID
+	 */
+	public User markSessionAsLogedIn(String SID) {
+		try {
+			sessiondataDao.updateUserWithoutSession(SID, -1L);
+			
+			Long defaultRpcUserid = configurationDao.getConfValue(
+					"default.rpc.userid", Long.class, "-1");
+			User defaultRpcUser = userDao.get(defaultRpcUserid);
+			
+			User user = new User();
+			user.setOrganisation_users(defaultRpcUser.getOrganisation_users());
+			
+			return user;
+			
+		} catch (Exception err) {
+			log.error("[markSessionAsLogedIn]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * clear this session id
+	 * 
+	 * @param SID
+	 * @return string value if completed
+	 */
+	public Long logoutUser(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(current.getClient().getId(), null);
+			
+			scopeApplicationAdapter.roomLeaveByScope(currentClient,current.getScope(), false);
+			
+			currentClient.setUserObject(null, null, null, null);
+			
+			return userManager.logout(SID, users_id);
+		} catch (Exception err) {
+			log.error("[logoutUser]",err);
+		}
+		return -1L;
+	}
+
+	public String[] getTimeZones(int start, int count) {
+		String all[] = TimeZone.getAvailableIDs();
+		return Arrays.copyOfRange(all, start, Math.min(start + count, all.length));
+	}
+
+	public List<Configuration> getGeneralOptions(String SID) {
+		try {
+			return configurationDao.get("exclusive.audio.keycode", "red5sip.enable", CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
+		} catch (Exception err) {
+			log.error("[getGeneralOptions]",err);
+		}
+		return null;
+	}
+
+	public List<Userdata> getUserdata(String SID) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return userManager.getUserdataDashBoard(users_id);
+		}
+		return null;
+	}
+
+	/**
+	 * TODO: Is this function in usage?
+	 * 
+	 * @deprecated
+	 * @param SID
+	 * @param domain
+	 * @return - empty map
+	 */
+	@Deprecated
+	public LinkedHashMap<Integer, Client> getUsersByDomain(String SID,
+			String domain) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			LinkedHashMap<Integer, Client> lMap = new LinkedHashMap<Integer, Client>();
+			// Integer counter = 0;
+			// for (Iterator<String> it =
+			// Application.getClientList().keySet().iterator();it.hasNext();) {
+			// RoomClient rc = Application.getClientList().get(it.next());
+			// //if (rc.getDomain().equals(domain)) {
+			// lMap.put(counter, rc);
+			// counter++;
+			// //}
+			// }
+			return lMap;
+		} else {
+			return null;
+		}
+	}
+
+	public int closeRoom(String SID, Long room_id, Boolean status) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				roomManager.closeRoom(room_id, status);
+
+				if (status) {
+					Map<String, String> message = new HashMap<String, String>();
+					message.put("message", "roomClosed");
+					scopeApplicationAdapter.sendMessageByRoomAndDomain(room_id, message);
+				}
+
+				return 1;
+
+			}
+
+			return 1;
+		} catch (Exception err) {
+			log.error("[closeRoom]", err);
+		}
+		return -1;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("[resultReceived]" + arg0);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/MobileService.java b/src/main/java/org/apache/openmeetings/remote/MobileService.java
new file mode 100644
index 0000000..c06e349
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/MobileService.java
@@ -0,0 +1,351 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class MobileService {
+	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, webAppRootKey);
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private IUserManager userManager;
+	@Autowired
+	private SessiondataDao sessionDao;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private IRoomManager roomManager;
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeAdapter;
+
+	private void add(Map<String, Object> m, String key, Object v) {
+		m.put(key, v == null ? "" : v);
+	}
+	
+	public Map<String, Object> checkServer() {
+		Map<String, Object> result = new Hashtable<>();
+		result.put("allowSelfRegister",  "1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0")));
+		result.put("allowSoapRegister",  "1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0")));
+		result.put("allowOauthRegister",  "1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
+		return result;
+	}
+	
+	public Map<Long, String> getStates() {
+		Map<Long, String> result = new Hashtable<>();
+		for (State s : stateDao.getStates()) {
+			result.put(s.getState_id(), s.getName());
+		}
+		return result;
+	}
+	
+	public String[] getTimezones() {
+		return TimeZone.getAvailableIDs();
+	}
+	
+	public Map<String, Object> loginGoogle(Map<String, String> umap) {
+		Map<String, Object> result = getResult();
+		try {
+			if ("1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0"))) {
+				User u = userManager.loginOAuth(umap, 2); //TODO hardcoded
+				result = login(u, result);
+			}
+		} catch (Exception e) {
+			log.error("[loginGoogle]", e);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> registerUser(Map<String, String> umap) {
+		Map<String, Object> result = getResult();
+		try {
+			if ("1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0"))) {
+				String login = umap.get("login");
+				String email = umap.get("email");
+				String lastname = umap.get("lastname");
+				String firstname = umap.get("firstname");
+				if (firstname == null) {
+					firstname = "";
+				}
+				if (lastname == null) {
+					lastname = "";
+				}
+				String password = umap.get("password");
+				String tzId = umap.get("tzId");
+				Long stateId = Long.valueOf(umap.get("stateId"));
+				Long langId = Long.valueOf(umap.get("langId"));
+				
+				//FIXME TODO unify with Register dialog
+				String hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(
+						login + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+
+				String baseURL = cfgDao.getBaseUrl();
+				boolean sendConfirmation = !Strings.isEmpty(baseURL)
+						&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+				Long userId = userManager.registerUserInit(UserDao.getDefaultRights(), login, password, lastname
+						, firstname, email, null /* age/birthday */, "" /* street */
+						, "" /* additionalname */, "" /* fax */, "" /* zip */, stateId
+						, "" /* town */, langId, true /* sendWelcomeMessage */
+						, Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)),
+						"" /* phone */, false, sendConfirmation, TimeZone.getTimeZone(tzId),
+						false /* forceTimeZoneCheck */, "" /* userOffers */, "" /* userSearchs */, false /* showContactData */,
+						true /* showContactDataToContacts */, hash);
+				if (userId == null) {
+					//do nothing
+				} else if (userId > 0) {
+					User u = userDao.get(userId);
+					if (sendConfirmation) {
+						add(result, "status", -666L);
+					} else {
+						result = login(u, result);
+					}
+				} else {
+					add(result, "status", userId);
+				}
+			}
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> loginUser(String login, String password) {
+		Map<String, Object> result = getResult();
+		try {
+			User u = userDao.login(login, password);
+			result = login(u, result);
+		} catch (OmException e) {
+			result.put("status", e.getCode());
+		} catch (Exception e) {
+			log.error("[loginUser]", e);
+		}
+		return result;
+	}
+	
+	private Map<String, Object> getResult() {
+		Map<String, Object> result = new Hashtable<>();
+		result.put("status", -1);
+		return result;
+	}
+	
+	private Map<String, Object> login(User u, Map<String, Object> result) {
+		if (u != null) {
+			Sessiondata sd = sessionDao.startsession();
+			boolean bool = sessionDao.updateUser(sd.getSession_id(), u.getUser_id(), false, u.getLanguage_id());
+			if (!bool) {
+				// invalid Session-Object
+				result.put("status", -35);
+			} else {
+				IConnection conn = Red5.getConnectionLocal();
+				String streamId = conn.getClient().getId();
+				Client c = sessionManager.getClientByStreamId(streamId, null);
+				if (c == null) {
+					c = sessionManager.addClientListItem(streamId, conn.getScope().getName(), conn.getRemotePort(),
+						conn.getRemoteAddress(), "", false, null);
+				}
+				
+				SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
+				c.setUser_id(u.getUser_id());
+				c.setFirstname(u.getFirstname());
+				c.setLastname(u.getLastname());
+				c.setMobile(true);
+				sessionManager.updateClientByStreamId(streamId, c, false, null);
+
+				add(result, "sid", sd.getSession_id());
+				add(result, "publicSid", c.getPublicSID());
+				add(result, "status", 0);
+				add(result, "userId", u.getUser_id());
+				add(result, "firstname", u.getFirstname());
+				add(result, "lastname", u.getLastname());
+				add(result, "login", u.getLogin());
+				add(result, "email", u.getAdresses() == null ? "" : u.getAdresses().getEmail());
+				add(result, "language", u.getLanguage_id()); //TODO rights
+			}
+		}
+		return result;
+	}
+	
+	public List<Map<String, Object>> getVideoStreams() {
+		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
+		// Notify all clients of the same scope (room)
+		IConnection current = Red5.getConnectionLocal();
+		for (IConnection conn : current.getScope().getClientConnections()) {
+			if (conn != null && conn instanceof IServiceCapableConnection) {
+				Client c = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+				if ((c.isMobile() || c.getIsAVClient()) && !Strings.isEmpty(c.getAvsettings()) && !Boolean.TRUE.equals(c.getIsScreenClient())) {
+					Map<String, Object> map = new Hashtable<String, Object>();
+					add(map, "streamId", c.getStreamid());
+					add(map, "broadCastId", c.getBroadCastID());
+					add(map, "userId", c.getUser_id());
+					add(map, "firstname", c.getFirstname());
+					add(map, "lastname", c.getLastname());
+					add(map, "publicSid", c.getPublicSID());
+					add(map, "login", c.getUsername());
+					add(map, "email", c.getEmail());
+					add(map, "avsettings", c.getAvsettings());
+					add(map, "interviewPodId", c.getInterviewPodId());
+					add(map, "vWidth", c.getVWidth());
+					add(map, "vHeight", c.getVHeight());
+					result.add(map);
+				}
+			}
+		}
+		return result;
+	}
+
+	private void addRoom(String type, String org, boolean first, List<Map<String, Object>> result, Room r) {
+		Map<String, Object> room = new Hashtable<String, Object>();
+		room.put("id", r.getRooms_id());
+		room.put("name", r.getName());
+		room.put("type", type);
+		room.put("roomTypeId", r.getRoomtype().getRoomtypes_id());
+		if (org != null) {
+			room.put("org", org);
+		}
+		room.put("first", first);
+		room.put("users", sessionManager.getClientListByRoom(r.getRooms_id()).size());
+		room.put("total", r.getNumberOfPartizipants());
+		room.put("audioOnly", Boolean.TRUE.equals(r.getIsAudioOnly()));
+		result.add(room);
+	}
+	
+	public List<Map<String, Object>> getRooms() {
+		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
+		// FIXME duplicated code
+		IConnection current = Red5.getConnectionLocal();
+		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		User u = userDao.get(c.getUser_id());
+		//my rooms
+		List<Room> myl = new ArrayList<Room>();
+		myl.add(roomManager.getRoomByOwnerAndTypeId(u.getUser_id(), 1L, labelDao.getString(1306L, u.getLanguage_id())));
+		myl.add(roomManager.getRoomByOwnerAndTypeId(u.getUser_id(), 3L, labelDao.getString(1307L, u.getLanguage_id())));
+		myl.addAll(roomDao.getAppointedRoomsByUser(u.getUser_id()));
+		for (Room r : myl) {
+			addRoom("my", null, false, result, r);
+		}
+		
+		//private rooms
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			Organisation org = ou.getOrganisation();
+			boolean first = true;
+			for (Room r : roomDao.getOrganisationRooms(org.getOrganisation_id())) {
+				addRoom("private", org.getName(), first, result, r);
+				first = false;
+			}
+		}
+		
+		//public rooms
+		for (Room r : roomDao.getPublicRooms()) {
+			addRoom("public", null, false, result, r);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> roomConnect(String SID, Long userId) {
+		Map<String, Object> result = new Hashtable<String, Object>();
+		User u = userDao.get(userId);
+		Client c = scopeAdapter.setUsernameReconnect(SID, userId, u.getLogin(), u.getFirstname(), u.getLastname(), u.getPictureuri());
+		 //TODO check if we need anything here
+		long broadcastId = scopeAdapter.getBroadCastId();
+		c.setSipTransport(true);
+		c.setRoom_id(Long.parseLong(c.getScope()));
+		c.setRoomEnter(new Date());
+		c.setBroadCastID(broadcastId);
+		c.setMobile(true);
+		c.setIsBroadcasting(true);
+		sessionManager.updateClientByStreamId(c.getStreamid(), c, false, null);
+		result.put("broadcastId", broadcastId);
+		result.put("publicSid", c.getPublicSID());
+
+		scopeAdapter.sendMessageToCurrentScope("addNewUser", c, false, false);
+		return result;
+	}
+
+	public Map<String, Object> updateAvMode(String avMode, String width, String height, Integer interviewPodId) {
+		IConnection current = Red5.getConnectionLocal();
+		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		c.setAvsettings(avMode);
+		c.setVWidth(Integer.parseInt(width));
+		c.setVHeight(Integer.parseInt(height));
+		if (interviewPodId > 0) {
+			c.setInterviewPodId(interviewPodId);
+		}
+		sessionManager.updateClientByStreamId(c.getStreamid(), c, false, null);
+		HashMap<String, Object> hsm = new HashMap<String, Object>();
+		hsm.put("client", c);
+		hsm.put("message", new String[]{"avsettings", "0", avMode});
+		Map<String, Object> result = new Hashtable<String, Object>();
+		if (!"n".equals(avMode)) {
+			result.put("broadcastId", scopeAdapter.getBroadCastId());
+		}
+
+		scopeAdapter.sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true, false);
+		return result;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/PollService.java b/src/main/java/org/apache/openmeetings/remote/PollService.java
new file mode 100644
index 0000000..05cafac
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/PollService.java
@@ -0,0 +1,262 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class PollService implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			PollService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private PollDao pollManager;
+
+	public String createPoll(String pollName, String pollQuestion, int pollTypeId) {
+		String returnValue = "";
+		try {
+			log.debug("createPoll: " + pollQuestion);
+
+			IConnection currentcon = Red5.getConnectionLocal();
+			Client rc = sessionManager.getClientByStreamId(currentcon.getClient().getId(), null);
+
+			log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " " + rc.getIsMod());
+
+			if (rc.getIsMod()) {
+				// will move all existing polls to the archive
+				pollManager.closePoll(rc.getRoom_id());
+				
+				sendNotification(currentcon, "newPoll", pollManager.createPoll(rc, pollName, pollQuestion, (long) pollTypeId));
+				returnValue = "200";
+			} else {
+				returnValue = "202";
+			}
+
+		} catch (Exception err) {
+			returnValue = "203";
+			log.error("[createPoll]", err);
+		}
+		return returnValue;
+	}
+
+	public boolean closePoll() {
+		try {
+			log.debug("closePoll: ");
+
+			IConnection currentcon = Red5.getConnectionLocal();
+			Client rc = sessionManager.getClientByStreamId(currentcon
+					.getClient().getId(), null);
+
+			log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " "
+					+ rc.getIsMod());
+
+			if (rc.getIsMod()) {
+				// will move all existing polls to the archive
+				return pollManager.closePoll(rc.getRoom_id());
+			}
+
+		} catch (Exception err) {
+			log.error("[closePoll]", err);
+		}
+		return false;
+	}
+
+	public boolean deletePoll(Long poll_id) {
+		try {
+			log.debug("closePoll: ");
+
+			IConnection currentcon = Red5.getConnectionLocal();
+			Client rc = sessionManager.getClientByStreamId(currentcon
+					.getClient().getId(), null);
+
+			log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " "
+					+ rc.getIsMod());
+
+			if (rc.getIsMod()) {
+				// will move all existing polls to the archive
+				return pollManager.deletePoll(poll_id);
+			}
+
+		} catch (Exception err) {
+			log.error("[closePoll]", err);
+		}
+		return false;
+	}
+
+	public void sendNotification(IConnection current, String clientFunction, RoomPoll poll) throws Exception {
+		Client rc = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		final Long roomId = rc.getRoom_id();
+		scopeApplicationAdapter.new MessageSender(current, clientFunction, poll) {
+			
+			@Override
+			public boolean filter(IConnection conn) {
+				Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+				return (rcl.getIsScreenClient() != null && rcl.getIsScreenClient())
+						|| rcl.getRoom_id() == null || !rcl.getRoom_id().equals(roomId) || userDao.get(rcl.getUser_id()) == null;
+			}
+		}.start();
+	}
+
+	public List<PollType> getPollTypeList() {
+		return pollManager.getPollTypes();
+	}
+
+	public int vote(int pollvalue, int pollTypeId) {
+		int returnVal = 0;
+		try {
+			log.debug("PollService::vote: Enter");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client rc = sessionManager.getClientByStreamId(streamid, null);
+
+			if (rc == null) {
+				log.error("RoomClient IS NULL for ClientID: "
+						+ current.getClient().getId());
+				return -1;
+			}
+			long roomId = rc.getRoom_id();
+			if (!pollManager.hasPoll(roomId)) {
+				log.error("POLL IS NULL for RoomId: " + rc.getRoom_id());
+				return -1;
+			}
+			
+			if(userDao.get(rc.getUser_id())==null){
+				log.debug("vote: Invited users can not vote");
+				return -1;
+			}
+			if (pollManager.hasVoted(roomId, rc.getUser_id())) {
+				log.debug("hasVoted: true");
+				return -1;
+			}
+			// get Poll
+			RoomPoll roomP = pollManager.getPoll(roomId);
+
+			log.debug("vote: " + pollvalue + " " + pollTypeId + " "
+					+ roomP.getPollQuestion());
+
+			log.debug("hasVoted: false");
+			RoomPollAnswers rpA = new RoomPollAnswers();
+			if (roomP.getPollType().getIsNumericAnswer()) {
+				log.debug("numeric");
+				rpA.setPointList(pollvalue);
+			} else {
+				log.debug("boolean");
+				// Is boolean Question
+				rpA.setAnswer(new Boolean(pollvalue == 1));
+			}
+			rpA.setVotedUser(userDao.get(rc.getUser_id()));
+			rpA.setVoteDate(new Date());
+			rpA.setRoomPoll(roomP);
+			roomP.getRoomPollAnswerList().add(rpA);
+			pollManager.updatePoll(roomP);
+			return 1;
+		} catch (Exception err) {
+			log.error("[vote]", err);
+		}
+		return returnVal;
+	}
+
+	public RoomPoll getVotes() {
+		return getPoll();
+	}
+
+	public RoomPoll getPoll() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client rc = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			// get Poll
+			return pollManager.getPoll(rc.getRoom_id());
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return null;
+	}
+
+	public int checkHasVoted() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client rc = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			long roomId = rc.getRoom_id();
+			if(userDao.get(rc.getUser_id())==null){
+				log.debug("checkHasVoted: Invited users can not vote");
+				return -1;
+			}
+			if (pollManager.hasPoll(roomId)) {
+				return pollManager.hasVoted(roomId, rc.getUser_id()) ? -1 : 1;
+			} else {
+				return -2;
+			}
+		} catch (Exception err) {
+			log.error("[checkHasVoted]", err);
+		}
+		return 0;
+	}
+
+	public List<RoomPoll> getArchivedPollList() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client rc = this.sessionManager.getClientByStreamId(current
+					.getClient().getId(), null);
+
+			// get Poll
+			return pollManager.getArchivedPollList(rc.getRoom_id());
+		} catch (Exception err) {
+			log.error("[getArchivedPollList]", err);
+		}
+		return null;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/PrintService.java b/src/main/java/org/apache/openmeetings/remote/PrintService.java
new file mode 100644
index 0000000..1426a44
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/PrintService.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.openmeetings.batik.beans.PrintBean;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class PrintService {
+
+
+	private static final Logger log = Red5LoggerFactory.getLogger(PrintService.class, OpenmeetingsVariables.webAppRootKey);	
+	
+	private static HashMap<String,PrintBean> currentExportList = new HashMap<String,PrintBean>();
+	@Autowired
+	private SessiondataDao sessiondataDao;
+    @Autowired
+    private UserDao userDao;
+	
+	/*
+	 * Export List
+	 * 
+	 */
+	
+	public String addPrintList(String SID, @SuppressWarnings("rawtypes") List map, int width, int height) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+	        if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	        	String hashRaw = ""+new Date();
+	        	String hash = MD5.do_checksum(hashRaw);
+	        	PrintService.addPrintItembyMap(hash, map, width, height);
+	        	return hash;
+	        }
+		} catch (Exception err) {
+    		log.error("loginUser",err);
+    	}
+    	return null;
+	}
+	
+	public static synchronized PrintBean getPrintItemByHash(String hash) throws Exception {
+		PrintBean itemList = currentExportList.get(hash);
+//		if (itemList != null) {
+//			currentExportList.remove(hash);
+//		}
+		return itemList;
+	}
+	
+	public static synchronized void addPrintItembyMap(String hash, @SuppressWarnings("rawtypes") List map, int width, int height) throws Exception {
+		PrintBean pBean = new PrintBean(hash, map, width, height);
+		currentExportList.put(hash, pBean);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/UserService.java b/src/main/java/org/apache/openmeetings/remote/UserService.java
new file mode 100644
index 0000000..bf5b5c8
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/UserService.java
@@ -0,0 +1,502 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.cluster.SlaveHTTPConnectionManager;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.mail.template.AbstractTemplatePanel;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Provides method to manipulate {@link User}
+ * 
+ * @author sebawagner
+ * 
+ */
+public class UserService implements IUserService {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserService.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private SalutationDao salutationmanagement;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private MailHandler mailHandler;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private SlaveHTTPConnectionManager slaveHTTPConnectionManager;
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * get user by id, admin only
+	 * 
+	 * @param SID
+	 * @param user_id
+	 * @return User with the id given
+	 */
+	public User getUserById(String SID, long user_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return userDao.get(user_id);
+		}
+		return null;
+	}
+
+	/**
+	 * refreshes the current SID
+	 * 
+	 * @param SID
+	 * @return "ok" string in case of success, "error" string in case of the error
+	 */
+	public String refreshSession(String SID) {
+		try {
+			sessiondataDao.checkSession(SID);
+			return "ok";
+		} catch (Exception err) {
+			log.error("[refreshSession]", err);
+		}
+		return "error";
+	}
+
+	/**
+	 * get all availible Salutations
+	 * 
+	 * @param SID
+	 * @return all availible Salutations
+	 */
+	public List<Salutation> getUserSalutations(String SID, long language_id) {
+		return salutationmanagement.getUserSalutations(language_id);
+	}
+
+	/**
+	 * gets a whole user-list(admin-role only)
+	 * 
+	 * @param SID
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @return whole user-list
+	 */
+	public List<User> getUserList(String SID, int start, int max, String orderby, boolean asc) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return userDao.get("", start, max, orderby + (asc ? " ASC" : " DESC"));
+		}
+		return null;
+	}
+
+	/**
+	 * kicks a user from the server, also from slaves if needed, this method is
+	 * only invoked by the connection administration UI
+	 * 
+	 * @param SID
+	 * @param streamid
+	 * @param serverId
+	 *            0 means the session is locally, otherwise we have to perform a
+	 *            REST call
+	 * @return - true if user has sufficient permissions, false otherwise
+	 */
+	public Boolean kickUserByStreamId(String SID, String streamid, long serverId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// admins only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+				if (serverId == 0) {
+					Client rcl = sessionManager.getClientByStreamId(streamid, null);
+
+					if (rcl == null) {
+						return true;
+					}
+					String scopeName = "hibernate";
+					if (rcl.getRoom_id() != null) {
+						scopeName = rcl.getRoom_id().toString();
+					}
+					IScope currentScope = scopeApplicationAdapter.getRoomScope(scopeName);
+
+					HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+					messageObj.put(0, "kick");
+					scopeApplicationAdapter.sendMessageById(messageObj, streamid, currentScope);
+
+					scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+					return true;
+				} else {
+					Server server = serverDao.get(serverId);
+					Client rcl = sessionManager.getClientByStreamId(
+							streamid, server);
+					slaveHTTPConnectionManager.kickSlaveUser(server, rcl.getPublicSID());
+					
+					// true means only the REST call is performed, it is no
+					// confirmation that the user is really kicked from the
+					// slave
+					return true;
+				}
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return false;
+	}
+
+	public User updateUserSelfTimeZone(String SID, String jname) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				User us = userDao.get(users_id);
+
+				us.setTimeZoneId(timezoneUtil.getTimezoneByInternalJName(jname).getID());
+				us.setForceTimeZoneCheck(false);
+				us.setUpdatetime(new Date());
+
+				userDao.update(us, users_id);
+				
+				return us;
+			}
+		} catch (Exception err) {
+			log.error("[updateUserTimeZone]", err);
+		}
+		return null;
+	}
+
+	@Deprecated
+	public Long requestUserToContactList(String SID, Long userToAdd_id,
+			String domain, String port, String webapp) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return ContactsHelper.addUserToContactList(userToAdd_id);
+			}
+		} catch (Exception err) {
+			log.error("[requestuserToContactList]", err);
+		}
+		return null;
+	}
+
+	public List<UserContact> getPendingUserContacts(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactRequestsByUserAndStatus(users_id, true);
+
+				return uList;
+			}
+		} catch (Exception err) {
+			log.error("[getPendingUserContact]", err);
+		}
+		return null;
+	}
+
+	public List<UserContact> getUserContacts(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactsByUserAndStatus(users_id, false);
+
+				return uList;
+			}
+		} catch (Exception err) {
+			log.error("[getPendingUserContact]", err);
+		}
+		return null;
+	}
+
+	public Integer removeContactUser(String SID, Long userContactId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				UserContact userContacts = userContactsDao.get(userContactId);
+
+				if (userContacts == null) {
+					return -49;
+				}
+
+				return userContactsDao.deleteUserContact(userContactId);
+			}
+		} catch (Exception err) {
+			log.error("[removeContactUser]", err);
+		}
+		return null;
+	}
+
+	private Date createCalendarDate(TimeZone timezone, String dateOnly,
+			String time) {
+		Integer hour = Integer.valueOf(time.substring(0, 2)).intValue();
+		Integer minute = Integer.valueOf(time.substring(3, 5)).intValue();
+
+		log.info("createCalendar Hour: " + hour);
+		log.info("createCalendar Minute: " + minute);
+
+		Calendar cal = TimezoneUtil.getCalendarInTimezone(dateOnly, timezone);
+		cal.set(Calendar.HOUR_OF_DAY, hour);
+		cal.set(Calendar.MINUTE, minute);
+		cal.set(Calendar.SECOND, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+
+		return cal.getTime();
+	}
+
+	public Long composeMail(String SID, List<String> recipients,
+			String subject, String message, Boolean bookedRoom,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime, Long parentMessageId, Long roomtype_id,
+			String domain, String port, String webapp) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				User from = userDao.get(users_id);
+
+				Appointment a = new Appointment();
+				if (a.getMeetingMembers() == null) {
+					a.setMeetingMembers(new ArrayList<MeetingMember>());
+				}
+				for (String email : recipients) {
+					MeetingMember mm = new MeetingMember();
+					mm.setAppointment(a);
+					mm.setUser(userDao.getContact(email, users_id));
+					a.getMeetingMembers().add(mm);
+				}
+				if (bookedRoom) {
+					TimeZone timezone = timezoneUtil.getTimeZone(from);
+					Date start = createCalendarDate(timezone, validFromDate, validFromTime);
+					Date end = createCalendarDate(timezone, validToDate, validToTime);
+
+					log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(start));
+					log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(end));
+
+					a.setTitle(subject);
+					a.setDescription(message);
+					a.setStart(start);
+					a.setEnd(end);
+					a.setCategory(appointmentCategoryDao.get(1L));
+					a.setOwner(from);
+					
+					a.setRoom(new Room());
+					a.getRoom().setAppointment(true);
+					a.getRoom().setName(subject);
+					a.getRoom().setRoomtype(roomTypeDao.get(roomtype_id));
+					a.getRoom().setNumberOfPartizipants(100L);
+					a.getRoom().setAllowUserQuestions(true);
+					a.getRoom().setAllowFontStyles(true);
+
+					a = appointmentDao.update(a, users_id);
+				}
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					User to = mm.getUser();
+					Room room = a.getRoom();
+					
+					// We do not send an email to the one that has created the
+					// private message
+					if (to != null && from.getUser_id().equals(to.getUser_id())) {
+						continue;
+					}
+
+					//TODO should be reviewed
+					// One message to the Send
+					privateMessagesDao.addPrivateMessage(subject,
+							message, SENT_FOLDER_ID, from, to, from,
+							bookedRoom, room, false, 0L);
+
+					// One message to the Inbox
+					privateMessagesDao.addPrivateMessage(subject,
+							message, INBOX_FOLDER_ID, from, to, to,
+							bookedRoom, room, false, 0L);
+
+					if (to.getAdresses() != null) {
+						AbstractTemplatePanel.ensureApplication(from.getLanguage_id());
+						String aLinkHTML = 	"<br/><br/>" + "<a href='" + ContactsHelper.getLink() + "'>"
+									+  labelDao.getString(1302, from.getLanguage_id()) + "</a><br/>";
+						
+						mailHandler.send(to.getAdresses().getEmail(),
+								labelDao.getString(1301, from.getLanguage_id()) + subject,
+								message.replaceAll("\\<.*?>", "") + aLinkHTML);
+					}
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[composeMail]", err);
+		}
+		return null;
+	}
+
+	public Boolean checkUserIsInContactList(String SID, Long user_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactsByUserAndStatus(users_id, false);
+
+				for (UserContact userContact : uList) {
+					if (userContact.getContact().getUser_id().equals(user_id)) {
+						return true;
+					}
+				}
+
+				return false;
+			}
+		} catch (Exception err) {
+			log.error("[checkUserIsInContactList]", err);
+		}
+		return null;
+	}
+
+	public void shareCalendarUserContact(String SID, Long userContactId, Boolean shareCalendar) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				UserContact userContacts = userContactsDao.get(userContactId);
+
+				userContacts.setShareCalendar(shareCalendar);
+
+				userContactsDao.updateContact(userContacts);
+			}
+		} catch (Exception err) {
+			log.error("[shareCalendarUserContact]", err);
+		}
+	}
+
+	/**
+	 * Kick a user by its publicSID.<br/>
+	 * <br/>
+	 * <i>Note:</i>
+	 * This method will not perform a call to the slave, cause this call can only be 
+	 * invoked from inside the conference room, that means all clients are on the
+	 * same server, no matter if clustered or not.
+	 * 
+	 * @param SID
+	 * @param publicSID
+	 * @return - true in case user have sufficient permissions, null otherwise
+	 */
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+				if (rcl == null) {
+					return true;
+				}
+				String scopeName = "hibernate";
+				if (rcl.getRoom_id() != null) {
+					scopeName = rcl.getRoom_id().toString();
+				}
+				IScope currentScope = this.scopeApplicationAdapter
+						.getRoomScope(scopeName);
+
+				HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+				messageObj.put(0, "kick");
+
+				scopeApplicationAdapter.sendMessageById(messageObj, rcl.getStreamid(), currentScope);
+				scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByPublicSID]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public Boolean kickUserBySessionId(String SID, long userId, String sessionId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// admin only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+				WebClient client = Application.getClientByKeys(userId, sessionId);
+				if (client != null) {
+					Application.invalidateClient(client);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[kickUserBySessionId]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java b/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java
new file mode 100644
index 0000000..f7d10db
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java
@@ -0,0 +1,661 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.commons.collections.ComparatorUtils;
+import org.apache.openmeetings.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.data.whiteboard.WhiteBoardObjectSyncManager;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.Cliparts;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
+import org.apache.openmeetings.db.dto.room.WhiteboardSyncLockObject;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class WhiteBoardService implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteBoardService.class, "openmeetings");
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private final ScopeApplicationAdapter scopeApplicationAdapter = null;
+	@Autowired
+	private final ISessionManager sessionManager = null;
+	@Autowired
+	private final WhiteBoardObjectSyncManager whiteBoardObjectListManager = null;
+	@Autowired
+	private final WhiteBoardObjectListManagerById whiteBoardObjectListManagerById = null;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public Long getNewWhiteboardId() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Long whiteBoardId = this.whiteBoardObjectListManagerById
+					.getNewWhiteboardId(room_id);
+
+			return whiteBoardId;
+
+		} catch (Exception err) {
+			log.error("[deleteWhiteboard]", err);
+		}
+		return null;
+	}
+
+	public Boolean deleteWhiteboard(Long whiteBoardId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardObjectList whiteboardObjectList = this.whiteBoardObjectListManagerById
+					.getWhiteBoardObjectListByRoomId(room_id);
+
+			for (Iterator<Long> iter = whiteboardObjectList
+					.getWhiteboardObjects().keySet().iterator(); iter.hasNext();) {
+				Long storedWhiteboardId = iter.next();
+
+				log.debug(" :: storedWhiteboardId :: " + storedWhiteboardId);
+
+				if (storedWhiteboardId.equals(whiteBoardId)) {
+					log.debug("Found Whiteboard to Remove");
+				}
+			}
+			Object returnValue = whiteboardObjectList.getWhiteboardObjects()
+					.remove(whiteBoardId);
+
+			log.debug(" :: whiteBoardId :: " + whiteBoardId);
+
+			this.whiteBoardObjectListManagerById
+					.setWhiteBoardObjectListRoomObj(room_id,
+							whiteboardObjectList);
+
+			if (returnValue != null) {
+				return true;
+			} else {
+				return false;
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteWhiteboard]", err);
+		}
+		return null;
+	}
+
+	public WhiteboardObjectList getRoomItemsBy() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			log.debug("getRoomItems: " + room_id);
+			WhiteboardObjectList whiteboardObjectList = this.whiteBoardObjectListManagerById
+					.getWhiteBoardObjectListByRoomId(room_id);
+
+			if (whiteboardObjectList.getWhiteboardObjects().size() == 0) {
+
+				Long whiteBoardId = this.whiteBoardObjectListManagerById
+						.getNewWhiteboardId(room_id);
+
+				this.whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								new WhiteboardObject(), whiteBoardId);
+
+				log.debug("Init New Room List");
+
+				whiteboardObjectList = this.whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomId(room_id);
+
+				return whiteboardObjectList;
+
+			} else {
+
+				return whiteboardObjectList;
+
+			}
+
+			// return completeList;
+		} catch (Exception err) {
+			log.error("[getRoomItemsBy]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * change the draw status of a user, allow disallow him to draw anybody
+	 * besides the Moderator to draw on the whiteboard, only a Moderator is
+	 * allowed to trigger this function
+	 * 
+	 * @param SID
+	 * @param publicSID
+	 * @param canDraw
+	 * @return null in case of success, false otherwise
+	 */
+	public Boolean setCanDraw(String SID, String publicSID, boolean canDraw) {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanDraw(canDraw);
+						this.sessionManager.updateClientByStreamId(
+								rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						this.scopeApplicationAdapter
+								.sendMessageWithClientWithSyncObject(newMessage, true);
+
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanDraw]", err);
+		}
+		return null;
+	}
+
+	public Boolean setCanShare(String SID, String publicSID, boolean canShare) {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanShare(canShare);
+						this.sessionManager.updateClientByStreamId(
+								rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						this.scopeApplicationAdapter
+								.sendMessageWithClientWithSyncObject(newMessage, true);
+
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanDraw]", err);
+		}
+		return null;
+	}
+
+	public Boolean setCanRemote(String SID, String publicSID, boolean canRemote) {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanRemote(canRemote);
+						this.sessionManager.updateClientByStreamId(
+								rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						this.scopeApplicationAdapter
+								.sendMessageWithClientWithSyncObject(newMessage, true);
+
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanDraw]", err);
+		}
+		return null;
+	}
+
+    public Boolean setCanGiveAudio(String SID, String publicSID, boolean canGiveAudio) {
+		try {
+            log.debug("[setCanGiveAudio] " + SID + ", " + publicSID + ", " + canGiveAudio);
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanGiveAudio(canGiveAudio);
+				        this.sessionManager.updateClientByStreamId(
+				                rcl.getStreamid(), rcl, false, null);
+
+				        HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+				        newMessage.put(0, "updateGiveAudioStatus");
+				        newMessage.put(1, rcl);
+				        this.scopeApplicationAdapter
+				                .sendMessageWithClientWithSyncObject(newMessage, true);
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanGiveAudio]", err);
+		}
+		return null;
+	}
+
+	public WhiteboardSyncLockObject startNewSyncprocess() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardSyncLockObject wSyncLockObject = new WhiteboardSyncLockObject();
+			wSyncLockObject.setAddtime(new Date());
+			wSyncLockObject.setPublicSID(currentClient.getPublicSID());
+			wSyncLockObject.setInitialLoaded(true);
+
+			Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+					.getWhiteBoardSyncListByRoomid(room_id);
+
+			wSyncLockObject.setCurrentLoadingItem(true);
+			wSyncLockObject.setStarttime(new Date());
+
+			syncListRoom.put(currentClient.getPublicSID(), wSyncLockObject);
+			this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+					room_id, syncListRoom);
+			
+			//Sync to clients
+			this.scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncFlag", wSyncLockObject, true);
+
+			return wSyncLockObject;
+
+		} catch (Exception err) {
+			log.error("[startNewSyncprocess]", err);
+		}
+		return null;
+	}
+
+	public void sendCompletedSyncEvent() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+					.getWhiteBoardSyncListByRoomid(room_id);
+
+			WhiteboardSyncLockObject wSyncLockObject = syncListRoom
+					.get(currentClient.getPublicSID());
+
+			if (wSyncLockObject == null) {
+				log.error("WhiteboardSyncLockObject not found for this Client "
+						+ syncListRoom);
+				return;
+			} else if (!wSyncLockObject.isCurrentLoadingItem()) {
+				log.warn("WhiteboardSyncLockObject was not started yet "
+						+ syncListRoom);
+				return;
+			} else {
+				syncListRoom.remove(currentClient.getPublicSID());
+				this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+						room_id, syncListRoom);
+
+				int numberOfInitial = this
+						.getNumberOfInitialLoaders(syncListRoom);
+
+				if (numberOfInitial == 0) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncCompleteFlag", wSyncLockObject, true);
+				} else {
+					return;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[sendCompletedSyncEvent]", err);
+		}
+		return;
+	}
+
+	private int getNumberOfInitialLoaders(
+			Map<String, WhiteboardSyncLockObject> syncListRoom)
+			throws Exception {
+		int number = 0;
+		for (Iterator<String> iter = syncListRoom.keySet().iterator(); iter
+				.hasNext();) {
+			WhiteboardSyncLockObject lockObject = syncListRoom.get(iter.next());
+			if (lockObject.isInitialLoaded()) {
+				number++;
+			}
+		}
+		return number;
+	}
+
+	/*
+	 * Image Sync Sequence
+	 */
+
+	public void startNewObjectSyncProcess(String object_id, boolean isStarting) {
+		try {
+
+			log.debug("startNewObjectSyncprocess: " + object_id);
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardSyncLockObject wSyncLockObject = new WhiteboardSyncLockObject();
+			wSyncLockObject.setAddtime(new Date());
+			wSyncLockObject.setPublicSID(currentClient.getPublicSID());
+			wSyncLockObject.setStarttime(new Date());
+
+			Map<String, WhiteboardSyncLockObject> syncListImage = this.whiteBoardObjectListManager
+					.getWhiteBoardObjectSyncListByRoomAndObjectId(room_id,
+							object_id);
+			syncListImage.put(currentClient.getPublicSID(), wSyncLockObject);
+			this.whiteBoardObjectListManager
+					.setWhiteBoardImagesSyncListByRoomAndObjectId(room_id,
+							object_id, syncListImage);
+
+			// Do only send the Token to show the Loading Splash for the
+			// initial-Request that starts the loading
+			if (isStarting) {
+				scopeApplicationAdapter.sendMessageToCurrentScope("sendObjectSyncFlag", wSyncLockObject, true);
+			}
+
+		} catch (Exception err) {
+			log.error("[startNewObjectSyncProcess]", err);
+		}
+	}
+
+	public int sendCompletedObjectSyncEvent(String object_id) {
+		try {
+
+			log.debug("sendCompletedObjectSyncEvent: " + object_id);
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Map<String, WhiteboardSyncLockObject> syncListImage = this.whiteBoardObjectListManager
+					.getWhiteBoardObjectSyncListByRoomAndObjectId(room_id,
+							object_id);
+
+			log.debug("sendCompletedObjectSyncEvent syncListImage: "
+					+ syncListImage);
+
+			WhiteboardSyncLockObject wSyncLockObject = syncListImage
+					.get(currentClient.getPublicSID());
+
+			if (wSyncLockObject == null) {
+				log.error("WhiteboardSyncLockObject not found for this Client "
+						+ currentClient.getPublicSID());
+				log.error("WhiteboardSyncLockObject not found for this syncListImage "
+						+ syncListImage);
+				return -2;
+
+			} else {
+
+				log.debug("sendCompletedImagesSyncEvent remove: "
+						+ currentClient.getPublicSID());
+
+				syncListImage.remove(currentClient.getPublicSID());
+				this.whiteBoardObjectListManager
+						.setWhiteBoardImagesSyncListByRoomAndObjectId(room_id,
+								object_id, syncListImage);
+
+				int numberOfInitial = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id).size();
+
+				log.debug("sendCompletedImagesSyncEvent numberOfInitial: "
+						+ numberOfInitial);
+
+				if (numberOfInitial == 0) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendObjectSyncCompleteFlag", wSyncLockObject, true);
+					return 1;
+				} else {
+					return -4;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[sendCompletedObjectSyncEvent]", err);
+		}
+		return -1;
+	}
+
+	public synchronized void removeUserFromAllLists(IScope scope,
+			Client currentClient) {
+		try {
+
+			Long room_id = currentClient.getRoom_id();
+
+			// TODO: Maybe we should also check all rooms, independent from the
+			// current room_id if there is any user registered
+			if (room_id != null) {
+
+				log.debug("removeUserFromAllLists this.whiteBoardObjectListManager: "
+						+ this.whiteBoardObjectListManager);
+				log.debug("removeUserFromAllLists room_id: " + room_id);
+
+				// Check Initial Loaders
+				Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+						.getWhiteBoardSyncListByRoomid(room_id);
+
+				WhiteboardSyncLockObject wSyncLockObject = syncListRoom
+						.get(currentClient.getPublicSID());
+
+				if (wSyncLockObject != null) {
+					syncListRoom.remove(currentClient.getPublicSID());
+				}
+				this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+						room_id, syncListRoom);
+
+				int numberOfInitial = this
+						.getNumberOfInitialLoaders(syncListRoom);
+
+				log.debug("scope " + scope);
+
+				if (numberOfInitial == 0 && scope != null) {
+					
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncCompleteFlag", wSyncLockObject, false);
+					
+				}
+
+				// Check Image Loaders
+				Map<String, Map<String, WhiteboardSyncLockObject>> syncListRoomImages = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id);
+
+				for (Iterator<String> iter = syncListRoomImages.keySet()
+						.iterator(); iter.hasNext();) {
+					String object_id = iter.next();
+					Map<String, WhiteboardSyncLockObject> syncListImages = syncListRoomImages
+							.get(object_id);
+					WhiteboardSyncLockObject wImagesSyncLockObject = syncListImages
+							.get(currentClient.getPublicSID());
+					if (wImagesSyncLockObject != null) {
+						syncListImages.remove(currentClient.getPublicSID());
+					}
+					this.whiteBoardObjectListManager
+							.setWhiteBoardImagesSyncListByRoomAndObjectId(
+									room_id, object_id, syncListImages);
+				}
+
+				int numberOfImageLoaders = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id).size();
+
+				if (numberOfImageLoaders == 0 && scope != null) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendImagesSyncCompleteFlag", new Object[] { "remove" }, true);
+				}
+
+			}
+
+		} catch (Exception err) {
+			log.error("[removeUserFromAllLists]", err);
+		}
+	}
+
+	public Cliparts getClipArtIcons() {
+		try {
+			File clipart_dir = OmFileHelper.getPublicClipartsDir();
+
+			FilenameFilter getFilesOnly = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return !f.isDirectory();
+				}
+			};
+
+			FilenameFilter getDirectoriesOnly = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return f.isDirectory() && !f.getName().equals("thumb");
+				}
+			};
+
+			Cliparts cl = new Cliparts();
+			cl.setFolderName("general");
+
+			String[] files_general = clipart_dir.list(getFilesOnly);
+			@SuppressWarnings("unchecked")
+			Comparator<String> comparator = ComparatorUtils.naturalComparator();
+			Arrays.sort(files_general, comparator);
+
+			cl.setGeneralList(files_general);
+			cl.setSubCategories(new LinkedList<Cliparts>());
+
+			for (File dir : clipart_dir.listFiles(getDirectoriesOnly)) {
+				Cliparts cl_sub = new Cliparts();
+				cl_sub.setFolderName("math");
+				String[] files = dir.list(getFilesOnly);
+				Arrays.sort(files, comparator);
+				cl_sub.setGeneralList(files);
+				cl.getSubCategories().add(cl_sub);
+			}
+
+			return cl;
+
+		} catch (Exception err) {
+			log.error("[getClipArtIcons]", err);
+		}
+		return null;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("resultReceived: " + arg0);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java b/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
new file mode 100644
index 0000000..5d41a79
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
@@ -0,0 +1,2360 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote.red5;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.whiteboard.EmoticonsManager;
+import org.apache.openmeetings.data.whiteboard.WhiteboardManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.BrowserStatus;
+import org.apache.openmeetings.db.dto.room.RoomStatus;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.FLVRecorderService;
+import org.apache.openmeetings.remote.WhiteBoardService;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.Version;
+import org.apache.openmeetings.util.process.UploadCompleteMessage;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.adapter.ApplicationAdapter;
+import org.red5.server.api.IClient;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IBasicScope;
+import org.red5.server.api.scope.IBroadcastScope;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.scope.ScopeType;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.red5.server.api.stream.IBroadcastStream;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ScopeApplicationAdapter extends ApplicationAdapter implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(ScopeApplicationAdapter.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private EmoticonsManager emoticonsManager;
+	@Autowired
+	private WhiteBoardService whiteBoardService;
+	@Autowired
+	private WhiteboardManager whiteboardManagement;
+	@Autowired
+	private FLVRecorderService flvRecorderService;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private ConferenceLogDao conferenceLogDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private ServerDao serverDao;
+
+	private static AtomicLong broadCastCounter = new AtomicLong(0);
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public boolean appStart(IScope scope) {
+		try {
+			OmFileHelper.setOmHome(scope.getResource("/").getFile());
+			LabelDao.initLanguageMap();
+
+			log.debug("webAppPath : " + OmFileHelper.getOmHome());
+
+			// Only load this Class one time Initially this value might by empty, because the DB is empty yet
+			getCryptKey();
+
+			// init your handler here
+
+			// The scheduled Jobs did go into the Spring-Managed Beans, see schedulerJobs.service.xml
+
+			// Spring Definition does not work here, its too early, Instance is not set yet
+			emoticonsManager.loadEmot();
+
+			for (String scopeName : scope.getScopeNames()) {
+				log.debug("scopeName :: " + scopeName);
+			}
+			
+			InitializationContainer.initComplete = true;
+			Version.logOMStarted();
+			recordingDao.resetProcessingStatus(); //we are starting so all processing recordings are now errors
+		} catch (Exception err) {
+			log.error("[appStart]", err);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean roomConnect(IConnection conn, Object[] params) {
+		log.debug("roomConnect : ");
+
+		IServiceCapableConnection service = (IServiceCapableConnection) conn;
+		String streamId = conn.getClient().getId();
+		
+		boolean isAVClient = params.length == 1 ? Boolean.valueOf("" + params[0]) : false;
+
+		log.debug("### Client connected to OpenMeetings, register Client StreamId: " + streamId + " scope "
+				+ conn.getScope().getName() + " isAVClient " + isAVClient);
+
+		// Set StreamId in Client
+		service.invoke("setId", new Object[] { streamId }, this);
+
+		Map<String, Object> map = conn.getConnectParams();
+		String swfURL = map.containsKey("swfUrl") ? (String)map.get("swfUrl") : "";
+
+		//TODO add similar code for other connections
+		if (map.containsKey("screenClient")) {
+			String parentSid = (String)map.get("parentSid");
+			Client parentClient = sessionManager.getClientByPublicSID(parentSid, false, null);
+			if (parentClient == null) {
+				rejectClient();
+			}
+		}
+		Client rcm = sessionManager.addClientListItem(conn.getClient().getId(),
+				conn.getScope().getName(), conn.getRemotePort(),
+				conn.getRemoteAddress(), swfURL, isAVClient, null);
+		
+		SessionVariablesUtil.initClient(conn.getClient(), isAVClient, rcm.getPublicSID());
+		//TODO add similar code for other connections, merge with above block
+		if (map.containsKey("screenClient")) {
+			//TODO add check for room rights
+			String parentSid = (String)map.get("parentSid");
+			rcm.setRoom_id(Long.parseLong(conn.getScope().getName()));
+			rcm.setIsScreenClient(true);
+			SessionVariablesUtil.setIsScreenClient(conn.getClient());
+			
+			rcm.setUser_id(((Integer)map.get("userId")).longValue());
+			SessionVariablesUtil.setUserId(conn.getClient(), rcm.getUser_id());
+
+			rcm.setStreamPublishName(parentSid);
+			User u = usersDao.get(rcm.getUser_id() < 0 ? -rcm.getUser_id() : rcm.getUser_id());
+			rcm.setUsername(u.getLogin());
+			rcm.setFirstname(u.getFirstname());
+			rcm.setLastname(u.getLastname());
+			log.debug("publishName :: " + rcm.getStreamPublishName());
+			sessionManager.updateClientByStreamId(streamId, rcm, false, null);
+		}
+
+		// Log the User
+		conferenceLogDao.addConferenceLog("ClientConnect",
+				rcm.getUser_id(), streamId, null, rcm.getUserip(),
+				rcm.getScope(), rcm.getExternalUserId(),
+				rcm.getExternalUserType(), rcm.getEmail(),
+				rcm.getFirstname(), rcm.getLastname());
+		return true;
+	}
+
+	public Map<String, String> screenSharerAction(Map<String, Object> map) {
+		try {
+			log.debug("-----------  screenSharerAction ENTER");
+			IConnection current = Red5.getConnectionLocal();
+
+			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+
+			Map<String, String> returnMap = new HashMap<String, String>();
+
+			if (client != null) {
+				boolean changed = false;
+				if (Boolean.valueOf("" + map.get("stopStreaming")) && client.isStartStreaming()) {
+					changed = true;
+					client.setStartStreaming(false);
+					//Send message to all users
+					sendMessageToCurrentScope("stopScreenSharingMessage", client, false);
+					
+					returnMap.put("result", "stopSharingOnly");
+				}
+				if (Boolean.valueOf("" + map.get("stopRecording")) && client.getIsRecording()) {
+					changed = true;
+					client.setStartRecording(false);
+					client.setIsRecording(false);
+					
+					returnMap.put("result", "stopRecordingOnly");
+					//Send message to all users
+					sendMessageToCurrentScope("stopRecordingMessage", client, false);
+
+					flvRecorderService.stopRecordAndSave(current.getScope(), client, null);
+				}
+				if (Boolean.valueOf("" + map.get("stopPublishing")) && client.isScreenPublishStarted()) {
+					changed = true;
+					client.setScreenPublishStarted(false);
+					returnMap.put("result", "stopPublishingOnly");
+					
+					//Send message to all users
+					sendMessageToCurrentScope("stopPublishingMessage", client, false);
+				}
+				
+				if (changed) {
+					sessionManager.updateClientByStreamId(client.getStreamid(), client, false, null);
+					
+					if (!client.isStartStreaming() && !client.isStartRecording() && !client.isStreamPublishStarted()) {
+						returnMap.put("result", "stopAll");
+					}
+				}
+			}
+			log.debug("-----------  screenSharerAction, return: " + returnMap);
+			return returnMap;
+		} catch (Exception err) {
+			log.error("[screenSharerAction]", err);
+		}
+		return null;
+	}
+
+	public List<Client> checkScreenSharing() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("checkScreenSharing -2- " + streamid);
+
+			List<Client> screenSharerList = new LinkedList<Client>();
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			for (Client rcl : sessionManager.getClientListByRoomAll(currentClient.getRoom_id())) {
+				if (rcl.isStartStreaming()) {
+					screenSharerList.add(rcl);
+				}
+			}
+
+			return screenSharerList;
+
+		} catch (Exception err) {
+			log.error("[checkScreenSharing]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param map
+	 * @return returns key,value Map with multiple return values or null in case of exception
+	 * 
+	 */
+	public Map<String, Object> setConnectionAsSharingClient(Map<String, Object> map) {
+		try {
+			log.debug("-----------  setConnectionAsSharingClient");
+			IConnection current = Red5.getConnectionLocal();
+
+			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+
+			if (client != null) {
+				boolean startRecording = Boolean.valueOf("" + map.get("startRecording"));
+				boolean startStreaming = Boolean.valueOf("" + map.get("startStreaming"));
+				boolean startPublishing = Boolean.valueOf("" + map.get("startPublishing")) && (0 == sessionManager.getPublishingCount(client.getRoom_id()));
+
+				boolean alreadyStreaming = client.isStartStreaming();
+				if (startStreaming) {
+					client.setStartStreaming(true);
+				}
+				boolean alreadyRecording = client.isStartRecording();
+				if (startRecording) {
+					client.setStartRecording(true);
+				}
+				if (startPublishing) {
+					client.setStreamPublishStarted(true);
+				}
+
+				client.setVX(Integer.parseInt(map.get("screenX").toString()));
+				client.setVY(Integer.parseInt(map.get("screenY").toString()));
+				client.setVWidth(Integer.parseInt(map.get("screenWidth").toString()));
+				client.setVHeight(Integer.parseInt(map.get("screenHeight").toString()));
+				sessionManager.updateClientByStreamId(current.getClient().getId(), client, false, null);
+
+				Map<String, Object> returnMap = new HashMap<String, Object>();
+				returnMap.put("alreadyPublished", false);
+
+				// if is already started screen sharing, then there is no need
+				// to start it again
+				if (client.isScreenPublishStarted()) {
+					returnMap.put("alreadyPublished", true);
+				}
+
+				log.debug(String.format("screen x,y,width,height %s,%s,%s,%s", client.getVX(), client.getVY(), client.getVWidth(), client.getVHeight()));
+
+				if (startStreaming) {
+					if (!alreadyStreaming) {
+						returnMap.put("modus", "startStreaming");
+	
+						log.debug("start streamPublishStart Is Screen Sharing ");
+						
+						//Send message to all users
+						sendMessageToCurrentScope("newScreenSharing", client, false);
+					} else {
+						log.warn("Streaming is already started for the client id=" + client.getId() + ". Second request is ignored.");
+					}
+				}
+				if (startRecording) {
+					if (!alreadyRecording) {
+						returnMap.put("modus", "startRecording");
+	
+						String recordingName = "Recording " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
+	
+						flvRecorderService.recordMeetingStream(current, client, recordingName, "", false);
+					} else {
+						log.warn("Recording is already started for the client id=" + client.getId() + ". Second request is ignored.");
+					}
+				}
+				if (startPublishing) {
+					sendMessageToCurrentScope("startedPublishing", new Object[]{client, "rtmp://" + map.get("publishingHost") + ":1935/"
+							+ map.get("publishingApp") + "/" + map.get("publishingId")}, false, true);
+					returnMap.put("modus", "startPublishing");
+				}
+				return returnMap;
+
+			} else {
+				throw new Exception("Could not find Screen Sharing Client " + current.getClient().getId());
+			}
+
+		} catch (Exception err) {
+			log.error("[setConnectionAsSharingClient]", err);
+		}
+		return null;
+	}
+
+    public synchronized List<Integer> listRoomBroadcast() {
+    	HashSet<Integer> broadcastList = new HashSet<Integer>();
+        IConnection current = Red5.getConnectionLocal();
+        String streamid = current.getClient().getId();
+        for (IConnection conn : current.getScope().getClientConnections()) {
+            if (conn != null) {
+                Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+                if (rcl == null) {
+                    // continue;
+                } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
+                    // continue;
+                } else {
+                    if (!streamid.equals(rcl.getStreamid())) {
+                        // It is not needed to send back
+                        // that event to the actuall
+                        // Moderator
+                        // as it will be already triggered
+                        // in the result of this Function
+                        // in the Client
+                    	int id = (int)rcl.getBroadCastID();
+                    	if (!broadcastList.contains(id)) {
+                    		broadcastList.add(id);
+                    	}
+                    }
+                }
+            }
+        }
+        return new ArrayList<Integer>(broadcastList);
+    }
+
+
+	/**
+	 * this function is invoked directly after initial connecting
+	 * 
+	 * @return publicSID of current client
+	 */
+	public String getPublicSID() {
+		log.debug("-----------  getPublicSID");
+		IConnection current = Red5.getConnectionLocal();
+		Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		sessionManager.updateClientByStreamId(current.getClient().getId(), currentClient, false, null);
+		return currentClient.getPublicSID();
+	}
+
+	/**
+	 * this function is invoked after a reconnect
+	 * 
+	 * @param newPublicSID
+	 */
+	public Boolean overwritePublicSID(String newPublicSID) {
+		try {
+			log.debug("-----------  overwritePublicSID");
+			IConnection current = Red5.getConnectionLocal();
+			IClient c = current.getClient();
+			Client currentClient = sessionManager.getClientByStreamId(c.getId(), null);
+			if (currentClient == null) {
+				return false;
+			}
+			SessionVariablesUtil.initClient(c, SessionVariablesUtil.isAVClient(c), newPublicSID);
+			currentClient.setPublicSID(newPublicSID);
+			sessionManager.updateClientByStreamId(c.getId(), currentClient, false, null);
+			return true;
+		} catch (Exception err) {
+			log.error("[overwritePublicSID]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Logic must be before roomDisconnect cause otherwise you cannot throw a
+	 * message to each one
+	 * 
+	 */
+	@Override
+	public void roomLeave(IClient client, IScope room) {
+		try {
+			log.debug(String.format("roomLeave %s %s %s %s", client.getId(), room.getClients().size(), room.getContextPath(), room.getName()));
+
+			Client currentClient = sessionManager.getClientByStreamId(client.getId(), null);
+
+			// The Room Client can be null if the Client left the room by using
+			// logicalRoomLeave
+			if (currentClient != null) {
+				log.debug("currentClient IS NOT NULL");
+				roomLeaveByScope(currentClient, room, true);
+			}
+		} catch (Exception err) {
+			log.error("[roomLeave]", err);
+		}
+	}
+
+	/**
+	 * this means a user has left a room but only logically, he didn't leave the
+	 * app he just left the room
+	 * 
+	 * FIXME: Is this really needed anymore if you re-connect to another scope?
+	 * 
+	 * Exit Room by Application
+	 * 
+	 */
+	public void logicalRoomLeave() {
+		log.debug("logicalRoomLeave ");
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug(streamid + " is leaving");
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			roomLeaveByScope(currentClient, current.getScope(), true);
+		} catch (Exception err) {
+			log.error("[logicalRoomLeave]", err);
+		}
+	}
+
+	/**
+	 * Removes the Client from the List, stops recording, adds the Room-Leave
+	 * event to running recordings, clear Polls and removes Client from any list
+	 * 
+	 * This function is kind of private/protected as the client won't be able 
+	 * to call it with proper values.
+	 * 
+	 * @param currentClient
+	 * @param currentScope
+	 */
+	public void roomLeaveByScope(Client currentClient, IScope currentScope, boolean removeUserFromSessionList) {
+		try {
+			log.debug("currentClient " + currentClient);
+			Long room_id = currentClient.getRoom_id();
+
+			// Log the User
+			conferenceLogDao.addConferenceLog("roomLeave",
+					currentClient.getUser_id(), currentClient.getStreamid(),
+					room_id, currentClient.getUserip(), "",
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+
+			// Remove User from Sync List's
+			if (room_id != null) {
+				whiteBoardService.removeUserFromAllLists(currentScope, currentClient);
+			}
+
+			log.debug("removing USername " + currentClient.getUsername() + " "
+					+ currentClient.getConnectedSince() + " streamid: "
+					+ currentClient.getStreamid());
+
+			// stop and save any recordings
+			if (currentClient.getIsRecording()) {
+				log.debug("*** roomLeave Current Client is Recording - stop that");
+				if (currentClient.getInterviewPodId() != null) {
+					//interview, TODO need better check
+					_stopInterviewRecording(currentClient, currentScope);
+				} else {
+					flvRecorderService.stopRecordAndSave(currentScope, currentClient, null);
+
+					// set to true and overwrite the default one cause otherwise no
+					// notification is send
+					currentClient.setIsRecording(true);
+				}
+			}
+
+			// Notify all clients of the same currentScope (room) with domain
+			// and room except the current disconnected cause it could throw an exception
+			log.debug("currentScope " + currentScope);
+
+			if (currentScope != null && currentScope.getClientConnections() != null) {
+				// Notify Users of the current Scope
+				for (IConnection cons : currentScope.getClientConnections()) {
+					if (cons != null && cons instanceof IServiceCapableConnection) {
+						log.debug("sending roomDisconnect to {}  client id {}", cons, cons.getClient().getId());
+
+						Client rcl = sessionManager.getClientByStreamId(cons.getClient().getId(), null);
+
+						// Check if the Client does still exist on the list
+						if (rcl == null) {
+							log.debug("For this StreamId: " + cons.getClient().getId() + " There is no Client in the List anymore");
+							continue;
+						}
+						
+						//Do not send back to sender, but actually all other clients should receive this message swagner 01.10.2009
+						if (!currentClient.getStreamid().equals(rcl.getStreamid())) {
+							// add Notification if another user isrecording
+							log.debug("###########[roomLeave]");
+							if (rcl.getIsRecording()) {
+								log.debug("*** roomLeave Any Client is Recording - stop that");
+								flvRecorderService.stopRecordingShowForClient(cons, currentClient);
+							}
+							
+							//If the user was a avclient, we do not broadcast a message about that to everybody
+							if (currentClient.getIsAVClient()) {
+								continue;
+							}
+							
+							boolean isScreen = rcl.getIsScreenClient() != null && rcl.getIsScreenClient();
+							if (isScreen && currentClient.getPublicSID().equals(rcl.getStreamPublishName())) {
+								//going to terminate screen sharing started by this client
+								((IServiceCapableConnection) cons).invoke("stopStream", new Object[] { },this);
+								continue;
+							} else if (isScreen) {
+								// screen sharing clients do not receive events
+								continue;
+							} else if (rcl.getIsAVClient()) {
+								// AVClients or potential AVClients do not receive events
+								continue;
+							}
+							
+							// Send to all connected users
+							((IServiceCapableConnection) cons).invoke("roomDisconnect", new Object[] { currentClient },this);
+							log.debug("sending roomDisconnect to " + cons);
+						}
+					}
+				}
+			}
+
+			if (removeUserFromSessionList) {
+				sessionManager.removeClient(currentClient.getStreamid(), null);
+			}
+		} catch (Exception err) {
+			log.error("[roomLeaveByScope]", err);
+		}
+	}
+
+	/**
+	 * This method handles the Event after a stream has been added all connected
+	 * Clients in the same room will get a notification
+	 * 
+	 */
+	/* (non-Javadoc)
+	 * @see org.red5.server.adapter.MultiThreadedApplicationAdapter#streamPublishStart(org.red5.server.api.stream.IBroadcastStream)
+	 */
+	@Override
+	public void streamPublishStart(IBroadcastStream stream) {
+		try {
+			log.debug("-----------  streamPublishStart");
+			IConnection current = Red5.getConnectionLocal();
+			final String streamid = current.getClient().getId();
+			final Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			//We make a second object the has the reference to the object 
+			//that we will use to send to all participents
+			Client clientObjectSendToSync = currentClient;
+			
+			// Notify all the clients that the stream had been started
+			log.debug("start streamPublishStart broadcast start: " + stream.getPublishedName() + " CONN " + current);
+
+			// In case its a screen sharing we start a new Video for that
+			if (currentClient.getIsScreenClient()) {
+				currentClient.setScreenPublishStarted(true);
+				sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			}
+			//If its an audio/video client then send the session object with the full data to everybody
+			else if (currentClient.getIsAVClient()) {
+				clientObjectSendToSync = sessionManager.getClientByPublicSID(currentClient.getPublicSID(), false, null);
+			}
+			
+			log.debug("newStream SEND: " + currentClient);
+
+			// Notify all users of the same Scope
+			// We need to iterate through the streams to catch if anybody is recording
+			new MessageSender(current, "newStream", clientObjectSendToSync) {
+				@Override
+				public boolean filter(IConnection conn) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+					
+					if (rcl == null) {
+						log.debug("RCL IS NULL newStream SEND");
+						return true;
+					}
+					
+					log.debug("check send to "+rcl);
+					
+					if (rcl.getPublicSID() == "") {
+						log.debug("publicSID IS NULL newStream SEND");
+						return true;
+					}
+					if (rcl.getIsRecording()) {
+						log.debug("RCL getIsRecording newStream SEND");
+						flvRecorderService.addRecordingByStreamId(current, streamid, currentClient, rcl.getFlvRecordingId());
+					}
+					if (rcl.getIsAVClient()) {
+						log.debug("RCL getIsAVClient newStream SEND");
+						return true;
+					}
+					if (rcl.getIsScreenClient() == null || rcl.getIsScreenClient()) {
+						log.debug("RCL getIsScreenClient newStream SEND");
+						return true;
+					}
+					
+					if (rcl.getPublicSID().equals(currentClient.getPublicSID())) {
+						log.debug("RCL publicSID is equal newStream SEND");
+						return true;
+					}
+					log.debug("RCL SEND is equal newStream SEND "+rcl.getPublicSID()+" || "+rcl.getUserport());
+					return false;
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[streamPublishStart]", err);
+		}
+	}
+
+	public IBroadcastScope getBroadcastScope(IScope scope, String name) {
+		IBasicScope basicScope = scope.getBasicScope(ScopeType.BROADCAST, name);
+		if (!(basicScope instanceof IBroadcastScope)) {
+			return null;
+		} else {
+			return (IBroadcastScope) basicScope;
+		}
+	}
+
+	/**
+	 * This method handles the Event after a stream has been removed all
+	 * connected Clients in the same room will get a notification
+	 * 
+	 */
+	/* (non-Javadoc)
+	 * @see org.red5.server.adapter.MultiThreadedApplicationAdapter#streamBroadcastClose(org.red5.server.api.stream.IBroadcastStream)
+	 */
+	@Override
+	public void streamBroadcastClose(IBroadcastStream stream) {
+
+		// Notify all the clients that the stream had been closed
+		log.debug("start streamBroadcastClose broadcast close: " + stream.getPublishedName());
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client rcl = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			sendClientBroadcastNotifications(stream, "closeStream", rcl);
+		} catch (Exception e) {
+			log.error("[streamBroadcastClose]", e);
+		}
+	}
+
+	/**
+	 * This method handles the notification room-based
+	 * 
+	 * @return void
+	 * 
+	 */
+	private synchronized void sendClientBroadcastNotifications(IBroadcastStream stream, String clientFunction, Client rc) {
+		try {
+			// Store the local so that we do not send notification to ourself back
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			if (currentClient == null) {
+
+				// In case the client has already left(kicked) this message
+				// might be thrown later then the RoomLeave
+				// event and the currentClient is already gone
+				// The second Use-Case where the currentClient is maybe null is
+				// if we remove the client because its a Zombie/Ghost
+
+				return;
+
+			}
+			// Notify all the clients that the stream had been started
+			log.debug("sendClientBroadcastNotifications: " + stream.getPublishedName());
+			log.debug("sendClientBroadcastNotifications : " + currentClient + " " + currentClient.getStreamid());
+
+			// Notify all clients of the same scope (room)
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						if (conn.equals(current)) {
+							// there is a Bug in the current implementation
+							// of the appDisconnect
+							if (clientFunction.equals("closeStream")) {
+								Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+								if (clientFunction.equals("closeStream") && rcl.getIsRecording()) {
+									log.debug("*** stopRecordingShowForClient Any Client is Recording - stop that");
+									// StreamService.stopRecordingShowForClient(conn,
+									// currentClient,
+									// rcl.getRoomRecordingName(), false);
+									flvRecorderService.stopRecordingShowForClient(conn, currentClient);
+								}
+								// Don't notify current client
+								current.ping();
+							}
+							continue;
+						} else {
+							Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+							if (rcl != null) {
+								if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
+									// continue;
+								} else {
+									log.debug("is this users still alive? :" + rcl);
+									IServiceCapableConnection iStream = (IServiceCapableConnection) conn;
+									iStream.invoke(clientFunction, new Object[] { rc }, this);
+								}
+
+								log.debug("sending notification to " + conn + " ID: ");
+
+								// if this close stream event then stop the
+								// recording of this stream
+								if (clientFunction.equals("closeStream") && rcl.getIsRecording()) {
+									log.debug("***  +++++++ ######## sendClientBroadcastNotifications Any Client is Recording - stop that");
+									flvRecorderService.stopRecordingShowForClient(conn, currentClient);
+								}
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendClientBroadcastNotifications]", err);
+		}
+	}
+
+
+	/**
+	 * Adds a Moderator by its publicSID
+	 * 
+	 * @param publicSID
+	 * @return -1
+	 */
+	public synchronized Long addModerator(String publicSID) {
+		try {
+			log.debug("-----------  addModerator: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+			Long room_id = currentClient.getRoom_id();
+
+			currentClient.setIsMod(true);
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			List<Client> currentMods = sessionManager.getCurrentModeratorByRoom(room_id);
+			
+			//Send message to all users
+			sendMessageToCurrentScope("setNewModeratorByList", currentMods, true);
+
+		} catch (Exception err) {
+			log.error("[addModerator]", err);
+		}
+		return -1L;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void setNewCursorPosition(Object item) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			@SuppressWarnings("rawtypes")
+			Map cursor = (Map) item;
+			cursor.put("streamPublishName", currentClient.getStreamPublishName());
+
+			sendMessageToCurrentScope("newRed5ScreenCursor", cursor, true, false);
+		} catch (Exception err) {
+			log.error("[setNewCursorPosition]", err);
+		}
+	}
+
+	public Long removeModerator(String publicSID) {
+		try {
+			log.debug("-----------  removeModerator: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+			Long room_id = currentClient.getRoom_id();
+
+			currentClient.setIsMod(false);
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			List<Client> currentMods = sessionManager.getCurrentModeratorByRoom(room_id);
+
+			sendMessageToCurrentScope("setNewModeratorByList", currentMods, true);
+		} catch (Exception err) {
+			log.error("[addModerator]", err);
+		}
+		return -1L;
+	}
+
+	public Long setBroadCastingFlag(String publicSID, boolean value, boolean canVideo, Integer interviewPodId) {
+		try {
+			log.debug("-----------  setBroadCastingFlag: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			currentClient.setIsBroadcasting(value);
+			currentClient.setCanVideo(value && canVideo); //set to false in case NOT broadcasting
+			currentClient.setInterviewPodId(interviewPodId);
+
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+		    
+			// Notify all clients of the same scope (room)
+			sendMessageToCurrentScope("setNewBroadCastingFlag", currentClient, true);
+		} catch (Exception err) {
+			log.error("[setBroadCastingFlag]", err);
+		}
+		return -1L;
+	}
+
+	public Long giveExclusiveAudio(String publicSID) {
+		try {
+			log.debug("-----------  giveExclusiveAudio: " + publicSID);
+
+			IConnection current = Red5.getConnectionLocal();
+			// String streamid = current.getClient().getId();
+
+			final Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			// Put the mod-flag to true for this client
+			currentClient.setMicMuted(false);
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			// Notify all clients of the same scope (room)
+			new MessageSender(current, "receiveExclusiveAudioFlag", currentClient) {
+				@Override
+				public boolean filter(IConnection conn) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+					if (rcl == null) {
+					} else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
+					} else {
+						if (rcl != currentClient) {
+							rcl.setMicMuted(true);
+							sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+						}
+						return false;
+					}
+					return true;
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[giveExclusiveAudio]", err);
+		}
+		return -1L;
+	}
+
+	public Long switchMicMuted(String publicSID, boolean mute) {
+		try {
+			log.debug("-----------  switchMicMuted: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			currentClient.setMicMuted(mute);
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+			newMessage.put(0, "updateMuteStatus");
+			newMessage.put(1, currentClient);
+			sendMessageWithClient(newMessage);
+		} catch (Exception err) {
+			log.error("[switchMicMuted]", err);
+		}
+		return 0L;
+	}
+
+	public Boolean getMicMutedByPublicSID(String publicSID) {
+		try {
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (currentClient == null) {
+				return true;
+			}
+
+			//Put the mod-flag to true for this client
+			Boolean muted = currentClient.getMicMuted();
+			if (null == muted) {
+				muted = true;
+			}
+
+			return muted;
+		} catch (Exception err) {
+			log.error("[getMicMutedByPublicSID]",err);
+		}
+		return true;
+	}
+
+	/**
+	 * Invoked by a User whenever he want to become moderator this is needed,
+	 * cause if the room has no moderator yet there is no-one he can ask to get
+	 * the moderation, in case its a Non-Moderated Room he should then get the
+	 * Moderation without any confirmation needed
+	 * 
+	 * @return Long 1 => means get Moderation, 2 => ask Moderator for
+	 *         Moderation, 3 => wait for Moderator
+	 */
+	public synchronized Long applyForModeration(String publicSID) {
+		try {
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			List<Client> currentModList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+			if (currentModList.size() > 0) {
+				return 2L;
+			} else {
+				// No moderator in this room at the moment
+				Room room = roomDao.get(currentClient.getRoom_id());
+
+				return room.getIsModeratedRoom() ? 3L : 1L;
+			}
+
+		} catch (Exception err) {
+			log.error("[applyForModeration]", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * there will be set an attribute called "broadCastCounter" this is the name
+	 * this user will publish his stream
+	 * 
+	 * @return long broadCastId
+	 */
+	public long getBroadCastId() {
+		try {
+			log.debug("-----------  getBroadCastId");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client client = sessionManager.getClientByStreamId(streamid, null);
+			client.setBroadCastID(broadCastCounter.getAndIncrement());
+			sessionManager.updateClientByStreamId(streamid, client, false, null);
+			return client.getBroadCastID();
+		} catch (Exception err) {
+			log.error("[getBroadCastId]", err);
+		}
+		return -1;
+	}
+
+	/**
+	 * this must be set _after_ the Video/Audio-Settings have been chosen (see
+	 * editrecordstream.lzx) but _before_ anything else happens, it cannot be
+	 * applied _after_ the stream has started! avsettings can be: av - video and
+	 * audio a - audio only v - video only n - no a/v only static image
+	 * furthermore
+	 * 
+	 * @param avsettings
+	 * @param newMessage
+	 * @param vWidth
+	 * @param vHeight
+	 * @param room_id
+	 * @param publicSID
+	 * @param interviewPodId
+	 * @return RoomClient being updated in case of no errors, null otherwise
+	 */
+	public Client setUserAVSettings(String avsettings,
+			Object newMessage, Integer vWidth, Integer vHeight, 
+			long room_id, String publicSID, Integer interviewPodId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			IClient c = current.getClient();
+			String streamid = c.getId();
+			log.debug("-----------  setUserAVSettings {} {} {}", new Object[] {streamid, publicSID, avsettings, newMessage});
+			Client parentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			currentClient.setAvsettings(avsettings);
+			currentClient.setRoom_id(room_id);
+			currentClient.setPublicSID(publicSID);
+			currentClient.setVWidth(vWidth);
+			currentClient.setVHeight(vHeight);
+			currentClient.setInterviewPodId(interviewPodId);
+			currentClient.setUser_id(parentClient.getUser_id());
+			currentClient.setLastname(parentClient.getLastname());
+			currentClient.setFirstname(parentClient.getFirstname());
+			currentClient.setPicture_uri(parentClient.getPicture_uri());
+			sessionManager.updateAVClientByStreamId(streamid, currentClient, null);
+			SessionVariablesUtil.initClient(c, false, publicSID);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUserAVSettings]", err);
+		}
+		return null;
+	}
+
+	/*
+	 * checks if the user is allowed to apply for Moderation
+	 */
+	public Boolean checkRoomValues(Long room_id) {
+		try {
+
+			// appointed meeting or moderated Room?
+			Room room = roomDao.get(room_id);
+
+			// not really - default logic
+			if (room.getAppointment() == null || room.getAppointment() == false) {
+				if (room.getIsModeratedRoom()) {
+					// if this is a Moderated Room then the Room can be only
+					// locked off by the Moderator Bit
+					List<Client> clientModeratorListRoom = sessionManager.getCurrentModeratorByRoom(room_id);
+
+					// If there is no Moderator yet and we are asking for it
+					// then deny it
+					// cause at this moment, the user should wait untill a
+					// Moderator enters the Room
+					return clientModeratorListRoom.size() != 0;
+				} else {
+					return true;
+				}
+			} else {
+				// FIXME: TODO: For Rooms that are created as Appointment we
+				// have to check that too
+				// but I don't know yet the Logic behind it - swagner 19.06.2009
+				return true;
+
+			}
+		} catch (Exception err) {
+			log.error("[checkRoomValues]", err);
+		}
+		return false;
+	}
+
+	/**
+	 * This function is called once a User enters a Room
+	 * 
+	 * It contains several different mechanism depending on what roomtype and
+	 * what options are available for the room to find out if the current user
+	 * will be a moderator of that room or not<br/>
+	 * <br/>
+	 * Some rules:<br/>
+	 * <ul>
+	 * <li>If it is a room that was created through the calendar, the user that
+	 * organized the room will be moderator, the param Boolean becomeModerator
+	 * will be ignored then</li>
+	 * <li>In regular rooms you can use the param Boolean becomeModerator to set
+	 * any user to become a moderator of the room</li>
+	 * </ul>
+	 * <br/>
+	 * If a new moderator is detected a Push Call to all current users of the
+	 * room is invoked "setNewModeratorByList" to notify them of the new
+	 * moderator<br/>
+	 * <br/>
+	 * At the end of the mechanism a push call with the new client-object
+	 * and all the informations about the new user is send to every user of the
+	 * current conference room<br/>
+	 * <br/>
+	 *
+	 * @param room_id - id of the room
+	 * @param becomeModerator - is user will become moderator
+	 * @param isSuperModerator - is user super moderator
+	 * @param organization_id - organization id of the user
+	 * @param colorObj - some color
+	 * @return RoomStatus object
+	 */
+	public synchronized RoomStatus setRoomValues(Long room_id, Boolean becomeModerator, Boolean isSuperModerator,
+			Long organization_id, String colorObj) {
+		try {
+			log.debug("-----------  setRoomValues");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			currentClient.setRoom_id(room_id);
+			currentClient.setRoomEnter(new Date());
+			currentClient.setOrganization_id(organization_id);
+
+			currentClient.setUsercolor(colorObj);
+
+			// Inject externalUserId if nothing is set yet
+			if (currentClient.getExternalUserId() == null) {
+				if (currentClient.getUser_id() != null) {
+					User us = usersDao.get(currentClient.getUser_id());
+					if (us != null) {
+						currentClient.setExternalUserId(us.getExternalUserId());
+						currentClient.setExternalUserType(us.getExternalUserType());
+					}
+				}
+			}
+
+			// This can be set without checking for Moderation Flag
+			currentClient.setIsSuperModerator(isSuperModerator);
+
+			sessionManager.updateClientByStreamId(streamid, currentClient, true, null);
+
+            Room room = roomDao.get(room_id);
+            if (room.getShowMicrophoneStatus()) {
+            	currentClient.setCanGiveAudio(true);
+            }
+
+			// Log the User
+			conferenceLogDao.addConferenceLog("roomEnter",
+					currentClient.getUser_id(), streamid, room_id,
+					currentClient.getUserip(), "",
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+			
+			// Check for Moderation LogicalRoom ENTER
+			List<Client> clientListRoom = sessionManager.getClientListByRoom(room_id);
+
+			// Return Object
+			RoomStatus roomStatus = new RoomStatus();
+			// appointed meeting or moderated Room? => Check Max Users first
+			if (room.getNumberOfPartizipants() != null && clientListRoom.size() > room.getNumberOfPartizipants()) {
+				roomStatus.setRoomFull(true);
+				return roomStatus;
+			}
+
+			// default logic for non regular rooms
+			if (room.getAppointment() == null || room.getAppointment() == false) {
+				if (room.getIsModeratedRoom()) {
+					// if this is a Moderated Room then the Room can be only
+					// locked off by the Moderator Bit
+					// List<RoomClient> clientModeratorListRoom =
+					// this.sessionManager.getCurrentModeratorByRoom(room_id);
+
+					// If there is no Moderator yet we have to check if the
+					// current User has the Bit set to true to
+					// become one, otherwise he won't get Moderation and has to
+					// wait
+					if (becomeModerator) {
+						currentClient.setIsMod(true);
+
+						// There is a need to send an extra Event here, cause at
+						// this moment there could be
+						// already somebody in the Room waiting
+
+						// Update the Client List
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+						List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+						
+						//Sync message to everybody
+						sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+					} else {
+						// The current User is not a Teacher/Admin or whatever
+						// Role that should get the
+						// Moderation
+						currentClient.setIsMod(false);
+					}
+				} else {
+					// If this is a normal Room Moderator rules : first come, first draw ;-)
+					log.debug("setRoomValues : Room"
+							+ room_id
+							+ " not appointed! Moderator rules : first come, first draw ;-)");
+					if (clientListRoom.size() == 1) {
+						log.debug("Room is empty so set this user to be moderation role");
+						currentClient.setIsMod(true);
+					} else {
+						log.debug("Room is already somebody so set this user not to be moderation role");
+
+						if (becomeModerator) {
+							currentClient.setIsMod(true);
+
+							// Update the Client List
+							sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+							List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+							// There is a need to send an extra Event here,
+							// cause at this moment there could be
+							// already somebody in the Room waiting -swagner check this comment, 20.01.2012
+							
+							//Sync message to everybody
+							sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+
+						} else {
+							// The current User is not a Teacher/Admin or
+							// whatever Role that should get the Moderation
+							currentClient.setIsMod(false);
+						}
+					}
+				}
+
+				// Update the Client List
+				sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			} else {
+				// If this is an Appointment then the Moderator will be set to the Invitor
+
+				Appointment ment = appointmentLogic.getAppointmentByRoom(room_id);
+
+				Long userIdInRoomClient = currentClient.getUser_id();
+
+				boolean found = false;
+				boolean moderator_set = false;
+				// First check owner who is not in the members list
+				if (ment.getOwner().getUser_id().equals(userIdInRoomClient)) {
+					found = true;
+					log.debug("User "
+							+ userIdInRoomClient
+							+ " is moderator due to flag in MeetingMember record");
+					currentClient.setIsMod(true);
+					moderator_set = true;
+
+					// Update the Client List
+					sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+					List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+					// There is a need to send an extra Event here, cause at this moment 
+					// there could be already somebody in the Room waiting
+
+					//Sync message to everybody
+					sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+				}
+				if (!found) {
+					// Check if current user is set to moderator
+					for (MeetingMember member : ment.getMeetingMembers()) {
+						// only persistent users can schedule a meeting
+						// user-id is only set for registered users
+						if (member.getUser() != null) {
+							log.debug("checking user " + member.getUser().getFirstname()
+									+ " for moderator role - ID : "
+									+ member.getUser().getUser_id());
+	
+							if (member.getUser().getUser_id().equals(userIdInRoomClient)) {
+								found = true;
+								log.debug("User " + userIdInRoomClient+ " is NOT moderator due to flag in MeetingMember record");
+								currentClient.setIsMod(false);
+								sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+								break;
+							}
+						}
+					}
+				}
+
+				if (!found) {
+					log.debug("User "
+							+ userIdInRoomClient
+							+ " could not be found as MeetingMember -> definitely no moderator");
+					currentClient.setIsMod(false);
+					sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+				} else {
+					// if current user is part of the member list, but moderator
+					// couldn't be retrieved : first come, first draw!
+					if (clientListRoom.size() == 1 && !moderator_set) {
+						log.debug("");
+						currentClient.setIsMod(true);
+
+						// Update the Client List
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+						List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+						// There is a need to send an extra Event here, cause at
+						// this moment there could be
+						// already somebody in the Room waiting
+
+						//Sync message to everybody
+						sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+						
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+					}
+				}
+
+			}
+			
+			//Sync message to everybody
+			sendMessageToCurrentScope("addNewUser", currentClient, false);
+
+			//Status object for Shared Browsing
+			BrowserStatus browserStatus = (BrowserStatus)current.getScope().getAttribute("browserStatus");
+
+			if (browserStatus == null) {
+				browserStatus = new BrowserStatus();
+			}
+
+			// RoomStatus roomStatus = new RoomStatus();
+
+			// FIXME: Rework Client Object to DTOs
+			roomStatus.setClientList(clientListRoom);
+			roomStatus.setBrowserStatus(browserStatus);
+
+			return roomStatus;
+		} catch (Exception err) {
+			log.error("[setRoomValues]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * This method is invoked when the user has disconnected and reconnects to
+	 * the Gateway with the new scope
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @param username
+	 * @param firstname
+	 * @param lastname
+	 * @param picture_uri
+	 * @return client being updated in case of success, null otherwise
+	 */
+	public Client setUsernameReconnect(String SID, Long userId, String username, String firstname, String lastname, String picture_uri) {
+		try {
+			log.debug("-----------  setUsernameReconnect");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			SessionVariablesUtil.setUserId(current.getClient(), userId);
+			currentClient.setPicture_uri(picture_uri);
+			currentClient.setUserObject(userId, username, firstname, lastname);
+
+			// Update Session Data
+			sessiondataDao.updateUserWithoutSession(SID, userId);
+
+			// only fill this value from User-Record
+			// cause invited users have no associated User, so
+			// you cannot set the firstname,lastname from the UserRecord
+			if (userId != null) {
+				User us = usersDao.get(userId);
+				
+				if (us != null) {
+					currentClient.setExternalUserId(us.getExternalUserId());
+					currentClient.setExternalUserType(us.getExternalUserType());
+					if (us.getPictureuri() != null) {
+						// set Picture-URI
+						currentClient.setPicture_uri(us.getPictureuri());
+					}
+				}
+			}
+			sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUsername]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * this is set initial directly after login/loading language
+	 * 
+	 * @param SID - id of the session
+	 * @param userId - id of the user being set
+	 * @param username - username of the user
+	 * @param firstname - firstname of the user
+	 * @param lastname - lastname of the user
+	 * @return RoomClient in case of everything is OK, null otherwise
+	 */
+	public Client setUsernameAndSession(String SID, Long userId, String username, String firstname, String lastname) {
+		try {
+			log.debug("-----------  setUsernameAndSession");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			currentClient.setUsername(username);
+			currentClient.setUser_id(userId);
+			SessionVariablesUtil.setUserId(current.getClient(), userId);
+			currentClient.setUserObject(userId, username, firstname, lastname);
+
+			// Update Session Data
+			log.debug("UDPATE SESSION " + SID + ", " + userId);
+			sessiondataDao.updateUserWithoutSession(SID, userId);
+
+			User user = usersDao.get(userId);
+
+			if (user != null) {
+				currentClient.setExternalUserId(user.getExternalUserId());
+				currentClient.setExternalUserType(user.getExternalUserType());
+			}
+
+			// only fill this value from User-Record
+			// cause invited users have non
+			// you cannot set the firstname,lastname from the UserRecord
+			User us = usersDao.get(userId);
+			if (us != null && us.getPictureuri() != null) {
+				// set Picture-URI
+				currentClient.setPicture_uri(us.getPictureuri());
+			}
+			sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUsername]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * used by the Screen-Sharing Servlet to trigger events
+	 * 
+	 * @param room_id
+	 * @param message
+	 * @return the list of room clients
+	 */
+	public HashMap<String, Client> sendMessageByRoomAndDomain(Long room_id, Object message) {
+		HashMap<String, Client> roomClientList = new HashMap<String, Client>();
+		try {
+
+			log.debug("sendMessageByRoomAndDomain " + room_id);
+
+			IScope globalScope = getContext().getGlobalScope();
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			log.debug("webAppKeyScope " + webAppKeyScope);
+
+			IScope scopeHibernate = webAppKeyScope.getScope(room_id.toString());
+
+			new MessageSender(scopeHibernate, "newMessageByRoomAndDomain", message) {
+				@Override
+				public boolean filter(IConnection conn) {
+					IClient client = conn.getClient();
+					return SessionVariablesUtil.isScreenClient(client) || SessionVariablesUtil.isAVClient(client);
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[getClientListBYRoomAndDomain]", err);
+		}
+		return roomClientList;
+	}
+
+	public synchronized List<Client> getCurrentModeratorList() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			return sessionManager.getCurrentModeratorByRoom(room_id);
+		} catch (Exception err) {
+			log.error("[getCurrentModerator]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * This Function is triggered from the Whiteboard
+	 * 
+	 * @param whiteboardObjParam - array of parameters being sended to whiteboard
+	 * @param whiteboardId - id of whiteboard parameters will be send to
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void sendVarsByWhiteboardId(ArrayList whiteboardObjParam, Long whiteboardId) {
+		//
+		try {
+
+			Map whiteboardObj = new HashMap();
+			int i = 0;
+			for (Iterator iter = whiteboardObjParam.iterator(); iter.hasNext();) {
+				Object obj = iter.next();
+				// log.debug("obj"+obj);
+				whiteboardObj.put(i, obj);
+				i++;
+			}
+
+			// Check if this User is the Mod:
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(current.getClient().getId(), null);
+
+			if (currentClient == null) {
+				return;
+			}
+
+			Long room_id = currentClient.getRoom_id();
+
+			// log.debug("***** sendVars: " + whiteboardObj);
+
+			// Store event in list
+			String action = whiteboardObj.get(2).toString();
+
+			if (action.equals("deleteMindMapNodes")) {
+
+				// Simulate Single Delete Events for z-Index
+				List actionObject = (List) whiteboardObj.get(3);
+
+				List<List> itemObjects = (List) actionObject.get(3);
+
+				Map whiteboardTempObj = new HashMap();
+				whiteboardTempObj.put(2, "delete");
+
+				for (List itemObject : itemObjects) {
+
+					List<Object> tempActionObject = new LinkedList<Object>();
+					tempActionObject.add("mindmapnode");
+					tempActionObject.add(itemObject.get(0)); // z-Index -8
+					tempActionObject.add(null); // simulate -7
+					tempActionObject.add(null); // simulate -6
+					tempActionObject.add(null); // simulate -5
+					tempActionObject.add(null); // simulate -4
+					tempActionObject.add(null); // simulate -3
+					tempActionObject.add(null); // simulate -2
+					tempActionObject.add(itemObject.get(1)); // Object-Name -1
+
+					whiteboardTempObj.put(3, tempActionObject);
+
+					whiteboardManagement.addWhiteBoardObjectById(
+							room_id, whiteboardTempObj, whiteboardId);
+
+				}
+
+			} else {
+
+				whiteboardManagement.addWhiteBoardObjectById(
+						room_id, whiteboardObj, whiteboardId);
+
+			}
+
+			Map<String, Object> sendObject = new HashMap<String, Object>();
+			sendObject.put("id", whiteboardId);
+			sendObject.put("param", whiteboardObjParam);
+
+			boolean showDrawStatus = getWhiteboardDrawStatus();
+
+			// Notify all Clients of that Scope (Room)
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						IClient client = conn.getClient();
+						if (SessionVariablesUtil.isScreenClient(client)) {
+							// screen sharing clients do not receive events
+							continue;
+						} else if (SessionVariablesUtil.isAVClient(client)) {
+							// AVClients or potential AVClients do not receive events
+							continue;
+						} if (client.getId().equals(
+								current.getClient().getId())) {
+							// don't send back to same user
+							continue;
+						}
+						((IServiceCapableConnection) conn).invoke(
+							"sendVarsToWhiteboardById",
+								new Object[] { showDrawStatus ? currentClient : null, sendObject }, 
+									this);
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendVarsByWhiteboardId]", err);
+		}
+	}
+
+	public int sendVarsModeratorGeneral(Object vars) {
+		log.debug("*..*sendVars: " + vars);
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			// Long room_id = currentClient.getRoom_id();
+
+			log.debug("***** id: " + currentClient.getStreamid());
+
+			boolean ismod = currentClient.getIsMod();
+
+			if (ismod) {
+				log.debug("CurrentScope :" + current.getScope().getName());
+				// Send to all Clients of the same Scope
+				sendMessageToCurrentScope("sendVarsToModeratorGeneral", vars, false);
+				return 1;
+			} else {
+				// log.debug("*..*you are not allowed to send: "+ismod);
+				return -1;
+			}
+		} catch (Exception err) {
+			log.error("[sendVarsModeratorGeneral]", err);
+		}
+		return -1;
+	}
+
+	public int sendMessage(Object newMessage) {
+		try {
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+			
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+	
+	public int sendMessageAll(Object newMessage) {
+		try {
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, true);
+			
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+
+	/**
+	 * send status for shared browsing to all members except self
+	 * @param newMessage
+	 * @return 1
+	 */
+	@SuppressWarnings({ "rawtypes" })
+	public synchronized int sendBrowserMessageToMembers(Object newMessage) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+
+			List newMessageList = (List) newMessage;
+
+			String action = newMessageList.get(0).toString();
+
+			BrowserStatus browserStatus = (BrowserStatus) current.getScope().getAttribute("browserStatus");
+
+			if (browserStatus == null) {
+				browserStatus = new BrowserStatus();
+			}
+
+			if (action.equals("initBrowser") || action.equals("newBrowserURL")) {
+				browserStatus.setBrowserInited(true);
+				browserStatus.setCurrentURL(newMessageList.get(1).toString());
+			} else if (action.equals("closeBrowserURL")) {
+				browserStatus.setBrowserInited(false);
+			}
+
+			current.getScope().setAttribute("browserStatus", browserStatus);
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 */
+	public void sendMessageToMembers(Object newMessage) {
+		//Sync to all users of current scope
+		sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+	}
+	
+	/**
+	 * General sync mechanism for all messages that are send from within the 
+	 * scope of the current client, but:
+	 * <ul>
+	 * <li>optionally do not send to self (see param: sendSelf)</li>
+	 * <li>do not send to clients that are screen sharing clients</li>
+	 * <li>do not send to clients that are audio/video clients (or potentially ones)</li>
+	 * <li>do not send to connections where no RoomClient is registered</li>
+	 * </ul>
+	 *  
+	 * @param remoteMethodName The method to be called
+	 * @param newMessage parameters
+	 * @param sendSelf send to the current client as well
+	 */
+	public void sendMessageToCurrentScope(String remoteMethodName, Object newMessage, boolean sendSelf) {
+		sendMessageToCurrentScope(remoteMethodName, newMessage, sendSelf, false);
+	}
+	
+	/**
+	 * Only temporary for load test, with return argument for the client to have a result
+	 * 
+	 * @param remoteMethodName
+	 * @param newMessage
+	 * @param sendSelf
+	 * @return true
+	 */
+	@Deprecated
+	public boolean loadTestSyncMessage(String remoteMethodName, Object newMessage, boolean sendSelf) {
+		sendMessageToCurrentScope(remoteMethodName, newMessage, sendSelf, false);
+		return true;
+	}
+	
+	
+	/**
+	 * General sync mechanism for all messages that are send from within the 
+	 * scope of the current client, but:
+	 * <ul>
+	 * <li>optionally do not send to self (see param: sendSelf)</li>
+	 * <li>send to clients that are screen sharing clients based on parameter</li>
+	 * <li>do not send to clients that are audio/video clients (or potentially ones)</li>
+	 * <li>do not send to connections where no RoomClient is registered</li>
+	 * </ul>
+	 *  
+	 * @param remoteMethodName The method to be called
+	 * @param newMessage parameters
+	 * @param sendSelf send to the current client as well
+	 * @param sendScreen send to the current client as well
+	 */
+	public void sendMessageToCurrentScope(final String remoteMethodName, final Object newMessage, final boolean sendSelf, final boolean sendScreen) {
+		new MessageSender(remoteMethodName, newMessage) {
+			public boolean filter(IConnection conn) {
+				IClient client = conn.getClient();
+				return (!sendScreen && SessionVariablesUtil.isScreenClient(client))
+						|| SessionVariablesUtil.isAVClient(client)
+						|| (!sendSelf && client.getId().equals(current.getClient().getId()));
+			}
+		}.start();
+
+	}
+
+	public abstract class MessageSender extends Thread {
+		final IScope scope;
+		final IConnection current;
+		final String remoteMethodName;
+		final Object newMessage;
+		
+		public MessageSender(final String remoteMethodName, final Object newMessage) {
+			this((IScope)null, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IScope _scope, String remoteMethodName, Object newMessage) {
+			this(Red5.getConnectionLocal(), _scope, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IConnection current, String remoteMethodName, Object newMessage) {
+			this(current, null, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IConnection current, IScope _scope, String remoteMethodName, Object newMessage) {
+			this.current = current;
+			scope = _scope == null ? current.getScope() : _scope;
+			this.remoteMethodName = remoteMethodName;
+			this.newMessage = newMessage;
+		}
+		
+		public abstract boolean filter(IConnection conn);
+		
+		@Override
+		public void run() {
+			try {
+				if (scope == null) {
+					log.debug(String.format("[MessageSender] -> 'Unable to send message to NULL scope' %s, %s", remoteMethodName, newMessage));
+				} else {
+					log.trace(String.format("[MessageSender] -> 'sending message' %s, %s", remoteMethodName, newMessage));
+					// Send to all Clients of that Scope(Room)
+					for (IConnection conn : scope.getClientConnections()) {
+						if (conn != null && conn instanceof IServiceCapableConnection) {
+							if (filter(conn)) {
+								continue;
+							}
+							((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { newMessage }, ScopeApplicationAdapter.this);
+						}
+					}
+					log.trace(String.format("[MessageSender] -> 'sending message DONE' %s", remoteMethodName));
+				}
+			} catch (Exception err) {
+				log.error(String.format("[MessageSender -> %s, %s]", remoteMethodName, newMessage), err);
+			}
+		}
+	}
+
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public int sendMessageWithClient(Object newMessage) {
+		try {
+			sendMessageWithClientWithSyncObject(newMessage, true);
+
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+	
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 * @param sync
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public int sendMessageWithClientWithSyncObject(Object newMessage, boolean sync) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+			
+			//Sync to all users of current scope
+			sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, sync);
+
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	/**
+	 * Function is used to send the kick Trigger at the moment, 
+	 * it sends a general message to a specific clientId
+	 * 
+	 * @param newMessage
+	 * @param clientId
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public synchronized int sendMessageById(Object newMessage, String clientId, IScope scope) {
+		try {
+			log.debug("### sendMessageById ###" + clientId);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("message", newMessage);
+
+			// broadcast Message to specific user with id inside the same Scope
+			for (IConnection conn : scope.getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						if (conn.getClient().getId().equals(clientId)) {
+							((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient", new Object[] { hsm }, this);
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	/**
+	 * Sends a message to a user in the same room by its clientId
+	 * 
+	 * @param newMessage
+	 * @param clientId
+	 * @return 1 in case of no exceptions, -1 otherwise
+	 */
+	public synchronized int sendMessageWithClientById(Object newMessage, String clientId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			// broadcast Message to specific user with id inside the same Scope
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn.getClient().getId().equals(clientId)) {
+					((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient", new Object[] { hsm }, this);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+	
+	public synchronized void sendUploadCompletMessageByPublicSID(UploadCompleteMessage message, String publicSID) {
+		try {
+			//if the upload is locally, just proceed to the normal function
+			//Search for RoomClient on current server (serverId == null means it will look on the master for the RoomClient)
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			
+			if (currentClient != null) {
+				sendMessageWithClientByPublicSID(message, publicSID);
+			} else {
+				throw new Exception("Could not Find RoomClient on List publicSID: "+ publicSID);
+			}
+			
+		} catch (Exception err) {
+			log.error("[sendUploadCompletMessageByPublicSID] ", err);
+		}
+	}
+	
+
+	public synchronized void sendMessageWithClientByPublicSID(Object message, String publicSID) {
+		try {
+			// ApplicationContext appCtx = getContext().getApplicationContext();
+			IScope globalScope = getContext().getGlobalScope();
+
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			// log.debug("webAppKeyScope "+webAppKeyScope);
+
+			// Get Room Id to send it to the correct Scope
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				throw new Exception("Could not Find RoomClient on List publicSID: " + publicSID);
+			}
+			// default Scope Name
+			String scopeName = "hibernate";
+			if (currentClient.getRoom_id() != null) {
+				scopeName = currentClient.getRoom_id().toString();
+			}
+
+			IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+			// log.debug("scopeHibernate "+scopeHibernate);
+
+			if (scopeHibernate != null) {
+				// Notify the clients of the same scope (room) with user_id
+
+				for (IConnection conn : webAppKeyScope.getScope(scopeName).getClientConnections()) {
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+					
+					if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) {
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+					}
+				}
+			} else {
+				// Scope not yet started
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+		}
+	}
+
+	public synchronized void sendMessageWithClientByPublicSIDOrUser(Object message, String publicSID, Long user_id) {
+		try {
+			// Get Room Id to send it to the correct Scope
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				currentClient = sessionManager.getClientByUserId(user_id);
+			}
+
+			Set<IConnection> conset = null;
+
+			if (currentClient == null) {
+				// Must be from a previous session, search for user in current scope
+				IConnection current = Red5.getConnectionLocal();
+				// Notify all Clients of that Scope (Room)
+				conset = current.getScope().getClientConnections();
+			} else {
+				// default Scope Name
+				String scopeName = "hibernate";
+				if (currentClient.getRoom_id() != null) {
+					scopeName = currentClient.getRoom_id().toString();
+				}
+
+				IScope globalScope = getContext().getGlobalScope();
+				IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+				IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+				if (scopeHibernate != null) {
+					conset = scopeHibernate.getClientConnections();
+				}
+			}
+
+			// Notify the clients of the same scope (room) with user_id
+			for (IConnection conn : conset) {
+				if (conn != null) {
+					
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+					
+					if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) {
+						// log.debug("IS EQUAL ");
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+						log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + message);
+					} else if (user_id != 0 && SessionVariablesUtil.getUserId(client).equals(user_id)) {
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+						log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + message);
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+		}
+	}
+
+	/**
+	 * @deprecated this method should be reworked to use a single SQL query in
+	 *             the cache to get any client in the current room that is
+	 *             recording instead of iterating through connections!
+	 * @return true in case there is recording session, false otherwise, null if any exception happend
+	 */
+	public Boolean getInterviewRecordingStatus() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+					if (rcl.getIsRecording() != null && rcl.getIsRecording()) {
+						return true;
+					}
+				}
+			}
+			return false;
+		} catch (Exception err) {
+			log.error("[getInterviewRecordingStatus]", err);
+		}
+
+		return null;
+	}
+
+	/**
+	 * @deprecated @see {@link ScopeApplicationAdapter#getInterviewRecordingStatus()}
+	 * @return - false if there were existing recording, true if recording was started successfully, null if any exception happens
+	 */
+	public Boolean startInterviewRecording() {
+		try {
+			log.debug("-----------  startInterviewRecording");
+			IConnection current = Red5.getConnectionLocal();
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+					if (rcl != null && rcl.getIsRecording() != null && rcl.getIsRecording()) {
+						return false;
+					}
+				}
+			}
+			Client current_rcl = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			// Also set the Recording Flag to Record all Participants that enter
+			// later
+			current_rcl.setIsRecording(true);
+			sessionManager.updateClientByStreamId(current.getClient().getId(), current_rcl, false, null);
+
+			Map<String, String> interviewStatus = new HashMap<String, String>();
+			interviewStatus.put("action", "start");
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+
+					((IServiceCapableConnection) conn).invoke("interviewStatus", new Object[] { interviewStatus }, this);
+					log.debug("-- startInterviewRecording " + interviewStatus);
+				}
+			}
+			String recordingName = "Interview " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
+
+			flvRecorderService.recordMeetingStream(current, current_rcl, recordingName, "", true);
+
+			return true;
+		} catch (Exception err) {
+			log.debug("[startInterviewRecording]", err);
+		}
+		return null;
+	}
+
+	@SuppressWarnings({ "rawtypes" })
+	public Boolean sendRemoteCursorEvent(final String streamid, Map messageObj) {
+		new MessageSender("sendRemoteCursorEvent", messageObj) {
+			
+			@Override
+			public boolean filter(IConnection conn) {
+				IClient client = conn.getClient();
+				return SessionVariablesUtil.isScreenClient(client) && conn.getClient().getId().equals(streamid);
+			}
+		}.start();
+		return null;
+	}
+
+	private Long checkRecordingClient(IConnection conn) {
+		Long flvRecordingId = null;
+		if (conn != null) {
+			Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+			if (rcl != null && rcl.getIsRecording() != null && rcl.getIsRecording()) {
+				rcl.setIsRecording(false);
+				flvRecordingId = rcl.getFlvRecordingId();
+				rcl.setFlvRecordingId(null);
+
+				// Reset the Recording Flag to Record all
+				// Participants that enter later
+				sessionManager.updateClientByStreamId(conn.getClient().getId(), rcl, false, null);
+			}
+		}
+		return flvRecordingId;
+	}
+	
+	/**
+	 * Stop the recording of the streams and send event to connected users of scope
+	 * 
+	 * @return true if interview was found
+	 */
+	public Boolean stopInterviewRecording() {
+		IConnection current = Red5.getConnectionLocal();
+		Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		return _stopInterviewRecording(currentClient, current.getScope());
+	}
+	
+	/**
+	 * Stop the recording of the streams and send event to connected users of scope
+	 * 
+	 * @return true if interview was found
+	 */
+	private Boolean _stopInterviewRecording(Client currentClient, IScope currentScope) {
+		try {
+			log.debug("-----------  stopInterviewRecording");
+			Long flvRecordingId = currentClient.getFlvRecordingId();
+
+			for (IConnection conn : currentScope.getClientConnections()) {
+				Long recordingId = checkRecordingClient(conn);
+				if (recordingId != null) {
+					flvRecordingId = recordingId;
+				}
+			}
+			if (flvRecordingId == null) {
+				log.debug("stopInterviewRecording:: unable to find recording client");
+				return false;
+			}
+
+			flvRecorderService.stopRecordAndSave(scope, currentClient, flvRecordingId);
+
+			Map<String, String> interviewStatus = new HashMap<String, String>();
+			interviewStatus.put("action", "stop");
+
+			sendMessageToCurrentScope("interviewStatus", interviewStatus, true);
+			sendMessageToCurrentScope("stopRecordingMessage", currentClient, true);
+			return true;
+
+		} catch (Exception err) {
+			log.debug("[stopInterviewRecording]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all ClientList Objects of that room and domain Used in
+	 * lz.applyForModeration.lzx
+	 * 
+	 * @return all ClientList Objects of that room
+	 */
+	public synchronized List<Client> getClientListScope() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			return sessionManager.getClientListByRoom(currentClient.getRoom_id());
+		} catch (Exception err) {
+			log.debug("[getClientListScope]", err);
+		}
+		return new ArrayList<Client>();
+	}
+
+	private boolean getWhiteboardDrawStatus() {
+		return configurationDao.getWhiteboardDrawStatus();
+	}
+	
+	public String getCryptKey() {
+		return configurationDao.getCryptKey();
+	}
+
+	public IScope getRoomScope(String room) {
+		try {
+
+			IScope globalScope = getContext().getGlobalScope();
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			String scopeName = "hibernate";
+			// If set then its a NON default Scope
+			if (room.length() != 0) {
+				scopeName = room;
+			}
+
+			IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+			return scopeHibernate;
+		} catch (Exception err) {
+			log.error("[getRoomScope]", err);
+		}
+		return null;
+	}
+
+    /*
+	 * SIP transport methods
+	 */
+
+	private List<Long> getVerifiedActiveRoomIds(Server s) {
+		List<Long> result = new ArrayList<Long>(sessionManager.getActiveRoomIdsByServer(s));
+		//verify
+		for (Iterator<Long> i = result.iterator(); i.hasNext();) {
+			Long id = i.next();
+			List<Client> rcs = sessionManager.getClientListByRoom(id);
+			if (rcs.size() == 0 || (rcs.size() == 1 && rcs.get(0).isSipTransport())) {
+				i.remove();
+			}
+		}
+		return result.isEmpty() ? result : roomDao.getSipRooms(result);
+	}
+	
+	public List<Long> getActiveRoomIds() {
+		List<Long> result = getVerifiedActiveRoomIds(null);
+		for (Server s : serverDao.getActiveServers()) {
+			result.addAll(getVerifiedActiveRoomIds(s));
+		}
+		return result.isEmpty() ? result : roomDao.getSipRooms(result);
+	}
+	
+	private String getSipTransportLastname(Long roomId) {
+		return getSipTransportLastname(roomId, roomManager.getSipConferenceMembersNumber(roomId));
+	}
+	
+	private String getSipTransportLastname(Long roomId, Integer c) {
+		return (c != null && c > 0) ? "(" + (c - 1) + ")" : "";
+	}
+	
+    public synchronized int updateSipTransport() {
+		log.debug("-----------  updateSipTransport");
+        IConnection current = Red5.getConnectionLocal();
+        String streamid = current.getClient().getId();
+        Client client = sessionManager.getClientByStreamId(streamid, null);
+        Long roomId = client.getRoom_id();
+        Integer count = roomManager.getSipConferenceMembersNumber(roomId); 
+        String newNumber = getSipTransportLastname(roomId, count);
+        log.debug("getSipConferenceMembersNumber: " + newNumber);
+        if (!newNumber.equals(client.getLastname())) {
+            client.setLastname(newNumber);
+            sessionManager.updateClientByStreamId(streamid, client, false, null);
+            log.debug("updateSipTransport: {}, {}, {}, {}, {}", new Object[]{client.getPublicSID(),
+                    client.getRoom_id(), client.getFirstname(), client.getLastname(), client.getAvsettings()});
+            sendMessageWithClient(new String[]{"personal",client.getFirstname(),client.getLastname()});
+        }
+        return count != null && count > 0 ? count - 1 : 0; 
+    }
+
+    /**
+     * Perform call to specified phone number and join to conference
+     * @param number to call
+     */
+	public synchronized void joinToConfCall(String number) {
+		IConnection current = Red5.getConnectionLocal();
+		String streamid = current.getClient().getId();
+		Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+		try {
+			String sipNumber = getSipNumber(currentClient.getRoom_id());
+			log.debug("asterisk -rx \"originate Local/" + number + "@rooms-out extension " + sipNumber + "@rooms-originate\"");
+			Runtime.getRuntime().exec(new String[] { "asterisk", "-rx", "originate Local/" + number + "@rooms-out extension " + sipNumber + "@rooms-originate" });
+		} catch (IOException e) {
+			log.error("Executing asterisk originate error: ", e);
+		}
+	}
+
+    public synchronized String getSipNumber(Long room_id) {
+        Room r = roomDao.get(room_id);
+        if(r != null && r.getConfno() != null) {
+            log.debug("getSipNumber: room_id: {}, sipNumber: {}", new Object[]{room_id, r.getConfno()});
+            return r.getConfno();
+        }
+        return null;
+    }
+
+	public void setSipTransport(Long room_id, String publicSID, String broadCastId) {
+		log.debug("-----------  setSipTransport");
+		IConnection current = Red5.getConnectionLocal();
+		IClient c = current.getClient();
+		String streamid = c.getId();
+		// Notify all clients of the same scope (room)
+		Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+		currentClient.setSipTransport(true);
+		currentClient.setRoom_id(room_id);
+		currentClient.setRoomEnter(new Date());
+		currentClient.setFirstname("SIP Transport");
+		currentClient.setLastname(getSipTransportLastname(room_id));
+		currentClient.setBroadCastID(Long.parseLong(broadCastId));
+		currentClient.setIsBroadcasting(true);
+		currentClient.setPublicSID(publicSID);
+		currentClient.setVWidth(120);
+		currentClient.setVHeight(90);
+		currentClient.setPicture_uri("phone.png");
+		sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+		SessionVariablesUtil.initClient(c, false, publicSID);
+
+		sendMessageToCurrentScope("addNewUser", currentClient, false);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java b/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java
new file mode 100644
index 0000000..642bd08
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IClient;
+import org.slf4j.Logger;
+
+public class SessionVariablesUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(SessionVariablesUtil.class, webAppRootKey);
+
+	private enum SESSION_VARIABLES {
+		isAVClient, // if the client connection is a audio-video only connection
+		isScreenClient, // if the client connection is from a Java Web-Start application
+		PUBLIC_SID, // the public SID of the client
+		USER_ID, // the userId of the user that is using this connection (if there is any)
+	}
+
+	public static void initClient(IClient client, boolean isAVClient, String publicSID) {
+		client.setAttribute(SESSION_VARIABLES.isAVClient.toString(), isAVClient);
+		client.setAttribute(SESSION_VARIABLES.PUBLIC_SID.toString(), publicSID);
+	}
+
+	public static boolean isAVClient(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.isAVClient.toString()) == null) {
+				throw new Exception("Connection has no publicSID client: " + client);
+			}
+			return (Boolean) client.getAttribute(SESSION_VARIABLES.isAVClient.toString());
+		} catch (Exception err) {
+			log.error("[isAVClient]", err);
+		}
+		return false;
+	}
+
+	public static String getPublicSID(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString()) == null) {
+				throw new Exception("Connection has no publicSID client: " + client);
+			}
+			return (String) client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString());
+		} catch (Exception err) {
+			log.error("[getPublicSID]", err);
+		}
+		return null;
+	}
+
+	public static void setIsScreenClient(IClient client) {
+		client.setAttribute(SESSION_VARIABLES.isScreenClient.toString(), true);
+	}
+
+	public static boolean isScreenClient(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.isScreenClient.toString()) == null) {
+				return false;
+			}
+			if ((Boolean) client.getAttribute(SESSION_VARIABLES.isScreenClient.toString())) {
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[isScreenClient]", err);
+		}
+		return false;
+	}
+
+	public static void setUserId(IClient client, Long userId) {
+		client.setAttribute(SESSION_VARIABLES.USER_ID.toString(), userId);
+	}
+
+	/**
+	 * if there is no user id set, it will return Long.MIN_VALUE
+	 * 
+	 * @param client
+	 * @return - user id set or Long.MIN_VALUE or null if any exception happens
+	 */
+	public static Long getUserId(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.USER_ID.toString()) == null) {
+				return Long.MIN_VALUE;
+			}
+			return (Long) client.getAttribute(SESSION_VARIABLES.USER_ID.toString());
+		} catch (Exception err) {
+			log.error("[getUserId]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java b/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java
new file mode 100644
index 0000000..17e8f5a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.rss;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadAtomRssFeed {
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadAtomRssFeed.class, webAppRootKey);
+
+	public static HttpURLConnection getFeedConnection(String _url) throws IOException {
+		log.debug("getFeedConnection:: " + _url);
+		
+		URL url = new URL(_url);
+
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+		conn.setDoOutput(true);
+		conn.setDoInput(true);
+		conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
+		conn.setRequestProperty("Referer", "http://openmeetings.apache.org/");
+		return conn;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java b/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java
new file mode 100644
index 0000000..48d02b9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletResponse;
+
+public abstract class BaseHttpServlet extends HttpServlet {
+	private static final long serialVersionUID = -2713422496723115524L;
+	
+	private BeanUtil beanUtil = new BeanUtil();
+
+	protected <T> T getBean(Class<T> beanClass) throws ServerNotInitializedException {
+		return beanUtil.getBean(beanClass, getServletContext());
+	}
+	
+	protected void handleNotBooted(HttpServletResponse response) throws IOException {
+		OutputStream out = response.getOutputStream();
+
+		String msg = "Server is not booted yet";
+
+		out.write(msg.getBytes());
+
+		out.flush();
+		out.close();
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java b/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java
new file mode 100644
index 0000000..2bbfb42
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+import javax.servlet.ServletContext;
+
+import org.apache.openmeetings.util.InitializationContainer;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+public class BeanUtil {
+	public <T> T getBean(Class<T> beanClass, ServletContext ctx) throws ServerNotInitializedException {
+		if (InitializationContainer.initComplete) {
+			return WebApplicationContextUtils.getWebApplicationContext(ctx).getBean(beanClass);
+		} else {
+			throw new ServerNotInitializedException("Server not yet initialized, retry in couple of seconds");
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java b/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java
new file mode 100644
index 0000000..9dc2151
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+public class ServerNotInitializedException extends Exception {
+	private static final long serialVersionUID = 1L;
+	
+	public ServerNotInitializedException(String msg) {
+		super(msg);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java
new file mode 100644
index 0000000..f858164
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+public abstract class AbstractUploadController {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			AbstractUploadController.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	protected SessiondataDao sessiondataDao;
+	@Autowired
+	protected UserDao userDao;
+	@Autowired
+	protected ConfigurationDao configurationDao;
+	
+	protected class UploadInfo {
+		MultipartFile file;
+		Long userId;
+		String sid;
+		String publicSID;
+		String filename;
+	}
+	
+    protected UploadInfo validate(HttpServletRequest request, boolean admin) throws ServletException {
+    	UploadInfo info = new UploadInfo();
+		log.debug("Starting validate");
+		try {
+			String sid = request.getParameter("sid");
+			if (sid == null) {
+				throw new ServletException("SID Missing");
+			}
+			info.sid = sid;
+			log.debug("sid: " + sid);
+
+			Long userId = sessiondataDao.checkSession(sid);
+			Set<Right> rights = userDao.getRights(userId);
+			log.debug("userId = " + userId);
+			info.userId = userId;
+
+			if ((admin && !AuthLevelUtil.hasAdminLevel(rights)) || (!admin && rights.isEmpty())) {
+				throw new ServletException("Insufficient permissions " + rights);
+			}
+
+			String publicSID = request.getParameter("publicSID");
+			if (publicSID == null) {
+				// Always ask for Public SID
+				throw new ServletException("Missing publicSID");
+			}
+			log.debug("publicSID: " + publicSID);
+			info.publicSID= publicSID;
+
+			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
+			MultipartFile multipartFile = multipartRequest.getFile("Filedata");
+			//FIXME encoding HACK
+			info.filename = new String (multipartFile.getOriginalFilename().getBytes ("iso-8859-1"), "UTF-8");
+			long fileSize = multipartFile.getSize();
+			long maxSize = configurationDao.getMaxUploadSize();
+			log.debug("uploading " + fileSize + " bytes");
+			if (fileSize > maxSize) {
+				throw new ServletException("Maximum upload size: " + maxSize + " exceeded: " + fileSize);
+			}
+			info.file = multipartFile;
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+		}
+		return info;
+    }
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java
new file mode 100644
index 0000000..f70bdd9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java
@@ -0,0 +1,315 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.defaultProfileImageName;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.servlet.BaseHttpServlet;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class DownloadHandler extends BaseHttpServlet {
+	
+	private static final long serialVersionUID = 7243653203578587544L;
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			DownloadHandler.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static final String defaultImageName = "deleted.jpg";
+	private static final String defaultProfileImageNameBig = profileImagePrefix + defaultProfileImageName;
+	private static final String defaultChatImageName = chatImagePrefix + defaultProfileImageName;
+	private static final String defaultSWFName = "deleted.swf";
+
+	private void logNonExistentFolder(File f) {
+		if (!f.exists()) {
+			boolean c = f.mkdir();
+			if (!c) {
+				log.error("cannot write to directory");
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	@Override
+	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		try {
+			request.setCharacterEncoding("UTF-8");
+
+			log.debug("\nquery = " + request.getQueryString());
+			log.debug("\n\nfileName = " + request.getParameter("fileName"));
+			log.debug("\n\nparentPath = " + request.getParameter("parentPath"));
+
+			String queryString = request.getQueryString();
+			if (queryString == null) {
+				queryString = "";
+			}
+
+			String sid = request.getParameter("sid");
+
+			if (sid == null) {
+				sid = "default";
+			}
+			log.debug("sid: " + sid);
+
+			Long users_id = getBean(SessiondataDao.class).checkSession(sid);
+			Set<Right> rights = getBean(UserDao.class).getRights(users_id);
+
+			if (rights != null && !rights.isEmpty()) {
+				String room_id = request.getParameter("room_id");
+				if (room_id == null) {
+					room_id = "default";
+				}
+
+				String moduleName = request.getParameter("moduleName");
+				if (moduleName == null) {
+					moduleName = "nomodule";
+				}
+
+				String parentPath = request.getParameter("parentPath");
+				if (parentPath == null) {
+					parentPath = "nomodule";
+				}
+
+				String requestedFile = request.getParameter("fileName");
+				if (requestedFile == null) {
+					requestedFile = "";
+				}
+				
+				String fileExplorerItemIdParam = request.getParameter("fileExplorerItemId");
+				Long fileExplorerItemId = null;
+				if (fileExplorerItemIdParam != null) {
+					fileExplorerItemId = Long.parseLong(fileExplorerItemIdParam);
+				}
+				
+				
+
+				// make a complete name out of domain(organisation) + roomname
+				String roomName = room_id;
+				// trim whitespaces cause it is a directory name
+				roomName = StringUtils.deleteWhitespace(roomName);
+
+				// Get the current User-Directory
+
+				File working_dir;
+
+				// Add the Folder for the Room
+				if (moduleName.equals("lzRecorderApp")) {
+					working_dir = OmFileHelper.getStreamsHibernateDir();
+				} else if (moduleName.equals("videoconf1")) {
+					working_dir = OmFileHelper.getUploadRoomDir(roomName);
+					if (parentPath.length() != 0 && !parentPath.equals("/")) {
+						working_dir = new File(working_dir, parentPath);
+					}
+				} else if (moduleName.equals("userprofile")) {
+					working_dir = OmFileHelper.getUploadProfilesUserDir(users_id);
+					logNonExistentFolder(working_dir);
+				} else if (moduleName.equals("remoteuserprofile")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+				} else if (moduleName.equals("remoteuserprofilebig")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+					
+					requestedFile = getBigProfileUserName(working_dir);
+				} else if (moduleName.equals("chat")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+
+					requestedFile = getChatUserName(working_dir);
+				} else {
+					working_dir = OmFileHelper.getUploadRoomDir(roomName);
+				}
+
+				if (!moduleName.equals("nomodule")) {
+					log.debug("requestedFile: " + requestedFile + " current_dir: " + working_dir);
+
+					File full_path = new File(working_dir, requestedFile);
+
+					// If the File does not exist or is not readable show/load a
+					// place-holder picture
+
+					if (!full_path.exists() || !full_path.canRead()) {
+						if (!full_path.canRead()) {
+							log.debug("LOG DownloadHandler: The request file is not readable ");
+						} else {
+							log.debug("LOG DownloadHandler: The request file does not exist / has already been deleted");
+						}
+						log.debug("LOG ERROR requestedFile: " + requestedFile);
+						// replace the path with the default picture/document
+
+						if (requestedFile.endsWith(".jpg")) {
+							log.debug("LOG endsWith d.jpg");
+
+							log.debug("LOG moduleName: " + moduleName);
+
+							requestedFile = defaultImageName;
+							if (moduleName.equals("remoteuserprofile")) {
+								requestedFile = defaultProfileImageName;
+							} else if (moduleName.equals("remoteuserprofilebig")) {
+								requestedFile = defaultProfileImageNameBig;
+							} else if (moduleName.equals("userprofile")) {
+								requestedFile = defaultProfileImageName;
+							} else if (moduleName.equals("chat")) {
+								requestedFile = defaultChatImageName;
+							}
+						} else if (requestedFile.endsWith(".swf")) {
+							requestedFile = defaultSWFName;
+						} else {
+							requestedFile = defaultImageName;
+						}
+						full_path = new File(OmFileHelper.getDefaultDir(), requestedFile);
+					}
+
+					log.debug("full_path: " + full_path);
+
+					if (!full_path.exists() || !full_path.canRead()) {
+						if (!full_path.canRead()) {
+							log.debug("DownloadHandler: The request DEFAULT-file does not exist / has already been deleted");
+						} else {
+							log.debug("DownloadHandler: The request DEFAULT-file does not exist / has already been deleted");
+						}
+						// no file to handle abort processing
+						return;
+					}
+					// Requested file is outside OM webapp folder
+					File curDirFile = OmFileHelper.getOmHome();
+					if (!full_path.getCanonicalPath().startsWith(curDirFile.getCanonicalPath())) {
+						throw new Exception("Invalid file requested: f2.cp == "
+								+ full_path.getCanonicalPath() + "; curDir.cp == "
+								+ curDirFile.getCanonicalPath());
+					}
+
+					// Default type - Explorer, Chrome and others
+					int browserType = 0;
+
+					// Firefox and Opera browsers
+					if (request.getHeader("User-Agent") != null) {
+						if ((request.getHeader("User-Agent").contains("Firefox")) || (request.getHeader("User-Agent").contains("Opera"))) {
+							browserType = 1;
+						}
+					}
+
+					log.debug("Detected browser type:" + browserType);
+
+					response.reset();
+					response.resetBuffer();
+					OutputStream out = response.getOutputStream();
+
+					if (requestedFile.endsWith(".swf")) {
+						// trigger download to SWF => THIS is a workaround for
+						// Flash Player 10, FP 10 does not seem
+						// to accept SWF-Downloads with the Content-Disposition
+						// in the Header
+						response.setContentType("application/x-shockwave-flash");
+						response.setHeader("Content-Length", "" + full_path.length());
+					} else {
+						response.setContentType("APPLICATION/OCTET-STREAM");
+						
+						String fileNameResult = requestedFile;
+						if (fileExplorerItemId != null && fileExplorerItemId > 0) {
+							FileExplorerItem fileExplorerItem = getBean(FileExplorerItemDao.class).getFileExplorerItemsById(fileExplorerItemId);
+							if (fileExplorerItem != null) {
+								
+								fileNameResult = fileExplorerItem.getFileName().substring(0, fileExplorerItem.getFileName().length()-4)
+													+ fileNameResult.substring(fileNameResult.length()-4, fileNameResult.length());
+								
+							}
+						}
+						
+						if (browserType == 0) {
+							response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileNameResult, "UTF-8"));
+						} else {
+							response.setHeader("Content-Disposition", "attachment; filename*=UTF-8'en'"
+											+ URLEncoder.encode(fileNameResult, "UTF-8"));
+						}
+
+						response.setHeader("Content-Length", "" + full_path.length());
+					}
+
+					OmFileHelper.copyFile(full_path, out);
+					out.flush();
+					out.close();
+				}
+			} else {
+				log.error("ERROR DownloadHandler: not authorized FileDownload ");
+			}
+
+		} catch (ServerNotInitializedException e) {
+			return;
+		} catch (Exception er) {
+			log.error("Error downloading: ", er);
+		}
+	}
+
+	private String getChatUserName(File f) throws Exception {
+		if (f.exists() && f.isDirectory()) {
+			String filesString[] = f.list();
+			for (int i = 0; i < filesString.length; i++) {
+				String fileName = filesString[i];
+				if (fileName.startsWith(chatImagePrefix))
+					return fileName;
+			}
+		}
+		return "_no.jpg";
+	}
+
+	private String getBigProfileUserName(File f) throws Exception {
+		if (f.exists() && f.isDirectory()) {
+			String filesString[] = f.list();
+			for (int i = 0; i < filesString.length; i++) {
+				String fileName = filesString[i];
+				if (fileName.startsWith(bigImagePrefix))
+					return fileName;
+			}
+		}
+		return "_no.jpg";
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java
new file mode 100644
index 0000000..3ca4de3
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.JPEGTranscoder;
+import org.apache.openmeetings.batik.beans.PrintBean;
+import org.apache.openmeetings.data.record.WhiteboardMapToSVG;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.remote.PrintService;
+import org.apache.openmeetings.servlet.BaseHttpServlet;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ExportToImage extends BaseHttpServlet {
+	
+	private static final long serialVersionUID = -3535998254746084297L;
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ExportToImage.class, OpenmeetingsVariables.webAppRootKey);
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	@Override
+	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+			IOException {
+
+		try {
+			String sid = request.getParameter("sid");
+			if (sid == null) {
+				sid = "default";
+			}
+			log.debug("sid: " + sid);
+
+			String hash = request.getParameter("hash");
+			if (hash == null) {
+				hash = "";
+			}
+			log.debug("hash: " + hash);
+
+			String fileName = request.getParameter("fileName");
+			if (fileName == null) {
+				fileName = "file_xyz";
+			}
+
+			String exportType = request.getParameter("exportType");
+			if (exportType == null) {
+				exportType = "svg";
+			}
+
+			Long users_id = getBean(SessiondataDao.class).checkSession(sid);
+			Set<Right> rights = getBean(UserDao.class).getRights(users_id);
+
+			log.debug("users_id: " + users_id);
+
+			if (rights != null && !rights.isEmpty() && hash != "") {
+
+				PrintBean pBean = PrintService.getPrintItemByHash(hash);
+
+				// Whiteboard Objects
+				@SuppressWarnings("rawtypes")
+				List whiteBoardMap = pBean.getMap();
+
+				// Get a DOMImplementation.
+				DOMImplementation domImpl = GenericDOMImplementation
+						.getDOMImplementation();
+
+				// Create an instance of org.w3c.dom.Document.
+				// String svgNS = "http://www.w3.org/2000/svg";
+				String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+				Document document = domImpl.createDocument(svgNS, "svg", null);
+
+				// Get the root element (the 'svg' element).
+				Element svgRoot = document.getDocumentElement();
+
+				// Set the width and height attributes on the root 'svg'
+				// element.
+				svgRoot.setAttributeNS(null, "width", "" + pBean.getWidth());
+				svgRoot.setAttributeNS(null, "height", "" + pBean.getHeight());
+
+				log.debug("pBean.getWidth(),pBean.getHeight()"
+						+ pBean.getWidth() + "," + pBean.getHeight());
+
+				// Create an instance of the SVG Generator.
+				SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+
+				svgGenerator = WhiteboardMapToSVG.getInstance()
+						.convertMapToSVG(svgGenerator, whiteBoardMap);
+
+				// Finally, stream out SVG to the standard output using
+				// UTF-8 encoding.
+				boolean useCSS = true; // we want to use CSS style attributes
+
+				File uploadTempDir = OmFileHelper.getUploadTempDir();
+				log.debug("working_dir: " + uploadTempDir);
+				String reqFilePrefix = fileName + "_" + CalendarPatterns.getTimeForStreamId(new Date());
+				File svgFile = new File(uploadTempDir, reqFilePrefix + ".svg");
+				log.debug("exported svg file: " + svgFile.getCanonicalPath());
+				FileWriter out = new FileWriter(svgFile);
+				svgGenerator.stream(out, useCSS);
+				out.flush();
+				out.close();
+				File expFile = new File(uploadTempDir, reqFilePrefix + "." + exportType);
+				log.debug("exported file: " + expFile.getCanonicalPath());
+				if ("svg".equals(exportType)) {
+					outFile(response, expFile);
+				} else if ("jpg".equals(exportType)) {
+					JPEGTranscoder t = new JPEGTranscoder();
+			        t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 1f);
+			        
+			        OutputStream ostream = new FileOutputStream(expFile);
+			        TranscoderOutput output = new TranscoderOutput(new FileOutputStream(expFile));
+
+			        // Perform the transcoding.
+			        t.transcode(new TranscoderInput(svgFile.toURI().toString()), output);
+			        ostream.flush();
+			        ostream.close();
+			        
+					outFile(response, expFile);
+				} else if (exportType.equals("png")
+						|| exportType.equals("gif") || exportType.equals("tif")
+						|| exportType.equals("pdf")) {
+						//TODO not implemented yet
+				}
+			}
+		} catch (ServerNotInitializedException e) {
+			return;
+		} catch (Exception er) {
+			log.error("Error exporting to image ", er);
+		}
+	}
+	
+	private void outFile(HttpServletResponse response, File f) throws IOException {
+		response.reset();
+		response.resetBuffer();
+		OutputStream outStream = response.getOutputStream();
+		response.setContentType("APPLICATION/OCTET-STREAM");
+		response.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName() + "\"");
+		response.setHeader("Content-Length", "" + f.length());
+
+		OmFileHelper.copyFile(f, outStream);
+		outStream.close();
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java
new file mode 100644
index 0000000..5131df6
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class NetworkTestingController {
+
+    enum TestType {
+        UNKNOWN,
+        PING,
+        JITTER,
+        DOWNLOAD_SPEED,
+        UPLOAD_SPEED
+    }
+
+    private static final int PING_PACKET_SIZE = 64;
+    private static final int JITTER_PACKET_SIZE = 1024;
+    private static final int DOWNLOAD_PACKET_SIZE = 1024*1024;
+
+    private final byte[] pingData;
+    private final byte[] jitterData;
+    private final byte[] downloadData;
+
+    public NetworkTestingController() {
+        pingData = new byte[PING_PACKET_SIZE];
+        jitterData = new byte[JITTER_PACKET_SIZE];
+        downloadData = new byte[DOWNLOAD_PACKET_SIZE];
+
+        Arrays.fill(pingData, (byte) '0');
+        Arrays.fill(jitterData, (byte) '0');
+        Arrays.fill(downloadData, (byte) '0');
+    }
+
+    @RequestMapping(value = "/networktest.upload", method = RequestMethod.GET)
+	public void serviceGet(HttpServletRequest request, HttpServletResponse response, HttpSession session)
+			throws ServletException, IOException {
+        String typeStr = request.getParameter("testType");
+        TestType testType = this.getTypeByString(typeStr);
+
+        // choose data to send
+        byte[] data = null;
+        switch (testType) {
+            case UNKNOWN:
+                return;
+            case PING:
+                data = pingData;
+                break;
+            case JITTER:
+                data = jitterData;
+                break;
+            case DOWNLOAD_SPEED:
+                data = downloadData;
+                break;
+			case UPLOAD_SPEED:
+				break;
+			default:
+				break;
+        }
+
+        // set needed headers
+        response.setHeader("Cache-Control", "no-cache");
+        response.setHeader("Content-Length", String.valueOf(data.length));
+
+        // send data
+        ServletOutputStream outStream = response.getOutputStream();
+        outStream.write(data);
+        outStream.flush();
+    }
+
+    @RequestMapping(value = "/networktest.upload", method = RequestMethod.POST)
+	public void servicePost(HttpServletRequest request, HttpServletResponse response, HttpSession session)
+			throws ServletException, IOException {
+    }
+
+
+    private TestType getTypeByString(String typeString) {
+        if ("ping".equals(typeString)) {
+            return TestType.PING;
+        } else if ("jitter".equals(typeString)) {
+            return TestType.JITTER;
+        } else if ("download".equals(typeString)) {
+            return TestType.DOWNLOAD_SPEED;
+        } else if ("upload".equals(typeString)) {
+            return TestType.UPLOAD_SPEED;
+        }
+
+        return TestType.UNKNOWN;
+    }
+
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
new file mode 100644
index 0000000..d238e5b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
@@ -0,0 +1,260 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.log.Log4JLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+public class ScreenController {
+	private static final Logger log = Red5LoggerFactory.getLogger(ScreenController.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	public SessiondataDao sessiondataDao;
+	@Autowired
+	public ConfigurationDao cfgDao;
+	@Autowired
+	public LabelDao labelDao;
+	@Autowired
+	public RoomDao roomDao;
+
+	private enum ConnectionType {
+		rtmp
+		, rtmps
+		, rtmpt
+	}
+	
+	private String getLabels(Long language_id, int ... ids) {
+		StringBuilder result = new StringBuilder();
+		boolean delim = false;
+		for (int id : ids) {
+			if (delim) {
+				result.append(';');
+			}
+			result.append(labelDao.getString((long)id, language_id));
+			delim = true;
+		}
+		return result.toString();
+	}
+	
+    @RequestMapping(value = "/screen.upload")
+	public void handleRequest(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			String sid = request.getParameter("sid");
+			Long users_id = sessiondataDao.checkSession(sid);
+			String publicSID = request.getParameter("publicSID");
+			if (publicSID == null) {
+				throw new Exception("publicSID is empty: " + publicSID);
+			}
+			if (users_id == 0) {
+				//checkSession will return 0 in case of invalid session
+				throw new Exception("Request from invalid user " + users_id);
+			}
+
+			String domain = request.getParameter("domain");
+			if (domain == null) {
+				throw new Exception("domain is empty: " + domain);
+			}
+
+			String languageAsString = request.getParameter("languageAsString");
+			if (languageAsString == null) {
+				throw new Exception("languageAsString is empty: " + languageAsString);
+			}
+			Long language_id = Long.parseLong(languageAsString);
+
+			String rtmphostlocal = request.getParameter("rtmphostlocal");
+			if (rtmphostlocal == null) {
+				throw new Exception("rtmphostlocal is empty: " + rtmphostlocal);
+			}
+			
+			String baseURL = request.getParameter("baseurl");
+			if (baseURL == null) {
+				throw new Exception("baseurl is empty: " + baseURL);
+			}
+			log.debug("language_id :: " + language_id);
+			String label_sharer = "Sharer";
+
+			try {
+				label_sharer = getLabels(language_id
+					,  730,  731,  732,  733,  734
+					,  735,  737,  738,  739,  740
+					,  741,  742,  844,  869,  870
+					,  871,  872,  878, 1089, 1090
+					, 1091, 1092, 1093, 1465, 1466
+					, 1467, 1468, 1469, 1470, 1471
+					, 1472, 1473, 1474, 1475, 1476
+					, 1477, 1589, 1598, 1078);
+			} catch (Exception e) {
+				log.error("Error resolving Language labels : ", e);
+			}
+			log.debug("Creating JNLP Template for TCP solution");
+
+			log.debug("RTMP Sharer labels :: " + label_sharer);
+
+			ConnectionType conType = ConnectionType.valueOf(request.getParameter("connectionType"));
+
+			String port = request.getParameter("port");
+			if (port == null) {
+				throw new Exception("port is empty: ");
+			}
+			Client rc = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (rc == null) {
+				throw new Exception("Port is empty");
+			}
+			Long roomId = rc.getRoom_id();
+			if (roomId == null) {
+				throw new Exception("Client has no room " + rc);
+			}
+			Room room = roomDao.get(roomId);
+			boolean allowRecording = room.isAllowRecording() && rc.isAllowRecording() && (0 == sessionManager.getRecordingCount(roomId));
+			boolean allowPublishing = (0 == sessionManager.getPublishingCount(roomId));
+			
+			Context ctx = new VelocityContext();
+			ctx.put("codebase", baseURL + OmFileHelper.SCREENSHARING_DIR);
+			ctx.put("APP_NAME", cfgDao.getAppName());
+			ctx.put("protocol", conType.name());
+			ctx.put("host", rtmphostlocal);
+			ctx.put("port", port);
+			ctx.put("app", OpenmeetingsVariables.webAppRootKey + "/" + roomId);
+			ctx.put("userId", users_id);
+			ctx.put("publicSid", publicSID);
+			ctx.put("labels", label_sharer);
+			ctx.put("defaultQuality", cfgDao.getConfValue(CONFIG_SCREENSHARING_QUALITY, String.class, "1"));
+			ctx.put("defaultFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS, String.class, "10"));
+			ctx.put("showFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS_SHOW, Boolean.class, "true"));
+			ctx.put("allowRemote", cfgDao.getConfValue(CONFIG_SCREENSHARING_ALLOW_REMOTE, Boolean.class, "true"));
+			ctx.put("allowRecording", allowRecording);
+			ctx.put("allowPublishing", allowPublishing);
+			addKeystore(ctx);
+
+			String requestedFile = StringUtils.deleteWhitespace(domain + "_" + roomId) + ".jnlp";
+			response.setContentType("application/x-java-jnlp-file");
+			response.setCharacterEncoding("UTF-8");
+			response.setHeader("Content-Disposition", "Inline; filename=\"" + requestedFile + "\"");
+
+			VelocityEngine ve = new VelocityEngine();
+			ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); 
+			ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
+			ve.setProperty(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER, Log4JLogChute.class.getName()); 
+			
+			ve.mergeTemplate(
+				"screenshare.vm"
+				, "UTF-8"
+				, ctx
+				, response.getWriter());
+		} catch (Exception er) {
+			log.error("[ScreenController]", er);
+		}
+	}
+
+	private void addKeystore(Context ctx) {
+		log.debug("RTMP Sharer Keystore :: start");
+		String keystore = "--dummy--", password = "--dummy--";
+		FileInputStream fis = null, ris = null;
+		try {
+			File conf = new File(OmFileHelper.getRootDir(), "conf");
+
+			File keyStore = new File(conf, "keystore.screen");
+			if (keyStore.exists()) {
+				Properties red5Props = new Properties();
+				ris = new FileInputStream(new File(conf, "red5.properties"));
+				red5Props.load(ris);
+				
+				byte keyBytes[] = new byte[(int)keyStore.length()];
+				fis = new FileInputStream(keyStore);
+				fis.read(keyBytes);
+				
+				keystore = Hex.encodeHexString(keyBytes);
+				password = red5Props.getProperty("rtmps.screen.keystorepass");
+				
+				/*
+				KeyStore ksIn = KeyStore.getInstance(KeyStore.getDefaultType());
+				ksIn.load(new FileInputStream(keyStore), red5Props.getProperty("rtmps.keystorepass").toCharArray());
+				ByteArrayInputStream bin = new ByteArrayInputStream()
+				
+				byte fileContent[] = new byte[(int)file.length()];
+				sb = addArgument(sb, Object arg)
+				ctx.put("$KEYSTORE", users_id);
+				/*
+				KeyStore ksOut = KeyStore.getInstance(KeyStore.getDefaultType());
+				for (Certificate cert : ksIn.getCertificateChain("red5")) {
+					PublicKey pub = cert.getPublicKey();
+					TrustedCertificateEntry tce = new TrustedCertificateEntry(cert);
+					tce.
+				}
+				*/
+			}
+		} catch (Exception e) {
+			//no op
+		} finally {
+			if (fis != null) {
+				try {
+					fis.close();
+				} catch (IOException e) {
+					// no op
+				}
+			}
+			if (ris != null) {
+				try {
+					ris.close();
+				} catch (IOException e) {
+					// no op
+				}
+			}
+		}
+		ctx.put("keystore", keystore);
+		ctx.put("password", password);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java
new file mode 100644
index 0000000..525d937
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java
@@ -0,0 +1,370 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.data.file.FileProcessor;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.documents.GeneratePDF;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.UploadCompleteMessage;
+import org.apache.openmeetings.util.stringhandlers.StringComparer;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
+
+@Controller
+public class UploadController extends AbstractUploadController {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			UploadController.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private GeneratePDF generatePDF;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GenerateImage generateImage;
+	@Autowired
+	private FileProcessor fileProcessor;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+
+	private String filesString[] = null;
+	
+    @RequestMapping(value = "/file.upload", method = RequestMethod.POST)
+    public void handleFileUpload(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException {
+    	UploadInfo info = validate(request, false);
+    	try {
+			String room_idAsString = request.getParameter("room_id");
+			if (room_idAsString == null) {
+				throw new ServletException("Missing Room ID");
+			}
+	
+			Long room_id_to_Store = Long.parseLong(room_idAsString);
+	
+			String isOwnerAsString = request.getParameter("isOwner");
+			if (isOwnerAsString == null) {
+				throw new ServletException("Missing isOwnerAsString");
+			}
+			boolean isOwner = false;
+			if (isOwnerAsString.equals("1")) {
+				isOwner = true;
+			}
+	
+			String parentFolderIdAsString = request
+					.getParameter("parentFolderId");
+			if (parentFolderIdAsString == null) {
+				throw new ServletException("Missing parentFolderId ID");
+			}
+			Long parentFolderId = Long.parseLong(parentFolderIdAsString);
+	
+			MultipartFile multipartFile = info.file;
+			InputStream is = multipartFile.getInputStream();
+			log.debug("fileSystemName: " + info.filename);
+	
+			ConverterProcessResultList returnError = fileProcessor
+					.processFile(info.userId, room_id_to_Store, isOwner, is,
+							parentFolderId, info.filename, 0L, ""); // externalFilesId, externalType
+	
+			UploadCompleteMessage uploadCompleteMessage = new UploadCompleteMessage();
+	    	uploadCompleteMessage.setUserId(info.userId);
+	
+			// Flash cannot read the response of an upload
+			// httpServletResponse.getWriter().print(returnError);
+	    	uploadCompleteMessage.setMessage("library");
+	    	uploadCompleteMessage.setAction("newFile");
+	    	
+	    	setFileExplorerItem(uploadCompleteMessage,
+					fileExplorerItemDao.getFileExplorerItemsById(
+							returnError.getFileExplorerItemId()));
+			
+			uploadCompleteMessage.setHasError(returnError.hasError());
+			//we only send the complete log to the client if there is really something 
+			//to show because of an error
+			if (returnError.hasError()) {
+				uploadCompleteMessage.setError(returnError.getLogMessage());
+			}
+			uploadCompleteMessage.setFileName(returnError.getCompleteName());
+			
+			sendMessage(info, uploadCompleteMessage);
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+    	}
+    }
+    
+	public void setFileExplorerItem(UploadCompleteMessage msg, FileExplorerItem fileExplorerItem) {
+		if (fileExplorerItem.getIsImage() != null) {
+			msg.setIsImage(fileExplorerItem.getIsImage());
+		}
+		if (fileExplorerItem.getIsVideo() != null) {
+			msg.setIsVideo(fileExplorerItem.getIsVideo());
+		}
+		if (fileExplorerItem.getIsPresentation() != null) {
+			msg.setIsPresentation(fileExplorerItem.getIsPresentation());
+		}
+		msg.setFileSystemName(fileExplorerItem.getFileName());
+		msg.setFileHash(fileExplorerItem.getFileHash());
+	}
+    
+    @RequestMapping(value = "/remotelog.upload", method = RequestMethod.POST)
+    public void handleRemoteLog(HttpServletRequest request, HttpServletResponse response) throws ServletException {
+    	String message = request.getParameter("message");
+    	String sid = request.getParameter("sid");
+    	if (sid == null || message == null) return;
+    	Long userId = sessiondataDao.checkSession(sid);
+    	if (userId != null && userId != 0) {
+    		log.debug("[CLIENT MESSAGE] " + message);
+    	}
+    }
+    
+    @RequestMapping(value = "/upload.upload", method = RequestMethod.POST)
+    public void handleFormUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException {
+		try {
+	    	UploadInfo info = validate(request, false);
+	    	
+			String room_id = request.getParameter("room_id");
+			if (room_id == null) {
+				room_id = "default";
+			}
+			String roomName = StringUtils.deleteWhitespace(room_id);
+	
+			String moduleName = request.getParameter("moduleName");
+			if (moduleName == null) {
+				moduleName = "nomodule";
+			}
+			if (moduleName.equals("nomodule")) {
+				log.debug("module name missed");
+				return;
+			}
+			boolean userProfile = moduleName.equals("userprofile");
+	
+			MultipartFile multipartFile = info.file;
+			InputStream is = multipartFile.getInputStream();
+			String fileSystemName = info.filename;
+			fileSystemName = StringUtils.deleteWhitespace(fileSystemName);
+	
+			UploadCompleteMessage uploadCompleteMessage = new UploadCompleteMessage();
+	    	uploadCompleteMessage.setUserId(info.userId);
+			
+			// Flash cannot read the response of an upload
+			// httpServletResponse.getWriter().print(returnError);
+			uploadFile(request, userProfile, info.userId, roomName, is, fileSystemName, uploadCompleteMessage);
+			sendMessage(info, uploadCompleteMessage);
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+		}
+    }
+
+    
+    private void sendMessage(UploadInfo info, UploadCompleteMessage uploadCompleteMessage) {
+		scopeApplicationAdapter.sendUploadCompletMessageByPublicSID(
+				uploadCompleteMessage, info.publicSID);
+    }
+    
+	private void uploadFile(HttpServletRequest request, boolean userProfile, Long userId, String roomName,
+			InputStream is, String fileSystemName, UploadCompleteMessage uploadCompleteMessage)
+			throws Exception {
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+
+		// Check variable to see if this file is a presentation
+		int dotidx = fileSystemName.lastIndexOf('.');
+		String newFileName = StringComparer.getInstance().compareForRealPaths(
+				fileSystemName.substring(0, dotidx));
+		String newFileExtDot = fileSystemName.substring(dotidx,
+				fileSystemName.length()).toLowerCase();
+		String newFileExt = newFileExtDot.substring(1);
+
+		// trim long names cause cannot output that
+		final int MAX_FILE_NAME_LENGTH = 30;
+		if (newFileName.length() >= MAX_FILE_NAME_LENGTH) {
+			newFileName = newFileName.substring(0, MAX_FILE_NAME_LENGTH);
+		}
+		StoredFile storedFile = new StoredFile(newFileName, newFileExt);
+
+		// check if this is a a file that can be converted by
+		// openoffice-service
+		boolean canBeConverted = storedFile.isConvertable();
+		boolean isPdf = storedFile.isPdf();
+		boolean isImage = storedFile.isImage();
+		boolean isAsIs = storedFile.isAsIs();
+
+		File workingDir = null;
+		// add outputfolders for profiles
+		if (userProfile) {
+			// User Profile Update
+			this.deleteUserProfileFilesStoreTemp(userId);
+			newFileName = "profile"; //set unified file name to avoid any problems with national characters
+			workingDir = OmFileHelper.getUploadProfilesUserDir(userId);
+		}
+		// if it is a presenation it will be copied to another
+		// place
+		if (isAsIs) {
+			// check if this is a room file or UserProfile
+			if (!userProfile) {
+				workingDir = OmFileHelper.getUploadRoomDir(roomName);
+			}
+		} else if (canBeConverted || isPdf || isImage) {
+			workingDir = OmFileHelper.getUploadTempProfilesUserDir(userId);
+		} else {
+			return;
+		}
+
+		File completeName = OmFileHelper.getNewFile(workingDir, newFileName, newFileExtDot);
+
+		log.debug("write file to : " + completeName);
+
+		FileHelper.copy(is, completeName);
+		is.close();
+
+		log.debug("canBeConverted: " + canBeConverted);
+		if (canBeConverted) {
+			// convert to pdf, thumbs, swf and xml-description
+			returnError = generatePDF.convertPDF(newFileName, roomName, true, completeName);
+		} else if (isPdf) {
+			
+			boolean isEncrypted = true; 
+			
+			log.debug("isEncrypted :: " + isEncrypted);
+
+			if (isEncrypted) {
+				// Do convert pdf to other pdf first
+				File f_old = completeName;
+
+				completeName = OmFileHelper.appendSuffix(completeName, "_N_E");
+				newFileName += "_N_E";
+
+				generateThumbs.decodePDF(f_old.getCanonicalPath(), completeName.getCanonicalPath());
+
+				if (f_old.exists()) {
+					f_old.delete();
+				}
+
+			}
+
+			// convert to thumbs, swf and xml-description
+			returnError = generatePDF.convertPDF(newFileName, roomName, false, completeName);
+
+			// returnError.put("decodePDF", returnError2);
+
+		} else if (isImage && !isAsIs) {
+
+			log.debug("##### isImage! userProfilePic: " + userProfile);
+
+			if (userProfile) {
+				// convert it to JPG
+				returnError = generateImage.convertImageUserProfile(completeName, userId, true);
+			} else {
+				// convert it to JPG
+				log.debug("##### convert it to JPG: " + userProfile);
+				returnError = generateImage.convertImage(
+					newFileName, newFileExtDot, roomName, newFileName, false);
+			}
+		} else if (isAsIs) {
+			if (userProfile) {
+				// User Profile Update
+				this.deleteUserProfileFiles(userId);
+				// is UserProfile Picture
+				returnError.addItem("processThumb1", generateThumbs
+						.generateThumb(chatImagePrefix, completeName, 40));
+				returnError.addItem("processThumb2", generateThumbs
+						.generateThumb(profileImagePrefix, completeName, 126));
+				returnError.addItem("processThumb3", generateThumbs
+						.generateThumb(bigImagePrefix, completeName, 240));
+
+				String pictureuri = completeName.getName();
+				User us = usersDao.get(userId);
+				us.setUpdatetime(new java.util.Date());
+				us.setPictureuri(pictureuri);
+				usersDao.update(us, userId);
+
+				//FIXME: After updating the picture url all other users should refresh
+			} else {
+				returnError.addItem("processThumb", generateThumbs
+						.generateThumb(thumbImagePrefix, completeName, 50));
+			}
+		}
+
+		uploadCompleteMessage.setMessage("library");
+		uploadCompleteMessage.setAction("newFile");
+		
+		uploadCompleteMessage.setHasError(returnError.hasError());
+		
+		//we only send the complete log to the client if there is really something 
+		//to show because of an error
+		if (returnError.hasError()) {
+			uploadCompleteMessage.setError(returnError.getLogMessage());
+		}
+		uploadCompleteMessage.setFileName(completeName.getName());
+		
+	}
+
+	private void deleteUserProfileFilesStoreTemp(Long users_id) throws Exception {
+		File f = OmFileHelper.getUploadProfilesUserDir(users_id);
+		if (f.exists() && f.isDirectory()) {
+			this.filesString = f.list();
+		}
+	}
+
+	private void deleteUserProfileFiles(Long users_id) throws Exception {
+		File working_imgdir = OmFileHelper.getUploadProfilesUserDir(users_id);
+
+		for (int i = 0; i < this.filesString.length; i++) {
+			String fileName = filesString[i];
+			File subf = new File(working_imgdir, fileName);
+			subf.delete();
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/session/ServerUtil.java b/src/main/java/org/apache/openmeetings/session/ServerUtil.java
new file mode 100644
index 0000000..05ad507
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/ServerUtil.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Configures the current reference to the {@link Server} for this Tomcat/Web-Container.
+ * 
+ * It is a Spring Bean and configured as Singleton. There is only one instance of this 
+ * bean in the entire Web-Application.  
+ * 
+ * @author sebawagner
+ *
+ */
+public class ServerUtil {
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			ServerUtil.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+	
+	/**
+	 * Injected via Spring configuration
+	 * 
+	 * for cluster configuration, if only using one server (no cluster), serverId is null,
+	 * this is the current serverId of this Tomcat instance (null means no cluster is configured)
+	 */
+	private String serverId = null;
+	
+	/**
+	 * a reference of the current server in that Tomcat instance
+	 */
+	private Server currentServer;
+	
+	public String getServerId() {
+		return serverId;
+	}
+	
+	public void setServerId(String serverId) {
+		this.serverId = serverId;
+	}
+	
+	/**
+	 * 
+	 * @return the current server
+	 */
+	public Server getCurrentServer() {
+		if (serverId == null) {
+			return null;
+		}
+		if (currentServer != null && serverId.equals(currentServer.getId().toString())) {
+			return currentServer;
+		}
+		currentServer = serverDao.get(Long.parseLong(serverId));
+		if (currentServer == null) {
+			log.warn("You have configured a serverId that does not exist in your list of servers, serverId: "+serverId);
+		}
+		return currentServer;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/session/SessionManager.java b/src/main/java/org/apache/openmeetings/session/SessionManager.java
new file mode 100644
index 0000000..0a5636c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/SessionManager.java
@@ -0,0 +1,441 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Random;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.session.store.IClientPersistenceStore;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Handle {@link Client} objects.
+ * 
+ * Use a kind of decorator pattern to inject the {@link Server} into every call.
+ * 
+ * @author sebawagner
+ * 
+ */
+public class SessionManager implements ISessionManager {
+	
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			SessionManager.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private ServerUtil serverUtil;
+	
+	/**
+	 * Injected via Spring, needs a getter/setter because it can be configured
+	 * Autowired will not suit here as there are multiple implementations of the
+	 * {@link IClientPersistenceStore}
+	 */
+	private IClientPersistenceStore cache;
+	
+	public IClientPersistenceStore getCache() {
+		return cache;
+	}
+
+	public void setCache(IClientPersistenceStore cache) {
+		this.cache = cache;
+	}
+
+	private ISessionManager sessionManager = new ISessionManager() {
+		
+		public synchronized Client addClientListItem(String streamId,
+				String scopeName, Integer remotePort, String remoteAddress,
+				String swfUrl, boolean isAVClient, Server server) {
+			try {
+
+				// Store the Connection into a bean and add it to the HashMap
+				Client rcm = new Client();
+				rcm.setConnectedSince(new Date());
+				rcm.setStreamid(streamId);
+				rcm.setScope(scopeName);
+				long random = System.currentTimeMillis() + new BigInteger(256, new Random()).longValue();
+				
+				rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
+						.createPassPhrase(String.valueOf(random).toString()));
+
+				rcm.setServer(server);
+				rcm.setUserport(remotePort);
+				rcm.setUserip(remoteAddress);
+				rcm.setSwfurl(swfUrl);
+				rcm.setIsMod(new Boolean(false));
+				rcm.setCanDraw(new Boolean(false));
+				rcm.setIsAVClient(isAVClient);
+
+				if (cache.containsKey(null, streamId)) {
+					log.error("Tried to add an existing Client " + streamId);
+					return null;
+				}
+
+				cache.put(rcm.getStreamid(), rcm);
+
+				return rcm;
+			} catch (Exception err) {
+				log.error("[addClientListItem]", err);
+			}
+			return null;
+		}
+
+		public synchronized Collection<Client> getClients() {
+			return cache.getClients();
+		}
+		
+		public synchronized Collection<Client> getClientsWithServer() {
+			return cache.getClientsWithServer();
+		}
+
+		public synchronized Client getClientByStreamId(String streamId, Server server) {
+			try {
+				if (!cache.containsKey(server, streamId)) {
+					log.debug("Tried to get a non existing Client " + streamId + " server " + server);
+					return null;
+				}
+				return cache.get(server, streamId);
+			} catch (Exception err) {
+				log.error("[getClientByStreamId]", err);
+			}
+			return null;
+		}
+
+		public Client getClientByPublicSID(String publicSID, boolean isAVClient, Server server) {
+			try {
+				for (Client rcl : cache.getClientsByPublicSID(server, publicSID)) {
+					if (rcl.getIsAVClient() != isAVClient) {
+						continue;
+					}
+					return rcl;
+				}
+			} catch (Exception err) {
+				log.error("[getClientByPublicSID]", err);
+			}
+			return null;
+		}
+		
+		public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient) {
+			try {
+				for (Entry<Long,List<Client>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
+					for (Client rcl : entry.getValue()) {
+						if (rcl.getIsAVClient() != isAVClient) {
+							continue;
+						}
+						return new ClientSessionInfo(rcl, entry.getKey());
+					}
+				}
+			} catch (Exception err) {
+				log.error("[getClientByPublicSIDAnyServer]", err);
+			}
+			return null;
+		}
+
+		public synchronized Client getClientByUserId(Long userId) {
+			try {
+				for (Client rcl : cache.getClientsByUserId(null, userId)) {
+					
+					if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
+						continue;
+					}
+					
+					if (rcl.getIsAVClient()) {
+						continue;
+					}
+					
+					return rcl;
+				}
+			} catch (Exception err) {
+				log.error("[getClientByUserId]", err);
+			}
+			return null;
+		}
+
+		public synchronized Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {
+			try {
+				// get the corresponding user session object and update the settings
+				Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), false, server);
+				if (rclUsual != null) {
+					rclUsual.setBroadCastID(rcm.getBroadCastID());
+					rclUsual.setAvsettings(rcm.getAvsettings());
+					rclUsual.setVHeight(rcm.getVHeight());
+					rclUsual.setVWidth(rcm.getVWidth());
+					rclUsual.setVX(rcm.getVX());
+					rclUsual.setVY(rcm.getVY());
+					Client rclSaved = cache.get(server, rclUsual.getStreamid());
+					if (rclSaved != null) {
+						cache.put(rclUsual.getStreamid(), rclUsual);
+					} else {
+						log.debug("Tried to update a non existing Client " + rclUsual.getStreamid());
+					}
+				}
+
+				updateClientByStreamId(streamId, rcm, false, server);
+			} catch (Exception err) {
+				log.error("[updateAVClientByStreamId]", err);
+			}
+			return null;
+		}
+
+		public synchronized Boolean updateClientByStreamId(String streamId,
+				Client rcm, boolean updateRoomCount, Server server) {
+			try {
+				
+				Client rclSaved = cache.get(server, streamId);
+				
+				if (rclSaved != null) {
+					cache.put(streamId, rcm);
+					return true;
+				} else {
+					log.debug("Tried to update a non existing Client " + streamId);
+					return false;
+				}
+			} catch (Exception err) {
+				log.error("[updateClientByStreamId]", err);
+			}
+			return null;
+		}
+
+		public synchronized Boolean removeClient(String streamId, Server server) {
+			try {
+				if (cache.containsKey(server,streamId)) {
+					cache.remove(server,streamId);
+					return true;
+				} else {
+					log.debug("Tried to remove a non existing Client " + streamId);
+					return false;
+				}
+			} catch (Exception err) {
+				log.error("[removeClient]", err);
+			}
+			return null;
+		}
+
+		public synchronized ArrayList<Client> getClientListByRoom(Long roomId) {
+			ArrayList<Client> roomClientList = new ArrayList<Client>();
+			try {
+
+				for (Client rcl : cache.getClientsByRoomId(roomId)) {
+
+					if (rcl.getIsScreenClient() == null || rcl.getIsScreenClient()) {
+						continue;
+					}
+					if (rcl.getIsAVClient()) {
+						continue;
+					}
+
+					// Only parse really those users out that are really a full session object
+					// and no pseudo session object like the audio/video or screen
+					// sharing connection
+					roomClientList.add(rcl);
+				}
+			} catch (Exception err) {
+				log.error("[getClientListByRoom]", err);
+			}
+			return roomClientList;
+		}
+		
+		public synchronized Collection<Client> getClientListByRoomAll(Long roomId) {
+			try {
+				return cache.getClientsByRoomId(roomId);
+			} catch (Exception err) {
+				log.error("[getClientListByRoomAll]", err);
+			}
+			return null;
+		}
+
+		public synchronized List<Client> getCurrentModeratorByRoom(Long room_id) {
+			List<Client> rclList = new LinkedList<Client>();
+			List<Client> currentClients = this.getClientListByRoom(room_id);
+			for (Client rcl : currentClients) {
+				if (rcl.getIsMod()) {
+					rclList.add(rcl);
+				}
+			}
+
+			return rclList;
+		}
+
+		// FIXME not sorted
+		public synchronized SearchResult<Client> getListByStartAndMax(
+				int start, int max, String orderby, boolean asc) {
+			SearchResult<Client> sResult = new SearchResult<Client>();
+			sResult.setObjectName(Client.class.getName());
+			sResult.setRecords(Long.valueOf(cache.size()).longValue());
+			sResult.setResult(cache.getClientsWithServer());
+			return sResult;
+		}
+
+		public long getRecordingCount(long roomId) {
+			List<Client> currentClients = this.getClientListByRoom(roomId);
+			int numberOfRecordingUsers = 0;
+			for (Client rcl : currentClients) {
+				if (rcl.isStartRecording()) {
+					numberOfRecordingUsers++;
+				}
+			}
+			return numberOfRecordingUsers;
+		}
+
+		public long getPublishingCount(long roomId) {
+			List<Client> currentClients = this.getClientListByRoom(roomId);
+			int numberOfPublishingUsers = 0;
+			for (Client rcl : currentClients) {
+				if (rcl.isStreamPublishStarted()) {
+					numberOfPublishingUsers++;
+				}
+			}
+			return numberOfPublishingUsers;
+		}
+		
+		public List<Long> getActiveRoomIdsByServer(Server server) {
+			return cache.getRoomsIdsByServer(server);
+		}
+		
+		
+		public String getSessionStatistics() {
+			return cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
+		}
+
+		public void sessionStart() {
+			// TODO Auto-generated method stub
+			
+		}
+		
+	};
+	
+	public Client addClientListItem(String streamId, String scopeName,
+			Integer remotePort, String remoteAddress, String swfUrl,
+			boolean isAVClient, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.addClientListItem(streamId, scopeName,
+				remotePort, remoteAddress, swfUrl, isAVClient, server);
+	}
+
+	public Collection<Client> getClients() {
+		return sessionManager.getClients();
+	}
+	
+	public Collection<Client> getClientsWithServer() {
+		return sessionManager.getClientsWithServer();
+	}
+
+	public Client getClientByStreamId(String streamId, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.getClientByStreamId(streamId, server);
+	}
+
+	public Client getClientByPublicSID(String publicSID, boolean isAVClient,
+			Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.getClientByPublicSID(publicSID, isAVClient,
+				server);
+	}
+
+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID,
+			boolean isAVClient) {
+		return sessionManager.getClientByPublicSIDAnyServer(publicSID,
+				isAVClient);
+	}
+
+	public Client getClientByUserId(Long userId) {
+		return sessionManager.getClientByUserId(userId);
+	}
+
+	public Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.updateAVClientByStreamId(streamId, rcm, server);
+	}
+
+	public Boolean updateClientByStreamId(String streamId, Client rcm,
+			boolean updateRoomCount, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.updateClientByStreamId(streamId, rcm,
+				updateRoomCount, server);
+	}
+
+	public Boolean removeClient(String streamId, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		return sessionManager.removeClient(streamId, server);
+	}
+
+	public List<Client> getClientListByRoom(Long room_id) {
+		return sessionManager.getClientListByRoom(room_id);
+	}
+
+	public Collection<Client> getClientListByRoomAll(Long room_id) {
+		return sessionManager.getClientListByRoomAll(room_id);
+	}
+
+	public List<Client> getCurrentModeratorByRoom(Long room_id) {
+		return sessionManager.getCurrentModeratorByRoom(room_id);
+	}
+
+	public SearchResult<Client> getListByStartAndMax(int start, int max,
+			String orderby, boolean asc) {
+		return sessionManager.getListByStartAndMax(start, max, orderby, asc);
+	}
+
+	public long getRecordingCount(long roomId) {
+		return sessionManager.getRecordingCount(roomId);
+	}
+
+	public long getPublishingCount(long roomId) {
+		return sessionManager.getPublishingCount(roomId);
+	}
+
+	public List<Long> getActiveRoomIdsByServer(Server server) {
+		return sessionManager.getActiveRoomIdsByServer(server == null ? serverUtil.getCurrentServer() : server);
+	}
+
+	public String getSessionStatistics() {
+		return sessionManager.getSessionStatistics();
+	}
+
+	public void sessionStart() {
+		sessionManager.sessionStart();
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java b/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java
new file mode 100644
index 0000000..9529ebd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class DatabaseStore implements IClientPersistenceStore {
+	
+	@Autowired
+	private ClientDao clientDao;
+	
+	public void clearCache() {
+		
+		//List<Server> serverList = serverDao.getActiveServers();
+		
+		//clientDao.cleanUpClientsWithoutReference();
+	}
+	
+	public void put(String streamId, Client rcl) {
+		if (rcl.getId() > 0) {
+			clientDao.update(rcl);
+		} else {
+			clientDao.add(rcl);
+		}
+	}
+
+	public boolean containsKey(Server server, String streamId) {
+		return clientDao.countClientsByServerAndStreamId(server, streamId) > 0;
+	}
+
+	public Client get(Server server, String streamId) {
+		return clientDao.getClientByServerAndStreamId(server, streamId);
+	}
+
+	public List<Client> getClientsByPublicSID(Server server, String publicSID) {
+		return clientDao.getClientsByPublicSIDAndServer(server, publicSID);
+	}
+
+	public Map<Long, List<Client>> getClientsByPublicSID(String publicSID) {
+		Map<Long, List<Client>> returnMap = new HashMap<Long, List<Client>>();
+		List<Client> clientList = clientDao.getClientsByPublicSID(publicSID);
+		for (Client cl : clientList) {
+			
+			if (cl.getServer() == null) {
+				List<Client> clList = returnMap.get(null);
+				if (clList == null) {
+					clList = new ArrayList<Client>();
+				}
+				clList.add(cl);
+				returnMap.put(null, clList);
+			} else {
+				List<Client> clList = returnMap.get(cl.getServer().getId());
+				if (clList == null) {
+					clList = new ArrayList<Client>();
+				}
+				clList.add(cl);
+				returnMap.put(cl.getServer().getId(), clList);
+			}
+		}
+		return returnMap;
+	}
+	
+	public Collection<Client> getClients() {
+		return clientDao.getClients();
+	}
+	
+	public Collection<Client> getClientsWithServer() {
+		return clientDao.getClientsWithServer();
+	}
+
+	public Collection<Client> getClientsByServer(Server server) {
+		return clientDao.getClientsByServer(server);
+	}
+
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		return clientDao.getClientsByUserId(server, userId);
+	}
+
+	public List<Client> getClientsByRoomId(Long roomId) {
+		return clientDao.getClientsByRoomId(roomId);
+	}
+
+	public void remove(Server server, String streamId) {
+		clientDao.removeClientByServerAndStreamId(server, streamId);
+	}
+
+	public int size() {
+		return clientDao.countClients();
+	}
+
+	public int sizeByServer(Server server) {
+		return clientDao.countClientsByServer(server);
+	}
+
+	public Collection<Client> values() {
+		return clientDao.getClients();
+	}
+
+	public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List<Long> getRoomsIdsByServer(Server server) {
+		return clientDao.getRoomsIdsByServer(server);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java b/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java
new file mode 100644
index 0000000..4adf20d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Stores the session in the memory.
+ * Is NOT designed to be clustered across multiple servers.
+ * 
+ * <ul>
+ * <li>client by streamid</li>
+ * <li>client by publicSID</li>
+ * <li>client by userId</li>
+ * <li>clients by roomId</li>
+ * <li>roomIds by server</li>
+ * </ul>
+ * 
+ * @author sebawagner
+ * 
+ */
+public class HashMapStore implements IClientPersistenceStore {
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			HashMapStore.class, OpenmeetingsVariables.webAppRootKey);
+	
+	
+	private LinkedHashMap<String, Client> clientsByStreamId = new LinkedHashMap<String, Client>();
+
+	public void clearCache() {
+		clientsByStreamId = new LinkedHashMap<String, Client>();
+	}
+	
+	public void put(String streamId, Client rcl) {
+		clientsByStreamId.put(rcl.getStreamid(), rcl);
+	}
+
+	public boolean containsKey(Server server, String streamId) {
+		return clientsByStreamId.containsKey(streamId);
+	}
+
+	public Client get(Server server, String streamId) {
+		return clientsByStreamId.get(streamId);
+	}
+	
+	public List<Client> getClientsByPublicSID(Server server, String publicSID) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getPublicSID().equals(publicSID)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+	
+	public Map<Long,List<Client>> getClientsByPublicSID(String publicSID) {
+		Map<Long,List<Client>> clientMapList = new HashMap<Long,List<Client>>();
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getPublicSID().equals(publicSID)) {
+				clientList.add(cl);
+			}
+		}
+		clientMapList.put(null, clientList);
+		return clientMapList;
+	}
+	
+	public Collection<Client> getClients() {
+		return clientsByStreamId.values();
+	}
+	
+	public Collection<Client> getClientsWithServer() {
+		//there is no server object to be loaded, memory cache means
+		//there is no cluster enabled
+		return getClients();
+	}
+	
+	public Collection<Client> getClientsByServer(Server server) {
+		return clientsByStreamId.values();
+	}
+	
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getUser_id().equals(userId)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+	
+	public  List<Client> getClientsByRoomId(Long roomId) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getRoom_id() != null && cl.getRoom_id().equals(roomId)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+
+	public void remove(Server server, String streamId) {
+		clientsByStreamId.remove(streamId);
+	}
+
+	public int size() {
+		return clientsByStreamId.size();
+	}
+	
+	public int sizeByServer(Server server) {
+		return clientsByStreamId.size();
+	}
+
+	public Collection<Client> values() {
+		return clientsByStreamId.values();
+	}
+	
+	public int getTotalNumberOfSessions() {
+		return clientsByStreamId.size();
+	}
+	
+	
+	/**
+	 * Print some session statistics to the debug out
+	 * 
+	 * @param detailLevel
+	 */
+	public void printDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+		log.debug("Session Statistics Start ################## ");
+		log.debug(getDebugInformation(detailLevel));
+		log.debug("Session Statistics End ################## ");
+	}
+
+	public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+
+		StringBuilder statistics = new StringBuilder();
+
+		if (detailLevel.contains(DEBUG_DETAILS.SIZE)) {
+			addNewLine(statistics, "Number of sessions Total "
+					+ getTotalNumberOfSessions());
+		}
+
+		return statistics.toString();
+	}
+
+	private void addNewLine(StringBuilder strBuilder, String message) {
+		strBuilder.append(message + "\n\r");
+	}
+
+	public List<Long> getRoomsIdsByServer(Server server) {
+		HashSet<Long> rooms = new HashSet<Long>();
+		for (Client cl : clientsByStreamId.values()) {
+			Long roomId = cl.getRoom_id();
+			if (roomId != null && roomId > 0 && !rooms.contains(roomId)) {
+				rooms.add(roomId);
+			}
+		}
+		return new ArrayList<Long>(rooms);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java b/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java
new file mode 100644
index 0000000..9aa7e36
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+
+public interface IClientPersistenceStore {
+
+	public enum DEBUG_DETAILS {
+		SIZE
+	}
+	
+	/**
+	 * called upon start of the session cache
+	 */
+	public abstract void clearCache();
+
+	/**
+	 * 
+	 * @param streamId
+	 * @param rcl
+	 */
+	public abstract void put(String streamId, Client rcl);
+	
+	/**
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return
+	 */
+	public boolean containsKey(Server server, String streamId);
+
+	/**
+	 * by server and publicSID
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return will return null if the client does not exist in the list
+	 */
+	public abstract Client get(Server server, String streamId);
+
+	/**
+	 * 
+	 * @param server
+	 * @param publicSID
+	 * @return will return an empty list if nothing available
+	 */
+	public abstract List<Client> getClientsByPublicSID(Server server,
+			String publicSID);
+
+	/**
+	 * Searches for the publicSID across all servers
+	 * 
+	 * @param publicSID
+	 * @return will return a map with the serverId as key and the RoomClients as list in the value
+	 */
+	public abstract Map<Long, List<Client>> getClientsByPublicSID(
+			String publicSID);
+
+	public abstract Collection<Client> getClients();
+	
+	/**
+	 * get all clients by a specific {@link Server}
+	 * 
+	 * @param server
+	 * @return will return an empty map if nothing available
+	 */
+	public abstract Collection<Client> getClientsByServer(Server server);
+
+	/**
+	 * 
+	 * @param server
+	 * @param userId
+	 * @return will return an empty list if nothing available
+	 */
+	public abstract Collection<Client> getClientsByUserId(Server server, Long userId);
+
+	/**
+	 * 
+	 * We ignore the server here, cause ONE room can only be on ONE server and often we don't know where.
+	 * 
+	 * @param roomId
+	 * @return will return an empty map if nothing available
+	 */
+	public abstract List<Client> getClientsByRoomId(Long roomId);
+
+	public abstract void remove(Server server, String streamId);
+
+	public abstract int size();
+
+	public abstract int sizeByServer(Server server);
+
+	public abstract Collection<Client> values();
+	
+	/**
+	 * Get some session statistics
+	 * 
+	 * @param detailLevel
+	 * @return
+	 */
+	public abstract String getDebugInformation(List<DEBUG_DETAILS> detailLevel);
+
+	/**
+	 * returns a list of roomIds (unique) that are currently active on the given server
+	 * In case the session is stored in the memory (no-cluster setup) it will always 
+	 * return simply all active roomIds
+	 * 
+	 * @param server
+	 * @return
+	 */
+	public abstract List<Long> getRoomsIdsByServer(Server server);
+
+	/**
+	 * if database cache + cluster is enabled, the server object will be loaded 
+	 * into the client
+	 * 
+	 * @return
+	 */
+	public abstract Collection<Client> getClientsWithServer();
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/openmeetings/util/LinkHelper.java b/src/main/java/org/apache/openmeetings/util/LinkHelper.java
new file mode 100644
index 0000000..c58cb72
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/util/LinkHelper.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import static org.apache.openmeetings.web.user.rooms.RoomEnterBehavior.getRoomUrlFragment;
+
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User.Type;
+
+public class LinkHelper {
+	
+	public static String getInvitationLink(String baseUrl, Invitation i) {
+		String link = baseUrl;
+		if (link == null) {
+			return null;
+		}
+		if (i.getRoom() != null) {
+			if (i.getInvitee().getType() == Type.contact) {
+				link += "?invitationHash=" + i.getHash();
+		
+				if (i.getInvitee().getLanguage_id() > 0) {
+					link += "&language=" + i.getInvitee().getLanguage_id().toString();
+				}
+			} else {
+				link = getRoomUrlFragment(i.getRoom().getRooms_id()).getLink(baseUrl);
+			}
+		}
+		return link;
+	}
+}
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
new file mode 100644
index 0000000..cf8a6af
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.ibm.db2.jcc.DB2Driver
+					, Url=jdbc:db2://localhost:50000/openmeet
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=db2admin
+					, Password=admin" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
new file mode 100644
index 0000000..4ad3b3d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,
+                                  Url=jdbc:derby:openmeetings;create=true, 
+                                  create=true,
+                                  MaxActive=100, 
+                                  MaxWait=10000, 
+                                  TestOnBorrow=true, 
+                                  Username=user, 
+                                  Password=secret" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="false" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
new file mode 100644
index 0000000..bde02b8
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
+					, Url=jdbc:sqlserver://localhost:1433;databaseName=openmeetings
+					, Username=Username
+					, Password=Password" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<!-- QueryCache disabled due to changes outside of JPA doesn't take effect with caching -->
+			<property name="openjpa.QueryCache" value="false" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
new file mode 100644
index 0000000..f82c551
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.mysql.jdbc.Driver
+					, Url=jdbc:mysql://localhost:3306/openmeetings?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=root
+					, Password=" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<!-- QueryCache disabled due to changes outside of JPA doesn't take effect with caching -->
+			<property name="openjpa.QueryCache" value="false" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
new file mode 100644
index 0000000..a21f9d7
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=oracle.jdbc.driver.OracleDriver
+							, Url=jdbc:oracle:thin:@localhost:1521:openmeetings 
+							, create=true
+							, MaxActive=100 
+							, MaxWait=10000 
+							, TestOnBorrow=true 
+							, Username=SYSTEM 
+							, Password=admin" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="oracle(UseTriggersForAutoAssign=true, MaxAutoAssignNameLength=28, BatchLimit=100)" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
new file mode 100644
index 0000000..122cace
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=org.postgresql.Driver
+					, Url=jdbc:postgresql://localhost:5432/openmeetings
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=postgres
+					, Password=1" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/logback-config.xml b/src/main/webapp/WEB-INF/classes/logback-config.xml
new file mode 100644
index 0000000..905ba6c
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/logback-config.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<contextName>${current_openmeetings_context_name}</contextName>
+
+	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
+
+	<appender name="FLOG2" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<File>log/${current_openmeetings_context_name}.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>
+				%5p %d{MM-dd HH:mm:ss.SSS } %c{15}:%L [%t] - %m%n
+			</Pattern>
+		</layout>
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- daily rollover -->
+			<fileNamePattern>log\${current_openmeetings_context_name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<!-- or whenever the file size reaches 100MB -->
+				<maxFileSize>50MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!-- keep 30 days' worth of history -->
+			<maxHistory>50</maxHistory>
+		</rollingPolicy>
+	</appender>
+	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<logger name="org.apache.axis2" level="ERROR" />
+	<logger name="com.mchange.v2" level="ERROR" />
+	<logger name="org.apache.axiom" level="ERROR" />
+	<logger name="org.apache.commons.httpclient" level="ERROR" />
+	<logger name="de.hunsicker.jalopy.io" level="ERROR" />
+	<logger name="org.apache.axis2.enterprise" level="ERROR" />
+	<logger name="httpclient.wire.header" level="ERROR" />
+	<logger name="org.apache.directory" level="INFO" />
+	<logger name="org.apache.mina.filter.ssl.SslFilter" level="ERROR" />
+	<root level="DEBUG">
+		<appender-ref ref="FLOG2" />
+		<appender-ref ref="CONSOLE2" />
+	</root>
+</configuration>
diff --git a/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml b/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
new file mode 100644
index 0000000..79833e0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:tx="http://www.springframework.org/schema/tx"
+	xmlns:mvc="http://www.springframework.org/schema/mvc"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
+		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"
+		>
+	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+		<property name="persistenceUnitName" value="openmeetings" />
+	</bean>
+	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<property name="entityManagerFactory" ref="entityManagerFactory" />
+	</bean>
+
+	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
+
+	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
+	<!-- Configures the @Controller programming model -->
+	<mvc:annotation-driven />
+
+	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
+	<context:annotation-config />
+	<context:component-scan base-package="org.apache.openmeetings" />
+
+	<!-- New Class for the Streaming Handlers -->
+	<bean id="web.handler" class="org.apache.openmeetings.remote.red5.ScopeApplicationAdapter" />
+
+	<!-- Session configuration start -->
+
+	<bean id="openmeetings.SessionManager" class="org.apache.openmeetings.session.SessionManager">
+		<property name="cache">
+			<!-- Memory based session cache by default -->
+			<ref bean="openmeetings.HashMapStore" />
+			<!-- The following section should be used in clustering mode
+			<ref bean="openmeetings.DatabaseStore" />
+			-->
+		</property>
+	</bean>
+	<bean id="openmeetings.EmoticonsManager" class="org.apache.openmeetings.data.whiteboard.EmoticonsManager" />
+
+	<!-- Singletons for memory based cache -->
+	<bean id="openmeetings.HashMapStore" scope="singleton" class="org.apache.openmeetings.session.store.HashMapStore" />
+	<bean id="whiteBoardObjectListManagerById" scope="singleton" class="org.apache.openmeetings.data.whiteboard.WhiteBoardObjectListManagerById" />
+	<!-- WhiteBoardObjectSyncManager can stay in the memory, even on cluster! -->
+	<bean id="whiteBoardObjectSyncManager" scope="singleton" class="org.apache.openmeetings.data.whiteboard.WhiteBoardObjectSyncManager" />
+
+	<!-- Database cache -->
+	<bean id="openmeetings.DatabaseStore" class="org.apache.openmeetings.session.store.DatabaseStore" />
+
+	<bean id="openmeetings.ServerUtil" scope="singleton" class="org.apache.openmeetings.session.ServerUtil">
+		<!-- Need to be uncommented and set to the real ID if in cluster mode
+		<property name="serverId" value="1" />
+		-->
+	</bean>
+
+	<!-- Cluster related config start -->
+
+	<!-- Start of Services -->
+	<bean id="xmlcrm.service" class="org.apache.openmeetings.remote.MainService" />
+	<bean id="printservice.service" class="org.apache.openmeetings.remote.PrintService" />
+	<bean id="pollservice.service" class="org.apache.openmeetings.remote.PollService" />
+	<bean id="languageservice.service" class="org.apache.openmeetings.remote.LanguageService" />
+	<bean id="invitationservice.service" class="org.apache.openmeetings.remote.InvitationService" />
+	<bean id="whiteboardservice.service" class="org.apache.openmeetings.remote.WhiteBoardService" />
+	<bean id="userservice.service" class="org.apache.openmeetings.remote.UserService" />
+	<bean id="fileservice.service" class="org.apache.openmeetings.remote.ConferenceLibrary" />
+	<bean id="openmeetings.FileProcessor" class="org.apache.openmeetings.data.file.FileProcessor" />
+	<bean id="openmeetings.FlvExplorerConverter" class="org.apache.openmeetings.converter.FlvExplorerConverter" />
+	<bean id="errorservice.service" class="org.apache.openmeetings.remote.ErrorService" />
+	<bean id="conferenceservice.service" class="org.apache.openmeetings.remote.ConferenceService" />
+	<bean id="chatservice.service" class="org.apache.openmeetings.remote.ChatService" />
+	<bean id="flvrecorderservice.service" class="org.apache.openmeetings.remote.FLVRecorderService" />
+	<bean id="mobile.service" class="org.apache.openmeetings.remote.MobileService" />
+	<bean id="openmeetings.FlvRecorderConverterTask" class="org.apache.openmeetings.data.flvrecord.converter.FlvRecorderConverterTask" />
+	<bean id="openmeetings.FlvInterviewConverterTask" class="org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverterTask" />
+	<bean id="openmeetings.FlvInterviewConverter" class="org.apache.openmeetings.converter.FlvInterviewConverter" />
+	<bean id="openmeetings.FlvRecorderConverter" class="org.apache.openmeetings.converter.FlvRecorderConverter" />
+	<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.cluster.SlaveHTTPConnectionManager" />
+
+	<bean id="openmeetings.SessionClearJob" class="org.apache.openmeetings.quartz.scheduler.SessionClearJob" />
+	<bean id="sessionClearJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="openmeetings.SessionClearJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerSessionClear" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<!-- see the example of method invoking job above -->
+			<ref bean="sessionClearJob" />
+		</property>
+		<property name="startDelay">
+			<!-- 5 seconds -->
+			<value>5000</value>
+		</property>
+		<property name="repeatInterval">
+			<!-- repeat every 300 seconds == 5 minutes -->
+			<value>300000</value>
+		</property>
+	</bean>
+
+	<bean id="openmeetings.MeetingReminderJob" class="org.apache.openmeetings.quartz.scheduler.MeetingReminderJob" />
+	<bean id="meetingReminderClear" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="openmeetings.MeetingReminderJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<!-- see the example of method invoking job above -->
+			<ref bean="meetingReminderClear" />
+		</property>
+		<property name="startDelay">
+			<!-- 5 seconds -->
+			<value>5000</value>
+		</property>
+		<property name="repeatInterval">
+			<!-- repeat every 100 seconds -->
+			<value>100000</value>
+		</property>
+	</bean>
+	<bean id="testSetupCleanupJob" class="org.apache.openmeetings.quartz.scheduler.TestSetupCleanupJob" />
+	<bean id="testSetupCleanup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="testSetupCleanupJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerTestSetupCleanup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="testSetupCleanup" />
+		</property>
+		<property name="startDelay">
+			<value>1800000</value> <!-- 30 minutes -->
+		</property>
+		<property name="repeatInterval">
+			<value>1800000</value> <!-- 30 minutes -->
+		</property>
+	</bean>
+
+	<!-- Mail related jobs -->
+	<bean id="mailHandler" class="org.apache.openmeetings.mail.MailHandler" />
+	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="mailHandler" />
+		</property>
+		<property name="targetMethod">
+			<value>resetSendingStatus</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="resetSendingMailStatus" />
+		</property>
+		<property name="startDelay">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+		<property name="repeatInterval">
+			<value>900000</value> <!-- 15 minutes -->
+		</property>
+	</bean>
+	<bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="mailHandler" />
+		</property>
+		<property name="targetMethod">
+			<value>sendMails</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="sendMails" />
+		</property>
+		<property name="startDelay">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+		<property name="repeatInterval">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+	</bean>
+	
+	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+		<property name="triggers">
+			<list>
+				<ref bean="triggerSessionClear" />
+				<ref bean="triggerMeetingReminder" />
+				<ref bean="triggerTestSetupCleanup" />
+				<ref bean="triggerResetSendingMailStatus" />
+				<ref bean="triggerSendMails" />
+			</list>
+		</property>
+	</bean>
+	<!-- End of Services -->
+
+	<!-- Interface Transactional -->
+	<bean id="appointmentReminderTypDaoImpl" class="org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao" />
+	<bean id="appointmentCategoryDaoImpl" class="org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao" />
+	<bean id="roommanagement" class="org.apache.openmeetings.data.conference.RoomManager" />
+	<bean id="roomDao" class="org.apache.openmeetings.db.dao.room.RoomDao"/>
+	<bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao">
+	<!--  Should be uncommented and updated with real values for Asterisk
+		<constructor-arg><value>127.0.0.1</value></constructor-arg>
+		<constructor-arg><value>5038</value></constructor-arg>
+		<constructor-arg><value>openmeetings</value></constructor-arg>
+		<constructor-arg><value>12345</value></constructor-arg>
+	 -->
+	</bean>
+	<bean id="invitationDao" class="org.apache.openmeetings.db.dao.room.InvitationDao" />
+	<bean id="organisationDao" class="org.apache.openmeetings.db.dao.user.OrganisationDao" />
+	<bean id="organisationUserDao" class="org.apache.openmeetings.db.dao.user.OrganisationUserDao" />
+	<bean id="salutationmanagement" class="org.apache.openmeetings.db.dao.user.SalutationDao" />
+	<bean id="errorManagement" class="org.apache.openmeetings.db.dao.basic.ErrorDao" />
+	<bean id="navimanagement" class="org.apache.openmeetings.db.dao.basic.NavigationDao" />
+	<bean id="pollManagement" class="org.apache.openmeetings.db.dao.room.PollDao" />
+	<bean id="statemanagement" class="org.apache.openmeetings.db.dao.user.StateDao" />
+	<bean id="labelDao" class="org.apache.openmeetings.db.dao.label.LabelDao" />
+	<bean id="configurationDaoImpl" class="org.apache.openmeetings.db.dao.basic.ConfigurationDao" />
+	<bean id="appointmentDao" class="org.apache.openmeetings.db.dao.calendar.AppointmentDao" />
+	<bean id="appointmentLogic" class="org.apache.openmeetings.data.calendar.management.AppointmentLogic" />
+	<bean id="sessionManagement" class="org.apache.openmeetings.db.dao.server.SessiondataDao" />
+	<bean id="userManagement" class="org.apache.openmeetings.data.user.UserManager" />
+	<bean id="roomModeratorsDao" class="org.apache.openmeetings.db.dao.room.RoomModeratorsDao" />
+	<bean id="roomOrganisationDao" class="org.apache.openmeetings.db.dao.room.RoomOrganisationDao"/>
+	<bean id="roomTypeDao" class="org.apache.openmeetings.db.dao.room.RoomTypeDao" />
+	<bean id="conferenceLogDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogDao" />
+	<bean id="conferenceLogTypeDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogTypeDao" />
+	<bean id="emailManagement" class="org.apache.openmeetings.data.user.EmailManager" />
+	<bean id="fileExplorerItemDao" class="org.apache.openmeetings.db.dao.file.FileExplorerItemDao" />
+	<bean id="flvRecordingDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingDao" />
+	<bean id="flvRecordingLogDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingLogDao" />
+	<bean id="flvRecordingMetaDataDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao" />
+	<bean id="flvRecordingMetaDeltaDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao" />
+	<bean id="ldapConfigDao" class="org.apache.openmeetings.db.dao.server.LdapConfigDao" />
+	<bean id="invitationManagement" class="org.apache.openmeetings.data.conference.InvitationManager" />
+	<bean id="meetingMemberDao" class="org.apache.openmeetings.db.dao.calendar.MeetingMemberDao" />
+	<bean id="privateMessageFolderDao" class="org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao" />
+	<bean id="privateMessagesDao" class="org.apache.openmeetings.db.dao.user.PrivateMessagesDao" />
+	<bean id="soapLoginDao" class="org.apache.openmeetings.db.dao.server.SOAPLoginDao" />
+	<bean id="userContactsDao" class="org.apache.openmeetings.db.dao.user.UserContactsDao" />
+	<bean id="userDao" class="org.apache.openmeetings.db.dao.user.UserDao" />
+	<bean id="serverDao" class="org.apache.openmeetings.db.dao.server.ServerDao" />
+	<bean id="chatDao" class="org.apache.openmeetings.db.dao.basic.ChatDao" />
+	<bean id="clientDao" class="org.apache.openmeetings.db.dao.room.ClientDao" />
+	<bean id="mailMessageDao" class="org.apache.openmeetings.db.dao.basic.MailMessageDao" />
+	<bean id="oauth2Dao" class="org.apache.openmeetings.db.dao.server.OAuth2Dao" />
+
+	<!-- No Interface -->
+	<bean id="generateImage" class="org.apache.openmeetings.converter.GenerateImage" />
+	<bean id="generateThumbs" class="org.apache.openmeetings.converter.GenerateThumbs" />
+	<bean id="generatePDF" class="org.apache.openmeetings.documents.GeneratePDF" />
+	<bean id="smsHandler" class="org.apache.openmeetings.mail.SMSHandler" />
+	<bean id="importInitvalues" class="org.apache.openmeetings.installation.ImportInitvalues" />
+	<bean id="libraryWmlLoader" class="org.apache.openmeetings.documents.LibraryWmlLoader" />
+	<bean id="generateSWF" class="org.apache.openmeetings.converter.GenerateSWF" />
+	<bean id="fileUtils" class="org.apache.openmeetings.data.file.FileUtils" />
+	<bean id="ldapLoginManagement" class="org.apache.openmeetings.ldap.LdapLoginManagement" />
+	<bean id="timezoneUtil" class="org.apache.openmeetings.db.util.TimezoneUtil" />
+	<bean id="whiteboardManagement" class="org.apache.openmeetings.data.whiteboard.WhiteboardManager" />
+	<bean id="backupExport" class="org.apache.openmeetings.backup.BackupExport" />
+	<bean id="backupImport" class="org.apache.openmeetings.backup.BackupImport" />
+
+	<!-- Thread Executor -->
+	<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
+		<property name="corePoolSize" value="5" />
+		<property name="maxPoolSize" value="10" />
+		<property name="queueCapacity" value="25" />
+	</bean>
+
+	<!-- Axis2 Service Proxy's -->
+	<bean id="userWebService" class="org.apache.openmeetings.axis.services.UserWebService" />
+	<bean id="roomWebService" class="org.apache.openmeetings.axis.services.RoomWebService" />
+	<bean id="fileWebService" class="org.apache.openmeetings.axis.services.FileWebService" />
+	<bean id="calendarWebService" class="org.apache.openmeetings.axis.services.CalendarWebService" />
+	<bean id="jabberWebService" class="org.apache.openmeetings.axis.services.JabberWebService" />
+	<bean id="serverWebService" class="org.apache.openmeetings.axis.services.ServerWebService" />
+</beans>
diff --git a/src/main/webapp/WEB-INF/classes/rebel-remote.xml b/src/main/webapp/WEB-INF/classes/rebel-remote.xml
new file mode 100644
index 0000000..0dce654
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/rebel-remote.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<rebel-remote>
+	<id>Openmeetings</id>
+	<url>http://localhost:5080/openmeetings/</url>
+</rebel-remote>
diff --git a/src/main/webapp/WEB-INF/classes/rebel.xml b/src/main/webapp/WEB-INF/classes/rebel.xml
new file mode 100644
index 0000000..a9a5149
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/rebel.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
+	<classpath>
+		<dir name="${project.root}/build/classes/eclipse"/>
+	</classpath>
+	<web>
+		<link target="/">
+			<dir name="${project.root}/main/webapp"/>
+		</link>
+	</web>
+</application>
diff --git a/src/main/webapp/WEB-INF/conf/axis2.xml b/src/main/webapp/WEB-INF/conf/axis2.xml
new file mode 100644
index 0000000..a6620f6
--- /dev/null
+++ b/src/main/webapp/WEB-INF/conf/axis2.xml
@@ -0,0 +1,531 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements. See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership. The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License. You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied. See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<axisconfig name="AxisJava2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="axis2.xsd">
+    <!-- ================================================= -->
+    <!-- Parameters -->
+    <!-- ================================================= -->
+    <parameter name="hotdeployment">true</parameter>
+    <parameter name="hotupdate">false</parameter>
+    <parameter name="enableMTOM">false</parameter>
+    <parameter name="enableSwA">false</parameter>
+
+    <!--Uncomment if you want to enable file caching for attachments -->
+    <!--parameter name="cacheAttachments">true</parameter>
+    <parameter name="attachmentDIR"></parameter>
+    <parameter name="sizeThreshold">4000</parameter-->
+
+    <parameter name="EnableChildFirstClassLoading">false</parameter>
+
+    <!--
+    The exposeServiceMetadata parameter decides whether the metadata (WSDL, schema, policy) of
+    the services deployed on Axis2 should be visible when ?wsdl, ?wsdl2, ?xsd, ?policy requests
+    are received.
+    This parameter can be defined in the axi2.xml file, in which case this will be applicable
+    globally, or in the services.xml files, in which case, it will be applicable to the
+    Service groups and/or services, depending on the level at which the parameter is declared.
+    This value of this parameter defaults to true.
+    -->
+    <parameter name="exposeServiceMetadata">true</parameter>
+
+
+    <!--Uncomment if you want to plugin your own attachments lifecycle implementation -->
+    <!--<attachmentsLifecycleManager class="org.apache.axiom.attachments.lifecycle.impl.LifecycleManagerImpl"/>-->
+
+
+    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
+    <!--In some server environments, the available memory heap is limited and can fill up under load -->
+    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
+    <!--to reduce the memory needed for the cached WSDL definitions. -->
+    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
+
+    <!--This will give out the timout of the configuration contexts, in milliseconds-->
+    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
+
+    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
+    <!--that behavior.-->
+    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
+
+    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
+    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
+    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
+    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
+    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
+
+    <parameter name="userName">admin</parameter>
+    <parameter name="password">axis2</parameter>
+
+    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
+    <!--ServicesDirectory only works on the following cases-->
+    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
+    <!---When creating URL Based configurator with URL file:// -->
+    <!--- War based configurator with expanded case , -->
+
+    <!--All the other scenarios it will be ignored.-->
+    <!--<parameter name="ServicesDirectory">service</parameter>-->
+    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
+    <!--<parameter name="ModulesDirectory">modules</parameter>-->
+
+
+    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
+    <!--root which can configured using the following contextRoot parameter-->
+    <!--<parameter name="contextRoot">axis2</parameter>-->
+
+    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
+    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
+    <!--context path to proper Axis2 servlets-->
+    <!--<parameter name="servicePath">services</parameter>-->
+    <!--<parameter name="restPath">rest</parameter>-->
+
+    <!-- Following parameter will completely disable REST handling in Axis2-->
+    <parameter name="disableREST" locked="false">false</parameter>
+
+    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
+    <parameter name="disableSOAP12" locked="true">false</parameter>
+
+    <!-- ================================================= -->
+    <!-- Deployers -->
+    <!-- ================================================= -->
+
+    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
+    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
+        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
+        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
+    </deployer>
+    
+    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
+    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
+    <deployer extension=".jar" directory="servicejars"
+              class="org.apache.axis2.jaxws.framework.JAXWSDeployer"/>
+    <deployer extension=".jar" directory="transports"
+              class="org.apache.axis2.deployment.TransportDeployer"/>
+
+    <!--CORBA deployer , this will alow users to invoke remote CORBA services through Axis2-->
+    <!--<deployer extension=".xml" directory="corba" class="org.apache.axis2.corba.deployer.CorbaDeployer"/>-->
+
+    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
+
+
+    <!-- Following parameter will set the host name for the epr-->
+    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
+
+    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
+    <!-- use this parameter to override autodetected url -->
+    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
+
+    <!--By default, JAXWS services are created by reading annotations. WSDL and schema are generated-->
+    <!--using a separate WSDL generator only when ?wsdl is called. Therefore, even if you engage-->
+    <!--policies etc.. to AxisService, it doesn't appear in the WSDL. By setting the following property-->
+    <!--to true, you can create the AxisService using the generated WSDL and remove the need for a-->
+    <!--WSDL generator. When ?wsdl is called, WSDL is generated in the normal way.-->
+    <parameter name="useGeneratedWSDLinJAXWS">false</parameter>
+
+    <!--    The way of adding listener to the system-->
+    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
+    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
+    <!--    </listener>-->
+
+    <threadContextMigrators>
+        <threadContextMigrator listId="JAXWS-ThreadContextMigrator-List"
+                               class="org.apache.axis2.jaxws.addressing.migrator.EndpointContextMapMigrator"/>
+    </threadContextMigrators>
+
+    <!-- ================================================= -->
+    <!-- Message Receivers -->
+    <!-- ================================================= -->
+    <!--This is the default MessageReceiver for the system , if you want to have MessageReceivers for -->
+    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
+    <!--any operation -->
+    <!--Note : You can override this for a particular service by adding the same element with your requirement-->
+    <messageReceivers>        
+        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
+                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"
+                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+    </messageReceivers>
+
+    <!-- ================================================= -->
+    <!-- Message Formatter -->
+    <!-- ================================================= -->
+    <!--Following content type to message formatter mapping can be used to implement support for different message -->
+    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
+    <messageFormatters>
+        <messageFormatter contentType="application/x-www-form-urlencoded"
+                          class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
+        <messageFormatter contentType="multipart/form-data"
+                          class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
+        <messageFormatter contentType="application/xml"
+                          class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
+        <messageFormatter contentType="text/xml"
+                          class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
+        <messageFormatter contentType="application/soap+xml"
+                          class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
+    </messageFormatters>
+
+    <!-- ================================================= -->
+    <!-- Message Builders -->
+    <!-- ================================================= -->
+    <!--Following content type to builder mapping can be used to implement support for different message -->
+    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
+    <messageBuilders>
+        <messageBuilder contentType="application/xml"
+                        class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
+        <messageBuilder contentType="application/x-www-form-urlencoded"
+                        class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
+        <messageBuilder contentType="multipart/form-data"
+                        class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
+    </messageBuilders>
+
+    <!-- ================================================= -->
+    <!-- Transport Ins -->
+    <!-- ================================================= -->
+    <transportReceiver name="http"
+                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
+        <parameter name="port">8080</parameter>
+        <!-- Here is the complete list of supported parameters (see example settings further below):
+            port: the port to listen on (default 6060)
+            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
+            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
+            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
+            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
+                                false to minimize bandwidth consumption by combining segments
+            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
+            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
+                                       note that default queue never fills up:  see HttpFactory
+            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
+                                  note that no such threads can exist with default unbounded request queue
+            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
+        -->
+        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
+        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
+        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
+        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
+        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
+        <!-- <parameter name="requestMaxThreadPoolSize">100</parameter>                     -->
+        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
+        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
+    </transportReceiver>
+
+    <!-- This is where you'd put custom transports.  See the transports project -->
+    <!-- for more.  http://ws.apache.org/commons/transport                      -->
+
+    <!-- ================================================= -->
+    <!-- Transport Outs -->
+    <!-- ================================================= -->
+
+    <transportSender name="local"
+                     class="org.apache.axis2.transport.local.LocalTransportSender"/>
+    <transportSender name="http"
+                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+        <parameter name="PROTOCOL">HTTP/1.1</parameter>
+        <parameter name="Transfer-Encoding">chunked</parameter>
+
+        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
+        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
+    </transportSender>
+
+    <transportSender name="https"
+                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+        <parameter name="PROTOCOL">HTTP/1.1</parameter>
+        <parameter name="Transfer-Encoding">chunked</parameter>
+    </transportSender>
+
+    <!-- Please enable this if you need the java transport -->
+    <!-- <transportSender name="java"
+                     class="org.apache.axis2.transport.java.JavaTransportSender"/> -->
+
+    <!-- ================================================= -->
+    <!-- Global Modules  -->
+    <!-- ================================================= -->
+    <!-- Comment this to disable Addressing -->
+    <module ref="addressing"/>
+
+    <!--Configuring module , providing parameters for modules whether they refer or not-->
+    <!--<moduleConfig name="addressing">-->
+    <!--<parameter name="addressingPara">N/A</parameter>-->
+    <!--</moduleConfig>-->
+
+    <!-- ================================================= -->
+    <!-- Clustering  -->
+    <!-- ================================================= -->
+    <!--
+     To enable clustering for this node, set the value of "enable" attribute of the "clustering"
+     element to "true". The initialization of a node in the cluster is handled by the class
+     corresponding to the "class" attribute of the "clustering" element. It is also responsible for
+     getting this node to join the cluster.
+     -->
+    <clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="false">
+
+        <!--
+           This parameter indicates whether the cluster has to be automatically initalized
+           when the AxisConfiguration is built. If set to "true" the initialization will not be
+           done at that stage, and some other party will have to explictly initialize the cluster.
+        -->
+        <parameter name="AvoidInitiation">true</parameter>
+
+        <!--
+           The membership scheme used in this setup. The only values supported at the moment are
+           "multicast" and "wka"
+
+           1. multicast - membership is automatically discovered using multicasting
+           2. wka - Well-Known Address based multicasting. Membership is discovered with the help
+                    of one or more nodes running at a Well-Known Address. New members joining a
+                    cluster will first connect to a well-known node, register with the well-known node
+                    and get the membership list from it. When new members join, one of the well-known
+                    nodes will notify the others in the group. When a member leaves the cluster or
+                    is deemed to have left the cluster, it will be detected by the Group Membership
+                    Service (GMS) using a TCP ping mechanism.
+        -->
+        <parameter name="membershipScheme">multicast</parameter>
+
+        <!--
+         The clustering domain/group. Nodes in the same group will belong to the same multicast
+         domain. There will not be interference between nodes in different groups.
+        -->
+        <parameter name="domain">wso2.carbon.domain</parameter>
+
+        <!--
+           When a Web service request is received, and processed, before the response is sent to the
+           client, should we update the states of all members in the cluster? If the value of
+           this parameter is set to "true", the response to the client will be sent only after
+           all the members have been updated. Obviously, this can be time consuming. In some cases,
+           such this overhead may not be acceptable, in which case the value of this parameter
+           should be set to "false"
+        -->
+        <parameter name="synchronizeAll">true</parameter>
+
+        <!--
+          The maximum number of times we need to retry to send a message to a particular node
+          before giving up and considering that node to be faulty
+        -->
+        <parameter name="maxRetries">10</parameter>
+
+        <!-- The multicast address to be used -->
+        <parameter name="mcastAddress">228.0.0.4</parameter>
+
+        <!-- The multicast port to be used -->
+        <parameter name="mcastPort">45564</parameter>
+
+        <!-- The frequency of sending membership multicast messages (in ms) -->
+        <parameter name="mcastFrequency">500</parameter>
+
+        <!-- The time interval within which if a member does not respond, the member will be
+         deemed to have left the group (in ms)
+         -->
+        <parameter name="memberDropTime">3000</parameter>
+
+        <!--
+           The IP address of the network interface to which the multicasting has to be bound to.
+           Multicasting would be done using this interface.
+        -->
+        <parameter name="mcastBindAddress">127.0.0.1</parameter>
+
+        <!-- The host name or IP address of this member -->
+        <parameter name="localMemberHost">127.0.0.1</parameter>
+
+        <!--
+        The TCP port used by this member. This is the port through which other nodes will
+        contact this member
+         -->
+        <parameter name="localMemberPort">4000</parameter>
+
+        <!--
+        Preserve message ordering. This will be done according to sender order.
+        -->
+        <parameter name="preserveMessageOrder">true</parameter>
+
+        <!--
+        Maintain atmost-once message processing semantics
+        -->
+        <parameter name="atmostOnceMessageSemantics">true</parameter>
+
+        <!--
+        Properties specific to this member
+        -->
+        <parameter name="properties">
+            <property name="backendServerURL" value="https://${hostName}:${httpsPort}/services/"/>
+            <property name="mgtConsoleURL" value="https://${hostName}:${httpsPort}/"/>
+        </parameter>
+
+        <!--
+           The list of static or well-known members. These entries will only be valid if the
+           "membershipScheme" above is set to "wka"
+        -->
+        <members>
+            <member>
+                <hostName>127.0.0.1</hostName>
+                <port>4000</port>
+            </member>
+            <member>
+                <hostName>127.0.0.1</hostName>
+                <port>4001</port>
+            </member>
+        </members>
+
+        <!--
+        Enable the groupManagement entry if you need to run this node as a cluster manager.
+        Multiple application domains with different GroupManagementAgent implementations
+        can be defined in this section.
+        -->
+        <groupManagement enable="false">
+            <applicationDomain name="apache.axis2.application.domain"
+                               description="Axis2 group"
+                               agent="org.apache.axis2.clustering.management.DefaultGroupManagementAgent"/>
+        </groupManagement>
+
+        <!--
+           This interface is responsible for handling management of a specific node in the cluster
+           The "enable" attribute indicates whether Node management has been enabled
+        -->
+        <nodeManager class="org.apache.axis2.clustering.management.DefaultNodeManager"
+                         enable="true"/>
+
+        <!--
+           This interface is responsible for handling state replication. The property changes in
+           the Axis2 context hierarchy in this node, are propagated to all other nodes in the cluster.
+
+           The "excludes" patterns can be used to specify the prefixes (e.g. local_*) or
+           suffixes (e.g. *_local) of the properties to be excluded from replication. The pattern
+           "*" indicates that all properties in a particular context should not be replicated.
+
+            The "enable" attribute indicates whether context replication has been enabled
+        -->
+        <stateManager class="org.apache.axis2.clustering.state.DefaultStateManager"
+                      enable="true">
+            <replication>
+                <defaults>
+                    <exclude name="local_*"/>
+                    <exclude name="LOCAL_*"/>
+                </defaults>
+                <context class="org.apache.axis2.context.ConfigurationContext">
+                    <exclude name="local_*"/>
+                </context>
+                <context class="org.apache.axis2.context.ServiceGroupContext">
+                    <exclude name="local_*"/>
+                </context>
+                <context class="org.apache.axis2.context.ServiceContext">
+                    <exclude name="local_*"/>
+                </context>
+            </replication>
+        </stateManager>
+    </clustering>
+
+    <!-- ================================================= -->
+    <!-- Phases  -->
+    <!-- ================================================= -->
+    <phaseOrder type="InFlow">
+        <!--  System predefined phases       -->
+        <phase name="Transport">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
+                <order phase="Transport"/>
+            </handler>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
+                <order phase="Transport"/>
+            </handler>
+        </phase>
+        <phase name="Addressing">
+            <handler name="AddressingBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+                <order phase="Addressing"/>
+            </handler>
+        </phase>
+        <phase name="Security"/>
+        <phase name="PreDispatch"/>
+        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+            <handler name="RequestURIOperationDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+            <handler name="SOAPMessageBodyBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+            <handler name="HTTPLocationBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+            <handler name="GenericProviderDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
+            <handler name="MustUnderstandValidationDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
+        </phase>
+        <phase name="RMPhase"/>
+        <!--  System predefined phases       -->
+        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
+        <phase name="OperationInPhase">
+            <handler name="MustUnderstandChecker"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">
+                <order phase="OperationInPhase"/>
+            </handler>
+        </phase>
+        <phase name="soapmonitorPhase"/>
+    </phaseOrder>
+    <phaseOrder type="OutFlow">
+        <!--      user can add his own phases to this area  -->
+        <phase name="soapmonitorPhase"/>
+        <phase name="OperationOutPhase"/>
+        <!--system predefined phase-->
+        <!--these phase will run irrespective of the service-->
+        <phase name="RMPhase"/>
+        <phase name="PolicyDetermination"/>
+        <phase name="MessageOut"/>
+        <phase name="Security"/>
+    </phaseOrder>
+    <phaseOrder type="InFaultFlow">
+        <phase name="Addressing">
+            <handler name="AddressingBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+                <order phase="Addressing"/>
+            </handler>
+        </phase>
+        <phase name="Security"/>
+        <phase name="PreDispatch"/>
+        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+            <handler name="RequestURIOperationDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+            <handler name="SOAPMessageBodyBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+            <handler name="HTTPLocationBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+            <handler name="GenericProviderDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
+            <handler name="MustUnderstandValidationDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
+        </phase>
+        <phase name="RMPhase"/>
+        <!--      user can add his own phases to this area  -->
+        <phase name="OperationInFaultPhase"/>
+        <phase name="soapmonitorPhase"/>
+    </phaseOrder>
+    <phaseOrder type="OutFaultFlow">
+        <!--      user can add his own phases to this area  -->
+        <phase name="soapmonitorPhase"/>
+        <phase name="OperationOutFaultPhase"/>
+        <phase name="RMPhase"/>
+        <phase name="PolicyDetermination"/>
+        <phase name="MessageOut"/>
+        <phase name="Security"/>
+    </phaseOrder>
+</axisconfig>
+
diff --git a/src/main/webapp/WEB-INF/conf/axis2.xsd b/src/main/webapp/WEB-INF/conf/axis2.xsd
new file mode 100644
index 0000000..df95257
--- /dev/null
+++ b/src/main/webapp/WEB-INF/conf/axis2.xsd
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <xs:element name="axisconfig">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:choice maxOccurs="unbounded">
+          <xs:element ref="parameter"/>
+          <xs:element ref="deployer"/>
+        </xs:choice>
+        <xs:element ref="threadContextMigrators"/>
+        <xs:element ref="messageReceivers"/>
+        <xs:element ref="messageFormatters"/>
+        <xs:element ref="messageBuilders"/>
+        <xs:element ref="transportReceiver"/>
+        <xs:element maxOccurs="unbounded" ref="transportSender"/>
+        <xs:element ref="module"/>
+        <xs:element ref="clustering"/>
+        <xs:element maxOccurs="unbounded" ref="phaseOrder"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="deployer">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="serviceBuilderExtension"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="directory" use="required" type="xs:NCName"/>
+      <xs:attribute name="extension" use="required" type="xs:NMTOKEN"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="serviceBuilderExtension">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="threadContextMigrators">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="threadContextMigrator"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="threadContextMigrator">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="listId" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageReceivers">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="messageReceiver"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageReceiver">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="mep" use="required" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageFormatters">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="messageFormatter"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageFormatter">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="contentType" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageBuilders">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="messageBuilder"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="messageBuilder">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="contentType" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="transportReceiver">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="parameter"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="transportSender">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="module">
+    <xs:complexType>
+      <xs:attribute name="ref" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="clustering">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="parameter"/>
+        <xs:element ref="members"/>
+        <xs:element ref="groupManagement"/>
+        <xs:element ref="nodeManager"/>
+        <xs:element ref="stateManager"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="enable" use="required" type="xs:boolean"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="members">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="member"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="member">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="hostName"/>
+        <xs:element ref="port"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="hostName" type="xs:NMTOKEN"/>
+  <xs:element name="port" type="xs:integer"/>
+  <xs:element name="groupManagement">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="applicationDomain"/>
+      </xs:sequence>
+      <xs:attribute name="enable" use="required" type="xs:boolean"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="applicationDomain">
+    <xs:complexType>
+      <xs:attribute name="agent" use="required"/>
+      <xs:attribute name="description" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="nodeManager">
+    <xs:complexType>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="enable" use="required" type="xs:boolean"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="stateManager">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="replication"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="enable" use="required" type="xs:boolean"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="replication">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="defaults"/>
+        <xs:element maxOccurs="unbounded" ref="context"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="defaults">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="exclude"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="context">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="exclude"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="phaseOrder">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="phase"/>
+      </xs:sequence>
+      <xs:attribute name="type" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="phase">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="handler"/>
+      </xs:sequence>
+      <xs:attribute name="class"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="handler">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" ref="order"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="order">
+    <xs:complexType>
+      <xs:attribute name="phase" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="parameter">
+    <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
+      </xs:sequence>
+      <xs:attribute name="locked" type="xs:boolean"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="property">
+    <xs:complexType>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="value" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="exclude">
+    <xs:complexType>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/main/webapp/WEB-INF/red5-web.properties b/src/main/webapp/WEB-INF/red5-web.properties
new file mode 100644
index 0000000..518301d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/red5-web.properties
@@ -0,0 +1,17 @@
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#  
+#      http://www.apache.org/licenses/LICENSE-2.0
+#    	  
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+webapp.virtualHosts=*,localhost, 127.0.0.1
diff --git a/src/main/webapp/WEB-INF/red5-web.xml b/src/main/webapp/WEB-INF/red5-web.xml
new file mode 100644
index 0000000..b0ef211
--- /dev/null
+++ b/src/main/webapp/WEB-INF/red5-web.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+	
+	<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+	    <property name="location" value="/WEB-INF/red5-web.properties" />
+	</bean>
+	
+	<bean id="web.context" class="org.red5.server.Context" autowire="byType" />
+	
+	<bean id="web.scope" class="org.red5.server.scope.WebScope" init-method="register">
+		<property name="server" ref="red5.server" />
+		<property name="parent" ref="global.scope" />
+		<property name="context" ref="web.context" />
+		<property name="handler" ref="web.handler" />
+		<property name="contextPath" value="${webapp.contextPath}" />
+		<property name="virtualHosts" value="${webapp.virtualHosts}" />
+	</bean>
+
+	<import resource="classes/openmeetings-applicationContext.xml" />
+</beans>
diff --git a/src/main/webapp/WEB-INF/services/version.aar b/src/main/webapp/WEB-INF/services/version.aar
new file mode 100644
index 0000000..4408130
--- /dev/null
+++ b/src/main/webapp/WEB-INF/services/version.aar
Binary files differ
diff --git a/src/main/webapp/WEB-INF/spring-mvc-servlet.xml b/src/main/webapp/WEB-INF/spring-mvc-servlet.xml
new file mode 100644
index 0000000..e98ae5e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/spring-mvc-servlet.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans	xmlns="http://www.springframework.org/schema/beans"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" 
+/>
diff --git a/src/main/webapp/WEB-INF/velocity.properties b/src/main/webapp/WEB-INF/velocity.properties
new file mode 100644
index 0000000..a885347
--- /dev/null
+++ b/src/main/webapp/WEB-INF/velocity.properties
@@ -0,0 +1,41 @@
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#  
+#      http://www.apache.org/licenses/LICENSE-2.0
+#    	  
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+#
+# specify three resource loaders to use
+#
+resource.loader = file, class
+
+#
+# for the loader we call 'file', set the FileResourceLoader as the
+# class to use, turn off caching
+#
+file.resource.loader.description = Velocity File Resource Loader
+file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
+file.resource.loader.path = ./classes
+file.resource.loader.cache = false
+file.resource.loader.modificationCheckInterval = 0
+
+input.encoding=UTF-8
+output.encoding=UTF-8
+
+#
+#  for the loader we call 'class', use the ClasspathResourceLoader
+#
+class.resource.loader.description = Velocity Classpath Resource Loader
+class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
+runtime.log.logsystem.log4j.logger = org.apache.velocity.runtime.log.Log4JLogChute
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..214a466
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+    <context-param>
+        <param-name>globalScope</param-name>
+        <param-value>default</param-value>
+    </context-param>
+    
+    <!-- Custom logging like described in Paul Gregoire Patch: 
+    http://gregoire.org/2008/09/18/logging-work-around/
+    THIS WILL NOT WORK for us as we can hardly rewrite all logging statements of hibernate
+    
+    -->
+    <listener>
+        <listener-class>org.apache.openmeetings.util.OMContextListener</listener-class>
+    </listener>
+    
+    <filter>
+        <filter-name>LoggerContextFilter</filter-name>
+        <filter-class>org.red5.logging.LoggerContextFilter</filter-class>
+    </filter>
+    
+    <filter-mapping>
+        <filter-name>LoggerContextFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>   
+    
+	<filter>
+		<filter-name>OpenmeetingsApplication</filter-name>
+		<filter-class>org.wicketstuff.protocol.ws.javax.JavaxWebSocketFilter</filter-class>
+		<init-param>
+			<param-name>applicationClassName</param-name>
+			<param-value>org.apache.openmeetings.web.app.Application</param-value>
+		</init-param>
+		<init-param>
+			<param-name>configuration</param-name>
+			<param-value>@wicket.mode@</param-value>
+		</init-param>
+		<init-param>
+			<param-name>ignorePaths</param-name>
+			<param-value>conf,css,default,docs,images,js,persistence,public,screensharing,streams,upload,uploadtemp,services,networktest.,file.,remotelog.,screen.,DownloadHandler</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>OpenmeetingsApplication</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+	 
+    <context-param>
+        <param-name>contextConfigLocation</param-name>
+        <param-value>/WEB-INF/red5-*.xml</param-value>
+    </context-param>
+    <context-param>
+        <param-name>locatorFactorySelector</param-name>
+        <param-value>red5.xml</param-value>
+    </context-param>
+    <context-param>
+        <param-name>parentContextKey</param-name>
+        <param-value>default.context</param-value>
+    </context-param>
+    
+    <!-- remove the following servlet tags if you want to disable remoting for this application -->
+	<servlet>
+		<servlet-name>spring-mvc</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+	</servlet>
+    <servlet>
+        <servlet-name>gateway</servlet-name>
+        <servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
+    </servlet>
+    <servlet>
+        <servlet-name>DownloadHandler</servlet-name>
+        <servlet-class>org.apache.openmeetings.servlet.outputhandler.DownloadHandler</servlet-class>
+    </servlet>
+    <servlet>
+        <servlet-name>ExportToImage</servlet-name>
+        <servlet-class>org.apache.openmeetings.servlet.outputhandler.ExportToImage</servlet-class>
+    </servlet>
+    <!-- Axis2 Settings -->
+    <servlet>
+        <servlet-name>AxisServlet</servlet-name>
+        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+	
+	<servlet-mapping>
+		<servlet-name>spring-mvc</servlet-name>
+		<url-pattern>*.upload</url-pattern>
+	</servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>DownloadHandler</servlet-name>
+        <url-pattern>/DownloadHandler</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>ExportToImage</servlet-name>
+        <url-pattern>/ExportToImage</url-pattern>
+    </servlet-mapping>
+    <!-- Axis2 -->
+    <servlet-mapping>
+        <servlet-name>AxisServlet</servlet-name>
+        <url-pattern>/services/*</url-pattern>
+    </servlet-mapping>
+    <mime-mapping>
+        <extension>inc</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+     
+    <security-constraint>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/streams/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/conf/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/upload/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/uploadtemp/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint/>
+    </security-constraint>
+    <login-config>
+        <auth-method>BASIC</auth-method>
+    </login-config>
+</web-app>
diff --git a/src/main/webapp/conf/om_ldap.cfg b/src/main/webapp/conf/om_ldap.cfg
new file mode 100644
index 0000000..ac3e4d7
--- /dev/null
+++ b/src/main/webapp/conf/om_ldap.cfg
@@ -0,0 +1,105 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+#         
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+#ConfigurationFile for LDAP Auth
+#ConfigKey 'ldap_config_path' must be set in DataBase Configration of OM and point to this file
+#o.becherer,14.01.2009
+
+#LDAP URL
+# This is the URL used to access your LDAP server.
+# if you want to use "ldaps://" links, please be aware that you need to import your CA certificate
+#  to a java keystore and add the -Djavax.net.ssl.keyStore, -Djavax.net.ssl.keyStorePassword,
+#  -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword parameters to your 
+#  JAVA_OPT environment
+ldap_conn_host=dc2.medint.local
+ldap_conn_port=389
+ldap_conn_secure=false
+
+# Login distinguished name (DN) for Authentication on LDAP Server - keep empty if not required
+# Use full qualified LDAP DN
+ldap_admin_dn=CN=dummy,OU=Company,DC=medint,DC=local
+
+# Loginpass for Authentication on LDAP Server - keep empty if not required
+ldap_passwd=dummy07
+
+# base to search for userdata(of user, that wants to login)
+ldap_search_base=OU=Company,DC=medint,DC=local
+
+# Fieldnames (can differ between Ldap servers) 
+ldap_search_query=(uid=%s)
+
+# the scope of the search might be: OBJECT, ONELEVEL, SUBTREE
+ldap_search_scope=ONELEVEL
+
+# Ldap auth type(NONE, SEARCHANDBIND, SIMPLEBIND)
+#  When using SIMPLEBIND a simple bind is performed on the LDAP server to check user authentication
+#  When using NONE, the Ldap server is not used for authentication
+ldap_auth_type=SIMPLEBIND
+
+# userDN format, will be used to bind if ldap_auth_type=SIMPLEBIND
+# might be used to get provisionningDn in case ldap_auth_type=NONE
+ldap_userdn_format=uid=%s,OU=Company,DC=medint,DC=local
+
+# Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)
+ldap_provisionning=AUTOCREATE
+
+# Ldap deref mode (never, searching, finding, always)
+ldap_deref_mode=always
+
+#  Set this to 'true' if you want to use admin_dn to get user attributes
+#  If any other value is set, user_dn will be used
+ldap_use_admin_to_get_attrs=true
+
+# Ldap-password synchronization to OM DB
+#  Set this to 'true' if you want OM to synchronize the user Ldap-password to OM's internal DB
+#  If you want to disable the feature, set this to any other string.
+#  Defautl value is 'true'
+ldap_sync_password_to_om=true
+
+# Ldap group mode (NONE, ATTRIBUTE, QUERY)
+# NONE means group associations will be ignored
+# ATTRIBUTE means group associations will be taken from 'ldap_group_attr' attribute (M$ AD mode)
+# QUERY means group associations will be taken as a result of 'ldap_group_query' query
+ldap_group_mode=NONE
+
+ldap_group_query=(&(memberUid=%s)(objectClass=posixGroup))
+
+# Ldap user attributes mapping
+# Set the following internal OM user attributes to their corresponding Ldap-attribute
+ldap_user_attr_lastname=sn
+ldap_user_attr_firstname=givenName
+ldap_user_attr_mail=mail
+ldap_user_attr_street=streetAddress
+ldap_user_attr_additionalname=description
+ldap_user_attr_fax=facsimileTelephoneNumber
+ldap_user_attr_zip=postalCode
+ldap_user_attr_country=co
+ldap_user_attr_town=l
+ldap_user_attr_phone=telephoneNumber
+ldap_group_attr=memberOf
+
+# optional, only absolute URLs make sense
+#ldap_user_picture_uri=picture_uri
+
+# optional
+# the timezone has to match any timezone available in Java, otherwise the timezone defined in the value of 
+# the conf_key "default.timezone" in OpenMeetings "configurations" table
+#ldap_user_timezone=timezone
+
+# Ldap ignore upper/lower case, convert all input to lower case
+ldap_use_lower_case=false
diff --git a/src/main/webapp/css/admin-rtl.css b/src/main/webapp/css/admin-rtl.css
new file mode 100644
index 0000000..30eda1e
--- /dev/null
+++ b/src/main/webapp/css/admin-rtl.css
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.adminForm label, .adminForm input, .adminForm select, .adminForm textarea {
+	float: right !important;
+}
diff --git a/src/main/webapp/css/admin.css b/src/main/webapp/css/admin.css
new file mode 100644
index 0000000..22dfe6c
--- /dev/null
+++ b/src/main/webapp/css/admin.css
@@ -0,0 +1,357 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.adminPanel {
+	min-width: 1070px;
+}
+/* 
+    ################################
+    Column layout admin section
+    ################################
+ */
+.adminPanelColumnTable {
+	display: inline-block;
+	vertical-align: top;
+}
+
+table.adminListTable {
+	max-width: 518px;
+	min-width: 518px;
+}
+
+table.adminListTable tr:nth-child(odd), table.adminListTableSmall tr:nth-child(odd) {
+	opacity: .8;
+}
+
+table.adminListTable tr:hover, table.adminListTableSmall tr:hover {
+	/*SHOULD BE MANUALLY IN SYNC WITH THEME .ui-state-hover */
+	border: 1px solid #74b2e2;
+	background: #e4f1fb url(theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x;
+	font-weight: normal;
+	color: #0070a3;
+}
+
+table.adminListTable th.two_column_layout_column1 {
+	width: 136px;
+}
+
+table.adminListTable th.two_column_layout_column2 {
+	width: 354px;
+}
+
+table.adminListTable td.two_column_layout_column1 {
+	width: 136px;
+}
+
+table.adminListTable td.two_column_layout_column2 {
+	width: 354px;
+}
+
+table.adminListTable td div.two_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 136px;
+}
+
+table.adminListTable td div.two_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 354px;
+}
+
+table.adminListTable th.three_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable th.three_column_layout_column2 {
+	width: 150px;
+}
+
+table.adminListTable th.three_column_layout_column3 {
+	width: 244px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column1 {
+	width: 46px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column2 {
+	width: 370px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column3 {
+	width: 74px;
+}
+
+table.adminListTableSmall th.three_column_layout_column1 {
+	width: 50px;
+}
+
+table.adminListTableSmall th.three_column_layout_column2 {
+	width: 50px;
+}
+
+table.adminListTableSmall th.three_column_layout_column3 {
+	width: 218px;
+}
+table.adminListTableSmall th.three_column_layout_column4 {
+	width: 150px;
+}
+table.adminListTableSmall th.three_column_layout_column5 {
+	width: 50px;
+}
+
+table.adminListTable td.three_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable td.three_column_layout_column2 {
+	width: 150px;
+}
+
+table.adminListTable td.three_column_layout_column3 {
+	width: 244px;
+}
+
+table.adminListTableSmall td.three_column_layout_column1 {
+	width: 50px;
+}
+
+table.adminListTableSmall td.three_column_layout_column2 {
+	width: 50px;
+}
+
+table.adminListTableSmall td.three_column_layout_column3 {
+	width: 218px;
+}
+table.adminListTableSmall td.three_column_layout_column4 {
+	width: 150px;
+}
+table.adminListTableSmall td.three_column_layout_column5 {
+	width: 50px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 96px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 150px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 244px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 44px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 382px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 74px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn1 {
+	width: 50px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn2 {
+	width: 50px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn3 {
+	width: 218px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn4 {
+	width: 150px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn5 {
+	width: 50px;
+}
+
+table.adminListTable th.four_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable th.four_column_layout_column2 {
+	width: 130px;
+}
+
+table.adminListTable th.four_column_layout_column3 {
+	width: 132px;
+}
+
+table.adminListTable th.four_column_layout_column4 {
+	width: 132px;
+}
+
+table.adminListTable td.four_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable td.four_column_layout_column2 {
+	width: 130px;
+}
+
+table.adminListTable td.four_column_layout_column3 {
+	width: 132px;
+}
+
+table.adminListTable td.four_column_layout_column4 {
+	width: 132px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 96px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 130px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 132px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn4 {
+	word-wrap: break-word;
+	width: 132px;
+}
+
+.adminPanelColumnForm {
+	display: inline-block;
+	vertical-align: top;
+	margin-top: 2px;
+}
+
+.adminPanelColumnForm div.scrollcontent {
+	vertical-align: top;
+	height: 500px;
+	overflow-y: scroll;
+}
+
+.adminForm {
+	
+}
+.adminForm .btn {
+	width: 280px;
+}
+.adminForm input {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 280px;
+	height: 20px;
+	margin: 2px 2px;
+}
+.adminForm input[type=checkbox], .adminForm input[type=radio] {
+	width: auto;
+}
+.adminForm input.formcheckbox {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: none;
+	width: 20px;
+	height: 20px;
+	margin: 2px 2px;
+}
+
+.adminForm fieldset {
+	margin-top: 4px;
+	padding: 4px;
+}
+
+.adminForm legend {
+	padding: 0.2em 0.5em;
+	margin: 0px 10px;
+	font-style: italic;
+	text-align: right;
+}
+
+.adminForm textarea {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 280px;
+	height: 60px;
+	margin: 2px 2px;
+}
+
+.adminForm div.formelement {
+	display: block;
+	clear: both;
+	max-width: 490px;
+}
+
+.adminForm select {
+	float: left;
+	height: 20px;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 282px;
+	margin: 2px 2px 2px;
+}
+
+.adminForm label {
+	display: block;
+	font-size: 14px;
+	font-weight: bold;
+	text-align: right;
+	width: 180px;
+	float: left;
+	margin: 4px 2px 2px;
+}
+
+.adminBackupForm div.formelement {
+    display: block;
+    clear: both;
+    max-width: 1240px;
+}
+.adminFormsFeedbackPanel {
+	position: fixed;
+	left:550px;
+	width: 480px;
+	bottom: 16px;
+	z-index:999;
+}
+.adminForm .newItem {
+	padding-left: 25px;
+	background-image: url(images/new.png);
+	background-repeat: no-repeat;
+	background-position: 5px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/css/calendar.css b/src/main/webapp/css/calendar.css
new file mode 100644
index 0000000..dea7fba
--- /dev/null
+++ b/src/main/webapp/css/calendar.css
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.appointmentPopUp td {
+	vertical-align: top;
+}
+
+.appointmentPopUp input[name="appointmentName"] {
+	width: 420px;
+}
+
+.appointmentPopUp input[name="password"] {
+	width: 420px;
+}
+
+.appointmentPopUp input[name="appointmentLocation"] {
+	width: 420px;
+}
+
+.appointmentPopUp textarea[name="appointmentDescription"] {
+	width: 424px;
+	height: 80px;
+}
+
+.appointmentPopUp select[name="remind"] {
+	width: 426px;
+}
+
+.appointmentPopUp select[name="room.roomtype"] {
+	width: 426px;
+}
+
+.appointmentPopUp select[name="room"] {
+	width: 426px;
+}
+
+.appointmentPopUp .formNewButton {
+	float: left;
+}
+
+.appointmentPopUp .attendeeContainer {
+	background-color: #FFFFFF;
+	border: solid 1px #aacfe4;
+	width: 424px;
+	height: 100px;
+	overflow-x: scroll;
+	float: left;
+}
+
+.appointmentPopUp .attendeeContainer table td:FIRST-CHILD div {
+	width: 130px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.appointmentPopUp .attendeeContainer table td:nth-child(2) div {
+	width: 260px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.appointmentPopUp .attendeeContainer table td:nth-child(3) div {
+	width: 20px;
+}
+.appointment.attendees {
+	width: 100%;
+}
+.appointment.attendees.select2-container-multi .select2-choices {
+	max-height: 100px;
+	overflow-y: auto;
+}
diff --git a/src/main/webapp/css/forms.css b/src/main/webapp/css/forms.css
new file mode 100644
index 0000000..d3fb7c9
--- /dev/null
+++ b/src/main/webapp/css/forms.css
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+div.formSaveBar {
+	width: 100%;
+	height: 22px;
+}
+ 
+div.formSaveButton input {
+	background: url(images/forms/disk.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formNewButton input {
+	background: url(images/forms/plus_icon.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formNewButton.disabled input {
+	background: url(images/forms/plus_icon_disabled.png) no-repeat;
+	float: left;
+	cursor: default;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formRefreshButton input {
+	background: url(images/forms/arrow_refresh_small.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formCancelButton input {
+	background: url(images/forms/cancel_icon.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/css/history.css b/src/main/webapp/css/history.css
new file mode 100644
index 0000000..d78d4be
--- /dev/null
+++ b/src/main/webapp/css/history.css
@@ -0,0 +1,24 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }
diff --git a/src/main/webapp/css/images/add.png b/src/main/webapp/css/images/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/src/main/webapp/css/images/add.png
Binary files differ
diff --git a/src/main/webapp/css/images/arrow_down.png b/src/main/webapp/css/images/arrow_down.png
new file mode 100644
index 0000000..e5b352b
--- /dev/null
+++ b/src/main/webapp/css/images/arrow_down.png
Binary files differ
diff --git a/src/main/webapp/css/images/arrow_right.png b/src/main/webapp/css/images/arrow_right.png
new file mode 100644
index 0000000..3ef0b77
--- /dev/null
+++ b/src/main/webapp/css/images/arrow_right.png
Binary files differ
diff --git a/src/main/webapp/css/images/basket_put.png b/src/main/webapp/css/images/basket_put.png
new file mode 100644
index 0000000..be62faa
--- /dev/null
+++ b/src/main/webapp/css/images/basket_put.png
Binary files differ
diff --git a/src/main/webapp/css/images/bullet_green.png b/src/main/webapp/css/images/bullet_green.png
new file mode 100644
index 0000000..058ad26
--- /dev/null
+++ b/src/main/webapp/css/images/bullet_green.png
Binary files differ
diff --git a/src/main/webapp/css/images/bullet_red.png b/src/main/webapp/css/images/bullet_red.png
new file mode 100644
index 0000000..0cd8031
--- /dev/null
+++ b/src/main/webapp/css/images/bullet_red.png
Binary files differ
diff --git a/src/main/webapp/css/images/cross.png b/src/main/webapp/css/images/cross.png
new file mode 100644
index 0000000..1514d51
--- /dev/null
+++ b/src/main/webapp/css/images/cross.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_add.png b/src/main/webapp/css/images/email_add.png
new file mode 100644
index 0000000..6c93368
--- /dev/null
+++ b/src/main/webapp/css/images/email_add.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_delete.png b/src/main/webapp/css/images/email_delete.png
new file mode 100644
index 0000000..a9932b1
--- /dev/null
+++ b/src/main/webapp/css/images/email_delete.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_go.png b/src/main/webapp/css/images/email_go.png
new file mode 100644
index 0000000..4a6c5d3
--- /dev/null
+++ b/src/main/webapp/css/images/email_go.png
Binary files differ
diff --git a/src/main/webapp/css/images/film.png b/src/main/webapp/css/images/film.png
new file mode 100644
index 0000000..b0ce7bb
--- /dev/null
+++ b/src/main/webapp/css/images/film.png
Binary files differ
diff --git a/src/main/webapp/css/images/film_error.png b/src/main/webapp/css/images/film_error.png
new file mode 100644
index 0000000..88f3d69
--- /dev/null
+++ b/src/main/webapp/css/images/film_error.png
Binary files differ
diff --git a/src/main/webapp/css/images/film_processing.png b/src/main/webapp/css/images/film_processing.png
new file mode 100644
index 0000000..fb09a02
--- /dev/null
+++ b/src/main/webapp/css/images/film_processing.png
Binary files differ
diff --git a/src/main/webapp/css/images/folder.png b/src/main/webapp/css/images/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/src/main/webapp/css/images/folder.png
Binary files differ
diff --git a/src/main/webapp/css/images/folder_add.png b/src/main/webapp/css/images/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/src/main/webapp/css/images/folder_add.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/arrow_refresh_small.png b/src/main/webapp/css/images/forms/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/src/main/webapp/css/images/forms/arrow_refresh_small.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/cancel_icon.png b/src/main/webapp/css/images/forms/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/src/main/webapp/css/images/forms/cancel_icon.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/disk.png b/src/main/webapp/css/images/forms/disk.png
new file mode 100644
index 0000000..99d532e
--- /dev/null
+++ b/src/main/webapp/css/images/forms/disk.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/plus_icon.png b/src/main/webapp/css/images/forms/plus_icon.png
new file mode 100644
index 0000000..acec291
--- /dev/null
+++ b/src/main/webapp/css/images/forms/plus_icon.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/plus_icon_disabled.png b/src/main/webapp/css/images/forms/plus_icon_disabled.png
new file mode 100644
index 0000000..cfb4776
--- /dev/null
+++ b/src/main/webapp/css/images/forms/plus_icon_disabled.png
Binary files differ
diff --git a/src/main/webapp/css/images/house_link.png b/src/main/webapp/css/images/house_link.png
new file mode 100644
index 0000000..be2c271
--- /dev/null
+++ b/src/main/webapp/css/images/house_link.png
Binary files differ
diff --git a/src/main/webapp/css/images/information.png b/src/main/webapp/css/images/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/src/main/webapp/css/images/information.png
Binary files differ
diff --git a/src/main/webapp/css/images/new.png b/src/main/webapp/css/images/new.png
new file mode 100644
index 0000000..6a9bf03
--- /dev/null
+++ b/src/main/webapp/css/images/new.png
Binary files differ
diff --git a/src/main/webapp/css/images/refresh.gif b/src/main/webapp/css/images/refresh.gif
new file mode 100644
index 0000000..7aff1a9
--- /dev/null
+++ b/src/main/webapp/css/images/refresh.gif
Binary files differ
diff --git a/src/main/webapp/css/images/script_error.png b/src/main/webapp/css/images/script_error.png
new file mode 100644
index 0000000..0491954
--- /dev/null
+++ b/src/main/webapp/css/images/script_error.png
Binary files differ
diff --git a/src/main/webapp/css/images/tick.png b/src/main/webapp/css/images/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/src/main/webapp/css/images/tick.png
Binary files differ
diff --git a/src/main/webapp/css/images/trash.png b/src/main/webapp/css/images/trash.png
new file mode 100644
index 0000000..b92592b
--- /dev/null
+++ b/src/main/webapp/css/images/trash.png
Binary files differ
diff --git a/src/main/webapp/css/images/user.png b/src/main/webapp/css/images/user.png
new file mode 100644
index 0000000..79f35cc
--- /dev/null
+++ b/src/main/webapp/css/images/user.png
Binary files differ
diff --git a/src/main/webapp/css/images/user_go.png b/src/main/webapp/css/images/user_go.png
new file mode 100644
index 0000000..0468cf0
--- /dev/null
+++ b/src/main/webapp/css/images/user_go.png
Binary files differ
diff --git a/src/main/webapp/css/images/world_link.png b/src/main/webapp/css/images/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/src/main/webapp/css/images/world_link.png
Binary files differ
diff --git a/src/main/webapp/css/jquery.ui.menubar-rtl.css b/src/main/webapp/css/jquery.ui.menubar-rtl.css
new file mode 100644
index 0000000..4f19036
--- /dev/null
+++ b/src/main/webapp/css/jquery.ui.menubar-rtl.css
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.ui-menubar {
+	padding: 0px !important;
+}
+.ui-menubar-item {
+	float: right !important;
+}
+.ui-menubar .ui-button {
+	float: right !important;
+}
+.ui-menubar .ui-button .ui-button-text .ui-icon {
+	float: left !important;
+}
diff --git a/src/main/webapp/css/jquery.ui.menubar.css b/src/main/webapp/css/jquery.ui.menubar.css
new file mode 100644
index 0000000..03e04af
--- /dev/null
+++ b/src/main/webapp/css/jquery.ui.menubar.css
@@ -0,0 +1,35 @@
+/*
+ * jQuery UI Menubar @VERSION
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+.ui-menubar {
+	list-style: none;
+	margin: 0; padding-left: 0;
+}
+
+.ui-menubar-item {
+	float: left;
+}
+
+.ui-menubar .ui-button {
+	float: left;
+	font-weight: bold;
+	border-top-width: 0 !important;
+	border-bottom-width: 0 !important;
+	margin: 0;
+	outline: none;
+}
+.ui-menubar .ui-menubar-link {
+	border-right: 1px dashed transparent;
+	border-left: 1px dashed transparent;
+}
+
+.ui-menubar .ui-menu {
+	width: 200px;
+	position: absolute;
+	z-index: 9999;
+	font-weight: normal;
+}
diff --git a/src/main/webapp/css/theme-rtl.css b/src/main/webapp/css/theme-rtl.css
new file mode 100644
index 0000000..6e110b6
--- /dev/null
+++ b/src/main/webapp/css/theme-rtl.css
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#header {
+	padding-left: initial !important;
+	padding-right: 150px;
+	background-position: right center;
+}
+#topLinks {
+	right: initial !important;
+	left: 10px;
+}
+
+#topLinks span {
+	border-right: none !important;
+	border-left: 1px solid black;
+}
+
+#topLinks span:last-child {
+	border-left: none;
+}
+#busy_indicator {
+	float: left !important;
+}
+#chatPanel {
+	right: initial !important;
+	left: 10px;
+}
+.ui-tabs .ui-tabs-nav li {
+	float: right !important;
+}
+.info-text {
+	background-position: right top !important;
+	padding-left: initial !important;
+	padding-right: 20px;
+}
+.start_step1, .start_step2, .start_step3, .start_step4 {
+	padding-left: initial !important;
+	padding-right: 30px;
+	background-position: right top !important;
+}
+.start_step2 {
+	margin-left: initial !important;
+	margin-right: 20px !important;
+}
+.start_step3 {
+	margin-left: initial !important;
+	margin-right: 40px !important;
+}
+.start_step4 {
+	margin-left: initial !important;
+	margin-right: 60px !important;
+}
+form .input {
+	float: right !important;
+}
+#searchUsersTable th, .fht-table th {
+	text-align: right !important;
+}
+.ui-dialog .ui-dialog-title {
+	float: right !important;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	right: initial !important;
+	left: .3em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: left !important;
+}
+
+/**** FIXME need to be moved to wicket-jquery-ui **************/
+span.css-emoticon {
+	transform: rotate(-90deg) !important;
+}
+.chat.dropdown-menu {
+	left: initial !important;
+    right: -50px !important;
+	float: right !important;
+}
diff --git a/src/main/webapp/css/theme.css b/src/main/webapp/css/theme.css
new file mode 100644
index 0000000..4110562
--- /dev/null
+++ b/src/main/webapp/css/theme.css
@@ -0,0 +1,619 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+html, body {
+	height: 100%;
+	margin: 0;
+	font-family: Arial, Helvetica, sans-serif;
+}
+#header {
+	font-size: 28px;
+	line-height: 40px;
+	font-weight: bold;
+	background-image: url(../public/themes/basic-theme/general/logo.png);
+	background-repeat: no-repeat;
+	padding-left: 150px;
+}
+#topLinks {
+	position: absolute;
+	top: 10px;
+	right: 10px;
+}
+
+#topLinks span {
+	padding-right: 5px;
+	padding-left: 5px;
+	border-right: 1px solid black;
+}
+
+#topLinks span:last-child {
+	border-right: none;
+}
+
+#menu {
+	background-color: #AFCBFB;
+	margin-top: 10px;
+}
+.ui-menubar .ui-menu {
+	width: 250px;
+}
+.ui-menu .ui-menu-item a {
+	line-height: 1.2em !important;
+	padding-bottom: 5px !important;
+}
+.menuName {
+	font-weight: bold;
+}
+.menuDesc {
+	font-size: smaller;
+	line-height: 1em !important;
+}
+
+#busy_indicator {
+	display: none;
+	float: right;
+	margin-top: 5px;
+	z-index: 1000;
+	width: 200px;
+	font-weight: bold;
+	text-align: center;
+	font-size: 1em;
+	color: #FF0000;
+}
+
+#chatPanel {
+	position: fixed;
+	z-index: 2000;
+	bottom: 0px;
+	right: 10px;
+	width: 600px;
+}
+#chatPanel #chat {
+	height: 20px;
+}
+#chatPanel #chat #controlBlock #control {
+	text-align: center;
+}
+#chatPanel #chat #messageArea .date {
+    margin-right: 5px;
+    font-style: italic;
+    font-size: smaller;
+}
+#chatPanel #chat #messageArea .from {
+	margin-left: 5px;
+    margin-right: 5px;
+	font-weight: bold;
+}
+#messageArea {
+	height: 165px;
+	overflow-y: auto;
+}
+#chatMessage .wysiwyg-editor {
+	height: 70px;
+	max-height: 70px;
+}
+.clickable {
+	cursor: pointer;
+}
+.dragbox-content .tableWrapper {
+	width: auto;
+	height: 100px;
+}
+.dragbox-content .tableWrapper .adminListTable {
+	max-width: none;
+	min-width: 0;
+}
+.help.support h3 {
+	margin-bottom: 5px;
+}
+.tableWrapper, .tableWrapperSmall {
+	background-color: #FFFFFF;
+	border: solid 1px #aacfe4;
+	width: 536px;
+	height: 100px;
+	overflow-y: scroll;
+}
+.tableWrapper {
+	height: 500px;
+}
+
+.formelementradiobox {
+	margin-left: 100px;
+}
+
+.formelementradiobox input {
+	margin: 0px 0px;
+	border: none;
+	width: 20px;
+}
+
+.formelementradiobox label {
+	width: 260px;
+	margin: 0px
+}
+
+.addLanguagePanel {
+	display: block;
+}
+
+.addLanguagePanel select {
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 140px;
+	font-size: 12px;
+	margin-left: 2px;
+}
+
+.pagedEntityListPanel {
+	margin-left: 2px;
+	display: inline-block;
+}
+
+.searchForm {
+	display: inline-block;
+	vertical-align: top;
+}
+
+.pagedEntityListPanel select, .adminForm .pagedEntityListPanel select {
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 60px;
+	font-size: 12px;
+	display: inline;
+	float: none;
+}
+.searchForm input[type="text"], .adminForm .searchForm input[type="text"] {
+	width: 140px;
+	float: none;
+	display: inline-block;
+}
+.searchForm input[type="submit"], .adminForm .searchForm input[type="submit"] {
+	width: auto;
+	float: none;
+	display: inline-block;
+	border: 2px outset buttonface;
+	padding: 1px 6px;
+	font-size: 12px;
+}
+.pagedEntityListPanel input, .adminForm .pagedEntityListPanel input {
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 100px;
+	height: 20px;
+	margin: 2px 2px;
+	display: inline;
+	float: none;
+}
+
+.goto, .goto :link, .goto :hover {
+	font-size: 14px;
+	line-height: 14px;
+	text-decoration: none;
+	text-align: center;
+	vertical-align: middle;
+	min-width: 16px;
+}
+
+.goto.icon {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    border: none;
+    margin: 0px;
+    padding: 0px;
+    zoom: 1.2;
+}
+
+.ui-dialog {
+	-moz-box-shadow: 3px 3px 4px #000;
+	-webkit-box-shadow: 3px 3px 4px #000;
+	/* For IE 8 */
+	-ms-filter:
+		"progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
+	/* For IE 5.5 - 7 */
+	filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135,
+		Color='#000000' );
+	box-shadow: 3px 3px 4px #000;
+}
+
+.sort-icon {
+	display: inline-block !important;
+	text-indent: 0px !important;
+}
+
+.start_step1, .start_step2, .start_step3, .start_step4  {
+	padding-left: 30px;
+	background-position: left top;
+	margin: 5px 0px 5px 0px; 
+	background-size: contain;
+	background-repeat: no-repeat;
+	display: inline-block;
+}
+.start_step1 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_1.png);
+}
+.start_step2 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_2.png);
+	margin-left: 20px;
+}
+.start_step3 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_3.png);
+	margin-left: 40px;
+}
+.start_step4 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_4.png);
+	margin-left: 60px;
+}
+.widget {
+	width: 100%;
+}
+.widget td {
+	min-width: 150px;
+}
+#contents .dragbox-content {
+	min-height: 300px;
+	max-height: 300px;
+}
+#feedcontainer {
+	overflow: auto;
+}
+#feeds.ui-accordion .ui-accordion-header {
+	margin-bottom: 2px;
+}
+.recording {
+	width: 100%;
+	display: inline-block;
+}
+.recording .files {
+	width: 250px;
+	border: 1px solid #ccc;
+}
+.trash-toolbar {
+	font-weight: bold;
+	line-height: 20px;
+	color: transparent;
+}
+.trash-toolbar-hover {
+	color: inherit;
+}
+.recording .files .trees {
+	min-height: 400px;
+	max-height: 600px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+.recording .files .sizes table, .recording .files .info table {
+	width: 100%;
+}
+.recording .files .info input {
+	width: 100%;
+	padding-right: 5px;
+	padding-left: 5px;
+}
+.recording .video .player {
+	width: 100%;
+	display: inline-block;
+	box-shadow: 0 0 10px 1px rgba(74, 137, 151, 0.5);
+}
+.recording .video .player video {
+	width: 100%;
+}
+.align-left {
+	float: left;
+}
+.align-right {
+	float: right;
+}
+.clear {
+	clear: both;
+}
+.om-icon {
+	background-repeat: no-repeat !important;
+	background-position: 0 0 !important;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+	display: inline-block !important;
+}
+.trees a.om-icon {
+	width: auto;
+}
+.trees a.om-icon span {
+	white-space: nowrap;
+	padding-right: 20px;
+	vertical-align: top;
+}
+.cross.om-icon {
+	background-image: url(images/cross.png);
+}
+.tick.om-icon {
+	background-image: url(images/tick.png);
+}
+.add.om-icon {
+	background-image: url(images/add.png);
+}
+.new-email.om-icon {
+	background-image: url(images/email_add.png);
+}
+.user.om-icon {
+	background: url(images/user.png);
+}
+.refresh.om-icon {
+	background: url(images/refresh.gif);
+}
+.trash.om-icon {
+	background: url(images/trash.png);
+}
+.folder-create.om-icon {
+	background: url(images/folder_add.png);
+}
+.recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film.png);
+}
+.broken-recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film_error.png);
+}
+.processing-recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film_processing.png);
+}
+.my-recordings.om-icon {
+	padding-left: 18px;
+	background-image: url(images/house_link.png);
+}
+.public-recordings.om-icon {
+	padding-left: 18px;
+	background-image: url(images/world_link.png);
+}
+.tree-theme-windows span.tree-content {
+	display: flex !important;
+}
+.recording.item {
+	position: relative;
+	vertical-align: top;
+}
+.recording.item .name {
+	color: black;
+	display: block;
+	overflow: hidden;
+	width: 230px;
+}
+.recording.item .errors {
+	position: absolute;
+	right: 0px;
+	background-image: url(images/script_error.png);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	padding-right: 20px;
+}
+.recording.dialog.errors {
+	width: 600px;
+	height: 500px;
+	font-size: small;
+}
+.recording.dialog.errors .alert {
+	color: red;
+}
+.recording.dialog.errors .message {
+	display: block;
+	unicode-bidi: embed;
+	font-family: monospace;
+	white-space: pre;
+	margin: 0;
+}
+.online.om-icon {
+	background-image: url(images/bullet_green.png);
+}
+.offline.om-icon {
+	background-image: url(images/bullet_red.png);
+}
+.error {
+	color: red;
+}
+.message {
+	margin: 50px;
+	border: 1px solid black;
+	padding: 15px;
+	-webkit-border-radius: 8px;
+	border-radius: 8px;
+}
+.ui-progressbar div { 
+	text-align: center;
+	padding-top: 7px;
+	font-weight: bold;
+}
+table.messages {
+	width: 100%;
+	min-height: 500px;
+}
+table.messages td.side, table.messages td.main {
+	vertical-align: top;
+}
+table.messages td.side.left {
+	min-width: 150px;
+	overflow-x: hidden;
+}
+table.messages td.side.right {
+	min-width: 200px;
+	overflow-x: hidden;
+}
+table.messages td.main {
+	width: 100%;
+}
+.email {
+	padding-left: 25px;
+	background-repeat: no-repeat !important;
+	background-position: 5px 3px !important;
+	padding-top: 2px;
+	display: block;
+	text-align:left;
+}
+.email.new {
+	background-image: url(images/email_add.png);
+	font-weight: normal;
+}
+.email.new .ui-button-text, .email.newdir .ui-button-text {
+	padding: 0;
+}
+.email.inbox {
+	background-image: url(images/basket_put.png);
+}
+.email.sent {
+	background-image: url(images/email_go.png);
+}
+.email.trash {
+	background-image: url(images/email_delete.png);
+}
+.email.newdir {
+	background-image: url(images/folder_add.png);
+	font-weight: normal;
+}
+.email.folder {
+	background-image: url(images/folder.png);
+	font-weight: normal;
+	position: relative;
+}
+.email.folder .delete {
+	position:absolute;
+	right: 2px;
+	top: 2px;
+	background-image: url(images/cross.png);
+	font-weight: normal;
+	padding: 0;
+	display: inline-block;
+	background-position: 0;
+	width: 18px;
+	height: 18px;
+}
+.messages.column.label {
+	width: 20px;
+	min-height: inherit;
+}
+input[type="text"].messages.text, .messages.text.to {
+	width: 100%;
+	max-height: 100px;
+	overflow-y: auto;
+}
+textarea.messages.body {
+	width: 100%;
+	height: 300px;
+}
+select.messages.selector {
+	width: 220px;
+}
+.info-text {
+	background-image: url(images/information.png);
+	background-repeat: no-repeat;
+	background-position: left top;
+	cursor: default;
+	border: none;
+	padding-left: 20px;
+	font-style: italic;
+}
+.invisible-form-component {
+	position: absolute;
+	top: -9999px;
+	width: 1px;
+	height: 1px;
+}
+#messagesTable tr.unread {
+	font-weight: bold;
+}
+.fht-tbody {
+	background-color: white;
+}
+#searchUsersTable th, .fht-table th {
+	font-weight: bold !important;
+	text-align: left;
+}
+#ui-datepicker-div{
+    z-index: 100 !important;
+}
+.room-list {
+	border-collapse: collapse;
+}
+.room-row {
+	background-color: rgb(248, 248, 248);
+	border-bottom: 5px solid white;
+}
+.select2-results .select2-result .select2-result-label .user.external
+, .select2-results .select2-result .select2-result-label .user.internal
+, .select2-choices .select2-search-choice .user.external
+, .select2-choices .select2-search-choice .user.internal {
+	padding-left: 18px;
+	background-repeat: no-repeat;
+	background-position: 0px 2px;
+}
+.select2-results .select2-result .select2-result-label .user.external
+, .select2-choices .select2-search-choice .user.external {
+	background-image: url(images/user_go.png);
+}
+.select2-results .select2-result .select2-result-label .user.internal
+, .select2-choices .select2-search-choice .user.internal {
+	background-image: url(images/user.png);
+}
+.page.recording {
+	padding-top: 40px;
+}
+.page.recording .video, .page.recording .info {
+	display: inline-block;
+	float: left;
+	padding-left: 20px;
+}
+.page.recording .video {
+	min-width: 400px;
+}
+.rooms.title {
+	font-weight: bold;
+	padding: 10px;
+	padding-bottom: 0;
+}
+.rooms.desc {
+	margin: 10px;
+	max-width: 900px;
+}
+.user.info.panel legend {
+	font-style: italic;
+	text-align: right;
+}
+.user.info.panel fieldset table, .user.info.panel fieldset table textarea {
+	width: 100%;
+}
+form .input {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	width: 280px;
+	margin: 2px 2px;
+}
+.date.time.picker {
+	font-size: 12px;
+	white-space: nowrap;
+}
+.profile .ui-button-text-only .ui-button-text {
+	font-size: 12px;
+	padding-right: 0.2em;
+	padding-left: 0.2em;
+}
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
new file mode 100644
index 0000000..6c6d80e
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png b/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png
new file mode 100644
index 0000000..ba05782
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png
new file mode 100644
index 0000000..c9ecec2
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png
new file mode 100644
index 0000000..e21e514
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png
new file mode 100644
index 0000000..a81d8ec
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
new file mode 100644
index 0000000..bbab178
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png
new file mode 100644
index 0000000..1deb7e3
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png
new file mode 100644
index 0000000..e6ad4cb
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
new file mode 100644
index 0000000..3dd42eb
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png
new file mode 100644
index 0000000..2a3ae78
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..f2bf838
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png
new file mode 100644
index 0000000..ad8c68a
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png
new file mode 100644
index 0000000..508f22a
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4d66f59
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css
new file mode 100644
index 0000000..f22e4e6
--- /dev/null
+++ b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css
@@ -0,0 +1,1225 @@
+/*! jQuery UI - v1.11.4 - 2015-09-10
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2C%20Helvetica%2C%20sans-serif&fwDefault=normal&fsDefault=16px&cornerRadius=6px&bgColorHeader=%23deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23aed0ea&fcHeader=%23222222&iconColorHeader=%2372a7cf&bgColorContent=%23f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=%23dddddd&fcContent=%23362b36&iconColorContent=%2372a7cf&bgColorDefault=%23d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=%23aed0ea&fcDefault=%232779aa&iconColorDefault=%233d80b3&bgColorHover=%23e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=%2374b2e2&fcHover=%230070a3&iconColorHover=%232694e8&bgColorActive=%233baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=%232694e8&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=%23f9dd34&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=%23cd0a0a&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=%23000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 0;
+	margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	overflow: hidden;
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	position: relative;
+	margin: 0;
+	padding: 3px 1em 3px .4em;
+	cursor: pointer;
+	min-height: 0; /* support: IE7 */
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	/* Support: IE7 */
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-button {
+	display: inline-block;
+	overflow: hidden;
+	position: relative;
+	text-decoration: none;
+	cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+	right: 0.5em;
+	left: auto;
+	margin-top: -8px;
+	position: absolute;
+	top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+	text-align: left;
+	padding: 0.4em 2.1em 0.4em 1em;
+	display: block;
+	line-height: 1.4;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 16px;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;
+	color: #362b36;
+}
+.ui-widget-content a {
+	color: #362b36;
+}
+.ui-widget-header {
+	border: 1px solid #aed0ea;
+	background: #deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;
+	color: #222222;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #aed0ea;
+	background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #2779aa;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #2779aa;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #74b2e2;
+	background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #0070a3;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #0070a3;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #2694e8;
+	background: #3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #f9dd34;
+	background: #ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70); /* support: IE8 */
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+.ui-state-default .ui-icon {
+	background-image: url("images/ui-icons_3d80b3_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url("images/ui-icons_2694e8_256x240.png");
+}
+.ui-state-active .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+	background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #eeeeee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;
+	opacity: .8;
+	filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+	margin: -7px 0 0 -7px;
+	padding: 7px;
+	background: #000000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+	border-radius: 8px;
+}
diff --git a/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css
new file mode 100644
index 0000000..6ccdad9
--- /dev/null
+++ b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.4 - 2015-09-10
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2C%20Helvetica%2C%20sans-serif&fwDefault=normal&fsDefault=16px&cornerRadius=6px&bgColorHeader=%23deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23aed0ea&fcHeader=%23222222&iconColorHeader=%2372a7cf&bgColorContent=%23f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=%23dddddd&fcContent=%23362b36&iconColorContent=%2372a7cf&bgColorDefault=%23d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=%23aed0ea&fcDefault=%232779aa&iconColorDefault=%233d80b3&bgColorHover=%23e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=%2374b2e2&fcHover=%230070a3&iconColorHover=%232694e8&bgColorActive=%233baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=%232694e8&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=%23f9dd34&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=%23cd0a0a&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=%23000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:16px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #aed0ea;background:#d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#2779aa}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2779aa;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #74b2e2;background:#e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#0070a3}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#0070a3;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #2694e8;background:#3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_3d80b3_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_2694e8_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:6px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:#000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
diff --git a/src/main/webapp/default/_big_profile_pic.jpg b/src/main/webapp/default/_big_profile_pic.jpg
new file mode 100644
index 0000000..07a1286
--- /dev/null
+++ b/src/main/webapp/default/_big_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_chat_profile_pic.jpg b/src/main/webapp/default/_chat_profile_pic.jpg
new file mode 100644
index 0000000..15df4e5
--- /dev/null
+++ b/src/main/webapp/default/_chat_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_profile_phone.png b/src/main/webapp/default/_profile_phone.png
new file mode 100644
index 0000000..9ed6449
--- /dev/null
+++ b/src/main/webapp/default/_profile_phone.png
Binary files differ
diff --git a/src/main/webapp/default/_profile_profile_pic.jpg b/src/main/webapp/default/_profile_profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/src/main/webapp/default/_profile_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_thumb_deleted.jpg b/src/main/webapp/default/_thumb_deleted.jpg
new file mode 100644
index 0000000..18f0895
--- /dev/null
+++ b/src/main/webapp/default/_thumb_deleted.jpg
Binary files differ
diff --git a/src/main/webapp/default/deleted.jpg b/src/main/webapp/default/deleted.jpg
new file mode 100644
index 0000000..932c9bd
--- /dev/null
+++ b/src/main/webapp/default/deleted.jpg
Binary files differ
diff --git a/src/main/webapp/default/deleted.odp b/src/main/webapp/default/deleted.odp
new file mode 100644
index 0000000..892044c
--- /dev/null
+++ b/src/main/webapp/default/deleted.odp
Binary files differ
diff --git a/src/main/webapp/default/deleted.pdf b/src/main/webapp/default/deleted.pdf
new file mode 100644
index 0000000..85ef078
--- /dev/null
+++ b/src/main/webapp/default/deleted.pdf
Binary files differ
diff --git a/src/main/webapp/default/deleted.swf b/src/main/webapp/default/deleted.swf
new file mode 100644
index 0000000..061df24
--- /dev/null
+++ b/src/main/webapp/default/deleted.swf
Binary files differ
diff --git a/src/main/webapp/default/deleted.xcf b/src/main/webapp/default/deleted.xcf
new file mode 100644
index 0000000..67b2f85
--- /dev/null
+++ b/src/main/webapp/default/deleted.xcf
Binary files differ
diff --git a/src/main/webapp/default/profile_pic.jpg b/src/main/webapp/default/profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/src/main/webapp/default/profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/images/ajax-loader.gif b/src/main/webapp/images/ajax-loader.gif
new file mode 100644
index 0000000..69b652d
--- /dev/null
+++ b/src/main/webapp/images/ajax-loader.gif
Binary files differ
diff --git a/src/main/webapp/images/calendar.gif b/src/main/webapp/images/calendar.gif
new file mode 100644
index 0000000..d0abaa7
--- /dev/null
+++ b/src/main/webapp/images/calendar.gif
Binary files differ
diff --git a/src/main/webapp/images/delete.gif b/src/main/webapp/images/delete.gif
new file mode 100644
index 0000000..b6922ac
--- /dev/null
+++ b/src/main/webapp/images/delete.gif
Binary files differ
diff --git a/src/main/webapp/images/down.png b/src/main/webapp/images/down.png
new file mode 100644
index 0000000..f070ea6
--- /dev/null
+++ b/src/main/webapp/images/down.png
Binary files differ
diff --git a/src/main/webapp/images/edit.png b/src/main/webapp/images/edit.png
new file mode 100644
index 0000000..2e2a1c4
--- /dev/null
+++ b/src/main/webapp/images/edit.png
Binary files differ
diff --git a/src/main/webapp/images/refresh.gif b/src/main/webapp/images/refresh.gif
new file mode 100644
index 0000000..7aff1a9
--- /dev/null
+++ b/src/main/webapp/images/refresh.gif
Binary files differ
diff --git a/src/main/webapp/images/up.png b/src/main/webapp/images/up.png
new file mode 100644
index 0000000..5d10417
--- /dev/null
+++ b/src/main/webapp/images/up.png
Binary files differ
diff --git a/src/main/webapp/js/history.js b/src/main/webapp/js/history.js
new file mode 100644
index 0000000..f9bcd2b
--- /dev/null
+++ b/src/main/webapp/js/history.js
@@ -0,0 +1,703 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+BrowserHistoryUtils = {
+    addEvent: function(elm, evType, fn, useCapture) {
+        useCapture = useCapture || false;
+        if (elm.addEventListener) {
+            elm.addEventListener(evType, fn, useCapture);
+            return true;
+        } else if (elm.attachEvent) {
+            var r = elm.attachEvent('on' + evType, fn);
+            return r;
+        } else {
+            elm['on' + evType] = fn;
+        }
+    }
+}
+
+BrowserHistory = (function() {
+    // type of browser
+    var browser = {
+        ie: false,
+        ie8: false,
+        firefox: false,
+        safari: false,
+        opera: false,
+        version: -1
+    };
+
+    // Default app state URL to use when no fragment ID present
+    var defaultHash = '';
+
+    // Last-known app state URL
+    var currentHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHash = document.location.hash;
+
+    // History frame source URL prefix (used only by IE)
+    var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+    // History maintenance (used only by Safari)
+    var currentHistoryLength = -1;
+
+    // Flag to denote the existence of onhashchange
+    var browserHasHashChange = false;
+
+    var historyHash = [];
+
+    var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
+
+    var backStack = [];
+    var forwardStack = [];
+
+    var currentObjectId = null;
+
+    //UserAgent detection
+    var useragent = navigator.userAgent.toLowerCase();
+
+    if (useragent.indexOf("opera") != -1) {
+        browser.opera = true;
+    } else if (useragent.indexOf("msie") != -1) {
+        browser.ie = true;
+        browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+        if (browser.version == 8) {
+            browser.ie = false;
+            browser.ie8 = true;
+        }
+    } else if (useragent.indexOf("safari") != -1) {
+        browser.safari = true;
+        browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+    } else if (useragent.indexOf("gecko") != -1) {
+        browser.firefox = true;
+    }
+
+    if (browser.ie == true && browser.version == 7) {
+        window["_ie_firstload"] = false;
+    }
+
+    function hashChangeHandler() {
+        currentHref = document.location.href;
+        var flexAppUrl = getHash();
+        //ADR: to fix multiple
+        if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+            var pl = getPlayers();
+            for (var i = 0; i < pl.length; i++) {
+                pl[i].browserURLChange(flexAppUrl);
+            }
+        } else {
+            getPlayer().browserURLChange(flexAppUrl);
+        }
+    }
+
+    // Accessor functions for obtaining specific elements of the page.
+
+    function getHistoryFrame() {
+        return document.getElementById('ie_historyFrame');
+    }
+
+    function getFormElement() {
+        return document.getElementById('safari_formDiv');
+    }
+
+    function getRememberElement() {
+        return document.getElementById("safari_remember_field");
+    }
+
+    // Get the Flash player object for performing ExternalInterface callbacks.
+    // Updated for changes to SWFObject2.
+
+    function getPlayer(id) {
+        var i;
+
+        if (id && document.getElementById(id)) {
+            var r = document.getElementById(id);
+            if (typeof r.SetVariable != "undefined") {
+                return r;
+            } else {
+                var o = r.getElementsByTagName("object");
+                var e = r.getElementsByTagName("embed");
+                for (i = 0; i < o.length; i++) {
+                    if (typeof o[i].browserURLChange != "undefined")
+                        return o[i];
+                }
+                for (i = 0; i < e.length; i++) {
+                    if (typeof e[i].browserURLChange != "undefined")
+                        return e[i];
+                }
+            }
+        } else {
+            var o = document.getElementsByTagName("object");
+            var e = document.getElementsByTagName("embed");
+            for (i = 0; i < e.length; i++) {
+                if (typeof e[i].browserURLChange != "undefined") {
+                    return e[i];
+                }
+            }
+            for (i = 0; i < o.length; i++) {
+                if (typeof o[i].browserURLChange != "undefined") {
+                    return o[i];
+                }
+            }
+        }
+        return undefined;
+    }
+
+    function getPlayers() {
+        var i;
+        var players = [];
+        if (players.length == 0) {
+            var tmp = document.getElementsByTagName('object');
+            for (i = 0; i < tmp.length; i++) {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        if (players.length == 0 || players[0].object == null) {
+            var tmp = document.getElementsByTagName('embed');
+            for (i = 0; i < tmp.length; i++) {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        return players;
+    }
+
+    function getIframeHash() {
+        var doc = getHistoryFrame().contentWindow.document;
+        var hash = String(doc.location.search);
+        if (hash.length == 1 && hash.charAt(0) == "?") {
+            hash = "";
+        } else if (hash.length >= 2 && hash.charAt(0) == "?") {
+            hash = hash.substring(1);
+        }
+        return hash;
+    }
+
+    /* Get the current location hash excluding the '#' symbol. */
+
+    function getHash() {
+        // It would be nice if we could use document.location.hash here,
+        // but it's faulty sometimes.
+        var idx = document.location.href.indexOf('#');
+        return (idx >= 0) ? document.location.href.substr(idx + 1) : '';
+    }
+
+    /* Get the current location hash excluding the '#' symbol. */
+
+    function setHash(hash) {
+        // It would be nice if we could use document.location.hash here,
+        // but it's faulty sometimes.
+        if (hash == '') hash = '#'
+        document.location.hash = hash;
+    }
+
+    function createState(baseUrl, newUrl, flexAppUrl) {
+        return {
+            'baseUrl': baseUrl,
+            'newUrl': newUrl,
+            'flexAppUrl': flexAppUrl,
+            'title': null
+        };
+    }
+
+    /* Add a history entry to the browser.
+     *   baseUrl: the portion of the location prior to the '#'
+     *   newUrl: the entire new URL, including '#' and following fragment
+     *   flexAppUrl: the portion of the location following the '#' only
+     */
+
+    function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+        //delete all the history entries
+        forwardStack = [];
+
+        if (browser.ie) {
+            //Check to see if we are being asked to do a navigate for the first
+            //history entry, and if so ignore, because it's coming from the creation
+            //of the history iframe
+            if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
+                currentHref = initialHref;
+                return;
+            }
+            if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
+                newUrl = baseUrl + '#' + defaultHash;
+                flexAppUrl = defaultHash;
+            } else {
+                // for IE, tell the history frame to go somewhere without a '#'
+                // in order to get this entry into the browser history.
+                getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+            }
+            setHash(flexAppUrl);
+        } else {
+
+            //ADR
+            if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
+                initialState = createState(baseUrl, newUrl, flexAppUrl);
+            } else if (backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+                backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
+            }
+
+            if (browser.safari && !browserHasHashChange) {
+                // for Safari, submit a form whose action points to the desired URL
+                if (browser.version <= 419.3) {
+                    var file = window.location.pathname.toString();
+                    file = file.substring(file.lastIndexOf("/") + 1);
+                    getFormElement().innerHTML = '<form name="historyForm" action="' + file + '#' + flexAppUrl + '" method="GET"></form>';
+                    //get the current elements and add them to the form
+                    var qs = window.location.search.substring(1);
+                    var qs_arr = qs.split("&");
+                    for (var i = 0; i < qs_arr.length; i++) {
+                        var tmp = qs_arr[i].split("=");
+                        var elem = document.createElement("input");
+                        elem.type = "hidden";
+                        elem.name = tmp[0];
+                        elem.value = tmp[1];
+                        document.forms.historyForm.appendChild(elem);
+                    }
+                    document.forms.historyForm.submit();
+                } else {
+                    top.location.hash = flexAppUrl;
+                }
+                // We also have to maintain the history by hand for Safari
+                historyHash[history.length] = flexAppUrl;
+                _storeStates();
+            } else {
+                // Otherwise, just tell the browser to go there
+                setHash(flexAppUrl);
+            }
+        }
+        backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+    }
+
+    function _storeStates() {
+        if (browser.safari) {
+            getRememberElement().value = historyHash.join(",");
+        }
+    }
+
+    function handleBackButton() {
+        //The "current" page is always at the top of the history stack.
+        var current = backStack.pop();
+        if (!current) {
+            return;
+        }
+        var last = backStack[backStack.length - 1];
+        if (!last && backStack.length == 0) {
+            last = initialState;
+        }
+        forwardStack.push(current);
+    }
+
+    function handleForwardButton() {
+        //summary: private method. Do not call this directly.
+
+        var last = forwardStack.pop();
+        if (!last) {
+            return;
+        }
+        backStack.push(last);
+    }
+
+    function handleArbitraryUrl() {
+        //delete all the history entries
+        forwardStack = [];
+    }
+
+    /* Called periodically to poll to see if we need to detect navigation that has occurred */
+
+    function checkForUrlChange() {
+
+        if (browser.ie) {
+            if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
+                //This occurs when the user has navigated to a specific URL
+                //within the app, and didn't use browser back/forward
+                //IE seems to have a bug where it stops updating the URL it
+                //shows the end-user at this point, but programatically it
+                //appears to be correct.  Do a full app reload to get around
+                //this issue.
+                if (browser.version < 7) {
+                    currentHref = document.location.href;
+                    document.location.reload();
+                } else {
+                    if (getHash() != getIframeHash()) {
+                        // this.iframe.src = this.blankURL + hash;
+                        var sourceToSet = historyFrameSourcePrefix + getHash();
+                        getHistoryFrame().src = sourceToSet;
+                        currentHref = document.location.href;
+                    }
+                }
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange) {
+            // For Safari, we have to check to see if history.length changed.
+            if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
+                //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
+                var flexAppUrl = getHash();
+                if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */ ) {
+                    // If it did change and we're running Safari 3.x or earlier, 
+                    // then we have to look the old state up in our hand-maintained 
+                    // array since document.location.hash won't have changed, 
+                    // then call back into BrowserManager.
+                    currentHistoryLength = history.length;
+                    flexAppUrl = historyHash[currentHistoryLength];
+                }
+
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                    getPlayer().browserURLChange(flexAppUrl);
+                }
+                _storeStates();
+            }
+        }
+        if (browser.firefox && !browserHasHashChange) {
+            if (currentHref != document.location.href) {
+                var bsl = backStack.length;
+
+                var urlActions = {
+                    back: false,
+                    forward: false,
+                    set: false
+                }
+
+                if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
+                    urlActions.back = true;
+                    // FIXME: could this ever be a forward button?
+                    // we can't clear it because we still need to check for forwards. Ugg.
+                    // clearInterval(this.locationTimer);
+                    handleBackButton();
+                }
+
+                // first check to see if we could have gone forward. We always halt on
+                // a no-hash item.
+                if (forwardStack.length > 0) {
+                    if (forwardStack[forwardStack.length - 1].flexAppUrl == getHash()) {
+                        urlActions.forward = true;
+                        handleForwardButton();
+                    }
+                }
+
+                // ok, that didn't work, try someplace back in the history stack
+                if ((bsl >= 2) && (backStack[bsl - 2])) {
+                    if (backStack[bsl - 2].flexAppUrl == getHash()) {
+                        urlActions.back = true;
+                        handleBackButton();
+                    }
+                }
+
+                if (!urlActions.back && !urlActions.forward) {
+                    var foundInStacks = {
+                        back: -1,
+                        forward: -1
+                    }
+
+                    for (var i = 0; i < backStack.length; i++) {
+                        if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.back = i;
+                        }
+                    }
+                    for (var i = 0; i < forwardStack.length; i++) {
+                        if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.forward = i;
+                        }
+                    }
+                    handleArbitraryUrl();
+                }
+
+                // Firefox changed; do a callback into BrowserManager to tell it.
+                currentHref = document.location.href;
+                var flexAppUrl = getHash();
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                    getPlayer().browserURLChange(flexAppUrl);
+                }
+            }
+        }
+    }
+
+    var _initialize = function() {
+
+        browserHasHashChange = ("onhashchange" in document.body);
+
+        if (browser.ie) {
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
+                }
+            }
+            historyFrameSourcePrefix = iframe_location + "?";
+            var src = historyFrameSourcePrefix;
+
+            var iframe = document.createElement("iframe");
+            iframe.id = 'ie_historyFrame';
+            iframe.name = 'ie_historyFrame';
+            iframe.src = 'javascript:false;';
+
+            try {
+                document.body.appendChild(iframe);
+            } catch (e) {
+                setTimeout(function() {
+                    document.body.appendChild(iframe);
+                }, 0);
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange) {
+            var rememberDiv = document.createElement("div");
+            rememberDiv.id = 'safari_rememberDiv';
+            document.body.appendChild(rememberDiv);
+            rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
+
+            var formDiv = document.createElement("div");
+            formDiv.id = 'safari_formDiv';
+            document.body.appendChild(formDiv);
+
+            var reloader_content = document.createElement('div');
+            reloader_content.id = 'safarireloader';
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    html = (new String(s.src)).replace(".js", ".html");
+                }
+            }
+            reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
+            document.body.appendChild(reloader_content);
+            reloader_content.style.position = 'absolute';
+            reloader_content.style.left = reloader_content.style.top = '-9999px';
+            iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+            if (document.getElementById("safari_remember_field").value != "") {
+                historyHash = document.getElementById("safari_remember_field").value.split(",");
+            }
+        }
+
+        if (browserHasHashChange)
+            document.body.onhashchange = hashChangeHandler;
+    }
+
+    return {
+        historyHash: historyHash,
+        backStack: function() {
+            return backStack;
+        },
+        forwardStack: function() {
+            return forwardStack
+        },
+        getPlayer: getPlayer,
+        initialize: function(src) {
+            _initialize(src);
+        },
+        setURL: function(url) {
+            document.location.href = url;
+        },
+        getURL: function() {
+            return document.location.href;
+        },
+        getTitle: function() {
+            return document.title;
+        },
+        setTitle: function(title) {
+            try {
+                backStack[backStack.length - 1].title = title;
+            } catch (e) {}
+            //if on safari, set the title to be the empty string. 
+            if (browser.safari) {
+                if (title == "") {
+                    try {
+                        var tmp = window.location.href.toString();
+                        title = tmp.substring((tmp.lastIndexOf("/") + 1), tmp.lastIndexOf("#"));
+                    } catch (e) {
+                        title = "";
+                    }
+                }
+            }
+            document.title = title;
+        },
+        setDefaultURL: function(def) {
+            defaultHash = def;
+            def = getHash();
+            //trailing ? is important else an extra frame gets added to the history
+            //when navigating back to the first page.  Alternatively could check
+            //in history frame navigation to compare # and ?.
+            if (browser.ie) {
+                window['_ie_firstload'] = true;
+                var sourceToSet = historyFrameSourcePrefix + def;
+                var func = function() {
+                    getHistoryFrame().src = sourceToSet;
+                    window.location.replace("#" + def);
+                    setInterval(checkForUrlChange, 50);
+                }
+                try {
+                    func();
+                } catch (e) {
+                    window.setTimeout(function() {
+                        func();
+                    }, 0);
+                }
+            }
+
+            if (browser.safari) {
+                currentHistoryLength = history.length;
+                if (historyHash.length == 0) {
+                    historyHash[currentHistoryLength] = def;
+                    var newloc = "#" + def;
+                    window.location.replace(newloc);
+                } else {
+                    //alert(historyHash[historyHash.length-1]);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+
+
+            if (browser.firefox || browser.opera) {
+                var reg = new RegExp("#" + def + "$");
+                if (window.location.toString().match(reg)) {} else {
+                    var newloc = "#" + def;
+                    window.location.replace(newloc);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+
+        },
+
+        /* Set the current browser URL; called from inside BrowserManager to propagate
+         * the application state out to the container.
+         */
+        setBrowserURL: function(flexAppUrl, objectId) {
+            if (browser.ie && typeof objectId != "undefined") {
+                currentObjectId = objectId;
+            }
+            //fromIframe = fromIframe || false;
+            //fromFlex = fromFlex || false;
+            //alert("setBrowserURL: " + flexAppUrl);
+            //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+            var pos = document.location.href.indexOf('#');
+            var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
+            var newUrl = baseUrl + '#' + flexAppUrl;
+
+            if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
+                currentHref = newUrl;
+                addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+                currentHistoryLength = history.length;
+            }
+        },
+
+        browserURLChange: function(flexAppUrl) {
+            var objectId = null;
+            if (browser.ie && currentObjectId != null) {
+                objectId = currentObjectId;
+            }
+
+            if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                var pl = getPlayers();
+                for (var i = 0; i < pl.length; i++) {
+                    try {
+                        pl[i].browserURLChange(flexAppUrl);
+                    } catch (e) {}
+                }
+            } else {
+                try {
+                    getPlayer(objectId).browserURLChange(flexAppUrl);
+                } catch (e) {}
+            }
+
+            currentObjectId = null;
+        },
+        getUserAgent: function() {
+            return navigator.userAgent;
+        },
+        getPlatform: function() {
+            return navigator.platform;
+        }
+
+    }
+
+})();
+
+// Initialization
+
+// Automated unit testing and other diagnostics
+
+function setURL(url) {
+    document.location.href = url;
+}
+
+function backButton() {
+    history.back();
+}
+
+function forwardButton() {
+    history.forward();
+}
+
+function goForwardOrBackInHistory(step) {
+    history.go(step);
+}
+
+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
+(function(i) {
+    var u = navigator.userAgent;
+    var e = /*@cc_on!@*/ false;
+    var st = setTimeout;
+    if (/webkit/i.test(u)) {
+        st(function() {
+            var dr = document.readyState;
+            if (dr == "loaded" || dr == "complete") {
+                i()
+            } else {
+                st(arguments.callee, 10);
+            }
+        }, 10);
+    } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || (/opera/i.test(u))) {
+        document.addEventListener("DOMContentLoaded", i, false);
+    } else if (e) {
+        (function() {
+            var t = document.createElement('doc:rdy');
+            try {
+                t.doScroll('left');
+                i();
+                t = null;
+            } catch (e) {
+                st(arguments.callee, 0);
+            }
+        })();
+    } else {
+        window.onload = i;
+    }
+})(function() {
+    BrowserHistory.initialize();
+});
\ No newline at end of file
diff --git a/src/main/webapp/js/jquery.ui.menubar.js b/src/main/webapp/js/jquery.ui.menubar.js
new file mode 100644
index 0000000..f241e5e
--- /dev/null
+++ b/src/main/webapp/js/jquery.ui.menubar.js
@@ -0,0 +1,317 @@
+/*
+ * jQuery UI Menubar @VERSION
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menubar
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *	jquery.ui.position.js
+ *	jquery.ui.menu.js
+ */
+(function( $ ) {
+
+// TODO when mixing clicking menus and keyboard navigation, focus handling is broken
+// there has to be just one item that has tabindex
+$.widget( "ui.menubar", {
+	version: "@VERSION",
+	options: {
+		autoExpand: false,
+		buttons: false,
+		items: "li",
+		menuElement: "ul",
+		menuIcon: false,
+		position: {
+			my: "left top",
+			at: "left bottom"
+		}
+	},
+	_create: function() {
+		var that = this;
+		this.menuItems = this.element.children( this.options.items );
+		this.items = this.menuItems.children( "button, a" );
+
+		this.menuItems
+			.addClass( "ui-menubar-item" )
+			.attr( "role", "presentation" );
+		// let only the first item receive focus
+		this.items.slice(1).attr( "tabIndex", -1 );
+
+		this.element
+			.addClass( "ui-menubar ui-widget-header ui-helper-clearfix" )
+			.attr( "role", "menubar" );
+		this._focusable( this.items );
+		this._hoverable( this.items );
+		this.items.siblings( this.options.menuElement )
+			.menu({
+				position: {
+					within: this.options.position.within
+				},
+				select: function( event, ui ) {
+					ui.item.parents( "ul.ui-menu:last" ).hide();
+					that._close();
+					// TODO what is this targetting? there's probably a better way to access it
+					$(event.target).prev().focus();
+					that._trigger( "select", event, ui );
+				},
+				menus: that.options.menuElement
+			})
+			.hide()
+			.attr({
+				"aria-hidden": "true",
+				"aria-expanded": "false"
+			})
+			.bind( "keydown.menubar", function( event ) {
+				var menu = $( this );
+				if ( menu.is( ":hidden" ) ) {
+					return;
+				}
+				switch ( event.keyCode ) {
+				case $.ui.keyCode.LEFT:
+					that.previous( event );
+					event.preventDefault();
+					break;
+				case $.ui.keyCode.RIGHT:
+					that.next( event );
+					event.preventDefault();
+					break;
+				}
+			});
+		this.items.each(function() {
+			var input = $(this),
+				// TODO menu var is only used on two places, doesn't quite justify the .each
+				menu = input.next( that.options.menuElement );
+
+			// might be a non-menu button
+			if ( menu.length ) {
+				input.bind( "click.menubar focus.menubar mouseenter.menubar", function( event ) {
+					// ignore triggered focus event
+					if ( event.type === "focus" && !event.originalEvent ) {
+						return;
+					}
+					event.preventDefault();
+					// TODO can we simplify or extractthis check? especially the last two expressions
+					// there's a similar active[0] == menu[0] check in _open
+					if ( event.type === "click" && menu.is( ":visible" ) && that.active && that.active[0] === menu[0] ) {
+						that._close();
+						return;
+					}
+					if ( ( that.open && event.type === "mouseenter" ) || event.type === "click" || that.options.autoExpand ) {
+						if( that.options.autoExpand ) {
+							clearTimeout( that.closeTimer );
+						}
+
+						that._open( event, menu );
+					}
+				})
+				.bind( "keydown", function( event ) {
+					switch ( event.keyCode ) {
+					case $.ui.keyCode.SPACE:
+					case $.ui.keyCode.UP:
+					case $.ui.keyCode.DOWN:
+						that._open( event, $( this ).next() );
+						event.preventDefault();
+						break;
+					case $.ui.keyCode.LEFT:
+						that.previous( event );
+						event.preventDefault();
+						break;
+					case $.ui.keyCode.RIGHT:
+						that.next( event );
+						event.preventDefault();
+						break;
+					}
+				})
+				.attr( "aria-haspopup", "true" );
+
+				// TODO review if these options (menuIcon and buttons) are a good choice, maybe they can be merged
+				if ( that.options.menuIcon ) {
+					input.addClass( "ui-state-default" ).append( "<span class='ui-button-icon-secondary ui-icon ui-icon-triangle-1-s'></span>" );
+					input.removeClass( "ui-button-text-only" ).addClass( "ui-button-text-icon-secondary" );
+				}
+			}
+
+			input
+				.addClass( "ui-button ui-widget ui-button-text-only ui-menubar-link" )
+				.attr( "role", "menuitem" )
+				.wrapInner( "<span class='ui-button-text'></span>" );
+
+			if ( that.options.buttons ) {
+				input.removeClass( "ui-menubar-link" ).addClass( "ui-state-default" );
+			}
+		});
+		that._on( {
+			keydown: function( event ) {
+				if ( event.keyCode === $.ui.keyCode.ESCAPE && that.active && that.active.menu( "collapse", event ) !== true ) {
+					var active = that.active;
+					that.active.blur();
+					that._close( event );
+					active.prev().focus();
+				}
+			},
+			focusin: function( event ) {
+				clearTimeout( that.closeTimer );
+			},
+			focusout: function( event ) {
+				that.closeTimer = setTimeout( function() {
+					that._close( event );
+				}, 150);
+			},
+			"mouseleave .ui-menubar-item": function( event ) {
+				if ( that.options.autoExpand ) {
+					that.closeTimer = setTimeout( function() {
+						that._close( event );
+					}, 150);
+				}
+			},
+			"mouseenter .ui-menubar-item": function( event ) {
+				clearTimeout( that.closeTimer );
+			}
+		});
+
+		// Keep track of open submenus
+		this.openSubmenus = 0;
+	},
+
+	_destroy : function() {
+		this.menuItems
+			.removeClass( "ui-menubar-item" )
+			.removeAttr( "role" );
+
+		this.element
+			.removeClass( "ui-menubar ui-widget-header ui-helper-clearfix" )
+			.removeAttr( "role" )
+			.unbind( ".menubar" );
+
+		this.items
+			.unbind( ".menubar" )
+			.removeClass( "ui-button ui-widget ui-button-text-only ui-menubar-link ui-state-default" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-haspopup" )
+			// TODO unwrap?
+			.children( "span.ui-button-text" ).each(function( i, e ) {
+				var item = $( this );
+				item.parent().html( item.html() );
+			})
+			.end()
+			.children( ".ui-icon" ).remove();
+
+		this.element.find( ":ui-menu" )
+			.menu( "destroy" )
+			.show()
+			.removeAttr( "aria-hidden" )
+			.removeAttr( "aria-expanded" )
+			.removeAttr( "tabindex" )
+			.unbind( ".menubar" );
+	},
+
+	_close: function() {
+		if ( !this.active || !this.active.length ) {
+			return;
+		}
+		this.active
+			.menu( "collapseAll" )
+			.hide()
+			.attr({
+				"aria-hidden": "true",
+				"aria-expanded": "false"
+			});
+		this.active
+			.prev()
+			.removeClass( "ui-state-active" )
+			.removeAttr( "tabIndex" );
+		this.active = null;
+		this.open = false;
+		this.openSubmenus = 0;
+	},
+
+	_open: function( event, menu ) {
+		// on a single-button menubar, ignore reopening the same menu
+		if ( this.active && this.active[0] === menu[0] ) {
+			return;
+		}
+		// TODO refactor, almost the same as _close above, but don't remove tabIndex
+		if ( this.active ) {
+			this.active
+				.menu( "collapseAll" )
+				.hide()
+				.attr({
+					"aria-hidden": "true",
+					"aria-expanded": "false"
+				});
+			this.active
+				.prev()
+				.removeClass( "ui-state-active" );
+		}
+		// set tabIndex -1 to have the button skipped on shift-tab when menu is open (it gets focus)
+		var button = menu.prev().addClass( "ui-state-active" ).attr( "tabIndex", -1 );
+		this.active = menu
+			.show()
+			.position( $.extend({
+				of: button
+			}, this.options.position ) )
+			.removeAttr( "aria-hidden" )
+			.attr( "aria-expanded", "true" )
+			.menu("focus", event, menu.children( ".ui-menu-item" ).first() )
+			// TODO need a comment here why both events are triggered
+			.focus()
+			.focusin();
+		this.open = true;
+	},
+
+	next: function( event ) {
+		if ( this.open && this.active.data( "menu" ).active.has( ".ui-menu" ).length ) {
+			// Track number of open submenus and prevent moving to next menubar item
+			this.openSubmenus++;
+			return;
+		}
+		this.openSubmenus = 0;
+		this._move( "next", "first", event );
+	},
+
+	previous: function( event ) {
+		if ( this.open && this.openSubmenus ) {
+			// Track number of open submenus and prevent moving to previous menubar item
+			this.openSubmenus--;
+			return;
+		}
+		this.openSubmenus = 0;
+		this._move( "prev", "last", event );
+	},
+
+	_move: function( direction, filter, event ) {
+		var next,
+			wrapItem;
+		if ( this.open ) {
+			next = this.active.closest( ".ui-menubar-item" )[ direction + "All" ]( this.options.items ).first().children( ".ui-menu" ).eq( 0 );
+			wrapItem = this.menuItems[ filter ]().children( ".ui-menu" ).eq( 0 );
+		} else {
+			if ( event ) {
+				next = $( event.target ).closest( ".ui-menubar-item" )[ direction + "All" ]( this.options.items ).children( ".ui-menubar-link" ).eq( 0 );
+				wrapItem = this.menuItems[ filter ]().children( ".ui-menubar-link" ).eq( 0 );
+			} else {
+				next = wrapItem = this.menuItems.children( "a" ).eq( 0 );
+			}
+		}
+
+		if ( next.length ) {
+			if ( this.open ) {
+				this._open( event, next );
+			} else {
+				next.removeAttr( "tabIndex")[0].focus();
+			}
+		} else {
+			if ( this.open ) {
+				this._open( event, wrapItem );
+			} else {
+				wrapItem.removeAttr( "tabIndex")[0].focus();
+			}
+		}
+	}
+});
+
+}( jQuery ));
diff --git a/src/main/webapp/js/openmeetings_functions.js b/src/main/webapp/js/openmeetings_functions.js
new file mode 100644
index 0000000..6330bf7
--- /dev/null
+++ b/src/main/webapp/js/openmeetings_functions.js
@@ -0,0 +1,64 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+*/
+/*
+ * Functions to be included in the HTML wrapper,
+ * see the templates dir (*.vm) for the include statements
+ *  
+ */ 
+
+function getBrowserInfo() {
+	//alert(navigator.userAgent);
+	document.getElementById("lzapp").getBrowserInfoCallback(navigator.userAgent);
+}
+
+function getBrowserLang() {
+	//alert(navigator.userAgent);
+	document.getElementById("lzapp").getBrowserLangCallback(navigator.language);
+}
+
+function redirectToUrl(url) {
+	//alert(navigator.userAgent);
+	window.location = url;
+	
+	document.getElementById("lzapp").redirectToUrlCallback("ok");
+}
+
+function loadingComplete() {
+	document.getElementById("swfloading").style.display = 'none';
+	var lzApp = document.getElementById("lzappContainer");
+	lzApp.style.width = '100%';
+	lzApp.style.height = '100%';
+}
+
+function getTimeZoneOffsetMinutes() {
+	var rightNow = new Date(), std_time_offset = -rightNow.getTimezoneOffset();
+	for (var i = 0; i < 12; ++i) {
+		var d = new Date(rightNow.getFullYear(), i, 1, 0, 0, 0, 0), offset = -d.getTimezoneOffset();
+		if (offset < std_time_offset) {
+			std_time_offset = offset;
+			break;
+		}
+	}
+    return std_time_offset;
+}
+
+function getTimeZoneOffset() {
+    document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetMinutes()/60);
+}
diff --git a/src/main/webapp/languages/countries.xml b/src/main/webapp/languages/countries.xml
new file mode 100644
index 0000000..5b3b393
--- /dev/null
+++ b/src/main/webapp/languages/countries.xml
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- 
+	This list is complete and up-to-date as of 18 February 2007. 
+	from United Nations
+	United Nations Statistics Division- Standard Country and Area Codes Classifications (M49)
+	http://unstats.un.org/unsd/methods/m49/m49alpha.htm
+	
+	28.07.2007 add Taiwan, Republic of China country code 157, short ROC
+	 -->
+<countries xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="countries.xsd">
+	<country code="004" name="Afghanistan" short="AFG" />
+	<country code="248" short="ALA" name="Åland Islands" />
+	<country code="008" short="ALB" name="Albania" />
+	<country code="012" short="DZA" name="Algeria" />
+	<country code="016" short="ASM" name="American Samoa"/>
+	<country code="020" short="AND" name="Andorra"/>
+	<country code="024" short="AGO" name="Angola"/>
+	<country code="660" short="AIA" name="Anguilla"/>
+	<country code="028" short="ATG" name="Antigua and Barbuda"/>
+	<country code="032" short="ARG" name="Argentina"/>
+	<country code="051" short="ARM" name="Armenia"/>
+	<country code="533" short="ABW" name="Aruba"/>
+	<country code="036" short="AUS" name="Australia"/>
+	<country code="040" short="AUT" name="Austria"/>
+	<country code="031" short="AZE" name="Azerbaijan"/>
+	<country code="044" short="BHS" name="Bahamas"/>
+	<country code="048" short="BHR" name="Bahrain"/>
+	<country code="050" short="BGD" name="Bangladesh"/>
+	<country code="052" short="BRB" name="Barbados"/>
+	<country code="112" short="BLR" name="Belarus"/>
+	<country code="056" short="BEL" name="Belgium"/>
+	<country code="084" short="BLZ" name="Belize"/>
+	<country code="204" short="BEN" name="Benin"/>
+	<country code="060" short="BMU" name="Bermuda"/>
+	<country code="064" short="BTN" name="Bhutan"/>
+	<country code="068" short="BOL" name="Bolivia"/>
+	<country code="070" short="BIH" name="Bosnia and Herzegovina"/>
+	<country code="072" short="BWA" name="Botswana"/>
+	<country code="076" short="BRA" name="Brazil"/>
+	<country code="092" short="VGB" name="British Virgin Islands"/>
+	<country code="096" short="BRN" name="Brunei Darussalam"/>
+	<country code="100" short="BGR" name="Bulgaria"/>
+	<country code="854" short="BFA" name="Burkina Faso"/>
+	<country code="108" short="BDI" name="Burundi"/>
+	<country code="116" short="KHM" name="Cambodia"/>
+	<country code="120" short="CMR" name="Cameroon"/>
+	<country code="124" short="CAN" name="Canada"/>
+	<country code="132" short="CPV" name="Cape Verde"/>
+	<country code="136" short="CYM" name="Cayman Islands"/>
+	<country code="140" short="CAF" name="Central African Republic"/>
+	<country code="148" short="TCD" name="Chad"/>
+	<country code="830" short="" name="Channel Islands"/>
+	<country code="152" short="CHL" name="Chile"/>
+	<country code="156" short="CHN" name="China"/>
+	<country code="344" short="HKG" name="Hong Kong Special Administrative Region of China"/>
+	<country code="446" short="MAC" name="Macao Special Administrative Region of China"/>
+	<country code="170" short="COL" name="Colombia"/>
+	<country code="174" short="COM" name="Comoros"/>
+	<country code="178" short="COG" name="Congo"/>
+	<country code="184" short="COK" name="Cook Islands"/>
+	<country code="188" short="CRI" name="Costa Rica"/>
+	<country code="384" short="CIV" name="Côte d'Ivoire"/>
+	<country code="191" short="HRV" name="Croatia"/>
+	<country code="192" short="CUB" name="Cuba"/>
+	<country code="196" short="CYP" name="Cyprus"/>
+	<country code="203" short="CZE" name="Czech Republic"/>
+	<country code="408" short="PRK" name="Democratic People's Republic of Korea"/>
+	<country code="180" short="COD" name="Democratic Republic of the Congo"/>
+	<country code="208" short="DNK" name="Denmark"/>
+	<country code="262" short="DJI" name="Djibouti"/>
+	<country code="212" short="DMA" name="Dominica"/>
+	<country code="214" short="DOM" name="Dominican Republic"/>
+	<country code="218" short="ECU" name="Ecuador"/>
+	<country code="818" short="EGY" name="Egypt"/>
+	<country code="222" short="SLV" name="El Salvador"/>
+	<country code="226" short="GNQ" name="Equatorial Guinea"/>
+	<country code="232" short="ERI" name="Eritrea"/>
+	<country code="233" short="EST" name="Estonia"/>
+	<country code="231" short="ETH" name="Ethiopia"/>
+	<country code="234" short="FRO" name="Faeroe Islands"/>
+	<country code="238" short="FLK" name="Falkland Islands (Malvinas)"/>
+	<country code="242" short="FJI" name="Fiji"/>
+	<country code="246" short="FIN" name="Finland"/>
+	<country code="250" short="FRA" name="France"/>
+	<country code="254" short="GUF" name="French Guiana"/>
+	<country code="258" short="PYF" name="French Polynesia"/>
+	<country code="266" short="GAB" name="Gabon"/>
+	<country code="270" short="GMB" name="Gambia"/>
+	<country code="268" short="GEO" name="Georgia"/>
+	<country code="276" short="DEU" name="Germany"/>
+	<country code="288" short="GHA" name="Ghana"/>
+	<country code="292" short="GIB" name="Gibraltar"/>
+	<country code="300" short="GRC" name="Greece"/>
+	<country code="304" short="GRL" name="Greenland"/>
+	<country code="308" short="GRD" name="Grenada"/>
+	<country code="312" short="GLP" name="Guadeloupe"/>
+	<country code="316" short="GUM" name="Guam"/>
+	<country code="320" short="GTM" name="Guatemala"/>
+	<country code="831" short="CGY" name="Guernsey"/>
+	<country code="324" short="GIN" name="Guinea"/>
+	<country code="624" short="GNB" name="Guinea-Bissau"/>
+	<country code="328" short="GUY" name="Guyana"/>
+	<country code="332" short="HTI" name="Haiti"/>
+	<country code="336" short="VAT" name="Holy See"/>
+	<country code="340" short="HND" name="Honduras"/>
+	<country code="348" short="HUN" name="Hungary"/>
+	<country code="352" short="ISL" name="Iceland"/>
+	<country code="356" short="IND" name="India"/>
+	<country code="360" short="IDN" name="Indonesia"/>
+	<country code="364" short="IRN" name="Iran, Islamic Republic of"/>
+	<country code="368" short="IRQ" name="Iraq"/>
+	<country code="372" short="IRL" name="Ireland"/>
+	<country code="833" short="IMN" name="Isle of Man"/>
+	<country code="376" short="ISR" name="Israel"/>
+	<country code="380" short="ITA" name="Italy"/>
+	<country code="388" short="JAM" name="Jamaica"/>
+	<country code="392" short="JPN" name="Japan"/>
+	<country code="832" short="JEY" name="Jersey"/>
+	<country code="400" short="JOR" name="Jordan"/>
+	<country code="398" short="KAZ" name="Kazakhstan"/>
+	<country code="404" short="KEN" name="Kenya"/>
+	<country code="296" short="KIR" name="Kiribati"/>
+	<country code="414" short="KWT" name="Kuwait"/>
+	<country code="417" short="KGZ" name="Kyrgyzstan"/>
+	<country code="418" short="LAO" name="Lao People's Democratic Republic"/>
+	<country code="428" short="LVA" name="Latvia"/>
+	<country code="422" short="LBN" name="Lebanon"/>
+	<country code="426" short="LSO" name="Lesotho"/>
+	<country code="430" short="LBR" name="Liberia"/>
+	<country code="434" short="LBY" name="Libyan Arab Jamahiriya"/>
+	<country code="438" short="LIE" name="Liechtenstein"/>
+	<country code="440" short="LTU" name="Lithuania"/>
+	<country code="442" short="LUX" name="Luxembourg"/>
+	<country code="450" short="MDG" name="Madagascar"/>
+	<country code="454" short="MWI" name="Malawi"/>
+	<country code="458" short="MYS" name="Malaysia"/>
+	<country code="462" short="MDV" name="Maldives"/>
+	<country code="466" short="MLI" name="Mali"/>
+	<country code="470" short="MLT" name="Malta"/>
+	<country code="584" short="MHL" name="Marshall Islands"/>
+	<country code="474" short="MTQ" name="Martinique"/>
+	<country code="478" short="MRT" name="Mauritania"/>
+	<country code="480" short="MUS" name="Mauritius"/>
+	<country code="175" short="MYT" name="Mayotte"/>
+	<country code="484" short="MEX" name="Mexico"/>
+	<country code="583" short="FSM" name="Micronesia, Federated States of"/>
+	<country code="492" short="MCO" name="Monaco"/>
+	<country code="496" short="MNG" name="Mongolia"/>
+	<country code="499" short="MNE" name="Montenegro"/>
+	<country code="500" short="MSR" name="Montserrat"/>
+	<country code="504" short="MAR" name="Morocco"/>
+	<country code="508" short="MOZ" name="Mozambique"/>
+	<country code="104" short="MMR" name="Myanmar"/>
+	<country code="516" short="NAM" name="Namibia"/>
+	<country code="520" short="NRU" name="Nauru"/>
+	<country code="524" short="NPL" name="Nepal"/>
+	<country code="528" short="NLD" name="Netherlands"/>
+	<country code="530" short="ANT" name="Netherlands Antilles"/>
+	<country code="540" short="NCL" name="New Caledonia"/>
+	<country code="554" short="NZL" name="New Zealand"/>
+	<country code="558" short="NIC" name="Nicaragua"/>
+	<country code="562" short="NER" name="Niger"/>
+	<country code="566" short="NGA" name="Nigeria"/>
+	<country code="570" short="NIU" name="Niue"/>
+	<country code="574" short="NFK" name="Norfolk Island"/>
+	<country code="580" short="MNP" name="Northern Mariana Islands"/>
+	<country code="578" short="NOR" name="Norway"/>
+	<country code="275" short="PSE" name="Occupied Palestinian Territory"/>
+	<country code="512" short="OMN" name="Oman"/>
+	<country code="586" short="PAK" name="Pakistan"/>
+	<country code="585" short="PLW" name="Palau"/>
+	<country code="591" short="PAN" name="Panama"/>
+	<country code="598" short="PNG" name="Papua New Guinea"/>
+	<country code="600" short="PRY" name="Paraguay"/>
+	<country code="604" short="PER" name="Peru"/>
+	<country code="608" short="PHL" name="Philippines"/>
+	<country code="612" short="PCN" name="Pitcairn"/>
+	<country code="616" short="POL" name="Poland"/>
+	<country code="620" short="PRT" name="Portugal"/>
+	<country code="630" short="PRI" name="Puerto Rico"/>
+	<country code="634" short="QAT" name="Qatar"/>
+	<country code="410" short="KOR" name="Republic of Korea"/>
+	<country code="498" short="MDA" name="Republic of Moldova"/>
+	<country code="638" short="REU" name="Réunion"/>
+	<country code="642" short="ROU" name="Romania"/>
+	<country code="643" short="RUS" name="Russian Federation"/>
+	<country code="646" short="RWA" name="Rwanda"/>
+	<country code="654" short="SHN" name="Saint Helena"/>
+	<country code="659" short="KNA" name="Saint Kitts and Nevis"/>
+	<country code="662" short="LCA" name="Saint Lucia"/>
+	<country code="666" short="SPM" name="Saint Pierre and Miquelon"/>
+	<country code="670" short="VCT" name="Saint Vincent and the Grenadines"/>
+	<country code="882" short="WSM" name="Samoa"/>
+	<country code="674" short="SMR" name="San Marino"/>
+	<country code="678" short="STP" name="Sao Tome and Principe"/>
+	<country code="682" short="SAU" name="Saudi Arabia"/>
+	<country code="686" short="SEN" name="Senegal"/>
+	<country code="688" short="SRB" name="Serbia"/>
+	<country code="690" short="SYC" name="Seychelles"/>
+	<country code="694" short="SLE" name="Sierra Leone"/>
+	<country code="702" short="SGP" name="Singapore"/>
+	<country code="703" short="SVK" name="Slovakia"/>
+	<country code="705" short="SVN" name="Slovenia"/>
+	<country code="090" short="SLB" name="Solomon Islands"/>
+	<country code="706" short="SOM" name="Somalia"/>
+	<country code="710" short="ZAF" name="South Africa"/>
+	<country code="724" short="ESP" name="Spain"/>
+	<country code="144" short="LKA" name="Sri Lanka"/>
+	<country code="736" short="SDN" name="Sudan"/>
+	<country code="740" short="SUR" name="Suriname"/>
+	<country code="744" short="SJM" name="Svalbard and Jan Mayen Islands"/>
+	<country code="748" short="SWZ" name="Swaziland"/>
+	<country code="752" short="SWE" name="Sweden"/>
+	<country code="756" short="CHE" name="Switzerland"/>
+	<country code="760" short="SYR" name="Syrian Arab Republic"/>
+	<country code="157" short="ROC" name="Taiwan, Republic of China"/>
+	<country code="762" short="TJK" name="Tajikistan"/>
+	<country code="764" short="THA" name="Thailand"/>
+	<country code="807" short="MKD" name="The former Yugoslav Republic of Macedonia"/>
+	<country code="626" short="TLS" name="Timor-Leste"/>
+	<country code="768" short="TGO" name="Togo"/>
+	<country code="772" short="TKL" name="Tokelau"/>
+	<country code="776" short="TON" name="Tonga"/>
+	<country code="780" short="TTO" name="Trinidad and Tobago"/>
+	<country code="788" short="TUN" name="Tunisia"/>
+	<country code="792" short="TUR" name="Turkey"/>
+	<country code="795" short="TKM" name="Turkmenistan"/>
+	<country code="796" short="TCA" name="Turks and Caicos Islands"/>
+	<country code="798" short="TUV" name="Tuvalu"/>
+	<country code="800" short="UGA" name="Uganda"/>
+	<country code="804" short="UKR" name="Ukraine"/>
+	<country code="784" short="ARE" name="United Arab Emirates"/>
+	<country code="826" short="GBR" name="United Kingdom of Great Britain and Northern Ireland"/>
+	<country code="834" short="TZA" name="United Republic of Tanzania"/>
+	<country code="840" short="USA" name="United States of America"/>
+	<country code="850" short="VIR" name="United States Virgin Islands"/>
+	<country code="858" short="URY" name="Uruguay"/>
+	<country code="860" short="UZB" name="Uzbekistan"/>
+	<country code="548" short="VUT" name="Vanuatu"/>
+	<country code="862" short="VEN" name="Venezuela (Bolivarian Republic of)"/>
+	<country code="704" short="VNM" name="Viet Nam"/>
+	<country code="876" short="WLF" name="Wallis and Futuna Islands"/>
+	<country code="732" short="ESH" name="Western Sahara"/>
+	<country code="887" short="YEM" name="Yemen"/>
+	<country code="894" short="ZMB" name="Zambia"/>
+	<country code="716" short="ZWE" name="Zimbabwe"/>
+</countries>
diff --git a/src/main/webapp/languages/countries.xsd b/src/main/webapp/languages/countries.xsd
new file mode 100644
index 0000000..98b3017
--- /dev/null
+++ b/src/main/webapp/languages/countries.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="countries">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="country"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="country">
+    <xs:complexType>
+      <xs:attribute name="code" use="required" type="xs:integer"/>
+      <xs:attribute name="name" use="required"/>
+      <xs:attribute name="short" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/main/webapp/languages/errorvalues.xml b/src/main/webapp/languages/errorvalues.xml
new file mode 100644
index 0000000..2db93d2
--- /dev/null
+++ b/src/main/webapp/languages/errorvalues.xml
@@ -0,0 +1,471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="errorvalues.xsd">
+    <row>
+      <field name="errorvalues_id">1</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">334</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">2</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">319</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">3</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">320</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">4</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">321</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">5</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">324</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">6</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">330</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">7</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">331</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">8</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">332</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">9</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">318</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">10</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">335</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">11</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">336</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">12</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">337</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">13</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">103</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">14</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">338</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">15</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">105</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">16</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">107</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">17</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">106</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">18</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">236</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">19</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">339</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">20</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">340</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">21</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">341</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">22</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">342</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">23</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">343</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">24</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">345</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">25</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">346</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">26</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">347</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">27</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">358</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">28</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">357</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">29</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">358</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">30</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">403</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">31</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">533</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">32</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">534</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">33</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">535</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">34</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">538</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">35</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">276</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">36</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">664</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">37</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">665</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">38</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">663</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">39</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">666</field>
+      <field name="errortype_id">1</field>
+    </row>	
+    <row>
+      <field name="errorvalues_id">40</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">674</field>
+      <field name="errortype_id">2</field>
+    </row>  
+    <row>
+      <field name="errorvalues_id">41</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">673</field>
+      <field name="errortype_id">1</field>
+    </row>  	
+    <row>
+      <field name="errorvalues_id">42</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">787</field>
+      <field name="errortype_id">1</field>
+    </row>  
+    <row>
+      <field name="errorvalues_id">43</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">920</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">44</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1000</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">45</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1195</field>
+      <field name="errortype_id">1</field>
+    </row> 
+    <row>
+      <field name="errorvalues_id">46</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1226</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">47</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1227</field>
+      <field name="errortype_id">1</field>
+    </row>		
+    <row>
+      <field name="errorvalues_id">48</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1228</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">49</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1231</field>
+      <field name="errortype_id">1</field>
+    </row>	
+    <row>
+      <field name="errorvalues_id">50</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1271</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">51</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1309</field>
+      <field name="errortype_id">1</field>
+    </row>   	
+    <row>
+      <field name="errorvalues_id">52</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1310</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">53</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1416</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">54</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1431</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">55</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1540</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">56</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1544</field>
+      <field name="errortype_id">1</field>
+    </row>
+</ROOT>
diff --git a/src/main/webapp/languages/errorvalues.xsd b/src/main/webapp/languages/errorvalues.xsd
new file mode 100644
index 0000000..66f06d1
--- /dev/null
+++ b/src/main/webapp/languages/errorvalues.xsd
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="ROOT">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="row"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="row">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="field"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="field">
+    <xs:complexType mixed="true">
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/main/webapp/languages/languages.xml b/src/main/webapp/languages/languages.xml
new file mode 100644
index 0000000..88f7380
--- /dev/null
+++ b/src/main/webapp/languages/languages.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="languages.xsd">
+	<lang id="1" code="en">english</lang>
+	<lang id="2" code="de">deutsch</lang>
+	<lang id="3" code="de-StudIP">deutsch (studIP)</lang>
+	<lang id="4" code="fr">french</lang>
+	<lang id="5" code="it">italian</lang>
+	<lang id="6" code="pt">portugues</lang>
+	<lang id="7" code="pt-br">portugues brazil</lang>
+	<lang id="8" code="es">spanish</lang>
+	<lang id="9" code="ru">russian</lang>
+	<lang id="10" code="sv">swedish</lang>
+	<lang id="11" code="zh-CN">chinese simplified</lang>
+	<lang id="12" code="zh-TW">chinese traditional</lang>
+	<lang id="13" code="ko">korean</lang>
+	<lang id="14" code="ar">arabic</lang>
+	<lang id="15" code="ja">japanese</lang>
+	<lang id="16" code="id">indonesian</lang>
+	<lang id="17" code="hu">hungarian</lang>
+	<lang id="18" code="tr">turkish</lang>
+	<lang id="19" code="uk">ukrainian</lang>
+	<lang id="20" code="th">thai</lang>
+	<lang id="21" code="fa">persian</lang>
+	<lang id="22" code="cs">czech</lang>
+	<lang id="23" code="gl">galician</lang>
+	<lang id="24" code="fi">finnish</lang>
+	<lang id="25" code="pl">polish</lang>
+	<lang id="26" code="el">greek</lang>
+	<lang id="27" code="nl">dutch</lang>
+	<lang id="28" code="he">hebrew</lang>
+	<lang id="29" code="ca">catalan</lang>
+	<lang id="30" code="bg">bulgarian</lang>
+	<lang id="31" code="da">danish</lang>
+	<lang id="32" code="sk">slovak</lang>
+</language>
diff --git a/src/main/webapp/languages/timezones.xml b/src/main/webapp/languages/timezones.xml
new file mode 100644
index 0000000..76302fc
--- /dev/null
+++ b/src/main/webapp/languages/timezones.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<timezones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="timezones.xsd">
+	<!-- 
+		This file is loaded during installation to the database table "om_timezones" of OpenMeetings. 
+		Changes at runtime to this file have no effect to OpenMeetings.
+	
+		Attributes:
+	
+		1) orderId
+		The orderId is just an indicator for the position in the drow down box inside 
+		OpenMeetings UI, there can be duplicates
+		However the order in the XML should be correct cause the Web-installer/CLI-Installer
+		will display the timezones exactly in the order of the XML.
+		
+		2) name
+		A common name in short
+		
+		3) label
+		Long name, displayed in UI
+		
+		4) iCal
+		this is the actual name, OpenMeetings will use to match again Java's timezones 
+		(http://docs.oracle.com/javase/6/docs/api/java/util/TimeZone.html)
+		
+		to get all available id that are available in your Java JRE see:
+		http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/timezone/TestGetIds.java
+		
+		For updating the JRE runtime with different tz-file, see:		
+		http://www.oracle.com/technetwork/java/javase/timezones-137583.html
+	 -->
+    <timezone orderId="0" name="Etc/GMT+13" label="Samoa" iCal="Pacific/Apia" />
+	<timezone orderId="1" name="Etc/GMT+12 (New Zealand)" label="New Zealand" iCal="Pacific/Auckland" />
+    <timezone orderId="1" name="Etc/GMT+12" label="Kiribati (Gilbert Islands), Fiji, Russia (Kamchatka Krai)" iCal="Pacific/Fiji" />
+    <timezone orderId="2" name="Etc/GMT+11" label="Vladivostok, Kamchatka, Solomon Islands, New Caledonia" iCal="Asia/Vladivostok" />
+    <timezone orderId="3" name="Etc/GMT+10 (Australia/NSW)" label="Australia (NSW,Sydney,Tasmania), Yakutsk" iCal="Australia/Sydney" />
+    <timezone orderId="3" name="Etc/GMT+10 (Australia/Queensland)" label="Russia (Zabaykalsky Krai), Papua New Guinea, Australia (Queensland)" iCal="Australia/Queensland" />
+    <timezone orderId="3" name="Etc/GMT+10" label="Lord Howe Island - Australia GMT+10:30" iCal="Australia/Lord_Howe" />
+    <timezone orderId="4" name="Etc/GMT+9 (Japan)" label="Japan/Korea Standard Time, Irkutsk, East Timor" iCal="Asia/Tokyo" />
+    <timezone orderId="4" name="Etc/GMT+9 (Australia-North)" label="Australia (Nothern Territory,Darwin) GMT+9:30" iCal="Australia/Darwin" />
+    <timezone orderId="4" name="Etc/GMT+9 (Australia-South)" label="Australia (Southern Territory,Adelaide) GMT+9:30" iCal="Australia/Adelaide" />
+    <timezone orderId="5" name="Etc/GMT+8" label="China Standard Time, Krasnoyarsk, Philippines, Singapore" iCal="Asia/Singapore" />
+    <timezone orderId="6" name="Etc/GMT+7" label="Novosibirsk, Indochina Time, Thailand, Vietnam, Jakarta" iCal="Asia/Jakarta" />
+    <timezone orderId="7" name="Etc/GMT+6" label="Yekaterinburg, Almaty, Bangladesh" iCal="Asia/Yekaterinburg" />
+    <timezone orderId="8" name="IST" label="Indian Standard Time GMT+5.30" iCal="Asia/Kolkata" />
+    <timezone orderId="9" name="Etc/GMT+5" label="Uzbekistan, Pakistan, Maldives" iCal="Asia/Karachi" />
+    <timezone orderId="10" name="Asia/Kabul" label="Kabul GMT+4.30 " iCal="Asia/Kabul" />
+    <timezone orderId="11" name="Etc/GMT+4" label="Moscow, Saint Petersburg, Georgia, Armenia, Azerbaijan, United Arab Emirates" iCal="Europe/Moscow" />
+    <timezone orderId="12" name="Asia/Tehran" label="Tehran GMT+3.30" iCal="Asia/Tehran" />
+    <timezone orderId="13" name="Etc/GMT+3" label="Kaliningrad, Minsk, Iraq, Saudi Arabia" iCal="Europe/Kaliningrad" />
+    <timezone orderId="14" name="Etc/GMT+2" label="Finland, Lithuania, Belarus, Ukraine, Romania, Bulgaria" iCal="Europe/Helsinki" />
+    <timezone orderId="14" name="Etc/GMT+2" label="Libya, Egypt, South Africa, Zimbabwe" iCal="Africa/Cairo" />
+    <timezone orderId="15" name="Etc/GMT+1" label="France, Germany, Spain, Italy" iCal="Europe/Berlin" />
+    <timezone orderId="15" name="Etc/GMT+1 (North Africa)" label="Angola, Cameroon, Nigeria, Tunisia" iCal="Africa/Tunis" />
+    <timezone orderId="16" name="Etc/GMT" label="Iceland, United Kingdom, Ireland" iCal="Europe/London" />
+    <timezone orderId="16" name="Etc/GMT (North Africa)" label="Côte d'Ivoire, Faroe Islands, Ghana, Iceland, Senegal" iCal="Africa/Dakar" />
+    <timezone orderId="17" name="Etc/GMT-1" label="Azores, Cape Verde" iCal="Atlantic/Cape_Verde" />
+    <timezone orderId="18" name="Etc/GMT-2" label="Fernando de Noronha" iCal="America/Noronha" />
+    <timezone orderId="19" name="Etc/GMT-3 (Brazil)" label="Brazil (Brasília, Rio de Janeiro, São Paulo), most of Greenland, Uruguay" iCal="America/Sao_Paulo" />
+    <timezone orderId="19" name="Etc/GMT-3" label="Argentina, Paraguay" iCal="America/Buenos_Aires" />
+    <timezone orderId="19" name="Etc/GMT-3:30" label="Canada GMT+3:30" iCal="CNT" />
+    <timezone orderId="20" name="Etc/GMT-4" label="Nova Scotia, Dominican Republic, Puerto Rico, Santiago" iCal="America/Santiago" />
+    <timezone orderId="20" name="Etc/GMT-4:30" label="Venezuela GMT+4:30" iCal="America/Caracas" />
+    <timezone orderId="21" name="Etc/GMT-5 (New York)" label="Ottawa, Toronto, Montreal, Boston, New York" iCal="America/New_York" />
+    <timezone orderId="21" name="Etc/GMT-5" label="Colombia, Cuba, Ecuador, Haiti, Jamaica, Panama, Peru" iCal="America/Jamaica" />
+    <timezone orderId="22" name="Etc/GMT-5 (Panama)" label="Panama Port-au-Prince" iCal="America/Panama" />
+    <timezone orderId="23" name="Etc/GMT-6 (Chicago)" label="Chicago, Dallas" iCal="America/Chicago" />
+    <timezone orderId="24" name="Etc/GMT-6" label="Costa Rica , El Salvador, Guatemala, Honduras" iCal="America/El_Salvador" />
+    <timezone orderId="24" name="Etc/GMT-6 (Illinois)" label="Canada (Manitoba), United States (Illinois, most of Texas)" iCal="America/Chicago" />
+    <timezone orderId="25" name="Etc/GMT-7 (Phoenix)" label="Alberta, Colorado, Phoenix" iCal="America/Phoenix" />
+    <timezone orderId="26" name="Etc/GMT-7 (Colorado)" label="Canada (Alberta), Mexico (Chihuahua), USA (Colorado)" iCal="America/Denver" />
+    <timezone orderId="26" name="Etc/GMT-7" label="Canada (northeastern British Columbia), Mexico (Sonora), USA (Arizona)" iCal="America/Phoenix" />
+    <timezone orderId="27" name="Etc/GMT-8" label="Vancouver, Portland, Las Vegas, California" iCal="America/Los_Angeles" />
+    <timezone orderId="28" name="Etc/GMT-9" label="Anchorage, Fairbanks, Juneau" iCal="America/Juneau" />
+    <timezone orderId="28" name="Etc/GMT-9 (Alaska)" label="United States (most of Alaska)" iCal="US/Alaska" />
+    <timezone orderId="29" name="Etc/GMT-10" label="Hawaii" iCal="Pacific/Honolulu" />
+    <timezone orderId="30" name="Etc/GMT-11" label="Samoa" iCal="Pacific/Apia" />    
+</timezones>
diff --git a/src/main/webapp/languages/timezones.xsd b/src/main/webapp/languages/timezones.xsd
new file mode 100644
index 0000000..d693ab3
--- /dev/null
+++ b/src/main/webapp/languages/timezones.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="timezones">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="timezone"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="timezone">
+    <xs:complexType>
+      <xs:attribute name="iCal" use="required"/>
+      <xs:attribute name="label" use="required"/>
+      <xs:attribute name="name" use="required"/>
+      <xs:attribute name="orderId" use="required" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/main/webapp/public/cliparts/ambulance.png b/src/main/webapp/public/cliparts/ambulance.png
new file mode 100644
index 0000000..c61cc33
--- /dev/null
+++ b/src/main/webapp/public/cliparts/ambulance.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/bow.png b/src/main/webapp/public/cliparts/bow.png
new file mode 100644
index 0000000..43cc3f5
--- /dev/null
+++ b/src/main/webapp/public/cliparts/bow.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/community.png b/src/main/webapp/public/cliparts/community.png
new file mode 100644
index 0000000..d56e169
--- /dev/null
+++ b/src/main/webapp/public/cliparts/community.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/help.png b/src/main/webapp/public/cliparts/help.png
new file mode 100644
index 0000000..6b7db6a
--- /dev/null
+++ b/src/main/webapp/public/cliparts/help.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/home.png b/src/main/webapp/public/cliparts/home.png
new file mode 100644
index 0000000..149583c
--- /dev/null
+++ b/src/main/webapp/public/cliparts/home.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/idea.png b/src/main/webapp/public/cliparts/idea.png
new file mode 100644
index 0000000..cc2a3c7
--- /dev/null
+++ b/src/main/webapp/public/cliparts/idea.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/swim.png b/src/main/webapp/public/cliparts/swim.png
new file mode 100644
index 0000000..fbb6f25
--- /dev/null
+++ b/src/main/webapp/public/cliparts/swim.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/ambulance.png b/src/main/webapp/public/cliparts/thumb/ambulance.png
new file mode 100644
index 0000000..c61cc33
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/ambulance.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/bow.png b/src/main/webapp/public/cliparts/thumb/bow.png
new file mode 100644
index 0000000..43cc3f5
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/bow.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/community.png b/src/main/webapp/public/cliparts/thumb/community.png
new file mode 100644
index 0000000..d56e169
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/community.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/help.png b/src/main/webapp/public/cliparts/thumb/help.png
new file mode 100644
index 0000000..6b7db6a
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/help.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/home.png b/src/main/webapp/public/cliparts/thumb/home.png
new file mode 100644
index 0000000..149583c
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/home.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/idea.png b/src/main/webapp/public/cliparts/thumb/idea.png
new file mode 100644
index 0000000..cc2a3c7
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/idea.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/swim.png b/src/main/webapp/public/cliparts/thumb/swim.png
new file mode 100644
index 0000000..fbb6f25
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/swim.png
Binary files differ
diff --git a/src/main/webapp/public/config.xml b/src/main/webapp/public/config.xml
new file mode 100644
index 0000000..8fcae54
--- /dev/null
+++ b/src/main/webapp/public/config.xml
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<config 
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="config.xsd">
+
+<!-- URL/IP to use for the Server for RTMP and RTMPT traffic.
+    If this value is empty it will try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from
+    
+    Can be either and IP or a domain name. 
+    For example: 
+    <rtmphostlocal>192.168.254.182</rtmphostlocal>
+    or
+    <rtmphostlocal>mysubdomain.streaming.to</rtmphostlocal>
+    -->
+<rtmphostlocal></rtmphostlocal>
+
+<!-- URL/IP to use for the Server for HTTP and HTTPS traffic.
+    If this value is empty it will use the rtmphostlocal 
+    variable (and in that way try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from)
+    -->
+<httphostlocal></httphostlocal>
+
+<!--  
+Port to use for the Server
+To this port the default server lookup is done
+
+You can find all this configuration in your red5-Config in: $RED5_HOME/conf/red5.properties
+ -->
+<rtmpport>1935</rtmpport>
+
+<rtmpsslport>8443</rtmpsslport>
+<!--
+Wether it should try to connect to rtmps first or not
+Valid values: yes / no
+
+NOTE: The OSx and Linux Flash Player are NOT able to connect via rtmps
+The support for Windows is experimental
+ -->
+<useSSL>no</useSSL>
+
+<!-- 
+Port to use for the Server
+This port is used to connect to the http-servlet
+of the red5-servlet
+ -->
+<red5httpport>5080</red5httpport>
+
+<!--
+    The protocol to use for the http connections
+    for example upload/download of files 
+ -->
+<protocol>http</protocol>
+
+<!--
+    The setting for the NetConnection
+    default settings is "none"
+    set to value "best" if you are trying to use rtmp over native SSL
+    see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetConnection.html#proxyType
+ -->
+<proxyType>none</proxyType>
+	
+<!--
+    Name of the Application
+    this is the Top-Icon Name of the Application
+ -->    
+<currentappname>Apache OpenMeetings</currentappname>    
+    
+<!-- 
+    URL to the Home of the Application
+    this is the URL which is used if you click on the Top-icon
+-->    
+<currentappnameurl>http://openmeetings.apache.org</currentappnameurl>        
+
+<!--
+    URL to Bugs/Support
+    this is the URL which is used if you click on *report a bug*
+ -->
+<currentappnamebugurl>https://issues.apache.org/jira/browse/OPENMEETINGS</currentappnamebugurl>   
+        
+<!--
+    Video-Settings
+    
+    Number that specifies the amount of sound required to activate the microphone 
+	Acceptable values from 0 to 100.	
+    this value is used in Audio_Streaming, at which the *activity-meter* will
+    send a notification for all connected hosts of a conference
+    the result of this notification is that you see the green-light highlighted if
+    a remote user is speaking
+ -->
+<loudnessAcitviation>0</loudnessAcitviation>  
+    
+<!--
+    OpenMeetings-Webapp Name
+    This is the name of the WebApp the Client will try to connect
+    in former versions (till 0.5 Beta7) the name was xmlcrm
+    the same param kann be find in the webapp in the Red5-Webapp
+    red5-web.properties
+    web.xml
+ -->
+<webAppRootKey>openmeetings</webAppRootKey>  
+
+<!--
+    We need this additional ROOT-Key as we have to deploy the application 
+    as Global Contex Root. 
+    
+    If the rtmpt issues is solved sothat several Webapps can use different RTMPT connection
+    we might change this value again to its origin / webapp-context
+
+ -->
+<httpRootKey>/openmeetings/</httpRootKey>  
+    
+<!--
+    Window-Effect Settings
+    showWindowEffect-values:
+    y = yes
+    n = no
+    showWindowEffectOpacity-values
+    between 0 and 1
+ -->
+<showWindowEffect>n</showWindowEffect> 
+
+<!--
+    Show the recorder buttons in the Conference Rooms
+    visible = yes
+    hidden = no
+ -->	
+<showRecording>hidden</showRecording>
+
+<!--
+    
+	To enable the modern whiteboard Panel you need to switch this to y
+    old menu bar is not active any more
+    
+<showmodernWhiteBoard>y</showmodernWhiteBoard>    
+ -->    
+	
+<!--
+	First day in the Week used by the Calendar
+	0 means Sunday
+	1 means Monday
+	this is the way how the calendar UI shows a week
+-->
+<firstdayinweek>0</firstdayinweek>	
+    
+    
+<!--
+    #############################################################################
+    Audio and Video Settings
+    Before you change settings here,
+    you should first Play and learn how the Settings work in the Documentation:
+    http://code.google.com/p/openmeetings/wiki/AudioVideoTestingApplication
+    #############################################################################
+ -->
+ 
+<!-- Camera Settings for codecType
+
+    codecType possible values:
+    h263
+    h264
+    If you want to use red5sip, set value to "h264"
+ -->
+<codecType>h263</codecType>
+ 
+<!-- Camera Settings for the FramesPerSecond
+    
+    fps:Number [optional] - The requested rate at which the camera should capture 
+    data, in frames per second. The default value is 15.
+ -->    
+<framesPerSecond>30</framesPerSecond>
+    
+    
+<!-- Camera Settings for the Bandwidth:
+    
+    bandwidth:Number [optional] - An integer that specifies the maximum amount 
+    of bandwidth that the current outgoing video feed can use, in bytes per second. 
+    To specify that Flash video can use as much bandwidth as needed to maintain 
+    the value of frameQuality, pass 0 for bandwidth. The default value is 16384.
+ -->
+<!-- These are the settings for the Quality-Modus *normal*
+    The Quality-Modus can be chosen in the Login-Box --> 
+<bandwidthNeededNormal>16384</bandwidthNeededNormal>    
+<!-- These are the settings for the Quality-Modus *best* -->    
+<bandwidthNeededBest>0</bandwidthNeededBest>
+    
+    
+<!-- Camera Settings for the Quality
+    
+    quality:Number [optional] - An integer that specifies the required level of 
+    picture quality, as determined by the amount of compression being applied to 
+    each video frame. Acceptable values range from 1 (lowest quality, maximum 
+    compression) to 100 (highest quality, no compression). To specify that picture 
+    quality can vary as needed to avoid exceeding bandwidth, pass 0 for quality. 
+    The default value is 0.
+ --> 
+<!-- These are the settings for the Quality-Modus *normal* -->  
+<camQualityNormal>85</camQualityNormal>     
+<!-- These are the settings for the Quality-Modus *best* -->       
+<camQualityBest>90</camQualityBest> 
+    
+    
+<!-- Microphone Settings for the Rate:
+    
+    rate:Number - 
+    The rate at which the microphone should capture sound, in kHz. 
+    Acceptable values are 5, 8, 11, 22, and 44. 
+    The default value is 8 kHz if your sound capture 
+    device supports this value. Otherwise, the default value 
+    is the next available capture level above 8 kHz that your sound 
+    capture device supports, usually 11 kHz.
+ -->
+<!-- Microphone Settings Quality-Modus -->
+<microphoneRateBest>22</microphoneRateBest>
+
+<!-- AEC configuration value
+Specifies the echo path length (in milliseconds). A longer echo path means better 
+echo cancellation but also introduces longer delays and requires more processing power. 
+The default value is 128; the only other possible value is 256.
+To disable AEC please specify 0.
+ -->
+<echoPath>128</echoPath>
+
+<!--
+    Set "true" or "false" to enable/disable microphone echo suppression
+ -->
+<echoSuppression>true</echoSuppression>
+
+<!--
+    The Size of the Whiteboard
+    The Whiteboard has scrollbars so you may increase the size without problems
+ -->
+<defaultWhiteboardWidth>2400</defaultWhiteboardWidth>  
+<defaultWhiteboardHeight>1200</defaultWhiteboardHeight>  
+
+<!-- Available Configurations -->
+
+<availableCameraResolutions>
+    <resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" />
+    <resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" />
+    <resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" />
+    <resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" />
+    <resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" />
+    <resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" />
+    <resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" />
+    <resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" />
+    <resolution type="XGA 4:3" width="1024" height="768" isDefault="false" />
+    <resolution type="16:9" width="256" height="150" isDefault="false" />
+    <resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" />
+    <resolution type="pseudo 16:9" width="480" height="234" isDefault="false" />
+    <resolution type="16:9" width="512" height="300" isDefault="false" />
+    <resolution type="nHD 16:9" width="640" height="360" isDefault="false" />
+    <resolution type="16:9" width="1024" height="600" isDefault="false" />
+</availableCameraResolutions>
+    
+ 
+<!-- Module Configuration -->
+<!-- #############################################
+    Moderator Modules
+ -->
+
+<moderatorModuleUser>userModerate</moderatorModuleUser>
+
+<moderatorModuleRoom>roomModerate</moderatorModuleRoom>
+
+
+<!-- #############################################
+    Conference Room
+    
+    Room Layout's: flexibleConferenceRoom,conferenceView
+ -->
+
+<conferenceRoomModule>flexibleConferenceRoom</conferenceRoomModule>
+
+<!-- #############################################
+    Event Room
+    
+    Room Layouts: flexibleRestrictedConferenceRoom,restrictedConferenceRoom
+ -->
+<restrictedRoomModule>restrictedConferenceRoom</restrictedRoomModule>
+
+<!-- #############################################
+    Interview Room
+    
+    Room Layouts: interviewConferenceRoom
+ -->
+<interviewRoomModule>interviewConferenceRoom</interviewRoomModule>
+        
+</config>
diff --git a/src/main/webapp/public/config.xsd b/src/main/webapp/public/config.xsd
new file mode 100644
index 0000000..777d7f5
--- /dev/null
+++ b/src/main/webapp/public/config.xsd
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="config">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="rtmphostlocal"/>
+        <xs:element ref="httphostlocal"/>
+        <xs:element ref="rtmpport"/>
+        <xs:element ref="rtmpsslport"/>
+        <xs:element ref="useSSL"/>
+        <xs:element ref="red5httpport"/>
+        <xs:element ref="protocol"/>
+        <xs:element ref="proxyType"/>
+        <xs:element ref="currentappname"/>
+        <xs:element ref="currentappnameurl"/>
+        <xs:element ref="currentappnamebugurl"/>
+        <xs:element ref="loudnessAcitviation"/>
+        <xs:element ref="webAppRootKey"/>
+        <xs:element ref="httpRootKey"/>
+        <xs:element ref="showWindowEffect"/>
+        <xs:element ref="showRecording"/>
+        <xs:element ref="firstdayinweek"/>
+	<xs:element ref="codecType"/>
+        <xs:element ref="framesPerSecond"/>
+        <xs:element ref="bandwidthNeededNormal"/>
+        <xs:element ref="bandwidthNeededBest"/>
+        <xs:element ref="camQualityNormal"/>
+        <xs:element ref="camQualityBest"/>
+        <xs:element ref="microphoneRateBest"/>
+        <xs:element ref="echoPath" />
+	<xs:element ref="echoSuppression" />
+        <xs:element ref="defaultWhiteboardWidth"/>
+        <xs:element ref="defaultWhiteboardHeight"/>
+        <xs:element ref="availableCameraResolutions"/>
+        <xs:element ref="moderatorModuleUser"/>
+        <xs:element ref="moderatorModuleRoom"/>
+        <xs:element ref="conferenceRoomModule"/>
+        <xs:element ref="restrictedRoomModule"/>
+        <xs:element ref="interviewRoomModule"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="rtmphostlocal">
+  	<xs:annotation>
+    	<xs:documentation>
+    		URL/IP to use for the Server for RTMP and RTMPT traffic.
+		    If this value is empty it will try to connect to the 
+		    domain-name the OpenMeetings-Client has been loading from
+		    
+		    Can be either and IP or a domain name. 
+		    For example: 
+		    192.168.254.182
+		    or
+		    mysubdomain.streaming.to
+    	</xs:documentation>
+    </xs:annotation>
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="httphostlocal">
+    <xs:annotation>
+    	<xs:documentation>
+    		URL/IP to use for the Server for HTTP and HTTPS traffic.
+		    If this value is empty it will use the rtmphostlocal 
+		    variable (and in that way try to connect to the 
+		    domain-name the OpenMeetings-Client has been loading from)
+    	</xs:documentation>
+    </xs:annotation>
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="rtmpport" type="xs:integer"/>
+  <xs:element name="rtmpTunnelport" type="xs:integer"/>
+  <xs:element name="rtmpsslport" type="xs:integer"/>
+  <xs:element name="useSSL" type="xs:NCName"/>
+  <xs:element name="red5httpport" type="xs:integer"/>
+  <xs:element name="protocol" type="xs:NCName"/>
+  <xs:element name="proxyType" type="xs:NCName"/>
+  <xs:element name="currentappname" type="xs:string"/>
+  <xs:element name="currentappnameurl" type="xs:anyURI"/>
+  <xs:element name="currentappnamebugurl" type="xs:anyURI"/>
+  <xs:element name="loudnessAcitviation" type="xs:integer"/>
+  <xs:element name="webAppRootKey" type="xs:NCName"/>
+  <xs:element name="httpRootKey" type="xs:string"/>
+  <xs:element name="showWindowEffect" type="xs:NCName"/>
+  <xs:element name="showRecording" type="xs:NCName"/>
+  <xs:element name="firstdayinweek" type="xs:integer"/>
+  <xs:element name="codecType" type="xs:string"/>
+  <xs:element name="framesPerSecond" type="xs:integer"/>
+  <xs:element name="bandwidthNeededNormal" type="xs:integer"/>
+  <xs:element name="bandwidthNeededBest" type="xs:integer"/>
+  <xs:element name="camQualityNormal" type="xs:integer"/>
+  <xs:element name="camQualityBest" type="xs:integer"/>
+  <xs:element name="microphoneRateBest" type="xs:integer"/>
+  <xs:element name="echoSuppression" type="xs:string"/>
+  <xs:element name="echoPath">
+    <xs:annotation>
+        <xs:documentation>
+            AEC configuration value - 
+			Specifies the echo path length (in milliseconds). A longer echo path means better 
+			echo cancellation but also introduces longer delays and requires more processing power. 
+			The default value is 128; the only other possible value is 256.
+        </xs:documentation>
+    </xs:annotation>
+    <xs:simpleType>
+        <xs:restriction base="xs:int">
+            <xs:enumeration value="128" />
+            <xs:enumeration value="256" />
+        </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <xs:element name="defaultWhiteboardWidth" type="xs:integer"/>
+  <xs:element name="defaultWhiteboardHeight" type="xs:integer"/>
+  <xs:element name="availableCameraResolutions">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="resolution"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="resolution">
+    <xs:complexType>
+      <xs:attribute name="height" use="required" type="xs:integer"/>
+      <xs:attribute name="isDefault" use="required" type="xs:boolean"/>
+      <xs:attribute name="type" use="required"/>
+      <xs:attribute name="width" use="required" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="moderatorModuleUser" type="xs:NCName"/>
+  <xs:element name="moderatorModuleRoom" type="xs:NCName"/>
+  <xs:element name="conferenceRoomModule" type="xs:NCName"/>
+  <xs:element name="restrictedRoomModule" type="xs:NCName"/>
+  <xs:element name="interviewRoomModule" type="xs:NCName"/>
+</xs:schema>
diff --git a/src/main/webapp/public/emoticons/emotes.xml b/src/main/webapp/public/emoticons/emotes.xml
new file mode 100644
index 0000000..5d12618
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emotes.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<linked-list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="emotes.xsd">
+  <linked-list>
+    <string>emoticon_evilgrin.png</string>
+    <string>&gt;:(</string>
+    <string>(\_/)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_grin.png</string>
+    <string>:D</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_happy.png</string>
+    <string>8D</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_smile.png</string>
+    <string>:)</string>
+    <string>(^_^)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_surprised.png</string>
+    <string>o_O</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_tongue.png</string>
+    <string>:P</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_unhappy.png</string>
+    <string>:(</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_wink.png</string>
+    <string>;)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+</linked-list>
diff --git a/src/main/webapp/public/emoticons/emotes.xsd b/src/main/webapp/public/emoticons/emotes.xsd
new file mode 100644
index 0000000..fe10285
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emotes.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="linked-list">
+    <xs:complexType>
+      <xs:sequence minOccurs="0">
+        <xs:element ref="linked-list" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:element maxOccurs="unbounded" ref="string" minOccurs="0"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="string" type="xs:string"/>
+</xs:schema>
diff --git a/src/main/webapp/public/emoticons/emoticon_evilgrin.png b/src/main/webapp/public/emoticons/emoticon_evilgrin.png
new file mode 100644
index 0000000..817bd50
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_evilgrin.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_grin.png b/src/main/webapp/public/emoticons/emoticon_grin.png
new file mode 100644
index 0000000..fc60c5e
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_grin.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_happy.png b/src/main/webapp/public/emoticons/emoticon_happy.png
new file mode 100644
index 0000000..6b7336e
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_happy.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_smile.png b/src/main/webapp/public/emoticons/emoticon_smile.png
new file mode 100644
index 0000000..ade4318
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_smile.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_surprised.png b/src/main/webapp/public/emoticons/emoticon_surprised.png
new file mode 100644
index 0000000..4520cfc
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_surprised.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_tongue.png b/src/main/webapp/public/emoticons/emoticon_tongue.png
new file mode 100644
index 0000000..ecafd2f
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_tongue.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_unhappy.png b/src/main/webapp/public/emoticons/emoticon_unhappy.png
new file mode 100644
index 0000000..fd5d030
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_unhappy.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_wink.png b/src/main/webapp/public/emoticons/emoticon_wink.png
new file mode 100644
index 0000000..a631949
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_wink.png
Binary files differ
diff --git a/src/main/webapp/public/favicon.ico b/src/main/webapp/public/favicon.ico
new file mode 100644
index 0000000..f0c22ad
--- /dev/null
+++ b/src/main/webapp/public/favicon.ico
Binary files differ
diff --git a/src/main/webapp/public/theme.xml b/src/main/webapp/public/theme.xml
new file mode 100644
index 0000000..6a983a4
--- /dev/null
+++ b/src/main/webapp/public/theme.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="theme.xsd">
+
+	<!-- Colors -->
+
+	<color name="mainBackgroundColor" value="0xEEF0EB" 
+				description="main background color" />
+
+	<color name="basebgcolorizer" value="0xBDC0DB" 
+				description="Color for background" />
+				
+	<color name="baseMousecolorizer" value="0xBDC0DB" 
+				description="Color Mouseover color for list items" />
+	
+	<color name="baseMouseOvercolorizer" value="0xBDC0DB" 
+				description="Color Mouseover color for list items" />	
+	
+	<color name="styleMenuBarBaseColor" value="0x000088" 
+				description="menu bar background color" />				
+	
+	<color name="mainBorderColor" value="0xCCCCCC" 
+				description="main border color" />
+				
+	<color name="secondBorderColor" value="0xE0E0E0" 
+				description="main border color" />	
+		
+	<color name="menuBackgroundColor" value="0xEFEFEF" 
+				description="main border color" />
+				
+	<color name="menuTextColor" value="0x666666" 
+				description="color of text for menus" />
+	
+	<color name="menuTextDisabledColor" value="0xBBBBBB" 
+				description="color of text for menus" />		
+	
+	<!-- Icons -->
+	<resource name="logo_image" 
+				description="Logo to display on Main BG Navi" 
+				license="APL"
+				src="themes/basic-theme/general/logo.png" />
+	
+	<resource name="icon_facebook_rsc_png" 
+				description="Icon for facebook button in login" 
+				license="Unkown"
+				src="themes/basic-theme/auth/icon_facebook.png" />
+				
+	<resource name="warning_popup_icon_rsc" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/error.png" />	
+				
+	<resource name="info_text_icon_rsc" 
+				description="Info Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/information.png" />
+	
+	<!-- Save Toolbar (for example Admin section) -->
+	
+	<resource name="filesave_rsc" 
+				description="Save Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/disk.png" />
+
+	<resource name="edit_add_rsc" 
+				description="Save Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/plus_icon.png" />
+
+	<resource name="reload_rsc" 
+				description="Save Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/arrow_refresh_small.png" />
+	
+	<resource name="button_cancel_rsc" 
+				description="Save Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/cancel_icon.png" />
+
+	<resource name="add_rsc" 
+				description="Edit Add Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/add.png" />
+				
+	<resource name="date_icon_rsc" 
+				description="Edit Add Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/calendar_view_week.png" />
+				
+	<!-- Sorted list -->
+	
+	<resource name="step_back_two_arrow" 
+				description="Step to first" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_first.png" />
+				
+	<resource name="step_fwd_two_arrow" 
+				description="Step to last" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_last.png" />
+						
+    <resource name="step_back_arrow" 
+    			description="Step one back" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_previous.png" />
+    
+    <resource name="step_fwd_arrow" 
+    			description="Step one next" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_next.png" />
+				
+    <resource name="sort_up_rsc" 
+    			description="Sort up" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_up.png" />
+    
+    <resource name="sort_down_rsc" 
+    			description="Sort down" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_down.png" />
+    
+    <!-- Chat toolbar -->
+    
+    <resource name="font_style" 
+    			description="Change font style button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/style.png" />
+    
+    <resource name="font_bold" 
+    			description="Bold font style button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_bold.png" />
+    
+    <resource name="font_italic" 
+    			description="Italic font style button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_italic.png" />
+    
+    <resource name="font_underline" 
+    			description="Underline font style button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_underline.png" />
+    
+    <resource name="font_color" 
+    			description="Change font color button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/color_swatch.png" />
+    
+    <resource name="hyperlink" 
+    			description="Insert hyperlink button" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/world_link.png" />
+				
+	<!-- Whiteboard Toolbar -->
+	
+	<resource name="plain" 
+				description="Toolbar Icon" 
+				license="APL author sebawagner"
+				src="themes/basic-theme/whiteboard/delete_all.png" />
+	
+	<resource name="plainSlides" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/page_delete.png" />
+	
+	<resource name="arrow_draw_panel_tool_cursor" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/arrow_cursor_tool.png" />
+
+	<resource name="saveobj" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/disk.png" />
+
+	<resource name="revert" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png" />
+
+	<resource name="next" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/arrow_rotate_clockwise.png" />
+
+	<resource name="menupointer_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/menupointer.png" />
+				
+	<resource name="pointer_whiteboard_menu_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png" />
+				
+	<resource name="letter" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/letter.png" />
+
+	<resource name="paint" 
+				description="Toolbar Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/pencil.png" />
+	
+	<resource name="line_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/line.png" />	
+	
+	<resource name="uline_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/uline.png" />	
+		
+	<resource name="rectangle" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/rectangle.png" />	
+
+	<resource name="ellipse" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/ellipse.png" />	
+				
+	<resource name="drawarrowicon_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/drawarrowicon.png" />			
+		
+	<!-- whiteboard general -->		
+				
+	<resource name="bounding_box_delete_item_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/cancel_icon_small.png" />	
+	
+	<resource name="bounding_box_textedit_item_rsc" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/text_signature.png" />				
+					
+	<!-- document Tools -->	
+	
+	<resource name="doc_next" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_next.png" />		
+				
+	<resource name="doc_pre" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_pre.png" />		
+				
+	<resource name="doc_first" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_first.png" />		
+				
+	<resource name="doc_last" 
+				description="Toolbar Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_last.png" />		
+				
+	<!-- property panel -->	
+	<resource name="colorlinechoose_rsc" 
+				description="Property bar icon line color" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/pencil.png" />
+	
+	<resource name="colorfillchoose_rsc" 
+				description="Property bar icon fill color" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/paintcan.png" />
+	
+	<resource name="color_lock_rsc" 
+				description="Property bar icon color lock" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/lock.png" />
+	
+	<resource name="color_lock_open_rsc" 
+				description="Property bar icon color lock open" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/lock_open.png" />	
+				
+	<!-- Dashboard -->
+	
+	<resource name="icon_btn_dashboard_1" 
+				description="Info Guide Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_1.png" />
+				
+    <resource name="icon_btn_dashboard_2" 
+    			description="Info Guide Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_2.png" />
+				
+    <resource name="icon_btn_dashboard_3" 
+    			description="Info Guide Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_3.png" />
+				
+    <resource name="icon_btn_dashboard_4" 
+    			description="Info Guide Icon" 
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_4.png" />
+	
+	<resource name="icon_btn_rss_conference" 
+    			description="RSS Tab Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/dashboard/feed.png" />
+	
+	<resource name="icon_btn_chat_dashboard" 
+				description="Chat Tab Icon" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/dashboard/comments.png" />
+	
+    <resource name="icon_btn_rooms_conference" 
+				description="Conference Room Tab Icon" 
+				license="APL author sebawagner"
+				src="themes/basic-theme/dashboard/conference_icon_normal.png" />	
+				
+	<!-- Conference room -->	
+	<resource name="users_tab_btn" 
+				description="Conference Room Tab User" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/conference/group.png" />
+		
+	<resource name="files_tab_btn" 
+				description="Conference Room Tab Files" 
+				license="FamFam Icon Set"
+				src="themes/basic-theme/conference/folder_explore.png" />
+	
+	<resource name="exit_btn_rsc" 
+				description="Conference Room Tab Icon" 
+				license="APL author sebawagner"
+				src="themes/basic-theme/conference/exit_button.png" />			
+	
+</theme>
\ No newline at end of file
diff --git a/src/main/webapp/public/theme.xsd b/src/main/webapp/public/theme.xsd
new file mode 100644
index 0000000..c7a1885
--- /dev/null
+++ b/src/main/webapp/public/theme.xsd
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="theme">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="color"/>
+        <xs:element maxOccurs="unbounded" ref="resource"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="color">
+    <xs:complexType>
+      <xs:attribute name="description" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="value" use="required" type="xs:NMTOKEN"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="resource">
+    <xs:complexType>
+      <xs:attribute name="description" use="required"/>
+      <xs:attribute name="license" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="src" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png b/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png
new file mode 100644
index 0000000..a0f667c
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla b/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla
new file mode 100644
index 0000000..808954f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/exit_button.png b/src/main/webapp/public/themes/basic-theme/conference/exit_button.png
new file mode 100644
index 0000000..7234c99
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/exit_button.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png b/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png
new file mode 100644
index 0000000..0ba9391
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/group.png b/src/main/webapp/public/themes/basic-theme/conference/group.png
new file mode 100644
index 0000000..7fb4e1f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/group.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/comments.png b/src/main/webapp/public/themes/basic-theme/dashboard/comments.png
new file mode 100644
index 0000000..39433cf
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/comments.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla
new file mode 100644
index 0000000..1f013f2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png
new file mode 100644
index 0000000..44d450d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/feed.png b/src/main/webapp/public/themes/basic-theme/dashboard/feed.png
new file mode 100644
index 0000000..315c4f4
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/feed.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla
new file mode 100644
index 0000000..a97ff6b
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png
new file mode 100644
index 0000000..fa3a7e2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla
new file mode 100644
index 0000000..9aa80f1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png
new file mode 100644
index 0000000..75eb60e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla
new file mode 100644
index 0000000..e005420
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png
new file mode 100644
index 0000000..cc68320
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla
new file mode 100644
index 0000000..8088a64
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png
new file mode 100644
index 0000000..228b85c
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/add.png b/src/main/webapp/public/themes/basic-theme/general/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/add.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png b/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png b/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png
new file mode 100644
index 0000000..8fe695f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla
new file mode 100644
index 0000000..ecc498d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla
new file mode 100644
index 0000000..0bd3258
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png
new file mode 100644
index 0000000..267e6c2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/color_swatch.png b/src/main/webapp/public/themes/basic-theme/general/color_swatch.png
new file mode 100644
index 0000000..6e6e852
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/color_swatch.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/disk.png b/src/main/webapp/public/themes/basic-theme/general/disk.png
new file mode 100644
index 0000000..99d532e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/disk.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/error.png b/src/main/webapp/public/themes/basic-theme/general/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/error.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/information.png b/src/main/webapp/public/themes/basic-theme/general/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/information.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/logo.png b/src/main/webapp/public/themes/basic-theme/general/logo.png
new file mode 100644
index 0000000..1d7a3bc
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/logo.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla b/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla
new file mode 100644
index 0000000..9ac11ed
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/plus_icon.png b/src/main/webapp/public/themes/basic-theme/general/plus_icon.png
new file mode 100644
index 0000000..acec291
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/plus_icon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_down.png b/src/main/webapp/public/themes/basic-theme/general/resultset_down.png
new file mode 100644
index 0000000..0469642
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_down.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_first.png b/src/main/webapp/public/themes/basic-theme/general/resultset_first.png
new file mode 100644
index 0000000..b03eaf8
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_first.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_last.png b/src/main/webapp/public/themes/basic-theme/general/resultset_last.png
new file mode 100644
index 0000000..8ec8947
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_last.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_next.png b/src/main/webapp/public/themes/basic-theme/general/resultset_next.png
new file mode 100644
index 0000000..e252606
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_next.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png b/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png
new file mode 100644
index 0000000..18f9cc1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_up.png b/src/main/webapp/public/themes/basic-theme/general/resultset_up.png
new file mode 100644
index 0000000..f121481
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_up.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/style.png b/src/main/webapp/public/themes/basic-theme/general/style.png
new file mode 100644
index 0000000..81e41de
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/style.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_bold.png b/src/main/webapp/public/themes/basic-theme/general/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_bold.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_italic.png b/src/main/webapp/public/themes/basic-theme/general/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_italic.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_underline.png b/src/main/webapp/public/themes/basic-theme/general/text_underline.png
new file mode 100644
index 0000000..90d0df2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_underline.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/world_link.png b/src/main/webapp/public/themes/basic-theme/general/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/world_link.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png
new file mode 100644
index 0000000..a9f3169
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png
new file mode 100644
index 0000000..46c75aa
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png
new file mode 100644
index 0000000..aa65210
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png b/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png
new file mode 100644
index 0000000..c149c2b
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla
new file mode 100644
index 0000000..bafe7e3
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png
new file mode 100644
index 0000000..3e42c07
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla
new file mode 100644
index 0000000..80b49ec
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png
new file mode 100644
index 0000000..c1e5ac9
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla
new file mode 100644
index 0000000..e44d536
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png
new file mode 100644
index 0000000..1ef3056
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla
new file mode 100644
index 0000000..f9ea5cb
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png
new file mode 100644
index 0000000..6cede29
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla
new file mode 100644
index 0000000..7050168
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png
new file mode 100644
index 0000000..f974ec6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png b/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png
new file mode 100644
index 0000000..0e73cb5
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla
new file mode 100644
index 0000000..e437461
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png
new file mode 100644
index 0000000..9cc51f3
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla
new file mode 100644
index 0000000..f1aba8e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png
new file mode 100644
index 0000000..eb036ef
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/line.png b/src/main/webapp/public/themes/basic-theme/whiteboard/line.png
new file mode 100644
index 0000000..10b420a
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/line.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png b/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png
new file mode 100644
index 0000000..2ebc4f6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png b/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png
new file mode 100644
index 0000000..a471765
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png b/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png
new file mode 100644
index 0000000..98031f6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png b/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png
new file mode 100644
index 0000000..3141467
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png b/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png
new file mode 100644
index 0000000..f82a886
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png b/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png
new file mode 100644
index 0000000..0bfecd5
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla
new file mode 100644
index 0000000..ecd9bfc
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png
new file mode 100644
index 0000000..3a3ee30
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla
new file mode 100644
index 0000000..f9038d1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png
new file mode 100644
index 0000000..db799f4
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png b/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png
new file mode 100644
index 0000000..c72fd80
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png b/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png
new file mode 100644
index 0000000..32914f0
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png
Binary files differ
diff --git a/src/main/webapp/screensharing/icon.jpg b/src/main/webapp/screensharing/icon.jpg
new file mode 100644
index 0000000..a9f29e4
--- /dev/null
+++ b/src/main/webapp/screensharing/icon.jpg
Binary files differ
diff --git a/src/main/webapp/screensharing/splashicon.jpg b/src/main/webapp/screensharing/splashicon.jpg
new file mode 100644
index 0000000..a9f29e4
--- /dev/null
+++ b/src/main/webapp/screensharing/splashicon.jpg
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.fla b/src/main/webapp/streams/hibernate/default_interview_image.fla
new file mode 100644
index 0000000..31398dc
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.fla
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.jpg b/src/main/webapp/streams/hibernate/default_interview_image.jpg
new file mode 100644
index 0000000..4b0f26b
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.jpg
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.png b/src/main/webapp/streams/hibernate/default_interview_image.png
new file mode 100644
index 0000000..e87d640
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.png
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/one_second.wav b/src/main/webapp/streams/hibernate/one_second.wav
new file mode 100644
index 0000000..24d262a
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/one_second.wav
Binary files differ
diff --git a/src/main/webapp/upload/library.xml b/src/main/webapp/upload/library.xml
new file mode 100644
index 0000000..794be23
--- /dev/null
+++ b/src/main/webapp/upload/library.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="library.xsd"><originalDocument lastmod="1185461814000" size="240233">Tutorat.pdf</originalDocument><swfDocument lastmod="1185461814000" size="240233">Tutorat.swf</swfDocument><thumbs><thumb lastmod="1185461813000" size="3998">_thumb_pages-000.jpg</thumb><thumb lastmod="1185461813000" size="3855">_thumb_pages-001.jpg</thumb><thumb lastmod="1185461813000" size="4306">_thumb_pages-002.jpg</thumb><thumb lastmod="1185461813000" size="3747">_thumb_pages-003.jpg</thumb><thumb lastmod="1185461813000" size="3162">_thumb_pages-004.jpg</thumb><thumb lastmod="1185461813000" size="3232">_thumb_pages-005.jpg</thumb><thumb lastmod="1185461813000" size="2981">_thumb_pages-006.jpg</thumb><thumb lastmod="1185461813000" size="3126">_thumb_pages-007.jpg</thumb><thumb lastmod="1185461813000" size="4457">_thumb_pages-008.jpg</thumb><thumb lastmod="1185461813000" size="4264">_thumb_pages-009.jpg</thumb><thumb lastmod="1185461813000" size="4263">_thumb_pages-010.jpg</thumb><thumb lastmod="1185461813000" size="3770">_thumb_pages-011.jpg</thumb><thumb lastmod="1185461813000" size="3354">_thumb_pages-012.jpg</thumb><thumb lastmod="1185461813000" size="3006">_thumb_pages-013.jpg</thumb><thumb lastmod="1185461813000" size="3972">_thumb_pages-014.jpg</thumb><thumb lastmod="1185461813000" size="4353">_thumb_pages-015.jpg</thumb><thumb lastmod="1185461813000" size="4184">_thumb_pages-016.jpg</thumb><thumb lastmod="1185461813000" size="4021">_thumb_pages-017.jpg</thumb><thumb lastmod="1185461813000" size="3225">_thumb_pages-018.jpg</thumb><thumb lastmod="1185461813000" size="3847">_thumb_pages-019.jpg</thumb><thumb lastmod="1185461813000" size="3046">_thumb_pages-020.jpg</thumb><thumb lastmod="1185461813000" size="2633">_thumb_pages-021.jpg</thumb><thumb lastmod="1185461813000" size="4001">_thumb_pages-022.jpg</thumb><thumb lastmod="1185461813000" size="4243">_thumb_pages-023.jpg</thumb></thumbs></presentation>
diff --git a/src/main/webapp/upload/library.xsd b/src/main/webapp/upload/library.xsd
new file mode 100644
index 0000000..71f2b7d
--- /dev/null
+++ b/src/main/webapp/upload/library.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="presentation">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="originalDocument"/>
+        <xs:element ref="swfDocument"/>
+        <xs:element ref="thumbs"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="originalDocument">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="swfDocument">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="thumbs">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="thumb"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="thumb">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/src/screenshare.vm b/src/screenshare.vm
new file mode 100644
index 0000000..470daa8
--- /dev/null
+++ b/src/screenshare.vm
@@ -0,0 +1,55 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<jnlp spec='1.0+' codebase='$codebase'>
+	<information> 
+		<title>Screen Sharing Application</title>
+		<vendor>$APP_NAME</vendor> 
+		<homepage>http://openmeetings.apache.org/</homepage>
+		<icon href="icon.jpg" />
+		<icon kind="splash" href="splashicon.jpg" />
+		<description>ScreenViewer Client Application</description>
+		<description kind="short">A File to grab a screen and send it to a Server</description>
+		<offline-allowed/>
+	</information>
+	<security>
+		<all-permissions/>
+	</security>
+	<resources>
+		<j2se version='1.7+'/>
+		$dependencies
+	</resources>
+	<application-desc main-class='org.apache.openmeetings.screen.webstart.CoreScreenShare'>
+		<argument>$protocol</argument>
+		<argument>$host</argument>
+		<argument>$port</argument>
+		<argument>$app</argument>
+		<argument>$userId</argument>
+		<argument>$publicSid</argument>
+		<argument>$labels</argument>
+		<argument>$defaultQuality</argument>
+		<argument>$defaultFps</argument>
+		<argument>$showFps</argument>
+		<argument>$allowRemote</argument>
+		<argument>$allowRecording</argument>
+		<argument>$allowPublishing</argument>
+		<argument>$keystore</argument>
+		<argument>$password</argument>
+	</application-desc>
+</jnlp>
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/down.png b/src/screenshare/java/org/apache/openmeetings/screen/down.png
new file mode 100644
index 0000000..d10b8c6
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/down.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/next.png b/src/screenshare/java/org/apache/openmeetings/screen/next.png
new file mode 100644
index 0000000..e252606
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/next.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/play.png b/src/screenshare/java/org/apache/openmeetings/screen/play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/play.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/previous.png b/src/screenshare/java/org/apache/openmeetings/screen/previous.png
new file mode 100644
index 0000000..18f9cc1
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/previous.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/stop.png b/src/screenshare/java/org/apache/openmeetings/screen/stop.png
new file mode 100644
index 0000000..8389bf3
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/stop.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/up.png b/src/screenshare/java/org/apache/openmeetings/screen/up.png
new file mode 100644
index 0000000..c03ab0a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/up.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
new file mode 100644
index 0000000..0953b66
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.SourceDataLine;
+
+public class AudioTone {
+	public static final float SAMPLE_RATE = 44100F;
+
+	public static void play() {
+		byte[] buf = new byte[1];
+		
+		SourceDataLine sdl = null;
+		try {
+		AudioFormat af = new AudioFormat(SAMPLE_RATE, 8, 1, true, false);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl.open(af);
+		sdl.start();
+		for (int i = 0; i < (int)SAMPLE_RATE; ++i) {
+			double angle = i / (SAMPLE_RATE / 440) * 2.0 * Math.PI;
+			buf[0] = (byte) (Math.sin(angle) * 128);
+			sdl.write(buf, 0, 1);
+		}
+		} catch (LineUnavailableException e) {
+			//no-op
+		} finally {
+			if (sdl != null) {
+				sdl.drain();
+				sdl.stop();
+				sdl.close();
+			}
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java
new file mode 100644
index 0000000..2b9495b
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+
+public abstract class BaseScreenEncoder implements IScreenEncoder {
+
+	public static BufferedImage resize(BufferedImage _img, Rectangle size) {
+		BufferedImage img = _img;
+		if (img.getWidth() != size.width || img.getHeight() != size.height) {
+			img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
+			
+			Graphics2D graphics2D = img.createGraphics();
+			graphics2D.setRenderingHint(
+				RenderingHints.KEY_INTERPOLATION,
+				RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+			graphics2D.drawImage(_img, 0, 0, size.width, size.height, null);
+			graphics2D.dispose();
+		}
+		return img;
+	}
+	
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java
new file mode 100644
index 0000000..435204b
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java
@@ -0,0 +1,287 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.FPS;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerHeight;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerWidth;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerY;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.awt.AWTException;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.io.IOException;
+import java.util.concurrent.ArrayBlockingQueue;
+
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.Job;
+import org.quartz.JobBuilder;
+import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.SchedulerFactory;
+import org.quartz.SimpleScheduleBuilder;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.quartz.impl.StdSchedulerFactory;
+import org.red5.server.api.Red5;
+import org.red5.server.net.rtmp.event.VideoData;
+import org.red5.server.stream.message.RTMPMessage;
+import org.slf4j.Logger;
+
+class CaptureScreen extends Thread {
+	private static final Logger log = getLogger(CaptureScreen.class);
+	private final static String QUARTZ_GROUP_NAME = "ScreenShare";
+	private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger";
+	private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob";
+	private CoreScreenShare core;
+	private int timeBetweenFrames;
+	private volatile int timestamp = 0;
+	private long timeCaptureStarted = 0;
+	private volatile boolean active = true;
+	private IScreenEncoder se;
+	private IScreenShare client;
+	private ArrayBlockingQueue<VideoData> frames = new ArrayBlockingQueue<VideoData>(2);
+	private String host = null;
+	private String app = null;
+	private int port = -1;
+	private int streamId;
+	private boolean startPublish = false;
+	private Scheduler scheduler;
+
+	public CaptureScreen(CoreScreenShare coreScreenShare, IScreenShare client, String host, String app, int port) {
+		core = coreScreenShare;
+		this.client = client;
+		this.host = host;
+		this.app = app;
+		this.port = port;
+		SchedulerFactory sf = new StdSchedulerFactory();
+		try {
+			scheduler = sf.getScheduler();
+		} catch (SchedulerException e) {
+			log.error("Unexpected error while creating scheduler", e);
+		}
+	}
+
+	public void release() {
+		try {
+			if (scheduler != null) {
+				scheduler.shutdown(true);
+				scheduler = null;
+			}
+		} catch (Exception e) {
+			log.error("Unexpected error while shutting down scheduler", e);
+		}
+		active = false;
+		timestamp = 0;
+		timeCaptureStarted = 0;
+	}
+
+	public void run() {
+		try {
+			while (active && !core.isReadyToRecord()) {
+				Thread.sleep(60);
+			}
+
+			timeBetweenFrames = 1000 / FPS;
+			se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds
+			timeCaptureStarted = System.currentTimeMillis();
+
+			JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build();
+			encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this);
+			Trigger encodeTrigger = TriggerBuilder.newTrigger()
+					.withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME)
+					.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(timeBetweenFrames).repeatForever())
+					.build();
+			JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build();
+			Trigger sendTrigger = TriggerBuilder.newTrigger()
+					.withIdentity("SendTrigger", QUARTZ_GROUP_NAME)
+					.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(timeBetweenFrames).repeatForever())
+					.build();
+			sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this);
+
+			scheduler.scheduleJob(encodeJob, encodeTrigger);
+			scheduler.scheduleJob(sendJob, sendTrigger);
+			scheduler.start();
+		} catch (Exception e) {
+			log.error("Error while running: ", e);
+		}
+	}
+	
+	/*
+	private void pushAudio(byte[] audio, long ts) {
+		if (startPublish) {
+			buffer.put((byte) 6);
+			buffer.put(audio);
+			buffer.flip();
+	
+			// I can stream audio
+			//packets successfully using linear PCM at 11025Hz. For those packets I
+			//push one byte (0x06) which specifies the format of audio data in a
+			//ByteBuffer, and then real audio data:
+			RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts);
+			client.publishStreamData(streamId, rtmpMsg);
+		}
+	}
+	*/
+	
+	@DisallowConcurrentExecution
+	public static class EncodeJob implements Job {
+		private static final String CAPTURE_KEY = "capture";
+		Robot robot;
+		Rectangle screen = new Rectangle(spinnerX, spinnerY, spinnerWidth, spinnerHeight);
+		int[][] image = null;
+		
+		public EncodeJob() {
+			try {
+				robot = new Robot();
+			} catch (AWTException e) {
+				log.error("Unexpected Error while creating robot", e);
+			}
+		}
+		
+		@Override
+		public void execute(JobExecutionContext context) throws JobExecutionException {
+			JobDataMap data = context.getJobDetail().getJobDataMap();
+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);
+			
+			long start = System.currentTimeMillis();
+			image = ScreenV1Encoder.getImage(screen, robot);
+			if (log.isTraceEnabled()) {
+				log.trace(String.format("Image was captured in %s ms", System.currentTimeMillis() - start));
+			}
+			start = System.currentTimeMillis();
+			try {
+				VideoData vData = capture.se.encode(image);
+				if (log.isTraceEnabled()) {
+					long now = System.currentTimeMillis();
+					log.trace(String.format("Image was encoded in %s ms, timestamp is %s", now - start, now - capture.timeCaptureStarted));
+				}
+				capture.frames.offer(vData);
+				capture.se.createUnalteredFrame();
+			} catch (Exception e) {
+				log.error("Error while encoding: ", e);
+			}
+		}
+	}
+	
+	public static class SendJob implements Job {
+		private static final String CAPTURE_KEY = "capture";
+		public SendJob() {}
+		
+		@Override
+		public void execute(JobExecutionContext context) throws JobExecutionException {
+			JobDataMap data = context.getJobDetail().getJobDataMap();
+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);
+			if (log.isTraceEnabled()) {
+				long real = System.currentTimeMillis() - capture.timeCaptureStarted;
+				log.trace(String.format("Enter method, timestamp: %s, real: %s, diff: %s", capture.timestamp, real, real - capture.timestamp));
+			}
+			VideoData f = capture.frames.poll();
+			if (log.isTraceEnabled()) {
+				log.trace(String.format("Getting %s image", f == null ? "DUMMY" : "CAPTURED"));
+			}
+			f = f == null ? capture.se.getUnalteredFrame() : f;
+			if (f != null) {
+				try {
+					capture.pushVideo(f, capture.timestamp);
+					if (log.isTraceEnabled()) {
+						long real = System.currentTimeMillis() - capture.timeCaptureStarted;
+						log.trace(String.format("Sending video, timestamp: %s, real: %s, diff: %s", capture.timestamp, real, real - capture.timestamp));
+					}
+					capture.timestamp += capture.timeBetweenFrames;
+				} catch (IOException e) {
+					log.error("Error while sending: ", e);
+				}
+			}
+		}
+	}
+	
+	@DisallowConcurrentExecution
+	public static class CursorJob implements Job {
+		private static final String CAPTURE_KEY = "capture";
+		
+		public CursorJob() {}
+		
+		@Override
+		public void execute(JobExecutionContext context) throws JobExecutionException {
+			JobDataMap data = context.getJobDetail().getJobDataMap();
+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);
+			capture.core.sendCursorStatus();
+		}
+	}
+	
+	private void pushVideo(VideoData data, int ts) throws IOException {
+		if (startPublish) {
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(client.getConnection());
+			}
+			RTMPMessage rtmpMsg = RTMPMessage.build(data, ts);
+			client.publishStreamData(streamId, rtmpMsg);
+		}
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public String getApp() {
+		return app;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public int getStreamId() {
+		return streamId;
+	}
+
+	public void setStreamId(int streamId) {
+		this.streamId = streamId;
+	}
+
+	public void setStartPublish(boolean startPublish) {
+		this.startPublish = startPublish;
+	}
+
+	public void setSendCursor(boolean sendCursor) {
+		try {
+			if (sendCursor) {
+				JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build();
+				Trigger cursorTrigger = TriggerBuilder.newTrigger()
+						.withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME)
+						.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(2, FPS)).repeatForever())
+						.build();
+				cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);
+				scheduler.scheduleJob(cursorJob, cursorTrigger);
+			} else {
+				scheduler.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME));
+			}
+		} catch (SchedulerException e) {
+			log.error("Unexpected Error schedule/unschedule cursor job", e);
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
new file mode 100644
index 0000000..9cad0e6
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
@@ -0,0 +1,768 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import static java.awt.Toolkit.getDefaultToolkit;
+import static java.awt.datatransfer.DataFlavor.stringFlavor;
+import static java.lang.Boolean.TRUE;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerHeight;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerWidth;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerY;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.awt.MouseInfo;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.openmeetings.screen.webstart.gui.ScreenSharerFrame;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.io.utils.ObjectMap;
+import org.red5.server.api.Red5;
+import org.red5.server.api.event.IEvent;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.event.Notify;
+import org.red5.server.net.rtmp.message.Header;
+import org.red5.server.net.rtmp.status.StatusCodes;
+import org.slf4j.Logger;
+
+public class CoreScreenShare implements IPendingServiceCallback, INetStreamEventHandler {
+	private static final Logger log = getLogger(CoreScreenShare.class);
+
+	enum Protocol {
+		rtmp, rtmpt, rtmpe, rtmps
+	}
+	private IScreenShare instance = null;
+	private IScreenShare controlInstance = null;
+	private Protocol protocol;
+	private String host;
+	private String app;
+	private int port;
+	
+	public String publishName;
+	private CaptureScreen capture = null;
+	private RTMPClientPublish publishClient = null;
+
+	private ScreenSharerFrame frame;
+
+	public int defaultQuality = 1;
+	public int defaultFPS = 10;
+	public boolean showFPS = true;
+	public boolean allowRemote = true;
+
+	public Long userId = null;
+	private boolean allowRecording = true;
+	private boolean allowPublishing = true;
+
+	private boolean startStreaming = false;
+	private boolean startRecording = false;
+	private boolean startPublishing = false;
+	public float Ampl_factor = 1f;
+	public boolean isConnected = false;
+	private boolean readyToRecord = false;
+	private boolean audioNotify = false;
+	private boolean remoteEnabled = true;
+
+	public Map<Integer, Boolean> currentPressedKeys = new HashMap<Integer, Boolean>();
+
+	private CaptureScreen getCapture() {
+		if (capture == null) {
+			capture = new CaptureScreen(this, instance, host, app, port);
+		}
+		return capture;
+	}
+	// ------------------------------------------------------------------------
+	//
+	// Main
+	//
+	// ------------------------------------------------------------------------
+
+	public CoreScreenShare(String[] args) {
+		try {
+			System.setProperty("org.terracotta.quartz.skipUpdateCheck", "true");
+			for (String arg : args) {
+				log.debug("arg: " + arg);
+			}
+			String[] textArray = null;
+			if (args.length > 12) {
+				protocol = Protocol.valueOf(args[0]);
+				host = args[1];
+				port = Integer.parseInt(args[2]);
+				app = args[3];
+				userId = Long.parseLong(args[4]);
+				publishName = args[5];
+				String labelTexts = args[6];
+				defaultQuality = Integer.parseInt(args[7]);
+				defaultFPS = Integer.parseInt(args[8]);
+				showFPS = bool(args[9]);
+				allowRemote = bool(args[10]);
+				remoteEnabled = allowRemote;
+				allowRecording = bool(args[11]);
+				allowPublishing = bool(args[12]);
+
+				if (labelTexts.length() > 0) {
+					textArray = labelTexts.split(";");
+
+					log.debug("labelTexts :: " + labelTexts);
+
+					log.debug("textArray Length " + textArray.length);
+
+					for (int i = 0; i < textArray.length; i++) {
+						log.debug(i + " :: " + textArray[i]);
+					}
+				}
+				switch (protocol) {
+					case rtmp:
+						instance = new RTMPScreenShare(this);
+						controlInstance = new RTMPScreenShare(this);
+						break;
+					case rtmpt:
+						instance = new RTMPTScreenShare(this);
+						controlInstance = new RTMPTScreenShare(this);
+						break;
+					case rtmps:
+						RTMPSScreenShare client = new RTMPSScreenShare(this);
+						client.setKeystoreBytes(Hex.decodeHex(args[13].toCharArray()));
+						client.setKeyStorePassword(args[14]);
+						instance = client;
+						RTMPSScreenShare controlClient = new RTMPSScreenShare(this);
+						controlClient.setKeystoreBytes(Hex.decodeHex(args[13].toCharArray()));
+						controlClient.setKeyStorePassword(args[14]);
+						controlInstance = controlClient;
+						break;
+					case rtmpe:
+					default:
+						throw new Exception("Unsupported protocol");
+				}
+				instance.setServiceProvider(this);
+				controlInstance.setServiceProvider(this);
+				log.debug(String.format("host: %s, app: %s, port: %s, publish: %s", host, port, app, publishName));
+			} else {
+				System.exit(0);
+			}
+
+			createWindow(textArray);
+		} catch (Exception err) {
+			log.error("", err);
+		}
+	}
+
+	public static void main(String[] args) {
+		new CoreScreenShare(args);
+	}
+	
+	// ------------------------------------------------------------------------
+	//
+	// GUI
+	//
+	// ------------------------------------------------------------------------
+	public void createWindow(String[] textArray) {
+		try {
+			frame = new ScreenSharerFrame(this, textArray);
+			frame.setVisible(true);
+			frame.setRecordingTabEnabled(allowRecording);
+			frame.setPublishingTabEnabled(allowPublishing);
+			log.debug("initialized");
+		} catch (Exception err) {
+			log.error("createWindow Exception: ", err);
+		}
+	}
+
+	public void sendCursorStatus() {
+		try {
+			Point mouseP = MouseInfo.getPointerInfo().getLocation();
+
+			float scaleFactor = (1.0f * resizeX) / spinnerWidth;
+
+			// Real size: Real mouse position = Resize : X
+			int x = (int)(Ampl_factor * (mouseP.getX() - spinnerX) * scaleFactor);
+			int y = (int)(Ampl_factor * (mouseP.getY() - spinnerY) * scaleFactor);
+
+			Map<String, Object> cursorPosition = new HashMap<String, Object>();
+			cursorPosition.put("publicSID", publishName);
+			cursorPosition.put("cursor_x", x);
+			cursorPosition.put("cursor_y", y);
+
+			if (controlInstance.getConnection() != null) {
+				if (Red5.getConnectionLocal() == null) {
+					Red5.setConnectionLocal(controlInstance.getConnection());
+				}
+				controlInstance.invoke("setNewCursorPosition", new Object[] { cursorPosition }, this);
+			}
+		} catch (NullPointerException npe) {
+			//noop
+		} catch (Exception err) {
+			frame.setStatus("Exception: " + err);
+			log.error("[sendCursorStatus]", err);
+		}
+	}
+
+	public void setConnectionAsSharingClient() {
+		log.debug("########## setConnectionAsSharingClient");
+		try {
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put("screenX", spinnerX);
+			map.put("screenY", spinnerY);
+
+			int scaledWidth = (int)(Ampl_factor * resizeX);
+			int scaledHeight = (int)(Ampl_factor * resizeY);
+
+			map.put("screenWidth", scaledWidth);
+			map.put("screenHeight", scaledHeight);
+
+			map.put("startRecording", startRecording);
+			map.put("startStreaming", startStreaming);
+			map.put("startPublishing", startPublishing);
+			map.put("publishingHost", frame.getPublishHost());
+			map.put("publishingApp", frame.getPublishApp());
+			map.put("publishingId", frame.getPublishId());
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			controlInstance.invoke("setConnectionAsSharingClient", new Object[] { map }, this);
+		} catch (Exception err) {
+			frame.setStatus("Error: " + err.getLocalizedMessage());
+			log.error("[setConnectionAsSharingClient]", err);
+		}
+	}
+
+	public void streamingStart() {
+		startStreaming = true;
+		captureScreenStart();
+	}
+	
+	public void recordingStart() {
+		startRecording= true;
+		captureScreenStart();
+	}
+	
+	public void publishingStart() {
+		startPublishing = true;
+		captureScreenStart();
+	}
+	
+	private void connect(String parentSid, boolean control) {
+		Map<String, Object> map = instance.makeDefaultConnectionParams(host, port, app);
+		map.put("screenClient", true);
+		map.put("userId", userId);
+		map.put("parentSid", parentSid);
+		(control ? controlInstance : instance).connect(host, port, map, this);
+	}
+	
+	private void captureScreenStart() {
+		try {
+			log.debug("captureScreenStart");
+			
+			if (!isConnected) {
+				connect(publishName, false);
+			} else {
+				setConnectionAsSharingClient();
+			}
+		} catch (Exception err) {
+			log.error("captureScreenStart Exception: ", err);
+			frame.setStatus("Exception: " + err);
+		}
+	}
+
+	public void streamingStop() {
+		startStreaming = false;
+		captureScreenStop("stopStreaming");
+	}
+	
+	public void recordingStop() {
+		startRecording = false;
+		captureScreenStop("stopRecording");
+	}
+	
+	public void publishingStop() {
+		startPublishing = false;
+		captureScreenStop("stopPublishing");
+	}
+	
+	private void captureScreenStop(String action) {
+		try {
+			log.debug("INVOKE screenSharerAction" );
+
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put(action, true);
+
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			controlInstance.invoke("screenSharerAction", new Object[] { map }, this);
+		} catch (Exception err) {
+			log.error("captureScreenStop Exception: ", err);
+			frame.setStatus("Exception: " + err);
+		}
+	}
+
+	public void stopStreaming() {
+		frame.setSharingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startStreaming = false;
+	}
+	
+	public void stopRecording() {
+		frame.setRecordingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startRecording = false;
+	}
+	
+	public void stopPublishing() {
+		frame.setPublishingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startPublishing = false;
+		if (publishClient != null) {
+			publishClient.disconnect();
+			publishClient = null;
+		}
+	}
+	
+	synchronized public boolean isReadyToRecord() {
+		return readyToRecord;
+	}
+	
+	synchronized private void setReadyToRecord(boolean readyToRecord) {
+		this.readyToRecord = readyToRecord;
+	}
+	
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		if (!(command instanceof Notify)) {
+			return;
+		}
+		Notify invoke = (Notify)command;
+		if (invoke.getType() == IEvent.Type.STREAM_DATA) {
+			return;
+		}
+		
+		String method = invoke.getCall().getServiceMethodName();
+		if ("stopStream".equals(method)) {
+			stopStream();
+		} else if ("sendRemoteCursorEvent".equals(method)) {
+			sendRemoteCursorEvent(invoke.getCall().getArguments()[0]);
+		} else if ("screenSharerAction".equals(method)) {
+			Object[] args = invoke.getCall().getArguments();
+			if (args != null && args.length > 0) {
+				@SuppressWarnings("unchecked")
+				Map<String, Object> params = (Map<String, Object>)args[0];
+				if (bool(params.get("stopPublishing"))) {
+					stopPublishing();
+				}
+				if (params.containsKey("error")) {
+					frame.setStatus("" + params.get("error"));
+				}
+			}
+		}
+	}
+
+	public void stopStream() {
+		try {
+			log.debug("ScreenShare stopStream");
+
+			stopStreaming();
+			stopRecording();
+			stopPublishing();
+			isConnected = false;
+
+			instance.disconnect();
+			controlInstance.disconnect();
+			setReadyToRecord(false);
+			getCapture().setStartPublish(false);
+			getCapture().release();
+			capture = null;
+		} catch (Exception e) {
+			log.error("ScreenShare stopStream exception " + e);
+		}
+
+	}
+
+	public void onStreamEvent(Notify notify) {
+		log.debug( "onStreamEvent " + notify );
+
+		@SuppressWarnings("rawtypes")
+		ObjectMap map = (ObjectMap) notify.getCall().getArguments()[0];
+		String code = (String) map.get("code");
+
+		if (StatusCodes.NS_PUBLISH_START.equals(code)) {
+			log.debug( "onStreamEvent Publish start" );
+			getCapture().setStartPublish(true);
+			setReadyToRecord(true);
+		}
+	}
+
+	private boolean bool(Object b) {
+		return TRUE.equals(Boolean.valueOf("" + b));
+	}
+	
+	private int getInt(Map<String, Object> returnMap, String key) {
+		return Integer.valueOf(returnMap.get(key).toString()).intValue();
+	}
+	
+	private float getFloat(Map<String, Object> returnMap, String key) {
+		return Float.valueOf(returnMap.get(key).toString()).floatValue();
+	}
+	
+	private Point getCoordinates(Map<String, Object> returnMap) {
+		float scaleFactorX = spinnerWidth / (Ampl_factor * resizeX);
+		float scaleFactorY = spinnerHeight / (Ampl_factor * resizeY);
+
+		int x = Math.round(scaleFactorX * getFloat(returnMap, "x") + spinnerX);
+		int y = Math.round(scaleFactorY * getFloat(returnMap, "y") + spinnerY);
+		return new Point(x, y);
+	}
+	
+	public void sendRemoteCursorEvent(Object obj) {
+		try {
+			if (!remoteEnabled) {
+				return;
+			}
+			log.trace("#### sendRemoteCursorEvent ");
+			log.trace("Result Map Type "+obj.getClass().getName());
+
+			@SuppressWarnings("unchecked")
+			Map<String, Object> returnMap = (Map<String, Object>)obj;
+
+			String action = "" + returnMap.get("action");
+
+			if (action.equals("onmouseup")) {
+				Robot robot = new Robot();
+				
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+				robot.mouseRelease(InputEvent.BUTTON1_MASK);
+			} else if (action.equals("onmousedown")) {
+				Robot robot = new Robot();
+
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+				robot.mousePress(InputEvent.BUTTON1_MASK);
+			} else if (action.equals("mousePos")) {
+				Robot robot = new Robot();
+
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+			} else if (action.equals("onkeydown")) {
+				Robot robot = new Robot();
+
+				int key = getInt(returnMap, "k");
+
+				// logger.debug("key onkeydown -1 "+key);
+				boolean doAction = true;
+
+				if (key == 221) {
+					key = 61;
+				} else if (key == -1) {
+					String charValue = returnMap.get("c").toString();
+
+					// key = KeyEvent.VK_ADD;
+					doAction = false;
+
+					for (Integer storedKey : currentPressedKeys.keySet()) {
+						robot.keyRelease(storedKey);
+					}
+
+					currentPressedKeys = new HashMap<Integer, Boolean>();
+
+					pressSpecialSign(charValue, robot);
+				} else if (key == 188) {
+					key = 44;
+				} else if (key == 189) {
+					key = 109;
+				} else if (key == 190) {
+					key = 46;
+				} else if (key == 191) {
+					key = 47;
+				} else if (key == 13) {
+					key = KeyEvent.VK_ENTER;
+				}
+
+				if (doAction) {
+					currentPressedKeys.put(key, true);
+
+					robot.keyPress(key);
+				}
+			} else if (action.equals("onkeyup")) {
+				Robot robot = new Robot();
+
+				int key = getInt(returnMap, "k");
+
+				boolean doAction = true;
+
+				if (key == 221) {
+					key = 61;
+				} else if (key == -1) {
+					doAction = false;
+				} else if (key == 188) {
+					key = 44;
+				} else if (key == 189) {
+					key = 109;
+				} else if (key == 190) {
+					key = 46;
+				} else if (key == 191) {
+					key = 47;
+				} else if (key == 13) {
+					key = KeyEvent.VK_ENTER;
+				}
+
+				// logger.debug("key onkeyup 2- "+key);
+
+				if (doAction) {
+					if (currentPressedKeys.containsKey(key)) {
+						currentPressedKeys.remove(key);
+
+						robot.keyRelease(key);
+					}
+				}
+			} else if (action.equals("paste")) {
+				Robot robot = new Robot();
+
+				String paste = returnMap.get("paste").toString();
+
+				pressSpecialSign(paste, robot);
+			} else if (action.equals("copy")) {
+				Robot robot = new Robot();
+
+				String paste = this.getHighlightedText(robot);
+
+				Map<Integer, String> map = new HashMap<Integer, String>();
+				map.put(0, "copiedText");
+				map.put(1, paste);
+
+				String clientId = returnMap.get("clientId").toString();
+
+				controlInstance.invoke("sendMessageWithClientById", new Object[]{map, clientId}, this);
+			} else if (action.equals("show")) {
+				String paste = getClipboardText();
+
+				Map<Integer, String> map = new HashMap<Integer, String>();
+				map.put(0, "copiedText");
+				map.put(1, paste);
+
+				String clientId = returnMap.get("clientId").toString();
+
+				controlInstance.invoke("sendMessageWithClientById", new Object[]{map, clientId}, this);
+			}
+		} catch (Exception err) {
+			log.error("[sendRemoteCursorEvent]", err);
+		}
+	}
+
+	public String getClipboardText() {
+		try {
+			// get the system clipboard
+			Clipboard systemClipboard = getDefaultToolkit().getSystemClipboard();
+
+			// get the contents on the clipboard in a
+			// transferable object
+			Transferable clipboardContents = systemClipboard.getContents(null);
+
+			// check if clipboard is empty
+			if (clipboardContents == null) {
+				// Clipboard is empty!!!
+				return ("");
+
+				// see if DataFlavor of
+				// DataFlavor.stringFlavor is supported
+			} else if (clipboardContents.isDataFlavorSupported(stringFlavor)) {
+				// return text content
+				String returnText = (String) clipboardContents.getTransferData(stringFlavor);
+
+				return returnText;
+			}
+
+			return "";
+		} catch (Exception e) {
+			log.error("Unexpected exception while getting clipboard text", e);
+		}
+		return "";
+	}
+
+	private void pressSequence(Robot robot, long delay, int... codes) throws InterruptedException {
+		for (int code : codes) {
+			robot.keyPress(code);
+			Thread.sleep(delay);
+		}
+	}
+	
+	private String getHighlightedText(Robot robot) {
+		try {
+			if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") >= 0) {
+				// pressing STRG+C == copy
+				pressSequence(robot, 200, KeyEvent.VK_CONTROL, KeyEvent.VK_C, KeyEvent.VK_C, KeyEvent.VK_CONTROL);
+			} else {
+				// Macintosh simulate Copy
+				pressSequence(robot, 200, 157, 67, 67, 157);
+			}
+			return getClipboardText();
+		} catch (Exception e) {
+			log.error("Unexpected exception while getting highlighted text", e);
+		}
+		return "";
+	}
+
+	private void pressSpecialSign(String charValue, Robot robot) {
+		Clipboard clippy = getDefaultToolkit().getSystemClipboard();
+		try {
+			Transferable transferableText = new StringSelection(charValue);
+			clippy.setContents(transferableText, null);
+
+			if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") >= 0) {
+				// pressing STRG+V == insert-mode
+				pressSequence(robot, 100, KeyEvent.VK_CONTROL, KeyEvent.VK_V, KeyEvent.VK_V, KeyEvent.VK_CONTROL);
+			} else {
+				// Macintosh simulate Insert
+				pressSequence(robot, 100, 157, 86, 86, 157);
+			}
+		} catch (Exception e) {
+			log.error("Unexpected exception while pressSpecialSign", e);
+		}
+	}
+
+	public void resultReceived(IPendingServiceCall call) {
+		try {
+
+			log.trace("service call result: " + call);
+
+			String method = call == null ? null : call.getServiceMethodName();
+			Object o = call == null ? null : call.getResult();
+			log.trace("call ### get Method Name " + method);
+			if ("connect".equals(method)) {
+				if (o instanceof Map) {
+					@SuppressWarnings("unchecked")
+					Map<String, Object> map = (Map<String, Object>) o;
+					Object code = map.get("code");
+					if ("NetConnection.Connect.Rejected".equals(code) || "NetConnection.Connect.Failed".equals(code)) {
+						frame.setStatus(String.format("Error: %s %s", code, map.get("description")));
+						return;
+					}
+				}
+				if (!isConnected) {
+					instance.invoke("getPublicSID", null, this);
+				} else {
+					setConnectionAsSharingClient();
+				}
+				isConnected = true;
+			} else if ("getPublicSID".equals(method)) {
+				connect((String)o, true);
+			} else if ("setConnectionAsSharingClient".equals(method)) {
+				@SuppressWarnings("unchecked")
+				Map<String, Object> returnMap = (Map<String, Object>) o;
+
+				if (o == null || !bool(returnMap.get("alreadyPublished"))) {
+					log.trace("Stream not yet started - do it ");
+
+					instance.createStream(this);
+				} else {
+					log.trace("The Stream was already started ");
+				}
+				if (returnMap != null) {
+					Object modus = returnMap.get("modus");
+					if ("startStreaming".equals(modus)) {
+						frame.setSharingStatus(true, false);
+					}
+					if ("startRecording".equals(modus)) {
+						frame.setRecordingStatus(true, false);
+					}
+					if ("startPublishing".equals(modus)) {
+						frame.setPublishingStatus(true, false);
+						publishClient = new RTMPClientPublish(
+							this
+							, frame.getPublishHost()
+							, frame.getPublishApp()
+							, frame.getPublishId());
+						publishClient.connect();
+					}
+				} else {
+					throw new Exception("Could not aquire modus for event setConnectionAsSharingClient");
+				}
+
+			} else if ("createStream".equals(method)) {
+				if (startRecording || startStreaming) {
+					if (call.getResult() != null) {
+						getCapture().setStreamId((Integer)call.getResult());
+					}
+					log.debug("createPublishStream result stream id: {}; name: {}", getCapture().getStreamId(), publishName);
+					instance.publish(getCapture().getStreamId(), publishName, "live", this);
+	
+					log.debug("setup capture thread spinnerWidth = {}; spinnerHeight = {};", spinnerWidth, spinnerHeight);
+	
+					if (!getCapture().isAlive()) {
+						getCapture().setSendCursor(startStreaming);
+						getCapture().start();
+					}
+				}
+			} else if ("screenSharerAction".equals(method)) {
+				if (log.isTraceEnabled()) {
+					log.trace("Result Map Type " + (o == null ? null : o.getClass().getName()));
+				}
+
+				@SuppressWarnings("unchecked")
+				Map<String, Object> returnMap = (Map<String, Object>)o;
+				Object result = returnMap.get("result");
+				if ("stopAll".equals(result)) {
+					log.trace("Stopping to stream, there is neither a Desktop Sharing nor Recording anymore");
+					stopStream();
+				} else if ("stopSharingOnly".equals(result)) {
+					stopStreaming();
+				} else if ("stopRecordingOnly".equals(result)) {
+					stopRecording();
+				} else if ("stopPublishingOnly".equals(result)) {
+					stopPublishing();
+				}
+			} else if ("setNewCursorPosition".equals(method)) {
+				// Do not do anything
+			} else {
+				log.debug("Unknown method " + method);
+			}
+
+		} catch (Exception err) {
+			log.error("[resultReceived]", err);
+		}
+	}
+
+	public boolean isAudioNotify() {
+		return audioNotify;
+	}
+
+	public void setAudioNotify(boolean audioNotify) {
+		this.audioNotify = audioNotify;
+	}
+
+	public boolean isRemoteEnabled() {
+		return remoteEnabled;
+	}
+
+	public void setRemoteEnabled(boolean remoteEnabled) {
+		this.remoteEnabled = remoteEnabled;
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java
new file mode 100644
index 0000000..69acef3
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import java.io.IOException;
+
+import org.red5.server.net.rtmp.event.VideoData;
+
+public interface IScreenEncoder {
+	void createUnalteredFrame() throws IOException;
+	
+	VideoData getUnalteredFrame();
+
+	VideoData encode(int[][] img) throws IOException;
+	
+	void reset();
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java
new file mode 100644
index 0000000..8242a8a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import java.util.Map;
+
+import org.red5.client.net.rtmp.ClientExceptionHandler;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.messaging.IMessage;
+import org.red5.server.net.rtmp.RTMPConnection;
+
+public interface IScreenShare extends ClientExceptionHandler {
+	RTMPConnection getConnection();
+	void invoke(String method, Object[] params, IPendingServiceCallback callback);
+	Map<String, Object> makeDefaultConnectionParams(String server, int port, String application);
+	void connect(String server, int port, Map<String, Object> connectionParams, IPendingServiceCallback connectCallback);
+	void setServiceProvider(Object serviceProvider);
+	void disconnect();
+	void createStream(IPendingServiceCallback callback);
+	void publish(int streamId, String name, String mode, INetStreamEventHandler handler);
+	void publishStreamData(int streamId, IMessage message);
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java
new file mode 100644
index 0000000..987f22a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.event.Notify;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class RTMPClientPublish extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPClientPublish.class);
+	private final CaptureScreen publishScreen;
+	private String id;
+	private CoreScreenShare core;
+	
+	public void setCore(CoreScreenShare core) {
+		this.core = core;
+	}
+	
+	RTMPClientPublish(CoreScreenShare core, String host, String app, String id) {
+		this.id = id;
+		this.core = core;
+		publishScreen = new CaptureScreen(core, this, host, app, 1935);
+	}
+
+	public void connect() {
+		super.connect(publishScreen.getHost(), 1935, publishScreen.getApp(), this);
+	}
+	
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("ERROR", throwable);
+	}
+
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		super.connectionOpened(conn);
+		createStream(this);
+	}
+	
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		super.connectionClosed(conn);
+		connectionClosed();
+	}
+	
+	private void connectionClosed() {
+		publishScreen.setStartPublish(false);
+		publishScreen.release();
+		core.publishingStop();
+	}
+	
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+	}
+	
+	public void resultReceived(IPendingServiceCall call) {
+		String method = call == null ? null : call.getServiceMethodName();
+		logger.trace("call ### get Method Name " + method);
+		if ("connect".equals(method)) {
+			//setConnectionAsSharingClient(); //FIXME
+		} else if ("createStream".equals(method)) {
+			if (call.getResult() != null) {
+				publishScreen.setStreamId((Integer)call.getResult());
+				publish(publishScreen.getStreamId(), id, "live", this);
+				publishScreen.setStartPublish(true);
+				publishScreen.start();
+			} else {
+				connectionClosed();
+			}
+		}
+	}
+
+	public void onStreamEvent(Notify notify) {
+	}
+}
\ No newline at end of file
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
new file mode 100644
index 0000000..1197611
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmps.RTMPSClient;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPSScreenShare extends RTMPSClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPSScreenShare.class);
+
+	private CoreScreenShare core = null;
+
+	public RTMPSScreenShare(CoreScreenShare core) {
+		this.core = core;
+	};
+
+	@Override
+	public void connect(String server, int port, String application,
+			IPendingServiceCallback connectCallback) {
+		try { //FIXME need to be removed
+			super.connect(server, port, application, connectCallback);
+		} catch (NullPointerException npe) {
+			//no op, since RTMPSClient throws NPE
+		}
+	}
+	
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		this.conn = conn;
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
new file mode 100644
index 0000000..101b6c6
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPScreenShare extends RTMPClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPScreenShare.class);
+
+	private CoreScreenShare core = null;
+
+	public RTMPScreenShare(CoreScreenShare core) {
+		this.core = core;
+	}
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		this.conn = conn;
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
new file mode 100644
index 0000000..c83d506
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmpt.RTMPTClient;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPTScreenShare extends RTMPTClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPTScreenShare.class);
+
+	private CoreScreenShare core = null;
+
+	public RTMPTScreenShare(CoreScreenShare core) {
+		this.core = core;
+	};
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		this.conn = conn;
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java
new file mode 100644
index 0000000..e55eee7
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;
+import static org.red5.io.IoConstants.FLAG_CODEC_SCREEN;
+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_INTERFRAME;
+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_KEYFRAME;
+
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.Deflater;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.net.rtmp.event.VideoData;
+
+public class ScreenV1Encoder extends BaseScreenEncoder {
+	private int[][] last = null;
+	private static int KEY_FRAME_INDEX = 25;
+	private static int DEFAULT_BLOCK_SIZE = 32;
+	private static int DEFAULT_SCREEN_WIDTH = 1920;
+	private static int DEFAULT_SCREEN_HEIGHT = 1080;
+	private int keyFrameIndex;
+	private int frameCount = 0;
+	private int blockSize;
+	private ByteArrayOutputStream ba = new ByteArrayOutputStream(50 + 3 * DEFAULT_SCREEN_WIDTH * DEFAULT_SCREEN_HEIGHT);
+	private byte[] areaBuf = null;
+	private Deflater d = new Deflater(Deflater.DEFAULT_COMPRESSION);
+	private byte[] zipBuf = null;
+	private VideoData unalteredFrame = null;
+	
+	public ScreenV1Encoder() {
+		this(KEY_FRAME_INDEX, DEFAULT_BLOCK_SIZE);
+	}
+	
+	public ScreenV1Encoder(int keyFrameIndex) {
+		this(keyFrameIndex, DEFAULT_BLOCK_SIZE);
+	}
+	
+	//will create square blocks
+	public ScreenV1Encoder(int keyFrameIndex, int blockSize) {
+		this.keyFrameIndex = keyFrameIndex;
+		if (blockSize < 16 || blockSize > 256 || blockSize % 16 != 0) {
+			throw new RuntimeException("Invalid block size passed: " + blockSize + " should be: 'from 16 to 256 in multiples of 16'");
+		}
+		this.blockSize = blockSize;
+
+		areaBuf = new byte[3 * blockSize * blockSize];
+		zipBuf = new byte[3 * blockSize * blockSize];
+	}
+
+	private VideoData getData(byte[] data) {
+		IoBuffer buf = IoBuffer.allocate(data.length);
+		buf.clear();
+		buf.put(data);
+		buf.flip();
+		return new VideoData(buf);
+	}
+	
+	public void createUnalteredFrame() throws IOException {
+		if (last == null) {
+			return;
+		}
+		if (unalteredFrame == null) {
+			ByteArrayOutputStream ba = new ByteArrayOutputStream(200);
+			
+			Rectangle _area = new Rectangle(resizeX, resizeY);
+			//header
+			ba.write(getTag(FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
+			writeShort(ba, _area.width + ((blockSize / 16 - 1) << 12));
+			writeShort(ba, _area.height + ((blockSize / 16 - 1) << 12));
+			Rectangle area = getNextBlock(_area, null);
+			while (area.width > 0 && area.height > 0) {
+				writeShort(ba, 0);
+				area = getNextBlock(_area, area);
+			}
+			unalteredFrame = getData(ba.toByteArray());
+		}
+	}
+	
+	public VideoData getUnalteredFrame() {
+		if (unalteredFrame != null && (frameCount % keyFrameIndex) != 0) {
+			frameCount++;
+		}
+		return unalteredFrame;
+	}
+	
+	public synchronized VideoData encode(int[][] img) throws IOException {
+		ba.reset();
+		Rectangle imgArea = new Rectangle(img.length, img[0].length);
+		Rectangle area = getNextBlock(imgArea, null);
+		boolean isKeyFrame = (frameCount++ % keyFrameIndex) == 0 || last == null;
+		
+		//header
+		ba.write(getTag(isKeyFrame ? FLAG_FRAMETYPE_KEYFRAME : FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
+		writeShort(ba, imgArea.width + ((blockSize / 16 - 1) << 12));
+		writeShort(ba, imgArea.height + ((blockSize / 16 - 1) << 12));
+		
+		while (area.width > 0 && area.height > 0) {
+			writeBytesIfChanged(ba, isKeyFrame, img, area);
+			area = getNextBlock(imgArea, area);
+		}
+		last = img;
+		return getData(ba.toByteArray());
+	}
+	
+	public void reset() {
+		last = null;
+		unalteredFrame = null;
+	}
+	
+	private Rectangle getNextBlock(Rectangle img, Rectangle _prev) {
+		Rectangle prev;
+		if (_prev == null) {
+			prev = new Rectangle(0, Math.max(0, img.height - blockSize), blockSize, blockSize);
+		} else {
+			prev = new Rectangle(_prev);
+			if (prev.x + prev.width == img.getWidth()) {
+				if (prev.y == 0) return new Rectangle(); //the end of the image
+				//next row
+				prev.x = 0; //reset position
+				prev.width = blockSize; //reset width
+				prev.height = (prev.y > blockSize ? blockSize : prev.y);
+				prev.y -= prev.height;
+			} else {
+				prev.x += blockSize;
+			}
+		}
+		return img.intersection(prev); 
+	}
+
+	private void writeBytesIfChanged(ByteArrayOutputStream ba, boolean isKeyFrame, int[][] img, Rectangle area) throws IOException {
+		boolean changed = isKeyFrame;
+		int count = 0;
+		for (int y = area.y + area.height - 1; y >= area.y; --y) {
+			for (int x = area.x; x < area.x + area.width; ++x) {
+				int pixel = img[x][y];
+				if (!changed && (last == null || pixel != last[x][y])) {
+					changed = true;
+				}
+				areaBuf[count++] = (byte)(pixel & 0xFF);			// Blue component
+				areaBuf[count++] = (byte)((pixel >> 8) & 0xFF);		// Green component
+				areaBuf[count++] = (byte)((pixel >> 16) & 0xFF);	// Red component
+			}
+		}
+		if (changed) {
+			d.reset();
+			d.setInput(areaBuf, 0, count);
+			d.finish();
+			int written = d.deflate(zipBuf);
+			writeShort(ba, written);
+			ba.write(zipBuf, 0, written);
+		} else {
+			writeShort(ba, 0);
+		}
+	}
+
+	public int getTag(final int frame, final int codec) {
+		return ((frame & 0x0F) << 4) + ((codec & 0x0F) << 0);
+	}
+	
+	private void writeShort(OutputStream os, final int n) throws IOException {
+		os.write((n >> 8) & 0xFF);
+		os.write((n >> 0) & 0xFF);
+	}
+	
+	public static int[][] getImage(Rectangle screen, Robot robot) {
+		int[][] buffer = new int[resizeX][resizeY];
+		BufferedImage image = resize(robot.createScreenCapture(screen), new Rectangle(resizeX, resizeY));
+		for (int x = 0; x < image.getWidth(); ++x) {
+			for (int y = 0; y < image.getHeight(); ++y) {
+				buffer[x][y] = image.getRGB(x, y);
+			}
+		}
+		return buffer;
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java
new file mode 100644
index 0000000..c8f85e0
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import javax.swing.*;
+import java.awt.Dimension;
+import java.awt.Color;
+
+public class BlankArea extends MouseListenerable {
+	private static final long serialVersionUID = 1L;
+	private Dimension minSize = new Dimension(100, 50);
+
+    public BlankArea(Color color) {
+        setBackground(color);
+        setOpaque(false);
+		setHorizontalAlignment(SwingConstants.LEFT);
+		setVerticalAlignment(SwingConstants.TOP);
+		setHorizontalTextPosition(0);
+		setVerticalTextPosition(0);
+        setBorder(BorderFactory.createLineBorder(Color.black));
+        setMinimumSize(minSize);
+        setPreferredSize(minSize);
+    }
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java
new file mode 100644
index 0000000..5e30200
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.event.MouseAdapter;
+
+import javax.swing.JLabel;
+
+public class MouseListenerable extends JLabel {
+	private static final long serialVersionUID = 1L;
+
+	public void addListener(MouseAdapter listner) {
+		addMouseListener(listner);
+		addMouseMotionListener(listner);
+	}
+}
\ No newline at end of file
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java
new file mode 100644
index 0000000..7b682f4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+
+public class NumberSpinner extends JSpinner {
+	private static final long serialVersionUID = 1L;
+
+	public NumberSpinner(int value, int min, int max, int step) {
+		super(new SpinnerNumberModel(value, min, max, step));
+	}
+	
+	public Integer getValue() {
+		return (Integer)super.getValue();
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java
new file mode 100644
index 0000000..e35173f
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+
+public class ScreenDimensions {
+	public static final int ROUND_VALUE = 16;
+	/**
+	 * image recalcing value's from the virtual Screen drawer
+	 */
+	public static int width = 200;
+	public static int height = 0;
+
+	/**
+	 * Values calced by the original Screen
+	 */
+
+	public static double ratio = 0;
+
+	public static int widthMax = 0;
+	public static int heightMax = 0;
+
+	/**
+	 * Values set by the virtualScreen
+	 */
+	public static int spinnerWidth = 0;
+	public static int spinnerHeight = 0;
+	public static int spinnerX = 0;
+	public static int spinnerY = 0;
+	
+	public static ScreenQuality quality = ScreenQuality.Medium;
+	public static int FPS = 10;
+	
+	public static int resizeX = 640;
+	public static int resizeY = 480;
+	
+	static {
+		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+		ratio = screenSize.getHeight() / screenSize.getWidth();
+		widthMax = (int)screenSize.getWidth();
+		heightMax = (int)screenSize.getHeight();
+		height = (int)(width * ratio);
+		spinnerX = 0;
+		spinnerY = 0;
+		spinnerWidth = widthMax;
+		spinnerHeight = heightMax;
+		resizeX = 640;
+		resizeY = 400;
+	}
+	
+	public enum ScreenQuality {
+		VeryHigh
+		, High
+		, Medium
+		, Low
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java
new file mode 100644
index 0000000..1426b2c
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenHeightMouseListener extends MouseInputAdapter  {
+	private ScreenSharerFrame frame;
+	private double y = 0;
+
+	public ScreenHeightMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+	
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newY = e.getY();
+
+		int newHeight = ScreenDimensions.spinnerHeight - (int)(y - newY);
+		int newSpinnerY = ScreenDimensions.spinnerY + newHeight;
+
+		if (newSpinnerY >= 0 && newSpinnerY <= ScreenDimensions.heightMax) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerHeight(newHeight);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java
new file mode 100644
index 0000000..603162a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ScreenKeyListener implements KeyListener {
+	private static final Logger logger = LoggerFactory.getLogger(ScreenKeyListener.class);
+
+	public void keyPressed(KeyEvent kEvent) {
+		logger.debug("keyPressed :Code: " + kEvent.getKeyCode());
+	}
+
+	public void keyReleased(KeyEvent kEvent) {
+		logger.debug("keyReleased :Code: " + kEvent.getKeyCode());
+	}
+
+	public void keyTyped(KeyEvent arg0) {
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java
new file mode 100644
index 0000000..791abe7
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private int x = 0;
+	private int y = 0;
+
+	public ScreenMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+		this.y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		int newX = e.getX();
+		int newY = e.getY();
+
+		int newXPosition = ScreenDimensions.spinnerX - (this.x - newX);
+		int newYPosition = ScreenDimensions.spinnerY - (this.y - newY);
+		if (newXPosition >= 0) {
+			frame.setSpinnerX(newXPosition);
+		}
+		if (newYPosition >= 0) {
+			frame.setSpinnerY(newYPosition);
+		}
+
+		frame.calcRescaleFactors();
+	}
+
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java
new file mode 100644
index 0000000..8c5a1e4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java
@@ -0,0 +1,855 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.ROUND_VALUE;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.awt.AWTException;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.SystemColor;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+
+import javax.swing.BorderFactory;
+import javax.swing.GroupLayout;
+import javax.swing.GroupLayout.Alignment;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.apache.openmeetings.screen.webstart.CoreScreenShare;
+import org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.ScreenQuality;
+import org.slf4j.Logger;
+
+public class ScreenSharerFrame extends JFrame {
+	private static final long serialVersionUID = 1L;
+	private static final Logger logger = getLogger(ScreenSharerFrame.class);
+	
+	private JPanel contentPane;
+	private JPanel panelScreen = new DisabledPanel();
+	private JPanel panelRecording = new DisabledPanel();
+	private JPanel panelPublish = new DisabledPanel();
+	private JLabel lblStatus = new JLabel();
+	private int vScreenX = 20;
+	private int vScreenY = 20;
+	private VerticalSlider upSlider = new VerticalSlider();
+	private VerticalSlider downSlider = new VerticalSlider();
+	private HorizontalSlider leftSlider = new HorizontalSlider();
+	private HorizontalSlider rightSlider = new HorizontalSlider();
+	private BlankArea virtualScreen = new BlankArea(new Color(255, 255, 255, 100));
+	private JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+	private boolean doUpdateBounds = true;
+	private boolean showWarning = true;
+	private JButton btnStartStopSharing;
+	private JButton btnStartStopRecording;
+	private JButton btnStartStopPublish;
+	private NumberSpinner spinnerX;
+	private NumberSpinner spinnerY;
+	private NumberSpinner spinnerWidth;
+	private NumberSpinner spinnerHeight;
+	private JComboBox<KeyValue<ScreenQuality>> comboQuality;
+	private JComboBox<KeyValue<Integer>> comboFPS;
+	private JTextField textPublishHost;
+	private JTextField textPublishApp;
+	private JTextField textPublishId;
+	private JLabel lblPublishURL;
+	private boolean sharingStarted = false;
+	private boolean recordingStarted = false;
+	private boolean publishStarted = false;
+	private boolean recordingActionRequested = false;
+	private boolean publishingActionRequested = false;
+	private boolean sharingActionRequested = false;
+	private ImageIcon startIcon;
+	private ImageIcon stopIcon;
+	private String startSharingLabel;
+	private String stopSharingLabel;
+	private String startRecordingLabel;
+	private String stopRecordingLabel;
+	private String startPublishLabel;
+	private String stopPublishLabel;
+	private String reduceWidthLabel;
+	private String reduceHeightLabel;
+	private String reduceXLabel;
+	private String reduceYLabel;
+	private String recordingTipLabel;
+	private String publishingTipLabel;
+	private JCheckBox audioNotify;
+	
+	private class PublishTextField extends JTextField {
+		private static final long serialVersionUID = 1L;
+
+		PublishTextField() {
+			getDocument().addDocumentListener(
+				new DocumentListener() {
+					public void changedUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+
+					public void removeUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+
+					public void insertUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+				});
+
+			setColumns(10);
+		}
+	}
+	
+	private static class KeyValue<T> {
+		private String key;
+		private T value;
+		
+		public KeyValue(String key, T value) {
+			this.key = key;
+			this.value = value;
+		}
+	 
+		@SuppressWarnings("unused")
+		public String getKey() { return key; }
+		public T getValue() { return value; }
+	 
+		@Override
+		public String toString() { return key; }
+	 
+		@Override
+		public boolean equals(Object obj) {
+			if (obj instanceof KeyValue) {
+				@SuppressWarnings("unchecked")
+				KeyValue<T> kv = (KeyValue<T>) obj;
+				return (kv.value.equals(this.value));
+			}
+			return false;
+		}
+	 
+		@Override
+		public int hashCode() {
+			int hash = 7;
+			hash = 97 * hash + (this.value != null ? this.value.hashCode() : 0);
+			return hash;
+		}
+	}
+	
+	//this implementation will not allow to Enable Panel in runtime
+	private static class DisabledPanel extends JPanel {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public void setEnabled(boolean enabled) {
+			for (Component c : getComponents()) {
+				c.setEnabled(enabled);
+			}
+			super.setEnabled(enabled);
+		}
+	}
+	
+	private static class VerticalSlider extends MouseListenerable {
+		private static final long serialVersionUID = 1L;
+
+		public VerticalSlider() {
+			ImageIcon iUp = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/up.png"));
+			ImageIcon iDown = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/down.png"));
+			setSize(16, 32);
+			JLabel jUp = new JLabel(iUp);
+			jUp.setBounds(0, 0, 16, 16);
+			add(jUp);
+			JLabel jDown = new JLabel(iDown);
+			jDown.setBounds(0, 16, 16, 16);
+			add(jDown);
+		}
+	}
+	
+	private static class HorizontalSlider extends MouseListenerable {
+		private static final long serialVersionUID = 1L;
+
+		public HorizontalSlider() {
+			ImageIcon iLeft = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/previous.png"));
+			ImageIcon iRight = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/next.png"));
+			setSize(32, 16);
+			JLabel jLeft = new JLabel(iLeft);
+			jLeft.setBounds(0, 0, 16, 16);
+			add(jLeft);
+			JLabel jRight = new JLabel(iRight);
+			jRight.setBounds(16, 0, 16, 16);
+			add(jRight);
+		}
+	}
+	
+	private String getTextLabel(String[] textLabels, int idx) {
+		return textLabels != null && idx < textLabels.length ? textLabels[idx] : "#STAB#";
+	}
+	
+	/**
+	 * Create the frame.
+	 * @throws AWTException 
+	 * @throws IOException 
+	 */
+	public ScreenSharerFrame(final CoreScreenShare core, String[] textLabels) throws AWTException {
+		setTitle(getTextLabel(textLabels, 0)); //#id 730
+		setBackground(Color.WHITE);
+		setResizable(false);
+		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+		addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(WindowEvent e) {
+				core.stopStream();
+				ScreenSharerFrame.this.setVisible(false);
+				System.exit(0);
+			}
+		});
+		setBounds(30, 30, 500, 505);
+		contentPane = new JPanel();
+		contentPane.setBackground(Color.WHITE);
+		contentPane.setBorder(new EmptyBorder(5, 0, 5, 5));
+		setContentPane(contentPane);
+		
+		JLabel lblStartSharing = new JLabel(getTextLabel(textLabels, 1)); //#id 731
+		
+		startSharingLabel = getTextLabel(textLabels, 2); //#id 732
+		stopSharingLabel = getTextLabel(textLabels, 3); //#id 733
+		startRecordingLabel = getTextLabel(textLabels, 15); //#id 871
+		stopRecordingLabel = getTextLabel(textLabels, 16); //#id 872
+		startPublishLabel = getTextLabel(textLabels, 24); //#id 1466
+		stopPublishLabel = getTextLabel(textLabels, 25); //#id 1467
+		reduceWidthLabel = getTextLabel(textLabels, 29); //#id 1471
+		reduceHeightLabel = getTextLabel(textLabels, 30); //#id 1472
+		reduceXLabel = getTextLabel(textLabels, 31); //#id 1473
+		reduceYLabel = getTextLabel(textLabels, 32); //#id 1474
+		recordingTipLabel = getTextLabel(textLabels, 35); //#id 1477
+		publishingTipLabel = getTextLabel(textLabels, 34); //#id 1476
+		startIcon = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/play.png"));
+		stopIcon = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/stop.png"));
+		btnStartStopSharing = new JButton(startSharingLabel);
+		btnStartStopSharing.setToolTipText(startSharingLabel);
+		btnStartStopSharing.setIcon(startIcon);
+		btnStartStopSharing.setSize(200, 32);
+		btnStartStopSharing.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (sharingStarted) {
+					if (!sharingActionRequested) {
+						sharingActionRequested = true;
+						core.streamingStop();
+					} else {
+						logger.warn("Sharing action is already requested");
+					}
+				} else {
+					if (!sharingActionRequested) {
+						sharingActionRequested = true;
+						core.streamingStart();
+					} else {
+						logger.warn("Sharing action is already requested");
+					}
+				}
+			}
+		});
+		
+		JLabel lblSelectArea = new JLabel(getTextLabel(textLabels, 4)); //#id 734
+		JPanel panelStatus = new JPanel();
+		audioNotify = new JCheckBox(getTextLabel(textLabels, 36)); //#id 1589
+		audioNotify.setBackground(Color.WHITE);
+		audioNotify.setSelected(core.isAudioNotify());
+		audioNotify.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				core.setAudioNotify(audioNotify.isSelected());
+			}
+		});
+		
+		GroupLayout gl_contentPane = new GroupLayout(contentPane);
+		gl_contentPane.setHorizontalGroup(
+			gl_contentPane.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_contentPane.createSequentialGroup()
+					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(7)
+							.addComponent(lblStartSharing)
+							.addGap(15)
+							.addComponent(audioNotify))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(21)
+							.addComponent(btnStartStopSharing, 200, 200, 200)
+							.addGap(52)
+							)
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(7)
+							.addComponent(lblSelectArea, GroupLayout.PREFERRED_SIZE, 470, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addContainerGap()
+							.addComponent(panelScreen, GroupLayout.PREFERRED_SIZE, 472, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addContainerGap()
+							.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 472, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addComponent(panelStatus, 494, 494, 494)))
+					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+		);
+		gl_contentPane.setVerticalGroup(
+			gl_contentPane.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_contentPane.createSequentialGroup()
+					.addGap(7)
+					.addComponent(lblStartSharing)
+					.addGap(4)
+					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
+						.addComponent(btnStartStopSharing, 32, 32, 32).addComponent(audioNotify, 32, 32, 32)
+						)
+					.addGap(4)
+					.addComponent(lblSelectArea)
+					.addGap(4)
+					.addComponent(panelScreen, 210, 210, 210)
+					.addGap(4)
+					.addComponent(tabbedPane, 150, 150, 150)
+					.addGap(5)
+					.addComponent(panelStatus, 20, 20, 20)
+					)
+		);
+		panelScreen.setLayout(null);
+		panelScreen.setBackground(Color.WHITE);
+		
+		int width = ScreenDimensions.width;
+		int height = ScreenDimensions.height;
+		
+		//Sliders
+		upSlider.addListener(new ScreenYMouseListener(this));
+		upSlider.setToolTipText(getTextLabel(textLabels, 6)); //#id 737
+		panelScreen.add(upSlider);
+		downSlider.addListener(new ScreenHeightMouseListener(this));
+		downSlider.setToolTipText(getTextLabel(textLabels, 6)); //#id 737
+		panelScreen.add(downSlider);
+		
+		leftSlider.addListener(new ScreenXMouseListener(this));
+		leftSlider.setToolTipText(getTextLabel(textLabels, 5)); //#id 735
+		panelScreen.add(leftSlider);
+		rightSlider.addListener(new ScreenWidthMouseListener(this));
+		rightSlider.setToolTipText(getTextLabel(textLabels, 5)); //#id 735
+		panelScreen.add(rightSlider);
+		
+		//Virtual Screen
+		virtualScreen.addListener(new ScreenMouseListener(this));
+		virtualScreen.setBounds(vScreenX, vScreenY, width, height);
+		panelScreen.add(virtualScreen);
+
+		ImageIcon imgBgScreen = new ImageIcon(
+			new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()))
+				.getScaledInstance(width, height, Image.SCALE_SMOOTH));
+		JLabel bgScreen = new JLabel(imgBgScreen);
+		bgScreen.setBounds(vScreenX, vScreenY, width, height);
+		panelScreen.add(bgScreen);
+		
+		//Spinner Width
+		JLabel vscreenWidthLabel = new JLabel();
+		vscreenWidthLabel.setText(getTextLabel(textLabels, 9)); //#id 740
+		vscreenWidthLabel.setBounds(250, 20, 150, 24);
+		panelScreen.add(vscreenWidthLabel);
+
+		spinnerWidth = new NumberSpinner(ScreenDimensions.spinnerWidth, 0, ScreenDimensions.widthMax, 1);
+		spinnerWidth.setBounds(400, 20, 60, 24);
+		spinnerWidth.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueWidthSpin();
+			}
+		});
+		panelScreen.add(spinnerWidth);
+
+		//Spinner Height
+		JLabel labelHeight = new JLabel();
+		labelHeight.setText(getTextLabel(textLabels, 10)); //#id 741
+		labelHeight.setBounds(250, 50, 150, 24);
+		panelScreen.add(labelHeight);
+
+		spinnerHeight = new NumberSpinner(ScreenDimensions.spinnerHeight, 0, ScreenDimensions.heightMax, 1);
+		spinnerHeight.setBounds(400, 50, 60, 24);
+		spinnerHeight.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueHeightSpin();
+			}
+		});
+		panelScreen.add(spinnerHeight);
+
+		//Spinner X
+		JLabel labelX = new JLabel();
+		labelX.setText(getTextLabel(textLabels, 7)); //#id 738
+		labelX.setBounds(250, 80, 150, 24);
+		panelScreen.add(labelX);
+
+		spinnerX = new NumberSpinner(ScreenDimensions.spinnerX, 0, ScreenDimensions.widthMax, 1);
+		spinnerX.setBounds(400, 80, 60, 24);
+		spinnerX.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueXSpin();
+			}
+		});
+		panelScreen.add(spinnerX);
+
+		//Spinner Y
+		JLabel labelY = new JLabel();
+		labelY.setText(getTextLabel(textLabels, 8)); //#id 739
+		labelY.setBounds(250, 110, 150, 24);
+		panelScreen.add(labelY);
+
+		spinnerY = new NumberSpinner(ScreenDimensions.spinnerY, 0, ScreenDimensions.heightMax, 1);
+		spinnerY.setBounds(400, 110, 60, 24);
+		spinnerY.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueYSpin();
+			}
+		});
+		panelScreen.add(spinnerY);
+		
+		//Quality
+		JLabel labelQuality = new JLabel();
+		labelQuality.setText(getTextLabel(textLabels, 18)); //#id 1089
+		labelQuality.setBounds(250, 140, 200, 24);
+		panelScreen.add(labelQuality);
+		
+		comboQuality = new JComboBox<KeyValue<ScreenQuality>>();
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 19), ScreenQuality.VeryHigh)); //#id 1090
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 20), ScreenQuality.High)); //#id 1091
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 21), ScreenQuality.Medium)); //#id 1092
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 22), ScreenQuality.Low)); //#id 1093
+		comboQuality.setBounds(250, 170, 130, 24);
+		comboQuality.addActionListener(new ActionListener() {
+			@SuppressWarnings("unchecked")
+			public void actionPerformed(ActionEvent e) {
+		        ScreenDimensions.quality = ((KeyValue<ScreenQuality>)comboQuality.getSelectedItem()).getValue();
+		        calcRescaleFactors();
+			}
+		}); 
+		comboQuality.setSelectedIndex(core.defaultQuality);
+		panelScreen.add(comboQuality);
+		comboFPS = new JComboBox<KeyValue<Integer>>();
+		comboFPS.addItem(new KeyValue<Integer>("2 FPS", 2));
+		comboFPS.addItem(new KeyValue<Integer>("5 FPS", 5));
+		comboFPS.addItem(new KeyValue<Integer>("10 FPS", 10));
+		comboFPS.addItem(new KeyValue<Integer>("15 FPS", 15));
+		comboFPS.addItem(new KeyValue<Integer>("20 FPS", 20));
+		comboFPS.addItem(new KeyValue<Integer>("25 FPS", 25));
+		comboFPS.addItem(new KeyValue<Integer>("30 FPS", 30));
+		comboFPS.addActionListener(new ActionListener() {
+			@SuppressWarnings("unchecked")
+			public void actionPerformed(ActionEvent e) {
+		        ScreenDimensions.FPS = ((KeyValue<Integer>)comboFPS.getSelectedItem()).getValue();
+		        calcRescaleFactors();
+			}
+		});
+		boolean fpsSelected = false;
+		for (int i = 0; i < comboFPS.getItemCount(); ++i) {
+			KeyValue<Integer> v = comboFPS.getItemAt(i);
+			if (core.defaultFPS == v.value) {
+				comboFPS.setSelectedIndex(i);
+				fpsSelected = true;
+				break;
+			}
+		}
+		if (!fpsSelected) {
+			comboFPS.addItem(new KeyValue<Integer>(core.defaultFPS + " FPS", core.defaultFPS));
+			comboFPS.setSelectedIndex(comboFPS.getItemCount() - 1);
+		}
+		comboFPS.setBounds(390, 170, 70, 24);
+		comboFPS.setVisible(core.showFPS);
+		panelScreen.add(comboFPS);
+		
+		panelRecording.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 13), null, panelRecording, null); //#id 869
+		tabbedPane.setEnabledAt(0, true);
+		panelRecording.setLayout(null);
+		panelRecording.setEnabled(false);
+		
+		JLabel lblRecordingDesc = new JLabel("<html>" + getTextLabel(textLabels, 14) + "</html>"); //#id 870
+		lblRecordingDesc.setVerticalAlignment(SwingConstants.TOP);
+		lblRecordingDesc.setBounds(10, 10, 447, 60);
+		panelRecording.add(lblRecordingDesc);
+		
+		btnStartStopRecording = new JButton(getTextLabel(textLabels, 15)); //#id 871
+		btnStartStopRecording.setToolTipText(getTextLabel(textLabels, 15)); //#id 871
+		btnStartStopRecording.setIcon(startIcon);
+		btnStartStopRecording.setBounds(10, 82, 200, 32);
+		btnStartStopRecording.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (recordingStarted) {
+					if (!recordingActionRequested) {
+						recordingActionRequested = true;
+						core.recordingStop();
+					} else {
+						logger.warn("Recording action is already requested");
+					}
+				} else {
+					if (!recordingActionRequested) {
+						recordingActionRequested = true;
+						core.recordingStart();
+					} else {
+						logger.warn("Recording action is already requested");
+					}
+				}
+			}
+		});
+		panelRecording.add(btnStartStopRecording);
+		
+		panelPublish.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 23), null, panelPublish, null); //#id 1465
+		tabbedPane.setEnabledAt(1, true);
+		panelPublish.setEnabled(false);
+		panelPublish.setLayout(null);
+		
+		JLabel lblPublishDesc = new JLabel(getTextLabel(textLabels, 33)); //#id 1475
+		lblPublishDesc.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishDesc.setBounds(10, 5, 450, 20);
+		panelPublish.add(lblPublishDesc);
+		
+		JLabel lblPublishHost = new JLabel(getTextLabel(textLabels, 26)); //#id 1468
+		lblPublishHost.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishHost.setBounds(10, 27, 140, 20);
+		panelPublish.add(lblPublishHost);
+		
+		JLabel lblPublishApp = new JLabel(getTextLabel(textLabels, 27)); //#id 1469
+		lblPublishApp.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishApp.setBounds(160, 27, 140, 20);
+		panelPublish.add(lblPublishApp);
+		
+		JLabel lblPublishId = new JLabel(getTextLabel(textLabels, 28)); //#id 1470
+		lblPublishId.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishId.setBounds(310, 27, 140, 20);
+		panelPublish.add(lblPublishId);
+		
+		textPublishHost = new PublishTextField();
+		textPublishHost.setBounds(10, 45, 140, 20);
+		panelPublish.add(textPublishHost);
+		
+		textPublishApp = new PublishTextField();
+		textPublishApp.setBounds(160, 45, 140, 20);
+		panelPublish.add(textPublishApp);
+		
+		textPublishId = new PublishTextField();
+		textPublishId.setBounds(310, 45, 140, 20);
+		panelPublish.add(textPublishId);
+		
+		lblPublishURL = new JLabel("");
+		lblPublishURL.setBounds(10, 69, 447, 14);
+		panelPublish.add(lblPublishURL);
+		
+		btnStartStopPublish = new JButton(getTextLabel(textLabels, 24)); //#id 1466
+		btnStartStopPublish.setToolTipText(getTextLabel(textLabels, 24)); //#id 1466
+		btnStartStopPublish.setIcon(startIcon);
+		btnStartStopPublish.setBounds(10, 86, 200, 32);
+		btnStartStopPublish.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (publishStarted) {
+					if (!publishingActionRequested) {
+						publishingActionRequested = true;
+						core.publishingStop();
+					} else {
+						logger.warn("Publishing action is already requested");
+					}
+				} else {
+					if (!publishingActionRequested) {
+						publishingActionRequested = true;
+						core.publishingStart();
+					} else {
+						logger.warn("Publishing action is already requested");
+					}
+				}
+			}
+		});
+		panelPublish.add(btnStartStopPublish);
+		
+		JPanel panelSecurity = new JPanel();
+		panelSecurity.setLayout(null);
+		panelSecurity.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 37), null, panelSecurity, null); //#id 1598
+		
+		final JCheckBox remoteEnabled = new JCheckBox(getTextLabel(textLabels, 38)); //#id 1078
+		remoteEnabled.setBackground(Color.WHITE);
+		remoteEnabled.setSelected(core.isRemoteEnabled());
+		remoteEnabled.setBounds(10, 10, 450, 24);
+		remoteEnabled.setEnabled(core.allowRemote);
+		remoteEnabled.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				core.setRemoteEnabled(remoteEnabled.isSelected());
+			}
+		});
+		panelSecurity.add(remoteEnabled);
+		
+		panelStatus.setBackground(SystemColor.control);
+		panelStatus.setLayout(null);
+		lblStatus.setHorizontalAlignment(SwingConstants.LEFT);
+		lblStatus.setBounds(0, 0, 494, 20);
+		lblStatus.setBorder(BorderFactory.createCompoundBorder(
+				BorderFactory.createLineBorder(Color.LIGHT_GRAY),
+				BorderFactory.createEmptyBorder(0, 5, 0, 0)));
+		panelStatus.add(lblStatus);
+		
+		contentPane.setLayout(gl_contentPane);
+		
+		// Background Image
+		//We have no logo, that is why we need no background, sebawagner 29.04.2012
+	}
+
+	public void setSharingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != sharingStarted) {
+			sharingActionRequested = false;
+		}
+		logger.debug("sharingActionRequested=" + sharingActionRequested);
+		sharingStarted = status;
+		btnStartStopSharing.setIcon(status ? stopIcon : startIcon);
+		btnStartStopSharing.setText(status ? stopSharingLabel : startSharingLabel);
+		btnStartStopSharing.setToolTipText(status ? stopSharingLabel : startSharingLabel);
+	}
+	
+	public void setRecordingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != recordingStarted) {
+			recordingActionRequested = false;
+		}
+		logger.debug("recordingActionRequested=" + recordingActionRequested);
+		recordingStarted = status;
+		btnStartStopRecording.setIcon(status ? stopIcon : startIcon);
+		btnStartStopRecording.setText(status ? stopRecordingLabel : startRecordingLabel);
+		btnStartStopRecording.setToolTipText(status ? stopRecordingLabel : startRecordingLabel);
+	}
+	
+	public void setPublishingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != publishStarted) {
+			publishingActionRequested = false;
+		}
+		publishStarted = status;
+		btnStartStopPublish.setIcon(status ? stopIcon : startIcon);
+		btnStartStopPublish.setText(status ? stopPublishLabel : startPublishLabel);
+		btnStartStopPublish.setToolTipText(status ? stopPublishLabel : startPublishLabel);
+	}
+	
+	public void setRecordingTabEnabled(boolean enabled) {
+		panelRecording.setEnabled(enabled);
+		tabbedPane.setEnabledAt(0, enabled);
+		tabbedPane.setToolTipTextAt(0, enabled ? null : recordingTipLabel);
+	}
+	
+	public void setPublishingTabEnabled(boolean enabled) {
+		panelPublish.setEnabled(enabled);
+		tabbedPane.setEnabledAt(1, enabled);
+		tabbedPane.setToolTipTextAt(1, enabled ? null : publishingTipLabel);
+	}
+	
+	public String getPublishHost() {
+		return textPublishHost.getText();
+	}
+	
+	public String getPublishApp() {
+		return textPublishApp.getText();
+	}
+	
+	public String getPublishId() {
+		return textPublishId.getText();
+	}
+	
+	private void updatePublishURL() {
+		lblPublishURL.setText("rtmp://" + textPublishHost.getText() + ":1935/"
+				+ textPublishApp.getText() + "/" + textPublishId.getText());
+	}
+	
+	public void setShowWarning(boolean showWarning) {
+		this.showWarning = showWarning;
+	}
+	
+	public void setDoUpdateBounds(boolean doUpdateBounds) {
+		this.doUpdateBounds = doUpdateBounds;
+	}
+	
+	public void setStatus(String status) {
+		lblStatus.setText(status);
+	}
+
+	public void setSpinnerX(int val) {
+		spinnerX.setValue(val);
+	}
+
+	public void setSpinnerY(int val) {
+		spinnerY.setValue(val);
+	}
+
+	public void setSpinnerWidth(int val) {
+		spinnerWidth.setValue(val);
+	}
+
+	public void setSpinnerHeight(int val) {
+		spinnerHeight.setValue(val);
+	}
+
+	void calcNewValueXSpin() {
+		if (doUpdateBounds) {
+			int newX = spinnerX.getValue();
+			if (ScreenDimensions.spinnerWidth + newX > ScreenDimensions.widthMax) {
+				newX = ScreenDimensions.widthMax - ScreenDimensions.spinnerWidth;
+				spinnerX.setValue(newX);
+				if (showWarning) {
+					setStatus(reduceWidthLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerX = newX;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerX = spinnerX.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueYSpin() {
+		if (doUpdateBounds) {
+			int newY = spinnerY.getValue();
+			if (ScreenDimensions.spinnerHeight + newY > ScreenDimensions.heightMax) {
+				newY = ScreenDimensions.heightMax - ScreenDimensions.spinnerHeight;
+				spinnerY.setValue(newY);
+				if (showWarning) {
+					setStatus(reduceHeightLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerY = newY;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerY = spinnerY.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueWidthSpin() {
+		if (doUpdateBounds) {
+			int newWidth = spinnerWidth.getValue();
+			if (ScreenDimensions.spinnerX + newWidth > ScreenDimensions.widthMax) {
+				newWidth = ScreenDimensions.widthMax - ScreenDimensions.spinnerX;
+				spinnerWidth.setValue(newWidth);
+				if (showWarning) {
+					setStatus(reduceXLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerWidth = newWidth;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerWidth = spinnerWidth.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueHeightSpin() {
+		if (doUpdateBounds) {
+			int newHeight = spinnerHeight.getValue();
+			if (ScreenDimensions.spinnerY + newHeight > ScreenDimensions.heightMax) {
+				newHeight = ScreenDimensions.heightMax - ScreenDimensions.spinnerY;
+				spinnerHeight.setValue(newHeight);
+				if (showWarning) {
+					setStatus(reduceYLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerHeight = newHeight;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerHeight = spinnerHeight.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	/**
+	 * Needs to be always invoked after every re-scaling
+	 */
+	void calcRescaleFactors() {
+		logger.trace("calcRescaleFactors -- ");
+		resizeX = spinnerWidth.getValue();
+		resizeY = spinnerHeight.getValue();
+		switch (ScreenDimensions.quality) {
+			case Low:
+				resizeX = (int)(2.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(2.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case Medium:
+				resizeX = (int)(4.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(4.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case High:
+				resizeX = (int)(6.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(6.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case VeryHigh:
+			default:
+				break;
+		}
+		int dX = resizeX % ROUND_VALUE;
+		int dY = resizeY % ROUND_VALUE;
+		resizeX += dX == 0 ? 0 : ROUND_VALUE - dX;
+		resizeY += dY == 0 ? 0 : ROUND_VALUE - dY;
+		logger.trace("resize: X:" + resizeX + " Y: " + resizeY);
+		updateVScreenBounds();
+	}
+
+	private void setVScreenBounds(int x, int y, int width, int height) {
+		leftSlider.setBounds(x + vScreenX - 16, y + vScreenY - 8 + (height / 2), 32, 16);
+		rightSlider.setBounds(x + vScreenX + width - 16, y + vScreenY - 8 + (height / 2), 32, 16);
+		upSlider.setBounds(x + vScreenX + (width / 2) - 8, y + vScreenY - 16, 16, 32);
+		downSlider.setBounds(x + vScreenX + (width / 2) - 8, y + vScreenY - 16 + height, 16, 32);
+		
+		virtualScreen.setText(ScreenDimensions.spinnerWidth + ":" + ScreenDimensions.spinnerHeight);
+		virtualScreen.setBounds(x + vScreenX, y + vScreenY, width, height);
+	}
+	
+	/**
+	 * update the bounds of the vScreen
+	 * by using the vars from the Spinners
+	 *
+	 */
+	void updateVScreenBounds() {
+		double ratio = ((double)ScreenDimensions.width) / ScreenDimensions.widthMax;
+		int newWidth = (int)(ScreenDimensions.spinnerWidth * ratio);
+		int newX = (int)(ScreenDimensions.spinnerX * ratio);
+
+		int newHeight = (int)(ScreenDimensions.spinnerHeight * ratio);
+		int newY = (int)(ScreenDimensions.spinnerY * ratio);
+
+		setVScreenBounds(newX, newY, newWidth, newHeight);
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java
new file mode 100644
index 0000000..c893b31
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenWidthMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double x = 0;
+
+	public ScreenWidthMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newX = e.getX();
+
+		int newWidth = ScreenDimensions.spinnerWidth - (int)(x - newX);
+		int newSpinnerX = ScreenDimensions.spinnerX + newWidth;
+
+		if (0 <= newSpinnerX && newSpinnerX <= ScreenDimensions.widthMax) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerWidth(newWidth);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java
new file mode 100644
index 0000000..dc41e96
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenXMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double x = 0;
+
+	public ScreenXMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newX = e.getX();
+		int delta = (int) (x - newX);
+		int newXPosition = ScreenDimensions.spinnerX - delta;
+		int newWidth = ScreenDimensions.spinnerWidth + delta;
+
+		if (newXPosition >= 0 && newWidth >= 0) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerX(newXPosition);
+			frame.setSpinnerWidth(newWidth);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java
new file mode 100644
index 0000000..69de62e
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenYMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double y = 0;
+
+	public ScreenYMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newY = e.getY();
+
+		int delta = (int) (y - newY);
+		int newYPosition = ScreenDimensions.spinnerY - delta;
+		int newHeight = ScreenDimensions.spinnerHeight + delta;
+
+		if (newYPosition >= 0 && newHeight >= 0) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerY(newYPosition);
+			frame.setSpinnerHeight(newHeight);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/resources/logback.xml b/src/screenshare/resources/logback.xml
new file mode 100644
index 0000000..44bfdf4
--- /dev/null
+++ b/src/screenshare/resources/logback.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="logback.xsd">
+	<contextName>${current_openmeetings_context_name}</contextName>
+
+	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
+
+	<appender name="FLOG2" class="ch.qos.logback.core.FileAppender">
+		<File>screensharing.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<logger name="org.apache.openmeetings" level="DEBUG"/>
+	<logger name="org.red5.server.net.rtmp.codec.RTMPProtocolDecoder" level="OFF"/>
+	<root level="INFO">
+		<appender-ref ref="FLOG2" />
+		<appender-ref ref="CONSOLE2" />
+	</root>
+</configuration>
diff --git a/src/screenshare/resources/logback.xsd b/src/screenshare/resources/logback.xsd
new file mode 100644
index 0000000..7e75655
--- /dev/null
+++ b/src/screenshare/resources/logback.xsd
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="configuration">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="contextName"/>
+        <xs:element ref="jmxConfigurator"/>
+        <xs:element maxOccurs="unbounded" ref="appender"/>
+        <xs:element maxOccurs="unbounded" ref="logger"/>
+        <xs:element ref="root"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="contextName" type="xs:string"/>
+  <xs:element name="jmxConfigurator">
+    <xs:complexType>
+      <xs:attribute name="contextName" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="appender">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:sequence minOccurs="0">
+          <xs:element ref="File"/>
+          <xs:element ref="Append"/>
+          <xs:element ref="Encoding"/>
+          <xs:element ref="BufferedIO"/>
+          <xs:element ref="ImmediateFlush"/>
+        </xs:sequence>
+        <xs:element ref="layout"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="File" type="xs:string"/>
+  <xs:element name="Append" type="xs:boolean"/>
+  <xs:element name="Encoding" type="xs:NCName"/>
+  <xs:element name="BufferedIO" type="xs:boolean"/>
+  <xs:element name="ImmediateFlush" type="xs:boolean"/>
+  <xs:element name="layout">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element ref="Pattern"/>
+        <xs:element ref="pattern"/>
+      </xs:choice>
+      <xs:attribute name="class" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Pattern" type="xs:string"/>
+  <xs:element name="pattern" type="xs:string"/>
+  <xs:element name="logger">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" minOccurs="0" ref="appender-ref"/>
+        <xs:element maxOccurs="1" minOccurs="0" ref="level"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="root">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="appender-ref"/>
+      </xs:sequence>
+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="appender-ref">
+    <xs:complexType>
+      <xs:attribute name="ref" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="level">
+    <xs:sequence>
+      <xs:element ref="level"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="level">
+    <xs:complexType>
+      <xs:attribute name="value" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:simpleType name="LoggerLevels">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="off|OFF|all|ALL|inherited|INHERITED|null|NULL|error|ERROR|warn|WARN|info|INFO|debug|DEBUG|trace|TRACE"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>
diff --git a/src/screenshare/resources/quartz.properties b/src/screenshare/resources/quartz.properties
new file mode 100644
index 0000000..6762b90
--- /dev/null
+++ b/src/screenshare/resources/quartz.properties
@@ -0,0 +1,13 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+org.quartz.scheduler.instanceName=ScreenSharingScheduler
+org.quartz.threadPool.threadCount=30
\ No newline at end of file
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java b/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
new file mode 100644
index 0000000..8adbd3e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.junit.Before;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
+	private static final Logger log = Red5LoggerFactory.getLogger(AbstractJUnitDefaults.class);
+	
+	protected static final String username = "swagner";
+	protected static final String userpass = "qweqwe";
+	private static final String orgname = "smoketest";
+	private static final String timeZone = "Europe/Berlin";
+	private static final String useremail = "junit@openmeetings.apache.org";
+	
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentReminderTypDao reminderTypeDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private ImportInitvalues importInitvalues;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	
+	private List<AppointmentReminderTyps> remindTypes;
+	private List<RoomType> roomTypes;
+
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		configurationDao.getCryptKey();
+        if (userDao.count() < 1) {
+            makeDefaultScheme();
+            log.info("Default scheme created successfully");
+        } else {
+            log.info("Default scheme already created");
+        }
+        remindTypes = reminderTypeDao.getAppointmentReminderTypList(1L);
+        roomTypes = roomTypeDao.getAll(1L);
+    }
+
+	public Appointment createAppointment() {
+		Date appointmentstart = new Date();
+		Date appointmentend = new Date();
+		appointmentend.setTime(appointmentstart.getTime() + 3600);
+		return createAppointment(appointmentstart, appointmentend);
+	}
+	
+	public Appointment getAppointment(Date start, Date end) {
+		assertNotNull("Can't access to appointment dao implimentation", appointmentDao);
+
+		// add new appointment
+		Appointment ap = new Appointment();
+
+		ap.setTitle("appointmentName");
+		ap.setLocation("appointmentLocation");
+
+		ap.setStart(start);
+		ap.setEnd(end);
+		ap.setDescription("appointmentDescription");
+		ap.setInserted(new Date());
+		ap.setDeleted(false);
+		ap.setIsDaily(false);
+		ap.setIsWeekly(false);
+		ap.setIsMonthly(false);
+		ap.setIsYearly(false);
+		ap.setPasswordProtected(false);
+
+		ap.setOwner(userDao.get(1L));
+		ap.setConnectedEvent(false);
+
+		if (ap.getRemind() == null && !remindTypes.isEmpty()) {
+			ap.setRemind(remindTypes.get(0));
+		}
+		
+		Room r = new Room();
+		if (!roomTypes.isEmpty()) {
+			r.setRoomtype(roomTypes.get(0));
+		}
+		r.setAppointment(true);
+		ap.setRoom(r);
+		return ap;
+	}
+
+	public Appointment createAppointment(Date start, Date end) {
+		assertNotNull("Can't access to appointment dao implimentation", appointmentDao);
+
+		// add new appointment
+		Appointment ap = new Appointment();
+
+		ap.setTitle("appointmentName");
+		ap.setLocation("appointmentLocation");
+
+		ap.setStart(start);
+		ap.setEnd(end);
+		ap.setDescription("appointmentDescription");
+		ap.setInserted(new Date());
+		ap.setDeleted(false);
+		ap.setIsDaily(false);
+		ap.setIsWeekly(false);
+		ap.setIsMonthly(false);
+		ap.setIsYearly(false);
+		ap.setPasswordProtected(false);
+
+		ap.setOwner(userDao.get(1L));
+		ap.setConnectedEvent(false);
+		ap = appointmentDao.update(ap, null, false);
+		assertNotNull("Cann't add appointment", ap.getId());
+		return ap;
+	}
+
+	public User getUser(int rnd) throws Exception {
+		User u = new User();
+		// add user
+		u.setFirstname("firstname" + rnd);
+		u.setLastname("lastname" + rnd);
+		u.setLogin("login" + rnd);
+		u.updatePassword(configurationDao, "pass" + rnd);
+		u.setLanguage_id(1L);
+		return u;
+	}
+
+	public User createUser(int rnd) throws Exception {
+		User u = getUser(rnd);
+		u = userDao.update(u, null);
+		assertNotNull("Can't add user", u);
+		return u;
+	}
+
+	private void makeDefaultScheme() throws Exception {
+		InstallationConfig cfg = new InstallationConfig();
+		cfg.username = username;
+		cfg.password = userpass;
+		cfg.email = useremail;
+		cfg.group = orgname;
+		cfg.ical_timeZone = timeZone;
+		importInitvalues.loadAll(cfg, false);
+	}
+
+	public User createUserContact(int rnd, Long ownerId) {
+		User user = userDao.getContact("email" + rnd, "firstname" + rnd, "lastname" + rnd, ownerId);
+		user = userDao.update(user, ownerId);
+		assertNotNull("Can't add user contact", user);
+		return user;
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java b/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java
new file mode 100644
index 0000000..db0a5dc
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.junit.Assert.fail;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestExecutionListeners({})
+@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"}, inheritLocations = true)
+public abstract class AbstractSpringTest extends AbstractJUnit4SpringContextTests {
+
+	@Before
+	public void setUp() throws Exception {
+		setOmHome();
+		LabelDao.initLanguageMap();
+		if (LabelDao.languages.isEmpty()) {
+			fail("Failed to set languages");
+		}
+	}
+	
+	protected void setOmHome() {
+		String webappsDir = System.getProperty("om.home", ".");
+		OmFileHelper.setOmHome(webappsDir);
+		if (!OmFileHelper.getOmHome().exists() || !OmFileHelper.getOmHome().isDirectory()) {
+			fail("Invalid directory is specified as OM HOME: " + webappsDir);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java b/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
new file mode 100644
index 0000000..913007a
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.apache.openmeetings.web.app.Application.getWicketTester;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.After;
+
+public class AbstractWicketTester extends AbstractJUnitDefaults {
+
+	protected WicketTester tester;
+	 	
+	@Override
+	public void setUp() throws Exception {
+		super.setUp();
+        tester = getWicketTester();
+        assertNotNull("Web session should not be null", WebSession.get());
+	}
+
+	public void login(String login, String password) {
+		if (login != null && password != null) {
+			WebSession.get().signIn(login, password, Type.user, null);
+		} else {
+			WebSession.get().signIn(username, userpass, Type.user, null);
+		}
+		assertTrue("Web session is not signed in for user: " + (login != null ? login : username), WebSession.get().isSignedIn());
+	}
+	
+	@After
+	public void tearDown() {
+		tester.destroy();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java b/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java
new file mode 100644
index 0000000..b0f6dc8
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+/**
+ * David Bismut, david.bismut@gmail.com
+ * Intern, SETLabs, Infosys Technologies Ltd. May 2004 - Jul 2004
+ * Ecole des Mines de Nantes, France
+ */
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.accessibility.AccessibleHypertext;
+import javax.swing.JEditorPane;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.StyleSheet;
+import javax.swing.text.html.parser.ParserDelegator;
+
+/**
+ * A "HTML" JEditorPane embedded with a special HTMLDocument that detects urls
+ * and displays them as hyperlinks. When CTRL is pressed, the urls are
+ * clickable.
+ * 
+ * @author David Bismut
+ *  
+ */
+public class EditorPaneLinkDetector extends JEditorPane {
+	private static final long serialVersionUID = 2811878994346374017L;
+
+	/**
+	 * Creates a <code>EditorPaneLinkDetector</code>.
+	 */
+	public EditorPaneLinkDetector() {
+
+		HTMLEditorKit htmlkit = new HTMLEditorKit();
+
+		StyleSheet styles = htmlkit.getStyleSheet();
+		StyleSheet ss = new StyleSheet();
+
+		ss.addStyleSheet(styles);
+
+		ss.addRule("body {font-family:arial;font-size:12pt}");
+		ss.addRule("p {font-family:arial;margin:2}");
+
+		HTMLDocument doc = new HTMLDocLinkDetector(ss);
+
+		setEditorKit(htmlkit);
+
+		setDocument(doc);
+
+		addMouseMotionListener(new MouseMotionAdapter() {
+			public void mouseMoved(MouseEvent e) {
+
+				AccessibleJTextComponent context = (AccessibleJTextComponent) getAccessibleContext()
+						.getAccessibleEditableText();
+
+				AccessibleHypertext accText = (AccessibleHypertext) context
+						.getAccessibleText();
+
+				int index = accText.getIndexAtPoint(e.getPoint());
+
+				int linkIndex = accText.getLinkIndex(index);
+				if (linkIndex == -1) {
+					setToolTipText(null);
+					return;
+				}
+
+				String linkDesc = accText.getLink(linkIndex)
+						.getAccessibleActionDescription(0);
+
+				String toolTipText = "<html><body style='margin: 3'>"
+						+ linkDesc
+						+ "<br><b>CTRL + click to follow link</b></body></html>";
+				setToolTipText(toolTipText);
+			}
+		});
+
+		addKeyListener(new KeyAdapter() {
+			public void keyPressed(KeyEvent e) {
+				
+				if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
+					if (isEditable())
+						setEditable(false);
+				} else {
+					if (!isEditable())
+						setEditable(true);
+				}
+
+			}
+
+			public void keyReleased(KeyEvent e) {
+				
+				if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
+					setEditable(true);
+				}
+
+			}
+		});
+	}
+
+	protected class HTMLDocLinkDetector extends HTMLDocument {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1226244167782160437L;
+
+		public HTMLDocLinkDetector(StyleSheet ss) {
+			super(ss);
+			
+			setAsynchronousLoadPriority(4);
+			setTokenThreshold(100);
+			setParser(new ParserDelegator());
+		}
+
+		/**
+		 * Returns true if the Element contains a HTML.Tag.A attribute, false
+		 * otherwise.
+		 * 
+		 * @param e
+		 *            the Element to be checkd
+		 * @return
+		 */
+		protected boolean isLink(Element e) {
+			
+			return (e.getAttributes().getAttribute(HTML.Tag.A) != null);
+
+		}
+
+		/**
+		 * This method corrects or creates a url contained in an Element as an
+		 * hyperlink.
+		 * 
+		 * @param e
+		 *            the Element to be computed
+		 * @throws BadLocationException
+		 */
+		protected void computeLinks(Element e) throws BadLocationException {
+			
+			int caretPos = getCaretPosition();
+			try {
+				if (isLink(e))
+					correctLink(e);
+				else
+					createLink(e);
+			} catch (IOException ex) {
+				ex.printStackTrace();
+			}
+			setCaretPosition(Math.min(caretPos, getLength()));
+		}
+
+		/**
+		 * The method corrects the url inside an Element, that is supposed to be
+		 * an element containing a link only. This function is typically called
+		 * when the url is beeing edited. What the function does is to remove
+		 * the html tags, so the url is actually edited in plain text and not as
+		 * an hyperlink.
+		 * 
+		 * @param e
+		 *            the Element that contains the url
+		 * @throws BadLocationException
+		 * @throws IOException
+		 */
+		protected void correctLink(Element e) throws BadLocationException,
+				IOException {
+			
+			int length = e.getEndOffset() - e.getStartOffset();
+
+			boolean endOfDoc = e.getEndOffset() == getLength() + 1;
+
+			// to avoid catching the final '\n' of the document.
+			if (endOfDoc)
+				length--;
+
+			String text = getText(e.getStartOffset(), length);
+
+			setOuterHTML(e, text);
+
+			// insert final spaces ignored by the html
+			Matcher spaceMatcher = Pattern.compile("(\\s+)$").matcher(text);
+
+			if (spaceMatcher.find()) {
+				String endingSpaces = spaceMatcher.group(1);
+				insertString(Math.min(getLength(), e.getEndOffset()),
+						endingSpaces, null);
+			}
+		}
+
+		/**
+		 * The method check if the element contains a url in plain text, and if
+		 * so, it creates the html tag HTML.Tag.A to have the url displayed as
+		 * an hyperlink.
+		 * 
+		 * @param e
+		 *            element that contains the url
+		 * @throws BadLocationException
+		 * @throws IOException
+		 */
+		protected void createLink(Element e) throws BadLocationException,
+				IOException {
+			
+			int caretPos = getCaretPosition();
+
+			int startOffset = e.getStartOffset();
+			int length = e.getEndOffset() - e.getStartOffset();
+
+			boolean endOfDoc = e.getEndOffset() == getLength() + 1;
+			// to avoid catching the final '\n' of the document.
+			if (endOfDoc)
+				length--;
+
+			String text = getText(startOffset, length);
+
+			Matcher matcher = Pattern.compile(
+					"(?i)(\\b(http://|https://|www.|ftp://|file:/|mailto:)\\S+)(\\s+)")
+					.matcher(text);
+
+			if (matcher.find()) {
+				String url = matcher.group(1);
+				//String prefix = matcher.group(2);
+				String endingSpaces = matcher.group(3);
+
+				// to ignore characters after the caret
+				int validPos = startOffset + matcher.start(3) + 1;
+				if (validPos > caretPos)
+					return;
+
+				Matcher dotEndMatcher = Pattern.compile("([\\W&&[^/]]+)$")
+						.matcher(url);
+
+				//Ending non alpha characters like [.,?%] shouldn't be included
+				// in the url.
+				String endingDots = "";
+				if (dotEndMatcher.find()) {
+					endingDots = dotEndMatcher.group(1);
+					url = dotEndMatcher.replaceFirst("");
+				}
+
+				text = matcher.replaceFirst("<a href='" + url + "'>" + url
+						+ "</a>" + endingDots + endingSpaces);
+
+				setOuterHTML(e, text);
+
+				// insert initial spaces ignored by the html
+				Matcher spaceMatcher = Pattern.compile("^(\\s+)").matcher(text);
+
+				if (spaceMatcher.find()) {
+					String initialSpaces = spaceMatcher.group(1);
+					insertString(startOffset, initialSpaces, null);
+				}
+
+				// insert final spaces ignored by the html
+				spaceMatcher = Pattern.compile("(\\s+)$").matcher(text);
+
+				if (spaceMatcher.find()) {
+					String extraSpaces = spaceMatcher.group(1);
+					int endoffset = e.getEndOffset();
+					if (extraSpaces.charAt(extraSpaces.length() - 1) == '\n') {
+						extraSpaces = extraSpaces.substring(0, extraSpaces
+								.length() - 1);
+						endoffset--;
+					}
+					insertString(Math.min(getLength(), endoffset), extraSpaces,
+							null);
+				}
+			}
+		}
+
+		public void remove(int offs, int len) throws BadLocationException {
+
+			super.remove(offs, len);
+			Element e = getCharacterElement(offs - len);
+			computeLinks(e);
+		}
+
+		public void insertString(int offs, String str, AttributeSet a)
+				throws BadLocationException {
+
+			super.insertString(offs, str, a);
+			Element e = getCharacterElement(offs);
+			computeLinks(e);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/TestConnection.java b/src/test/java/org/apache/openmeetings/test/TestConnection.java
new file mode 100644
index 0000000..4bf09be
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/TestConnection.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import org.junit.Test;
+
+public class TestConnection {
+
+	@Test
+	public void testNoop() {
+		
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java b/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java
new file mode 100644
index 0000000..1a78150
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.asf;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+
+public class AsfCopyRightReplace {
+
+	String asf_copyright = "/*\n"
+			+ " * Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ " * or more contributor license agreements.  See the NOTICE file\n"
+			+ " * distributed with this work for additional information\n"
+			+ " * regarding copyright ownership.  The ASF licenses this file\n"
+			+ " * to you under the Apache License, Version 2.0 (the\n"
+			+ " * \"License\") +  you may not use this file except in compliance\n"
+			+ " * with the License.  You may obtain a copy of the License at\n"
+			+ " *\n"
+			+ " *   http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ " *\n"
+			+ " * Unless required by applicable law or agreed to in writing,\n"
+			+ " * software distributed under the License is distributed on an\n"
+			+ " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ " * KIND, either express or implied.  See the License for the\n"
+			+ " * specific language governing permissions and limitations\n"
+			+ " * under the License.\n" + " */\n";
+
+	String asf_xml_copyright = "<!--\n"
+			+ "  Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "  or more contributor license agreements.  See the NOTICE file\n"
+			+ "  distributed with this work for additional information\n"
+			+ "  regarding copyright ownership.  The ASF licenses this file\n"
+			+ "  to you under the Apache License, Version 2.0 (the\n"
+			+ "  \"License\"); you may not use this file except in compliance\n"
+			+ "  with the License.  You may obtain a copy of the License at\n"
+			+ "  \n" + "      http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "    	  \n"
+			+ "  Unless required by applicable law or agreed to in writing,\n"
+			+ "  software distributed under the License is distributed on an\n"
+			+ "  \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "  KIND, either express or implied.  See the License for the\n"
+			+ "  specific language governing permissions and limitations\n"
+			+ "  under the License.\n" + "  \n" + "-->\n";
+	
+	String asf_vm_copyright = "#\n"
+			+ "# Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "# or more contributor license agreements.  See the NOTICE file\n"
+			+ "# distributed with this work for additional information\n"
+			+ "# regarding copyright ownership.  The ASF licenses this file\n"
+			+ "# to you under the Apache License, Version 2.0 (the\n"
+			+ "# \"License\") +  you may not use this file except in compliance\n"
+			+ "# with the License.  You may obtain a copy of the License at\n"
+			+ "#\n"
+			+ "#   http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "#\n"
+			+ "# Unless required by applicable law or agreed to in writing,\n"
+			+ "# software distributed under the License is distributed on an\n"
+			+ "# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "# KIND, either express or implied.  See the License for the\n"
+			+ "# specific language governing permissions and limitations\n"
+			+ "# under the License.\n" + "#/\n";
+
+	public static void main(String... args) {
+		new AsfCopyRightReplace();
+	}
+
+	public AsfCopyRightReplace() {
+		scanFolder(new File("./src/main"));
+	}
+
+	private void scanFolder(File folder) {
+
+		for (File javaFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				return name.endsWith(".java") || name.endsWith(".vm");
+			}
+		})) {
+			scanAndWriteJavaFile(javaFile);
+		}
+
+		for (File javaFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				return name.endsWith(".xml") || name.endsWith(".lzx");
+			}
+		})) {
+			scanAndWriteXMLFile(javaFile);
+		}
+
+		for (File folderFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				File f = new File(b, name);
+				return f.isDirectory();
+			}
+		})) {
+			scanFolder(folderFile);
+		}
+	}
+
+	private void scanAndWriteXMLFile(File javaFile) {
+		try {
+			System.out.println("Processing " + javaFile.getCanonicalPath());
+
+			BufferedReader is = new BufferedReader(new InputStreamReader(
+					new FileInputStream(javaFile), "UTF-8"));
+
+			String line;
+			String firstline = "";
+			StringWriter strWriter = new StringWriter();
+			int i = 0;
+
+			while ((line = is.readLine()) != null) {
+				if (i == 0) {
+					firstline = line;
+					
+					if (firstline.startsWith("<canvas")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<library")) {
+						strWriter.append(asf_xml_copyright);
+					}
+							
+					
+				} else if (i == 1) {
+					if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<!--")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<library")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<canvas")) {
+						strWriter.append(asf_xml_copyright);
+					}
+				}
+				strWriter.append(line + "\n");
+				i++;
+			}
+			is.close();
+
+			OutputStreamWriter out = new OutputStreamWriter(
+					new FileOutputStream(javaFile.getCanonicalPath()), "UTF-8");
+
+			out.write(strWriter.toString());
+			out.flush();
+			out.close();
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+	private void scanAndWriteJavaFile(File javaFile) {
+		try {
+			System.out.println("Processing " + javaFile.getCanonicalPath());
+
+			BufferedReader is = new BufferedReader(new InputStreamReader(
+					new FileInputStream(javaFile), "UTF-8"));
+
+			String line;
+			StringWriter strWriter = new StringWriter();
+			int i = 0;
+
+			while ((line = is.readLine()) != null) {
+				if (i == 0) {
+					if (line.startsWith("package ")) {
+						strWriter.append(asf_copyright);
+					} else if (line.startsWith("## OpenMeetings") 
+							&& javaFile.getName().endsWith(".vm")) {
+						strWriter.append(asf_vm_copyright);
+					}
+				}
+				strWriter.append(line + "\n");
+				i++;
+			}
+			is.close();
+			
+			OutputStreamWriter out = new OutputStreamWriter(
+					new FileOutputStream(javaFile.getCanonicalPath()), "UTF-8");
+
+			out.write(strWriter.toString());
+			out.flush();
+			out.close();
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java b/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
new file mode 100644
index 0000000..5d8cb54
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestOldBackups extends AbstractJUnitDefaults {
+	private static final Logger log = Red5LoggerFactory.getLogger(TestOldBackups.class, webAppRootKey);
+	
+	@Autowired
+	private BackupImport backupController;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private RoomOrganisationDao roomOrganisationDao;
+
+	@Test
+	public void importOldVersions() {
+		String backupsDir = System.getProperty("backups.dir", ".");
+		File backupsHome = new File(backupsDir);
+		
+		if (!backupsHome.exists() || !backupsHome.isDirectory()) {
+			fail("Invalid directory is specified for backup files: " + backupsDir);
+		}
+		long orgCount = 0;
+		long userCount = 0;
+		long roomCount = 0;
+		long roomOrgCount = 0;
+		long apptCount = 0;
+		long meetingMembersCount = 0;
+		for (File backup : backupsHome.listFiles()) {
+			String name = backup.getName();
+			log.debug("Import of backup file : '" + name + "' is started ...");
+			InputStream is = null;
+			try {
+				is = new FileInputStream(backup);
+				backupController.performImport(is);
+				long newOrgCount = organisationDao.count();
+				long newUserCount = usersDao.count();
+				long newRoomCount = roomDao.count();
+				long newRoomOrgCount = roomOrganisationDao.get().size();
+				long newApptCount = appointmentDao.getAppointments().size();
+				log.debug("Now DB contains '" + newApptCount + "' appointments");
+				long newMeetingMembersCount = meetingMemberDao.getMeetingMembers().size();
+				assertTrue("Zero organizations were imported from " + name, newOrgCount > orgCount);
+				assertTrue("Zero users were imported from " + name, newUserCount > userCount);
+				assertTrue("Zero rooms were imported from " + name, newRoomCount > roomCount);
+				assertTrue("Zero room organizations were imported from " + name, newRoomOrgCount > roomOrgCount);
+				assertTrue("Zero appointments were imported from " + name + ", apptCount = " + apptCount, newApptCount > apptCount);
+				assertTrue("Zero meeting members were imported from " + name, newMeetingMembersCount > meetingMembersCount);
+				
+				orgCount = newOrgCount;
+				userCount = newUserCount;
+				roomCount = newRoomCount;
+				roomOrgCount = newRoomOrgCount;
+				apptCount = newApptCount;
+				meetingMembersCount = newMeetingMembersCount;
+			} catch (Exception e) {
+				throw new RuntimeException("Unexpected exception while importing backup: " + name, e);
+			} finally {
+				if (is != null) {
+					try {
+						is.close();
+					} catch (IOException e) {
+						throw new RuntimeException("Error while closing ldap config file", e);
+					}
+				}
+			}
+			log.debug("... Done.");
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java
new file mode 100644
index 0000000..615b784
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Calendar;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+public class TestAppointmentAddAppointment extends AbstractWicketTester {
+	private static final Logger log = Red5LoggerFactory.getLogger(TestAppointmentAddAppointment.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void saveAppointment() throws Exception {
+		log.debug("- 1 MeetingReminderJob.execute");
+		log.warn("- 2 MeetingReminderJob.execute");
+
+		Calendar start = Calendar.getInstance();
+		start.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+		Calendar end = Calendar.getInstance();
+		end.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+		String appointmentName = "Test 01";
+		String appointmentDescription = "Descr";
+		Long users_id = 1L;
+		String appointmentLocation = "office";
+		Boolean isMonthly = false;
+		Boolean isDaily = false;
+		Long categoryId = 1L;
+		Boolean isWeekly = false;
+		Long remind = 3L;
+		Boolean isYearly = false;
+		String[] mmClient = new String[1];
+		for (int i = 0; i < 1; i++) {
+			mmClient[0] = createClientObj("firstname" + i, "lastname" + i,
+					"first" + i + ".last" + i + "@webbase-design.de", "Etc/GMT+1");
+		}
+		Long language_id = 1L;
+		Long roomType = 1L;
+
+		Appointment a = appointmentLogic.getAppointment(appointmentName,
+				appointmentLocation, appointmentDescription,
+				start, end, isDaily, isWeekly,
+				isMonthly, isYearly, categoryId, remind, mmClient,
+				roomType, language_id, false, "", -1, users_id);
+		a = appointmentDao.update(a, users_id);
+		
+		Thread.sleep(3000);
+		
+		appointmentLogic.doScheduledMeetingReminder();
+		
+		Thread.sleep(3000);
+		
+		assertTrue("Saved appointment should have valid id: " + a.getId(), a.getId() != null && a.getId() > 0);
+	}
+
+	private String createClientObj(String firstname, String lastname, String email, String jNameTimeZone) {
+		StringBuilder sb = new StringBuilder();
+		sb.append(",") //memberId
+			.append(firstname).append(",")
+			.append(lastname).append(",")
+			.append(email).append(",")
+			.append(",") //userId
+			.append(jNameTimeZone);
+		return sb.toString();
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java
new file mode 100644
index 0000000..226cb5d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAppointmentSchedulerTask extends AbstractJUnitDefaults {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(TestAppointmentSchedulerTask.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	
+	@Test
+	public void doIt() {
+		log.debug("- 1 MeetingReminderJob.execute");
+		log.warn("- 2 MeetingReminderJob.execute");
+		try {
+			appointmentLogic.doScheduledMeetingReminder();
+			
+			assertTrue(true);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java
new file mode 100644
index 0000000..ea529fa
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+
+public class TestDatabaseStructureAppointment extends AbstractJUnitDefaults {
+
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureAppointment.class);
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void testAddingGroup(){
+
+		try {
+			
+				Calendar cal = Calendar.getInstance();
+				cal.set(2008, 9, 2);
+				cal.get(Calendar.DAY_OF_MONTH);
+				cal.getTime();
+				
+				SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" );
+				Date date = format.parse( "2008-17-08" );
+				Date date2 = format.parse( "2008-18-08" );
+		
+				List<Appointment> listAppoints =	appointmentDao.getAppointmentsByRange(1L, date, date2);
+			//List<Appointment> listAppoints = AppointmentDaoImpl.getInstance().searchAppointmentsByName("%");
+			//AppointmentDaoImpl.getInstance().getNextAppointmentById(1L);
+			//AppointmentDaoImpl.getInstance().addAppointment("mezo",1L, "Pforzheim", "zweiter", Calendar.getInstance().getTime() , 
+				//date, null, true, null, null, 1L,1L);
+			//AppointmentDaoImpl.getInstance().addAppointment("testap", "erster Test",Calendar.getInstance().getTime() , 
+					///Calendar.getInstance().getTime(), true, false, false, false, new Long(1), 1L);
+			log.debug("Anzahl: "+listAppoints.size());
+			
+			
+			for (Appointment appoints : listAppoints) {
+				log.debug("Termin: "+appoints.getTitle()+" startDate: "+appoints.getStart()+ " endDate: "+appoints.getEnd());
+				log.debug("MeetingMembers: "+appoints.getMeetingMembers().size());
+			}
+			
+			for (Iterator<Appointment> iter = listAppoints.iterator();iter.hasNext();) {
+				log.debug(""+iter.next());
+			}
+			
+			//AppointmentDaoImpl.getInstance().updateAppointment(1L,"neu", "erster Test",Calendar.getInstance().getTime() , 
+					//Calendar.getInstance().getTime(), true, false, false, false, new Long(1));
+			//log.debug("AppointmentReminderTypDaoImpl: "+appointmentReminderTypDaoImpl.getAppointmentReminderTypById(1L));
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]",err);
+
+		}
+
+		
+
+		
+
+	}
+
+
+
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java
new file mode 100644
index 0000000..95a5a0f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+//import groovy.sql.Sql;
+
+import java.util.Calendar;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureAppointmentReminderTyp extends AbstractJUnitDefaults {
+
+	private static final Logger log = Logger
+			.getLogger(TestDatabaseStructureAppointmentReminderTyp.class);
+
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+
+	@Test
+	public void testAddingGroup() {
+
+		try {
+
+			Calendar cal = Calendar.getInstance();
+			cal.set(2008, 9, 2);
+			cal.get(Calendar.DAY_OF_MONTH);
+			cal.getTime();
+
+			appointmentReminderTypDaoImpl.addAppointmentReminderTyps(1L,
+					"test 5 min", -1);
+			List<AppointmentReminderTyps> listAppoints = appointmentReminderTypDaoImpl
+					.getAppointmentReminderTypList(1);
+
+			log.debug("Anzahl: " + listAppoints.size());
+
+			for (AppointmentReminderTyps appoints : listAppoints) {
+				// log.debug("Termin: "+appoints.getAppointmentName()+" startDate: "+appoints.getAppointmentStarttime()+
+				// " endDate: "+appoints.getAppointmentEndtime());
+				log.debug("AppointmentReminderTyps: " + appoints.getName());
+			}
+
+			// for (Iterator<Appointment> iter =
+			// listAppoints.iterator();iter.hasNext();) {
+			// log.debug(iter.next());
+			// }
+
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]", err);
+
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java
new file mode 100644
index 0000000..40ec53e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureCategory extends AbstractJUnitDefaults {
+
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+
+	private static final Logger log = Logger
+			.getLogger(TestDatabaseStructureCategory.class);
+
+	@Test
+	public void testAddingGroup() {
+
+		try {
+
+			// appointmentCategoryDaoImpl.addAppointmentCategory(2L, "neu2",
+			// "test");
+			// appointmentCategoryDaoImpl.addAppointmentCategory("dritte");
+			// appointmentCategoryDaoImpl.updateAppointmentCategory(2L, "alt");
+
+			List<AppointmentCategory> appointmentCategory = appointmentCategoryDaoImpl
+					.getAppointmentCategoryList();
+			log.debug("Anzahl: " + appointmentCategory.size());
+
+			for (int x = 0; x < appointmentCategory.size(); x++) {
+				log.debug("id: " + appointmentCategory.get(x).getCategoryId());
+
+			}
+
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]", err);
+
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
new file mode 100644
index 0000000..63a0128
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Random;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetAppointmentByRange extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureGetAppointmentByRange.class);
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void test() {
+		log.debug("Test started");
+		Long userId = 1L;
+		
+		Random rnd = new Random();
+		Calendar now = Calendar.getInstance();
+		Calendar rangeStart = Calendar.getInstance();
+		rangeStart.setTime(now.getTime());
+		rangeStart.add(Calendar.DATE, -1);
+		Calendar rangeEnd = Calendar.getInstance();
+		rangeEnd.add(Calendar.DATE, 1);
+		rangeEnd.setTime(now.getTime());
+		
+		Calendar a1End = Calendar.getInstance();
+		a1End.setTime(now.getTime());
+		a1End.add(Calendar.HOUR_OF_DAY, 1);
+		Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+		a1.setTitle("AppointmentByRange_a1");
+
+		Appointment a2 = getAppointment(now.getTime(), a1End.getTime());
+		a2.setTitle("AppointmentByRange_a2");
+		a2.setMeetingMembers(new ArrayList<MeetingMember>());
+		MeetingMember mm1 = new MeetingMember();
+		mm1.setUser(createUserContact(rnd.nextInt(), userId));
+		mm1.setAppointment(a2);
+		a2.getMeetingMembers().add(mm1);
+		
+		Appointment a3 = getAppointment(now.getTime(), a1End.getTime());
+		a3.setTitle("AppointmentByRange_a3");
+		a3.setMeetingMembers(new ArrayList<MeetingMember>());
+		MeetingMember mm2 = new MeetingMember();
+		mm2.setUser(createUserContact(rnd.nextInt(), userId));
+		mm2.setAppointment(a3);
+		a3.getMeetingMembers().add(mm2);
+		MeetingMember mm3 = new MeetingMember();
+		mm3.setUser(createUserContact(rnd.nextInt(), userId));
+		mm3.setAppointment(a3);
+		a3.getMeetingMembers().add(mm3);
+		
+		a1 = appointmentDao.update(a1, userId);
+		a2 = appointmentDao.update(a2, userId);
+		a3 = appointmentDao.update(a3, userId);
+		
+		int a1found = 0, a2found = 0, a3found = 0;
+		for (Appointment a : appointmentDao.getAppointmentsByRange(userId, rangeStart.getTime(), rangeEnd.getTime())) {
+			int mmCount = a.getMeetingMembers() == null ? 0 : a.getMeetingMembers().size();
+			if (a.getId().equals(a1.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 0, mmCount);
+				a1found++;
+			}
+			if (a.getId().equals(a2.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 1, mmCount);
+				a2found++;
+			}
+			if (a.getId().equals(a3.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 2, mmCount);
+				a3found++;
+			}
+		}
+		assertEquals("Inappropriate count of appointments without members found", 1, a1found);
+		assertEquals("Inappropriate count of appointments with 1 member found", 1, a2found);
+		assertEquals("Inappropriate count of appointments with 2 members found", 1, a3found);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java
new file mode 100644
index 0000000..764d597
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetUserStart extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureGetUserStart.class);
+	@Autowired
+	private UserDao usersDao;
+	
+	@Test
+	public void testAddingGroup() {
+		try {
+			usersDao.get(new Long(1));
+		} catch (Exception err) {
+			log.error("[testAddingGroup]", err);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java
new file mode 100644
index 0000000..22133ab
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+
+
+public class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+
+	@Test
+	public void testUpdateMeetingMember(){
+		//FIXME need to be refactored !!!!
+		
+		//MeetingMemberDaoImpl.getInstance().addMeetingMember("Adddd", "dir", "1", "2", 1L, 1L, "test");	
+		//MeetingMemberDaoImpl.getInstance().addMeetingMember(firstname, lastname, memberStatus, appointmentStatus, appointmentId, userid, email)
+		
+		
+		//MeetingMemberDaoImpl.getInstance().getMeetingMemberById(1L);
+		//MeetingMemberDaoImpl.getInstance().deleteMeetingMember(2L);
+		
+		//meetingMemberDao.updateMeetingMember(1l,"bbbbbb", "dir", "1", "2", 1L, 1L, "test", ""); 
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java
new file mode 100644
index 0000000..fc9c285
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+public class TestDatabaseStructureUsersSearch extends AbstractJUnitDefaults {
+    @Autowired
+    private UserManager userManager;
+
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureUsersSearch.class);
+
+	@Test
+	public void testAddingGroup(){
+
+		try {
+			
+			 SearchResult<User> users = userManager.getAllUserByRange("first", 0, 10, "orderby", true);
+			 log.debug("[result]" + users.getResult().size());
+			 log.debug("[records]"+ users.getRecords());
+			 
+			 //GroupMemberDaoImpl.getInstance().addGroupMember("Ad", "dir", Calendar.getInstance().getTime(), "1", "2", "interpol155", 1L, 1L);	
+			//GroupMemberDaoImpl.getInstance().addGroupMember(firstname, lastname, age, memberStatus, appointmentStatus, password, adresses_id, appointmentId);
+			
+			//GroupMemberDaoImpl.getInstance().getGroupMemberById(1L);
+			//GroupMemberDaoImpl.getInstance().deleteGroupMember(2L);
+			//GroupMemberDaoImpl.getInstance().updateGroupMember(1L, "Eugen", "Schwert", Calendar.getInstance().getTime(), "1", "2", "interpol155", 1L, 1L);
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]",err);
+
+		}
+
+		
+
+		
+
+	}
+
+
+
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java
new file mode 100644
index 0000000..263adfe
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestGetAppointment extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestGetAppointment.class);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	
+	@Test
+	public void getAppoinment() {
+		log.debug("getAppoinment enter");
+		Long userId = 1L;
+		
+		Calendar now = Calendar.getInstance();
+		Calendar a1End = Calendar.getInstance();
+		a1End.setTime(now.getTime());
+		a1End.add(Calendar.HOUR_OF_DAY, 1);
+		Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+		a1.setTitle("GetAppointment");
+		
+		a1 = appointmentDao.update(a1, userId);
+		
+		Appointment a = appointmentDao.get(a1.getId());
+		assertNotNull("Failed to get Appointment By id", a);
+		assertEquals("Inapropriate MeetingMembers count", 0, a.getMeetingMembers() == null ? 0 : a.getMeetingMembers().size());
+	}
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java b/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
new file mode 100644
index 0000000..6042df7
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
@@ -0,0 +1,306 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.SocketException;
+import java.net.URI;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.Vector;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import net.fortuna.ical4j.data.CalendarOutputter;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.util.UidGenerator;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.mail.ByteArrayDataSource;
+import org.apache.openmeetings.util.mail.IcalHandler;
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestSendIcalMessage extends AbstractJUnitDefaults {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			TestAppointmentSchedulerTask.class,
+			OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	private byte[] iCalMimeBody;
+
+	String subject = "test iCal";
+	String recipients = "seba.wagner@gmail.com";
+	String htmlBody = "test";
+
+	
+	public void simpleInvitionIcalLink() {
+		// Create a TimeZone
+		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()
+				.createRegistry();
+		TimeZone timezone = registry.getTimeZone("America/Mexico_City");
+		VTimeZone tz = timezone.getVTimeZone();
+
+		// Start Date is on: April 1, 2008, 9:00 am
+		java.util.Calendar startDate = new GregorianCalendar();
+		startDate.setTimeZone(timezone);
+		startDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
+		startDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+		startDate.set(java.util.Calendar.YEAR, 2008);
+		startDate.set(java.util.Calendar.HOUR_OF_DAY, 9);
+		startDate.set(java.util.Calendar.MINUTE, 0);
+		startDate.set(java.util.Calendar.SECOND, 0);
+
+		// End Date is on: April 1, 2008, 13:00
+		java.util.Calendar endDate = new GregorianCalendar();
+		endDate.setTimeZone(timezone);
+		endDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
+		endDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+		endDate.set(java.util.Calendar.YEAR, 2008);
+		endDate.set(java.util.Calendar.HOUR_OF_DAY, 13);
+		endDate.set(java.util.Calendar.MINUTE, 0);
+		endDate.set(java.util.Calendar.SECOND, 0);
+
+		// Create the event
+		String eventName = "Progress Meeting";
+		DateTime start = new DateTime(startDate.getTime());
+		DateTime end = new DateTime(endDate.getTime());
+		VEvent meeting = new VEvent(start, end, eventName);
+
+		// add timezone info..
+		meeting.getProperties().add(tz.getTimeZoneId());
+
+		// generate unique identifier..
+		UidGenerator ug;
+		try {
+			ug = new UidGenerator("uidGen");
+
+			Uid uid = ug.generateUid();
+			meeting.getProperties().add(uid);
+		} catch (SocketException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		// add attendees..
+		Attendee dev1 = new Attendee(URI.create("mailto:dev1@mycompany.com"));
+		dev1.getParameters().add(Role.REQ_PARTICIPANT);
+		dev1.getParameters().add(new Cn("Developer 1"));
+		meeting.getProperties().add(dev1);
+
+		Attendee dev2 = new Attendee(URI.create("mailto:dev2@mycompany.com"));
+		dev2.getParameters().add(Role.OPT_PARTICIPANT);
+		dev2.getParameters().add(new Cn("Developer 2"));
+		meeting.getProperties().add(dev2);
+
+		// Create a calendar
+		net.fortuna.ical4j.model.Calendar icsCalendar = new net.fortuna.ical4j.model.Calendar();
+		icsCalendar.getProperties().add(
+				new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
+		icsCalendar.getProperties().add(CalScale.GREGORIAN);
+		icsCalendar.getProperties().add(Version.VERSION_2_0);
+
+		// Add the event and print
+		icsCalendar.getComponents().add(meeting);
+		
+		Organizer orger = new Organizer(URI.create("seba.wagner@gmail.com"));
+		orger.getParameters().add(new Cn("Sebastian Wagner"));
+		meeting.getProperties().add(orger);
+		
+		icsCalendar.getProperties().add(Method.REQUEST);
+		
+		System.out.println(icsCalendar);
+		
+		
+		
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		CalendarOutputter outputter = new CalendarOutputter();
+		try {
+			outputter.output(icsCalendar, bout);
+			iCalMimeBody = bout.toByteArray();
+			
+			sendIcalMessage();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (ValidationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		
+
+	}
+
+	
+	@Test
+	public void sendInvitionIcalLink() {
+		try {
+
+			String email = "hans@webbase-design.de";
+			String username = "shans";
+			boolean invitor = false;
+
+			Calendar start = Calendar.getInstance();
+
+			Calendar end = Calendar.getInstance();
+
+			IcalHandler handler = new IcalHandler(
+					IcalHandler.ICAL_METHOD_REQUEST);
+
+			// Transforming Meeting Members
+
+			HashMap<String, String> attendeeList = handler.getAttendeeData(
+					email, username, invitor);
+
+			HashMap<String, String> organizerAttendee = handler
+					.getAttendeeData(recipients, "seba-test", true);
+
+			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
+			atts.add(attendeeList);
+
+			// Create ICal Message
+			String meetingId = handler.addNewMeeting(start.getTime(), end.getTime(), "test event",
+					atts, "localhost:5080/link_openmeetings",
+					organizerAttendee, "", TimeZone.getDefault());
+
+			log.debug("meetingId " + meetingId);
+
+			iCalMimeBody = handler.getIcalAsByteArray();
+
+			sendIcalMessage();
+
+			// return MailHandler.sendMail(email, subject, template);
+
+		} catch (Exception err) {
+			log.error("sendInvitionIcalLink", err);
+		}
+	}
+
+	private void sendIcalMessage() throws Exception {
+
+		log.debug("sendIcalMessage");
+
+		// Evaluating Configuration Data
+		String smtpServer = configurationDao.getConfValue("smtp_server", String.class, "");
+		String smtpPort = configurationDao.getConfValue("smtp_port", String.class, "");
+		String from = configurationDao.getConfValue("system_email_addr", String.class, "");
+		String emailUsername = configurationDao.getConfValue("email_username", String.class, "");
+		String emailUserpass = configurationDao.getConfValue("email_userpass", String.class, "");
+
+		Properties props = System.getProperties();
+
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+
+		boolean isTls = (1 == configurationDao.getConfValue("mail.smtp.starttls.enable", Integer.class, "0"));
+		if (isTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+		}
+
+		// Check for Authentification
+		Session session = null;
+		if (emailUsername != null && emailUsername.length() > 0
+				&& emailUserpass != null && emailUserpass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getDefaultInstance(props, new SmtpAuthenticator(
+					emailUsername, emailUserpass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getDefaultInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage mimeMessage = new MimeMessage(session);
+		mimeMessage.setSubject(subject);
+		mimeMessage.setFrom(new InternetAddress(from));
+		mimeMessage.addRecipients(Message.RecipientType.TO,
+				InternetAddress.parse(recipients, false));
+
+		// -- Create a new message --
+		BodyPart msg = new MimeBodyPart();
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlBody,
+				"text/html; charset=\"utf-8\"")));
+
+		Multipart multipart = new MimeMultipart();
+
+		BodyPart iCalAttachment = new MimeBodyPart();
+		iCalAttachment.setDataHandler(new DataHandler(
+				new javax.mail.util.ByteArrayDataSource(
+						new ByteArrayInputStream(iCalMimeBody),
+						"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
+		iCalAttachment.setFileName("invite.ics");
+
+		multipart.addBodyPart(iCalAttachment);
+		multipart.addBodyPart(msg);
+
+		mimeMessage.setSentDate(new Date());
+		mimeMessage.setContent(multipart);
+
+		// -- Set some other header information --
+		// mimeMessage.setHeader("X-Mailer", "XML-Mail");
+		// mimeMessage.setSentDate(new Date());
+
+		// Transport trans = session.getTransport("smtp");
+		Transport.send(mimeMessage);
+
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java b/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java
new file mode 100644
index 0000000..3ff1c4c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.chat;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestChatLinking extends TestCase {
+	
+	@Test
+	public void testChatParser(){
+		try {
+			
+			String text = "hasn http://www.google.de peter hasn http://www.google.de ";
+			
+			System.out.println(link(text));
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	
+	private String link(String input) {
+		try {
+			
+			String tReturn = "";
+			
+			String parts[] = input.split(" ");
+			
+			for (int t=0;t<parts.length;t++) {
+				
+				String text = parts[t];
+	
+				//System.out.println("Part 1 "+text);
+				
+				Matcher matcher = Pattern.compile("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))").matcher(text);
+
+				if (matcher.find()) {
+					text = matcher.replaceFirst("<u><FONT color=\"#0000CC\"><a href='" + text + "'>" + text
+							+ "</a></FONT></u>");
+
+				}
+				
+				//System.out.println("Part 2 "+text);
+				
+				if (t != 0) {
+					tReturn += " ";
+				}
+				
+				tReturn += text;
+			
+			}
+			
+			return tReturn;
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/config/TestConfig.java b/src/test/java/org/apache/openmeetings/test/config/TestConfig.java
new file mode 100644
index 0000000..26187e5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/config/TestConfig.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.config;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.test.calendar.TestAppointmentAddAppointment;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestConfig extends AbstractJUnitDefaults {
+
+	private static final Logger log = LoggerFactory.getLogger(TestAppointmentAddAppointment.class);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	@Test
+	public void getConfigKey() {
+		System.err.println("THIS");
+
+		Configuration smtp_server = configurationDao.get("smtp_server").get(0);
+
+		System.err.println("smtp_server " + smtp_server.getUser());
+
+		assertNull(smtp_server.getUser());
+	}
+
+	@Test
+	public void getConfigs() {
+
+		try {
+			List<Configuration> list = configurationDao.get(4, 6);
+
+			for (Configuration conf : list) {
+				System.err.println("conf.getConf_key() " + conf.getConf_key());
+				System.err.println("conf.getUser() " + conf.getUser());
+				if (conf.getUser() != null) {
+					System.err.println("conf.getUsers() " + conf.getUser().getLogin());
+				}
+			}
+
+			assertEquals(list.size(), 6);
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+		}
+
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java b/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java
new file mode 100644
index 0000000..035c93c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.derby;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * This file is called from command line to patch the derby configuration 
+ * during the automated run of Selenium
+ * 
+ * @author swagner
+ *
+ */
+public class PrepareSystemFiles {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrepareSystemFiles.class, webAppRootKey);
+	
+	public static void main(String... args) {
+		try {
+			OmFileHelper.setOmHome(args[0]);
+			
+			String databaseHomeDirectory = args[1];
+			
+			String persistanceFileToPatch = args[2];
+			
+			File conf = new File(persistanceFileToPatch);
+			
+			if (conf.exists()) {
+				conf.delete();
+			}
+			
+			ConnectionPropertiesPatcher.patch(DbType.derby.name()
+					, "localhost"
+					, "1527"
+					, databaseHomeDirectory + "openmeetings"
+					, "user"
+					, "secret"
+					);
+		} catch (Exception err) {
+			log.error("Error", err);
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java b/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java
new file mode 100644
index 0000000..5bd4030
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.derby;
+
+import org.apache.derby.drda.NetworkServerControl;
+
+public class StartDerbyNetworkService {
+
+	protected NetworkServerControl server;
+}
diff --git a/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java b/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java
new file mode 100644
index 0000000..41bcce5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.domain;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAddGroup extends AbstractJUnitDefaults {
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+
+	private static final Logger log = Logger.getLogger(TestAddGroup.class);
+
+	@Test
+	public void testAddingGroup() {
+		Organisation o = new Organisation();
+		o.setName("default");
+		o = orgDao.update(o, null);
+		assertNotNull("Id of organisation created should not be null", o.getOrganisation_id());
+
+		User us = usersDao.get(1L);
+		assertNotNull("User should exist", us);
+		
+		assertNotNull("Organisation User list should exist", us.getOrganisation_users());
+		us.getOrganisation_users().add(new Organisation_Users(o));
+		us = usersDao.update(us, null);
+
+		log.error(us.getLastname());
+		log.error(us.getAdresses().getTown());
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java b/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java
new file mode 100644
index 0000000..bbe5528
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.domain;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserGroupAggregation extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestUserGroupAggregation.class);
+
+	@Autowired
+	private UserDao userDao;
+
+	@Test
+	public void testitNow() {
+		User u = userDao.get(1L);
+
+		assertNotNull("Organisation list for default user must not be null", u.getOrganisation_users());
+		assertTrue("Default user must belong to at least one organisation", u.getOrganisation_users().size() > 0);
+
+		for (Organisation_Users orgUserObj : u.getOrganisation_users()) {
+			log.error("testitNow: organisation Id: '" + orgUserObj.getOrganisation().getOrganisation_id() + "'; name: '" + orgUserObj.getOrganisation().getName() + "'");
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java b/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java
new file mode 100644
index 0000000..0d5ad9e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.emotes;
+
+import java.util.LinkedList;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestChatParsing extends TestCase {
+	
+	public static LinkedList<LinkedList<String>> emotfilesList = new LinkedList<LinkedList<String>>();
+	
+	@Test
+	public void testChatParser(){
+		try {
+			//FIXME
+			String filePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/public/";
+			
+			this.loadEmot(filePath);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	public void loadEmot(String filePath){
+		try {
+//			String fileName = filePath + File.separatorChar + "emoticons" + File.separatorChar + "emotes.xml";
+//			XStream xStream = new XStream(new XppDriver());
+//			xStream.setMode(XStream.NO_REFERENCES);
+//			BufferedReader reader = new BufferedReader(new FileReader(fileName));
+//		    String xmlString = "";
+//		    while (reader.ready()) {
+//		    	xmlString += reader.readLine();
+//		    }
+//		    Application.setEmotfilesList((LinkedList<LinkedList<String>>) xStream.fromXML(xmlString));
+//		    ChatString.getInstance().replaceAllRegExp();
+//		    String messageText = "Hi :) how are you? whats going on B) today (T_T) ? with you ?";
+//		    //messageText = ":) Hi :) how :( are :) you :( today >:O going on? :)";
+//		    //messageText = "Hi :) how :( are :) you :( today :) ";
+//		    //messageText = "Hi :) how";
+//		    ChatString.getInstance().parseChatString(messageText);
+		    
+		    System.out.println("loadEmot completed");
+		} catch (Exception err) {
+			System.out.println("[loadEmot]"+err);
+			err.printStackTrace();
+		}
+	}	
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java b/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java
new file mode 100644
index 0000000..d9221e2
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.emotes;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.LinkedList;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class TestConvertGifs extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestConvertGifs.class);
+
+	@Test
+	public void testConvertDir(){
+		try {
+			//FIXME
+			String basePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/public/emoticons/";
+			
+			System.out.println("basePath "+basePath);
+			File baseDir = new File(basePath);
+			
+			System.out.println("basePath "+baseDir.exists());
+			
+			String batfilePath = "mybat.bat";
+			String batString = "";
+			
+			String[] allfiles = baseDir.list();			
+			if(allfiles!=null){
+				for(int i=0; i<allfiles.length; i++){
+					File file = new File(basePath+File.separatorChar+allfiles[i]);
+					String fileName = file.getName();
+					System.out.println("file "+file.getName());
+					String fileNamePure = fileName.substring(0, fileName.length()-4);
+					
+					batString += "gif2swf -r 30 -o "+fileNamePure+".swf "+fileName+" \r\n";
+				}
+			}
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(basePath+batfilePath));
+		    pw.println(batString);
+		    pw.flush();
+		    pw.close();
+		    
+			System.out.println("batString "+batString);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	@Test
+	public void testXMLDir(){
+		try {
+			//FIXME
+			String basePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/upload/emoticons/";
+			
+			System.out.println("basePath "+basePath);
+			File baseDir = new File(basePath);
+			
+			System.out.println("basePath "+baseDir.exists());
+			
+			String batfilePath = "emotes.xml";
+			String batString = "";
+			
+			String[] allfiles = baseDir.list();	
+			LinkedList<LinkedList<String>> filesList = new LinkedList<LinkedList<String>>();
+			if(allfiles!=null){
+				for(int i=0; i<allfiles.length; i++){
+					File file = new File(basePath+File.separatorChar+allfiles[i]);
+					LinkedList<String> singleFile = new LinkedList<String>();
+					String fileName = file.getName();
+					System.out.println("file "+file.getName());
+					String fileNamePure = fileName.substring(0, fileName.length()-4);
+					singleFile.add(fileNamePure+".swf");
+					singleFile.add(":)");
+					singleFile.add("(^_^)");
+					filesList.add(singleFile);
+				}
+			}
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			String xmlString = xStream.toXML(filesList);
+
+			log.error(xmlString);
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(basePath+batfilePath));
+		    pw.println(xmlString);
+		    pw.flush();
+		    pw.close();
+		    
+			System.out.println("batString "+batString);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/gui/TestGui.java b/src/test/java/org/apache/openmeetings/test/gui/TestGui.java
new file mode 100644
index 0000000..f6b64bf
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/gui/TestGui.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.gui;
+
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+
+public class TestGui  extends TestCase {
+
+	@Test
+	public void testNoop() {
+		
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java b/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java
new file mode 100644
index 0000000..cfb7967
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.invitiation;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.axis.services.UserWebService;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.InvitationService;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestInvitation extends AbstractJUnitDefaults {
+	@Autowired
+	private InvitationService invitationService;
+	@Autowired
+	private MainService mService;
+	@Autowired
+	private UserWebService userWebService;
+	@Autowired
+	private UserDao userDao;
+	
+	@Test
+	public void testSendInvitationLink() throws AxisFault {
+		Sessiondata sessionData = mService.getsessiondata();
+		
+		Long uid = userWebService.loginUser(sessionData.getSession_id(), username, userpass);
+		User us = userDao.get(uid);
+		
+		String date = new SimpleDateFormat("dd.MM.yyyy").format(new Date());
+		invitationService.sendInvitationHash(sessionData.getSession_id(), "Testname", "Testlastname", "message", "sebawagner@apache.org", 
+				"subject", 1L, "", false, "", 1, date, "12:00", date, "14:00", 1L, us.getTimeZoneId(), true);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java b/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java
new file mode 100644
index 0000000..925b4a4
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.jai;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestInterpolation extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestInterpolation.class);
+	
+	@Test
+	public void testInterpolate() {
+		try {
+			
+//			GeomPoint p1 = new Point(-60,-100);
+//			GeomPoint p2 = new Point(20, 50);
+//
+//			//double[] samples = {-100,-50};
+//			
+//			GeomPoint gPoint = GeomPoint.interpolate(p1, p2, new Float(0.5));
+//			
+//			log.debug("Interpolated: "+gPoint);
+//			
+//			
+//			GeomPoint p3 = new GeomPoint();
+//			p3.setLocation(-2,4);
+//			//p3.setLocation(3,4);
+//			p3.normalize(10);
+//			//GeomPoint
+//			
+//			
+//			p3.setLocation(2,-4);
+//			//p3.setLocation(3,4);
+//			p3.normalize(10);
+//			
+		} catch (Exception er) {
+			log.error("ERROR ", er);
+			System.out.println("Error exporting: " + er);
+			er.printStackTrace();
+		}
+	}
+
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java b/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java
new file mode 100644
index 0000000..e91ee7b
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.jai;
+
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import junit.framework.TestCase;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.log4j.Logger;
+import org.junit.Test;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class TestSVGTextExporterArrow extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestSVGTextExporterArrow.class);
+	
+	@Test
+	public void testGetDiagramList() {
+		try {
+			
+			
+	        // Get a DOMImplementation.
+	        DOMImplementation domImpl =
+	            GenericDOMImplementation.getDOMImplementation();
+
+	        // Create an instance of org.w3c.dom.Document.
+	        //String svgNS = "http://www.w3.org/2000/svg";
+	        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+	        Document document = domImpl.createDocument(svgNS, "svg", null);
+	        
+	        // Get the root element (the 'svg' element).
+	        Element svgRoot = document.getDocumentElement();
+
+	        
+	        // Set the width and height attributes on the root 'svg' element.
+	        svgRoot.setAttributeNS(null, "width", "2400");
+	        svgRoot.setAttributeNS(null, "height", "1600");
+	        
+
+	        // Create an instance of the SVG Generator.
+	        SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+
+//	        SVGGraphics2D svgGenerator8 = new SVGGraphics2D(svgGenerator);
+//	        //SVGGraphics2D svgGenerator2 = new SVGGraphics2D(document);
+//	        
+//	        //NOTE: Font.ITALIC+Font.BOLD = Font AND Bold !
+//	        exportToImageTest.paintTextByWidthHeight(svgGenerator8, 500, 300, 100, 200, "Process", Font.BOLD+Font.ITALIC, 28,
+//	        		new Color(255,0,0));
+//	        
+//	        SVGGraphics2D svgGenerator11 = new SVGGraphics2D(svgGenerator);
+//	        
+//	        exportToImageTest.paintTextByWidthHeight(svgGenerator11, 100, 300, 100, 200, "Process", Font.BOLD+Font.ITALIC, 111,
+//	        		new Color(255,0,0));
+//	        
+//	        SVGGraphics2D svgGenerator9 = new SVGGraphics2D(svgGenerator);
+	      //NOTE: Font.ITALIC+Font.BOLD = Font AND Bold !
+//	        exportToImageTest._paintTextByWidthHeight(svgGenerator9, 500, 300, 100, 200, "Hans", Font.BOLD, 28,
+//	        		new Color(255,0,0));
+	    
+	    
+	        // Finally, stream out SVG to the standard output using
+	        // UTF-8 encoding.
+	        boolean useCSS = true; // we want to use CSS style attributes
+	        //Writer out = new OutputStreamWriter(System.out, "UTF-8");
+	        
+	        //OutputStream out = httpServletResponse.getOutputStream();
+			//httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
+			//httpServletResponse.setHeader("Content-Disposition","attachment; filename=\"" + requestedFile + "\"");
+	        Writer out = new OutputStreamWriter(System.out, "UTF-8");
+
+	        //StringWriter out = new StringWriter();
+	        
+	        svgGenerator.stream(out, useCSS);
+		} catch (Exception er) {
+			log.error("ERROR ", er);
+			System.out.println("Error exporting: " + er);
+			er.printStackTrace();
+		}
+	}
+	
+	
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java b/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java
new file mode 100644
index 0000000..1b5a976
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.library;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.documents.LibraryWmlLoader;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+public class TestFileParser extends AbstractJUnitDefaults {
+	
+	private static final Logger log = Logger.getLogger(TestFileParser.class);
+	@Autowired
+	private LibraryWmlLoader libraryWmlLoader;
+	
+	@Test
+	public void testLoadWmlFile(){
+		
+		try {
+			
+			libraryWmlLoader.loadWmlFile("filename1");
+			
+		} catch (Exception err) {
+			
+			log.error("TestLoadWmlFile",err);
+			
+		}
+		
+	}
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java b/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java
new file mode 100644
index 0000000..7abf9f2
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.navi;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.entity.basic.Naviglobal;
+import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestNavi extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private NavigationDao navimanagement;
+	
+	@Test
+	public void testGetNavi(){
+		
+        List<Naviglobal> ll = navimanagement.getMainMenu(true, 1L);
+
+        assertTrue("GlobalNavi size should be greater than zero: " + ll.size(), ll.size() > 0);
+        System.out.println("NaviGlobal size: " + ll.size());
+
+        for (Naviglobal navigl : ll) {
+        	assertNotNull("Naviglobal retrieved should not be null", navigl);
+            System.out.println("Naviglobal label: " + navigl.getLevel_id());
+
+        	assertNotNull("Naviglobal retrieved should have Navimain entries", navigl.getMainnavi());
+            for (Navimain navim : navigl.getMainnavi()) {
+            	assertNotNull("Navimain retrieved should not be null", navim);
+                System.out.println("-->" + navim.getFieldvalues_id());
+            }
+        }
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java b/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
new file mode 100644
index 0000000..fbc6653
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.poll;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Random;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestClientListManager extends AbstractJUnitDefaults {
+	@Autowired
+	private ISessionManager sessionManager;
+	
+	@Test
+	public void addClientListItem() {
+		Random rnd = new Random();
+		assertNotNull("RoomClientId created is null",
+				sessionManager.addClientListItem(rnd.nextLong() + "ABCDE"
+						+ rnd.nextLong(), "scopeName", 66666, "remoteAddress",
+						"swfUrl", false, null));
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java b/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java
new file mode 100644
index 0000000..88a8e21
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.poll;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import static org.junit.Assert.*;
+
+public class TestPollManagement extends AbstractJUnitDefaults {
+	@Autowired
+	private PollDao pollManager;
+	
+	@Test
+	public void addPollType() {
+		long maxId = 1;
+		for (PollType pt : pollManager.getPollTypes()) {
+			maxId = Math.max(maxId, pt.getPollTypesId());
+		}
+		assertNotNull("Poll created is null", pollManager.addPollType(26L, false));
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java b/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java
new file mode 100644
index 0000000..a84cbee
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.*;
+import java.awt.event.*;
+
+class WindowClosingAdapter extends WindowAdapter {
+	public void windowClosing(WindowEvent event) {
+		event.getWindow().setVisible(false);
+		event.getWindow().dispose();
+		System.exit(0);
+	}
+}
+
+public class KeyCodesTest extends Frame implements KeyListener {
+	private static final long serialVersionUID = -1706968644784929402L;
+	String msg1 = "";
+	String msg2 = "";
+
+	public static void main(String[] args) {
+		new KeyCodesTest();
+	}
+
+	public KeyCodesTest() {
+		super("TestKeyCodes");
+		addKeyListener(this);
+		addWindowListener(new WindowClosingAdapter());
+		setBackground(Color.lightGray);
+		setSize(300, 200);
+		setLocation(200, 100);
+		setVisible(true);
+	}
+
+	public void paint(Graphics g) {
+		if (msg1.length() > 0) {
+			draw3DRect(g, 20, 50, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg1, 30, 70);
+		}
+		if (msg2.length() > 0) {
+			draw3DRect(g, 20, 100, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg2, 30, 120);
+		}
+	}
+
+	void draw3DRect(Graphics g, int x, int y, int width, int height) {
+		g.setColor(Color.darkGray);
+		g.drawLine(x, y, x, y + height);
+		g.drawLine(x, y, x + width, y);
+		g.setColor(Color.white);
+		g.drawLine(x + width, y + height, x, y + height);
+		g.drawLine(x + width, y + height, x + width, y);
+	}
+
+	public void keyPressed(KeyEvent event) {
+		msg1 = "";
+		System.out.println("keyPressed CODE1 "+event.getKeyCode());
+		
+		Integer myCode = event.getKeyCode();
+		
+		System.out.println("keyPressed CODE2 "+myCode);
+		
+		System.out.println("keyPressed CHAR3 "+event.getKeyChar());
+		
+		System.out.println("keyPressed CHAR4 "+KeyEvent.getKeyText(event.getKeyCode()));
+		
+		System.out.println("keyPressed CHAR5 "+KeyEvent.getKeyText(myCode));
+		
+		System.out.println("keyPressed isActionKey "+event.isActionKey());
+		System.out.println("keyPressed isAltDown "+event.isAltDown());
+		System.out.println("keyPressed isAltGraphDown "+event.isAltGraphDown());
+		System.out.println("keyPressed isConsumed "+event.isConsumed());
+		System.out.println("keyPressed isControlDown "+event.isControlDown());
+		System.out.println("keyPressed isMetaDown "+event.isMetaDown());
+		System.out.println("keyPressed isShiftDown "+event.isShiftDown());
+
+		System.out.println("keyPressed paramString "+event.paramString());
+		
+		if (event.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			int key = event.getKeyCode();
+			// Funktionstaste abfragen
+			if (key == KeyEvent.VK_F1) {
+				msg1 = "F1";
+			} else if (key == KeyEvent.VK_F2) {
+				msg1 = "F2";
+			} else if (key == KeyEvent.VK_F3) {
+				msg1 = "F3";
+			}
+			// Modifier abfragen
+			if (msg1.length() > 0) {
+				if (event.isAltDown()) {
+					msg1 = "ALT + " + msg1;
+				}
+				if (event.isControlDown()) {
+					msg1 = "STRG + " + msg1;
+				}
+				if (event.isShiftDown()) {
+					msg1 = "UMSCHALT + " + msg1;
+				}
+			}
+		}
+		repaint();
+	}
+
+	public void keyReleased(KeyEvent event) {
+		msg1 = "";
+		repaint();
+	}
+
+	public void keyTyped(KeyEvent event) {
+		char key = event.getKeyChar();
+		
+//		System.out.println("keyTyped CODE1 "+event.getKeyCode());
+//		
+//		Integer myCode = event.getKeyCode();
+//		
+//		System.out.println("keyTyped CODE2 "+myCode);
+//		
+//		System.out.println("keyTyped CHAR3 "+event.getKeyChar());
+//		
+//		System.out.println("keyTyped CHAR4 "+event.getKeyText(event.getKeyCode()));
+//		
+//		System.out.println("keyTyped CHAR5 "+event.getKeyText(myCode));
+		
+		if (key == KeyEvent.VK_BACK_SPACE) {
+			if (msg2.length() > 0) {
+				msg2 = msg2.substring(0, msg2.length() - 1);
+			}
+		} else if (key >= KeyEvent.VK_SPACE) {
+			if (msg2.length() < 40) {
+				msg2 += event.getKeyChar();
+			}
+		}
+		repaint();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java b/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java
new file mode 100644
index 0000000..97c2573
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.*;
+import java.awt.event.*;
+
+public class ReadKeyCodesTest extends Frame implements KeyListener {
+	private static final long serialVersionUID = -1722917067803656922L;
+	String msg1 = "";
+	String msg2 = "";
+
+	public static void main(String[] args) {
+		new ReadKeyCodesTest();
+	}
+
+	public ReadKeyCodesTest() {
+		super("TestKeyCodes");
+		addKeyListener(this);
+		addWindowListener(new WindowClosingAdapter());
+		setBackground(Color.lightGray);
+		setSize(300, 200);
+		setLocation(200, 100);
+		setVisible(true);
+	}
+
+	public void paint(Graphics g) {
+		if (msg1.length() > 0) {
+			draw3DRect(g, 20, 50, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg1, 30, 70);
+		}
+		if (msg2.length() > 0) {
+			draw3DRect(g, 20, 100, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg2, 30, 120);
+		}
+	}
+
+	void draw3DRect(Graphics g, int x, int y, int width, int height) {
+		g.setColor(Color.darkGray);
+		g.drawLine(x, y, x, y + height);
+		g.drawLine(x, y, x + width, y);
+		g.setColor(Color.white);
+		g.drawLine(x + width, y + height, x, y + height);
+		g.drawLine(x + width, y + height, x + width, y);
+	}
+
+	public void keyPressed(KeyEvent event) {
+		msg1 = "";
+		System.out.println("keyPressed "+event.getKeyCode());
+		if (event.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			int key = event.getKeyCode();
+			// Funktionstaste abfragen
+			if (key == KeyEvent.VK_F1) {
+				msg1 = "F1";
+			} else if (key == KeyEvent.VK_F2) {
+				msg1 = "F2";
+			} else if (key == KeyEvent.VK_F3) {
+				msg1 = "F3";
+			}
+			// Modifier abfragen
+			if (msg1.length() > 0) {
+				if (event.isAltDown()) {
+					msg1 = "ALT + " + msg1;
+				}
+				if (event.isControlDown()) {
+					msg1 = "STRG + " + msg1;
+				}
+				if (event.isShiftDown()) {
+					msg1 = "UMSCHALT + " + msg1;
+				}
+			}
+		}
+		repaint();
+	}
+
+	public void keyReleased(KeyEvent event) {
+		msg1 = "";
+		repaint();
+	}
+
+	public void keyTyped(KeyEvent event) {
+		char key = event.getKeyChar();
+		
+		System.out.println("keyTyped "+event.getKeyCode());
+		
+		if (key == KeyEvent.VK_BACK_SPACE) {
+			if (msg2.length() > 0) {
+				msg2 = msg2.substring(0, msg2.length() - 1);
+			}
+		} else if (key >= KeyEvent.VK_SPACE) {
+			if (msg2.length() < 40) {
+				msg2 += event.getKeyChar();
+			}
+		}
+		repaint();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java b/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java
new file mode 100644
index 0000000..f1d6559
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.event.KeyEvent;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestKeyCodesNumber extends TestCase {
+
+	private static final Logger log = Logger.getLogger(TestKeyCodesNumber.class);
+
+	@Test
+	public void testKeyCodes() {
+		try {
+
+			for (int i = 1; i < 600; i++) {
+
+				String charText = KeyEvent.getKeyText(i);
+
+				log.debug("ERROR " + i + " " + charText);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[testKeyCodes]", err);
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java b/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java
new file mode 100644
index 0000000..5a9fc17
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestReadKeyCodesNumber extends TestCase {
+
+	private static final Logger log = Logger
+			.getLogger(TestReadKeyCodesNumber.class);
+
+	@Test
+	public void testTestKeyCodesNumber() {
+		try {
+
+			this.testKeyCodes();
+
+		} catch (Exception er) {
+			log.debug("ERROR ", er);
+		}
+	}
+
+	@Test
+	public void testKeyCodes() {
+		try {
+
+		} catch (Exception err) {
+			log.error("[testKeyCodes]", err);
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java b/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
new file mode 100644
index 0000000..394bd59
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.red5.client.net.rtmp.ClientExceptionHandler;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.rtmp.event.Notify;
+
+public class LoadTestRtmpClient extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, ClientExceptionHandler {
+
+	private class CallObject {
+		Date started;
+		Date ended;
+
+		public CallObject(Date started) {
+			super();
+			this.started = started;
+		}
+
+		public Date getStarted() {
+			return started;
+		}
+
+		public Date getEnded() {
+			return ended;
+		}
+
+		public void setEnded(Date ended) {
+			this.ended = ended;
+		}
+	}
+	
+	private int counterCalls = 0; // a call is always 2 steps
+	private Map<Integer, CallObject> calls = new HashMap<Integer, CallObject>();
+	private boolean isConnected = false;
+	private final int instanceId;
+
+	public LoadTestRtmpClient(int instanceId) {
+		this.instanceId = instanceId;
+	}
+	
+	public boolean performCall() {
+
+		// System.err.println("performCall " + isConnected);
+
+		if (!isConnected) {
+			return false;
+		}
+		
+		if (counterCalls % 2 == 0) {
+
+			if (counterCalls > 10) {
+
+				return true;
+
+			}
+
+			System.err.println("Rest o do new call " + counterCalls);
+			counterCalls++;
+
+			Map<String, Integer> map = new HashMap<String, Integer>();
+			map.put("instanceId", instanceId);
+			map.put("count", counterCalls);
+			calls.put(counterCalls, new CallObject(new Date()));
+			invoke("loadTestSyncMessage", new Object[] {"syncMessageToCurrentScopeResult", map, true }, this);
+
+		} else {
+			System.err.println("Call running " + counterCalls);
+		}
+		
+		
+		
+		return false;
+	}
+	
+	public double getAverageTime() {
+		long overallTime = 0L;
+
+		for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
+
+			long deltaTime = tCallObjectEntry.getValue().getEnded().getTime()
+					- tCallObjectEntry.getValue().getStarted().getTime();
+
+			// System.err.println("Key " + tCallObjectEntry.getKey()
+			// + "deltaTime " + deltaTime);
+
+			overallTime += deltaTime;
+
+		}
+
+		double averageTime = Long.valueOf(overallTime).doubleValue()
+				/ Integer.valueOf(calls.size()).doubleValue();
+
+		return averageTime;
+	}
+	
+	public void resultReceived(IPendingServiceCall call) {
+		String method = call == null ? null : call.getServiceMethodName();
+		System.err.println("method "+method);
+		if (method == null) {
+			return;
+		}
+		if ("connect".equals(method)) {
+			isConnected = true;
+		}
+
+		if ("loadTestSyncMessage".equals(method)) {
+
+			CallObject tCallObject = calls.get(counterCalls);
+			if (tCallObject == null) {
+
+				for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
+
+					System.err.println("Key " + tCallObjectEntry.getKey()
+							+ "tCallObjectEntry "
+							+ tCallObjectEntry.getValue().getStarted());
+
+				}
+
+				throw new RuntimeException(
+						"tCallObject is null currentCountReturn "
+								+ counterCalls + " list size "
+								+ calls.size());
+			}
+			tCallObject.setEnded(new Date());
+			calls.put(counterCalls, tCallObject);
+
+			System.err.println("Call received " + counterCalls
+					+ " instanceId: " + instanceId);
+
+			counterCalls++;
+		}
+
+	}
+
+
+	public void onStreamEvent(Notify notify) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public int getNumberOfCalls() {
+		return calls.size();
+	}
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
new file mode 100644
index 0000000..392f76c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SimulateLoad extends Thread {
+
+	private static final Logger log = LoggerFactory
+			.getLogger(SimulateLoad.class);
+
+	private LoadTestRtmpClient loadTestRtmpClient;
+	private boolean testRunning = true;
+
+	public double getAverageTime() {
+		return loadTestRtmpClient.getAverageTime();
+	}
+
+	public boolean isTestRunning() {
+		return testRunning;
+	}
+
+	public static void main(String... args) {
+		try {
+			if (args.length != 4) {
+				new RuntimeException(
+						"4 args needed, host, port, context, instanceId");
+			}
+			for (String arg : args) {
+				System.err.println("arg: " + arg);
+			}
+			SimulateLoad simulateLoad = new SimulateLoad(args[0], Integer
+					.valueOf(args[1]).intValue(), args[2], Integer.valueOf(
+					args[3]).intValue());
+			simulateLoad.start();
+			System.err.println("started ");
+
+		} catch (Exception er) {
+			er.printStackTrace();
+			log.error("Error", er);
+		}
+	}
+
+	public SimulateLoad(String host, int port, String applicationContext,
+			int instanceId) {
+		super();
+
+		loadTestRtmpClient = new LoadTestRtmpClient(instanceId);
+		loadTestRtmpClient.connect(host, port, applicationContext,
+				loadTestRtmpClient);
+	}
+
+	public void run() {
+		try {
+
+			System.err.println("######### start client");
+
+			while (testRunning) {
+				testRunning = !loadTestRtmpClient.performCall();
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public int getNumberOfCalls() {
+		return loadTestRtmpClient.getNumberOfCalls();
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java
new file mode 100644
index 0000000..54b1e9d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
+public class SimulateLoadTest {
+
+	private int numberOfClients = 25;
+	private List<SimulateLoad> simulateLoadList = new ArrayList<SimulateLoad>();
+
+	private String host = "192.168.1.7";
+	private final int port = 1935;
+	private final String applicationContext = "openmeetings/1";
+
+	public SimulateLoadTest(String host, int numberOfClients) {
+		this.host = host;
+		this.numberOfClients = numberOfClients;
+	}
+
+	public static void main(String... args) {
+		if (args.length != 2) {
+			return;
+		}
+		SimulateLoadTest simulateLoadTest = new SimulateLoadTest(args[0],
+				Integer.valueOf(args[1]).intValue());
+		simulateLoadTest.test();
+	}
+
+
+	@Test
+	public void test() {
+		try {
+			for (int i = 0; i < numberOfClients; i++) {
+				SimulateLoad simulateLoad = new SimulateLoad(host, port,
+						applicationContext, i);
+				simulateLoadList.add(simulateLoad);
+				Thread.sleep(100);
+			}
+
+			System.err.println("Clients initialized");
+
+			for (SimulateLoad simulateLoad : simulateLoadList) {
+				simulateLoad.start();
+				Thread.sleep(50);
+			}
+
+			System.err.println("Clients started");
+
+			boolean running = true;
+			while (running) {
+				boolean doRunStill = false;
+				for (SimulateLoad simulateLoad : simulateLoadList) {
+					if (simulateLoad.isTestRunning()) {
+						doRunStill = true;
+						break;
+					}
+				}
+				running = doRunStill;
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+
+			double overallTime = 0;
+
+			for (SimulateLoad simulateLoad : simulateLoadList) {
+				overallTime += simulateLoad.getAverageTime();
+				System.err.println("Number of calls: "
+						+ simulateLoad.getNumberOfCalls() + "overallTime: "
+						+ overallTime + " averageTime"
+						+ simulateLoad.getAverageTime());
+			}
+
+			double deltaAllClients = overallTime
+					/ Integer.valueOf(simulateLoadList.size()).doubleValue();
+
+			System.err.println("Average time per call: " + deltaAllClients);
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java b/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java
new file mode 100644
index 0000000..62806f0
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.test.AbstractSpringTest;
+import org.junit.After;
+import org.junit.Before;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxProfile;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class AbstractTestDefaults extends AbstractSpringTest {
+	
+	@Autowired
+	private LabelDao fieldLanguagesValuesDao;
+
+	public WebDriver driver = null;
+	
+	private String BASE_URL = "http://localhost:5080/openmeetings";
+	private String username = "swagner";
+	private String userpass = "qweqwe";
+	private String orgname = "seleniumtest";
+	private String email = "selenium@openmeetings.apache.org";
+	private String locale = "en-us";
+
+
+	public String getBASE_URL() {
+		return BASE_URL;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public String getUserpass() {
+		return userpass;
+	}
+
+	public String getOrgname() {
+		return orgname;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+	
+	public Long getLanguageId() {
+		return 1L;
+	}
+	
+	public String getLocale() {
+		return locale;
+	}
+
+	// setting this to false can be handy if you run the test from inside
+	// Eclipse, the browser will not shut down after the test so you can start
+	// to diagnose the test issue
+	public boolean doTearDownAfterTest = false;
+	
+	public String getString(long id) {
+		return fieldLanguagesValuesDao.getString(id, getLanguageId());
+	}
+
+	/**
+	 * Make method overwrite possible to have custom behavior in tests
+	 * 
+	 * @return
+	 */
+	public boolean getDoTearDownAfterTest() {
+		return doTearDownAfterTest;
+	}
+
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		FirefoxProfile profile = new FirefoxProfile();
+		profile.setPreference("intl.accept_languages", getLocale());
+		driver = new FirefoxDriver(profile);
+	}
+
+	/**
+	 * This test is a basic test to verify the default loader mechanism works
+	 * it is not intend to be a part of any sub test
+	 * 
+	 * @throws Exception
+	 */
+	//@Test
+	public void smokeTest() throws Exception {
+		try {
+			driver.get(getBASE_URL());
+
+			testIsInstalledAndDoInstallation();
+
+			SeleniumUtils.inputText(driver, "login", getUsername());
+			SeleniumUtils.inputText(driver, "pass", getUserpass());
+
+			WebElement signInButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), 'Sign in')]]", true, true);
+			signInButton.click();
+
+			SeleniumUtils.elementExists(driver,
+					"//h3[contains(text(), 'Help and support')]", true);
+		} catch (Exception e) {
+			SeleniumUtils.makeScreenShot(this.getClass().getSimpleName(), e,
+					driver);
+			throw e;
+		}
+	}
+
+	/**
+	 * Throws exception in case that test fails, so it is important to not catch 
+	 * that exception but really let the test fail!
+	 * 
+	 * @throws Exception
+	 */
+	protected void testIsInstalledAndDoInstallation() throws Exception {
+
+		WebElement wicketExtensionsWizardHeaderTitle = SeleniumUtils
+				.findElement(driver, "wicketExtensionsWizardHeaderTitle", false, true);
+		if (wicketExtensionsWizardHeaderTitle == null) {
+			return;
+		}
+		if (wicketExtensionsWizardHeaderTitle.getText()
+				.contains("Installation")) {
+			System.out.println("Do Installation");
+			doInstallation();
+		}
+
+	}
+
+	private void doInstallation() throws Exception {
+		Thread.sleep(3000L);
+
+		List<WebElement> buttons_next = SeleniumUtils.findElements(driver,
+				"buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		SeleniumUtils.inputText(driver, "view:cfg.username", getUsername());
+		SeleniumUtils.inputText(driver, "view:cfg.password", getUserpass());
+		SeleniumUtils.inputText(driver, "view:cfg.email", getEmail());
+		SeleniumUtils.inputText(driver, "view:cfg.group", getOrgname());
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(2000L);
+
+		List<WebElement> elements = SeleniumUtils.findElements(driver,
+				"buttons:finish", true);
+
+		elements.get(1).sendKeys(Keys.RETURN);
+
+		long maxMilliSecondsWait = 120000;
+
+		while (maxMilliSecondsWait > 0) {
+
+			// check if installation is complete by searching for the link on
+			// the success page
+			WebElement enterApplicationLink = SeleniumUtils.findElement(driver,
+					"//a[contains(@href,'install')]", false, true);
+
+			if (enterApplicationLink == null) {
+				System.out
+						.println("Installation running - wait 3 more seconds and check again");
+
+				Thread.sleep(3000L);
+				maxMilliSecondsWait -= 3000;
+			} else {
+				maxMilliSecondsWait = 0;
+
+				enterApplicationLink.click();
+
+				return;
+			}
+		}
+
+		throw new Exception("Timeout during installation");
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		if (getDoTearDownAfterTest()) {
+			driver.close();
+			driver.quit();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java b/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
new file mode 100644
index 0000000..b525125
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class SeleniumUtils {
+	// we need to retry some actions because our web site is dynamic
+	static int numberOfRetries = 10;
+
+	// we need to sleep to make sure Ajax could complete whatever it does
+	static long defaultSleepInterval = 1000;
+
+	public static void inputText(WebDriver driver, String search,
+			String inputText) throws Exception {
+		WebElement element = SeleniumUtils.findElement(driver, search, true, true);
+
+		//clear text before adding input
+		element.clear();
+		
+		// Would make send to check if this element is really an input text
+		element.sendKeys(inputText);
+	}
+
+	public static void click(WebDriver driver, String search) throws Exception {
+		WebElement element = SeleniumUtils.findElement(driver, search, true, true);
+		element.click();
+	}
+	
+	/**
+	 * 
+	 * @param driver
+	 * @param search
+	 * @param throwException
+	 *            under some circumstance you do't want to exit the test here
+	 * @return
+	 * @throws Exception
+	 */
+	public static List<WebElement> findElements(WebDriver driver, String search,
+			boolean throwException) throws Exception {
+		for (int i = 0; i < numberOfRetries; i++) {
+			List<WebElement> elements = _findElement(driver, search);
+			if (elements != null) {
+				return elements;
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (throwException) {
+			throw new Exception("Could not find element with specified path "
+					+ search);
+		}
+
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param driver
+	 * @param search
+	 * @param throwException
+	 *            under some circumstance you do't want to exit the test here
+	 * @param onlyReturnVisisbleElement TODO
+	 * @return
+	 * @throws Exception
+	 */
+	public static WebElement findElement(WebDriver driver, String search,
+			boolean throwException, boolean onlyReturnVisisbleElement) throws Exception {
+		for (int i = 0; i < numberOfRetries; i++) {
+			List<WebElement> elements = _findElement(driver, search);
+			if (elements != null) {
+				
+				if (!onlyReturnVisisbleElement) {
+					return elements.get(0);
+				}
+				
+				for (WebElement element : elements) {
+					if (element.isDisplayed()) {
+						return element;
+					}
+				}
+				
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (throwException) {
+			throw new Exception("Could not find element with specified path "
+					+ search);
+		}
+
+		return null;
+	}
+
+	private static By[] _getSearchArray(String search) {
+		//If xpath we have to use it, if xpath is used with By.className(...) there will be an exception
+		if (search.startsWith("//")) {
+			return new By[] { By.xpath(search) };
+		} else {
+			return new By[] { By.id(search), By.name(search), By.className(search),
+					By.tagName(search), By.xpath(search) };
+		}
+	}
+
+	private static List<WebElement> _findElement(WebDriver driver, String search) {
+		for (By by : _getSearchArray(search)) {
+			try {
+				List<WebElement> elements = driver.findElements(by);
+				if (elements != null && elements.size() > 0) {
+					return elements;
+				}
+			} catch (Exception e) {
+				// Do not show any warnings
+			}
+		}
+		return null;
+	}
+
+	public static void elementExists(WebDriver driver, String search,
+			boolean shouldExist) throws Exception {
+		Thread.sleep(defaultSleepInterval);
+
+		boolean doesExist = !shouldExist;
+
+		for (int i = 0; i < numberOfRetries; i++) {
+			doesExist = checkExists(driver, search);
+			if (doesExist == shouldExist) {
+				break;
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (doesExist != shouldExist) {
+			if (shouldExist) {
+				throw new Exception("Element could not be found: " + search);
+			} else {
+				throw new Exception("Unexpected Element was found: " + search);
+			}
+		}
+	}
+
+	private static boolean checkExists(WebDriver driver, String search) {
+		for (By by : _getSearchArray(search)) {
+			try {
+				List<WebElement> element = driver.findElements(by);
+				if (element.size() > 0) {
+					return true;
+				}
+			} catch (Exception e) {
+				// Do not show any warnings
+			}
+		}
+		return false;
+	}
+
+	public static void makeScreenShot(String testName, Exception e,
+			WebDriver driver) {
+		try {
+			DateFormat df = new SimpleDateFormat("MM-dd-yyyy_HH-mm-ss");
+			String fileName = e.getMessage().replace(" ", "_");
+			fileName = fileName.replaceAll("(\r\n|\n)", "");
+			fileName = fileName.replaceAll("/", "");
+
+			if (fileName.length() > 100) {
+				fileName = fileName.substring(0, 100);
+			}
+
+			fileName = fileName + "_" + df.format(new Date()) + ".png";
+			File screenShotFile = ((TakesScreenshot) driver)
+					.getScreenshotAs(OutputType.FILE);
+
+			String path = "." + File.separatorChar + "build"
+					+ File.separatorChar + "screenshots" + File.separatorChar
+					+ testName;
+
+			File screenshotFolder = new File(path);
+			if (!screenshotFolder.exists()) {
+				screenshotFolder.mkdirs();
+			}
+
+			System.out.println("screenshot copy from: "
+					+ screenShotFile.getAbsolutePath());
+			System.out.println("Length Filename: " + fileName.length()
+					+ " - Writing screenshot to: " + path + File.separatorChar
+					+ fileName);
+
+			FileUtils.moveFile(screenShotFile, new File(path
+					+ File.separatorChar + fileName));
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java b/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
new file mode 100644
index 0000000..0a0a5d5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.util.Date;
+
+import org.junit.Test;
+import org.openqa.selenium.Alert;
+import org.openqa.selenium.WebElement;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+
+public class TestSignUp extends AbstractTestDefaults {
+	
+	String pass = "pass";
+	
+	@Override
+	public boolean getDoTearDownAfterTest() {
+		return false;
+	}
+
+	@Test
+	public void testSignUp() throws Exception {
+		
+		try {
+			driver.get(getBASE_URL());
+			
+			String currentRandomCounter = "" + ((new Date().getTime())/1000);
+			String userName = "seba" + currentRandomCounter;
+			String email = "hans." + currentRandomCounter + "@openmeetings.apache.org";
+			
+			super.testIsInstalledAndDoInstallation();
+			
+			WebElement signUpButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(123) + "')]]", true, true);
+			signUpButton.click();
+			
+			// ##################################
+			// Test validation message for passwords to be identical
+			// ##################################
+			doSignUp("Hans","Muster", userName, "pw", "pw2", email);
+			
+			//Find Error label-id 232 "Please enter two identical passwords"
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) + "')]", true, true);
+			
+			
+			// ##################################
+			// Sign up with user and sign in
+			// ##################################
+			doSignUp("Hans","Muster", userName, pass, pass, email);
+			
+			
+			//Check for popup with success message and email to check
+			//Labelid 674
+			SeleniumUtils.findElement(driver, "//span[contains(text(), '" + getString(674) + "')]", true, true);
+			
+			//click button to close popup
+			WebElement signUpSucessPopUpOkButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + DialogButtons.OK.toString() + "')]]", true, true);
+			signUpSucessPopUpOkButton.click();
+			
+			//Login with user
+			SeleniumUtils.inputText(driver, "login", userName);
+			SeleniumUtils.inputText(driver, "pass", pass);
+	
+			//click labelid 112 "Sign In"
+			WebElement signInButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(112) + "')]]", true, true);
+			signInButton.click();
+	
+			// check for some text in dashbaord, labelid 281, "Help and support"
+			SeleniumUtils.elementExists(driver,
+					"//h3[contains(text(), '" + getString(281) + "')]", true);
+			
+			//sign out
+			WebElement signOutLink = SeleniumUtils.findElement(driver,
+					"//a[contains(text(), '" + getString(310) + "')]", true, true);
+			signOutLink.click();
+			
+			Alert alert = driver.switchTo().alert();
+			alert.accept();
+			
+			// ##################################
+			// Sign up with same user and email and check duplicate messages
+			// ##################################
+			
+			signUpButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(123) + "')]]", true, true);
+			signUpButton.click();
+			
+			doSignUp("Hans","Muster", userName, pass, pass, email);
+			
+			//Find Error label-id 105, The username is already used
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(105) + "')]", true, true);
+			
+			//Find Error label-id 1000, This email is already used by another user.
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(1000) + "')]", true, true);
+		} catch (Exception e) {
+			SeleniumUtils.makeScreenShot(this.getClass().getSimpleName(), e,
+					driver);
+			throw e;
+		}	
+	}
+	
+	private void doSignUp(String firstName, String lastName, String login, String password,
+					String confirmPassword, String email) throws Exception {
+		
+		SeleniumUtils.inputText(driver, "firstName", firstName);
+		SeleniumUtils.inputText(driver, "lastName", lastName);
+		SeleniumUtils.inputText(driver, "//input[@name='login']", login);
+		SeleniumUtils.inputText(driver, "password", password);
+		SeleniumUtils.inputText(driver, "confirmPassword", confirmPassword);
+		SeleniumUtils.inputText(driver, "email", email);
+		
+		WebElement submitButton = SeleniumUtils.findElement(driver,
+				"//button[span[contains(text(), 'Register')]]", true, true);
+		submitButton.click();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java b/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
new file mode 100644
index 0000000..7045307
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDbSession extends AbstractJUnitDefaults {
+
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestDbSession.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+
+	@Autowired
+	private ClientDao clientDao;
+
+	@Test
+	public void testDbSessionFunctions() {
+
+		clientDao.cleanAllClients();
+		
+		List<Server> serverList = serverDao.getActiveServers();
+
+		Server server = null;
+		if (serverList.size() > 0) {
+			server = serverList.get(0);
+		} else {
+			server = new Server();
+			server.setName("Test Server");
+			server.setActive(true);
+			serverDao.update(server, null);
+		}
+
+		Client cl1 = new Client();
+		cl1.setStreamid("1");
+		cl1.setServer(null);
+		cl1.setUser_id(1L);
+		cl1.setRoom_id(1L);
+		cl1.setPublicSID("public1");
+		clientDao.add(cl1);
+
+		Client cl2 = new Client();
+		cl2.setStreamid("2");
+		cl2.setServer(null);
+		cl2.setRoom_id(1L);
+		cl2.setUser_id(2L);
+		cl2.setPublicSID("public2");
+		clientDao.add(cl2);
+
+		Client cl3 = new Client();
+		cl3.setStreamid("3");
+		cl3.setServer(server);
+		cl3.setRoom_id(3L);
+		cl3.setUser_id(3L);
+		cl3.setPublicSID("public3");
+		clientDao.add(cl3);
+		
+		Client clTest = clientDao.getClientByServerAndStreamId(null, "1");
+
+		log.debug("cl1 " + cl1);
+		log.debug("clTest " + clTest);
+
+		assertEquals(clTest.getId(), cl1.getId());
+
+		Client clTest3 = clientDao.getClientByServerAndStreamId(server, "3");
+
+		log.debug("cl3 " + cl3);
+		log.debug("clTest3 " + clTest3);
+
+		assertEquals(clTest3.getId(), cl3.getId());
+
+		Client clTest_NOT_3 = clientDao.getClientByServerAndStreamId(null, "3");
+
+		log.debug("clTest_NOT_3 " + clTest_NOT_3);
+		assertEquals(null, clTest_NOT_3);
+		
+		long numberOfClients1 = clientDao.countClientsByServerAndStreamId(null, "1");
+		assertEquals(1, numberOfClients1);
+		
+		long numberOfClients3 = clientDao.countClientsByServerAndStreamId(server, "3");
+		assertEquals(1, numberOfClients3);
+		
+		long numberOfClients4 = clientDao.countClientsByServerAndStreamId(null, "3");
+		assertEquals(0, numberOfClients4);
+		
+		List<Client> clTest_Pub_1_list = clientDao.getClientsByPublicSIDAndServer(null, "public1");
+		assertEquals(cl1.getId(), clTest_Pub_1_list.get(0).getId());
+		
+		List<Client> clTest_Pub_3_list = clientDao.getClientsByPublicSIDAndServer(server, "public3");
+		assertEquals(cl3.getId(), clTest_Pub_3_list.get(0).getId());
+		
+		List<Client> clTest_Fail_list = clientDao.getClientsByPublicSIDAndServer(null, "public3");
+		assertEquals(0, clTest_Fail_list.size());
+		
+		List<Client> clTest_PubAll_1_list = clientDao.getClientsByPublicSID("public1");
+		assertEquals(cl1.getId(), clTest_PubAll_1_list.get(0).getId());
+		
+		List<Client> clTest_PubAll_3_list = clientDao.getClientsByPublicSID("public3");
+		assertEquals(cl3.getId(), clTest_PubAll_3_list.get(0).getId());
+		
+		List<Client> clTest_FailAll_list = clientDao.getClientsByPublicSID("public4");
+		assertEquals(0, clTest_FailAll_list.size());
+		
+		List<Client> clientsByServerNull = clientDao.getClientsByServer(null);
+		assertEquals(2, clientsByServerNull.size());
+		
+		List<Client> clientsByServer = clientDao.getClientsByServer(server);
+		assertEquals(1, clientsByServer.size());
+		
+		List<Client> clientsAll = clientDao.getClients();
+		assertEquals(3, clientsAll.size());
+		
+		//by userid
+		List<Client> clTest_User_1_list = clientDao.getClientsByUserId(null, 1L);
+		assertEquals(cl1.getId(), clTest_User_1_list.get(0).getId());
+		
+		List<Client> clTest_User_3_list = clientDao.getClientsByUserId(server, 3L);
+		assertEquals(cl3.getId(), clTest_User_3_list.get(0).getId());
+		
+		List<Client> clTest_UserFail_list = clientDao.getClientsByUserId(null, 3L);
+		assertEquals(0, clTest_UserFail_list.size());
+		
+		//by roomid
+		List<Client> clTest_Room_1_list = clientDao.getClientsByRoomId(1L);
+		assertEquals(2, clTest_Room_1_list.size());
+		
+		List<Client> clTest_Room_3_list = clientDao.getClientsByRoomId(3L);
+		assertEquals(cl3.getId(), clTest_Room_3_list.get(0).getId());
+		
+		List<Client> clTest_RoomFail_list = clientDao.getClientsByRoomId(2L);
+		assertEquals(0, clTest_RoomFail_list.size());
+		
+		//count all
+		int countAll = clientDao.countClients();
+		assertEquals(3, countAll);
+		
+		//count by server
+		int clTest_Count_1_list = clientDao.countClientsByServer(null);
+		assertEquals(2, clTest_Count_1_list);
+		
+		int clTest_Count_3_list = clientDao.countClientsByServer(server);
+		assertEquals(1, clTest_Count_3_list);
+		
+		//remove by id
+		clientDao.delete(cl1);
+		
+		int clTest_Count_Delete_list = clientDao.countClientsByServer(null);
+		assertEquals(1, clTest_Count_Delete_list);
+		
+		//remove by server and streamid
+		clientDao.removeClientByServerAndStreamId(null, "2");
+		
+		clTest_Count_Delete_list = clientDao.countClientsByServer(null);
+		assertEquals(0, clTest_Count_Delete_list);
+		
+		clientDao.removeClientByServerAndStreamId(server, "3");
+		
+		clTest_Count_Delete_list = clientDao.countClientsByServer(server);
+		assertEquals(0, clTest_Count_Delete_list);
+		
+		//delete all
+		clientDao.cleanAllClients();
+
+		countAll = clientDao.countClients();
+		assertEquals(0, countAll);
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java b/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
new file mode 100644
index 0000000..0d92e73
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDbSessionGetRoomIds extends AbstractJUnitDefaults {
+
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestDbSessionGetRoomIds.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+
+	@Autowired
+	private ClientDao clientDao;
+
+	@Test
+	public void testDbSessionFunctions() {
+
+		clientDao.cleanAllClients();
+		
+		List<Server> serverList = serverDao.getActiveServers();
+
+		Server server = null;
+		if (serverList.size() > 0) {
+			server = serverList.get(0);
+		} else {
+			server = new Server();
+			server.setName("Test Server");
+			server.setActive(true);
+			serverDao.update(server, null);
+		}
+
+		Client cl1 = new Client();
+		cl1.setStreamid("1");
+		cl1.setServer(server);
+		cl1.setUser_id(1L);
+		cl1.setRoom_id(1L);
+		cl1.setPublicSID("public1");
+		clientDao.add(cl1);
+
+		Client cl2 = new Client();
+		cl2.setStreamid("2");
+		cl2.setServer(server);
+		cl2.setRoom_id(1L);
+		cl2.setUser_id(2L);
+		cl2.setPublicSID("public2");
+		clientDao.add(cl2);
+
+		Client cl3 = new Client();
+		cl3.setStreamid("3");
+		cl3.setServer(server);
+		cl3.setRoom_id(3L);
+		cl3.setUser_id(3L);
+		cl3.setPublicSID("public3");
+		clientDao.add(cl3);
+		
+		List<Long> roomids = clientDao.getRoomsIdsByServer(server);
+
+		assertEquals(2, roomids.size());
+		
+		//delete all
+		clientDao.cleanAllClients();
+
+		int countAll = clientDao.countClients();
+		assertEquals(0, countAll);
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java b/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
new file mode 100644
index 0000000..45e17ef
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Random;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.session.store.HashMapStore;
+import org.apache.openmeetings.session.store.IClientPersistenceStore;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestHashMapSession extends AbstractJUnitDefaults {
+	
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestHashMapSession.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private HashMapStore cache;
+	
+	@Test
+	public void testHashMapSession() {
+		
+		//make sure the cache is empty before starting the test
+		cache.clearCache();
+		
+		for (int i=0;i<20;i++) {
+			
+			String streamId = ""+i;
+			
+			Client rcm = new Client();
+			rcm.setConnectedSince(new Date());
+			rcm.setStreamid(streamId);
+			rcm.setScope("scopeName");
+			long random = System.currentTimeMillis() + new BigInteger(256, new Random()).longValue();
+			
+			rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
+					.createPassPhrase(String.valueOf(random).toString()));
+
+			rcm.setUserport(0);
+			rcm.setUserip("remoteAddress");
+			rcm.setSwfurl("swfUrl");
+			rcm.setIsMod(new Boolean(false));
+			rcm.setCanDraw(new Boolean(false));
+			rcm.setIsAVClient(false);
+
+			if (cache.containsKey(null, streamId)) {
+				log.error("Tried to add an existing Client " + streamId);
+				break;
+			}
+
+			cache.put(rcm.getStreamid(), rcm);
+			
+			cache.remove(null, streamId);
+		
+		}
+		
+		String logString = cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
+		
+		
+		log.debug("######## \n\r "+ logString + " \n\r ########");
+		
+		assertEquals(0, cache.size());
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java b/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java
new file mode 100644
index 0000000..6a70378
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.smoke;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestSmokeBasic extends AbstractJUnitDefaults {
+	@Autowired
+	private UserDao userDao;
+	
+	@Test
+	public void createErrorValueAndTest() {
+        assertNotNull(userDao.get(1L));
+	}	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java b/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
new file mode 100644
index 0000000..ef1a003
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.junit.Test;
+
+import com.sun.mail.util.MailSSLSocketFactory;
+
+/**
+ * 
+ * @author swagner
+ *
+ */
+public class TestMailSending {
+	
+	//Example GMail email server data
+	private String smtpServer = "smtp.gmail.com";
+	private String smtpPort = "25";
+	private String from = "test@apache.org";
+	private String mailAuthUser = "test@gmail.com";
+	private String mailAuthPass = "*******";
+	private boolean mailTls = true;
+
+	/**
+	 * @Test
+	 * 
+	 * It does not make a lot of send to test this in every test suite, it is more for manual testing.
+	 * Handy to check your server and the JavaMail setting properties
+	 * 
+	 */
+	@Test
+	public void doTestSendEmail() {
+		try{
+			
+			Transport.send(getMimeMessage());
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+		assertTrue(true);
+	}
+	
+	private MimeMessage getMimeMessage() throws Exception {
+		// Building MimeMessage
+		MimeMessage msg = getBasicMimeMessage();
+		msg.setSubject("getSubject()");
+		msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse("seba.wagner@gmail.com", false));
+		
+		return appendBody(msg);
+	}
+	
+	private MimeMessage appendBody(MimeMessage msg) throws MessagingException, IOException {
+		// -- Set the subject and body text --
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource("getBody", "text/html; charset=\"utf-8\"")));
+
+		// -- Set some other header information --
+		msg.setHeader("X-Mailer", "XML-Mail");
+		msg.setSentDate(new Date());
+		
+		return msg;
+	}
+	
+	private MimeMessage getBasicMimeMessage() throws Exception {
+		System.out.println("getBasicMimeMessage");
+		Properties props = new Properties(System.getProperties());
+
+		props.put("mail.smtp.connectiontimeout", 30000); //default timeout is 30 seconds, javaMail default is "infinite"
+		props.put("mail.smtp.timeout", 30000); //default timeout is 30 seconds, javaMail default is "infinite"
+		
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+		
+		if (mailTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+			MailSSLSocketFactory sf = new MailSSLSocketFactory();
+		    sf.setTrustAllHosts(true);
+		    props.put("mail.smtp.ssl.socketFactory", sf);
+		}
+
+		// Check for Authentication
+		Session session = null;
+		if (mailAuthUser != null && mailAuthUser.length() > 0
+				&& mailAuthPass != null && mailAuthPass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getInstance(props, new SmtpAuthenticator(mailAuthUser, mailAuthPass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage msg = new MimeMessage(session);
+		msg.setFrom(new InternetAddress(from));
+		return msg;
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java b/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java
new file mode 100644
index 0000000..290387f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestStateToLower extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private StateDao stateDao;
+	
+	@Test
+	public void doTestQuery() {
+		
+		State state_alabania = stateDao.getStateByName("Albania");
+		
+		State state_alabania_lower = stateDao.getStateByName("albaNia");
+		
+		assertTrue(state_alabania != null);
+		assertTrue(state_alabania_lower != null);
+		assertTrue(state_alabania.getState_id().equals(3L));
+		assertTrue(state_alabania_lower.getState_id().equals(3L));
+		assertTrue(state_alabania.getState_id().equals(state_alabania_lower.getState_id()));
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java b/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
new file mode 100644
index 0000000..06a6675
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Random;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserContact extends AbstractWicketTester {
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	Random random = new Random();
+	
+	@Test
+	public void testGetUser() throws Exception {
+		assertNull("Null should be returned in case User does not exist", userDao.get(Long.MAX_VALUE));
+	}
+	
+	@Test
+	public void createUserWithOrganisation() throws Exception {
+		int rnd = random.nextInt();
+		User u = getUser(rnd);
+		u.getOrganisation_users().add(new Organisation_Users(orgDao.get(1L)));
+		u = userDao.update(u, null);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getUser_id(), "pass" + rnd));
+		
+		User u1 = userDao.get(u.getUser_id());
+		assertNotNull("Just created user should not be null", u1);
+		assertNotNull("Just created user should have non null org-users", u1.getOrganisation_users());
+		assertFalse("Just created user should have not empty org-users", u1.getOrganisation_users().isEmpty());
+	}
+	
+	@Test
+	public void createUser() throws Exception {
+		int rnd = random.nextInt();
+		User u = createUser(rnd);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getUser_id(), "pass" + rnd));
+	}
+	
+	@Test
+	public void addContactByOwner() throws Exception {
+		login(null, null);
+		
+		List<User> users = userDao.getAllUsers();
+		assertNotNull("User list should not be null ", users);
+		assertFalse("User list should not be empty ", users.isEmpty());
+		
+		User contact = createUserContact(random.nextInt(), getUserId());
+		String email = contact.getAdresses().getEmail();
+		List<User> l = userDao.get(email, false, 0, 9999);
+		// check that contact is visible for admin
+		assertNotNull("Contact list should not be null for admin ", l);
+		assertFalse("Contact list should not be empty for admin ", l.isEmpty());
+		
+		// check that contact is visible for owner
+		l = userDao.get(email, 0, 9999, null, true, getUserId());
+		assertTrue("Contact list should not be empty for owner ", !l.isEmpty());		
+		//delete contact
+		userDao.delete(contact, getUserId());
+		l = userDao.get(email, false, 0, 9999);
+		assertTrue("Contact list should be empty after deletion", l.isEmpty());
+
+		User u = createUser(random.nextInt());
+		User u1 = createUser(random.nextInt());
+		contact = createUserContact(random.nextInt(), u.getUser_id());
+		email = contact.getAdresses().getEmail();
+		// check that contact is not visible for user that is not owner of this contact
+		l = userDao.get(email, 0, 9999, null, true, u1.getUser_id());
+		assertTrue("Contact list should be empty for another user", l.isEmpty());
+		//delete contact
+		userDao.delete(contact, u.getUser_id());
+		l = userDao.get(email, false, 0, 9999);
+		assertTrue("Contact list should be empty after deletion", l.isEmpty());
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java b/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
new file mode 100644
index 0000000..396356d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Random;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserCount extends AbstractWicketTester {
+	@Autowired
+	private UserDao userDao;
+	Random random = new Random();
+
+	@Test
+	public void testCountSearchUsres() throws Exception {
+		User u = createUser(random.nextInt());
+		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
+	}
+
+	@Test
+	public void testCountFilteredUsres() throws Exception {
+		User u = createUser(random.nextInt());
+		User contact = createUserContact(random.nextInt(), u.getUser_id());
+		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getUser_id()) == 1);
+	}
+
+	@Test
+	public void testCountUnfilteredUsres() throws Exception {
+		User u = createUser(random.nextInt());
+		createUserContact(random.nextInt(), u.getUser_id());
+		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
+	}
+		
+	@Test
+	public void testCountAllUsres() throws Exception {
+		assertTrue("Account of users should be positive", userDao.count() > 0);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java b/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java
new file mode 100644
index 0000000..3aa13d8
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserOrganisation extends AbstractJUnitDefaults {
+	@Autowired
+	private OrganisationUserDao orgUserDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+	public static final String ORG_NAME = "Test Org";
+	
+	private User getValidUser() {
+		for (User u : usersDao.getAllBackupUsers()) {
+			if (!u.getDeleted() && u.getOrganisation_users().size() > 0) {
+				return u;
+			}
+		}
+		fail("Unable to find valid user");
+		return null;  //unreachable
+	}
+	
+	@Test
+	public void getUsersByOrganisationId() {
+		User u = getValidUser();
+		Long orgId = u.getOrganisation_users().get(0).getOrganisation().getOrganisation_id();
+		List<Organisation_Users> ul = orgUserDao.get(orgId, 0, 9999);
+		assertTrue("Default Organisation should contain at least 1 user: " + ul.size(), ul.size() > 0);
+		
+		Organisation_Users ou = orgUserDao.getByOrganizationAndUser(orgId, u.getUser_id());
+		assertNotNull("Unable to found [organisation, user] pair - [" + orgId + "," + u.getUser_id() + "]", ou);
+	}
+	
+	@Test
+	public void addOrganisation() {
+		Organisation o = new Organisation();
+		o.setName(ORG_NAME);
+		Long orgId = orgDao.update(o, null).getOrganisation_id(); //inserted by not checked
+		assertNotNull("New Organisation have valid id", orgId);
+		
+		List<Organisation_Users> ul = orgUserDao.get(orgId, 0, 9999);
+		assertTrue("New Organisation should contain NO users: " + ul.size(), ul.size() == 0);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java b/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java
new file mode 100644
index 0000000..3ffc241
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAuth extends AbstractJUnitDefaults {
+	@Autowired
+	private MainService mService;
+
+	@Test
+	public void testTestAuth() {
+		Sessiondata sessionData = mService.getsessiondata();
+
+		System.out.println("sessionData: " + sessionData.getSession_id());
+
+		String tTemp = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase("test");
+
+		System.out.println("tTemp: " + tTemp);
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java b/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java
new file mode 100644
index 0000000..3087c29
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OmException;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestLogin extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private UserDao userDao;
+
+	@Test
+	public void testTestLogin() throws OmException {
+		User us = userDao.login(username, userpass);
+		
+		assertNotNull("User is unable to login", us);
+		
+		//mService.getLanguageById(1);
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java b/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
new file mode 100644
index 0000000..141ee3f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestMD5 extends TestCase {
+	
+	@Test
+	public void testTestMD5(){
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/web/LoginUI.java b/src/test/java/org/apache/openmeetings/test/web/LoginUI.java
new file mode 100644
index 0000000..51324cf
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/web/LoginUI.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.web;
+
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.wicket.util.tester.FormTester;
+
+public class LoginUI extends AbstractWicketTester {
+
+        //@Test Needs to much memory to start this test, and there is nothing useful here inside other then some basic
+        //proof of concept (basically the concept failed)
+	public void testLoginUi() {
+		
+		tester.startPage(MainPage.class);
+		
+		tester.assertRenderedPage(SignInPage.class);
+		
+		FormTester formTester = tester.newFormTester("signin:signin");
+		formTester.setValue("login", username);
+		formTester.setValue("pass", userpass);
+		
+		//How to reference specific buttons in Wicket jQuery UI ?!
+		
+		formTester.submit();
+		
+		System.err.println("getLastRenderedPage: "+ tester.getLastRenderedPage().getMarkup().toString());
+		
+		//will fail
+		//tester.assertComponent("dashboard", DashboardPanel.class);
+		
+	}
+	
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java b/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java
new file mode 100644
index 0000000..253b155
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.xsd;
+
+import java.io.File;
+
+import com.thaiopensource.relaxng.translate.Driver;
+
+public class GenerateConfigXsd {
+	
+	public static void main(String... args) {
+		new GenerateConfigXsd();
+	}
+	
+	public GenerateConfigXsd() {
+		try {
+			
+			String[] args = { 
+				"src/main/webapp"+File.separatorChar+"openmeetings"+File.separatorChar+"public"+File.separatorChar+"config.xml",
+				"src/main/webapp"+File.separatorChar+"openmeetings"+File.separatorChar+"public"+File.separatorChar+"config.xsd"
+			};
+			
+			Driver.main(args);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java b/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java
new file mode 100644
index 0000000..e73d6b6
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.xsd;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.thaiopensource.relaxng.translate.Driver;
+
+public class GenerateWebsiteXsd {
+
+	private static String WEBSITE_ROOT_DIR = "xdocs";
+
+	public static void main(String... args) {
+		new GenerateWebsiteXsd();
+	}
+
+	public GenerateWebsiteXsd() {
+		try {
+
+			File curentDir = new File(WEBSITE_ROOT_DIR);
+
+			System.err.println(curentDir.getAbsolutePath());
+
+			// Get all XML Files of this Folder
+			FilenameFilter ff = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return f.getName().contains(".xml");
+				}
+			};
+
+			String[] allfiles = curentDir.list(ff);
+
+			System.err.println("allfiles LENGTH " + allfiles.length);
+
+			List<String> allfilesPlusXSD = new ArrayList<String>();
+
+			for (String fileName : allfiles) {
+				allfilesPlusXSD.add(WEBSITE_ROOT_DIR + File.separatorChar
+						+ fileName);
+			}
+
+			allfilesPlusXSD.add(WEBSITE_ROOT_DIR + File.separatorChar
+					+ "website.xsd");
+
+			for (String fileName : allfilesPlusXSD) {
+				System.err.println(fileName);
+			}
+
+			Driver.main(allfilesPlusXSD.toArray(new String[0]));
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java b/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java
new file mode 100644
index 0000000..1601290
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Set;
+
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class AuthLevelUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
+	
+	private static boolean check(Set<Right> rights, Right level) {
+		boolean result = rights.contains(level);
+		log.debug(String.format("Level %s :: %s", level, result ? "[GRANTED]" : "[DENIED]"));
+		return result;
+	}
+	
+	public static boolean hasUserLevel(Set<Right> rights) {
+		return check(rights, Right.Room);
+	}
+
+	public static boolean hasModLevel(User u, Long orgId) {
+		boolean result = hasAdminLevel(u.getRights());
+		if (!result && orgId != null) {
+			for (Organisation_Users ou : u.getOrganisation_users()) {
+				if (orgId.equals(ou.getOrganisation().getOrganisation_id())) {
+					if (Boolean.TRUE.equals(ou.getIsModerator())) {
+						result = true;
+					}
+					break;
+				}
+			}
+		}
+		return result;
+	}
+
+	public static boolean hasAdminLevel(Set<Right> rights) {
+		return check(rights, Right.Admin);
+	}
+
+	public static boolean hasWebServiceLevel(Set<Right> rights) {
+		return check(rights, Right.Soap);
+	}
+
+	public static boolean hasLoginLevel(Set<Right> rights) {
+		return check(rights, Right.Login);
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/CalendarHelper.java b/src/util/java/org/apache/openmeetings/util/CalendarHelper.java
new file mode 100644
index 0000000..7b80634
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/CalendarHelper.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.Date;
+
+import org.threeten.bp.Instant;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZoneId;
+import org.threeten.bp.ZonedDateTime;
+
+public class CalendarHelper {
+	public static ZoneId getZoneId(String tzId) {
+		return ZoneId.of(tzId);
+	}
+	
+	public static Date getDate(LocalDate d, String tzId) {
+		return getDate(d.atStartOfDay(), tzId);
+	}
+
+	public static Date getDate(LocalDateTime d, String tzId) {
+		return new Date(d.atZone(getZoneId(tzId)).toInstant().toEpochMilli());
+	}
+
+	public static ZonedDateTime getZoneDateTime(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return Instant.ofEpochMilli(d.getTime()).atZone(getZoneId(tzId));
+	}
+	
+	public static LocalDate getDate(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return getZoneDateTime(d, tzId).toLocalDate();
+	}
+	
+	public static LocalDateTime getDateTime(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return getZoneDateTime(d, tzId).toLocalDateTime();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java b/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java
new file mode 100644
index 0000000..4986c3a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * @author Sebastian Wagner 27.08.2005 - 19:24:25
+ *
+ */
+public class CalendarPatterns {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarPatterns.class, webAppRootKey);
+
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyyHHmmss = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyy = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd.MM.yyyy");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyyBySeparator = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd-MM-yyyy");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__yyyyMMddHHmmss = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
+		};
+	};
+
+	public static String getDateByMiliSeconds(Date t) {
+		return dateFormat__yyyyMMddHHmmss.get().format(t);
+	}
+
+	public static String getDateWithTimeByMiliSeconds(Date t) {
+		return t == null ? null : dateFormat__yyyyMMddHHmmss.get().format(t);
+	}
+
+	public static String getDateWithTimeByMiliSecondsWithZone(Date t) {
+		if (t == null) {
+			return null;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z (Z)");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static String getExportDate(Date t) {
+		if (t == null) {
+			return "";
+		}
+		return "" + t.getTime();
+	}
+
+	public static Date parseImportDate(String dateString) {
+		try {
+
+			Date resultDate = null;
+
+			resultDate = validDate(dateFormat__ddMMyyyyHHmmss.get(), dateString);
+
+			if (resultDate != null) {
+				return resultDate;
+			}
+
+			resultDate = validDate(dateFormat__ddMMyyyy.get(), dateString);
+
+			if (resultDate != null) {
+				return resultDate;
+			}
+
+			resultDate = validDate(dateString);
+
+			if (dateString != null) {
+				return resultDate;
+			}
+
+			throw new Exception("Could not parse date string " + dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	private static Date validDate(String testdate) {
+		try {
+
+			Long t = Long.valueOf(testdate);
+
+			if (t != null) {
+				return new Date(t);
+			}
+
+		} catch (Exception err) {
+		}
+		return null;
+	}
+
+	private static Date validDate(SimpleDateFormat sdf, String testdate) {
+		Date resultDate = null;
+		try {
+			resultDate = sdf.parse(testdate);
+		}
+
+		// if the format of the string provided doesn't match the format we
+		// declared in SimpleDateFormat() we will get an exception
+
+		catch (java.text.ParseException e) {
+			return null;
+		}
+
+		if (!sdf.format(resultDate).equals(testdate)) {
+			return null;
+		}
+
+		return resultDate;
+
+	}
+
+	public static String getDateWithTimeByMiliSecondsAndTimeZone(Date t,
+			TimeZone timezone) {
+		if (t == null) {
+			return null;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z (Z)");
+		sdf.setTimeZone(timezone);
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static String getTimeForStreamId(Date t) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static Date parseDate(String dateString) {
+		try {
+			return dateFormat__ddMMyyyy.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static Date parseDateBySeparator(String dateString) {
+		try {
+			return dateFormat__ddMMyyyyBySeparator.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static Date parseDateWithHour(String dateString) {
+		try {
+			if (dateString == null || dateString.length() == 0
+					|| dateString.equals("null")) {
+				return null;
+			}
+			return dateFormat__ddMMyyyyHHmmss.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static String getYear(Date t) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/DaoHelper.java b/src/util/java/org/apache/openmeetings/util/DaoHelper.java
new file mode 100644
index 0000000..14e2f33
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/DaoHelper.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.util.string.Strings;
+
+public class DaoHelper {
+
+	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String sort, String... fields) {
+		return getSearchQuery(table, alias, search, false, filterDeleted, count, sort, fields);
+	}
+	public static String getSearchQuery(String table, String alias, String search, boolean distinct, boolean filterDeleted, boolean count, String sort, String... fields) {
+		return getSearchQuery(table, alias, null, search, distinct, filterDeleted, count, null, sort, fields);
+	}
+	
+	public static String getSearchQuery(String table, String alias, String join, String search, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
+		return getSearchQuery(table, alias, join, search, false, filterDeleted, count, additionalWhere, sort, fields);
+	}
+	
+	public static String getSearchQuery(String table, String alias, String join, String search, boolean distinct, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
+		StringBuilder sb = new StringBuilder("SELECT ");
+		if (count) {
+			sb.append("COUNT(");
+		}
+		if (distinct) {
+			sb.append("DISTINCT ");
+		}
+		sb.append(alias);
+		if (count) {
+			sb.append(")");
+		}
+		sb.append(" FROM ").append(table).append(" ").append(alias);
+		if (!Strings.isEmpty(join)) {
+			sb.append(" ").append(join);
+		}
+		sb.append(" WHERE 1 = 1 ");
+		if (filterDeleted) {
+			sb.append("AND ").append(alias).append(".deleted = false ");
+		}
+		StringBuilder where = getWhereClause(search, alias, fields);
+		if (!Strings.isEmpty(where)) {
+			sb.append("AND ").append(where);
+		}
+		if (!Strings.isEmpty(additionalWhere)) {
+			sb.append("AND ").append(additionalWhere);
+		}
+		if (!Strings.isEmpty(sort)) {
+			sb.append(" ORDER BY ").append(alias).append(".").append(sort);
+		}
+		return sb.toString();
+	}
+	
+	public static StringBuilder getWhereClause(String search, String alias, String... fields) {
+		StringBuilder sb = new StringBuilder();
+		getWhereClause(sb, search, alias, fields);
+		return sb;
+	}
+	
+	public static void getWhereClause(StringBuilder sb, String search, String alias, String... fields) {
+		if (search != null) {
+			boolean notEmpty = false;
+			String[] searchItems = search.replace("\'", "").replace("\"", "").split(" ");
+			for (int i = 0; i < searchItems.length; ++i) {
+				if (searchItems[i].isEmpty()) {
+					continue;
+				}
+				if (i == 0) {
+					notEmpty = true;
+					sb.append(" (");
+				} else {
+					sb.append(" OR ");
+				}
+				StringBuilder placeholder = new StringBuilder();
+				placeholder.append("%").append(StringUtils.lowerCase(searchItems[i])).append("%");
+	
+				sb.append("(");
+				for (int j = 0; j < fields.length; ++j) {
+					if (j != 0) {
+						sb.append(" OR ");
+					}
+					sb.append("lower(").append(alias).append(".").append(fields[j]).append(") LIKE '").append(placeholder).append("' ");
+				}
+				sb.append(")");
+			}
+			if (notEmpty) {
+				sb.append(") ");
+			}
+		}
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/ImportHelper.java b/src/util/java/org/apache/openmeetings/util/ImportHelper.java
new file mode 100644
index 0000000..53a33e7
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/ImportHelper.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 
+ * Get some of the default values for the upload
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class ImportHelper {
+	/**
+	 * returns a list of all timezones as a {@link Map}
+	 * 
+	 * @param tzList
+	 * @return
+	 */
+	public static Map<String, String> getAllTimeZones(String ... tzList) {
+		Map<String, String> result = new LinkedHashMap<String, String>();
+
+		for (String omTimeZone : tzList) {
+			result.put(omTimeZone, omTimeZone);
+		}
+
+		return result;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/InitializationContainer.java b/src/util/java/org/apache/openmeetings/util/InitializationContainer.java
new file mode 100644
index 0000000..e47b53f
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/InitializationContainer.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class InitializationContainer {
+	public static boolean initComplete = false;
+}
diff --git a/src/util/java/org/apache/openmeetings/util/Logger.java b/src/util/java/org/apache/openmeetings/util/Logger.java
new file mode 100644
index 0000000..76a8d32
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/Logger.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import org.red5.logging.Red5LoggerFactory;
+
+public class Logger {
+    private org.slf4j.Logger log;
+
+    public Logger() {
+        StackTraceElement ste = Thread.currentThread().getStackTrace()[1];
+        log = Red5LoggerFactory.getLogger(ste.getClass(),
+        		OpenmeetingsVariables.webAppRootKey);
+    }
+    
+    private String getMethodMessage() {
+        StackTraceElement ste = Thread.currentThread().getStackTrace()[2];
+        return "In the method " + ste.getMethodName();
+    }
+
+    public void debug(String s, Object o) {
+        log.debug(s, o);
+    }
+
+    public void debug(Object o) {
+        log.debug(getMethodMessage(), o);
+    }
+
+    public void error(Object o) {
+        log.error(getMethodMessage(), o);
+    }
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OMContextListener.java b/src/util/java/org/apache/openmeetings/util/OMContextListener.java
new file mode 100644
index 0000000..72c03df
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OMContextListener.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import javax.servlet.ServletContextEvent;
+
+import org.red5.logging.ContextLoggingListener;
+
+public class OMContextListener extends ContextLoggingListener {
+	
+	public void contextDestroyed(ServletContextEvent event) {
+		super.contextDestroyed(event);
+	}
+
+	public void contextInitialized(ServletContextEvent event) {
+		OpenmeetingsVariables.webAppRootKey = pathToName(event);
+		OpenmeetingsVariables.webAppRootPath = "/" + OpenmeetingsVariables.webAppRootKey;
+		System.setProperty("current_openmeetings_context_name", OpenmeetingsVariables.webAppRootKey);
+		System.setProperty("webapp.contextPath", OpenmeetingsVariables.webAppRootPath);
+		System.setProperty("logback.configurationFile", "logback-config.xml");
+		super.contextInitialized(event);
+	}
+
+	private String pathToName(ServletContextEvent event) {
+		String contextName = event.getServletContext().getContextPath().replaceAll("/", "");
+		if ("".equals(contextName)) {
+			contextName = "root";
+		}
+		return contextName;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OmException.java b/src/util/java/org/apache/openmeetings/util/OmException.java
new file mode 100644
index 0000000..6e12d09
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OmException.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class OmException extends Exception {
+	private static final long serialVersionUID = 1L;
+	private Long code;
+	
+	public OmException(String msg) {
+		super(msg);
+	}
+	
+	public OmException(Long code) {
+		this.code = code;
+	}
+
+	public OmException(Throwable cause) {
+		super(cause);
+	}
+
+	public Long getCode() {
+		return code;
+	}
+
+	public void setCode(Long code) {
+		this.code = code;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OmFileHelper.java b/src/util/java/org/apache/openmeetings/util/OmFileHelper.java
new file mode 100644
index 0000000..1303f92
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -0,0 +1,350 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.DecimalFormat;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class OmFileHelper {
+	private static final Logger log = Red5LoggerFactory.getLogger(OmFileHelper.class, OpenmeetingsVariables.webAppRootKey);
+
+	/**
+	 * This variable needs to point to the openmeetings webapp directory
+	 */
+	private static File OM_HOME = null;
+	private static final String UPLOAD_DIR = "upload";
+	private static final String UPLOAD_TEMP_DIR = "uploadtemp";
+	private static final String FILES_DIR = "files";
+	private static final String PUBLIC_DIR = "public";
+	private static final String CLIPARTS_DIR = "cliparts";
+	private static final String WEB_INF_DIR = "WEB-INF";
+	private static final String PROFILES_DIR = "profiles";
+	private static final String STREAMS_DIR = "streams";
+	private static final String EMOTIONS_DIR = "emoticons";
+	private static final String LANGUAGES_DIR = "languages";
+	private static final String IMPORT_DIR = "import";
+	private static final String HIBERNATE_DIR = "hibernate";
+	private static final String CONF_DIR = "conf";
+	private static final String BACKUP_DIR = "backup";
+	private static final String DEFAULT_DIR = "default";
+	private static final String WML_DIR = "stored";
+	
+	private static final String INSTALL_FILE = "install.xml";
+	
+	public static final String SCREENSHARING_DIR = "screensharing";
+	
+	public static final String PERSISTENCE_NAME = "classes/META-INF/persistence.xml";
+	public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";
+	public static final String profilesPrefix = "profile_";
+	public static final String nameOfLanguageFile = "languages.xml";
+	public static final String nameOfCountriesFile = "countries.xml";
+	public static final String nameOfTimeZoneFile = "timezones.xml";
+	public static final String nameOfErrorFile = "errorvalues.xml";
+	public static final String libraryFileName = "library.xml";
+	public static final String defaultProfileImageName = "profile_pic.jpg";
+	public static final String profileFileName = "profile";
+	public static final String profileImagePrefix = "_profile_";
+	public static final String chatImagePrefix = "_chat_";
+	public static final String bigImagePrefix = "_big_";
+	public static final String thumbImagePrefix = "_thumb_";
+	public static final String dashboardFile = "dashboard.xml";
+	public static final String MP4_EXTENSION = ".mp4";
+	public static final String OGG_EXTENSION = ".ogg";
+	public static final String JPG_EXTENTION = ".jpg";
+
+	public static void setOmHome(File omHome) {
+		OmFileHelper.OM_HOME = omHome;
+	}
+	
+	public static void setOmHome(String omHome) {
+		OmFileHelper.OM_HOME = new File(omHome);
+	}
+	
+	public static File getRootDir() {
+		//FIXME hack !!!!
+		return getOmHome().getParentFile().getParentFile();
+	}
+	
+	public static File getOmHome() {
+		return OmFileHelper.OM_HOME;
+	}
+	
+	private static File getDir(File parent, String name) {
+		File f = new File(parent, name);
+		if (!f.exists()) {
+			f.mkdir();
+		}
+		return f;
+	}
+	
+	public static File getUploadDir() {
+		return new File(OmFileHelper.OM_HOME, UPLOAD_DIR);
+	}
+	
+	public static File getUploadFilesDir() {
+		return getDir(getUploadDir(), FILES_DIR);
+	}
+	
+	public static File getUploadProfilesDir() {
+		return getDir(getUploadDir(), PROFILES_DIR);
+	}
+	
+	public static File getUploadProfilesUserDir(Long userId) {
+		return getDir(getUploadProfilesDir(), profilesPrefix + userId);
+	}
+	
+	public static File getUploadProfilesUserDir(String users_id) {
+		return getDir(getUploadProfilesDir(), profilesPrefix + users_id);
+	}
+	
+	public static File getDefaultProfilePicture() {
+		return new File(getDefaultDir(), profileImagePrefix + defaultProfileImageName);
+	}
+	
+	public static File getUserProfilePicture(Long userId, String uri) {
+		File img = new File(getUploadProfilesUserDir(userId), profileImagePrefix + uri);
+		if (!img.exists()) {
+			img = getDefaultProfilePicture();
+		}
+		return img;
+	}
+	
+	public static File getUserDashboard(Long userId) {
+		return new File(getUploadProfilesUserDir(userId), dashboardFile);
+	}
+	
+	public static File getUploadImportDir() {
+		return getDir(getUploadDir(), IMPORT_DIR);
+	}
+	
+	public static File getUploadBackupDir() {
+		return getDir(getUploadDir(), BACKUP_DIR);
+	}
+	
+	public static File getUploadRoomDir(String roomName) {
+		return getDir(getUploadDir(), roomName);
+	}
+	
+	public static File getUploadWmlDir() {
+		return getDir(getUploadDir(), WML_DIR);
+	}
+	
+	public static File getUploadTempDir() {
+		return new File(OmFileHelper.OM_HOME, UPLOAD_TEMP_DIR);
+	}
+	
+	public static File getUploadTempFilesDir() {
+		return getDir(getUploadTempDir(), FILES_DIR);
+	}
+	
+	public static File getUploadTempProfilesDir() {
+		return getDir(getUploadTempDir(), PROFILES_DIR);
+	}
+	
+	public static File getUploadTempProfilesUserDir(Long users_id) {
+		return getDir(getUploadTempProfilesDir(), OmFileHelper.profilesPrefix + users_id);
+	}
+	
+	public static File getUploadTempRoomDir(String roomName) {
+		return getDir(getUploadTempDir(), roomName);
+	}
+	
+	public static File getStreamsDir() {
+		return new File(OmFileHelper.OM_HOME, STREAMS_DIR);
+	}
+	
+	public static File getStreamsHibernateDir() {
+		return getDir(getStreamsDir(), HIBERNATE_DIR);
+	}
+	
+	public static File getRecording(String name) {
+		return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
+	}
+	
+	public static boolean isRecordingExists(String name) {
+		try {
+			File f = new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
+			return f.exists() && f.isFile();
+		} catch (Exception e) {
+			//no-op
+		}
+		return false;
+	}
+	
+	public static File getMp4Recording(String name) {
+		return getRecording(name + MP4_EXTENSION);
+	}
+	
+	public static File getOggRecording(String name) {
+		return getRecording(name + OGG_EXTENSION);
+	}
+	
+	public static File getStreamsSubDir(Long id) {
+		return getDir(getStreamsDir(), id.toString());
+	}
+	
+	public static File getStreamsSubDir(String name) {
+		return getDir(getStreamsDir(), name);
+	}
+	
+	public static File getRecordingMetaData(Long roomId, String name) {
+		return new File(getStreamsSubDir(roomId), name + ".flv");
+	}
+	
+	public static File getLanguagesDir() {
+		return new File(OmFileHelper.OM_HOME, LANGUAGES_DIR);
+	}
+	
+	public static File getPublicDir() {
+		return new File(OmFileHelper.OM_HOME, PUBLIC_DIR);
+	}
+	
+	public static File getPublicClipartsDir() {
+		return new File(getPublicDir(), CLIPARTS_DIR);
+	}
+	
+	public static File getPublicEmotionsDir() {
+		return new File(getPublicDir(), EMOTIONS_DIR);
+	}
+	
+	public static File getWebinfDir() {
+		return new File(OmFileHelper.OM_HOME, WEB_INF_DIR);
+	}
+	
+	public static File getPersistence() {
+		return getPersistence((DbType)null);
+	}
+	
+	public static File getPersistence(String dbType) {
+		return getPersistence(DbType.valueOf(dbType));
+	}
+	
+	public static File getPersistence(DbType dbType) {
+		return new File(OmFileHelper.getWebinfDir(), dbType == null ? PERSISTENCE_NAME : String.format(DB_PERSISTENCE_NAME, dbType));
+	}
+	
+	public static File getConfDir() {
+		return new File(OmFileHelper.OM_HOME, CONF_DIR);
+	}
+	
+	public static File getInstallFile() {
+		return new File(getConfDir(), INSTALL_FILE);
+	}
+	
+	public static File getScreenSharingDir() {
+		return new File(OmFileHelper.OM_HOME, SCREENSHARING_DIR);
+	}
+
+	public static File getDefaultDir() {
+		return new File(OmFileHelper.OM_HOME, DEFAULT_DIR);
+	}
+	
+	public static File appendSuffix(File original, String suffix) {
+		File parent = original.getParentFile();
+		String name = original.getName();
+		String ext = "";
+		int idx = name.lastIndexOf('.');
+		if (idx > -1) {
+			name = name.substring(0, idx);
+			ext = name.substring(idx);
+		}
+		return new File(parent, name + suffix + ext);
+	}
+	
+	//FIXME need to be generalized
+	public static File getNewFile(File dir, String name, String ext) throws IOException {
+		File f = new File(dir, name + ext);
+		int recursiveNumber = 0;
+		while (f.exists()) {
+			f = new File(dir, name + "_" + (recursiveNumber++) + ext);
+		}
+		f.createNewFile();
+		return f;
+	}
+	
+	public static File getNewDir(File dir, String name) throws IOException {
+		File f = new File(dir, name);
+		String baseName = f.getCanonicalPath();
+
+		int recursiveNumber = 0;
+		while (f.exists()) {
+			f = new File(baseName + "_" + (recursiveNumber++));
+		}
+		f.mkdir();
+		return f;
+	}
+	
+	public static String getHumanSize(File dir) {
+		return getHumanSize(getSize(dir));
+	}
+	
+	public static String getHumanSize(long size) {
+		if(size <= 0) return "0";
+		final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
+		int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
+		return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
+	}
+
+	public static long getSize(File dir) {
+		long size = 0;
+		if (dir.isFile()) {
+			size = dir.length();
+		} else {
+			File[] subFiles = dir.listFiles();
+	
+			for (File file : subFiles) {
+				if (file.isFile()) {
+					size += file.length();
+				} else {
+					size += getSize(file);
+				}
+	
+			}
+		}
+		return size;
+	}
+
+	public static void copyFile(String sourceFile, String targetFile) throws IOException {
+		FileHelper.copy(new File(sourceFile), new File(targetFile));
+	}
+	
+	public static void copyFile(File f1, OutputStream out) throws IOException {
+		InputStream in = null;
+		try {
+			in = new FileInputStream(f1);
+			FileHelper.copy(in, out);
+			log.debug("File copied.");
+		} catch (Exception e) {
+			log.error("[copyfile(File, File)]", e);
+		} finally {
+			if (in != null) {
+				in.close();
+			}
+		}
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
new file mode 100644
index 0000000..44cac2a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class OpenmeetingsVariables {
+	public static final String CONFIG_CRYPT_KEY = "crypt_ClassName";
+	public static final String CONFIG_DASHBOARD_SHOW_MYROOMS_KEY = "dashboard.show.myrooms";
+	public static final String CONFIG_DASHBOARD_SHOW_RSS_KEY = "dashboard.show.rssfeed";
+	public static final String CONFIG_DEFAULT_LANG_KEY = "default_lang_id";
+	public static final String CONFIG_FRONTEND_REGISTER_KEY = "allow_frontend_register";
+	public static final String CONFIG_SOAP_REGISTER_KEY = "allow.soap.register";
+	public static final String CONFIG_OAUTH_REGISTER_KEY = "allow.oauth.register";
+	public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = "user.login.minimum.length";
+	public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = "max_upload_size";
+	public static final String CONFIG_PASS_MIN_LENGTH_KEY = "user.pass.minimum.length";
+	public static final String CONFIG_RSS_FEED1_KEY = "rss_feed1";
+	public static final String CONFIG_RSS_FEED2_KEY = "rss_feed2";
+	public static final String CONFIG_IGNORE_BAD_SSL = "oauth2.ignore_bad_ssl";
+	public static final String CONFIG_DEFAULT_LANDING_ZONE = "default.landing.zone";
+	public static final String CONFIG_DEFAULT_LDAP_ID = "ldap_default_id";
+	public static final String CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY = "redirect.url.for.external.users";
+	public static final String CONFIG_APPOINTMENT_REMINDER_MINUTES = "number.minutes.reminder.send";
+	public static final String CONFIG_APPLICATION_BASE_URL = "application.base.url";
+	public static final String CONFIG_SCREENSHARING_QUALITY = "default.quality.screensharing";
+	public static final String CONFIG_SCREENSHARING_FPS = "default.fps.screensharing";
+	public static final String CONFIG_SCREENSHARING_FPS_SHOW = "screensharing.fps.show";
+	public static final String CONFIG_SCREENSHARING_ALLOW_REMOTE = "screensharing.allow.remote";
+	public static final String CONFIG_CALENDAR_FIRST_DAY = "calendar.firstday";
+	public static final String CONFIG_DEFAULT_GROUP_ID = "default_group_id";
+
+	public static int DEFAULT_MINUTES_REMINDER_SEND = 15;
+	public static String DEFAULT_BASE_URL = "http://localhost:5080/openmeetings/";
+	
+	public static final String WEB_DATE_PATTERN = "dd.MM.yyyy HH:mm:ss"; //FIXME need to be made locale based
+	public static String webAppRootKey = null;
+	public static String webAppRootPath = null;
+	public static String configKeyCryptClassName = null;
+	public static final int USER_LOGIN_MINIMUM_LENGTH = 4;
+	public static final int USER_PASSWORD_MINIMUM_LENGTH = 4;
+	public static Boolean whiteboardDrawStatus = null;
+}
diff --git a/src/util/java/org/apache/openmeetings/util/StoredFile.java b/src/util/java/org/apache/openmeetings/util/StoredFile.java
new file mode 100644
index 0000000..a945283
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/StoredFile.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class StoredFile {
+    private static final Set<String> convertExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "ppt", "odp", "odt", "sxw", "wpd",
+                    "doc", "rtf", "txt", "ods", "sxc", "xls", "sxi", "pptx",
+                    "docx", "xlsx" }));
+
+    private static final Set<String> pdfExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "pdf", "ps" }));
+
+    private static final Set<String> imageExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "png", "gif", "svg", "dpx", "exr",
+                    "pcd", // PhotoCD
+                    "pcds", // PhotoCD
+                    "psd", // Adobe Photoshop
+                    "tiff", // Tagged Image File Format
+                    "ttf", // TrueType font
+                    "xcf", // GIMP image
+                    "wpg", // Word Perfect Graphics
+                    "bmp", "ico", // Microsoft Icon
+                    "tga", // Truevision Targa
+                    "jpg", "jpeg" }));
+
+    private static final Set<String> chartExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "xchart" }));
+
+    private static final Set<String> videoExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "avi", "mov", "flv", "mp4" }));
+
+    private static final Set<String> asIsExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "jpg", "xchart" }));
+
+    private final String name;
+	private final String ext;
+
+    public StoredFile(String fullname) {
+    	int idx = fullname.lastIndexOf('.');
+    	name = idx < 0 ? fullname : fullname.substring(0, idx);
+    	ext = idx < 0 ? "" : fullname.substring(idx + 1).toLowerCase();
+    }
+    
+    public StoredFile(String name, String ext) {
+        this.name = name;
+        this.ext = ext != null ? ext.toLowerCase() : "";
+    }
+    
+    public static String[] getExtensions(){
+    	
+    	Set<String> extensions = new HashSet<String>();
+    	extensions.addAll(convertExtensions);
+    	extensions.addAll(pdfExtensions);
+    	extensions.addAll(imageExtensions);
+    	extensions.addAll(chartExtensions);
+    	extensions.addAll(videoExtensions);
+    	extensions.addAll(asIsExtensions);
+    	
+    	Object[] returnObj = extensions.toArray();
+    	
+    	String[] returnStr = new String[returnObj.length];
+    	
+    	int i=0;
+    	for (Object obj : returnObj) {
+    		returnStr[i] = obj.toString();
+    		i++;
+    	}
+    	
+    	return returnStr;
+    }
+
+    public boolean isConvertable() {
+        return convertExtensions.contains(ext);
+    }
+
+    public boolean isPresentation() {
+        return isConvertable() || isPdf();
+    }
+
+    public boolean isPdf() {
+        return pdfExtensions.contains(ext);
+    }
+
+    public boolean isImage() {
+        return imageExtensions.contains(ext);
+    }
+
+    public boolean isVideo() {
+        return videoExtensions.contains(ext);
+    }
+
+    public boolean isChart() {
+        return chartExtensions.contains(ext);
+    }
+
+    public boolean isAsIs() {
+        return asIsExtensions.contains(ext);
+    }
+
+    public String getName() {
+		return name;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/Version.java b/src/util/java/org/apache/openmeetings/util/Version.java
new file mode 100644
index 0000000..f568020
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/Version.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class Version {
+	private static final Logger log = Red5LoggerFactory.getLogger(Version.class, OpenmeetingsVariables.webAppRootKey);
+	private static final int startedStringLength = 48;
+	private static String version = null;
+	private static String revision = null;
+	private static String buildDate = null;
+	
+	private static Attributes getAttributes() throws MalformedURLException, IOException {
+		String jarUrl = Version.class.getResource(Version.class.getSimpleName() + ".class").toString();
+		return new Manifest(new URL(jarUrl.substring(0, jarUrl.indexOf('!')) + "!/META-INF/MANIFEST.MF").openStream()).getMainAttributes();
+	}
+	
+	public static String getVersion() {
+		if (version == null) {
+			try {
+				version = getAttributes().getValue("Product-Version");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return version;
+	}
+	
+	public static String getRevision() {
+		if (revision == null) {
+			try {
+				revision = getAttributes().getValue("Svn-Revision");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return revision;
+	}
+	
+	public static String getBuildDate() {
+		if (buildDate == null) {
+			try {
+				buildDate = getAttributes().getValue("Built-On");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return buildDate;
+	}
+
+	private static void getLine(StringBuilder sb, String text, char fill) {
+		sb.append("\t#");
+		int l = text.length();
+		int headLength = (startedStringLength - l) / 2;
+		for (int i = 0; i < headLength; ++i) {
+			sb.append(fill);
+		}
+		sb.append(text);
+		for (int i = 0; i < (startedStringLength - l - headLength); ++i) {
+			sb.append(fill);
+		}
+		sb.append("#\n");
+	}
+	
+	public static void logOMStarted() {
+		StringBuilder sb = new StringBuilder("\n");
+		getLine(sb, "", '#');
+		getLine(sb, "Openmeetings is up", ' ');
+		getLine(sb, getVersion() + " " + getRevision() + " " + getBuildDate(), ' ');
+		getLine(sb, "and ready to use", ' ');
+		getLine(sb, "", '#');
+		log.debug(sb.toString());
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/XmlExport.java b/src/util/java/org/apache/openmeetings/util/XmlExport.java
new file mode 100644
index 0000000..c627def
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/XmlExport.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class XmlExport {
+	public static final String FILE_COMMENT = ""
+			+ "\n"
+			+ "  Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "  or more contributor license agreements.  See the NOTICE file\n"
+			+ "  distributed with this work for additional information\n"
+			+ "  regarding copyright ownership.  The ASF licenses this file\n"
+			+ "  to you under the Apache License, Version 2.0 (the\n"
+			+ "  \"License\"); you may not use this file except in compliance\n"
+			+ "  with the License.  You may obtain a copy of the License at\n"
+			+ "\n"
+			+ "      http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "\n"
+			+ "  Unless required by applicable law or agreed to in writing,\n"
+			+ "  software distributed under the License is distributed on an\n"
+			+ "  \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "  KIND, either express or implied.  See the License for the\n"
+			+ "  specific language governing permissions and limitations\n"
+			+ "  under the License.\n"
+			+ "\n"
+			+ "\n"
+			+ "\n"
+			+ "###############################################\n"
+			+ "This File is auto-generated by the LanguageEditor \n"
+			+ "to add new Languages or modify/customize it use the LanguageEditor \n"
+			+ "see http://openmeetings.apache.org/LanguageEditor.html for Details \n"
+			+ "###############################################\n";
+
+	public static Document createDocument() {
+		Document document = DocumentHelper.createDocument();
+		document.setXMLEncoding("UTF-8");
+		document.addComment(XmlExport.FILE_COMMENT);
+		return document;
+	}
+	
+	public static Element createRoot(Document document) {
+		document.addDocType("properties", null, "http://java.sun.com/dtd/properties.dtd");
+		Element root = document.addElement("properties");
+		return root;
+	}
+	
+	public static Element createRoot(Document document, String _root) {
+		Element root = document.addElement(_root);
+		return root;
+	}
+	
+	public static void toXml(Writer out, Document doc) throws Exception {
+		OutputFormat outformat = OutputFormat.createPrettyPrint();
+		outformat.setEncoding("UTF-8");
+		XMLWriter writer = new XMLWriter(out, outformat);
+		writer.write(doc);
+		writer.flush();
+        out.flush();
+        out.close();
+	}
+	
+	public static void toXml(File f, Document doc) throws Exception {
+		toXml(new FileOutputStream(f), doc);
+	}
+	
+	public static void toXml(OutputStream out, Document doc) throws Exception {
+		toXml(new OutputStreamWriter(out, "UTF8"), doc);
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java b/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java
new file mode 100644
index 0000000..8ca8799
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+/**
+ * interface for Encryption-Class
+ * see: http://openmeetings.apache.org/CustomCryptMechanism.html
+ * 
+ * @author sebastianwagner
+ *
+ */
+
+public interface ICryptString {
+	
+	/**
+	 * create a pass phrase
+	 * 
+	 * @param userGivenPass
+	 * @return
+	 */
+	public String createPassPhrase(String userGivenPass);
+	
+	/**
+	 * verify a password
+	 * 
+	 * @param passGiven
+	 * @param passwdFromDb
+	 * @return
+	 */
+	public Boolean verifyPassword(String passGiven, String passwdFromDb);
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5.java
new file mode 100644
index 0000000..cac6c64
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.apache.commons.codec.binary.Hex;
+
+public class MD5 {
+	public static String do_checksum(String data) throws NoSuchAlgorithmException {
+		MessageDigest md5 = MessageDigest.getInstance("MD5");
+
+		md5.update(data.getBytes(), 0, data.length());
+
+		return Hex.encodeHexString(md5.digest());
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java
new file mode 100644
index 0000000..354a8a2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java
@@ -0,0 +1,380 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/*
+
+ Based on the work of Jonathan Abbey
+ Adopted for Director by Thomas Aeby, 2004
+
+ MD5Crypt.java
+
+ Created: 3 November 1999
+ Release: $Name:  $
+ Version: $Revision: 1.1 $
+ Last Mod Date: $Date: 2004/02/04 08:10:35 $
+ Java Code By: Jonathan Abbey, jonabbey@arlut.utexas.edu
+ Original C Version:
+ ----------------------------------------------------------------------------
+ "THE BEER-WARE LICENSE" (Revision 42):
+ <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
+ can do whatever you want with this stuff. If we meet some day, and you think
+ this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ ----------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------
+
+ Ganymede Directory Management System
+
+ Copyright (C) 1996, 1997, 1998, 1999  The University of Texas at Austin.
+
+ Contact information
+
+ Author Email: ganymede_author@arlut.utexas.edu
+ Email mailing list: ganymede@arlut.utexas.edu
+
+ US Mail:
+
+ Computer Science Division
+ Applied Research Laboratories
+ The University of Texas at Austin
+ PO Box 8029, Austin TX 78713-8029
+
+ Telephone: (512) 835-3200
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ */
+
+/*------------------------------------------------------------------------------
+ class
+ MD5Crypt
+
+ ------------------------------------------------------------------------------*/
+
+/**
+ * <p>
+ * This class defines a method,
+ * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
+ * takes a password and a salt string and generates an
+ * OpenBSD/FreeBSD/Linux-compatible md5-encoded password entry.
+ * </p>
+ * 
+ * <p>
+ * Created: 3 November 1999
+ * </p>
+ * <p>
+ * Release: $Name: $
+ * </p>
+ * <p>
+ * Version: $Revision: 1.1 $
+ * </p>
+ * <p>
+ * Last Mod Date: $Date: 2004/02/04 08:10:35 $
+ * </p>
+ * <p>
+ * Java Code By: Jonathan Abbey, jonabbey@arlut.utexas.edu
+ * </p>
+ * <p>
+ * Original C Version:
+ * 
+ * <pre>
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ * </pre>
+ * 
+ * </p>
+ */
+
+public final class MD5Crypt {
+
+	/**
+	 * 
+	 * Command line test rig.
+	 * 
+	 * @throws NoSuchAlgorithmException
+	 * 
+	 */
+
+	static public void main(String argv[]) throws NoSuchAlgorithmException {
+		if ((argv.length < 1) || (argv.length > 2)) {
+			System.err.println("Usage: MD5Crypt password salt");
+			System.exit(1);
+		}
+
+		if (argv.length == 2) {
+			System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
+		} else {
+			System.err.println(MD5Crypt.crypt(argv[0]));
+		}
+
+		System.exit(0);
+	}
+
+	static private final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+
+	static private final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+	static private final String to64(long v, int size) {
+		StringBuffer result = new StringBuffer();
+
+		while (--size >= 0) {
+			result.append(itoa64.charAt((int) (v & 0x3f)));
+			v >>>= 6;
+		}
+
+		return result.toString();
+	}
+
+	static private final void clearbits(byte bits[]) {
+		for (int i = 0; i < bits.length; i++) {
+			bits[i] = 0;
+		}
+	}
+
+	/**
+	 * convert an encoded unsigned byte value into a int with the unsigned
+	 * value.
+	 */
+
+	@SuppressWarnings("cast")
+	static private final int bytes2u(byte inp) {
+		return ((int) inp) & 0xff;
+	}
+
+	/**
+	 * <p>
+	 * This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
+	 * md5-encoded password hash from a plaintext password and a salt.
+	 * </p>
+	 * 
+	 * <p>
+	 * The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed
+	 * mess&gt;
+	 * </p>
+	 * 
+	 * @param password
+	 *            Plaintext password
+	 * 
+	 * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
+	 * @throws NoSuchAlgorithmException
+	 */
+
+	static public final String crypt(String password)
+			throws NoSuchAlgorithmException {
+		StringBuffer salt = new StringBuffer();
+		java.util.Random randgen = new java.util.Random();
+
+		/* -- */
+
+		while (salt.length() < 8) {
+			int index = (int) (randgen.nextFloat() * SALTCHARS.length());
+			salt.append(SALTCHARS.substring(index, index + 1));
+		}
+
+		return MD5Crypt.crypt(password, salt.toString());
+	}
+
+	/**
+	 * <p>
+	 * This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
+	 * md5-encoded password hash from a plaintext password and a salt.
+	 * </p>
+	 * 
+	 * <p>
+	 * The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed
+	 * mess&gt;
+	 * </p>
+	 * 
+	 * @param password
+	 *            Plaintext password
+	 * @param salt
+	 *            A short string to use to randomize md5. May start with $1$,
+	 *            which will be ignored. It is explicitly permitted to pass a
+	 *            pre-existing MD5Crypt'ed password entry as the salt. crypt()
+	 *            will strip the salt chars out properly.
+	 * 
+	 * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
+	 * @throws NoSuchAlgorithmException
+	 */
+
+	static public final String crypt(String password, String salt)
+			throws NoSuchAlgorithmException {
+		/*
+		 * This string is magic for this algorithm. Having it this way, we can
+		 * get get better later on
+		 */
+
+		String magic = "$1$";
+		byte finalState[];
+		MessageDigest ctx, ctx1;
+		long l;
+
+		/* -- */
+
+		/* Refine the Salt first */
+
+		/* If it starts with the magic string, then skip that */
+
+		if (salt.startsWith(magic)) {
+			salt = salt.substring(magic.length());
+		}
+
+		/* It stops at the first '$', max 8 chars */
+
+		if (salt.indexOf('$') != -1) {
+			salt = salt.substring(0, salt.indexOf('$'));
+		}
+
+		if (salt.length() > 8) {
+			salt = salt.substring(0, 8);
+		}
+
+		ctx = MessageDigest.getInstance("MD5");
+
+		ctx.update(password.getBytes()); // The password first, since that is
+											// what is most unknown
+		ctx.update(magic.getBytes()); // Then our magic string
+		ctx.update(salt.getBytes()); // Then the raw salt
+
+		/* Then just as many characters of the MD5(pw,salt,pw) */
+
+		ctx1 = MessageDigest.getInstance("MD5");
+		ctx1.update(password.getBytes());
+		ctx1.update(salt.getBytes());
+		ctx1.update(password.getBytes());
+		finalState = ctx1.digest();
+
+		for (int pl = password.length(); pl > 0; pl -= 16) {
+			for (int i = 0; i < (pl > 16 ? 16 : pl); i++)
+				ctx.update(finalState[i]);
+		}
+
+		/*
+		 * the original code claimed that finalState was being cleared to keep
+		 * dangerous bits out of memory, but doing this is also required in
+		 * order to get the right output.
+		 */
+
+		clearbits(finalState);
+
+		/* Then something really weird... */
+
+		for (int i = password.length(); i != 0; i >>>= 1) {
+			if ((i & 1) != 0) {
+				ctx.update(finalState[0]);
+			} else {
+				ctx.update(password.getBytes()[0]);
+			}
+		}
+
+		finalState = ctx.digest();
+
+		/*
+		 * and now, just to make sure things don't run too fast On a 60 Mhz
+		 * Pentium this takes 34 msec, so you would need 30 seconds to build a
+		 * 1000 entry dictionary...
+		 * 
+		 * (The above timings from the C version)
+		 */
+
+		for (int i = 0; i < 1000; i++) {
+			ctx1 = MessageDigest.getInstance("MD5");
+
+			if ((i & 1) != 0) {
+				ctx1.update(password.getBytes());
+			} else {
+				for (int c = 0; c < 16; c++)
+					ctx1.update(finalState[c]);
+			}
+
+			if ((i % 3) != 0) {
+				ctx1.update(salt.getBytes());
+			}
+
+			if ((i % 7) != 0) {
+				ctx1.update(password.getBytes());
+			}
+
+			if ((i & 1) != 0) {
+				for (int c = 0; c < 16; c++)
+					ctx1.update(finalState[c]);
+			} else {
+				ctx1.update(password.getBytes());
+			}
+
+			finalState = ctx1.digest();
+		}
+
+		/* Now make the output string */
+
+		StringBuffer result = new StringBuffer();
+
+		result.append(magic);
+		result.append(salt);
+		result.append("$");
+
+		l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8)
+				| bytes2u(finalState[12]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8)
+				| bytes2u(finalState[13]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8)
+				| bytes2u(finalState[14]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8)
+				| bytes2u(finalState[15]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8)
+				| bytes2u(finalState[5]);
+		result.append(to64(l, 4));
+
+		l = bytes2u(finalState[11]);
+		result.append(to64(l, 2));
+
+		/* Don't leave anything around in vm they could use. */
+		clearbits(finalState);
+
+		return result.toString();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java
new file mode 100644
index 0000000..dffaa52
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.NoSuchAlgorithmException;
+
+public class MD5CryptImplementation implements ICryptString {
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#createPassPhrase(java.lang.String)
+	 */
+	@Override
+	public String createPassPhrase(String userGivenPass) {
+		String passPhrase = null;
+		try {
+			passPhrase = MD5Crypt.crypt(userGivenPass);
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		} 
+		return passPhrase;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#verifyPassword(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+		boolean validPassword = false;
+		String salt = passwdFromDb.split("\\$")[2];
+	
+		try {
+			validPassword = passwdFromDb.equals(MD5Crypt.crypt(passGiven, salt));
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return validPassword;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java
new file mode 100644
index 0000000..fc0146b
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.NoSuchAlgorithmException;
+
+public class MD5Implementation implements ICryptString {
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#createPassPhrase(java.lang.String)
+	 */
+	@Override
+	public String createPassPhrase(String userGivenPass) {
+		String passPhrase = null;
+		try {
+			passPhrase = MD5.do_checksum(userGivenPass);
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return passPhrase;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#verifyPassword(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+		return (passwdFromDb.equals(createPassPhrase(passGiven)));
+	}
+	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java b/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java
new file mode 100644
index 0000000..a03b623
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ManageCryptStyle {
+	private static final Logger log = Red5LoggerFactory.getLogger(ManageCryptStyle.class, webAppRootKey);
+
+	public static ICryptString getInstanceOfCrypt() {
+		try {
+			log.debug("getInstanceOfCrypt:: configKeyCryptClassName: " + configKeyCryptClassName);
+
+			return configKeyCryptClassName == null ? null : (ICryptString) Class.forName(configKeyCryptClassName).newInstance();
+		} catch (Exception err) {
+			log.error("[getInstanceOfCrypt]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java b/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java
new file mode 100644
index 0000000..5fa3164
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.geom;
+
+public class ArrowStyle {
+
+	public double headWidth=-1; //Relative width of arrow head
+
+	/**
+	 * 
+	 * Not used in drawArrowHead because the length is 
+	 * determined by the points passed in
+	 * 
+	 */
+	public double headLength=10; //Pixel Length of arrow head
+			
+	
+	public double shaftThickness=2;
+	public float shaftPosition=0;
+	
+	/**
+	 *  Not used in drawArrow, only drawArrowHead
+	 * 	This let's you curve the line at the base of the arrow
+	 */
+	public double shaftControlPosition=.5;
+	/**
+	 * Not used in drawArrow, only drawArrowHead
+	 * This let's you curve the line at the base of the arrow
+	 */
+	public double shaftControlSize=.5;
+	
+	
+	public double edgeControlPosition=.5;
+	public double edgeControlSize=.5;
+	
+	
+	public ArrowStyle(double edgeControlPosition, double edgeControlSize,
+			double headLength, double headWidth, double shaftControlPosition,
+			double shaftControlSize, float shaftPosition, double shaftThickness) {
+		super();
+		this.edgeControlPosition = edgeControlPosition;
+		this.edgeControlSize = edgeControlSize;
+		this.headLength = headLength;
+		this.headWidth = headWidth;
+		this.shaftControlPosition = shaftControlPosition;
+		this.shaftControlSize = shaftControlSize;
+		this.shaftPosition = shaftPosition;
+		this.shaftThickness = shaftThickness;
+	}
+	
+	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java b/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java
new file mode 100644
index 0000000..e666ab2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java
@@ -0,0 +1,211 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.geom;
+
+import java.awt.Point;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Java Implementation of the Actionscript Class flash.geom.Point
+ * 
+ * @author swagner
+ *
+ */
+
+public class GeomPoint extends Point {
+	private static final long serialVersionUID = 5729830653403076829L;
+	@SuppressWarnings("unused")
+	private static final Logger log = Red5LoggerFactory.getLogger(GeomPoint.class, OpenmeetingsVariables.webAppRootKey);
+
+	public GeomPoint add(GeomPoint p) {
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(this.getX() + p.getX(),this.getY() + p.getY());
+		return gPoint;
+	}
+	
+	public GeomPoint subtract(GeomPoint p) {
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(this.getX() - p.getX(),this.getY() - p.getY());
+		return gPoint;
+	}
+	
+	public GeomPoint clone() {
+		GeomPoint p = new GeomPoint();
+		p.setLocation(this.getX(), this.getY());
+		return p;
+	}
+	
+	public static GeomPoint interpolate(GeomPoint p1, GeomPoint p2, float f) {
+		
+		if (f == 0) {
+			GeomPoint p = new GeomPoint();
+			p.setLocation(p2.getX(), p2.getY());
+			return p;
+		} else if (f == 1) {
+			GeomPoint p = new GeomPoint();
+			p.setLocation(p1.getX(), p1.getY());
+			return p;
+		}
+		
+		double returnValueP1 = linearInterpolation(p1.getX(),p2.getX(),f);
+		double returnValueP2 = linearInterpolation(p1.getY(),p2.getY(),f);
+		
+		GeomPoint p = new GeomPoint();
+		p.setLocation(returnValueP1, returnValueP2);
+		return p;
+	}
+	
+	public double length() {
+		return Math.sqrt( this.getX()*this.getX() + this.getY()*this.getY() );
+	}
+	
+	public String toString() {
+		return getClass().getName() + "[x=" + this.getX() + ",y=" + this.getY() + "]";
+    }
+	
+	public void normalize(double newLength) {
+		
+		//Function for Line y = mx + 0 
+		//given points 0,0 and this.getX(),this.getY();
+		//		0 = m*0 + c
+		//		m = -c;
+		//		
+		//		this.getY() = m*this.getX();
+
+		double m;
+		if (this.getX() == 0) {
+			//log.debug("Case 1");
+			if (this.getY() < 0) {
+				this.setLocation(0, newLength * -1);
+			} else {
+				this.setLocation(0, newLength);
+			}
+			return;
+			//m = this.getY();
+		} else {
+			m = this.getY() / this.getX();
+			//log.debug("Case 2");
+		}
+		
+		//log.debug("m :"+m +" newLength "+newLength);
+		
+		//Circle (x-x0)^2 + (y-y0)^2 = r^2
+		//		anyY = m * anyX;
+		//		newLength * newLength = anyY * anyY + anyX * anyX;
+		//		
+		//		newLength * newLength = (m * anyX) * (m * anyX) + anyX * anyX;
+		//		
+		//		newLength * newLength = m * m * anyX * anyX + anyX * anyX;
+		//		newLength * newLength = ( m*m + 1 ) * anyX * anyX;
+		//		
+		//		newLength * newLength / ( m*m + 1 ) = anyX * anyX;
+		
+		double anyX = Math.sqrt( ( newLength * newLength ) / ( m*m + 1 ) );
+		double anyY = m * anyX;
+		
+		//log.debug("anyX :"+anyX + " anyY: " + anyY);
+		
+		//translate to Flash point of origin
+		if (this.getX() < 0) {
+			anyX *= -1;
+			anyY *= -1;
+		}
+		
+		//log.debug("anyX :"+anyX + " anyY: " + anyY);
+		this.setLocation(anyX, anyY);
+		
+	}
+	
+	/**
+	 * Interpolate one number
+	 * @param a
+	 * @param b
+	 * @param t
+	 * @return
+	 */
+	public static double linearInterpolation(double a, double b, float t) {
+		return a + t * (b - a);
+	}
+	
+
+	public static GeomPoint getLineIntersection ( GeomPoint a1,GeomPoint a2,
+			GeomPoint b1,GeomPoint b2) {
+		
+		//log.debug("b1: "+b1);
+		//log.debug("b2: "+b2);
+		
+		double x,y,m1,m2;
+	
+		if ((a2.getX()-a1.getX()) == 0) {
+			
+			//log.debug("k1 ^ 0");
+			
+			double k2 = (b2.getY()-b1.getY()) / (b2.getX()-b1.getX());
+			//log.debug("k2: "+k2);
+			//log.debug("b1.getY(): "+b1.getY());
+			//log.debug("b2.getY(): "+b2.getY());
+			// an infinite directional constant means the line is vertical
+			// so the intersection must be at the x coordinate of the line
+			x = a1.getX();
+            m2 = b1.getY() - k2 * b1.getX();
+            //log.debug("m2: "+m2);
+            y = k2 * x + m2;
+            //log.debug("y: "+y);
+			
+		} else if((b2.getX()-b1.getX()) == 0) {
+			
+			//log.debug("k2 ^^ 0");
+			
+			double k1 = (a2.getY()-a1.getY()) / (a2.getX()-a1.getX());
+			// same as above for line 2
+			m1 = a1.getY() - k1 * a1.getX();
+			x = b1.getX();
+			y = k1 * x + m1;
+			
+		} else {
+		
+			//calculate directional constants
+			double k1 = (a2.getY()-a1.getY()) / (a2.getX()-a1.getX());
+			double k2 = (b2.getY()-b1.getY()) / (b2.getX()-b1.getX());
+			
+			// if the directional constants are equal, the lines are parallel,
+			// meaning there is no intersection point.
+			if( k1 == k2 ) return null;
+		
+			//log.debug("neither");
+//			log.debug("k1: "+k1);
+//			log.debug("k2: "+k2);
+			
+			m1 = a1.getY() - k1 * a1.getX();
+			m2 = b1.getY() - k2 * b1.getX();				
+			x = (m1-m2) / (k2-k1);
+			y = k1 * x + m1;
+		}
+		
+		
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(x, y);
+		
+		return gPoint;
+	}	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java b/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
new file mode 100644
index 0000000..ed5b55a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import java.io.*;
+import javax.activation.*;
+
+public class ByteArrayDataSource implements DataSource {
+	private byte[] data; // data
+
+	private String type; // content-type
+
+	/* Create a DataSource from an input stream */
+	public ByteArrayDataSource(InputStream is, String type) {
+		this.type = type;
+		try {
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			int ch;
+
+			while ((ch = is.read()) != -1)
+				os.write(ch);
+			data = os.toByteArray();
+			os.close();
+		} catch (IOException ioex) {
+		}
+	}
+
+	/* Create a DataSource from a byte array */
+	public ByteArrayDataSource(byte[] data, String type) {
+		this.data = data;
+		this.type = type;
+	}
+
+	/* Create a DataSource from a String */
+	public ByteArrayDataSource(String data, String type) {
+		try {
+			// Assumption that the string contains only ASCII
+			// characters! Otherwise just pass a charset into this
+			// constructor and use it in getBytes()
+			this.data = data.getBytes("utf-8");
+		} catch (UnsupportedEncodingException uex) {
+		}
+		this.type = type;
+	}
+
+	public InputStream getInputStream() throws IOException {
+		if (data == null)
+			throw new IOException("no data");
+		return new ByteArrayInputStream(data);
+	}
+
+	public OutputStream getOutputStream() throws IOException {
+		throw new IOException("cannot do this");
+	}
+
+	public String getContentType() {
+		return type;
+	}
+
+	public String getName() {
+		return "dummy";
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java b/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java
new file mode 100644
index 0000000..71eada2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.net.URI;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Vector;
+
+import net.fortuna.ical4j.data.CalendarOutputter;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Transp;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.util.UidGenerator;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * @author o.becherer, seba.wagner
+ * 
+ */
+public class IcalHandler {
+	private static final Logger log = Red5LoggerFactory.getLogger(IcalHandler.class, webAppRootKey);
+
+	/** ICal instance */
+	private final net.fortuna.ical4j.model.Calendar icsCalendar;
+
+	/** TimeZone */
+	// private TimeZone timeZone;
+	// private TimeZoneRegistry timeRegistry;
+
+	/** Creation of a new Event */
+	public final static Method ICAL_METHOD_REQUEST = Method.REQUEST;
+	public final static Method ICAL_METHOD_CANCEL = Method.CANCEL;
+	public final static Method ICAL_METHOD_REFRESH = Method.REFRESH;
+
+	/**
+	 * Constructor with DefaultTimeZone
+	 * 
+	 * @param method
+	 *            (@see IcalHandler Constants)
+	 * @throws Exception
+	 */
+	public IcalHandler(Method method) {
+		log.debug("Icalhandler method type : " + method);
+		
+		System.setProperty("net.fortuna.ical4j.timezone.update.enabled", "false");
+		
+		icsCalendar = new net.fortuna.ical4j.model.Calendar();
+
+		icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
+		icsCalendar.getProperties().add(Version.VERSION_2_0);
+		icsCalendar.getProperties().add(CalScale.GREGORIAN);
+		
+		icsCalendar.getProperties().add(method);
+	}
+
+	/**
+	 * 
+	 * @param startDate
+	 *            use standard TimeZone!!
+	 * @param endDate
+	 *            use standard time zone!!
+	 * @param name
+	 *            meeting name
+	 * @param attendees
+	 *            List of attendees (use getAttendeeData to retrieve valid
+	 *            records)
+	 * @param description
+	 *            containing the meeting description
+	 * @param uid
+	 *            (maybe null)
+	 * @return UID of Meeting
+	 */
+	// ---------------------------------------------------------------------------------------
+	public String addNewMeeting(Date startDate,
+			Date endDate, String name,
+			Vector<HashMap<String, String>> attendees, String description,
+			HashMap<String, String> organizer, String uid, java.util.TimeZone normalTimeZone)
+			throws Exception {
+
+		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
+		
+		TimeZone timeZone = registry.getTimeZone(normalTimeZone.getID());
+
+		DateTime start = new DateTime(startDate);
+		start.setTimeZone(timeZone);
+		DateTime end = new DateTime(endDate);
+		end.setTimeZone(timeZone);
+		
+		VEvent meeting = new VEvent(start, end, name);
+
+		meeting.getProperties().add(new Description(description));
+		meeting.getProperties().add(new Sequence(0));
+		meeting.getProperties().add(new Location(""));
+		meeting.getProperties().add(Transp.OPAQUE);
+
+		// generate unique identifier (if not submitted)
+		Uid ui = null;
+		if (uid == null || uid.length() < 1) {
+			ui = new UidGenerator("uidGen").generateUid();
+			log.debug("Generating Meeting UID : " + ui.getValue());
+		} else {
+			ui = new Uid(uid);
+			log.debug("Using Meeting UID : " + ui.getValue());
+		}
+
+		meeting.getProperties().add(ui);
+
+		for (int i = 0; i < attendees.size(); i++) {
+			HashMap<String, String> oneAtt = attendees.get(i);
+
+			Attendee uno = new Attendee(URI.create(oneAtt.get("uri")));
+
+			String chair = oneAtt.get("chair");
+
+			if (chair.equals("0"))
+				uno.getParameters().add(Role.REQ_PARTICIPANT);
+			else
+				uno.getParameters().add(Role.CHAIR);
+
+			uno.getParameters().add(new Cn(oneAtt.get("cn")));
+			meeting.getProperties().add(uno);
+		}
+
+		Organizer orger = new Organizer(URI.create(organizer.get("uri")));
+		orger.getParameters().add(new Cn(organizer.get("cn")));
+
+		meeting.getProperties().add(orger);
+
+		icsCalendar.getComponents().add(timeZone.getVTimeZone());
+		icsCalendar.getComponents().add(meeting);
+
+		return ui.getValue();
+
+	}
+
+	// ---------------------------------------------------------------------------------------
+
+	/**
+	 * Use this function to build a valid record for the AttendeeList for
+	 * addMeetings Generate a Attendee
+	 */
+	// ------------------------------------------------------------------------------------------
+	public HashMap<String, String> getAttendeeData(String emailAdress,
+			String displayName, Boolean chair) {
+
+		HashMap<String, String> oneRecord = new HashMap<String, String>();
+		oneRecord.put("uri", "mailto:" + emailAdress);
+		oneRecord.put("cn", displayName);
+		oneRecord.put("chair", chair ? "1" : "0");
+
+		return oneRecord;
+
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Write iCal to File
+	 */
+	// ------------------------------------------------------------------------------------------
+	public void writeDataToFile(String filerPath) throws Exception {
+
+		if (!filerPath.endsWith(".ics")) {
+			filerPath = filerPath + ".ics";
+		}
+
+		FileOutputStream fout = new FileOutputStream(filerPath);
+
+		CalendarOutputter outputter = new CalendarOutputter();
+		outputter.output(icsCalendar, fout);
+		fout.close();
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Get IcalBody as ByteArray
+	 */
+	// ------------------------------------------------------------------------------------------
+	public byte[] getIcalAsByteArray() throws Exception {
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		CalendarOutputter outputter = new CalendarOutputter();
+		outputter.output(icsCalendar, bout);
+		return bout.toByteArray();
+
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Retrieving Data as String
+	 */
+	// ------------------------------------------------------------------------------------------
+	public String getICalDataAsString() {
+		return icsCalendar.toString();
+	}
+	// ------------------------------------------------------------------------------------------
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java b/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java
new file mode 100644
index 0000000..f54fe9d
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import java.util.regex.Pattern;
+
+public class MailUtil {
+	
+	private static final Pattern rfc2822 = Pattern.compile(
+	        "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
+	);
+	
+	public static boolean matches(String email) {
+		return rfc2822.matcher(email).matches();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java b/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java
new file mode 100644
index 0000000..7047f74
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class SmtpAuthenticator extends Authenticator {
+
+	private final String username;
+	private final String password;
+
+	public SmtpAuthenticator(String emailUsername, String emailUserpass) {
+		this.username = emailUsername;
+		this.password = emailUserpass;
+	}
+
+	@Override
+	public PasswordAuthentication getPasswordAuthentication() {
+
+		return new PasswordAuthentication(username, password);
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java
new file mode 100644
index 0000000..80efe4c
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+/**
+ * Object created by each conversion step, each conversion step that invokes and
+ * external tool like ImageMagick is one single ConverterProcessMessage
+ * 
+ * if exitValue equals "-1" then there was an issue.
+ * 
+ * @author sebawagner
+ *
+ */
+public class ConverterProcessResult {
+	private String process;
+	private String command;
+	private String exception;
+	private String error;
+	private String exitValue;
+	private String out;
+
+	public ConverterProcessResult() {
+		this(null, null, null);
+	}
+
+	public ConverterProcessResult(String error) {
+		this(null, error, null);
+	}
+
+	public ConverterProcessResult(String process, String error, Exception ex) {
+		setProcess(process);
+		setException(ex == null ? null : ex.toString());
+		setError(error);
+		setExitValue("-1");
+	}
+
+	public String getOut() {
+		return out;
+	}
+
+	public void setOut(String out) {
+		this.out = out;
+	}
+
+	public String getCommand() {
+		return command;
+	}
+
+	public void setCommand(String command) {
+		this.command = command;
+	}
+
+	public String getProcess() {
+		return process;
+	}
+
+	public void setProcess(String process) {
+		this.process = process;
+	}
+
+	public String getException() {
+		return exception;
+	}
+
+	public void setException(String exception) {
+		this.exception = exception;
+	}
+
+	public String getError() {
+		return error;
+	}
+
+	public void setError(String error) {
+		this.error = error;
+	}
+
+	public String getExitValue() {
+		return exitValue;
+	}
+
+	public void setExitValue(String exitValue) {
+		this.exitValue = exitValue;
+	}
+
+	public String buildLogMessage() {
+		return new StringBuilder()
+			.append("process: ").append(process).append("\r\n")
+			.append("command: ").append(command).append("\r\n")
+			.append("exception: ").append(exception).append("\r\n")
+			.append("error: ").append(error).append("\r\n")
+			.append("exitValue: ").append(exitValue).append("\r\n")
+			.append("out: ").append(out).append("\r\n").toString();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
new file mode 100644
index 0000000..d943d5b
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Collects all results of conversion jobs
+ * 
+ * @author sebawagner
+ * 
+ */
+public class ConverterProcessResultList {
+	private static final Logger log = getLogger(ConverterProcessResultList.class, webAppRootKey);
+
+	private Map<String, ConverterProcessResult> jobslist = new HashMap<String, ConverterProcessResult>();
+
+	private Long fileExplorerItemId;
+	private String completeName;
+
+	public Long getFileExplorerItemId() {
+		return fileExplorerItemId;
+	}
+
+	public void setFileExplorerItemId(Long fileExplorerItemId) {
+		this.fileExplorerItemId = fileExplorerItemId;
+	}
+
+	public String getCompleteName() {
+		return completeName;
+	}
+
+	public void setCompleteName(String completeName) {
+		this.completeName = completeName;
+	}
+
+	public ConverterProcessResult addItem(String name,
+			ConverterProcessResult processResult) {
+		if (jobslist.containsKey(name)) {
+			log.error("Duplicate key in jobslist");
+			return null;
+		}
+		return jobslist.put(name, processResult);
+	}
+
+	/**
+	 * returns true if there was an job with exitValue "-1"
+	 * 
+	 * @return
+	 */
+	public boolean hasError() {
+		for (Entry<String, ConverterProcessResult> entry : jobslist.entrySet()) {
+			if (entry.getValue().getExitValue().equals("-1")) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * converts all job results into a human readable format
+	 * 
+	 * @return
+	 */
+	public String getLogMessage() {
+		StringBuilder logMessage = new StringBuilder();
+		for (Entry<String, ConverterProcessResult> entry : jobslist.entrySet()) {
+			logMessage.append("key: ");
+			logMessage.append(entry.getKey());
+			logMessage.append("\r\n");
+			logMessage.append(entry.getValue().buildLogMessage());
+		}
+		return logMessage.toString();
+	}
+
+	/**
+	 * Axis need Objects or array of objects, Map won't work
+	 * 
+	 * @return
+	 */
+	public FileImportError[] convertToFileImportErrors() {
+		FileImportError[] fileImportErrors = new FileImportError[jobslist
+				.size()];
+
+		int i = 0;
+		// Axis need Objects or array of objects, Map won't work
+		for (Iterator<String> iter = jobslist.keySet().iterator(); iter
+				.hasNext();) {
+
+			ConverterProcessResult returnAttribute = jobslist.get(iter
+					.next());
+
+			fileImportErrors[i] = new FileImportError();
+			fileImportErrors[i]
+					.setCommand((returnAttribute.getCommand() != null) ? returnAttribute
+							.getCommand().toString() : "");
+			fileImportErrors[i]
+					.setError((returnAttribute.getError() != null) ? returnAttribute
+							.getError().toString() : "");
+			fileImportErrors[i]
+					.setExitValue((returnAttribute.getExitValue() != null) ? Integer
+							.valueOf(returnAttribute.getExitValue().toString())
+							.intValue() : 0);
+			fileImportErrors[i]
+					.setProcess((returnAttribute.getProcess() != null) ? returnAttribute
+							.getProcess().toString() : "");
+
+			i++;
+		}
+		
+		return fileImportErrors;
+	}
+
+	public int size() {
+		return jobslist.size();
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/FileImportError.java b/src/util/java/org/apache/openmeetings/util/process/FileImportError.java
new file mode 100644
index 0000000..116bdc8
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/FileImportError.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+public class FileImportError {
+	
+	private int exitValue = 0;
+	private String error = "";
+	private String process = "";
+	private String command = "";
+	
+	public int getExitValue() {
+		return exitValue;
+	}
+	public void setExitValue(int exitValue) {
+		this.exitValue = exitValue;
+	}
+	public String getError() {
+		return error;
+	}
+	public void setError(String error) {
+		this.error = error;
+	}
+	public String getProcess() {
+		return process;
+	}
+	public void setProcess(String process) {
+		this.process = process;
+	}
+	public String getCommand() {
+		return command;
+	}
+	public void setCommand(String command) {
+		this.command = command;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java b/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java
new file mode 100644
index 0000000..3f39d72
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProcessHelper {
+	public static final Logger log = Red5LoggerFactory.getLogger(ProcessHelper.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static class Worker extends Thread {
+		private final Process process;
+		private Integer exitCode;
+	
+		private Worker(Process process) {
+			this.process = process;
+		}
+	
+		@Override
+		public void run() {
+			try {
+				exitCode = process.waitFor();
+			} catch (InterruptedException ignore) {
+				return;
+			}
+		}
+	}
+
+	private static class StreamWatcher extends Thread {
+		public StringBuilder output;
+		private final InputStream is;
+		private final BufferedReader br;
+	
+		private StreamWatcher(Process process, boolean isError) throws UnsupportedEncodingException {
+			output = new StringBuilder();
+			is = isError ? process.getErrorStream() : process.getInputStream();
+			br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+		}
+	
+		@Override
+		public void run() {
+			try {
+				String line = br.readLine();
+				while (line != null) {
+					output.append(line).append('\n');
+					line = br.readLine();
+				}
+			} catch (IOException ioexception) {
+				return;
+			}
+		}
+	}
+
+	public static ConverterProcessResult executeScriptWindows(String process, String[] argv) {
+		try {
+			String[] cmd = new String[argv.length + 2];
+			cmd[0] = "cmd.exe";
+			cmd[1] = "/C";
+			System.arraycopy(argv, 0, cmd, 2, argv.length);
+			Map<String, String> env = new HashMap<String, String>();
+			return executeScript(process, cmd, env);
+		} catch (Exception t) {
+			log.error("executeScriptWindows", t);
+			return new ConverterProcessResult(process, t.getMessage(), t);
+		}
+	}
+	
+	private static String getCommand(String[] argv) {
+		StringBuffer tString = new StringBuffer();
+		for (int i = 0; i < argv.length; i++) {
+			tString.append(argv[i]).append(" ");
+		}
+		return tString.toString();
+	}
+	
+	private static void debugCommandStart(String desc, String[] argv) {
+		if (log.isDebugEnabled()) {
+			log.debug("START " + desc + " ################# ");
+			log.debug(getCommand(argv));
+		}
+	}
+	
+	private static void debugCommandEnd(String desc) {
+		if (log.isDebugEnabled()) {
+			log.debug("END " + desc + " ################# ");
+		}
+	}
+	
+	public static ConverterProcessResult executeScript(String process, String[] argv) {
+		Map<String, String> env = new HashMap<String, String>();
+		return executeScript(process, argv, env);
+	}
+	
+	public static ConverterProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) {
+		ConverterProcessResult returnMap = new ConverterProcessResult();
+		returnMap.setProcess(process);
+		debugCommandStart(process, argv);
+	
+		try {
+			returnMap.setCommand(getCommand(argv));
+			returnMap.setOut("");
+	
+			// By using the process Builder we have access to modify the
+			// environment variables
+			// that is handy to set variables to run it inside eclipse
+			ProcessBuilder pb = new ProcessBuilder(argv);
+			pb.environment().putAll(env);
+	
+			Process proc = pb.start();
+	
+			// 20-minute timeout for command execution
+			// FFMPEG conversion of Recordings may take a real long time until
+			// its finished
+			long timeout = 60000 * 20;
+	
+			StreamWatcher errorWatcher = new StreamWatcher(proc, true);
+			Worker worker = new Worker(proc);
+			StreamWatcher inputWatcher = new StreamWatcher(proc, false);
+			errorWatcher.start();
+			inputWatcher.start();
+			worker.start();
+			
+			try {
+				worker.join(timeout);
+				if (worker.exitCode != null) {
+					returnMap.setExitValue("" + worker.exitCode);
+					log.debug("exitVal: " + worker.exitCode);
+					returnMap.setError(errorWatcher.output.toString());
+				} else {
+					returnMap.setException("timeOut");
+					returnMap.setError(errorWatcher.output.toString());
+					returnMap.setExitValue("-1");
+	
+					throw new TimeoutException();
+				}
+			} catch (InterruptedException ex) {
+				worker.interrupt();
+				errorWatcher.interrupt();
+				inputWatcher.interrupt();
+				Thread.currentThread().interrupt();
+	
+				returnMap.setError(ex.getMessage());
+				returnMap.setExitValue("-1");
+	
+				throw ex;
+			} finally {
+				proc.destroy();
+			}
+			
+		} catch (TimeoutException e) {
+			// Timeout exception is processed above
+			log.error("executeScript",e);
+			returnMap.setError(e.getMessage());
+			returnMap.setException(e.toString());
+			returnMap.setExitValue("-1");
+		} catch (Throwable t) {
+			// Any other exception is shown in debug window
+			log.error("executeScript",t);
+			returnMap.setError(t.getMessage());
+			returnMap.setException(t.toString());
+			returnMap.setExitValue("-1");
+		}
+		
+		debugCommandEnd(process);
+		return returnMap;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java b/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java
new file mode 100644
index 0000000..4eed547
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+/**
+ * Helper bean that is send to client(s) once the servlet has completed the
+ * upload
+ * 
+ * @author sebawagner
+ * 
+ */
+public class UploadCompleteMessage {
+	private Long userId;
+	private String message;
+	private String action;
+	private String error;
+	private boolean hasError = false;
+	private String fileName;
+
+	// Properties from the file explorerItem
+	private String fileSystemName;
+	private Boolean isPresentation = false;
+	private Boolean isImage = false;
+	private Boolean isVideo = false;
+	private String fileHash;
+
+	public UploadCompleteMessage() {
+	}
+
+	public UploadCompleteMessage(Long userId, String message, String action,
+			String error, String fileName) {
+		super();
+		this.userId = userId;
+		this.message = message;
+		this.action = action;
+		this.error = error;
+		this.fileName = fileName;
+	}
+
+	public UploadCompleteMessage(Long userId, String message, String action,
+			String error, boolean hasError, String fileName,
+			String fileSystemName, boolean isPresentation, boolean isImage,
+			boolean isVideo, String fileHash) {
+		super();
+		this.userId = userId;
+		this.message = message;
+		this.action = action;
+		this.error = error;
+		this.hasError = hasError;
+		this.fileName = fileName;
+		this.fileSystemName = fileSystemName;
+		this.isPresentation = isPresentation;
+		this.isImage = isImage;
+		this.isVideo = isVideo;
+		this.fileHash = fileHash;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getError() {
+		return error;
+	}
+
+	public void setError(String error) {
+		this.error = error;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public boolean isHasError() {
+		return hasError;
+	}
+
+	public void setHasError(boolean hasError) {
+		this.hasError = hasError;
+	}
+
+	public String getFileSystemName() {
+		return fileSystemName;
+	}
+
+	public void setFileSystemName(String fileSystemName) {
+		this.fileSystemName = fileSystemName;
+	}
+
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+
+	public Boolean getIsImage() {
+		return isImage;
+	}
+
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+
+	public Boolean getIsVideo() {
+		return isVideo;
+	}
+
+	public void setIsVideo(Boolean isVideo) {
+		this.isVideo = isVideo;
+	}
+
+	public String getFileHash() {
+		return fileHash;
+	}
+
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java b/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java
new file mode 100644
index 0000000..13a4be0
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.stringhandlers;
+
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ChatString {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ChatString.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static String htmlToText(String source) {
+		String result = source;
+		result = Strings.replaceAll(result, "<", "&lt;").toString();
+		result = Strings.replaceAll(result, ">", "&gt;").toString();
+		return result;
+	}
+	
+	public static LinkedList<String[]> parseChatString(String message, LinkedList<LinkedList<String>> emotFiles, boolean allowHTML) {
+		try {
+			LinkedList<String[]> list = new LinkedList<String[]>();
+
+			// log.debug("this.link(message) "+this.link(message));
+
+			if (!allowHTML)
+				message = htmlToText(message);
+			
+			String[] messageStr = { "text", message };
+			list.add(messageStr);
+
+			for (LinkedList<String> emot : emotFiles) {
+				// log.error("CHECK EMOT: "+ emot.get(0) + emot.get(1) +
+				// emot.size());
+				list = splitStr(list, emot.get(0), emot.get(1),
+						emot.get(emot.size() - 2));
+
+				if (emot.size() > 4) {
+					// log.error("CHECK EMOT ASIAN: "+ emot.get(0) + emot.get(2)
+					// + emot.size());
+					list = splitStr(list, emot.get(0), emot.get(2),
+							emot.get(emot.size() - 2));
+				}
+			}
+
+			// log.debug("#########  ");
+			// for (Iterator<String[]> iter = list.iterator();iter.hasNext();){
+			// String[] stringArray = iter.next();
+			// //stringArray[1] = this.link(stringArray[1]);
+			// log.debug(stringArray[0]+"||"+stringArray[1]);
+			// }
+
+			return list;
+
+		} catch (Exception err) {
+			log.error("[parseChatString]", err);
+		}
+		return null;
+	}
+
+	private static LinkedList<String[]> splitStr(LinkedList<String[]> list,
+			String image, String regexp, String spaces) {
+
+		LinkedList<String[]> newList = new LinkedList<String[]>();
+
+		for (Iterator<String[]> iter = list.iterator(); iter.hasNext();) {
+
+			String[] messageObj = iter.next();
+			String messageTye = messageObj[0];
+
+			if (messageTye.equals("text")) {
+				String messageStr = messageObj[1];
+
+				String[] newStr = messageStr.split(regexp);
+
+				for (int k = 0; k < newStr.length; k++) {
+					String[] textA = { "text", newStr[k] };
+					newList.add(textA);
+					if (k + 1 != newStr.length) {
+						String[] imageA = { "image", image, spaces,
+								regexp.replace("\\", "") };
+						newList.add(imageA);
+					}
+				}
+			} else {
+
+				newList.add(messageObj);
+			}
+
+		}
+
+		return newList;
+	}
+
+	public static LinkedList<LinkedList<String>> replaceAllRegExp(LinkedList<LinkedList<String>> emotFiles) {
+		LinkedList<LinkedList<String>> emotfilesListNew = new LinkedList<LinkedList<String>>();
+		try {
+			for (LinkedList<String> emot : emotFiles) {
+				// log.error("FILE: "+emot.get(0));
+				String westernMeaning = checkforRegex(emot.get(1));
+				emot.set(1, westernMeaning);
+				// log.error("westernMeaning "+westernMeaning);
+				if (emot.size() > 2) {
+					String asianMeaning = checkforRegex(emot.get(2));
+					emot.set(2, asianMeaning);
+					// log.error("westernMeaning "+asianMeaning);
+				}
+				emotfilesListNew.add(emot);
+			}
+		} catch (Exception err) {
+			log.error("[replaceAllRegExp]", err);
+		}
+		return emotfilesListNew;
+	}
+
+	/**
+	 * Replace characters having special meaning in regular expressions
+	 * 
+	 */
+	private static String checkforRegex(String aRegexFragment) {
+		final StringBuilder result = new StringBuilder();
+
+		final StringCharacterIterator iterator = new StringCharacterIterator(
+				aRegexFragment);
+		char character = iterator.current();
+		while (character != CharacterIterator.DONE) {
+			/*
+			 * All literals need to have backslashes doubled.
+			 */
+			if (character == '.') {
+				result.append("\\.");
+			} else if (character == '\\') {
+				result.append("\\\\");
+			} else if (character == '?') {
+				result.append("\\?");
+			} else if (character == '*') {
+				result.append("\\*");
+			} else if (character == '+') {
+				result.append("\\+");
+			} else if (character == '&') {
+				result.append("\\&");
+			} else if (character == ':') {
+				result.append("\\:");
+			} else if (character == '{') {
+				result.append("\\{");
+			} else if (character == '}') {
+				result.append("\\}");
+			} else if (character == '[') {
+				result.append("\\[");
+			} else if (character == ']') {
+				result.append("\\]");
+			} else if (character == '(') {
+				result.append("\\(");
+			} else if (character == ')') {
+				result.append("\\)");
+			} else if (character == '^') {
+				result.append("\\^");
+			} else if (character == '$') {
+				result.append("\\$");
+			} else if (character == '|') {
+				result.append("\\|");
+			} else {
+				// the char is not a special one
+				// add it to the result as is
+				result.append(character);
+			}
+			character = iterator.next();
+		}
+		return result.toString();
+	}
+
+	public static String link(String input) {
+		try {
+
+			String tReturn = "";
+
+			String parts[] = input.split(" ");
+
+			for (int t = 0; t < parts.length; t++) {
+
+				String text = parts[t];
+
+				// System.out.println("Part 1 "+text);
+
+				Matcher matcher = Pattern
+						.compile(
+								"(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))")
+						.matcher(text);
+
+				if (matcher.find()) {
+					text = matcher
+							.replaceFirst("<u><FONT color=\"#0000CC\"><a href='"
+									+ text + "'>" + text + "</a></FONT></u>");
+
+				}
+
+				// System.out.println("Part 2 "+text);
+
+				if (t != 0) {
+					tReturn += " ";
+				}
+
+				tReturn += text;
+
+			}
+
+			return tReturn;
+
+		} catch (Exception e) {
+			log.error("[link]", e);
+		}
+		return "";
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java b/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java
new file mode 100644
index 0000000..8d8817f
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.stringhandlers;
+
+public class StringComparer {
+	
+	private static StringComparer instance = null;
+	
+	private StringComparer() {}
+	
+	public static synchronized StringComparer getInstance(){
+		if (instance == null){
+			instance = new StringComparer();
+		}
+		return instance;
+	}
+	
+	public String compareForRealPaths(String inputString) throws Exception{
+
+		String t = "";
+		for (int i=0;i<inputString.length();i++){
+			char c = inputString.charAt(i);
+			if (compareChars(c)) {
+				t += c;
+			} else {
+				t += "_";
+			}
+			
+		}		
+		return t;
+	}
+	
+	private boolean compareChars(char inputChar){		
+		return Character.isLetterOrDigit(inputChar);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java b/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
new file mode 100644
index 0000000..2377990
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+
+/**
+ * provides basic functionality to insert, update, remove, refresh record in
+ * admin section
+ * 
+ * @author swagner
+ * 
+ * @param <T>
+ */
+public abstract class AdminBaseForm<T> extends Form<T> {
+	private static final long serialVersionUID = 1L;
+	private AdminSavePanel<T> savePanel;
+
+	public AdminBaseForm(String id, IModel<T> object) {
+		super(id, object);
+		
+		savePanel = new AdminSavePanel<T>("buttons", this) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onSaveSubmit(target, form);
+			}
+
+			@Override
+			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onSaveError(target, form);
+			}
+
+			@Override
+			protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onNewSubmit(target, form);
+			}
+
+			@Override
+			protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onNewError(target, form);
+			}
+
+			@Override
+			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onRefreshSubmit(target, form);
+			}
+
+			@Override
+			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onRefreshError(target, form);
+			}
+
+			@Override
+			protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onDeleteSubmit(target, form);
+			}
+
+			@Override
+			protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onDeleteError(target, form);
+			}
+			
+		};
+		add(savePanel);
+
+
+	}
+
+	/**
+	 * @see AdminBaseForm#hideNewRecord()
+	 */
+	public void hideNewRecord() {
+		savePanel.hideNewRecord();
+	}
+	
+	/**
+	 * @see AdminBaseForm#showNewRecord()
+	 */
+	public void showNewRecord() {
+		savePanel.showNewRecord();
+	}
+
+	/**
+	 * invoked when user press save button
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when save has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when new button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked if new has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when refresh button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when refresh has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when delete button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when delete has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);
+	
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java b/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java
new file mode 100644
index 0000000..145491d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+
+@AuthorizeInstantiation("Admin")
+public abstract class AdminPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public AdminPanel(String id) {
+		super(id);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
new file mode 100644
index 0000000..d58a56a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<div class="formNewButton">
+			<input type="submit" value="" wicket:id="ajax-new-button" wicket:message="title:155" />
+		</div>
+		<div class="formCancelButton">
+			<input type="submit" value="" wicket:id="ajax-cancel-button" wicket:message="title:157" />
+		</div>
+		<span wicket:id="newRecord"></span>
+	</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
new file mode 100644
index 0000000..cebe757
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.Model;
+
+public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
+	private static final long serialVersionUID = 1L;
+	private Label newRecord;
+	
+	public AdminSavePanel(String id, final Form<T> form) {
+		super(id, form);
+		
+		newRecord = new Label("newRecord", Model.of(Application.getString(344L)));
+		add(newRecord.setVisible(false).setOutputMarkupId(true));
+		
+		// add a new button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-new-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				newRecord.setVisible(true);
+				target.add(newRecord);
+				onNewSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				onNewError(target, form);
+			}
+		});
+
+		// add a cancel button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-cancel-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+				super.updateAjaxAttributes(attributes);
+				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
+			}
+			
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteError(target, form);
+			}
+		});
+	}
+	
+	/**
+	 * Hide the new record text
+	 */
+	public void hideNewRecord() {
+		newRecord.setVisible(false);
+	}
+	
+	/**
+	 * Hide the new record text
+	 */
+	public void showNewRecord() {
+		newRecord.setVisible(true);
+	}
+
+	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);
+
+	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java b/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
new file mode 100644
index 0000000..01c695a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+public abstract class AdminUserChoiceProvider extends TextChoiceProvider<User> {
+	private static final long serialVersionUID = 1L;
+	protected static int PAGE_SIZE = 20;
+
+	@Override
+	protected Object getId(User choice) {
+		return choice.getUser_id();
+	}
+
+	@Override
+	public void query(String term, int page, Response<User> response) {
+		response.addAll(getBean(UserDao.class).get(term, true, page * PAGE_SIZE, PAGE_SIZE));
+		response.setHasMore(PAGE_SIZE == response.getResults().size());
+	}
+
+	@Override
+	public Collection<User> toChoices(Collection<String> _ids) {
+		List<Long> ids = new ArrayList<Long>();
+		for (String id : _ids) {
+			ids.add(Long.valueOf(id));
+		}
+		return new ArrayList<User>(getBean(UserDao.class).get(ids));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java b/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java
new file mode 100644
index 0000000..8bc5450
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.markup.repeater.data.DataView;
+
+/**
+ * Provides {@link SearchableDataProvider}
+ * 
+ * @author swagner
+ * 
+ * @param <T>
+ */
+public abstract class SearchableDataView<T extends IDataProviderEntity> extends DataView<T> {
+	private static final long serialVersionUID = 1L;
+	private SearchableDataProvider<T> dp;
+	
+	public SearchableDataView(String id, SearchableDataProvider<T> dp) {
+		super(id, dp);
+		this.dp = dp;
+	}
+	
+	@Override
+	public SearchableDataProvider<T> getDataProvider() {
+		return dp;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
new file mode 100644
index 0000000..cc32fd3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="feedback"></div>
+		<form wicket:id="backupUpload" class="adminForm adminBackupForm">
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1066" /></legend>
+				<div class="formelement">
+				    <div class="info-text"><wicket:message key="1065" /></div>
+	            </div>
+	            <div class="formelement">
+                   <label><wicket:message key="1537" /></label> <input type="checkbox" wicket:id="includeFilesInBackup" />
+	            </div>
+	            <div class="formelement">
+	               <span wicket:id="progress"></span>
+	               <div wicket:id="dprogress"></div>
+	            </div>
+	            <div class="formelement">
+		            <!-- Perform Download -->
+					<div wicket:id="download" class="btn"><wicket:message key="1066"/></div>
+					<!-- Perform Upload -->
+					<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0; display: inline-block;">
+						<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span 
+							class="ui-button-text"><wicket:message key="1536"/></span><input class="uploadFileField" wicket:id="fileInput" type="file"/></span>
+					</div>
+	            </div>
+	            <div class="formelement">
+		            <!-- Max upload size -->
+		            <wicket:message key="1491" /> <span wicket:id="MaxUploadSize" /><span>MB</span>
+	            </div>
+	            <div class="formelement">
+		            <!-- Backup CLI import information -->
+	               <div class="info-text" wicket:id="cmdLineDesc"></div>
+	            </div>
+	        </fieldset>
+		</form>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
new file mode 100644
index 0000000..d7093bb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
@@ -0,0 +1,247 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.Date;
+
+import org.apache.openmeetings.backup.BackupExport;
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+/**
+ * Panel component to manage Backup Import/Export
+ * 
+ * @author swagner
+ * 
+ */
+public class BackupPanel extends AdminPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupPanel.class, webAppRootKey);
+
+	private static final long serialVersionUID = -1L;
+
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+
+	/**
+	 * Form to handle upload files
+	 * 
+	 * @author swagner
+	 * 
+	 */
+	private class BackupForm extends Form<Void> {
+		private static final long serialVersionUID = 1L;
+		private final FileUploadField fileUploadField;
+		private final Model<Boolean> includeFilesInBackup = Model.of(true);
+		private final AbstractAjaxTimerBehavior timer;
+		private final ProgressBar progressBar;
+		private File backupFile;
+		private Throwable th = null;
+		private boolean started = false;
+		private ProgressHolder progressHolder;
+
+		public BackupForm(String id) {
+			super(id);
+
+			// set this form to multipart mode (allways needed for uploads!)
+			setMultiPart(true);
+
+			// set max upload size in form as info text
+			Long maxBytes = getBean(ConfigurationDao.class).getMaxUploadSize();
+			double megaBytes = maxBytes.doubleValue() / 1024 / 1024;
+			DecimalFormat formatter = new DecimalFormat("#,###.00");
+			add(new Label("MaxUploadSize", formatter.format(megaBytes)));
+
+			// Add one file input field
+			fileUploadField = new FileUploadField("fileInput");
+
+			add(new CheckBox("includeFilesInBackup", includeFilesInBackup));
+
+			// Set maximum size controlled by configuration
+			setMaxSize(Bytes.bytes(maxBytes));
+
+			// Add a component to download a file without page refresh
+			final AjaxDownload download = new AjaxDownload();
+			add(download);
+			// add an download button
+			add(new AjaxButton("download", this) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					File workingDir = OmFileHelper.getUploadBackupDir();
+					String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());
+					File backupDir = new File(workingDir, dateString);
+					backupFile = new File(backupDir, dateString + ".zip");
+					th = null;
+					started = true;
+					progressHolder = new ProgressHolder();
+
+					timer.restart(target);
+					new Thread(new BackupProcess(getBean(BackupExport.class), backupDir, includeFilesInBackup.getObject(), progressHolder)
+						, "Openmeetings - " + dateString).start();
+
+					// repaint the feedback panel so that it is hidden
+					target.add(feedback, progressBar.setVisible(true));
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target, Form<?> form) {
+					// repaint the feedback panel so errors are shown
+					target.add(feedback);
+				}
+			});
+			add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					if (!started) {
+						timer.stop(target);
+						return;
+					}
+					if (th != null) {
+						timer.stop(target);
+						//TODO change text, localize
+						progressBar.setVisible(false);
+						feedback.error(th.getMessage());
+						target.add(feedback);
+					} else {
+						progressBar.setModelObject(progressHolder.getProgress());
+						progressBar.refresh(target);
+						//TODO add current step result as info
+					}
+				}
+			});
+			add((progressBar = new ProgressBar("dprogress", new Model<Integer>(0)) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onComplete(AjaxRequestTarget target) {
+					timer.stop(target);
+					target.add(progressBar.setVisible(false));
+					
+					download.setFileName(backupFile.getName());
+					download.setResourceStream(new FileResourceStream(backupFile));
+					download.initiate(target);
+				}
+			}).setVisible(false).setOutputMarkupPlaceholderTag(true));
+			add(fileUploadField.add(new AjaxFormSubmitBehavior(this, "onchange") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target) {
+					FileUpload upload = fileUploadField.getFileUpload();
+					try {
+						if (upload == null || upload.getInputStream() == null) {
+							feedback.error("File is empty");
+							target.add(feedback);
+							return;
+						}
+						getBean(BackupImport.class).performImport(upload.getInputStream());
+					} catch (Exception e) {
+						log.error("Exception on panel backup upload ", e);
+						feedback.error(e);
+					}
+					// repaint the feedback panel so that it is hidden
+					target.add(feedback);
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target) {
+					// repaint the feedback panel so errors are shown
+					target.add(feedback);
+				}
+			}));
+			add(new Label("cmdLineDesc", Application.getString(1505)).setEscapeModelStrings(false));
+		}
+
+		@Override
+		protected void onDetach() {
+			includeFilesInBackup.detach();
+			super.onDetach();
+		}
+		
+		private class BackupProcess implements Runnable {
+			private BackupExport backup;
+			private File backupDir;
+			private boolean includeFiles;
+			private ProgressHolder progressHolder;
+			
+			public BackupProcess(BackupExport backup, File backupDir, boolean includeFiles, ProgressHolder progressHolder) {
+				this.backup = backup;
+				this.backupDir = backupDir;
+				this.includeFiles = includeFiles;
+				this.progressHolder = progressHolder;
+				th = null;
+			}
+			
+			public void run() {
+				try {
+					backup.performExport(backupFile, backupDir, includeFiles, progressHolder);
+				} catch (Exception e) {
+					log.error("Exception on panel backup download ", e);
+					th = e;
+				}
+			}
+		}
+	}
+
+	public BackupPanel(String id) {
+		super(id);
+
+		add(feedback);
+
+		BackupForm backupForm = new BackupForm("backupUpload");
+
+		backupForm.add(new UploadProgressBar("progress", backupForm, backupForm.fileUploadField));
+
+		add(backupForm);
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
new file mode 100644
index 0000000..7af675d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.configurations;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+
+/**
+ * Handle {@link Configuration} items as list and form
+ * 
+ * @author swagner
+ * 
+ */
+public class ConfigForm extends AdminBaseForm<Configuration> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer listContainer;
+
+	private void refresh(AjaxRequestTarget target) {
+		target.add(this);
+		target.appendJavaScript("omConfigPanelInit();");
+	}
+	
+	public ConfigForm(String id, WebMarkupContainer listContainer, Configuration configuration) {
+		super(id, new CompoundPropertyModel<Configuration>(configuration));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+		add(new RequiredTextField<String>("conf_key").setLabel(Model.of(Application.getString(267))).add(new IValidator<String>(){
+			private static final long serialVersionUID = 1L;
+
+			public void validate(IValidatable<String> validatable) {
+				Configuration c = getBean(ConfigurationDao.class).forceGet(validatable.getValue());
+				if (c != null && !c.isDeleted() && !c.getConfiguration_id().equals(ConfigForm.this.getModelObject().getConfiguration_id())) {
+					error(Application.getString(1544L));
+				}
+			}
+		}));
+		add(new TextField<String>("conf_value").setLabel(Model.of(Application.getString(271))));
+		add(forDatePattern("updatetime", WEB_DATE_PATTERN));
+		add(new Label("user.login"));
+		add(new TextArea<String>("comment"));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+	
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		Configuration c = cfgDao.forceGet(getModelObject().getConf_key());
+		if (c != null && c.isDeleted() && !c.getConfiguration_id().equals(getModelObject().getConfiguration_id())) {
+			getModelObject().setConfiguration_id(c.getConfiguration_id());
+		}
+		setModelObject(getBean(ConfigurationDao.class).update(getModelObject(), WebSession.getUserId()));
+		hideNewRecord();
+		target.add(listContainer);
+		refresh(target);
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new Configuration());
+		refresh(target);
+	}
+	
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Configuration conf = getModelObject();
+		if (conf.getConfiguration_id() != null) {
+			conf = getBean(ConfigurationDao.class).get(conf.getConfiguration_id());
+		} else {
+			conf = new Configuration();
+		}
+		setModelObject(conf);
+		refresh(target);
+	}
+	
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(ConfigurationDao.class).delete(getModelObject(), WebSession.getUserId());
+		setModelObject(new Configuration());
+		target.add(listContainer);
+		refresh(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
new file mode 100644
index 0000000..dc1674b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omConfigPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>	
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="264" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByKey"></span><wicket:message key="265" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByValue"></span><wicket:message key="598" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer" >	
+				    		<tr wicket:id="configList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="configuration_id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="conf_key"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="conf_value"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="266" /></legend>
+							<div class="formelement">
+							    <label><wicket:message key="267" /></label><input type="text" wicket:id="conf_key"/>
+				            </div>
+				            <div class="formelement">
+                                   <label><wicket:message key="271" /></label><input type="text" wicket:id="conf_value"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="268" /></label><span wicket:id="updatetime"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="269" /></label><span wicket:id="user.login"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
new file mode 100644
index 0000000..0c91e3c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.configurations;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * add/update/delete {@link Configuration}
+ * 
+ * @author swagner
+ * 
+ */
+public class ConfigsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	private ConfigForm form;
+	private final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omConfigPanelInit();");
+	}
+
+	public ConfigsPanel(String id) {
+		super(id);
+		
+		SearchableDataView<Configuration> dataView = new SearchableDataView<Configuration>("configList"
+			, new SearchableDataProvider<Configuration>(ConfigurationDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Configuration> item) {
+				final Configuration c = item.getModelObject();
+				item.add(new Label("configuration_id", c.getConfiguration_id()));
+				item.add(new Label("conf_key", c.getConf_key()));
+				item.add(new Label("conf_value", c.getConf_value()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(c);
+						target.add(form, listContainer);
+						target.appendJavaScript("omConfigPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (c.getConfiguration_id().equals(form.getModelObject().getConfiguration_id()) ? " ui-state-default" : "")));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Configuration> container = new DataViewContainer<Configuration>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<Configuration>("orderById", "configuration_id", container))
+			.addLink(new OmOrderByBorder<Configuration>("orderByKey", "conf_key", container))
+			.addLink(new OmOrderByBorder<Configuration>("orderByValue", "conf_value", container));
+		add(container.getLinks());
+		add(navigator);
+		
+		form = new ConfigForm("form", listContainer, new Configuration());
+		form.showNewRecord();
+        add(form);
+		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
new file mode 100644
index 0000000..66ed5ee
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>	
+	<div class="adminPanel">
+		<div class="adminPanelColumnTable">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable">
+				<thead>
+					<tr>
+						<th class="ui-widget-header"><wicket:message key="599" /></th>
+						<th class="ui-widget-header"><wicket:message key="600" /></th>
+						<th class="ui-widget-header"><wicket:message key="601" /></th>
+						<th class="ui-widget-header"><wicket:message key="602" /></th>
+						<th class="ui-widget-header"><wicket:message key="603" /></th>
+						<th class="ui-widget-header"><wicket:message key="1501" /></th>
+					</tr>
+				</thead>
+				<tbody wicket:id="container" >
+					<tr wicket:id="clientList">
+						<td wicket:id="id"></td>
+						<td wicket:id="login"></td>
+						<td wicket:id="since"></td>
+						<td wicket:id="scope"></td>
+						<td><a wicket:id="kick"><wicket:message key="603" /></a></td>
+						<td wicket:id="server"></td>
+					</tr>
+				</tbody>
+				<tbody wicket:id="containerWeb" >
+					<tr wicket:id="clientListWeb">
+						<td wicket:id="id"></td>
+						<td wicket:id="login"></td>
+						<td wicket:id="since"></td>
+						<td wicket:id="scope"></td>
+						<td><a wicket:id="kick"><wicket:message key="603" /></a></td>
+						<td>&nbsp;</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<div class="adminPanelColumnForm">
+			<table wicket:id="details" style="width: 450px;">
+				<tr wicket:id="line"><td wicket:id="name"></td><td wicket:id="value"></td></tr>
+			</table>
+		</div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
new file mode 100644
index 0000000..d309ef7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.connection;
+
+import static java.lang.Boolean.TRUE;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.UserService;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.RepeatingView;
+
+public class ConnectionsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+
+	public ConnectionsPanel(String id) {
+		super(id);
+	
+		SearchableDataProvider<Client> sdp = new SearchableDataProvider<Client>(null) {
+			private static final long serialVersionUID = 1L;
+
+			//FIXME add search
+			
+			@Override
+			public Iterator<? extends Client> iterator(long first, long count) {
+				//FIXME add grouping by public SID
+				List<Client> l = new ArrayList<Client>(getBean(ISessionManager.class).getClientsWithServer());
+				return l.subList((int)Math.max(0, first), (int)Math.min(first + count, l.size())).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return getBean(ISessionManager.class).getClients().size();
+			}
+		};
+		
+		SearchableDataProvider<WebClient> sdpWeb = new SearchableDataProvider<WebClient>(null) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public Iterator<? extends WebClient> iterator(long first, long count) {
+				List<WebClient> l = new ArrayList<WebClient>(Application.getClients());
+				return l.subList((int)Math.max(0, first), (int)Math.min(first + count, l.size())).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return Application.getClientsSize();
+			}
+		};
+		final WebMarkupContainer container = new WebMarkupContainer("container");
+		final WebMarkupContainer details = new WebMarkupContainer("details");
+		SearchableDataView<Client> dataView = new SearchableDataView<Client>("clientList", sdp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Client> item) {
+				Client c = item.getModelObject();
+				item.add(new Label("id", c.getStreamid()));
+				item.add(new Label("login", c.getUsername()));
+				item.add(new Label("since", c.getConnectedSince()));
+				item.add(new Label("scope", c.getScope()));
+				item.add(new Label("server", c.getServer() == null ? "no cluster" : c.getServer().getAddress())); //FIXME localization
+				item.add(new ConfirmableAjaxLink("kick", 605) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						Client c = item.getModelObject();
+						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
+								, c.getServer() == null ? 0 : c.getServer().getId());
+						target.add(container, details.setVisible(false));
+					}
+				}.setEnabled(!TRUE.equals(c.getIsScreenClient()) && !TRUE.equals(c.getIsAVClient())));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						Field[] ff = Client.class.getDeclaredFields();
+						RepeatingView lines = new RepeatingView("line");
+						Client c = item.getModelObject();
+						for (Field f : ff) {
+							int mod = f.getModifiers();
+							if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+								continue;
+							}
+							WebMarkupContainer line = new WebMarkupContainer(lines.newChildId());
+							line.add(new Label("name", f.getName()));
+							String val = "";
+							try {
+								f.setAccessible(true);
+								val = "" + f.get(c);
+							} catch (Exception e) {
+								//noop
+							}
+							line.add(new Label("value", val));
+							lines.add(line);
+						}
+						details.addOrReplace(lines);
+						target.add(details.setVisible(true));
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"));
+			}
+		};
+		add(container.add(dataView).setOutputMarkupId(true));
+		
+		final WebMarkupContainer containerWeb = new WebMarkupContainer("containerWeb");
+		SearchableDataView<WebClient> dataViewWeb = new SearchableDataView<WebClient>("clientListWeb", sdpWeb) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<WebClient> item) {
+				WebClient c = item.getModelObject();
+				item.add(new Label("id", c.getUserId()));
+				item.add(new Label("login", getBean(UserService.class).getUserById(getSid(), c.getUserId()).getLogin()));
+				item.add(new Label("since", c.getConnectedSince()));
+				item.add(new Label("scope", "hibernate"));
+				item.add(new ConfirmableAjaxLink("kick", 605) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						WebClient c = item.getModelObject();
+						getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId()
+								, c.getSessionId());
+						target.add(containerWeb, details.setVisible(false));
+					}
+				}.setEnabled(!c.getSessionId().equals(WebSession.get().getId())));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						Field[] ff = WebClient.class.getDeclaredFields();
+						RepeatingView lines = new RepeatingView("line");
+						WebClient c = item.getModelObject();
+						for (Field f : ff) {
+							int mod = f.getModifiers();
+							if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+								continue;
+							}
+							WebMarkupContainer line = new WebMarkupContainer(lines.newChildId());
+							line.add(new Label("name", f.getName()));
+							String val = "";
+							try {
+								f.setAccessible(true);
+								val = "" + f.get(c);
+							} catch (Exception e) {
+							}
+							line.add(new Label("value", val));
+							lines.add(line);
+						}
+						details.addOrReplace(lines);
+						target.add(details.setVisible(true));
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"));
+			}
+		};
+		add(containerWeb.add(dataViewWeb).setOutputMarkupId(true), details.setVisible(false).setOutputMarkupPlaceholderTag(true));
+		
+		add(new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(container);
+			}
+		});
+	}
+
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
new file mode 100644
index 0000000..f8a093b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+import org.wicketstuff.select2.Select2Choice;
+
+public class GroupForm extends AdminBaseForm<Organisation> {
+	private static final long serialVersionUID = 1L;
+	private GroupUsersPanel usersPanel;
+	private WebMarkupContainer groupList;
+	private Select2Choice<User> userToadd = null;
+	
+	static String formatUser(User choice) {
+		return String.format("%s [%s %s]", choice.getLogin(), choice.getFirstname(), choice.getLastname());
+	}
+	
+	public GroupForm(String id, WebMarkupContainer groupList, Organisation organisation) {
+		super(id, new CompoundPropertyModel<Organisation>(organisation));
+		this.groupList = groupList;
+		setOutputMarkupId(true);
+		
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(165))));
+		usersPanel = new GroupUsersPanel("users", getOrgId());
+		add(usersPanel);
+
+		add(userToadd = new Select2Choice<User>("user2add", Model.of((User)null), new AdminUserChoiceProvider() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getDisplayText(User choice) {
+				return formatUser(choice);
+			}
+		}));
+		userToadd.add(new AjaxFormComponentUpdatingBehavior("change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				Organisation o = GroupForm.this.getModelObject();
+				User u = userToadd.getModelObject();
+				boolean found = false;
+				if (o.getOrganisation_id() != null) {
+					found = null != getBean(OrganisationUserDao.class).getByOrganizationAndUser(o.getOrganisation_id(), u.getUser_id());
+				}
+				if (!found && u != null) {
+					for (Organisation_Users ou : usersPanel.getUsers2add()) {
+						if (ou.getUser().getUser_id().equals(u.getUser_id())) {
+							found = true;
+							break;
+						}
+					}
+					if (!found) {
+						Organisation_Users ou = new Organisation_Users(o);
+						ou.setUser(u);
+						usersPanel.getUsers2add().add(ou);
+
+						userToadd.setModelObject(null);
+						target.add(usersPanel, userToadd);
+					}
+				}
+			}
+		});
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+	
+	public void updateView(AjaxRequestTarget target) {
+		userToadd.setModelObject(null);
+		usersPanel.update(getOrgId());
+		target.add(this, groupList);
+		target.appendJavaScript("groupsInit();");
+	}
+
+	private long getOrgId() {
+		return getModelObject().getOrganisation_id() != null ? getModelObject().getOrganisation_id() : 0;
+	}
+	
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
+		setModelObject(new Organisation());
+		updateView(target);
+	}
+	
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Organisation org = getModelObject();
+		if (org.getOrganisation_id() != null) {
+			org = getBean(OrganisationDao.class).get(org.getOrganisation_id());
+		} else {
+			org = new Organisation();
+		}
+		setModelObject(org);
+		updateView(target);
+	}
+	
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(OrganisationDao.class).delete(getModelObject(), getUserId());
+		setModelObject(new Organisation());
+		updateView(target);
+	}
+	
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Organisation o = getModelObject();
+		o = getBean(OrganisationDao.class).update(o, getUserId());
+		setModelObject(o);
+		getBean(OrganisationUserDao.class).update(usersPanel.getUsers2add(), getUserId());
+		hideNewRecord();
+		updateView(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
new file mode 100644
index 0000000..f12cf9d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="usergroupspanel">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable" style="min-width: 440px; max-width: 440px" >
+                <tr>
+                    <th class="ui-widget-header" style="width: 34px; max-width: 34px; overflow: hidden;" wicket:message="title:98"><wicket:message key="98" /></th>
+                    <th class="ui-widget-header" style="width: 360px"><wicket:message key="177" /></th>
+                    <th class="ui-widget-header" style="width: 34px"><wicket:message key="275" /></th>
+                </tr>   
+            </table>
+            <div class="tableWrapper" style="width: 460px; height: 460px;">
+                <table class="adminListTable" style="min-width: 440px; max-width: 440px">  
+                    <tbody>   
+                        <tr wicket:id="userList" class="ui-widget-content">
+                            <td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>
+                            <td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>
+                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"><input/></div></div></td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
new file mode 100644
index 0000000..f148111
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.Item;
+
+public class GroupUsersPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	private long organisationId;
+	private List<Organisation_Users> users2add = new ArrayList<Organisation_Users>();
+	
+	public GroupUsersPanel(String id, long orgId) {
+		super(id);
+		this.organisationId = orgId;
+		setOutputMarkupId(true);
+		
+		SearchableDataView<Organisation_Users> dataView = new SearchableDataView<Organisation_Users>("userList", new OrgUserDataProvider()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<Organisation_Users> item) {
+				final Organisation_Users orgUser = item.getModelObject();
+				User u = orgUser.getUser();
+				item.add(new CheckBox("isModerator").add(new OnChangeAjaxBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						if (orgUser.getOrganisation_users_id() != null) {
+							getBean(OrganisationUserDao.class).update(orgUser, WebSession.getUserId());
+						}
+					}
+				}));
+				Label label = new Label("label", u == null ? "" : GroupForm.formatUser(u));
+				if (orgUser.getOrganisation_users_id() == null) {
+					label.add(AttributeAppender.append("class", "newItem"));
+				}
+				item.add(label);
+				item.add(new WebMarkupContainer("deleteUserBtn").add(new AjaxEventBehavior("onclick"){
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+						super.updateAjaxAttributes(attributes);
+						attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
+					}
+					
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						if (orgUser.getOrganisation_users_id() == null) {
+							for (int i = 0; i < users2add.size(); ++i) {
+								//FIXME ineffective
+								if (users2add.get(i).getUser().getUser_id().equals(orgUser.getUser().getUser_id())) {
+									users2add.remove(i);
+									break;
+								}
+							}
+						} else {
+							getBean(OrganisationUserDao.class).delete(orgUser, WebSession.getUserId());
+						}
+						target.add(GroupUsersPanel.this);
+					}
+				}));
+			}
+		};
+		add(dataView).setOutputMarkupId(true);
+		add(new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(GroupUsersPanel.this);
+			}
+		});
+	}
+	
+	void update(long orgId) {
+		organisationId = orgId;
+		users2add.clear();
+	}
+	
+	List<Organisation_Users> getUsers2add() {
+		return users2add;
+	}
+	
+	private class OrgUserDataProvider extends SearchableDataProvider<Organisation_Users> {
+		private static final long serialVersionUID = 1L;
+
+		OrgUserDataProvider() {
+			super(OrganisationUserDao.class);
+		}
+		
+		protected OrganisationUserDao getDao() {
+			return (OrganisationUserDao)super.getDao();
+		}
+		
+		public long size() {
+			return users2add.size() + (search == null ? getDao().count(organisationId) : getDao().count(organisationId, search));
+		}
+		
+		public java.util.Iterator<? extends Organisation_Users> iterator(long first, long count) {
+			List<Organisation_Users> list = new ArrayList<Organisation_Users>();
+			list.addAll(users2add);
+			list.addAll(search == null && getSort() == null
+					? getDao().get(organisationId, (int)first, (int)count)
+					: getDao().get(organisationId, search, (int)first, (int)count, getSortStr()));
+			
+			return list.iterator();
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
new file mode 100644
index 0000000..08b0504
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function groupsInit() {
+				var documentHeight = $(document).height();
+                $('#adminForm').height(documentHeight-114);
+                $('#adminTable').height(documentHeight-144);
+			};
+		</script>
+	</wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<tr>
+						<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="164" /></th>
+						<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="165" /></th>
+					</tr>	
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">	
+						<tbody wicket:id="listContainer">	
+				    		<tr wicket:id="groupList">
+								<td class="two_column_layout_column1"><div class="two_column_layout_divcolumn1"><span wicket:id="organisation_id"></span></div></td>
+								<td class="two_column_layout_column2"><div class="two_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="170" /></legend>
+							<div class="formelement">
+								<label><wicket:message key="171" /></label><input type="text" wicket:id="name" />
+							</div>
+							<div class="formelement">
+								<label style="font-weight: bold;"><wicket:message key="178" /></label><input type="hidden" wicket:id="user2add" class="input"/>
+							</div>
+							<div class="formelement">
+								<div wicket:id="users"></div>
+							</div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
new file mode 100644
index 0000000..b0a159d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * Modify/ CRUD operations for {@link Organisation} and
+ * {@link Organisation_Users}
+ * 
+ * @author swagner
+ * 
+ */
+public class GroupsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	private GroupForm form;
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("groupsInit();");
+	}
+
+	public GroupsPanel(String id) {
+		super(id);
+		final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+        
+		//Adding the Group Form
+		form = new GroupForm("form", listContainer, new Organisation());
+        add(form);
+
+        //List view
+        SearchableDataView<Organisation> dataView = new SearchableDataView<Organisation>("groupList", new SearchableDataProvider<Organisation>(OrganisationDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<Organisation> item) {
+				final Organisation o = item.getModelObject();
+				item.add(new Label("organisation_id", "" + o.getOrganisation_id()));
+				item.add(new Label("name", "" + o.getName()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(o);
+						form.updateView(target);
+						target.add(listContainer);
+						target.appendJavaScript("groupsInit();");
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"
+						+ (o.getOrganisation_id().equals(form.getModelObject().getOrganisation_id()) ? " ui-state-active" : "")));
+			}
+		};
+
+		//Paging
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Organisation> container = new DataViewContainer<Organisation>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<Organisation>("orderById", "organisation_id", container))
+			.addLink(new OmOrderByBorder<Organisation>("orderByName", "name", container));
+		add(container.getLinks());
+		add(navigator);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java
new file mode 100644
index 0000000..a60da44
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import java.util.IllformedLocaleException;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+/**
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class AddLanguageForm extends Form<Void> {
+	private static final long serialVersionUID = 1L;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private String newLanguageISO;
+	
+	public AddLanguageForm(String id, final LangPanel langPanel) {
+		super(id);
+		add(feedback);
+		add(new RequiredTextField<String>("iso", new PropertyModel<String>(this, "newLanguageISO")).add(new IValidator<String>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void validate(IValidatable<String> s) {
+				try {
+					new Locale.Builder().setLanguageTag(s.getValue());
+				} catch (IllformedLocaleException e) {
+					s.error(new ValidationError("Invalid code, please use ")); //FIXME TODO add proper key
+					return;
+				}
+				Locale l = Locale.forLanguageTag(s.getValue());
+				for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+					if (e.getValue().equals(l)) {
+						s.error(new ValidationError("This code already added")); //FIXME TODO add proper key
+						break;
+					}
+				}
+			}
+		}));
+		add(new AjaxButton("add", Model.of(Application.getString(366L)), this) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				target.add(feedback);
+			}
+			
+			@Override
+			public void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				try {
+					LabelDao.add(Locale.forLanguageTag(newLanguageISO));
+					langPanel.getLangForm().updateLanguages(target);
+					target.appendJavaScript("$('#addLanguage').dialog('close');");
+				} catch (Exception e) {
+					error("Failed to add, " + e.getMessage()); //FIXME TODO add proper key
+					target.add(feedback);
+				}
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
new file mode 100644
index 0000000..65e655a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+
+
+/**
+ * Add/edit/delete {@link StringLabel}
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class LabelsForm extends AdminBaseForm<StringLabel> {
+	private static final long serialVersionUID = 1L;
+	private LangPanel panel;
+	private String key, value;
+
+	public LabelsForm(String id, LangPanel panel, StringLabel label) {
+		super(id, new CompoundPropertyModel<StringLabel>(label));
+		this.panel = panel;
+		key = label.getKey();
+		value = label.getValue();
+		
+		add(new RequiredTextField<String>("key"));
+		add(new TextArea<String>("value"));
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
+		key = null;
+		value = null;
+		setModelObject(new StringLabel(key, value));
+		target.add(this);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new StringLabel(key, value));
+		target.add(this);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		try {
+			getBean(LabelDao.class).update(panel.language.getValue(), getModelObject());
+		} catch (Exception e) {
+			error("Unexpected error while saving label:" + e.getMessage()); //TODO localize
+		}
+		hideNewRecord();
+		target.add(panel.listContainer);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		try {
+			getBean(LabelDao.class).delete(panel.language.getValue(), getModelObject());
+		} catch (Exception e) {
+			error("Unexpected error while deleting label:" + e.getMessage()); //TODO localize
+		}
+		target.add(panel.listContainer);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
new file mode 100644
index 0000000..bae3ae2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Modify the language selection, add/delete language
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class LangForm extends Form<Void> {
+	private static final long serialVersionUID = 1L;
+	private DropDownChoice<Map.Entry<Long, Locale>> languages;
+
+	private List<Map.Entry<Long, Locale>> getLanguages() {
+		List<Map.Entry<Long, Locale>> list = new ArrayList<Map.Entry<Long, Locale>>();
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			list.add(new AbstractMap.SimpleEntry<Long,Locale>(e.getKey(), e.getValue()));
+		}
+		return list;
+	}
+	
+	public void updateLanguages(AjaxRequestTarget target) {
+		languages.setChoices(getLanguages());
+		target.add(languages);
+	}
+
+	/**
+	 * Render Main
+	 * 
+	 * @param id
+	 * @param listContainer
+	 * @param language
+	 * @param langPanel
+	 */
+	public LangForm(String id, final WebMarkupContainer listContainer, final LangPanel langPanel) {
+		super(id);
+		setOutputMarkupId(true);
+
+		languages = new DropDownChoice<Map.Entry<Long, Locale>>("language"
+				, new PropertyModel<Map.Entry<Long, Locale>>(langPanel, "language")
+				, getLanguages()
+				, new IChoiceRenderer<Map.Entry<Long, Locale>>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public Object getDisplayValue(Map.Entry<Long, Locale> object) {
+						return object.getValue().getDisplayName();
+					}
+
+					@Override
+					public String getIdValue(Map.Entry<Long, Locale> object, int index) {
+						return "" + object.getKey();
+					}
+				});
+				
+		languages.add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		});
+		add(languages);
+
+		add(new WebMarkupContainer("deleteLangBtn").add(new AjaxEventBehavior("onclick"){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+				super.updateAjaxAttributes(attributes);
+				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
+			}
+			
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				LabelDao.delete(langPanel.language.getValue());
+				List<Map.Entry<Long, Locale>> langs = getLanguages();
+				langPanel.language = langs.isEmpty() ? null : langs.get(0);
+				languages.setChoices(langs);
+				target.add(languages, listContainer);
+			}
+		})); 
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
new file mode 100644
index 0000000..bfa09aa
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="feedback"></div>
+		<script type="text/javascript">
+			function labelsInit() {
+				$('#addLanguage').dialog({
+					closeOnEscape: true
+					, autoOpen: false
+					, resizable: false
+				});
+				var documentHeight = $(document).height();
+                $('#adminForm').height(documentHeight - 114);
+                $('#adminTable').height(documentHeight - 172);
+			};
+		</script>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<form wicket:id="langForm" class="addLanguagePanel">
+					<table>
+						<tr>
+							<td>
+								<div class="formNewButton" wicket:message="title:362" 
+									onclick="$('#addLanguage :text').val(''); $('#addLanguage').dialog('open');"><input type="button" title=""/></div>
+							</td>
+							<td>
+								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"><input type="button" title=""/></div>
+							</td>
+							<td>
+								<select wicket:id="language"></select>
+							</td>
+							<td>
+								<span wicket:id="export" class="btn"><wicket:message key="360"/></span>
+							</td>
+							<td>
+								<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;">
+									<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text"><wicket:message key="387"/></span><input type="file" accept="text/xml" wicket:id="fileInput"/></span>
+								</div>
+								<span wicket:id="progress">[progressbar]</span>
+							</td>
+						</tr>
+					</table>
+				</form>
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="351" /></th>
+							<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByValue"></span><wicket:message key="352" /></th>
+						</tr>
+					</thead>	
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer" >
+				    		<tr wicket:id="langList">
+								<td class="two_column_layout_column1"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="two_column_layout_column2"><div class="three_column_layout_divcolumn3"><span wicket:id="value"></span></div></td>
+							</tr>
+						</tbody>	
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="353" /></legend>
+	                         <div class="formelement">
+	                             <label><wicket:message key="354" /></label><input type="text" wicket:id="key"/>
+							</div>
+	                        <div class="formelement">
+	                             <label><wicket:message key="355" /></label><textarea wicket:id="value"></textarea>
+	                        </div> 
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+		<div id="addLanguage" wicket:message="title:364" style="display: none;">
+			<form wicket:id="addLangForm">
+				<div wicket:id="feedback"></div>
+				<table>
+					<tr>
+						<td><wicket:message key="1422" /></td>
+						<td><input type="text" wicket:id="iso"/></td>
+					</tr>
+					<tr>
+						<td align="right" colspan="2"><input type="submit" wicket:id="add"/></td>
+					</tr>
+				</table>
+			</form>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
new file mode 100644
index 0000000..c80a968
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.AbstractMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+/**
+ * Language Editor, add/insert/update {@link Fieldlanguagesvalues} and
+ * add/delete {@link FieldLanguage} contains several Forms and one list
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class LangPanel extends AdminPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(LangPanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");;
+	private LangForm langForm;
+	Map.Entry<Long, Locale> language;
+	private FileUploadField fileUploadField;
+	// Create feedback panels
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	public LangPanel(String id) {
+		super(id);
+
+		// Create feedback panels
+		add(feedback.setOutputMarkupId(true));
+		language = new AbstractMap.SimpleEntry<Long, Locale>(1L, Locale.ENGLISH);
+
+		final LabelsForm form = new LabelsForm("form", this, new StringLabel(null, null));
+		form.showNewRecord();
+		add(form);
+
+		final SearchableDataView<StringLabel> dataView = new SearchableDataView<StringLabel>(
+				"langList"
+				, new SearchableDataProvider<StringLabel>(LabelDao.class) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected LabelDao getDao() {
+						return (LabelDao)super.getDao();
+					}
+					
+					@Override
+					public long size() {
+						return getDao().count(language.getValue(), search);
+					}
+					
+					public Iterator<? extends StringLabel> iterator(long first, long count) {
+						return getDao().get(language.getValue(), search, (int)first, (int)count, getSort()).iterator();
+					}
+				}) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<StringLabel> item) {
+				final StringLabel fv = item.getModelObject();
+				item.add(new Label("name", fv.getKey()));
+				item.add(new Label("value", fv.getValue()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(fv);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("labelsInit();");
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content" + (fv.getKey().equals(form.getModelObject().getKey()) ? " ui-state-active" : "")));
+			}
+		};
+
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				dataView.modelChanging();
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<StringLabel> container = new DataViewContainer<StringLabel>(listContainer, dataView, navigator);
+		container
+			.addLink(new OmOrderByBorder<StringLabel>("orderByName", "key", container))
+			.addLink(new OmOrderByBorder<StringLabel>("orderByValue", "value", container));
+		add(container.getLinks());
+		add(navigator);
+		langForm = new LangForm("langForm", listContainer, this);
+		fileUploadField = new FileUploadField("fileInput");
+		langForm.add(fileUploadField);
+		langForm.add(new UploadProgressBar("progress", langForm, fileUploadField));
+		fileUploadField.add(new AjaxFormSubmitBehavior(langForm, "onchange") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FileUpload download = fileUploadField.getFileUpload();
+				try {
+					if (download == null || download.getInputStream() == null) {
+						feedback.error("File is empty");
+						return;
+					}
+					LabelDao.upload(language.getValue(), download.getInputStream());
+				} catch (Exception e) {
+					log.error("Exception on panel language editor import ", e);
+					feedback.error(e);
+				}
+
+				// repaint the feedback panel so that it is hidden
+				target.add(listContainer, feedback);
+			}
+		});
+
+		// Add a component to download a file without page refresh
+		final AjaxDownload download = new AjaxDownload();
+		langForm.add(download);
+
+		langForm.add(new AjaxButton("export"){
+			private static final long serialVersionUID = 1L;
+
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				final String name = LabelDao.getLabelFileName(language.getValue());
+				download.setFileName(name);
+				download.setResourceStream(new AbstractResourceStream() {
+					private static final long serialVersionUID = 1L;
+					private transient InputStream is;
+					
+					public InputStream getInputStream() throws ResourceStreamNotFoundException {
+						try {
+							is = Application.class.getResourceAsStream(name);
+							return is;
+						} catch (Exception e) {
+							throw new ResourceStreamNotFoundException(e);
+						}
+					}
+					
+					public void close() throws IOException {
+						if (is != null) {
+							is.close();
+							is = null;
+						}
+					}
+				});
+				download.initiate(target);
+
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+			}
+			
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+			}
+			
+		});
+		
+		add(langForm);
+		add(new AddLanguageForm("addLangForm", this));
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+
+	public LangForm getLangForm() {
+		return langForm;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
new file mode 100644
index 0000000..67f4584
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.ldaps;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Form components to insert/update/delete {@link LdapConfig}
+ * 
+ * @author swagner
+ * 
+ */
+public class LdapForm extends AdminBaseForm<LdapConfig> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer listContainer;
+
+	public LdapForm(String id, WebMarkupContainer listContainer,
+			final LdapConfig ldapConfig) {
+		super(id, new CompoundPropertyModel<LdapConfig>(ldapConfig));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+		
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1108))));
+		add(new CheckBox("isActive"));
+		add(forDatePattern("inserted", WEB_DATE_PATTERN));
+		add(new Label("insertedby.login"));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+		add(new Label("updatedby.login"));
+		add(new RequiredTextField<String>("configFileName").setLabel(Model.of(Application.getString(1115))));
+		add(new CheckBox("addDomainToUserName"));
+		add(new TextField<String>("domain"));
+		add(new TextArea<String>("comment"));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(LdapConfigDao.class).update(getModelObject(), WebSession.getUserId());
+		LdapConfig ldapConfig = Application.getBean(LdapConfigDao.class).get(getModelObject().getLdapConfigId());
+		this.setModelObject(ldapConfig);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("omLdapPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new LdapConfig());
+		target.add(this);
+		target.appendJavaScript("omLdapPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		LdapConfig ldapConfig = this.getModelObject();
+		if (ldapConfig.getLdapConfigId() <= 0) {
+			ldapConfig = Application.getBean(LdapConfigDao.class).get(
+					ldapConfig.getLdapConfigId());
+		} else {
+			ldapConfig = new LdapConfig();
+		}
+		this.setModelObject(ldapConfig);
+		target.add(this);
+		target.appendJavaScript("omLdapPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(LdapConfigDao.class).delete(
+				this.getModelObject(), WebSession.getUserId());
+		this.setModelObject(new LdapConfig());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("omLdapPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
new file mode 100644
index 0000000..0b769b7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omLdapPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="1104" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1105" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByFile"></span><wicket:message key="1106" /></th>
+						</tr>
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">
+				    		<tr wicket:id="ldapList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="ldapConfigId"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="configFileName"></span></div></td>
+							</tr>
+						</tbody>			
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1107" /></legend>
+							<div class="formelement">
+	                            <label><wicket:message key="1108" /></label><input type="text" wicket:id="name"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1109" /></label><input type="checkbox" class="formcheckbox" wicket:id="isActive"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1110" /></label><span wicket:id="inserted"/>
+	                        </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1111" /></label><span wicket:id="insertedby.login"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1112" /></label><span wicket:id="updated"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1113" /></label><span wicket:id="updatedby.login"/>
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1114" /></div>
+	                            <br/>
+				                <label><wicket:message key="1115" /></label><input type="text" wicket:id="configFileName"/>
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1116" /></div>
+	                            <br/>
+				                <label><wicket:message key="1117" /></label><input type="checkbox" class="formcheckbox" wicket:id="addDomainToUserName"/>
+				            </div>
+	                        <div class="formelement">
+	                            <label><wicket:message key="1118" /></label><input type="text" wicket:id="domain"/>
+				            </div>
+	                        <div class="formelement">
+	                            <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+				        </fieldset>
+				    </div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
new file mode 100644
index 0000000..f3b9c42
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.ldaps;
+
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * {@link AdminPanel} to list and modify {@link LdapConfig}
+ * 
+ * @author swagner
+ * 
+ */
+public class LdapsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private LdapForm form;
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omLdapPanelInit();");
+	}
+
+	public LdapsPanel(String id) {
+		super(id);
+		SearchableDataView<LdapConfig> dataView = new SearchableDataView<LdapConfig>("ldapList"
+			, new SearchableDataProvider<LdapConfig>(LdapConfigDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<LdapConfig> item) {
+				final LdapConfig lc = item.getModelObject();
+				item.add(new Label("ldapConfigId", "" + lc.getLdapConfigId()));
+				item.add(new Label("name", "" + lc.getName()));
+				item.add(new Label("configFileName", "" + lc.getConfigFileName()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(lc);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("omLdapPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (lc.getLdapConfigId() == form.getModelObject().getLdapConfigId() ? " ui-state-active" : "")));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = -1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<LdapConfig> container = new DataViewContainer<LdapConfig>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<LdapConfig>("orderById", "ldapConfigId", container))
+			.addLink(new OmOrderByBorder<LdapConfig>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<LdapConfig>("orderByFile", "configFileName", container));
+		add(container.getLinks());
+		add(navigator);
+		
+		form = new LdapForm("form", listContainer, new LdapConfig());
+		form.showNewRecord();
+        add(form);
+		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
new file mode 100644
index 0000000..111f45f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.oauth;
+
+import java.util.Arrays;
+
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.OAuthServer.RequestMethod;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+public class OAuthForm extends AdminBaseForm<OAuthServer> {
+	private static final long serialVersionUID = 1L;
+	private WebMarkupContainer listContainer;
+	private TextField<String> redirectUriText;
+
+	public OAuthForm(String id, WebMarkupContainer listContainer, OAuthServer server) {
+		super(id, new CompoundPropertyModel<OAuthServer>(server));
+		this.listContainer = listContainer;
+		setOutputMarkupId(true);
+		
+		add(new CheckBox("isEnabled"));
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1573))));
+		add(new TextField<String>("iconUrl").setLabel(Model.of(Application.getString(1575))));
+		add(new RequiredTextField<String>("clientId").setLabel(Model.of(Application.getString(1576))));
+		add(new RequiredTextField<String>("clientSecret").setLabel(Model.of(Application.getString(1577))));
+		add(redirectUriText = (TextField<String>) new TextField<String>("redirectUri", Model.of("")).setLabel(Model.of(Application.getString(1587))));
+		add(new RequiredTextField<String>("requestKeyUrl").setLabel(Model.of(Application.getString(1578))));
+		add(new RequiredTextField<String>("requestTokenUrl").setLabel(Model.of(Application.getString(1579))));
+		add(new RequiredTextField<String>("requestTokenAttributes").setLabel(Model.of(Application.getString(1586))));
+		add(new RequiredTextField<String>("requestInfoUrl").setLabel(Model.of(Application.getString(1580))));
+		add(new DropDownChoice<RequestMethod>("requestTokenMethod", Arrays.asList(RequestMethod.values()), new ChoiceRenderer<RequestMethod>("name", "name")));
+		add(new RequiredTextField<String>("loginParamName").setLabel(Model.of(Application.getString(1582))));
+		add(new RequiredTextField<String>("emailParamName").setLabel(Model.of(Application.getString(1583))));
+		add(new TextField<String>("firstnameParamName").setLabel(Model.of(Application.getString(1584))));
+		add(new TextField<String>("lastnameParamName").setLabel(Model.of(Application.getString(1585))));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+	
+	@Override
+	protected void onModelChanged() {
+		super.onModelChanged();
+		redirectUriText.setModelObject(SignInPage.getRedirectUri(getModelObject(), this));
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		OAuth2Dao oAuth2Dao = Application.getBean(OAuth2Dao.class);
+		oAuth2Dao.update(getModelObject(), WebSession.getUserId());
+		OAuthServer oauthServer = oAuth2Dao.get(getModelObject().getId());
+		this.setModelObject(oauthServer);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new OAuthServer());
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		OAuthServer server = this.getModelObject();
+		if (server.getId() <= 0) {
+			server = Application.getBean(OAuth2Dao.class).get(getModelObject().getId());
+		} else {
+			server = new OAuthServer();
+		}
+		this.setModelObject(server);
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(OAuth2Dao.class).delete(getModelObject(), WebSession.getUserId());
+		this.setModelObject(new OAuthServer());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}	
+	
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
new file mode 100644
index 0000000..4183829
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function oauthPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="1104" /></th>
+							<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1105" /></th>
+						</tr>
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">
+				    		<tr wicket:id="oauthServersList">
+								<td class="two_column_layout_column1"><div class="two_column_layout_divcolumn1"><span wicket:id="oauthServerId"></span></div></td>
+								<td class="two_column_layout_column2"><div class="two_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+							</tr>
+						</tbody>			
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1581" /></legend>
+							<div class="formelement">
+								<label><wicket:message key="1574" /></label><input type="checkbox" class="formcheckbox" wicket:id="isEnabled"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1573" /></label><input type="text" wicket:id="name"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1575" /></label><input type="text" wicket:id="iconUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1576" /></label><input type="text" wicket:id="clientId"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1577" /></label><input type="text" wicket:id="clientSecret"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1587" /></label><input type="text" readonly="readonly" wicket:id="redirectUri"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1578" /></label><input type="text" wicket:id="requestKeyUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1579" /></label><input type="text" wicket:id="requestTokenUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1586" /></label><input type="text" wicket:id="requestTokenAttributes"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1580" /></label><input type="text" wicket:id="requestInfoUrl"/>
+							</div>
+							<div class="formelement">
+								<label>Request method</label><select wicket:id="requestTokenMethod"></select>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1582" /></label><input type="text" wicket:id="loginParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1583" /></label><input type="text" wicket:id="emailParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1584" /></label><input type="text" wicket:id="firstnameParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1585" /></label><input type="text" wicket:id="lastnameParamName"/>
+							</div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java
new file mode 100644
index 0000000..b645db5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.oauth;
+
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+public class OAuthPanel extends AdminPanel {
+	private static final long serialVersionUID = -1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private OAuthForm form;
+
+	public OAuthPanel(String id) {
+		super(id);
+		SearchableDataView<OAuthServer> dataView = new SearchableDataView<OAuthServer>("oauthServersList",
+				new SearchableDataProvider<OAuthServer>(OAuth2Dao.class)) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<OAuthServer> item) {
+				final OAuthServer server = item.getModelObject();
+				item.add(new Label("oauthServerId", String.valueOf(server.getId())));
+				item.add(new Label("name", server.getName()));
+				item.add(new AjaxEventBehavior("onclick") {
+
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(server);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("oauthPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (server.getId().equals(form.getModelObject().getId()) ? " ui-state-active" : "")));
+			}
+			
+		};
+		
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = -1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<OAuthServer> container = new DataViewContainer<OAuthServer>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<OAuthServer>("orderById", "oauthServerId", container))
+			.addLink(new OmOrderByBorder<OAuthServer>("orderByName", "name", container));
+		add(container.getLinks());
+		add(navigator);
+		
+		form = new OAuthForm("form", listContainer, new OAuthServer());
+		form.showNewRecord();
+        add(form);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
new file mode 100644
index 0000000..0d439d7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -0,0 +1,392 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2Choice;
+import org.wicketstuff.select2.Select2MultiChoice;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+public class RoomForm extends AdminBaseForm<Room> {
+	private static final long serialVersionUID = 1L;
+	private final static List<Long> DROPDOWN_NUMBER_OF_PARTICIPANTS = Arrays.asList(2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 20L, 25L, 32L, 50L,
+			100L, 150L, 200L, 500L, 1000L);
+	private final WebMarkupContainer roomList;
+	private final TextField<String> pin;
+	private final WebMarkupContainer moderatorContainer = new WebMarkupContainer("moderatorContainer");
+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
+	private final ListView<Client> clients;
+	private List<Client> clientsInRoom = null;
+	private IModel<User> moderator2add = Model.of((User)null);
+	
+	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {
+		super(id, new CompoundPropertyModel<Room>(room));
+		this.roomList = roomList;
+		setOutputMarkupId(true);
+		RequiredTextField<String> name = new RequiredTextField<String>("name");
+		name.setLabel(new Model<String>(Application.getString(193)));
+		add(name);
+
+		add(new DropDownChoice<Long>("numberOfPartizipants", //
+				DROPDOWN_NUMBER_OF_PARTICIPANTS, //
+				new IChoiceRenderer<Long>() {
+					private static final long serialVersionUID = 1L;
+					public Object getDisplayValue(Long id) {
+						return id;
+					}
+					public String getIdValue(Long id, int index) {
+						return "" + id;
+					}
+				}));
+
+		add(new RoomTypeDropDown("roomtype").setRequired(true).setLabel(Model.of(Application.getString(194))));
+
+		add(new TextArea<String>("comment"));
+
+		add(new CheckBox("appointment"));
+		add(new CheckBox("ispublic"));
+
+		List<Organisation> orgList = Application.getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);
+		final List<RoomOrganisation> orgRooms = new ArrayList<RoomOrganisation>(orgList.size());
+		for (Organisation org : orgList) {
+			orgRooms.add(new RoomOrganisation(org, getModelObject()));
+		}
+		add(new Select2MultiChoice<RoomOrganisation>("roomOrganisations", null, new TextChoiceProvider<RoomOrganisation>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getDisplayText(RoomOrganisation choice) {
+				String name = choice.getOrganisation().getName();
+				return name == null ? "" : name;
+			}
+
+			@Override
+			protected Object getId(RoomOrganisation choice) {
+				return choice.getOrganisation().getOrganisation_id();
+			}
+
+			@Override
+			public void query(String term, int page, Response<RoomOrganisation> response) {
+				for (RoomOrganisation or : orgRooms) {
+					if (Strings.isEmpty(term) || (!Strings.isEmpty(term) && or.getOrganisation().getName().contains(term))) {
+						response.add(or);
+					}
+				}
+			}
+
+			@Override
+			public Collection<RoomOrganisation> toChoices(Collection<String> _ids) {
+				List<Long> ids = new ArrayList<Long>();
+				for (String id : _ids) {
+					ids.add(Long.parseLong(id));
+				}
+				List<RoomOrganisation> list = new ArrayList<RoomOrganisation>();
+				for (Organisation o : getBean(OrganisationDao.class).get(ids)) {
+					list.add(new RoomOrganisation(o, RoomForm.this.getModelObject()));
+				}
+				return list;
+			}
+		}));
+
+		add(new CheckBox("isDemoRoom"));
+		TextField<Integer> demoTime = new TextField<Integer>("demoTime");
+		demoTime.setLabel(new Model<String>(Application.getString(637)));
+		add(demoTime);
+		add(new CheckBox("allowUserQuestions"));
+		add(new CheckBox("isAudioOnly"));
+		add(new CheckBox("allowFontStyles"));
+		add(new CheckBox("isClosed"));
+		add(new TextField<String>("redirectURL"));
+		add(new CheckBox("waitForRecording"));
+		add(new CheckBox("allowRecording"));
+
+		add(new CheckBox("hideTopBar"));
+		add(new CheckBox("hideChat"));
+		add(new CheckBox("hideActivitiesAndActions"));
+		add(new CheckBox("hideFilesExplorer"));
+		add(new CheckBox("hideActionsMenu"));
+		add(new CheckBox("hideScreenSharing"));
+		add(new CheckBox("hideWhiteboard"));
+		add(new CheckBox("showMicrophoneStatus"));
+		add(new CheckBox("chatModerated"));
+		add(new CheckBox("chatOpened"));
+		add(new CheckBox("filesOpened"));
+		add(new CheckBox("autoVideoSelect"));	
+		
+		// Users in this Room 
+		clients = new ListView<Client>("clients", clientsInRoom) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<Client> item) {
+				Client client = item.getModelObject();
+				item.add(new Label("clientId", "" + client.getId()))
+					.add(new Label("clientLogin", "" + client.getUsername()))
+					.add(new WebMarkupContainer("clientDelete").add(new AjaxEventBehavior("onclick"){
+						private static final long serialVersionUID = 1L;
+	
+						@Override
+						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+							super.updateAjaxAttributes(attributes);
+							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
+						}
+						
+						@Override
+						protected void onEvent(AjaxRequestTarget target) {
+							Client c = item.getModelObject();
+							getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
+									, c.getServer() == null ? 0 : c.getServer().getId());
+							
+							updateClients(target);
+						}
+					}));
+			}
+		};
+		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
+		
+		// Moderators
+		final Select2Choice<User> moderatorChoice = new Select2Choice<User>("moderator2add", moderator2add, new AdminUserChoiceProvider() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void query(String term, int page, Response<User> response) {
+				response.addAll(getBean(UserDao.class).get(term, false, page * PAGE_SIZE, PAGE_SIZE));
+				response.setHasMore(PAGE_SIZE == response.getResults().size());
+			}
+
+			@Override
+			protected String getDisplayText(User choice) {
+				Address a = choice.getAdresses();
+				return String.format("\"%s %s\" <%s>", choice.getFirstname(), choice.getLastname(), a == null ? "" : a.getEmail());
+			}
+		});
+		add(moderatorChoice.add(new AjaxFormComponentUpdatingBehavior("change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				Room r = RoomForm.this.getModelObject();
+				User u = moderator2add.getObject();
+				boolean found = false;
+				if (u != null) {
+					if (r.getModerators() == null) {
+						r.setModerators(new ArrayList<RoomModerator>());
+					}
+					for (RoomModerator rm : r.getModerators()) {
+						if (rm.getUser().getUser_id().equals(u.getUser_id())) {
+							found = true;
+							break;
+						}
+					}
+					if (!found) {
+						RoomModerator rm = new RoomModerator();
+						rm.setRoomId(r.getRooms_id());
+						rm.setUser(u);
+						r.getModerators().add(0, rm);
+						moderator2add.setObject(null);
+						target.add(moderatorContainer, moderatorChoice);
+					}
+				}
+			}
+		}).setOutputMarkupId(true));
+		add(moderatorContainer.add(new ListView<RoomModerator>("moderators") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<RoomModerator> item) {
+				RoomModerator moderator = item.getModelObject();
+				Label name = new Label("uName", moderator.getUser().getFirstname() + " " + moderator.getUser().getLastname());
+				if (moderator.getRoomModeratorsId() == 0) {
+					name.add(AttributeAppender.append("class", "newItem"));
+				}
+				item.add(new CheckBox("isSuperModerator", new PropertyModel<Boolean>(moderator, "isSuperModerator")))
+					.add(new Label("userId", "" + moderator.getUser().getUser_id()))
+					.add(name)
+					.add(new Label("email", moderator.getUser().getAdresses().getEmail()))
+					.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("onclick"){
+						private static final long serialVersionUID = 1L;
+	
+						@Override
+						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+							super.updateAjaxAttributes(attributes);
+							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
+						}
+						
+						@Override
+						protected void onEvent(AjaxRequestTarget target) {
+							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
+							target.add(moderatorContainer);
+						}
+					}));
+			}
+		}).setOutputMarkupId(true));
+
+        add(new CheckBox("isModeratedRoom"));
+
+		add(new TextField<String>("confno").setEnabled(false));
+		add(pin = new TextField<String>("pin"));
+		pin.setEnabled(room.isSipEnabled());
+		add(new TextField<String>("ownerId").setEnabled(false));
+		add(new AjaxCheckBox("sipEnabled") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				updateView(target);
+			}
+		}.setOutputMarkupId(true));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+
+	void updateClients(AjaxRequestTarget target) {
+		long roomId = (getModelObject().getRooms_id() != null ? getModelObject().getRooms_id() : 0);  
+		final List<Client> clientsInRoom = Application.getBean(ISessionManager.class).getClientListByRoom(roomId);
+		clients.setDefaultModelObject(clientsInRoom);
+		target.add(clientsContainer);
+	}
+	
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Room r = getModelObject();
+		boolean newRoom = r.getRooms_id() == null;
+		r = getBean(RoomDao.class).update(r, getUserId());
+		if (newRoom) {
+			for (RoomModerator rm : r.getModerators()) {
+				rm.setRoomId(r.getRooms_id());
+			}
+			// FIXME double update
+			getBean(RoomDao.class).update(getModelObject(), getUserId());
+		}
+		hideNewRecord();
+		updateView(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		setModelObject(new Room());
+		updateView(target);
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Room r = getModelObject();
+		if (r.getRooms_id() != null) {
+			r = getBean(RoomDao.class).get(r.getRooms_id());
+		} else {
+			r = new Room();
+		}
+		setModelObject(r);
+		updateView(target);
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(RoomDao.class).delete(getModelObject(), getUserId());
+		target.add(roomList);
+		setModelObject(new Room());
+		updateView(target);
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	public void updateView(AjaxRequestTarget target) {
+		target.add(this);
+		target.add(roomList);
+		target.add(pin.setEnabled(getModelObject().isSipEnabled()));
+		updateClients(target);
+		target.appendJavaScript("omRoomPanelInit();");
+	}
+	
+	@Override
+	protected void onDetach() {
+		moderator2add.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
new file mode 100644
index 0000000..928a138
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+	   <script type="text/javascript">
+           function omRoomPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable rooms">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="189" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByPublic"></span><wicket:message key="190" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">		
+				    		<tr wicket:id="roomList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="rooms_id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="ispublic"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						
+						<!-- General -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="187" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="193" /></label><input type="text" wicket:id="name" />
+							</div>
+							<div class="formelement">
+                                <label><wicket:message key="482" /></label><select wicket:id="numberOfPartizipants"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="194" /></label><select wicket:id="roomtype"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="196" /></label><textarea style="width: 200px; height: 100px;" wicket:id="comment"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="620" /></label><input type="checkbox" class="formcheckbox" wicket:id="appointment" />
+                            </div>
+				        </fieldset>
+				        
+				        <!-- Organisations -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="191" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="195" /></label><input type="checkbox" class="formcheckbox" wicket:id="ispublic" />
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="828" /></div>
+				                <label><wicket:message key="191" /></label><input type="hidden" class="input" wicket:id="roomOrganisations" style="max-height: 80px"/>
+				            </div>
+				        </fieldset>
+				        
+				        <!-- Limitations -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="830" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="636" /></label><input type="checkbox" class="formcheckbox" wicket:id="isDemoRoom" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="637" /></label><input type="text" wicket:id="demoTime" />
+                            </div>
+						</fieldset>
+						
+						<!-- Rights -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="881" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="879" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowUserQuestions" />
+				            </div>
+				            <div class="formelement">
+                                <wicket:message key="880" />
+				                <br/>
+				                <label><wicket:message key="1076" /></label><input type="checkbox" class="formcheckbox" wicket:id="isAudioOnly" />
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1077" /></div>
+				                <label><wicket:message key="1531" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowFontStyles" />
+				            </div>
+				            <div class="formelement">
+					            <div class="info-text"><wicket:message key="1101" /></div>
+				                <label><wicket:message key="1099" /></label><input type="checkbox" class="formcheckbox" wicket:id="isClosed" />
+				            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1100" /></label><input type="text" wicket:id="redirectURL" />
+							</div>
+							<div class="formelement">
+							    <div class="info-text"><wicket:message key="1102" /></div>
+                                <br/>
+				                <label><wicket:message key="1356" /></label><input type="checkbox" class="formcheckbox" wicket:id="waitForRecording" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1355" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowRecording" />
+				            </div>
+						</fieldset>
+						
+						<!-- Room Layout options -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1443" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="1357" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideTopBar" />
+				            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1436" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideChat" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1437" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideActivitiesAndActions" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1438" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideFilesExplorer" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1439" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideActionsMenu" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1440" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideScreenSharing" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1441" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideWhiteboard" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1442" /></label><input type="checkbox" class="formcheckbox" wicket:id="showMicrophoneStatus" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1513" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatModerated" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1515" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatOpened" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1516" /></label><input type="checkbox" class="formcheckbox" wicket:id="filesOpened" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1526" /></label><input type="checkbox" class="formcheckbox" wicket:id="autoVideoSelect" />
+				            </div>
+						</fieldset>
+						
+						<!-- Users in this Room -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="587" /></legend>
+							<table class="adminListTable">
+								<thead>
+									<tr>
+										<th class="three_column_layout_column1 ui-widget-header"><wicket:message key="588" /></th>
+										<th class="three_column_layout_column2 ui-widget-header"><wicket:message key="589" /></th>
+										<th class="three_column_layout_column3 ui-widget-header"><wicket:message key="590" /></th>
+									</tr>	
+								</thead>
+							</table>
+							<div class="tableWrapperSmall" id="adminTableSmall">
+								<table class="adminListTable">
+									<tbody wicket:id="clientsContainer">		
+							    		<tr wicket:id="clients">
+											<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="clientId"></span></div></td>
+											<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="clientLogin"></span></div></td>
+											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"><input/></div></td>
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</fieldset>
+						
+						<!-- Default moderators -->
+						<fieldset class="ui-widget-content">
+                            <div class="formelement">
+				            	<div class="info-text"><wicket:message key="823" /></div>
+				                <label><wicket:message key="640" /></label><input type="checkbox" class="formcheckbox" wicket:id="isModeratedRoom" />
+				            </div>
+	                        <div class="formelement">
+					            <label><wicket:message key="816" /></label><input type="hidden" wicket:id="moderator2add" class="input"/>
+				            </div>
+				            <div class="formelement" wicket:id="moderatorContainer">
+								<table class="adminListTableSmall">
+									<thead>
+										<tr>
+											<th class="three_column_layout_column1 ui-widget-header" style="overflow: hidden;" wicket:message="title:817"><wicket:message key="817" /></th>
+											<th class="three_column_layout_column2 ui-widget-header"><wicket:message key="818" /></th>
+											<th class="three_column_layout_column3 ui-widget-header"><wicket:message key="819" /></th>
+											<th class="three_column_layout_column4 ui-widget-header"><wicket:message key="820" /></th>
+											<th class="three_column_layout_column5 ui-widget-header"><wicket:message key="827" /></th>
+										</tr>	
+									</thead>
+								</table>
+								<div class="tableWrapperSmall" id="adminTableSmall">
+									<table class="adminListTableSmall">
+										<tbody>		
+								    		<tr wicket:id="moderators">
+												<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><input type="checkbox" wicket:id="isSuperModerator"/></div></td>
+												<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="userId"></span></div></td>
+												<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="uName"></span></div></td>
+												<td class="three_column_layout_column4"><div class="three_column_layout_divcolumn4" style="overflow: hidden;"><span wicket:id="email"></span></div></td>
+						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"><input/></div></div></td>
+											</tr>
+										</tbody>
+									</table>
+								</div>
+							</div>
+						</fieldset>
+					    <!--SIP Settings -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1001" /></legend>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1002" /></div>
+                                <br/>
+                            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1003" /></label><input type="text" wicket:id="confno" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1004" /></label><input type="text" wicket:id="pin" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1308" /></label><input type="text" wicket:id="ownerId" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1538" /></label><input type="checkbox" class="formcheckbox" wicket:id="sipEnabled" />
+				            </div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
new file mode 100644
index 0000000..a3b2650
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+public class RoomsPanel extends AdminPanel {
+	private static final long serialVersionUID = -1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private RoomForm form;
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omRoomPanelInit();");
+	}
+
+	public RoomsPanel(String id) {
+		super(id);
+		SearchableDataView<Room> dataView = new SearchableDataView<Room>("roomList", new SearchableDataProvider<Room>(RoomDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Room> item) {
+				Room room = item.getModelObject();
+				final long roomId = room.getRooms_id();
+				item.add(new Label("rooms_id", "" + room.getRooms_id()));
+				item.add(new Label("name", "" + room.getName()));
+				item.add(new Label("ispublic", "" + room.getIspublic()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(getBean(RoomDao.class).get(roomId));
+						form.updateView(target);
+						target.add(form, listContainer);
+						target.appendJavaScript("omRoomPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (room.getRooms_id().equals(form.getModelObject().getRooms_id()) ? " ui-state-active" : "")));
+			}
+		};
+		
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = -1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Room> container = new DataViewContainer<Room>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<Room>("orderById", "rooms_id", container))
+			.addLink(new OmOrderByBorder<Room>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<Room>("orderByPublic", "ispublic", container));
+		add(container.getLinks());
+		add(navigator);
+
+        add(form = new RoomForm("form", listContainer, new Room()));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java b/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
new file mode 100644
index 0000000..2c4fa4d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.servers;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Form component to insert/update/delete {@link Server}
+ * 
+ * @author swagner
+ * 
+ */
+public class ServerForm extends AdminBaseForm<Server> {
+	private final WebMarkupContainer listContainer;
+	private static final long serialVersionUID = 1L;
+
+	public ServerForm(String id, WebMarkupContainer listContainer, final Server server) {
+		super(id, new CompoundPropertyModel<Server>(server));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1500))));
+		add(new CheckBox("active"));
+		add(new RequiredTextField<String>("address").setLabel(Model.of(Application.getString(1501))));
+		add(new TextField<Integer>("port"));
+		add(new TextField<String>("user"));
+		add(new TextField<String>("pass"));
+		add(new TextField<String>("webapp"));
+		add(new TextField<String>("protocol"));
+		add(forDatePattern("lastPing", WEB_DATE_PATTERN));
+		//add(new Label("pingRunning"));
+		add(forDatePattern("inserted", WEB_DATE_PATTERN));
+		add(new Label("insertedby.login"));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+		add(new Label("updatedby.login"));
+		add(new TextArea<String>("comment"));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(ServerDao.class).update(getModelObject(), WebSession.getUserId());
+		Server server = Application.getBean(ServerDao.class).get(getModelObject().getId());
+		setModelObject(server);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("omServerPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		Server s = new Server();
+		s.setWebapp("openmeetings");
+		s.setProtocol("http");
+		setModelObject(s);
+		target.add(this);
+		target.appendJavaScript("omServerPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Server server = getModelObject();
+		if (server.getId() > 0) {
+			server = Application.getBean(ServerDao.class).get(server.getId());
+		} else {
+			server = new Server();
+		}
+		setModelObject(server);
+		target.add(this);
+		target.appendJavaScript("omServerPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(ServerDao.class).delete(getModelObject(), WebSession.getUserId());
+		this.setModelObject(new Server());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("omServerPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
new file mode 100644
index 0000000..483e56e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omServerPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1500" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByAddress"></span><wicket:message key="1501" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">	
+				    		<tr wicket:id="serverList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="address"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1502" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="1500" /></label><input type="text" wicket:id="name"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1525" /></label><input type="checkbox" class="formcheckbox" wicket:id="active" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1501" /></label><input type="text" wicket:id="address"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1519" /></label><input type="text" wicket:id="port"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1520" /></label><input type="text" wicket:id="user"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1521" /></label><input type="text" wicket:id="pass"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1522" /></label><input type="text" wicket:id="webapp"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1523" /></label><input type="text" wicket:id="protocol"/>
+				            </div>
+				            <div class="formelement">
+					            <div class="info-text"><wicket:message key="1518" /></div>
+	                                <br/>
+                                <label><wicket:message key="1517" /></label><span wicket:id="lastPing"/>
+                                <!-- br/>
+                                <label><wicket:message key="1524" /></label><span wicket:id="pingRunning"/-->
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1110" /></label><span wicket:id="inserted"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1111" /></label><span wicket:id="insertedby.login"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1112" /></label><span wicket:id="updated"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1113" /></label><span wicket:id="updatedby.login"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+				        </fieldset>
+				    </div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
new file mode 100644
index 0000000..07c0206
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.servers;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * Form component with list and form to manipulate {@link Server}
+ * 
+ * @author swagner
+ * 
+ */
+public class ServersPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private ServerForm form;
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omServerPanelInit();");
+	}
+
+	public ServersPanel(String id) {
+		super(id);
+		SearchableDataView<Server> dataView = new SearchableDataView<Server>("serverList",
+				new SearchableDataProvider<Server>(ServerDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Server> item) {
+				final Server server = item.getModelObject();
+				item.add(new Label("id", "" + server.getId()));
+				item.add(new Label("name", "" + server.getName()));
+				item.add(new Label("address", "" + server.getAddress()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(server);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("omServerPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (server.getId().equals(form.getModelObject().getId()) ? " ui-state-active" : "")));
+			}
+		};
+		
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Server> container = new DataViewContainer<Server>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<Server>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<Server>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<Server>("orderByAddress", "address", container));
+		add(container.getLinks());
+		add(navigator);
+		
+		form = new ServerForm("form", listContainer, new Server());
+		form.showNewRecord();
+        add(form);
+		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html
new file mode 100644
index 0000000..0711634
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="buttons"></div>
+	<div class="scrollcontent" id="adminForm">
+		<fieldset class="ui-widget-content">
+			<legend class="ui-widget-header">
+				<wicket:message key="143" />
+			</legend>
+			<div class="formelement">
+				<label><wicket:message key="132" /></label><input type="text" wicket:id="login" />
+			</div>
+			<form wicket:id="general"></form>
+			<div class="formelement">
+				<label><wicket:message key="45" /></label><select wicket:id="type"></select>
+			</div>
+			<div class="formelement" wicket:id="domain">
+				<label><wicket:message key="1118" /></label><select wicket:id="domainId"></select>
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1308" /></label><span wicket:id="ownerId"></span>
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1110" /></label><span wicket:id="starttime" />
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1112" /></label><span wicket:id="updatetime" />
+			</div>
+			<div class="formelement">
+				<div class="info-text">
+					<wicket:message key="1149" />
+				</div>
+				<br /> <label><wicket:message key="1148" /></label><input class="formcheckbox" type="checkbox"
+					wicket:id="forceTimeZoneCheck" />
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="881" /></label><input type="hidden" class="input" wicket:id="rights" />
+			</div>
+		</fieldset>
+		<fieldset class="ui-widget-content">
+			<legend class="ui-widget-header">
+				<wicket:message key="1159" />
+			</legend>
+			<form wicket:id="comunity"></form>
+		</fieldset>
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java
new file mode 100644
index 0000000..ddd884a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java
@@ -0,0 +1,300 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.users;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.data.user.EmailManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ComunityUserForm;
+import org.apache.openmeetings.web.common.GeneralUserForm;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2MultiChoice;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+/**
+ * CRUD operations in form for {@link User}
+ * 
+ * @author swagner
+ * 
+ */
+public class UserForm extends AdminBaseForm<User> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(UserForm.class, webAppRootKey);
+	private final WebMarkupContainer listContainer;
+	private final WebMarkupContainer domain = new WebMarkupContainer("domain");
+	private GeneralUserForm generalForm;
+	private final RequiredTextField<String> login = new RequiredTextField<String>("login");
+	private final MessageDialog warning;
+	private final DropDownChoice<Long> domainId = new DropDownChoice<Long>("domainId");
+
+	public UserForm(String id, WebMarkupContainer listContainer, final User user, MessageDialog warning) {
+		super(id, new CompoundPropertyModel<User>(user));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+		this.warning = warning;
+		// Add form fields
+		addFormFields();
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+
+	@Override
+	protected void onModelChanged() {
+		super.onModelChanged();
+		generalForm.updateModelObject(getModelObject());
+	}
+	
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		User u = getModelObject();
+		try {
+			boolean isNew = (u.getUser_id() == null);
+			u = getBean(UserDao.class).update(u, generalForm.getPasswordField().getConvertedInput(), getUserId());
+			boolean sendEmailAtRegister = (1 == getBean(ConfigurationDao.class).getConfValue("sendEmailAtRegister", Integer.class, "0"));
+			if (isNew && sendEmailAtRegister) {
+				String link = getBean(ConfigurationDao.class).getBaseUrl();
+				String sendMail = getBean(EmailManager.class).sendMail(login.getValue(),
+						generalForm.getPasswordField().getConvertedInput(), generalForm.getEmail(), link, false, null);
+				if (!sendMail.equals("success")) {
+					throw new Exception("Mail for new user is not sent");
+				}
+			}
+		} catch (Exception e) {
+			// FIXME update feedback with the error details
+			log.error("[onSaveSubmit]: ", e);
+		}
+		setModelObject(u);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("omUserPanelInit();");
+		if (u.getOrganisation_users().isEmpty()) {
+			warning.open(target);
+		}
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		UserDao usersDaoImpl = getBean(UserDao.class);
+		setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())));
+		update(target);
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		User user = getModelObject();
+		if (user.getUser_id() != null) {
+			user = getBean(UserDao.class).get(user.getUser_id());
+		} else {
+			user = getBean(UserDao.class).getNewUserInstance(null);
+		}
+		setModelObject(user);
+		update(target);
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		UserDao usersDaoImpl = getBean(UserDao.class);
+		usersDaoImpl.delete(getModelObject(), getUserId());
+		setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())));
+		update(target);
+	}
+
+	/**
+	 * Add the fields to the form
+	 */
+	private void addFormFields() {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		login.setLabel(Model.of(Application.getString(132)));
+		add(login.add(minimumLength(getMinLoginLength(cfgDao))));
+
+		add(generalForm = new GeneralUserForm("general", getModel(), true));
+
+		add(new DropDownChoice<Type>("type", Arrays.asList(Type.values())).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				updateDomain(target);
+			}
+		}));
+		update(null);
+		add(domain.add(domainId).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));
+		add(new Label("ownerId"));
+		add(forDatePattern("starttime", WEB_DATE_PATTERN));
+		add(forDatePattern("updatetime", WEB_DATE_PATTERN));
+
+		add(new CheckBox("forceTimeZoneCheck"));
+
+		add(new Select2MultiChoice<Right>("rights", null, new TextChoiceProvider<Right>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getDisplayText(Right choice) {
+				return choice.name();
+			}
+
+			@Override
+			protected Object getId(Right choice) {
+				return choice.name();
+			}
+
+			@Override
+			public void query(String term, int page, Response<Right> response) {
+				for (Right r : Right.values()) {
+					if (r.name().contains(term)) {
+						response.add(r);
+					}
+				}
+			}
+
+			@Override
+			public Collection<Right> toChoices(Collection<String> ids) {
+				Collection<Right> rights = new ArrayList<User.Right>(ids.size());
+				for (String id : ids) {
+					rights.add(Right.valueOf(id));
+				}
+				return rights;
+			}
+		}));
+		add(new ComunityUserForm("comunity", getModel()));
+	}
+
+	public void updateDomain(AjaxRequestTarget target) {
+		User u = getModelObject();
+		final Map<Long, String> values = new Hashtable<Long, String>();
+		List<Long> ids = new ArrayList<Long>();
+		if (u.getType() == Type.ldap) {
+			for (LdapConfig c : getBean(LdapConfigDao.class).getActive()) {
+				ids.add(c.getLdapConfigId());
+				values.put(c.getLdapConfigId(), c.getName());
+			}
+		}
+		if (u.getType() == Type.oauth) {
+			for (OAuthServer s : getBean(OAuth2Dao.class).getActive()) {
+				ids.add(s.getId());
+				values.put(s.getId(), s.getName());
+			}
+		}
+		domainId.setChoices(ids);
+		domainId.setChoiceRenderer(new IChoiceRenderer<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			public Object getDisplayValue(Long object) {
+				return values.get(object);
+			}
+
+			public String getIdValue(Long object, int index) {
+				return "" + object;
+			}
+		});
+		domain.setVisible(u.getType() == Type.ldap || u.getType() == Type.oauth);
+		if (target != null) {
+			target.add(domain);
+		}
+	}
+	
+	public void update(AjaxRequestTarget target) {
+		updateDomain(target);
+		if (target != null) {
+			target.add(this, listContainer);
+			target.appendJavaScript("omUserPanelInit();");
+		}
+	}
+	
+	@Override
+	protected void onValidate() {
+		User u = getModelObject();
+		if(!getBean(UserDao.class).checkLogin(login.getConvertedInput(), u.getType(), u.getDomainId(), u.getUser_id())) {
+			error(Application.getString(105));
+		}
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		//ignore validation errors
+		onNewSubmit(target, form);
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		//ignore validation errors
+		onDeleteSubmit(target, form);
+	}
+
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
new file mode 100644
index 0000000..b44077b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript">
+		function omUserPanelInit() {
+			var documentHeight = $(document).height();
+			$('#adminForm').height(documentHeight - 114);
+			$('#adminTable').height(documentHeight - 144);
+		}
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div class="adminPanel">
+		<div class="adminPanelColumnTable">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable">
+				<thead>
+					<tr>
+						<th class="four_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span> <wicket:message key="146" /></th>
+						<th class="four_column_layout_column2 ui-widget-header"><span wicket:id="orderByLogin"></span> <wicket:message key="147" /></th>
+						<th class="four_column_layout_column3 ui-widget-header"><span wicket:id="orderByFirstName"></span> <wicket:message key="148" /></th>
+						<th class="four_column_layout_column4 ui-widget-header"><span wicket:id="orderByLastName"></span> <wicket:message key="149" /></th>
+					</tr>
+				</thead>
+			</table>
+			<div class="tableWrapper" id="adminTable">
+				<table class="adminListTable">
+					<tbody wicket:id="listContainer">
+						<tr wicket:id="userList">
+							<td class="four_column_layout_column1"><div
+									class="four_column_layout_divcolumn1">
+									<span wicket:id="userId"></span>
+								</div></td>
+							<td class="four_column_layout_column2"><div
+									class="four_column_layout_divcolumn2">
+									<span wicket:id="login"></span>
+								</div></td>
+							<td class="four_column_layout_column3"><div
+									class="four_column_layout_divcolumn3">
+									<span wicket:id="firstName"></span>
+								</div></td>
+							<td class="four_column_layout_column4"><div
+									class="four_column_layout_divcolumn4">
+									<span wicket:id="lastName"></span>
+								</div></td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="adminPanelColumnForm">
+			<form wicket:id="form" class="adminForm"/>
+		</div>
+	</div>
+	<div wicket:id="warning"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
new file mode 100644
index 0000000..90b4cf5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.users;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class UsersPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private final MessageDialog warning = new MessageDialog("warning", Application.getString(797), Application.getString(343), DialogButtons.OK, DialogIcon.WARN) {
+		private static final long serialVersionUID = 1L;
+
+		public void onClose(AjaxRequestTarget target, DialogButton button) {
+		}
+	};
+
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omUserPanelInit();");
+	}
+
+	private UserForm form;
+
+	public UsersPanel(String id) {
+		super(id);
+
+		final SearchableDataView<User> dataView = new SearchableDataView<User>("userList", new SearchableDataProvider<User>(UserDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<User> item) {
+				User u = item.getModelObject();
+				final long userId = u.getUser_id();
+				item.add(new Label("userId", "" + u.getUser_id()));
+				item.add(new Label("login", u.getLogin()));
+				item.add(new Label("firstName", u.getFirstname()));
+				item.add(new Label("lastName", u.getLastname()));
+				item.add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(getBean(UserDao.class).get(userId));
+						form.hideNewRecord();
+						form.update(target);
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"
+						+ (u.getUser_id().equals(form.getModelObject().getUser_id()) ? " ui-state-active" : "")));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<User> container = new DataViewContainer<User>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<User>("orderById", "user_id", container))
+			.addLink(new OmOrderByBorder<User>("orderByLogin", "login", container))
+			.addLink(new OmOrderByBorder<User>("orderByFirstName", "firstname", container))
+			.addLink(new OmOrderByBorder<User>("orderByLastName", "lastname", container));
+		add(container.getLinks());
+		add(navigator);
+
+		UserDao usersDaoImpl = getBean(UserDao.class);
+		form = new UserForm("form", listContainer, usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())), warning);
+		form.showNewRecord();
+		add(form, warning);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application.java b/src/web/java/org/apache/openmeetings/web/app/Application.java
new file mode 100644
index 0000000..979abe0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+import static org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE;
+import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.servlet.ServletContext;
+
+import org.apache.commons.collections.MapIterator;
+import org.apache.commons.collections.keyvalue.MultiKey;
+import org.apache.commons.collections.map.MultiKeyMap;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.pages.ActivatePage;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.pages.NotInitedPage;
+import org.apache.openmeetings.web.pages.RecordingPage;
+import org.apache.openmeetings.web.pages.ResetPage;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.openmeetings.web.pages.install.InstallWizardPage;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
+import org.apache.openmeetings.web.util.AviRecordingResourceReference;
+import org.apache.openmeetings.web.util.FlvRecordingResourceReference;
+import org.apache.openmeetings.web.util.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.openmeetings.web.util.UserDashboardPersister;
+import org.apache.wicket.Localizer;
+import org.apache.wicket.Page;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
+import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
+import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
+import org.apache.wicket.core.request.mapper.MountedMapper;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.info.PageComponentInfo;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
+import org.apache.wicket.util.tester.WicketTester;
+import org.slf4j.Logger;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+
+import ro.fortsoft.wicket.dashboard.WidgetRegistry;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+import ro.fortsoft.wicket.dashboard.web.DashboardContextInjector;
+import ro.fortsoft.wicket.dashboard.web.DashboardSettings;
+
+public class Application extends AuthenticatedWebApplication {
+	private static final Logger log = getLogger(Application.class, webAppRootKey);
+	private static boolean isInstalled;
+	private static MultiKeyMap ONLINE_USERS = new MultiKeyMap(); 
+	private static Map<String, WebClient> INVALID_SESSIONS = new ConcurrentHashMap<String, WebClient>();
+	private DashboardContext dashboardContext;
+	private static Set<Long> STRINGS_WITH_APP = new HashSet<Long>(); //FIXME need to be removed
+	private static String appName;
+	static {
+		STRINGS_WITH_APP.addAll(Arrays.asList(499L, 500L, 506L, 511L, 512L, 513L, 517L, 532L, 622L, 804L
+				, 909L, 952L, 978L, 981L, 984L, 989L, 990L, 999L, 1151L, 1155L, 1157L, 1158L, 1194L));
+	}
+	
+	@Override
+	protected void init() {
+		appName = super.getName();
+		getSecuritySettings().setAuthenticationStrategy(new OmAuthenticationStrategy());
+		
+		//Add custom resource loader at the beginning, so it will be checked first in the 
+		//chain of Resource Loaders, if not found it will search in Wicket's internal 
+		//Resource Loader for a the property key
+		getResourceSettings().getStringResourceLoaders().add(0, new LabelResourceLoader());
+		
+		super.init();
+		
+		// register some widgets
+		dashboardContext = new DashboardContext();
+		dashboardContext.setDashboardPersister(new UserDashboardPersister());
+		WidgetRegistry widgetRegistry = dashboardContext.getWidgetRegistry();
+		widgetRegistry.registerWidget(new MyRoomsWidgetDescriptor());
+		widgetRegistry.registerWidget(new WelcomeWidgetDescriptor());
+		widgetRegistry.registerWidget(new StartWidgetDescriptor());
+		widgetRegistry.registerWidget(new RssWidgetDescriptor());
+		// add dashboard context injector
+		getComponentInstantiationListeners().add(new DashboardContextInjector(dashboardContext));
+		DashboardSettings dashboardSettings = DashboardSettings.get();
+		dashboardSettings.setIncludeJQuery(false);
+		dashboardSettings.setIncludeJQueryUI(false);
+		
+		getRootRequestMapperAsCompound().add(new NoVersionMapper(getHomePage()));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("notinited", NotInitedPage.class));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("swf", SwfPage.class));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("signin", getSignInPageClass()));
+		mountPage("install", InstallWizardPage.class);
+		mountPage("activate", ActivatePage.class);
+		mountPage("reset", ResetPage.class);
+		mountPage("/recording/${hash}", RecordingPage.class);
+		mountResource("/recordings/avi/${id}", new AviRecordingResourceReference());
+		mountResource("/recordings/flv/${id}", new FlvRecordingResourceReference());
+		mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());
+		mountResource("/recordings/ogg/${id}", new OggRecordingResourceReference());
+		mountResource("/recordings/jpg/${id}", new JpgRecordingResourceReference()); //should be in sync with VideoPlayer
+	}
+
+	private static class NoVersionMapper extends MountedMapper {
+		public NoVersionMapper(final Class<? extends IRequestablePage> pageClass) {
+			this("/", pageClass);
+		}
+		
+		public NoVersionMapper(String mountPath, final Class<? extends IRequestablePage> pageClass) {
+			super(mountPath, pageClass, new PageParametersEncoder());
+		}
+
+		@Override
+		protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
+			//Does nothing
+		}
+		
+		@Override
+		public Url mapHandler(IRequestHandler requestHandler) {
+			if (requestHandler instanceof ListenerInterfaceRequestHandler || requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) {
+				return null;
+			} else {
+				return super.mapHandler(requestHandler);
+			}
+		}
+	}
+
+	public static OmAuthenticationStrategy getAuthenticationStrategy() {
+		return (OmAuthenticationStrategy)get().getSecuritySettings().getAuthenticationStrategy();
+	}
+	
+	@Override
+	public Class<? extends Page> getHomePage() {
+		return MainPage.class;
+	}
+
+	@Override
+	protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
+		return WebSession.class;
+	}
+
+	@Override
+	public Class<? extends WebPage> getSignInPageClass() {
+		return SignInPage.class;
+	}
+	
+	public static Application get() {
+		return (Application) WebApplication.get();
+	}
+	
+	public static DashboardContext getDashboardContext() {
+		return get().dashboardContext;
+	}
+	
+	public synchronized static void addOnlineUser(WebClient client) {
+		try {
+			ONLINE_USERS.put(client.getUserId(), client.getSessionId(), client);
+		} catch (Exception err) {
+			log.error("[addOnlineUser]", err);
+		}
+	}
+	
+	public synchronized static void removeOnlineUser(WebClient c) {
+		try {
+			if (c != null) {
+				ONLINE_USERS.remove(c.getUserId(), c.getSessionId());
+			}
+		} catch (Exception err) {
+			log.error("[removeOnlineUser]", err);
+		}
+	}
+	
+	public static boolean isUserOnline(Long userId) {
+        MapIterator it = ONLINE_USERS.mapIterator();
+        boolean isUserOnline = false;
+        while (it.hasNext()) {
+            MultiKey multi = (MultiKey) it.next();
+            if (multi.size() > 0 && userId.equals(multi.getKey(0))){
+            	isUserOnline = true;
+            	break;
+            }
+        } 
+		return isUserOnline;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<WebClient> getClients() {
+		return new ArrayList<WebClient>(ONLINE_USERS.values());
+	}
+
+	public static int getClientsSize() {
+		return ONLINE_USERS.size();
+	}
+	
+	public static WebClient getClientByKeys(Long userId, String sessionId) {
+		return (WebClient) ONLINE_USERS.get(userId, sessionId);
+	}
+	
+	public static void invalidateClient(WebClient client) {
+		if (!INVALID_SESSIONS.containsKey(client.getSessionId())) {
+			INVALID_SESSIONS.put(client.getSessionId(), client);
+			removeOnlineUser(client);
+		}
+	}
+	
+	public static boolean isInvaldSession(String sessionId) {
+		return sessionId == null ? false : INVALID_SESSIONS.containsKey(sessionId);
+	}
+	
+	public static void removeInvalidSession(String sessionId) {
+		if (INVALID_SESSIONS.containsKey(sessionId)){
+			INVALID_SESSIONS.remove(sessionId);
+		}
+	}
+	
+	//TODO need more safe way FIXME
+	public <T> T _getBean(Class<T> clazz) {
+		WebApplicationContext wac = getWebApplicationContext(getServletContext());
+		return wac == null ? null : wac.getBean(clazz);
+	}
+
+	public static String getString(long id) {
+		return getString(id, WebSession.getLanguage());
+	}
+
+	public static String getString(long id, final long languageId) {
+		Locale loc = LabelDao.languages.get(languageId);
+		if (loc == null) {
+			loc = WebSession.exists() ? WebSession.get().getLocale() : Locale.ENGLISH;
+		}
+		return getString(id, loc);
+	}
+	
+	public static String getString(long id, final Locale loc) {
+		return getString(id, loc, false);
+	}
+	
+	public static String getString(long id, final Locale loc, boolean noReplace) {
+		if (!exists()) {
+			ThreadContext.setApplication(Application.get(appName));
+		}
+		Localizer l = get().getResourceSettings().getLocalizer();
+		String value = l.getStringIgnoreSettings("" + id, null, null, loc, null, "[Missing]");
+		if (!noReplace && STRINGS_WITH_APP.contains(id)) {
+			final MessageFormat format = new MessageFormat(value, loc);
+			value = format.format(new Object[]{getBean(ConfigurationDao.class).getAppName()});
+		}
+		if (!noReplace && RuntimeConfigurationType.DEVELOPMENT == get().getConfigurationType()) {
+			value += String.format(" [%s]", id);
+		}
+		return value;
+	}
+
+	public static boolean isInstalled() {
+		boolean result = isInstalled;
+		if (!isInstalled) {
+			if (InitializationContainer.initComplete) {
+				//TODO can also check crypt class here
+				isInstalled = result = get()._getBean(UserDao.class).count() > 0;
+			}
+		}
+		return result;
+	}
+	
+	public static <T> T getBean(Class<T> clazz) {
+		if (InitializationContainer.initComplete) {
+			if (!isInstalled()) {
+				throw new RestartResponseException(InstallWizardPage.class);
+			}
+			return get()._getBean(clazz);
+		} else {
+			throw new RestartResponseException(NotInitedPage.class);
+		}
+	}
+	
+	public static WicketTester getWicketTester() {
+		return getWicketTester(-1);
+	}
+	
+	public static WicketTester getWicketTester(long langId) {
+		Application app = new Application();
+        
+		WicketTester tester = new WicketTester(app);
+		ServletContext sc = app.getServletContext();
+        XmlWebApplicationContext xmlContext = new XmlWebApplicationContext();
+        xmlContext.setConfigLocation("classpath:openmeetings-applicationContext.xml");
+        xmlContext.setServletContext(sc);
+        xmlContext.refresh();
+        sc.setAttribute(ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, xmlContext);
+        if (langId > 0) {
+        	WebSession.get().setLanguage(langId);
+        }
+        InitializationContainer.initComplete = true;
+        return tester;
+	}
+	
+	public static void destroy(WicketTester tester) {
+		if (tester != null) {
+			ServletContext sc = tester.getServletContext();
+			try {
+				((XmlWebApplicationContext)sc.getAttribute(ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).close();
+			} catch (Exception e) {
+				log.error("Unexpected error while destroying XmlWebApplicationContext", e);
+			}
+			tester.destroy();
+		}
+	}
+	
+	public static String getAppName() {
+		return appName;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml
new file mode 100644
index 0000000..6eb56db
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -0,0 +1,1879 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conference</entry>
+  <entry key="2">Meeting</entry>
+  <entry key="3">Events</entry>
+  <entry key="4">Settings</entry>
+  <entry key="5">Profile</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Record</entry>
+  <entry key="9">No file available</entry>
+  <entry key="10">Record by teacher</entry>
+  <entry key="11">Connected users</entry>
+  <entry key="12">Start a conference</entry>
+  <entry key="13">My name</entry>
+  <entry key="14">Video conference</entry>
+  <entry key="15">File upload</entry>
+  <entry key="16">Refresh list</entry>
+  <entry key="17">To main file</entry>
+  <entry key="18">new poll</entry>
+  <entry key="19">A new poll for the conference</entry>
+  <entry key="20">Question</entry>
+  <entry key="21">Type of poll</entry>
+  <entry key="22">Create</entry>
+  <entry key="23">Each connected user receives a message with the new poll</entry>
+  <entry key="24">Create a poll</entry>
+  <entry key="25">Cancel</entry>
+  <entry key="26">Yes/No</entry>
+  <entry key="27">Numeric 1-10</entry>
+  <entry key="28">Poll</entry>
+  <entry key="29">You must be a moderator to create a question</entry>
+  <entry key="30">Your vote has been registered</entry>
+  <entry key="31">Your have already voted in this poll</entry>
+  <entry key="32">Vote</entry>
+  <entry key="33">Your response</entry>
+  <entry key="34">Yes</entry>
+  <entry key="35">No</entry>
+  <entry key="36">wants to know</entry>
+  <entry key="37">Poll results</entry>
+  <entry key="38">Question</entry>
+  <entry key="39">Results</entry>
+  <entry key="40">Answers</entry>
+  <entry key="41">No polls have been started</entry>
+  <entry key="42">Vote</entry>
+  <entry key="43">Meeting (max 4 seats)</entry>
+  <entry key="44">Conference (max 50 seats)</entry>
+  <entry key="45">Type</entry>
+  <entry key="46">Other seats</entry>
+  <entry key="47">Already chosen</entry>
+  <entry key="48">enter</entry>
+  <entry key="49">The moderator has left the meeting</entry>
+  <entry key="50">System information</entry>
+  <entry key="51">Choose device</entry>
+  <entry key="52">Choose webcam</entry>
+  <entry key="53">Choose micro</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Cancel</entry>
+  <entry key="56">You need to reconnect</entry>
+  <entry key="57">Edit setup</entry>
+  <entry key="58">Course</entry>
+  <entry key="59">Language</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Cancel</entry>
+  <entry key="62">Clear whiteboard</entry>
+  <entry key="63">Do you want to empty the whiteboard before a new picture is added?</entry>
+  <entry key="64">Don't ask again</entry>
+  <entry key="65">No</entry>
+  <entry key="66">Edit setup</entry>
+  <entry key="67">Confirm request to empty the whiteboard</entry>
+  <entry key="68">User info</entry>
+  <entry key="69">Clear whiteboard</entry>
+  <entry key="70">Undo</entry>
+  <entry key="71">Redo</entry>
+  <entry key="72">Select an object</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Paint</entry>
+  <entry key="75">Draw line</entry>
+  <entry key="76">Draw underline</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Arrow</entry>
+  <entry key="80">Delete</entry>
+  <entry key="81">Apply to be a moderator</entry>
+  <entry key="82">Apply</entry>
+  <entry key="83">Cancel</entry>
+  <entry key="84">I have a question</entry>
+  <entry key="85">Close</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">bold</entry>
+  <entry key="88">WAITING</entry>
+  <entry key="89">A user has applied to be a moderator, you can either grant them only access to the whiteboard or completely switch the moderation role. User:</entry>
+  <entry key="90">Accept</entry>
+  <entry key="91">Reject</entry>
+  <entry key="92">Cancel</entry>
+  <entry key="93">Sending the request to the following users</entry>
+  <entry key="94">Accepted</entry>
+  <entry key="95">Rejected</entry>
+  <entry key="96">Change moderator</entry>
+  <entry key="97">You are not the moderator of this course</entry>
+  <entry key="98">Moderator</entry>
+  <entry key="99">This room is full</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Close</entry>
+  <entry key="102">input data error</entry>
+  <entry key="103">Password and or login is too short</entry>
+  <entry key="104">Password and or login is too short</entry>
+  <entry key="105">The username is already used</entry>
+  <entry key="106">The mail address is already registered</entry>
+  <entry key="107">System error please contact the administrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Username or mail address</entry>
+  <entry key="110">Password</entry>
+  <entry key="111">Language</entry>
+  <entry key="112">Sign in</entry>
+  <entry key="113">Sign up</entry>
+  <entry key="114">Username</entry>
+  <entry key="115">Password</entry>
+  <entry key="116">Re-enter password</entry>
+  <entry key="117">First name</entry>
+  <entry key="118">Surname</entry>
+  <entry key="119">Email address</entry>
+  <entry key="120">Country</entry>
+  <entry key="121">Register</entry>
+  <entry key="122">Cancel</entry>
+  <entry key="123">Not a member?</entry>
+  <entry key="124">Home</entry>
+  <entry key="125">Users</entry>
+  <entry key="126">Groups</entry>
+  <entry key="127">Usergroups</entry>
+  <entry key="128">Conference rooms</entry>
+  <entry key="129">Public</entry>
+  <entry key="130">Usergroups</entry>
+  <entry key="131">Enter</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Re-enter password</entry>
+  <entry key="135">Title/first name</entry>
+  <entry key="136">Last name</entry>
+  <entry key="137">Email address</entry>
+  <entry key="138">Birthday</entry>
+  <entry key="139">Street/No</entry>
+  <entry key="140">Post code/Town</entry>
+  <entry key="141">Country</entry>
+  <entry key="142">Address</entry>
+  <entry key="143">User details</entry>
+  <entry key="144">Save</entry>
+  <entry key="145">Save</entry>
+  <entry key="146">User ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">First name</entry>
+  <entry key="149">Last name</entry>
+  <entry key="150">Show next</entry>
+  <entry key="151">Show previous</entry>
+  <entry key="152">Delete record</entry>
+  <entry key="153">Cancel</entry>
+  <entry key="154">Delete</entry>
+  <entry key="155">New record</entry>
+  <entry key="156">Refresh record</entry>
+  <entry key="157">Delete record</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Disabled</entry>
+  <entry key="160">Enabled</entry>
+  <entry key="161">Usergroup</entry>
+  <entry key="162">Calendar</entry>
+  <entry key="163">Close</entry>
+  <entry key="164">Usergroup ID</entry>
+  <entry key="165">Name</entry>
+  <entry key="166">User</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">User level</entry>
+  <entry key="170">Usergroup</entry>
+  <entry key="171">Name</entry>
+  <entry key="172">Add usergroup</entry>
+  <entry key="173">Add usergroup</entry>
+  <entry key="174">Cancel</entry>
+  <entry key="175">Add</entry>
+  <entry key="176">Remove usergroup</entry>
+  <entry key="177">User</entry>
+  <entry key="178">Add user</entry>
+  <entry key="179">Delete user</entry>
+  <entry key="180">Add user to usergroup</entry>
+  <entry key="181">Search user</entry>
+  <entry key="182">Search</entry>
+  <entry key="183">User</entry>
+  <entry key="184">Usergroup</entry>
+  <entry key="185">Enter</entry>
+  <entry key="186">Conference rooms</entry>
+  <entry key="187">Conference rooms</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Name</entry>
+  <entry key="190">Public</entry>
+  <entry key="191">Usergroups</entry>
+  <entry key="192">Conference rooms</entry>
+  <entry key="193">Name</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Public</entry>
+  <entry key="196">Comment</entry>
+  <entry key="197">Save and export</entry>
+  <entry key="198">Load</entry>
+  <entry key="199">Save as</entry>
+  <entry key="200">Filename</entry>
+  <entry key="201">Filename</entry>
+  <entry key="202">Cancel</entry>
+  <entry key="203">Save</entry>
+  <entry key="204">Error</entry>
+  <entry key="205">Loading</entry>
+  <entry key="206">Objects loaded</entry>
+  <entry key="207">Synchronizing, please wait</entry>
+  <entry key="208">Loading image</entry>
+  <entry key="209">Synchronizing, please wait</entry>
+  <entry key="210">Clear whiteboard</entry>
+  <entry key="211">Clear whiteboard, all data on the whiteboard will be lost</entry>
+  <entry key="212">Confirm before loading a file</entry>
+  <entry key="213">Send invitation</entry>
+  <entry key="214">Send invitation</entry>
+  <entry key="215">Subject</entry>
+  <entry key="216">Recipient</entry>
+  <entry key="217">Message</entry>
+  <entry key="218">Send</entry>
+  <entry key="219">Cancel</entry>
+  <entry key="220">Send</entry>
+  <entry key="221">User details</entry>
+  <entry key="222">Your nickname for this conference</entry>
+  <entry key="223">Nick</entry>
+  <entry key="224">First name</entry>
+  <entry key="225">Last name</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Language</entry>
+  <entry key="228">Enter</entry>
+  <entry key="229">Loading</entry>
+  <entry key="230">Loading data, please wait</entry>
+  <entry key="231">Wrong password</entry>
+  <entry key="232">Please enter two identical passwords</entry>
+  <entry key="233">Wrong email</entry>
+  <entry key="234">You have entered an invalid email address</entry>
+  <entry key="235">Registration complete</entry>
+  <entry key="236">Your account has been created. You can now login.</entry>
+  <entry key="237">Someone is already sharing their screen</entry>
+  <entry key="238">Sharing forbidden</entry>
+  <entry key="239">Share/record screen</entry>
+  <entry key="240">Unable to synchronize the screen. If this warning is shown often you should ask the moderator to reduce the quality.</entry>
+  <entry key="241">Screen of:</entry>
+  <entry key="242">Paint</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Members</entry>
+  <entry key="247">Download original document</entry>
+  <entry key="248">Download PDF document</entry>
+  <entry key="249">Load presentation to whiteboard</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Drag this object</entry>
+  <entry key="252">Resize this object</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Go to first page</entry>
+  <entry key="256">Go to previous page</entry>
+  <entry key="257">Go to next page</entry>
+  <entry key="258">Go to last page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Mr</entry>
+  <entry key="262">Ms</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Key</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Key</entry>
+  <entry key="268">Last update</entry>
+  <entry key="269">Updated by</entry>
+  <entry key="270">Comment</entry>
+  <entry key="271">Value</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Users</entry>
+  <entry key="274">Delete user from usergroup</entry>
+  <entry key="275">D</entry>
+  <entry key="276">This user is already a member of this usergroup</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Quick links</entry>
+  <entry key="279">Go to conference</entry>
+  <entry key="280">Goto auditorium</entry>
+  <entry key="281">Help and support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Report a bug</entry>
+  <entry key="285">more</entry>
+  <entry key="286">Project website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User mailing list (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember login</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">Dashboard</entry>
+  <entry key="291">Calendar</entry>
+  <entry key="292">My scheduled events</entry>
+  <entry key="293">Public meetings</entry>
+  <entry key="294">Private meetings</entry>
+  <entry key="295">Public events</entry>
+  <entry key="296">Private events</entry>
+  <entry key="297">Public content</entry>
+  <entry key="298">Private content</entry>
+  <entry key="299">Personal content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">I have a question</entry>
+  <entry key="303">Polls</entry>
+  <entry key="304">Choose a file</entry>
+  <entry key="305">Settings</entry>
+  <entry key="306">Camera and mic settings</entry>
+  <entry key="307">Whiteboard settings</entry>
+  <entry key="308">Exit</entry>
+  <entry key="309">Back to rooms</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Forgotten your password?</entry>
+  <entry key="312">Reset password</entry>
+  <entry key="313">Using email address</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Your email address</entry>
+  <entry key="316">Your login</entry>
+  <entry key="317">Send email with a reset link</entry>
+  <entry key="318">No such email address was found. Make sure you entered the same email address you used to create your account.</entry>
+  <entry key="319">Please enter either an email address or a user name</entry>
+  <entry key="320">There is no user connected to this username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">No user found</entry>
+  <entry key="325">Reset your password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Change password</entry>
+  <entry key="328">New password</entry>
+  <entry key="329">Re-enter password</entry>
+  <entry key="330">The passwords you entered weren't identical</entry>
+  <entry key="331">Password and or username too short, required minimum length for user name / password are:</entry>
+  <entry key="332">Password set. You can now login.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unknown error. Please report this to the administrator.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">Invalid password</entry>
+  <entry key="337">Successfully logged out</entry>
+  <entry key="338">Registration disabled</entry>
+  <entry key="339">Invalid email address</entry>
+  <entry key="340">Duplicate file name, please enter another</entry>
+  <entry key="341">File name too short</entry>
+  <entry key="342">Could not save the address</entry>
+  <entry key="343">User added but you need to assign this user to an usergroup, otherwise they won't be able to log in</entry>
+  <entry key="344">New record</entry>
+  <entry key="345">No field found for the ID</entry>
+  <entry key="346">No label found</entry>
+  <entry key="347">Admin authorization required</entry>
+  <entry key="348">Language editor</entry>
+  <entry key="349">Language</entry>
+  <entry key="350">Label ID</entry>
+  <entry key="351">Label name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Field values</entry>
+  <entry key="354">Label name</entry>
+  <entry key="355">Label value</entry>
+  <entry key="356">Label ID</entry>
+  <entry key="357">You have deleted the label</entry>
+  <entry key="358">Invalid label ID</entry>
+  <entry key="359">You cannot delete this field</entry>
+  <entry key="360">Export</entry>
+  <entry key="361">You need to logout for any changes to update</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">Delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">goto first</entry>
+  <entry key="369">goto previous</entry>
+  <entry key="370">goto next</entry>
+  <entry key="371">goto last</entry>
+  <entry key="372">user speaks (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">turn sound on/off</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Your settings</entry>
+  <entry key="376">Hello</entry>
+  <entry key="377">Edit your profile</entry>
+  <entry key="378">Unread messages</entry>
+  <entry key="379">Upload new image</entry>
+  <entry key="380">Export user data</entry>
+  <entry key="381">All usergroups must already exist</entry>
+  <entry key="382">Start export</entry>
+  <entry key="383">By usergroup</entry>
+  <entry key="384">Start export</entry>
+  <entry key="385">Import user data</entry>
+  <entry key="386">Choose users.xml</entry>
+  <entry key="387">Import</entry>
+  <entry key="388">Export to XML</entry>
+  <entry key="389">Choose a language file to import</entry>
+  <entry key="390">Import</entry>
+  <entry key="391">Save as</entry>
+  <entry key="392">Name</entry>
+  <entry key="393">Comment</entry>
+  <entry key="394">Save</entry>
+  <entry key="395">Recordings</entry>
+  <entry key="396">Recordings viewer</entry>
+  <entry key="397">Recordings of public and private rooms</entry>
+  <entry key="398">Users</entry>
+  <entry key="399">Joined</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users in this room</entry>
+  <entry key="402">Refresh</entry>
+  <entry key="403">This room is full</entry>
+  <entry key="404">Click on a room to get the room details</entry>
+  <entry key="405">Chat with the users in this room</entry>
+  <entry key="406">Room</entry>
+  <entry key="407">Users in this room</entry>
+  <entry key="408">since</entry>
+  <entry key="409">Play recording</entry>
+  <entry key="410">Length</entry>
+  <entry key="411">Date</entry>
+  <entry key="412">Recorder mode</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">Play/Pause</entry>
+  <entry key="415">Record this meeting</entry>
+  <entry key="416">Stop recording</entry>
+  <entry key="417">Recording</entry>
+  <entry key="418">Someone is already recording this meeting</entry>
+  <entry key="419">Recording. User:</entry>
+  <entry key="420">Cancel</entry>
+  <entry key="421">Recording will be canceled and not saved</entry>
+  <entry key="422">resume</entry>
+  <entry key="423">Close this window and resume recording</entry>
+  <entry key="424">Change line colour</entry>
+  <entry key="425">Choose colour</entry>
+  <entry key="426">Disable/enable line colour</entry>
+  <entry key="427">Change fill colour</entry>
+  <entry key="428">Disable/enable fill colour</entry>
+  <entry key="429">Change line width</entry>
+  <entry key="430">Close</entry>
+  <entry key="431">Change font size</entry>
+  <entry key="432">Delete recording</entry>
+  <entry key="433">Guest</entry>
+  <entry key="434">By:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Room</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">Cancel</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Delete server chat log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Send message</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose published devices</entry>
+  <entry key="448">Audio and video</entry>
+  <entry key="449">Audio only</entry>
+  <entry key="450">Video only</entry>
+  <entry key="451">No audio/video (static image)</entry>
+  <entry key="452">No audio/video from your PC will be published, your profile picture will be shown</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Monday</entry>
+  <entry key="461">Tuesday</entry>
+  <entry key="462">Wednesday</entry>
+  <entry key="463">Thursday</entry>
+  <entry key="464">Friday</entry>
+  <entry key="465">Saturday</entry>
+  <entry key="466">Sunday</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendar week</entry>
+  <entry key="469">January</entry>
+  <entry key="470">February</entry>
+  <entry key="471">March</entry>
+  <entry key="472">April</entry>
+  <entry key="473">May</entry>
+  <entry key="474">June</entry>
+  <entry key="475">July</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">October</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Calendar</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Show layout settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | height</entry>
+  <entry key="486">Video container</entry>
+  <entry key="487">Moderation container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard container</entry>
+  <entry key="490">Enabled</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | height</entry>
+  <entry key="493">Files, chat, participants container</entry>
+  <entry key="494">Enabled</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Width | height</entry>
+  <entry key="497">The moderator has left the room. No one is presenting at the moment.</entry>
+  <entry key="498">There is no moderator in this room, but there are some participants. You have to apply to be the moderator or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message from user:</entry>
+  <entry key="502">Message:</entry>
+  <entry key="503">Click this link to participate in the conference [The link may only work for a certain period.]:</entry>
+  <entry key="504">Click here to enter room</entry>
+  <entry key="505">If you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} Account Details</entry>
+  <entry key="507">Your account details</entry>
+  <entry key="508">Login</entry>
+  <entry key="509">Pass</entry>
+  <entry key="510">Email</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">Your {0} account details</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password</entry>
+  <entry key="515">Click here to enter a new password</entry>
+  <entry key="516">If you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} password reset</entry>
+  <entry key="518">Please enter a valid date, for example 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Please enter a valid email address, for example name@mail.com</entry>
+  <entry key="520">Please enter a float-number, for example 1.00</entry>
+  <entry key="521">Please enter an integer number, for example 100</entry>
+  <entry key="522">Please enter a valid phone number, for example ++49 0123 123123</entry>
+  <entry key="523">Please enter a valid time, for example 12:23 (hh:mm)</entry>
+  <entry key="524">Password protected</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Validity period</entry>
+  <entry key="527">Endless</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">One time</entry>
+  <entry key="530">Valid from</entry>
+  <entry key="531">Valid to</entry>
+  <entry key="532">Invitation to {0}</entry>
+  <entry key="533">No invitation available for this invitation code</entry>
+  <entry key="534">This invitation was already used</entry>
+  <entry key="535">The invitation code is invalid</entry>
+  <entry key="536">Password</entry>
+  <entry key="537">Check password</entry>
+  <entry key="538">Invalid password</entry>
+  <entry key="539">Audio/video</entry>
+  <entry key="540">Synchronize audio/video</entry>
+  <entry key="541">Login was correct, but the session is not active or stored on the server</entry>
+  <entry key="542">The session ID is not logged in or has no admin rights. The SOAP gateway needs a user with admin rights to embed new users.</entry>
+  <entry key="543">This session has no remoteuser-data connected. You did not call the SOAP gateway before accessing the application or you are using a wrong session ID</entry>
+  <entry key="544">The recorder is currently beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change transparency</entry>
+  <entry key="554">Open browser</entry>
+  <entry key="555">Close browser</entry>
+  <entry key="556">The connection to the server has been lost</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Notification type</entry>
+  <entry key="566">Category</entry>
+  <entry key="567">Repetition</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title</entry>
+  <entry key="573">Comment</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment end is after of appointment start</entry>
+  <entry key="579">Please insert a title</entry>
+  <entry key="580">Right to left</entry>
+  <entry key="581">Activate this if you write in a right to left language</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded meetings or events</entry>
+  <entry key="584">Meeting - make a conference with between 4 and 25 users&lt;br/&gt;and everybody will have audio and video access</entry>
+  <entry key="585">Event - make a conference with up to 200 participants&lt;br/&gt;but only the moderator will have audio and video access</entry>
+  <entry key="586">Create users, rooms, usergroups&lt;br/&gt; and change configuration</entry>
+  <entry key="587">Users in this room</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading document. Please wait until all clients have been synchronized.</entry>
+  <entry key="592">Upload complete, converting document</entry>
+  <entry key="593">Start upload</entry>
+  <entry key="594">Upload and import dialog. Please select a file.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select file</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Stream ID</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Unenroll user</entry>
+  <entry key="604">Unenroll user</entry>
+  <entry key="605">Do you really want to unenroll this client from the room?</entry>
+  <entry key="606">Your session has been closed by an administrator or moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the moderator of this room</entry>
+  <entry key="609">User is allowed to draw on the whiteboard</entry>
+  <entry key="610">(Re) Start audio/video or change device settings</entry>
+  <entry key="611">Allow this user to draw on the whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple usergroups. Please choose one for this session.</entry>
+  <entry key="618">This room is full</entry>
+  <entry key="619">Room type</entry>
+  <entry key="620">Appointment room</entry>
+  <entry key="621">Server time</entry>
+  <entry key="622">{0} - reminder</entry>
+  <entry key="623">Message from user:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the conference [The link does only work 15 minutes before the meeting starts.]:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">Add external</entry>
+  <entry key="630">First name</entry>
+  <entry key="631">Surname</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo room</entry>
+  <entry key="637">Demo time</entry>
+  <entry key="638">Meeting timer</entry>
+  <entry key="639">This room is a demo room. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait until the moderator has entered the room</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Incoming screen sharing</entry>
+  <entry key="644">There is a new screen sharing incoming from the User:</entry>
+  <entry key="645">Start sharing</entry>
+  <entry key="646">Add new meeting</entry>
+  <entry key="647">Meeting room</entry>
+  <entry key="648">Event room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate users</entry>
+  <entry key="651">Moderate rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this user to be a moderator of that organisation?</entry>
+  <entry key="654">Please choose an organisation before you try to add a user to it</entry>
+  <entry key="655">Organisation - moderator</entry>
+  <entry key="656">Do you really want to delete this user from the organisation?</entry>
+  <entry key="657">This user is a moderator</entry>
+  <entry key="658">This user is not a moderator</entry>
+  <entry key="659">Do you not want this user to be a moderator of this organisation?</entry>
+  <entry key="660">Add or delete users or rooms within your organisation</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organisation?</entry>
+  <entry key="663">You cannot delete your own user</entry>
+  <entry key="664">This method needs an adminstration account to be invoked</entry>
+  <entry key="665">There was no session associated with this ID</entry>
+  <entry key="666">This is an administrator or moderator account. You can only edit this account through the administration panel.</entry>
+  <entry key="667">To complete your registration please click on the following link</entry>
+  <entry key="668">Click to verify your email</entry>
+  <entry key="669">No user was found for this hash</entry>
+  <entry key="670">This user is already activated</entry>
+  <entry key="671">You successfully activated your account</entry>
+  <entry key="672">Login now</entry>
+  <entry key="673">Your account is not activated. Please use the link in the email you received during registration.</entry>
+  <entry key="674">You have successfully signed up. An email with a verification code will be sent to your mailbox.</entry>
+  <entry key="675">Remove moderator role from this user</entry>
+  <entry key="676">Grant moderator rights to this user</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Please choose any user on the list to make them a moderator or to grant them access to the whiteboard or video</entry>
+  <entry key="681">This user is already a moderator</entry>
+  <entry key="682">You cannot remove the moderator rights for yourself</entry>
+  <entry key="683">Allow this user to publish their audio/video</entry>
+  <entry key="684">Remove audio/video of this user</entry>
+  <entry key="685">I have a question</entry>
+  <entry key="686">I would like to draw on the whiteboard</entry>
+  <entry key="687">I would like to share my audio/video</entry>
+  <entry key="688">You are the moderator of this room</entry>
+  <entry key="689">You are allowed to draw on the whiteboard</entry>
+  <entry key="690">You are allowed to share your audio/video</entry>
+  <entry key="691">Message to moderator</entry>
+  <entry key="692">The user</entry>
+  <entry key="693">would like to ask a question</entry>
+  <entry key="694">would like to draw on whiteboard</entry>
+  <entry key="695">would like to share his audio/video</entry>
+  <entry key="696">You have to wait until a moderator enters the room</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload file</entry>
+  <entry key="703">Add folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (drag and drop item here)</entry>
+  <entry key="706">My files (home drive)</entry>
+  <entry key="707">Room files (public drive)</entry>
+  <entry key="708">Add file</entry>
+  <entry key="709">Add folder</entry>
+  <entry key="710">Delete folder</entry>
+  <entry key="711">Edit name</entry>
+  <entry key="712">New folder</entry>
+  <entry key="713">Are you sure you want to delete this item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open document</entry>
+  <entry key="717">Show all files (tree view)</entry>
+  <entry key="718">Close document</entry>
+  <entry key="719">Delete file</entry>
+  <entry key="720">You are not allowed to draw anything on the whiteboard</entry>
+  <entry key="721">Document properties</entry>
+  <entry key="722">Start Java</entry>
+  <entry key="723">Start Flash</entry>
+  <entry key="724">A user wants to share their screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your desktop</entry>
+  <entry key="726">Sharing session</entry>
+  <entry key="727">You are already sharing your desktop</entry>
+  <entry key="728">Desktop viewer</entry>
+  <entry key="729">Stop sharing</entry>
+  <entry key="730">Desktop sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start sharing</entry>
+  <entry key="733">Pause sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The sharer has finished this session</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start Java</entry>
+  <entry key="745">If you close this session completely you will not be able to restart the viewer for this session</entry>
+  <entry key="746">Confirm closing viewer session</entry>
+  <entry key="747">Share screen</entry>
+  <entry key="748">Record session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Please use Internet Explorer and not Firefox for Windows</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as the default website to your profile</entry>
+  <entry key="757">Test setup</entry>
+  <entry key="758">Use audio or video setup before you enter a room by recording for a few seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without audio or video can still use the whiteboard, share their desktop or write chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-meter</entry>
+  <entry key="768">Press start</entry>
+  <entry key="769">Start conference</entry>
+  <entry key="770">Start event</entry>
+  <entry key="771">Choose room</entry>
+  <entry key="772">Check setup</entry>
+  <entry key="773">Start conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start recording test</entry>
+  <entry key="776">Do not show audio/video test before entering a conference</entry>
+  <entry key="777">Public rooms</entry>
+  <entry key="778">Public rooms are accessible for all users</entry>
+  <entry key="779">Private rooms</entry>
+  <entry key="780">Private rooms are only accessible for users of the same usergroup</entry>
+  <entry key="781">My rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this</entry>
+  <entry key="784">Apply to be moderator</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for audio/video access</entry>
+  <entry key="787">This session hash has already been used</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit?</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved event in the "Event details" on the right. Please save, remove or cancel and edit the details before adding another event.</entry>
+  <entry key="795">Please add at least one attendee for your meeting</entry>
+  <entry key="796">Do you really want to delete this event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your web conferencing platform. You can either follow the 1-2-3 steps to enter a conference room directly or you choose the Calendar to set up and plan a meeting.</entry>
+  <entry key="805">Plan a meeting</entry>
+  <entry key="806">To setup a conference you can add a new event in the calendar</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no user selected</entry>
+  <entry key="812">Add attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event details</entry>
+  <entry key="816">Default moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Add new default moderator</entry>
+  <entry key="822">Is super moderator</entry>
+  <entry key="823">If the room is moderated, any users with a moderator or administrator level access are automatically set to moderator when they enter the room</entry>
+  <entry key="824">A super moderator is always a moderator when they enter a room</entry>
+  <entry key="825">Make user a super moderator</entry>
+  <entry key="826">Remove super moderator from user</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an usergroup to the room only users of that usergroup have access to it</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Usergroup</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this item?</entry>
+  <entry key="834">There is no user selected</entry>
+  <entry key="835">Add new default moderator</entry>
+  <entry key="836">Do you want to add the super moderation flag for this user?</entry>
+  <entry key="837">Do you want to remove the super moderation flag for this user? You need to save the room object to save these settings.</entry>
+  <entry key="838">This user is a super moderator. You cannot remove the moderation flag.</entry>
+  <entry key="839">Do you really want to delete this file/folder?</entry>
+  <entry key="840">Delete file/folder?</entry>
+  <entry key="841">Mrs</entry>
+  <entry key="842">Dr</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share audio with SIP applet</entry>
+  <entry key="846">Share audio with SIP and video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share their screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing user</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New screen sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording timeline</entry>
+  <entry key="860">My recordings</entry>
+  <entry key="861">Public recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Main - video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top.</entry>
+  <entry key="871">Start recording</entry>
+  <entry key="872">Stop recording</entry>
+  <entry key="873">Download as FLV</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Close</entry>
+  <entry key="879">Allow user questions</entry>
+  <entry key="880">Turn this off to prevent any user from disturbing you in this room</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw screen video</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the recording</entry>
+  <entry key="888">The recording is not yet ready for watching</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder message</entry>
+  <entry key="891">OK</entry>
+  <entry key="892">SIP applet is not ready</entry>
+  <entry key="893">SIP account settings</entry>
+  <entry key="894">SIP settings for each user</entry>
+  <entry key="895">SIP user</entry>
+  <entry key="896">SIP password</entry>
+  <entry key="897">SIP auth ID</entry>
+  <entry key="898">The login to the SIP gateway has failed</entry>
+  <entry key="899">The login to the SIP gateway has failed. Contact the administrator.</entry>
+  <entry key="900">Logging onto the SIP gateway...</entry>
+  <entry key="901">Logging onto the SIP gateway...</entry>
+  <entry key="902">Show log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP applet message</entry>
+  <entry key="905">The SIP applet is not ready. Accept the applet and click OK</entry>
+  <entry key="906">Get moderation</entry>
+  <entry key="907">Save appointment changes</entry>
+  <entry key="908">The appointment has been changed. Do you want to save these changes?</entry>
+  <entry key="909">To access other recordings you have to login to the {0} application</entry>
+  <entry key="910">Choose the user for this video</entry>
+  <entry key="911">Available users for this pod</entry>
+  <entry key="912">You are a moderator in this interview. You can decide who is speaking in this interview and you can start/stop the recording of the session.</entry>
+  <entry key="913">Start recording</entry>
+  <entry key="914">Stop recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started.</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP data</entry>
+  <entry key="921">Re-generate SIP data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder.</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License settings</entry>
+  <entry key="926">You can either bind the user to a expire date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your license has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time left on your account:</entry>
+  <entry key="935">User license Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make web-conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into conference rooms) or creating conference rooms via the calendar with external users is only allowed with a volume flatrate.</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited license</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit.</entry>
+  <entry key="951">Want your own server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per installation.</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact info and prizings</entry>
+  <entry key="958">Credit Card details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Typec</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (with Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and buy.</entry>
+  <entry key="983">Click and buy.</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy.</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received.</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your invoice. The invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}.</entry>
+  <entry key="990">Payment received {0} -</entry>
+  <entry key="991">Payment and transaction status</entry>
+  <entry key="992">Transcation hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th parties to access a meeting.</entry>
+  <entry key="1000">This email is already used by another user.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The conference number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only.</entry>
+  <entry key="1006">Only the URL entered in the status bar is send to participants.</entry>
+  <entry key="1007">Make team rooms [breakout session]</entry>
+  <entry key="1008">Choose users for a new team-room.</entry>
+  <entry key="1009">You can choose users here and create a new conference room ("Team room") for them. The chosen users will automatically switch to the new team-room or get a notification. Team room moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a moderator.</entry>
+  <entry key="1010">User name</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new team room:</entry>
+  <entry key="1014">Create team room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the team room.</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from team room</entry>
+  <entry key="1019">User is team room moderator (He is able to manage team rooms and users of the team room can ask him to come inside)</entry>
+  <entry key="1020">Room type</entry>
+  <entry key="1021">If you check "Force user to switch to new team room" all chosen users will automatically switch to the newly created team room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-moderators always have the free choice to manage the team rooms and switch between them.</entry>
+  <entry key="1022">Manage team rooms</entry>
+  <entry key="1023">You can switch here between all team rooms that you are assigned as team room moderator. Users inside the team room can send you a message, for example to ask you to come to their room and help them. You can also terminate the team room and all users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new team room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right.</entry>
+  <entry key="1031">1) Team room settings</entry>
+  <entry key="1032">2) Add users to the team room</entry>
+  <entry key="1033">Team room name</entry>
+  <entry key="1034">Team room</entry>
+  <entry key="1035">Change to the room</entry>
+  <entry key="1036">Switch to this team room</entry>
+  <entry key="1037">Terminate team room and logout all users</entry>
+  <entry key="1038">New team room</entry>
+  <entry key="1039">There is a new team room available for you.</entry>
+  <entry key="1040">Switch to team room</entry>
+  <entry key="1041">Team room actions</entry>
+  <entry key="1042">This is a team room, you can send the team moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section.</entry>
+  <entry key="1043">1) Send message to team room moderator</entry>
+  <entry key="1044">New team room</entry>
+  <entry key="1045">There is a new team room available. You can switch to that room. Team rooms are like "Workgroups" with additionally possibilities to ask the team room moderator for help. Your team rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to team room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team room name:</entry>
+  <entry key="1049">This window will stay open even if you leave the room.</entry>
+  <entry key="1050">Users for this team room</entry>
+  <entry key="1051">3) Other team rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the team room moderators. For example if you need help in moderating the Rroom or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this team room</entry>
+  <entry key="1055">Is team room moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this team room.</entry>
+  <entry key="1057">There is no team moderator logged in at the moment.</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our team room.</entry>
+  <entry key="1060">A user from a team room requests your help.</entry>
+  <entry key="1061">Team room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any team room. But you can switch here to all team rooms that you have access to.</entry>
+  <entry key="1065">Backup the system. The backup includes all user generated data. The configuration is not included as well as the language labels. Because those values are imported with the system installer. To update your system, export your old system (1) re-install into a new database the new package (2) and import the backup file again (3). The backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System backup</entry>
+  <entry key="1067">Allow user to share screen/record</entry>
+  <entry key="1068">Deny user to share screen/record</entry>
+  <entry key="1069">User is moderator, he can do anything. [screen sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this flag on and the users will have only the audio option and no video in a conference room. This can bee good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (during screen sharing)</entry>
+  <entry key="1079">Deny Remote Control (during screen sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything.</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose &lt;i&gt;Insert&lt;/i&gt; from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;u&gt;&lt;FONT color='#0000CC'&gt;&lt;A HREF="http://www.youtube.com/watch?v=Ukqa01O48uI" TARGET="_BLANK"&gt;watch the demo&lt;/A&gt;&lt;/FONT&gt;&lt;/u&gt;</entry>
+  <entry key="1086">Copy and paste text from your PC to remote PC and vice versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy and paste</entry>
+  <entry key="1089">Quality of the screen share:</entry>
+  <entry key="1090">Very high quality</entry>
+  <entry key="1091">High quality</entry>
+  <entry key="1092">Medium quality</entry>
+  <entry key="1093">Low quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close webinar.</entry>
+  <entry key="1098">The webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config file</entry>
+  <entry key="1107">LDAP Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to user name" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the login in the LDAP is stored including the domain name. Example: user enters "hans" domain is specified as "localhost.com", login that is verified against LDAP is: hans@localhost.com</entry>
+  <entry key="1117">Add domain to user name</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote clipboard text</entry>
+  <entry key="1122">Show remote clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about copy and paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation.</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">Timezone message</entry>
+  <entry key="1149">Check "Timezone message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the timezone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Free text</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Search result</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts.</entry>
+  <entry key="1198">confirmed you as contact.</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show /copy chat log</entry>
+  <entry key="1201">Chat log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Unenroll user</entry>
+  <entry key="1214">You cannot unenroll yourself out of the conference room. If you want to leave it close the browser or use the exit button.</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot unenroll a super moderator out of a room.</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you. You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied.</entry>
+  <entry key="1227">The user is already approved.</entry>
+  <entry key="1228">This user contact hash is invalid.</entry>
+  <entry key="1229">User added to contact list.</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list.</entry>
+  <entry key="1231">There is no such contact.</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder.</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected.</entry>
+  <entry key="1255">Move to inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone.</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages.</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside. Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course.</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is not valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own.</entry>
+  <entry key="1279">Show my own calendar again.</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first.</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted.</entry>
+  <entry key="1287">Choose your nick name</entry>
+  <entry key="1288">First name</entry>
+  <entry key="1289">Last name</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars. For both, first name and last name.</entry>
+  <entry key="1293">Please enter a valid email.</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner ID</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with user level user, moderator or admin</entry>
+  <entry key="1311">Webservice (only access via SOAP)</entry>
+  <entry key="1312">Load directly to the Whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone.</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget to 'Start recording', if you want have the meeting recorded."</entry>
+  <entry key="1316">Start recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw free</entry>
+  <entry key="1325">Select/move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom in/out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Show grid</entry>
+  <entry key="1333">Share file</entry>
+  <entry key="1334">Select shape</entry>
+  <entry key="1335">Select clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite attendees</entry>
+  <entry key="1349">By email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny and remove message</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards.</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">user defined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others. Give exclusive audio to me (You can also press F12)</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself.</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore.</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally.</entry>
+  <entry key="1392">Mute microphone globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore.</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off.</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on.</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally.</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally.</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him.</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally. To mute your own microphone: Please use the microphone icon in your video pod.</entry>
+  <entry key="1410">Poll name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple chart</entry>
+  <entry key="1415">Pie chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close poll</entry>
+  <entry key="1419">Are you sure you want to close this poll? No one will be able to vote.</entry>
+  <entry key="1420">Delete poll</entry>
+  <entry key="1421">Are you sure you want to delete this poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO code</entry>
+  <entry key="1423">Allow/deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">would like to have permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith.</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">You have the right to give exclusive audio. Click here to make yourself exclusive audio (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need to be a Moderator or have the 'draw on whiteboard' rights to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+  <entry key="1601">Apply for audio access</entry>
+  <entry key="1602">Ask moderator to share your micro</entry>
+  <entry key="1603">would like to share his audio</entry>
+  <entry key="1604">Allow this user to publish their audio</entry>
+  <entry key="1605">Remove audio of this user</entry>
+  <entry key="1606">I would like to share my audio</entry>
+  <entry key="1607">You are allowed to share your audio</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
new file mode 100644
index 0000000..da2a016
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">المؤتمر</entry>
+  <entry key="2">اجتماع</entry>
+  <entry key="3">الاحداث</entry>
+  <entry key="4">أماكن</entry>
+  <entry key="5">نبذة</entry>
+  <entry key="6">الادارة</entry>
+  <entry key="7">توقف</entry>
+  <entry key="8">سجل</entry>
+  <entry key="9">لا ملف متاحة</entry>
+  <entry key="10">سجل قبل المعلمين</entry>
+  <entry key="11">ترتبط المستخدمين :</entry>
+  <entry key="12">بدء المؤتمر</entry>
+  <entry key="13">اسمي</entry>
+  <entry key="14">الفيديو</entry>
+  <entry key="15">تحميل الملفات</entry>
+  <entry key="16">تحديث قائمة</entry>
+  <entry key="17">الى الملف الرئيسي</entry>
+  <entry key="18">استطلاع جديد</entry>
+  <entry key="19">استطلاع جديد للمؤتمر.</entry>
+  <entry key="20">السؤال :</entry>
+  <entry key="21">نوع من استطلاع للرأي يؤكد :</entry>
+  <entry key="22">خلق</entry>
+  <entry key="23">معلومات : كل صلة يتلقى المستخدم رسالة مع استطلاع جديد.</entry>
+  <entry key="24">انشاء استطلاع</entry>
+  <entry key="25">الغاء</entry>
+  <entry key="26">نعم / لا</entry>
+  <entry key="27">عددي 1-10</entry>
+  <entry key="28">استطلاع الرأى</entry>
+  <entry key="29">لا بد من وسيط لتهيئة السؤال</entry>
+  <entry key="30">تصويتك مسجلة.</entry>
+  <entry key="31">حسابك قد صوتت بالفعل في هذا الاستطلاع.</entry>
+  <entry key="32">تصويت!</entry>
+  <entry key="33">ردكم :</entry>
+  <entry key="34">نعم</entry>
+  <entry key="35">لا</entry>
+  <entry key="36">وسوف wissen :</entry>
+  <entry key="37">نتائج الاستطلاع</entry>
+  <entry key="38">السؤال :</entry>
+  <entry key="39">النتائج :</entry>
+  <entry key="40">الاجوبه :</entry>
+  <entry key="41">لا الاستطلاعات قد بدأت.</entry>
+  <entry key="42">تصويت!</entry>
+  <entry key="43">الاجتماع (ماكس 4 مقاعد)</entry>
+  <entry key="44">المؤتمر (ماكس 50 مقعدا)</entry>
+  <entry key="45">النوع</entry>
+  <entry key="46">المقاعد الاخرى</entry>
+  <entry key="47">بالفعل اختارت</entry>
+  <entry key="48">أدخل</entry>
+  <entry key="49">الوسيط قد غادر الجلسة.</entry>
+  <entry key="50">نظام المعلومات</entry>
+  <entry key="51">اختيار جهاز</entry>
+  <entry key="52">اختيار كاميرا ويب :</entry>
+  <entry key="53">اختيار الجزئي :</entry>
+  <entry key="54">الموافقة</entry>
+  <entry key="55">الغاء</entry>
+  <entry key="56">انت بحاجة الى اعادة وصل.</entry>
+  <entry key="57">تحرير الاعداد.</entry>
+  <entry key="58">وبطبيعة الحال :</entry>
+  <entry key="59">اللغة :</entry>
+  <entry key="60">الموافقة</entry>
+  <entry key="61">الغاء</entry>
+  <entry key="62">بيضاء واضحة</entry>
+  <entry key="63">هل تريد أن تكون لوحة جديدة قبل ان افرغوا الصورة المضافه؟</entry>
+  <entry key="64">لا أسأل مرة اخرى</entry>
+  <entry key="65">لا</entry>
+  <entry key="66">تحرير الاعداد</entry>
+  <entry key="67">تأكيد طلب قبل افراغ بيضاء.</entry>
+  <entry key="68">معلومات مستخدم</entry>
+  <entry key="69">واضح drawarea</entry>
+  <entry key="70">الغاء</entry>
+  <entry key="71">أعادة</entry>
+  <entry key="72">اختر جسم</entry>
+  <entry key="73">النص</entry>
+  <entry key="74">الطلاء</entry>
+  <entry key="75">استرعى الخط</entry>
+  <entry key="76">إبراز أوجه</entry>
+  <entry key="77">مستطيل</entry>
+  <entry key="78">بيضوي</entry>
+  <entry key="79">السهم</entry>
+  <entry key="80">اختار حذف البند</entry>
+  <entry key="81">طلب للحصول على الاعتدال</entry>
+  <entry key="82">تطبيق</entry>
+  <entry key="83">الغاء</entry>
+  <entry key="84">لتصبح مشرف</entry>
+  <entry key="85">وثيق</entry>
+  <entry key="86">مائل</entry>
+  <entry key="87">اجترئ</entry>
+  <entry key="88">انتظار</entry>
+  <entry key="89">مستخدم يريد ان يطبق لالاعتدال :</entry>
+  <entry key="90">يقبل</entry>
+  <entry key="91">نرفض</entry>
+  <entry key="92">الغاء</entry>
+  <entry key="93">إرسال طلب الى المستخدمين التالية</entry>
+  <entry key="94">مقبول</entry>
+  <entry key="95">رفض</entry>
+  <entry key="96">تغيير وسيط</entry>
+  <entry key="97">انت لا اعتدال هذا بالطبع!</entry>
+  <entry key="98">رئيس الجلسة :</entry>
+  <entry key="99">هذه الغرفة بالكامل. عفوا يرجى اعادة المحاوله لاحقا.</entry>
+  <entry key="100">بيضوي</entry>
+  <entry key="101">وثيق</entry>
+  <entry key="102">خطأ في البيانات المدخله</entry>
+  <entry key="103">اسم المستخدم يجب ان تكون على الأقل 4 احرف</entry>
+  <entry key="104">Userpass يجب أن تكون على الأقل 4 احرف</entry>
+  <entry key="105">اسم المستخدم مأخوذ من قبل</entry>
+  <entry key="106">البريد الالكتروني هو ما سبق تسجيله</entry>
+  <entry key="107">خطأ في النظام الرجاء الاتصال منظومة المشرفون</entry>
+  <entry key="108">تسجيل الدخول</entry>
+  <entry key="109">مستخدم :</entry>
+  <entry key="110">المرور :</entry>
+  <entry key="111">اللغة</entry>
+  <entry key="112">تسجيل الدخول</entry>
+  <entry key="113">اشترك</entry>
+  <entry key="114">مستخدم :</entry>
+  <entry key="115">المرور :</entry>
+  <entry key="116">قلت :</entry>
+  <entry key="117">Firstname :</entry>
+  <entry key="118">Lastname :</entry>
+  <entry key="119">البريد :</entry>
+  <entry key="120">البلد :</entry>
+  <entry key="121">سجل</entry>
+  <entry key="122">الغاء</entry>
+  <entry key="123">سجل</entry>
+  <entry key="124">البيت</entry>
+  <entry key="125">المستعملون</entry>
+  <entry key="126">المجموعات</entry>
+  <entry key="127">المنظمات</entry>
+  <entry key="128">- غرف الاجتماع</entry>
+  <entry key="129">الجمهور</entry>
+  <entry key="130">منظمة</entry>
+  <entry key="131">أدخل</entry>
+  <entry key="132">تسجيل الدخول</entry>
+  <entry key="133">كلمة السر</entry>
+  <entry key="134">حروف</entry>
+  <entry key="135">Firstname</entry>
+  <entry key="136">Lastname</entry>
+  <entry key="137">بريد</entry>
+  <entry key="138">عيد الميلاد</entry>
+  <entry key="139">الشارع / لا</entry>
+  <entry key="140">الرمز البريدي / المدينة</entry>
+  <entry key="141">البلاد</entry>
+  <entry key="142">Adress - معلومات</entry>
+  <entry key="143">Userdata</entry>
+  <entry key="144">انقاذ</entry>
+  <entry key="145">انقاذ</entry>
+  <entry key="146">- رقم تعريف المستخدم</entry>
+  <entry key="147">تسجيل الدخول</entry>
+  <entry key="148">Firstname</entry>
+  <entry key="149">Lastname</entry>
+  <entry key="150">وتبين المقبل</entry>
+  <entry key="151">وتظهر قبل</entry>
+  <entry key="152">حذف سجل</entry>
+  <entry key="153">الغاء</entry>
+  <entry key="154">حذف</entry>
+  <entry key="155">قياسيه جديدة</entry>
+  <entry key="156">تجديد السجل</entry>
+  <entry key="157">حذف سجل</entry>
+  <entry key="158">المركز</entry>
+  <entry key="159">فاقد الاهليه</entry>
+  <entry key="160">مكن</entry>
+  <entry key="161">المنظمات</entry>
+  <entry key="162">التقويم</entry>
+  <entry key="163">وثيق</entry>
+  <entry key="164">منظمة معرف</entry>
+  <entry key="165">الاسم</entry>
+  <entry key="166">مستعمل</entry>
+  <entry key="167">وزارة الدفاع</entry>
+  <entry key="168">الادارة</entry>
+  <entry key="169">Userlevel</entry>
+  <entry key="170">منظمة</entry>
+  <entry key="171">الاسم</entry>
+  <entry key="172">تضيف منظمة</entry>
+  <entry key="173">تضيف منظمة</entry>
+  <entry key="174">الغاء</entry>
+  <entry key="175">اضف</entry>
+  <entry key="176">ازالة منظمة</entry>
+  <entry key="177">مستعمل</entry>
+  <entry key="178">اضافة مستخدم</entry>
+  <entry key="179">حذف المستخدم</entry>
+  <entry key="180">اضافة مستخدم</entry>
+  <entry key="181">البحث المستخدم</entry>
+  <entry key="182">البحث</entry>
+  <entry key="183">مستعمل</entry>
+  <entry key="184">منظمة</entry>
+  <entry key="185">أدخل</entry>
+  <entry key="186">Conferencerooms</entry>
+  <entry key="187">Conferencerooms</entry>
+  <entry key="188">الهوية</entry>
+  <entry key="189">الاسم</entry>
+  <entry key="190">الجمهور</entry>
+  <entry key="191">المنظمات</entry>
+  <entry key="192">Meetingrooms</entry>
+  <entry key="193">الاسم</entry>
+  <entry key="194">النوع</entry>
+  <entry key="195">الجمهور</entry>
+  <entry key="196">التعليق</entry>
+  <entry key="197">انقاذ</entry>
+  <entry key="198">حمل</entry>
+  <entry key="199">باستثناء ما ورد</entry>
+  <entry key="200">اسم الملف</entry>
+  <entry key="201">اسم الملف</entry>
+  <entry key="202">الغاء</entry>
+  <entry key="203">انقاذ</entry>
+  <entry key="204">خطأ</entry>
+  <entry key="205">التحميل</entry>
+  <entry key="206">الاشياء المحمله</entry>
+  <entry key="207">Snychronizing العملاء والزبائن على الانتظار :</entry>
+  <entry key="208">التحميل imagedata</entry>
+  <entry key="209">Snychronizing العملاء والزبائن على الانتظار :</entry>
+  <entry key="210">واضح drawarea</entry>
+  <entry key="211">Drawarea واضحة ، وجميع البيانات المتعلقة وحة ستضيع</entry>
+  <entry key="212">تأكد قبل التحميل الملف</entry>
+  <entry key="213">ارسال دعوة</entry>
+  <entry key="214">ارسال دعوة</entry>
+  <entry key="215">الموضوع</entry>
+  <entry key="216">المتلقيه</entry>
+  <entry key="217">رسالة</entry>
+  <entry key="218">أرسل</entry>
+  <entry key="219">الغاء</entry>
+  <entry key="220">أرسل</entry>
+  <entry key="221">Userdata</entry>
+  <entry key="222">الاسم المستعار الخاص بك لهذا المؤتمر</entry>
+  <entry key="223">نيك</entry>
+  <entry key="224">Firstname</entry>
+  <entry key="225">Lastname</entry>
+  <entry key="226">البريد الالكتروني</entry>
+  <entry key="227">اللغة</entry>
+  <entry key="228">أدخل</entry>
+  <entry key="229">التحميل</entry>
+  <entry key="230">بيانات التحميل ، يرجى الانتظار!</entry>
+  <entry key="231">خطأ كلمة السر</entry>
+  <entry key="232">الرجاء ادخال كلمات السر متطابقه مع اثنين على الاقل 4 احرف</entry>
+  <entry key="233">البريد الخطأ</entry>
+  <entry key="234">لقد قمت بادخال غير صالحة للبريد - Adress</entry>
+  <entry key="235">التسجيل الكامل</entry>
+  <entry key="236">لقد تم انشاء حسابك. يمكنك الان تسجيل الدخول.</entry>
+  <entry key="237">لا يمكنك حصة الشاشه في تلك اللحظة. شخص آخر بالفعل السهم دورته الشاشه.</entry>
+  <entry key="238">تقاسم ممنوع</entry>
+  <entry key="239">حصة الشاشه</entry>
+  <entry key="240">سيئة عرض النطاق الترددى : انك لم تتمكن من syncronize الشاشه. اطر سيتم صرف النظر عنها. اذا كان هذا التحذير هو مبين في كثير من الاحيان يمكن لك ان تطلب من وسيط الى خفض نوعية.</entry>
+  <entry key="241">من الشاشه :</entry>
+  <entry key="242">الطلاء</entry>
+  <entry key="243">الوثيقة</entry>
+  <entry key="244">الدردشه</entry>
+  <entry key="245">ملفات</entry>
+  <entry key="246">الاعضاء</entry>
+  <entry key="247">تنزيل الوثيقة الاصليه</entry>
+  <entry key="248">تنزيل قوات الدفاع الشعبي وثيقة</entry>
+  <entry key="249">حمل عرض لوحة</entry>
+  <entry key="250">التشكيل</entry>
+  <entry key="251">أسحب هذا الوجه من وجوه</entry>
+  <entry key="252">لتغيير هذا الوجه من وجوه</entry>
+  <entry key="253">٪</entry>
+  <entry key="254">من</entry>
+  <entry key="255">اذهب الى الصفحه الاولى</entry>
+  <entry key="256">اذهب الى الصفحه السابقة</entry>
+  <entry key="257">اذهب الى الصفحه التالية</entry>
+  <entry key="258">اذهب الى الصفحه الاخيرة</entry>
+  <entry key="259">تكبير --</entry>
+  <entry key="260">تكبير</entry>
+  <entry key="261">السيد</entry>
+  <entry key="262">السيدة</entry>
+  <entry key="263">التشكيل</entry>
+  <entry key="264">الهوية</entry>
+  <entry key="265">مفتاح</entry>
+  <entry key="266">التشكيل</entry>
+  <entry key="267">مفتاح</entry>
+  <entry key="268">آخر تحديث</entry>
+  <entry key="269">Updatedby</entry>
+  <entry key="270">التعليق</entry>
+  <entry key="271">مفتاح</entry>
+  <entry key="272">من</entry>
+  <entry key="273">المستعملون</entry>
+  <entry key="274">حذف المستخدم من المنظمه</entry>
+  <entry key="275">حذف</entry>
+  <entry key="276">هذا المستخدم هو بالفعل عضو في هذه المنظمه.</entry>
+  <entry key="277">اخبار</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">جوتو المؤتمر</entry>
+  <entry key="280">قاعة جوتو</entry>
+  <entry key="281">مساعدة ودعم</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">تقرير أ بقة!</entry>
+  <entry key="285">أكثر</entry>
+  <entry key="286">مشروع شبكى (http://openmeetings.apache.org)</entry>
+  <entry key="287">مستخدم قائمة بريديه (http://openmeetings.apache.org/mail-lists.html - مستخدم)</entry>
+  <entry key="288">نتذكر تسجيل الدخول</entry>
+  <entry key="289">المحتوى</entry>
+  <entry key="290">صفحتي الرئيسية</entry>
+  <entry key="291">بلدي الجلسات المقررة</entry>
+  <entry key="292">بلادي المقرر الاحداث</entry>
+  <entry key="293">الجلسات العلنيه</entry>
+  <entry key="294">الجلسات السرية</entry>
+  <entry key="295">المناسبات العامة</entry>
+  <entry key="296">المناسبات الخاصة</entry>
+  <entry key="297">الجمهور محتوى</entry>
+  <entry key="298">المحتوى الخاص</entry>
+  <entry key="299">الشخصيه المحتوى</entry>
+  <entry key="300"></entry>
+  <entry key="301">الاعتدال</entry>
+  <entry key="302">طلب للحصول على الاعتدال</entry>
+  <entry key="303">استطلاعات الرأي</entry>
+  <entry key="304">اختر ملف</entry>
+  <entry key="305">أماكن</entry>
+  <entry key="306">كأم التابعة لهيئة التصنيع العسكرى والاعدادات</entry>
+  <entry key="307">لوح الاعدادات</entry>
+  <entry key="308">خروج</entry>
+  <entry key="309">عودة الى غرف</entry>
+  <entry key="310">خروج</entry>
+  <entry key="311">Desktop Viewer</entry>
+  <entry key="312">start Desktop Viewer</entry>
+  <entry key="313">صوت و صورة</entry>
+  <entry key="314">دردشة</entry>
+  <entry key="315">لوح أبيض</entry>
+  <entry key="316">(إعادة) بدء صوت / صورة أو تغيير إعدادات الجهاز</entry>
+  <entry key="317">ملفات</entry>
+  <entry key="318">مستخدمين</entry>
+  <entry key="319">إستطلاعات</entry>
+  <entry key="320">هذا الإسم لا يعود إلى أي مستخدم</entry>
+  <entry key="321">لقد تم إرسال بريد يتضمن رابط خاص إلى بريدك الإلكتروني، الرجاء تفحص صندوق البريد. إذا لم تحصل بعد على بريد إلكتروني، الرجاء تعديل إعدادات البريد المزعج و قم بإعادة إرسال البريد الإلكتروني الخاص بالتأكيد.</entry>
+  <entry key="322">خطأ</entry>
+  <entry key="323">رسالة</entry>
+  <entry key="324">مزيج غير صالح. ليس هناك أي مستخدم.</entry>
+  <entry key="325">إستعادة كلمة المرور</entry>
+  <entry key="326">تسجيل الدخول</entry>
+  <entry key="327">تغيير كلمة المرور</entry>
+  <entry key="328">كلمة مرور جديدة</entry>
+  <entry key="329">إعادة إدخال كلمة المرور</entry>
+  <entry key="330">كلمات المرور التي أدخلتها ليست متطابقة</entry>
+  <entry key="331">أربع أحرف أو أكثر</entry>
+  <entry key="332">تم تسجيل كلمة المرور. يمكنك الآن تسجيل الدخول</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">خطأ غير معروف. الرجاء إبلاغ فريق الخدمة</entry>
+  <entry key="335">إسم المستخدم غير موجود</entry>
+  <entry key="336">كلمة مرور غير صحيحة</entry>
+  <entry key="337">تم تسجيل الخروج بنجاح</entry>
+  <entry key="338">تم إلغاء التسجيل السابق.</entry>
+  <entry key="339">بريد إلكتروني غير صحيح</entry>
+  <entry key="340">إسم ملف مكرر. الرجاء إختيار إسماً آخراً</entry>
+  <entry key="341">إسم الملف قصير</entry>
+  <entry key="342">لا يمكن حفظ العنوان</entry>
+  <entry key="343">تمت إضافة المستخدم لكن يجب إنساب هذا المستخدم إلى تنظيم و إلا لن يمكنه تسجيل الدخول.</entry>
+  <entry key="344">سجل جديد</entry>
+  <entry key="345">ليس هناك أي حقل يحمل هذا Id.</entry>
+  <entry key="346">ليس هناك إسم لهذه الرقعة.</entry>
+  <entry key="347">المطلوب إذن المشرف</entry>
+  <entry key="348">محرر اللغة</entry>
+  <entry key="349">لغة</entry>
+  <entry key="350">معرف الرقعة</entry>
+  <entry key="351">إسم الرقعة</entry>
+  <entry key="352">قيمة</entry>
+  <entry key="353">حقل القيم</entry>
+  <entry key="354">إسم الرقعة</entry>
+  <entry key="355">قيمة الرقعة</entry>
+  <entry key="356">معرف الرقعة</entry>
+  <entry key="357">لقد حذفت الرقعة ليس الحقل! لا يمكنك حذف الحقل. يمكن أن يكون له رقع في لغات أخرى.</entry>
+  <entry key="358">رقعة غير صالح ةid. لا يمكن إيجاد The FieldLanguagesvalues_Id في قاعدة البيانات.</entry>
+  <entry key="359">لا يمكنك حذف هذا الحقل. يمكنك فقط حذف رقعات لا حلقات. ليس هناك أي رقعات محملة في هذه الأثناء، سواء لم تختر أي حقل أو ليس هناك أي رقعة معرفة لهذه اللغة لهذا الحقل.</entry>
+  <entry key="360">تصدير</entry>
+  <entry key="361">يجب أن تخرج لرؤية التغييرات.</entry>
+  <entry key="362">إضافة لغة جديدة</entry>
+  <entry key="363">delete language</entry>
+  <entry key="364">حذف لغة</entry>
+  <entry key="365">إسم</entry>
+  <entry key="366">إضافة لغة</entry>
+  <entry key="367">نسخ إحتياطي</entry>
+  <entry key="368">القفز إلى الأول</entry>
+  <entry key="369">القفز إلى السابق</entry>
+  <entry key="370">القفز إلى التالي</entry>
+  <entry key="371">القفز إلى الأخير</entry>
+  <entry key="372">المستخدم يتكلم</entry>
+  <entry key="373">تشغيل/إيقاف الصوت</entry>
+  <entry key="374">نظام</entry>
+  <entry key="375">إعداداتك</entry>
+  <entry key="376">مرحباً،</entry>
+  <entry key="377">إضافة ملف التعريف</entry>
+  <entry key="378">رسائل جديدة:</entry>
+  <entry key="379">إيداع صور جديدة</entry>
+  <entry key="380">بيانات المستخدم - تصدير</entry>
+  <entry key="381">يجب أن تكون المنظمات موجودة!</entry>
+  <entry key="382">بدء التصدير</entry>
+  <entry key="383">عن طريق المنظمة</entry>
+  <entry key="384">بدء التصدير</entry>
+  <entry key="385">بيانات المستخدم - إستيراد</entry>
+  <entry key="386">إختر users.xml</entry>
+  <entry key="387">إستيراد</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">إستيراد - إختر ملف</entry>
+  <entry key="391">حفظ بإسم</entry>
+  <entry key="392">إسم:</entry>
+  <entry key="393">تعليق:</entry>
+  <entry key="394">حفظ</entry>
+  <entry key="395">تسجيلات</entry>
+  <entry key="396">مشاهدين التسجيلات</entry>
+  <entry key="397">تسجيلات الغرف العامة و الخاصة</entry>
+  <entry key="398">مستخدمين:</entry>
+  <entry key="399">إنضم:</entry>
+  <entry key="400"></entry>
+  <entry key="401">المستخدمين في هذه الغرفة:</entry>
+  <entry key="402">تحديث</entry>
+  <entry key="403">هذه الغرفة ممتلئة. حاول بعد بضع دقائق مرة أخرى.</entry>
+  <entry key="404">إضغط على الغرفة للحصول على تفاصيل</entry>
+  <entry key="405">دردشة مع المستخدمين في هذه الغرفة:</entry>
+  <entry key="406">غرفة:</entry>
+  <entry key="407">مستخدمين في هذه الغرفة:</entry>
+  <entry key="408">منذ:</entry>
+  <entry key="409">شغل التسجيل</entry>
+  <entry key="410">الطول:</entry>
+  <entry key="411">التاريخ:</entry>
+  <entry key="412">أسلوب المسجل! لا يمكنك تغيير القيم، هذا ملف مسجل!</entry>
+  <entry key="413">شغل هذا المسجل</entry>
+  <entry key="414">تشغيل/إيقاف</entry>
+  <entry key="415">بدء التسجيل</entry>
+  <entry key="416">إيقاف التسجيل</entry>
+  <entry key="417">تسجيل:</entry>
+  <entry key="418">هناك شخص آخر يقوم بالتسجيل في هذه الأثناء:</entry>
+  <entry key="419">تسجيل! عن طريق المستخدم:</entry>
+  <entry key="420">إلغاء</entry>
+  <entry key="421">سيتم إلغاء التسجيل دون حفظه.</entry>
+  <entry key="422">إستئناف</entry>
+  <entry key="423">اقفل النافذة و إستأنف التسجيل</entry>
+  <entry key="424">تغيير لون الخط</entry>
+  <entry key="425">إختر اللون</entry>
+  <entry key="426">تمكين/تعطيل لون الخط</entry>
+  <entry key="427">تغيير ملء اللون</entry>
+  <entry key="428">تعطيل / تشغيل ملء اللون</entry>
+  <entry key="429">تغيير عرض الخط</entry>
+  <entry key="430">غلق</entry>
+  <entry key="431">تغيير حجم الحروف</entry>
+  <entry key="432">حذف التسجيل</entry>
+  <entry key="433">ضيف</entry>
+  <entry key="434">عند:</entry>
+  <entry key="435">إسم</entry>
+  <entry key="436">غرفة</entry>
+  <entry key="437">تاريخ</entry>
+  <entry key="438">إلغاء</entry>
+  <entry key="439">بدء</entry>
+  <entry key="440">إسم</entry>
+  <entry key="441">تاريخ</entry>
+  <entry key="442">حذف server-chatlog</entry>
+  <entry key="443">دردشة</entry>
+  <entry key="444">إرسال رسالة</entry>
+  <entry key="445">رموز</entry>
+  <entry key="446">رموز</entry>
+  <entry key="447">إختر الأجهزة المنشورة</entry>
+  <entry key="448">صوت و صورة</entry>
+  <entry key="449">صوت فقط</entry>
+  <entry key="450">صورة فقط</entry>
+  <entry key="451">لا صورة/صوت (صورة ثابتة)</entry>
+  <entry key="452">لا صوت/صورة ستنشر من جهازك، بدلاً من هذا ستظهر صورة من ملفك. إختر هذه الإعدادات إذا كان لديك مشاكل مع عرض النطاق الترددي أو إذا كان إتصالك بالإنترنت بطيئاً.</entry>
+  <entry key="453">الإثنين</entry>
+  <entry key="454">الثلاثاء</entry>
+  <entry key="455">الأربعاء</entry>
+  <entry key="456">الخميس</entry>
+  <entry key="457">الجمعة</entry>
+  <entry key="458">السبت</entry>
+  <entry key="459">الأحد</entry>
+  <entry key="460">الإثنين</entry>
+  <entry key="461">الثلثاء</entry>
+  <entry key="462">الأربعاء</entry>
+  <entry key="463">الخميس</entry>
+  <entry key="464">الجمعة</entry>
+  <entry key="465">السبت</entry>
+  <entry key="466">الأحد</entry>
+  <entry key="467">التقويم الأسبوعي</entry>
+  <entry key="468">التقويم الأسبوعي</entry>
+  <entry key="469">كانون الثاني(يناير)</entry>
+  <entry key="470">شباط(فبراير)</entry>
+  <entry key="471">آذار(مارس)</entry>
+  <entry key="472">نيسان(أبريل)</entry>
+  <entry key="473">أيار(مايو)</entry>
+  <entry key="474">حزيران(يونيو)</entry>
+  <entry key="475">تموز(يوليو)</entry>
+  <entry key="476">آب(أغسطس)</entry>
+  <entry key="477">أيلول(سبتمبر)</entry>
+  <entry key="478">تشرين أول(أكتوبر)</entry>
+  <entry key="479">تشرين ثاني(نوفمبر)</entry>
+  <entry key="480">كانون أول(ديسمبر)</entry>
+  <entry key="481">تقويم</entry>
+  <entry key="482">المشاركون</entry>
+  <entry key="483">عرض إعدادات التصميم</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">عرض | طول</entry>
+  <entry key="486">صندوق الفيديو</entry>
+  <entry key="487">صندوق الإدارة</entry>
+  <entry key="488">X</entry>
+  <entry key="489">صندوق اللوح</entry>
+  <entry key="490">ممكن</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">عرض | طول</entry>
+  <entry key="493">صندوق - ملفات،دردشة،مشاركين</entry>
+  <entry key="494">ممكن</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">عرض | طول</entry>
+  <entry key="497">لقد ترك رئيس الجلسة الغرفة. ليس هناك أي رئيس للجلسة في هذه الأثناء. يمكنك التقدم لرئاسة الجلسة أو الإنتظار.</entry>
+  <entry key="498">ليس هناك أي رئيس للجلسة في هذه الغرفة، و لكن هناك بعد المشاركين. عليك التقدم لرئاسة الجلسة أو الإنتظار.</entry>
+  <entry key="499">ملاحظات {0}</entry>
+  <entry key="500">{0} - دعوات</entry>
+  <entry key="501">رسالة من المستخدم:</entry>
+  <entry key="502">رسالة:</entry>
+  <entry key="503">أنقر على هذا الرابط للمشاركة في الإجتماعات:</entry>
+  <entry key="504">أنقر هنا لدخول الغرفة:</entry>
+  <entry key="505">إذا واجهتك مشاكل مع الرابط، الرجاء نسخه و من ثم لصقه في المتصفح:</entry>
+  <entry key="506">تسجيل {0}</entry>
+  <entry key="507">بياناتك:</entry>
+  <entry key="508">تسجيل الدخول:</entry>
+  <entry key="509">كلمة المرور:</entry>
+  <entry key="510">البريد الإلكتروني:</entry>
+  <entry key="511">فريق - OpenMeeting</entry>
+  <entry key="512">إنشاء حساب OpenMeeting</entry>
+  <entry key="513">إعادة ضبط كلمة مرور - OpenMeeting</entry>
+  <entry key="514">انقر على هذا الرابط من أجل إدخال كلمة مرور جديدة:</entry>
+  <entry key="515">انقر على هنا من أجل إدخال كلمة مرور جديدة</entry>
+  <entry key="516">إذا واجهتك مشاكل مع هذا الرابط، الرجاء نسخه و لصقه في المتصفح:</entry>
+  <entry key="517">إعادة ضبط كلمة مرور OpenMeeting</entry>
+  <entry key="518">الرجاء إدخال تاريخ صالح 24.12.2001 (يوم، شهر، سنة)</entry>
+  <entry key="519">الرجاء إدخال بريد إلكتروني صالح، مثلاً name@mail.com</entry>
+  <entry key="520">الرجاء إدخال عدد من أعداد الفاصلة العائمة، مثلاً 1.00</entry>
+  <entry key="521">الرجاء إدخال عدد صحيح، مثلاً 100</entry>
+  <entry key="522">الرجاء إدخال رقم هاتف صحيح، مثلاً ++49 0123 123123</entry>
+  <entry key="523">الرجاء إدخال وقت صالح، مثلاً 12:23 (hh:mm)</entry>
+  <entry key="524">محمي عن طريق كلمة مرور</entry>
+  <entry key="525">كلمة المرور</entry>
+  <entry key="526">مدة الصلاحية</entry>
+  <entry key="527">أبدي</entry>
+  <entry key="528">مدة</entry>
+  <entry key="529">وقت واحد</entry>
+  <entry key="530">صالح من:</entry>
+  <entry key="531">صالح لغاية:</entry>
+  <entry key="532">دعوة إلى To {0}</entry>
+  <entry key="533">ليس هناك دعوة متوفرة لرمز الدعوة هذا</entry>
+  <entry key="534">هذه الدعوة استخدمت من قبل. لا يمكن إعادة إستخدام هذا النوع من الدعوات.</entry>
+  <entry key="535">رمز الدعوة هذا ليس صالح.</entry>
+  <entry key="536">كلمة المرور:</entry>
+  <entry key="537">إفحص كلمة المرور</entry>
+  <entry key="538">كلمة مرور غير صحيحة!</entry>
+  <entry key="539">متصفح</entry>
+  <entry key="540">مزامنة الصوت/الصورة</entry>
+  <entry key="541">تسجيل الدخول صحيح لكن الجلسة التي إخترتها معطلة أو مخزنة في الخادوم. تحتاج أن تحصل على ID-جلسة جديد و تسجل الدخول من جديد.</entry>
+  <entry key="542">ID-جلسة لم تسجل الدخول أو ليس لديها حقوق المسؤول. The SOAP Gateway يحتاج إلى مستخدم لديه حقوق مسؤول ليتضمن مستخدمين جدد.</entry>
+  <entry key="543">ليس لدى هذه الجلسة إتصال ب-Remoteuser-Data. سواء لم تصل ب- SOAP-Gateway قبل البدء بالإستعمال أو أنك تستخدم جلسة-ID خاطئة.</entry>
+  <entry key="544">يكون التسجيل حالياً Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">ع</entry>
+  <entry key="550">عرض</entry>
+  <entry key="551">ط</entry>
+  <entry key="552">طول</entry>
+  <entry key="553">تغيير الشفافية</entry>
+  <entry key="554">فتح المتصفح</entry>
+  <entry key="555">إغلاق المتصفح</entry>
+  <entry key="556">لقد تم فقدان الإتصال بالخادوم. عليك تحديث الطلب أو تفحص الشبكة.</entry>
+  <entry key="557">المؤشر</entry>
+  <entry key="558">المزامنة</entry>
+  <entry key="559">مزامنة المستخدمين، الرجاء الإنتظار</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">مذكرة:</entry>
+  <entry key="566">فئة:</entry>
+  <entry key="567">التكرار:</entry>
+  <entry key="568">لا أحد</entry>
+  <entry key="569">موقع:</entry>
+  <entry key="570">بداية</entry>
+  <entry key="571">نهاية</entry>
+  <entry key="572">عنوان:</entry>
+  <entry key="573">تعليق:</entry>
+  <entry key="574">دعوة ناس</entry>
+  <entry key="575">يومي</entry>
+  <entry key="576">شهري</entry>
+  <entry key="577">سنوي</entry>
+  <entry key="578">نهاية الموعد بعد بداية الموعد!</entry>
+  <entry key="579">الرجاء إدخال عنوان!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">قم بتشغيل هذا إن كنت تستخدم لغة تكتب من اليمن إلى اليسار (ترتيب كلمات معكوس)</entry>
+  <entry key="582">لوحة أجهزة القياس</entry>
+  <entry key="583">مشاهدة الإجتماعات أو الاحداث المسجلة</entry>
+  <entry key="584">إجتماع - قم بتشكيل مؤتمر مع 4 (حتى 16) مستخدمين&lt;br/&gt;يحصل الجميع على صوت و صورة</entry>
+  <entry key="585">حدث - قم بتشكيل مؤتمر مع إلى 200 مشارك&lt;br/&gt;رئيس المؤتمر فقط يكون لديه صوت و صورة</entry>
+  <entry key="586">قم بخلق مستخدمين، غرف، منظمات&lt;br/&gt; + تغيير الترتيبات</entry>
+  <entry key="587">المستخدمين في هذه الغرفة في الوقت الحالي</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">تسجيل الدخول</entry>
+  <entry key="590">D</entry>
+  <entry key="591">تحمل وثائق. التجاء الإنتظار حتى يتم مزامنة كل العملاء.</entry>
+  <entry key="592">تم الإيداع، تحويل الوثيقة ...</entry>
+  <entry key="593">بدء الإيداع</entry>
+  <entry key="594">إيداع و إستيراد الحوار. الرجاء إختيار ملف من الإسطوانة.</entry>
+  <entry key="595">إلغاء</entry>
+  <entry key="596">إختيار الملف</entry>
+  <entry key="597">إتصالات</entry>
+  <entry key="598">قيمة</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">تسجيل الدخول</entry>
+  <entry key="601">متصل منذ</entry>
+  <entry key="602">غرفة / إطار</entry>
+  <entry key="603">رمي المستخدم</entry>
+  <entry key="604">رمي المستخدم</entry>
+  <entry key="605">هل تريد فعلاً أن ترمي العميل خارج الإتصال؟&lt;br/&gt; هذا سوف يقوم فقط بإخراج الزبون من الغرفة الحالية. يمكن للزبون أن يدخل مرة أخرى.</entry>
+  <entry key="606">لقد تم إغلاق جلستك عن طريق المسؤول أو رئيس الجلسة.</entry>
+  <entry key="607">هاتف</entry>
+  <entry key="608">المستخدم هو الرئيس في هذه الغرفة.</entry>
+  <entry key="609">يسمح للمستخدم الرسم على اللوح.</entry>
+  <entry key="610">(إعادة) بدء صوت / صورة أو تغيير إعدادات الجهاز</entry>
+  <entry key="611">السماح لهذا المستخدم بالرسم على اللوح</entry>
+  <entry key="612">إلغاء قدرة الرسم على اللوح</entry>
+  <entry key="613">المستخدمين</entry>
+  <entry key="614">الملفات</entry>
+  <entry key="615">اللوح</entry>
+  <entry key="616">دردشة</entry>
+  <entry key="617">حسابك يعود إلى عدة منظمات. الرجاء إختيار واحدة لهذه الجلسة.</entry>
+  <entry key="618">هذه الغرفة مليئة في هذه الأثناء. الرجاء المحاولة لاحقاً.</entry>
+  <entry key="619">نوع الغرفة.</entry>
+  <entry key="620">غرفة المواعيد</entry>
+  <entry key="621">وقت الخادوم.</entry>
+  <entry key="622">مذكرة - OpenMeeting</entry>
+  <entry key="623">رسالة من المستخدم:</entry>
+  <entry key="624">رسالة:</entry>
+  <entry key="625">أنقر على هذا الرابط للمشاركة في الإجتماع:</entry>
+  <entry key="626">أنقر هنا لدخول الغرفة</entry>
+  <entry key="627">إذا كان لديك مشاكل مع الرابط، الرجاء نسخه و لصقه في المتصفح:</entry>
+  <entry key="628">البحث في الداخل</entry>
+  <entry key="629">مستخدم خارجي</entry>
+  <entry key="630">إسم الكنية</entry>
+  <entry key="631">إسم</entry>
+  <entry key="632">بريد إلكتروني</entry>
+  <entry key="633">أكد الخروج</entry>
+  <entry key="634">هل أنت متأكد أنك تريد تسجيل الخروج؟</entry>
+  <entry key="635">النشاطات</entry>
+  <entry key="636">غرفة تجريبية</entry>
+  <entry key="637">وقت تجريبي</entry>
+  <entry key="638">عداد الإجتماع</entry>
+  <entry key="639">هذه الغرفة هي غرفة تجربة. لتعطيل هذه التحذير عليك الحصول على غرفة خاصة للإستخدام الخاص أو إنشاء خادم خاص. سوف يتم إخراجك فوراً في:</entry>
+  <entry key="640">مدار</entry>
+  <entry key="641">الرجاء إنتظار دخول المدير الغرفة. يمكن أن يكون المدير معلم، مسؤول أو منشئ هذه الغرفة.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">وصول مشاركة الشاشة</entry>
+  <entry key="644">هناك مشارك شاشة قادمة من المستخدم:</entry>
+  <entry key="645">بدء المشاركة</entry>
+  <entry key="646">إضافة لقاء جديد</entry>
+  <entry key="647">غرفة الإجتماع</entry>
+  <entry key="648">غرفة الحدث</entry>
+  <entry key="649">إدارة</entry>
+  <entry key="650">المستخدمين المدراء</entry>
+  <entry key="651">الغرف المدارة</entry>
+  <entry key="652">M</entry>
+  <entry key="653">هل تريد تغيير هذا المستخدم و جعله مدير هذه المنظمة؟</entry>
+  <entry key="654">الرجاء إختيار المنظمة قبل محاول إضافة مستخدم إليها!</entry>
+  <entry key="655">منظمة - مدير</entry>
+  <entry key="656">هل تريد بالفعل حذف هذا المستخدم من المنظمة؟</entry>
+  <entry key="657">هذا المستخدم هو مدير</entry>
+  <entry key="658">هذا المستخدم ليس مديراً</entry>
+  <entry key="659">هل تريد أن لا يكون هذا المستخدم مدير هذه المنظمة؟</entry>
+  <entry key="660">إضافة أو حذف مستخدمين أو غرف ضمن منظمتك</entry>
+  <entry key="661">هل تريد حقاً حذف هذا التسجيل؟</entry>
+  <entry key="662">هل تريد حقاً حذف هذا المستخدم من منظمتك؟ سوف يتم فقط حذف الإتصال بين المستخدم و منظمتك، من أجل حذف المستخدم يجب أن تدخل لوحة المسؤول.</entry>
+  <entry key="663">لا يمكنك حذف مستخدمك!</entry>
+  <entry key="664">لتنفيذ هذه الطريقة تحتاج لحساب مسؤول!</entry>
+  <entry key="665">ليس هناك أي جلسة ترتبط ب- ID هذا.</entry>
+  <entry key="666">هذا حساب مسؤول أو مدير. يمكن تحرير هذا الحساب عن طريق لوحة المسؤول.</entry>
+  <entry key="667">لإكمال التسجيل الرجاء النقر على الرابط التالي. أو نسخ URL إلى المتصفح.</entry>
+  <entry key="668">أنقر من أجل التحقق من بريدك الإلكتروني</entry>
+  <entry key="669">ليس هناك أي مستخدم لهذا الخليط.</entry>
+  <entry key="670">هذا المستخدم معطل!</entry>
+  <entry key="671">لقد تم تفعيل حسابك بنجاح!</entry>
+  <entry key="672">تسجيل الدخول الآن</entry>
+  <entry key="673">حسابك ليس شغال. إستخدم أولاً الرابط في البريد الإلكتروني الذي حصلت عليه خلال التسجيل.</entry>
+  <entry key="674">لقد تم فتح حسابك بنجاح. لقد تم إرسال بريد إلكتروني مع رمز تحقق إلى بريدك. الرجاء التحقق من بريدك الإلكتروني.</entry>
+  <entry key="675">إزالة دور الإدارة من هذا المستخدم</entry>
+  <entry key="676">منح هذا المستخدم حق الإدارة</entry>
+  <entry key="677">مستخدم</entry>
+  <entry key="678">مدخل إلى اللوح</entry>
+  <entry key="679">مدير</entry>
+  <entry key="680">إدارة: الرجاء إختيار أي مستخدم على القائمة لمنحه مدخل إلى اللوح، الإدارة أو الفيديو.</entry>
+  <entry key="681">هذا المستخدم هو مدير، لهذا لديه تلقائياً الحق في الرسم على اللوح.</entry>
+  <entry key="682">هذا أنت! لا يمكنك إزالة حقوق الإدارة من نفسك.</entry>
+  <entry key="683">السماح لهذا المستخدم نشر صوت / صورة</entry>
+  <entry key="684">حذف صوت / صورة من هذا المستخدم</entry>
+  <entry key="685">أود أن أدير هذه الغرفة</entry>
+  <entry key="686">أود أن أرسم على اللوح</entry>
+  <entry key="687">أو أن أشارك صوت / صورة</entry>
+  <entry key="688">أنت مدير هذه الغرفة</entry>
+  <entry key="689">لديك حق الرسم على اللوح</entry>
+  <entry key="690">لديك حق مشاركة صوت / صورة</entry>
+  <entry key="691">رسالة إلى المدير</entry>
+  <entry key="692">المستخدم</entry>
+  <entry key="693">يود أن يحصل على الإدارة. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف الإدارة.</entry>
+  <entry key="694">يود أن يرسم على اللوح. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف حق الرسم على اللوح.</entry>
+  <entry key="695">يود أن يتشارك الصوت/الصورة. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف حق المشاركة صوت/صورة لأي مستخدم.</entry>
+  <entry key="696">عليك إنتظار المدير حتى يدخل الغرفة.</entry>
+  <entry key="697">إلغاء</entry>
+  <entry key="698">حفظ</entry>
+  <entry key="699">يوم</entry>
+  <entry key="700">شهر</entry>
+  <entry key="701">سنة</entry>
+  <entry key="702">إيداع ملف</entry>
+  <entry key="703">إضافة مجلد</entry>
+  <entry key="704">تحديث</entry>
+  <entry key="705">قمامة</entry>
+  <entry key="706">ملفاتي (Home Drive)</entry>
+  <entry key="707">غرفة الملفات (Public Drive)</entry>
+  <entry key="708">إضافة ملف</entry>
+  <entry key="709">إضافة مجلد</entry>
+  <entry key="710">حذف مجلد</entry>
+  <entry key="711">تحرير إسم</entry>
+  <entry key="712">مجلد جديد</entry>
+  <entry key="713">هل أنت متأكد أنك تريد حذف هذا البند؟</entry>
+  <entry key="714">بحث</entry>
+  <entry key="715">بحث</entry>
+  <entry key="716">فتح وثيقة</entry>
+  <entry key="717">إظهار كل الملفات (Tree View)</entry>
+  <entry key="718">إغلاق وثيقة</entry>
+  <entry key="719">حذف ملف</entry>
+  <entry key="720">لا يسمح لك بالرسم على هذا اللوح. تحتاج أن تكون مديراً أو أن تحصل على الأقل على حق تحرير لوح. يجب أن تسأل مديراً للحصول على هذا الحق.</entry>
+  <entry key="721">خصائص الوثيقة</entry>
+  <entry key="722">بدأ العميل (external)</entry>
+  <entry key="723">بدأ العميل (HTTP)</entry>
+  <entry key="724">مسخدم يود تقاسم شاشته. هل تريد رؤيتها؟</entry>
+  <entry key="725">أنت تتشارك سطح مكتبك في هذه الأثناء. لإيقاف جلسة المشاركة الرجاء النقر زر توقف في عميل المشاركة.</entry>
+  <entry key="726">جلسة المشاركة</entry>
+  <entry key="727">أنت تتشارك سطح مكتبك!</entry>
+  <entry key="728">مشاهد سطح المكتب</entry>
+  <entry key="729">خروج</entry>
+  <entry key="730">مقاسم سطح المكتب</entry>
+  <entry key="731">أنقر على إبدأ لنشر شاشتك</entry>
+  <entry key="732">بدء المشاركة</entry>
+  <entry key="733">إيقاف المشاركة</entry>
+  <entry key="734">إختر نطاق شاشتك:</entry>
+  <entry key="735">تغيير العرض</entry>
+  <entry key="736">إنتهى المشارك من هذه الجلسة!</entry>
+  <entry key="737">تغيير الطول</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">العرض:</entry>
+  <entry key="741">الطول:</entry>
+  <entry key="742">قطع الإتصال من الخادوم</entry>
+  <entry key="743">إلغاء</entry>
+  <entry key="744">بدء الخارجي</entry>
+  <entry key="745">إذا أقفلت هذه الجلسة كلياً لن يعد بإمكانك البدء من جديد بالمشاهد لهذه الجلسة.</entry>
+  <entry key="746">تأكيد إقفال جسلة المشاهد</entry>
+  <entry key="747">مشاركة الشاشةShare Screen</entry>
+  <entry key="748">تسجيل الجلسةRecord Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">السابقPrevious</entry>
+  <entry key="752">التالي</entry>
+  <entry key="753">تحديث</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">شحن</entry>
+  <entry key="756">إجعل هذه الصفحة صفحة ملفك الإفتراضية.</entry>
+  <entry key="757">فحص الإعداد</entry>
+  <entry key="758">إفحص إعدادات الميكروفون و الكاميرا قبل دخولك الغرفة عن طريق التسجيل لبضع ثوان. يمكنك بعدها رؤية التسجيل لفحص الصوت و الصورة.</entry>
+  <entry key="759">لا تظهر هذا الإختبار بعد الآن</entry>
+  <entry key="760">إلغاء</entry>
+  <entry key="761">بدء المؤتمر</entry>
+  <entry key="762">لا تسأل مجدداً</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">يمكنك المتابعة دون الفحص إذا لا تريد نشر صورتك و صوتك. يمكن للمشاركين دون صوت و صورة متابعة إستخدام اللوح، مشاركة سطح المكتب أو كتابة رسائل دردشة.</entry>
+  <entry key="766">توقف</entry>
+  <entry key="767">مقياس المستوى</entry>
+  <entry key="768">إضغط على البداية</entry>
+  <entry key="769">بدء المؤتمر</entry>
+  <entry key="770">بدء الحدث</entry>
+  <entry key="771">إختر غرفة</entry>
+  <entry key="772">فحص الإعدادات</entry>
+  <entry key="773">بدء المؤتمر</entry>
+  <entry key="774">الطريق إلى المؤتمر:</entry>
+  <entry key="775">بدء التسجيل</entry>
+  <entry key="776">لا تظهر فحص صوت / صورة (تسجيل) قبل دخول المؤتمر</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
new file mode 100644
index 0000000..2fbf6ac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференция</entry>
+  <entry key="2">Среща</entry>
+  <entry key="3">Класна стая</entry>
+  <entry key="4">Настройки</entry>
+  <entry key="5">Профил</entry>
+  <entry key="6">Администриране</entry>
+  <entry key="7">Стоп</entry>
+  <entry key="8">Запис</entry>
+  <entry key="9">Няма наличен файл</entry>
+  <entry key="10">Запис от учител</entry>
+  <entry key="11">Свързани потребители</entry>
+  <entry key="12">Започване на конференция</entry>
+  <entry key="13">Моето име</entry>
+  <entry key="14">Видеоконференция</entry>
+  <entry key="15">Качване на файл</entry>
+  <entry key="16">Опресняване на списъка</entry>
+  <entry key="17">Към главната папка</entry>
+  <entry key="18">Нова анкета</entry>
+  <entry key="19">Нова анкета за конференцията.</entry>
+  <entry key="20">Въпрос:</entry>
+  <entry key="21">Тип анкета:</entry>
+  <entry key="22">Създаване</entry>
+  <entry key="23">Инфо: Всеки свързан потребител получава съобщение за новата анкета.</entry>
+  <entry key="24">Създаване на анкета</entry>
+  <entry key="25">Отказ</entry>
+  <entry key="26">Да/Не</entry>
+  <entry key="27">Числов 1-10</entry>
+  <entry key="28">Анкета</entry>
+  <entry key="29">Трябва да сте модератор, за да добавите нов въпрос</entry>
+  <entry key="30">Гласът Ви е отчетен.</entry>
+  <entry key="31">Вече сте гласували в анкетата.</entry>
+  <entry key="32">Гласуване</entry>
+  <entry key="33">Вашият отговор:</entry>
+  <entry key="34">Да</entry>
+  <entry key="35">Не</entry>
+  <entry key="36">иска да знае:</entry>
+  <entry key="37">Резултати от анкетата</entry>
+  <entry key="38">Въпрос:</entry>
+  <entry key="39">Резултати:</entry>
+  <entry key="40">Отговори:</entry>
+  <entry key="41">Не са започнати анкети.</entry>
+  <entry key="42">Гласуване</entry>
+  <entry key="43">Среща (макс. 4 места)</entry>
+  <entry key="44">Конференция (макс. 50 места)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Оставащи места</entry>
+  <entry key="47">Вече избран</entry>
+  <entry key="48">вход</entry>
+  <entry key="49">Модераторът е напуснал срещата.</entry>
+  <entry key="50">Системна информация</entry>
+  <entry key="51">Избор на устройства</entry>
+  <entry key="52">Избор на уебкамера:</entry>
+  <entry key="53">Избор на микрофон:</entry>
+  <entry key="54">ОК</entry>
+  <entry key="55">Отказ</entry>
+  <entry key="56">Трябва да се свържете отново.</entry>
+  <entry key="57">Редактиране на настройките</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Език:</entry>
+  <entry key="60">ОК</entry>
+  <entry key="61">Отказ</entry>
+  <entry key="62">Изчистване на дъската</entry>
+  <entry key="63">Искате ли дъската да се изчиства, преди да бъде добавена нова снимка?</entry>
+  <entry key="64">Не питай отново</entry>
+  <entry key="65">не</entry>
+  <entry key="66">Редактиране на настройките</entry>
+  <entry key="67">Потвърждение преди изчистването на дъската</entry>
+  <entry key="68">Информация за потребител</entry>
+  <entry key="69">Изчистване на зоната за рисуване</entry>
+  <entry key="70">Стъпка назад</entry>
+  <entry key="71">Стъпка напред</entry>
+  <entry key="72">Маркиране на обект</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Рисуване</entry>
+  <entry key="75">Чертаене на линия</entry>
+  <entry key="76">Подчертаване</entry>
+  <entry key="77">Правоъгълник</entry>
+  <entry key="78">Елипса</entry>
+  <entry key="79">Стрелка</entry>
+  <entry key="80">Изтриване на маркирания обект</entry>
+  <entry key="81">Искане на права на модератор</entry>
+  <entry key="82">Искане</entry>
+  <entry key="83">Отказ</entry>
+  <entry key="84">Получаване на права на модератор</entry>
+  <entry key="85">Затвори</entry>
+  <entry key="86">курсив</entry>
+  <entry key="87">получер</entry>
+  <entry key="88">Изчакване...</entry>
+  <entry key="89">Потребител иска права на модератор. Може да му дадете права само за рисуване върху дъската или напълно да му предадете правата на модератор.</entry>
+  <entry key="90">приемане</entry>
+  <entry key="91">отхвърляне</entry>
+  <entry key="92">отказ</entry>
+  <entry key="93">Изпращане на молба към следните потребители</entry>
+  <entry key="94">Прието</entry>
+  <entry key="95">Отхвърлено</entry>
+  <entry key="96">Смяна на модератор</entry>
+  <entry key="97">Вие нямате права на модератор за този курс!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">Стаята е пълна. Моля, опитайте отново по-късно.</entry>
+  <entry key="100">Елипса</entry>
+  <entry key="101">затваряне</entry>
+  <entry key="102">грешка във входните данни</entry>
+  <entry key="103">4 или повече знака; големите букви имат значение</entry>
+  <entry key="104">паролата трябва да е поне 4 знака</entry>
+  <entry key="105">потребителското име е заето</entry>
+  <entry key="106">E-mail адресът е зает</entry>
+  <entry key="107">Грешка в системата, потърсете системния администратор.</entry>
+  <entry key="108">Вход</entry>
+  <entry key="109">Име или e-mail:</entry>
+  <entry key="110">Парола:</entry>
+  <entry key="111">Език</entry>
+  <entry key="112">Вход</entry>
+  <entry key="113">Форма за регистрация</entry>
+  <entry key="114">Потребителско име:</entry>
+  <entry key="115">Парола:</entry>
+  <entry key="116">Парола отново:</entry>
+  <entry key="117">Име:</entry>
+  <entry key="118">Фамилия:</entry>
+  <entry key="119">E-mail:</entry>
+  <entry key="120">Държава:</entry>
+  <entry key="121">Регистрация</entry>
+  <entry key="122">Отказ</entry>
+  <entry key="123">Нямате регистрация?</entry>
+  <entry key="124">Начало</entry>
+  <entry key="125">Потребители</entry>
+  <entry key="126">Групи</entry>
+  <entry key="127">Организации</entry>
+  <entry key="128">Стаи</entry>
+  <entry key="129">публични</entry>
+  <entry key="130">Организация</entry>
+  <entry key="131">Вход</entry>
+  <entry key="132">Потребителско име</entry>
+  <entry key="133">Парола</entry>
+  <entry key="134">Парола отново</entry>
+  <entry key="135">Име</entry>
+  <entry key="136">Фамилия</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Рожденна дата</entry>
+  <entry key="139">Улица/Но.</entry>
+  <entry key="140">Град</entry>
+  <entry key="141">Държава</entry>
+  <entry key="142">Адрес</entry>
+  <entry key="143">Данни за потребителя</entry>
+  <entry key="144">Запис</entry>
+  <entry key="145">Запис</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Потребител. име</entry>
+  <entry key="148">Име</entry>
+  <entry key="149">Фамилия</entry>
+  <entry key="150">Напред</entry>
+  <entry key="151">Назад</entry>
+  <entry key="152">Изтриване на запис</entry>
+  <entry key="153">Отказ</entry>
+  <entry key="154">Изтриване</entry>
+  <entry key="155">Нов запис</entry>
+  <entry key="156">Опресняване на записа</entry>
+  <entry key="157">Изтриване на запис</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">изключен</entry>
+  <entry key="160">включен</entry>
+  <entry key="161">Организации</entry>
+  <entry key="162">Календар</entry>
+  <entry key="163">Затваряне</entry>
+  <entry key="164">Организация ID</entry>
+  <entry key="165">Име</entry>
+  <entry key="166">Потребител</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Администратор</entry>
+  <entry key="169">Ниво потребител</entry>
+  <entry key="170">Организация</entry>
+  <entry key="171">име</entry>
+  <entry key="172">Добавяне на организация</entry>
+  <entry key="173">Добавяне на организация</entry>
+  <entry key="174">Отказ</entry>
+  <entry key="175">Добавяне</entry>
+  <entry key="176">Изтриване</entry>
+  <entry key="177">Потребител</entry>
+  <entry key="178">добавяне потребител</entry>
+  <entry key="179">изтриване потребител</entry>
+  <entry key="180">Добавяне на потребител към огранизация</entry>
+  <entry key="181">Търсене на потребител</entry>
+  <entry key="182">Търсене</entry>
+  <entry key="183">Потребител</entry>
+  <entry key="184">Организация</entry>
+  <entry key="185">Вход</entry>
+  <entry key="186">Стаи за конференции</entry>
+  <entry key="187">Стаи за конференции</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Име</entry>
+  <entry key="190">публична</entry>
+  <entry key="191">Организации</entry>
+  <entry key="192">Стаи за срещи</entry>
+  <entry key="193">Име</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">публична</entry>
+  <entry key="196">Коментар</entry>
+  <entry key="197">запазване и експорт</entry>
+  <entry key="198">зареждане</entry>
+  <entry key="199">запазване като</entry>
+  <entry key="200">Файл</entry>
+  <entry key="201">файл</entry>
+  <entry key="202">отказ</entry>
+  <entry key="203">запазване</entry>
+  <entry key="204">Грешка</entry>
+  <entry key="205">зареждане...</entry>
+  <entry key="206">обектите са заредени</entry>
+  <entry key="207">синхронизация на клиентите, чакащи клиенти:</entry>
+  <entry key="208">Зареждане на изображение</entry>
+  <entry key="209">синхронизация на клиентите, чакащи клиенти:</entry>
+  <entry key="210">изчистване на полето за рисуване</entry>
+  <entry key="211">Изчистване на полето? Цялата информация на дъската ще бъде изгубена.</entry>
+  <entry key="212">Потвърждение преди зареждане на файл</entry>
+  <entry key="213">Изпращане на покана</entry>
+  <entry key="214">Изпращане на покана</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Получател</entry>
+  <entry key="217">Съобщение</entry>
+  <entry key="218">Изпрати</entry>
+  <entry key="219">отказ</entry>
+  <entry key="220">изпрати</entry>
+  <entry key="221">Данни за потребител</entry>
+  <entry key="222">Вашият ник за тази конференция</entry>
+  <entry key="223">Ник</entry>
+  <entry key="224">Име</entry>
+  <entry key="225">Фамилия</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Език</entry>
+  <entry key="228">вход</entry>
+  <entry key="229">Зареждане</entry>
+  <entry key="230">Зареждане на данни, моля изчакайте!</entry>
+  <entry key="231">Грешна парола</entry>
+  <entry key="232">Моля въведете две еднакви пароли от поне 6 знака</entry>
+  <entry key="233">Грешен e-mail</entry>
+  <entry key="234">Въвели сте грешен e-mail адрес</entry>
+  <entry key="235">Регистрацията е завършена</entry>
+  <entry key="236">Акаунтът е създаден. Може да влезете в системата.</entry>
+  <entry key="237">В момента не може да споделяте екрана си. Някой друг вече споделя своя екран.</entry>
+  <entry key="238">Споделянето е забранено.</entry>
+  <entry key="239">Споделяне на екран</entry>
+  <entry key="240">Слаба Интернет връзка: нямате възможност за синхронизация на екрана. Ще има изпускане на кадри. Ако това съобщение се показва често, може да помолите модератора да намали качеството.</entry>
+  <entry key="241">Екран на:</entry>
+  <entry key="242">Рисуване</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файлове</entry>
+  <entry key="246">Членове</entry>
+  <entry key="247">Сваляне на оригиналния документ</entry>
+  <entry key="248">Сваляне на PDF</entry>
+  <entry key="249">Зареждане на презентацията на дъската</entry>
+  <entry key="250">Конфигурация</entry>
+  <entry key="251">Влачене на обект</entry>
+  <entry key="252">Промяна размерите на обект</entry>
+  <entry key="253">%</entry>
+  <entry key="254">от</entry>
+  <entry key="255">Към първа страница</entry>
+  <entry key="256">Към предишната страница</entry>
+  <entry key="257">Към следващата страница</entry>
+  <entry key="258">Към последна страница</entry>
+  <entry key="259">Мащаб --</entry>
+  <entry key="260">Мащаб ++</entry>
+  <entry key="261">Г-н</entry>
+  <entry key="262">Г-жа</entry>
+  <entry key="263">Конфигурация</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Конфигурация</entry>
+  <entry key="267">ключ</entry>
+  <entry key="268">последна промяна</entry>
+  <entry key="269">променен от</entry>
+  <entry key="270">коментар</entry>
+  <entry key="271">Стойност</entry>
+  <entry key="272">от</entry>
+  <entry key="273">Потребители</entry>
+  <entry key="274">изтриване на потребител от организация</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Потребителят вече е член на организацията.</entry>
+  <entry key="277">Новини</entry>
+  <entry key="278">Бързи връзки</entry>
+  <entry key="279">Към конференция</entry>
+  <entry key="280">Към аудитория</entry>
+  <entry key="281">Помощ</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Бъг репорт!</entry>
+  <entry key="285">повече</entry>
+  <entry key="286">Сайт на проекта (http://openmeetings.apache.org)</entry>
+  <entry key="287">Потребителски мейлинг лист (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запомни ме</entry>
+  <entry key="289">Съдържание</entry>
+  <entry key="290">Начална страница</entry>
+  <entry key="291">График на срещите</entry>
+  <entry key="292">График на събитията</entry>
+  <entry key="293">Публични срещи</entry>
+  <entry key="294">Частни срещи</entry>
+  <entry key="295">Публични събития</entry>
+  <entry key="296">Частни събития</entry>
+  <entry key="297">Публично съдържание</entry>
+  <entry key="298">Частно съдържание</entry>
+  <entry key="299">Лично съдържание</entry>
+  <entry key="300"></entry>
+  <entry key="301">Права на модератор</entry>
+  <entry key="302">Искане права на модератор</entry>
+  <entry key="303">Анкети</entry>
+  <entry key="304">Избор на файл</entry>
+  <entry key="305">Настройки</entry>
+  <entry key="306">Камера и микрофон</entry>
+  <entry key="307">Настройки на дъската</entry>
+  <entry key="308">Изход</entry>
+  <entry key="309">Назад към стаите</entry>
+  <entry key="310">Изход</entry>
+  <entry key="311">Забравена парола?</entry>
+  <entry key="312">Нова парола</entry>
+  <entry key="313">По E-mail</entry>
+  <entry key="314">По потребителско име</entry>
+  <entry key="315">E-mail</entry>
+  <entry key="316">Потребителско име</entry>
+  <entry key="317">Изпращане на E-mail с линк за нова парола</entry>
+  <entry key="318">Не е намерен такъв e-mail.</entry>
+  <entry key="319">Моля, въведете E-mail или потребителско име.</entry>
+  <entry key="320">Не е намерено такова потребителско име.</entry>
+  <entry key="321">Изпратен е e-mail, съдържащ линк за нова парола.</entry>
+  <entry key="322">Грешка</entry>
+  <entry key="323">Съобщение</entry>
+  <entry key="324">Не е намерен такъв потребител.</entry>
+  <entry key="325">Нова парола</entry>
+  <entry key="326">Потребителско име</entry>
+  <entry key="327">промяна на паролата</entry>
+  <entry key="328">нова парола</entry>
+  <entry key="329">нова парола отново</entry>
+  <entry key="330">Въведените пароли не са еднакви.</entry>
+  <entry key="331">4 или повече знака; главните букви имат значение!</entry>
+  <entry key="332">Паролата е настроена, вече може да влезете в системата.</entry>
+  <entry key="333">ОК</entry>
+  <entry key="334">Грешка. Докладвайте за бъг!</entry>
+  <entry key="335">Потребителското име не е намерено.</entry>
+  <entry key="336">Невалидна парола</entry>
+  <entry key="337">Успешен изход от системата</entry>
+  <entry key="338">Забранена е регистрацията на нови потребители.</entry>
+  <entry key="339">Невалиден e-mail</entry>
+  <entry key="340">дублиране на името на файла, изберете друго име</entry>
+  <entry key="341">името на файла е много кратко</entry>
+  <entry key="342">Не може да се запази адреса</entry>
+  <entry key="343">Потребителят е добавен, но трябва да се добави към Организация, за да може да влезе в системата.</entry>
+  <entry key="344">Нов запис</entry>
+  <entry key="345">Не е намерено поле с такова полеID</entry>
+  <entry key="346">Не е намерен етикет на това поле</entry>
+  <entry key="347">Необходима е ауторизация като администратор</entry>
+  <entry key="348">Редактор на език</entry>
+  <entry key="349">Език</entry>
+  <entry key="350">Етикет-ID</entry>
+  <entry key="351">Име на етикета</entry>
+  <entry key="352">Стойност</entry>
+  <entry key="353">Стойности на полето</entry>
+  <entry key="354">Име на етикета</entry>
+  <entry key="355">Стойност на етикета</entry>
+  <entry key="356">Етикет-ID</entry>
+  <entry key="357">Може да изтриете само етикета, но НЕ и полето! Не може да изтриете полето, защото то съдържа етикети на други езици.</entry>
+  <entry key="358">Невалидно Етикет-ID.</entry>
+  <entry key="359">Не може да изтриете това поле.</entry>
+  <entry key="360">експорт</entry>
+  <entry key="361">Трябва да излезете от системата, за да видите промените.</entry>
+  <entry key="362">Добавяне на нов език</entry>
+  <entry key="363">изтриване на език</entry>
+  <entry key="364">Добавяне на нов език</entry>
+  <entry key="365">Име</entry>
+  <entry key="366">добавяне на език</entry>
+  <entry key="367">Бекъп</entry>
+  <entry key="368">първа страница</entry>
+  <entry key="369">предишна страница</entry>
+  <entry key="370">следваща страница</entry>
+  <entry key="371">последна страница</entry>
+  <entry key="372">потребителят говори (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">изкл./вкл. на звука</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Вашите настройки</entry>
+  <entry key="376">Здравейте,</entry>
+  <entry key="377">Редакт.на профил</entry>
+  <entry key="378">Нови съобщения:</entry>
+  <entry key="379">Качи нова снимка</entry>
+  <entry key="380">Данни на потребител - експорт</entry>
+  <entry key="381">Всички организации трябва вече да съществуват!</entry>
+  <entry key="382">старт на експорт</entry>
+  <entry key="383">По организация</entry>
+  <entry key="384">старт на експорт</entry>
+  <entry key="385">Данни на потребител - импорт</entry>
+  <entry key="386">choose-users.xml</entry>
+  <entry key="387">импорт</entry>
+  <entry key="388">Експорт в XML - Тези файлове може да се използват в: &amp;lt;br/&amp;gt; - Помощ за проекта - Импорт в друга система &amp;lt;br/&amp;gt; - Бекъп - Настройки&amp;lt;br/&amp;gt; - Сложете файла в папката language на новата инсталация.</entry>
+  <entry key="389">Изберете XML файл за импорт на език. &amp;lt;br/&amp;gt; Изберете правилния език от падащото меню! &amp;lt;br/&amp;gt; Без значение от името на файла, &amp;lt;br/&amp;gt; той ще бъде импортнат в този език!</entry>
+  <entry key="390">импорт - изберете файл</entry>
+  <entry key="391">Запазване като</entry>
+  <entry key="392">Име:</entry>
+  <entry key="393">Коментар:</entry>
+  <entry key="394">запазване</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Преглед на записи</entry>
+  <entry key="397">Записи от публични и частни стаи</entry>
+  <entry key="398">Потребители:</entry>
+  <entry key="399">Включили се:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Потребители в тази стая:</entry>
+  <entry key="402">опресняване</entry>
+  <entry key="403">Тази стая е пълна. Пробвайте отново след няколко минути.</entry>
+  <entry key="404">натиснете върху стая за детайли</entry>
+  <entry key="405">Чат с потребителите от тази стая:</entry>
+  <entry key="406">Стая:</entry>
+  <entry key="407">Потребители в тази стая:</entry>
+  <entry key="408">от:</entry>
+  <entry key="409">плейване на запис</entry>
+  <entry key="410">Дължина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим на запис! Не може да променяте стойности, това е записан файл!</entry>
+  <entry key="413">Плейване на този запис</entry>
+  <entry key="414">Плей / Пауза</entry>
+  <entry key="415">Старт запис</entry>
+  <entry key="416">Стоп запис</entry>
+  <entry key="417">Запис:</entry>
+  <entry key="418">В момента друг потребител прави запис.</entry>
+  <entry key="419">Запис! От потребител:</entry>
+  <entry key="420">отказ</entry>
+  <entry key="421">Записът ще бъде отказан и няма да бъде запаметен.</entry>
+  <entry key="422">подновяване</entry>
+  <entry key="423">Затворете този прозорец за подновяване на записа.</entry>
+  <entry key="424">смяна на цвета на линията</entry>
+  <entry key="425">Избор на цвят</entry>
+  <entry key="426">Изкл./Вкл. цвят на линия</entry>
+  <entry key="427">смяна на цвета на запълването</entry>
+  <entry key="428">Изкл./Вкл. цвят на запълване</entry>
+  <entry key="429">смяна ширината на линията</entry>
+  <entry key="430">затваряне</entry>
+  <entry key="431">смяна на размера на шрифта</entry>
+  <entry key="432">Изтриване на запис</entry>
+  <entry key="433">Гост</entry>
+  <entry key="434">От:</entry>
+  <entry key="435">Име</entry>
+  <entry key="436">Стая</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">отказ</entry>
+  <entry key="439">старт</entry>
+  <entry key="440">Име</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Изтриване на чат история</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">изпращане на съобщение</entry>
+  <entry key="445">Емотикони</entry>
+  <entry key="446">Емотикони</entry>
+  <entry key="447">Избор на устройства</entry>
+  <entry key="448">Аудио и Видео</entry>
+  <entry key="449">Само Аудио</entry>
+  <entry key="450">Само Видео</entry>
+  <entry key="451">без Аудио/Видео (статично изображение)</entry>
+  <entry key="452">Няма да се показва никакво Аудио/Видео от Вашето PC, вместо това ще се показва статично изображение. Може да изберете тази настройка, ако имате бавна Интернет връзка.</entry>
+  <entry key="453">ПОН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧЕТ</entry>
+  <entry key="457">ПЕТ</entry>
+  <entry key="458">СЪБ</entry>
+  <entry key="459">НЕД</entry>
+  <entry key="460">Понеделник</entry>
+  <entry key="461">Вторник</entry>
+  <entry key="462">Сряда</entry>
+  <entry key="463">Четвъртък</entry>
+  <entry key="464">Петък</entry>
+  <entry key="465">Събота</entry>
+  <entry key="466">Неделя</entry>
+  <entry key="467">седм</entry>
+  <entry key="468">Седмица</entry>
+  <entry key="469">Януари</entry>
+  <entry key="470">Февруари</entry>
+  <entry key="471">Март</entry>
+  <entry key="472">Април</entry>
+  <entry key="473">Май</entry>
+  <entry key="474">Юни</entry>
+  <entry key="475">Юли</entry>
+  <entry key="476">Август</entry>
+  <entry key="477">Септември</entry>
+  <entry key="478">Октомври</entry>
+  <entry key="479">Ноември</entry>
+  <entry key="480">Декември</entry>
+  <entry key="481">Календар</entry>
+  <entry key="482">Участници</entry>
+  <entry key="483">Показване настройки на изгледа</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Височина</entry>
+  <entry key="486">Видео-контейнер</entry>
+  <entry key="487">Модерация-контейнер</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Дъска-контейнер</entry>
+  <entry key="490">Включен</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Височина</entry>
+  <entry key="493">Файлове,Чат,Участници-контейнер</entry>
+  <entry key="494">Включен</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Ширина | Височина</entry>
+  <entry key="497">Модераторът е напуснал стаята и никой не присъства в момента. Може да поискате права на модаратор или да изчакате.</entry>
+  <entry key="498">Няма модератор в стаята, но има други участници. Може да поискате права на модаратор или да изчакате.</entry>
+  <entry key="499">Обратна връзка с {0}</entry>
+  <entry key="500">{0} - Покана</entry>
+  <entry key="501">Съобщение от потребител:</entry>
+  <entry key="502">Съобщение:</entry>
+  <entry key="503">Натиснете линка, за да участвате в срещата:</entry>
+  <entry key="504">Натиснете тук, за вход в стаята</entry>
+  <entry key="505">Ако имате проблеми с линка, копирайте го и го вмъкнете в браузъра:</entry>
+  <entry key="506">Регистрация в {0}</entry>
+  <entry key="507">Потребителски данни:</entry>
+  <entry key="508">Потребителско име:</entry>
+  <entry key="509">Парола:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">Екип на {0}</entry>
+  <entry key="512">Регистрация в {0}</entry>
+  <entry key="513">Нова парола за {0}</entry>
+  <entry key="514">Натиснете линка, за да въведете нова парола.</entry>
+  <entry key="515">Натиснете тук, за да въведете нова парола.</entry>
+  <entry key="516">Ако имате проблеми с линка, копирайте го и го вмъкнете в браузъра:</entry>
+  <entry key="517">Нова парола за {0}</entry>
+  <entry key="518">Въведете валидна дата, например 24.11.2001 (дд.мм.гггг)</entry>
+  <entry key="519">Въведете валиден e-mail, например name@mail.com</entry>
+  <entry key="520">Въведете десетично число, например 1.00</entry>
+  <entry key="521">Въведете цяло число, например 100</entry>
+  <entry key="522">Въведете валиден телефон, например +359 888 123456</entry>
+  <entry key="523">Въведете валидно време, например 12:23 (чч:мм)</entry>
+  <entry key="524">Защита с парола</entry>
+  <entry key="525">Парола</entry>
+  <entry key="526">Период на валидност</entry>
+  <entry key="527">Безкраен</entry>
+  <entry key="528">Период</entry>
+  <entry key="529">Един път</entry>
+  <entry key="530">Валидност от:</entry>
+  <entry key="531">Валидност до:</entry>
+  <entry key="532">Покана за {0}</entry>
+  <entry key="533">Няма покана на раположение, за този код.</entry>
+  <entry key="534">Поканата вече е използвана. Този тип покани не могат да се използват повторно.</entry>
+  <entry key="535">Кодът за покана не е валиден.</entry>
+  <entry key="536">Парола</entry>
+  <entry key="537">Проверка на парола</entry>
+  <entry key="538">Грешна парола</entry>
+  <entry key="539">Аудио/Видео</entry>
+  <entry key="540">Синхронизация на Аудио/Видео</entry>
+  <entry key="541">Входът в системата е коректен, но сесията Ви не е активна. Трябва да опитате повторен вход в системата.</entry>
+  <entry key="542">Грешна сесия или липса на админ права. Трябва да имате админ права, за да добавяте нови потребители.</entry>
+  <entry key="543">Сесията не може да се свърже с отдалечения потребител.</entry>
+  <entry key="544">Рекордерът е в момента в БЕТА-версия!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-ос</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-ос</entry>
+  <entry key="549">шир</entry>
+  <entry key="550">ширина</entry>
+  <entry key="551">вис</entry>
+  <entry key="552">височина</entry>
+  <entry key="553">Промяна прозрачност</entry>
+  <entry key="554">Отваряне браузър</entry>
+  <entry key="555">Затваряне браузър</entry>
+  <entry key="556">Връзката със сървъра е прекъсната. Трябва да заредите наново приложението или да проверите мрежата си.</entry>
+  <entry key="557">Указател</entry>
+  <entry key="558">Синхронизация</entry>
+  <entry key="559">Синхронизация на потребители, моля изчакайте</entry>
+  <entry key="560">&amp;lt;u&amp;gt;Сваляне в SVG&amp;lt;/u&amp;gt;</entry>
+  <entry key="561">&amp;lt;u&amp;gt;Сваляне в PNG&amp;lt;/u&amp;gt;</entry>
+  <entry key="562">&amp;lt;u&amp;gt;Сваляне в JPG&amp;lt;/u&amp;gt;</entry>
+  <entry key="563">&amp;lt;u&amp;gt;Сваляне в PDF&amp;lt;/u&amp;gt;</entry>
+  <entry key="564">&amp;lt;u&amp;gt;Сваляне в TIF&amp;lt;/u&amp;gt;</entry>
+  <entry key="565">Напомняне:</entry>
+  <entry key="566">Категория:</entry>
+  <entry key="567">Повтаряне:</entry>
+  <entry key="568">няма</entry>
+  <entry key="569">Място:</entry>
+  <entry key="570">Начало</entry>
+  <entry key="571">Край</entry>
+  <entry key="572">Заглавие:</entry>
+  <entry key="573">Коментар:</entry>
+  <entry key="574">Покана</entry>
+  <entry key="575">Всеки ден</entry>
+  <entry key="576">Всеки месец</entry>
+  <entry key="577">Всяка година</entry>
+  <entry key="578">Краят на събитието е след началото му!</entry>
+  <entry key="579">Въведете заглавие!</entry>
+  <entry key="580">Отдясно наляво</entry>
+  <entry key="581">Активирайте, ако искате да пишете на език отдясно наляво (обратен ред на думите)</entry>
+  <entry key="582">Табло</entry>
+  <entry key="583">Гледане на записани срещи</entry>
+  <entry key="584">Среща - създава конференция с 4 (до 16) потребители&amp;lt;br/&amp;gt;като всички имат аудио + видео достъп</entry>
+  <entry key="585">Събитие - създава конференция с до 200 потребители&amp;lt;br/&amp;gt;като само Модераторът има аудио + видео достъп</entry>
+  <entry key="586">Създаване на потребители, стаи, организации&amp;lt;br/&amp;gt;+ промяна на конфигурациите</entry>
+  <entry key="587">Потребители в стаята в момента</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Логин</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Зареждане на документ. Моля изчакайте докато всички клиенти бъдат синхронизирани.</entry>
+  <entry key="592">Качването е завършено, конвертиране на документа...</entry>
+  <entry key="593">Старт качване</entry>
+  <entry key="594">Моля изберете файл от диска.</entry>
+  <entry key="595">Отказ</entry>
+  <entry key="596">Избор на файл</entry>
+  <entry key="597">Връзки</entry>
+  <entry key="598">Стойност</entry>
+  <entry key="599">СтриймID</entry>
+  <entry key="600">Логин</entry>
+  <entry key="601">Свързан от</entry>
+  <entry key="602">Стая / Обхват</entry>
+  <entry key="603">Кик потребител</entry>
+  <entry key="604">Кик потребител</entry>
+  <entry key="605">Наистина ли искате кик на потребителя?&amp;lt;br/&amp;gt;Това само ще махне клиента от стаята, и след това той може да се логне наново.</entry>
+  <entry key="606">Сесията Ви е приключена от Администратор или Модератор.</entry>
+  <entry key="607">Телефон</entry>
+  <entry key="608">Потребителят е Модератор в тази стая</entry>
+  <entry key="609">Потребителят има право да рисува на дъската.</entry>
+  <entry key="610">Ре(старт) на Аудио/Видео или промяна на настройките</entry>
+  <entry key="611">Позволяване на потребителя да рисува на дъската</entry>
+  <entry key="612">Премахва правото за рисуване на дъската</entry>
+  <entry key="613">Потребители</entry>
+  <entry key="614">Файлове</entry>
+  <entry key="615">Бяла дъска</entry>
+  <entry key="616">Чат</entry>
+  <entry key="617">Вашият акаунт е свързан с повече от 1 организация. Моля, изберете една за текущата сесия.</entry>
+  <entry key="618">Стаята е пълна в момента. Моля, пробвайте отново по-късно.</entry>
+  <entry key="619">Тип стая</entry>
+  <entry key="620">Уговорена среща</entry>
+  <entry key="621">Време на сървъра</entry>
+  <entry key="622">Напомняне</entry>
+  <entry key="623">Съобщение от потребител:</entry>
+  <entry key="624">Съобщение:</entry>
+  <entry key="625">Натиснете тук за участие в срещата</entry>
+  <entry key="626">Натиснете тук за вход в стаята</entry>
+  <entry key="627">Ако имате проблеми с този линк, моля копирайте и го вмъкнете в браузъра:</entry>
+  <entry key="628">вътр. търсене</entry>
+  <entry key="629">Добавяне външни</entry>
+  <entry key="630">Име</entry>
+  <entry key="631">Фамилия</entry>
+  <entry key="632">Е-майл</entry>
+  <entry key="633">Потвърждаване изход</entry>
+  <entry key="634">Искате ли да излезете сега?</entry>
+  <entry key="635">Дейности</entry>
+  <entry key="636">Демо стая</entry>
+  <entry key="637">Демо време</entry>
+  <entry key="638">Таймер на срещата</entry>
+  <entry key="639">Тази стая е Демо стая. За да изключите това предупреждение, трябва да влезете в частна стая или да настроите собствен сървър.</entry>
+  <entry key="640">Модериран</entry>
+  <entry key="641">Моля изчакайте докато Модераторът влезе в стаята. Модераторът може да е учител, администратор или създател на стаята.</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Споделен екран</entry>
+  <entry key="644">Има нов споделен екран от потребител:</entry>
+  <entry key="645">Старт на споделяне</entry>
+  <entry key="646">Добавяне на среща</entry>
+  <entry key="647">Стая за среща</entry>
+  <entry key="648">Стая за събитие</entry>
+  <entry key="649">Модерация</entry>
+  <entry key="650">Модерация на потребители</entry>
+  <entry key="651">Модерация на стаи</entry>
+  <entry key="652">М</entry>
+  <entry key="653">Искате ли този потребител да стане Модератор на тази организация?</entry>
+  <entry key="654">Моля изберете първо организация!</entry>
+  <entry key="655">Организация - Модератор</entry>
+  <entry key="656">Искате ли да изтриете потребителя от организацията?</entry>
+  <entry key="657">Потребителят е Модератор</entry>
+  <entry key="658">Потребителят не е Модератор</entry>
+  <entry key="659">Искате ли този потребител да не бъде Модератор на тази организация?</entry>
+  <entry key="660">Добавяне/премахване на потребители и стаи от организацията</entry>
+  <entry key="661">Наистина ли искате да изтриете този запис?</entry>
+  <entry key="662">Наистина ли искате да изтриете потребителя от организацията? Това само ще прекъсне връзката между потребителя и организацията, за да изтриете потребителя изцяло трябва да влезете в Администраторския панел.</entry>
+  <entry key="663">Не може да изтриете своя потребител!</entry>
+  <entry key="664">Тази операция изисква Администраторски акаунт!</entry>
+  <entry key="665">Няма сесия свързана с това ID.</entry>
+  <entry key="666">Това е Администраторски или Модераторски акаунт. Може да редактирате този акаунт само през Административния панел.</entry>
+  <entry key="667">За да приключите регистрацията, натиснете следния линк или копирайте адреса в браузъра си.</entry>
+  <entry key="668">Натиснете, за да потвърдите е-майла.</entry>
+  <entry key="669">Не беше намерен такъв потребител.</entry>
+  <entry key="670">Този потребител вече е активиран.</entry>
+  <entry key="671">Успешно активирахте акаунта си!</entry>
+  <entry key="672">Вход сега</entry>
+  <entry key="673">Вашият акаунт не е активиран. Използвайте линка за потвърждение в изпратения мейл.</entry>
+  <entry key="674">Успешна регистрация! Изпратен е мейл за потвърждение на регистрацията и активиране на акаунта. Моля проверете мейла си.</entry>
+  <entry key="675">Изтриване на Модераторска роля за този потребител</entry>
+  <entry key="676">Даване на Модераторски права на този потребител</entry>
+  <entry key="677">Потребител</entry>
+  <entry key="678">Достъп до дъската</entry>
+  <entry key="679">Модератор</entry>
+  <entry key="680">Модерация: моля изберете потребител от списъка за даване на права до дъската, модерация или видео.</entry>
+  <entry key="681">Този потребител вече е Модератор, затова той има достъп до дъската.</entry>
+  <entry key="682">Не може да премахнете Модераторските права от своя потребител!</entry>
+  <entry key="683">Позволяване на потребителя да публикува своето Аудио/Видео.</entry>
+  <entry key="684">Изтриване на Аудио/Видео за този потребител</entry>
+  <entry key="685">Искам права на Модератор за тази стая.</entry>
+  <entry key="686">Искам права за рисуване върху дъската.</entry>
+  <entry key="687">Искам права за споделяне на Аудио/Видео.</entry>
+  <entry key="688">Вие сте Модератор на тази стая.</entry>
+  <entry key="689">Вие имате права за рисуване върху дъската.</entry>
+  <entry key="690">Вие имате права за споделяне на Аудио/Видео.</entry>
+  <entry key="691">Съобщение към Модератор</entry>
+  <entry key="692">Потребителят</entry>
+  <entry key="693">иска права на Модератор. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="694">иска права за рисуване върху дъската. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="695">иска права за споделяне на Аудио/Видео. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="696">Трябва да изчакате, докато Модераторът влезе в стаята.</entry>
+  <entry key="697">Отказ</entry>
+  <entry key="698">Запазване</entry>
+  <entry key="699">Ден</entry>
+  <entry key="700">Месец</entry>
+  <entry key="701">Година</entry>
+  <entry key="702">Качване на файл</entry>
+  <entry key="703">Нова папка</entry>
+  <entry key="704">Опресняване</entry>
+  <entry key="705">Кошче</entry>
+  <entry key="706">Моите файлове (home)</entry>
+  <entry key="707">Файлове за стаята</entry>
+  <entry key="708">Нов файл</entry>
+  <entry key="709">Нова папка</entry>
+  <entry key="710">Изтриване на папка</entry>
+  <entry key="711">Редактиране на име</entry>
+  <entry key="712">Нова папка</entry>
+  <entry key="713">Сигурни ли сте, че искате да изтриете този елемент?</entry>
+  <entry key="714">Търсене</entry>
+  <entry key="715">Търсене</entry>
+  <entry key="716">Отваряне на документ</entry>
+  <entry key="717">Показване на всички файлове (дървовиден изглед)</entry>
+  <entry key="718">Затваряне на документ</entry>
+  <entry key="719">Изтриване на файл</entry>
+  <entry key="720">Нямате права за рисуване върху дъската. Може да поискате това право от Модератор.</entry>
+  <entry key="721">Свойства на документ</entry>
+  <entry key="722">Старт клиент (външен)</entry>
+  <entry key="723">Старт клиент (HTTP)</entry>
+  <entry key="724">Потребител иска да сподели своя екран. Искате ли да го видите?</entry>
+  <entry key="725">В момента споделяте своя екран. За да спрете споделянето, натиснете бутона Stop.</entry>
+  <entry key="726">Сесия за споделяне</entry>
+  <entry key="727">В момента споделяте своя екран!</entry>
+  <entry key="728">Десктоп преглед</entry>
+  <entry key="729">Изход</entry>
+  <entry key="730">Десктоп споделяне</entry>
+  <entry key="731">Натиснете Start, за да публикувате своя екран.</entry>
+  <entry key="732">Старт на споделяне</entry>
+  <entry key="733">Стоп на споделяне</entry>
+  <entry key="734">Избор на част от екрана:</entry>
+  <entry key="735">Промяна на ширина</entry>
+  <entry key="736">Сесията на споделяне е приключила!</entry>
+  <entry key="737">Промяна на височина</entry>
+  <entry key="738">X-изместване</entry>
+  <entry key="739">Y-изместване</entry>
+  <entry key="740">Ширина:</entry>
+  <entry key="741">Височина:</entry>
+  <entry key="742">Връзката е затворена от сървъра</entry>
+  <entry key="743">Отказ</entry>
+  <entry key="744">Старт външен</entry>
+  <entry key="745">Ако затворите сесията изцяло, няма да може да възстановите прегледа на тази сесия.</entry>
+  <entry key="746">Потвърждаване затваряне на сесията за преглед</entry>
+  <entry key="747">Споделяне на екран</entry>
+  <entry key="748">Запис на сесия</entry>
+  <entry key="749">Общ браузър</entry>
+  <entry key="750">Firefox на Windows не позволява чисто общо браузване. Моля изберете друг браузър.</entry>
+  <entry key="751">Предишен</entry>
+  <entry key="752">Следващ</entry>
+  <entry key="753">Презареждане</entry>
+  <entry key="754">Начало</entry>
+  <entry key="755">Зареждане</entry>
+  <entry key="756">Добавяне на сайт като сайт по подразбиране за този профил.</entry>
+  <entry key="757">Тест на настройките</entry>
+  <entry key="758">Проверете настройките на микрофона и камерата си. След това може да пуснете записа за проверка на гласа и картината.</entry>
+  <entry key="759">Не показвай повече този тест</entry>
+  <entry key="760">Отказ</entry>
+  <entry key="761">Старт конференция</entry>
+  <entry key="762">Не питай повече</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Може да продължите без тест, ако не планирате да публикувате видео/аудио. Участниците без Аудио/Видео могат да използват дъската, да споделят екрана си и да пишат чат съобщения.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Височина</entry>
+  <entry key="768">Натиснете Start</entry>
+  <entry key="769">Старт конференция</entry>
+  <entry key="770">Старт събитие</entry>
+  <entry key="771">Избор на стая</entry>
+  <entry key="772">Проба настройки</entry>
+  <entry key="773">Старт конференция</entry>
+  <entry key="774">Тип конференция:</entry>
+  <entry key="775">Начало запис</entry>
+  <entry key="776">Не показвай Аудио/Видео тест запис, преди влизане в конференцията.</entry>
+  <entry key="777">Публични стаи</entry>
+  <entry key="778">До публичните стаи имат достъп всички потребители.</entry>
+  <entry key="779">Частни стаи</entry>
+  <entry key="780">До частните стаи имат достъп само потребителите от същата организация.</entry>
+  <entry key="781">Моите стаи</entry>
+  <entry key="782">Стаите в тази секция са създадени за лично ползване. Те са създадени от календара и имат начална и крайна дата. Те се описват в тази секция, докато са валидни.</entry>
+  <entry key="783">Трябва да сте Модератор за това действие.</entry>
+  <entry key="784">Искане за Модератор</entry>
+  <entry key="785">Искане за рисуване върху дъската</entry>
+  <entry key="786">Искане достъп до камера/микрофон</entry>
+  <entry key="787">Сесията вече се използва - не може да я използвате повторно.</entry>
+  <entry key="788">СТАРТ</entry>
+  <entry key="789">ИЗХОД</entry>
+  <entry key="790">Наистина ли искате да излезете? Може би трябва да изчистите дъската, качените документи и чат историята.</entry>
+  <entry key="791">Изход конференция</entry>
+  <entry key="792">Стаи</entry>
+  <entry key="793">Изберете стая за срещата</entry>
+  <entry key="794">Има незапазено събитие в календара. Моля, запазете го или го изтрийте.</entry>
+  <entry key="795">Моля добавете поне 1 присъстващ на срещата!</entry>
+  <entry key="796">Наистина ли искате да изтриете това събитие?</entry>
+  <entry key="797">Предупреждение</entry>
+  <entry key="798">Добавяне събитие</entry>
+  <entry key="799">ден</entry>
+  <entry key="800">седмица</entry>
+  <entry key="801">месец</entry>
+  <entry key="802">Описание</entry>
+  <entry key="803">Присъстващи</entry>
+  <entry key="804">Моля, следвайте инструкциите и натиснете бутона Start, за да започнете конференция веднага или отидете в календара, за да планирате бъдеща конференция.</entry>
+  <entry key="805">Планиране среща</entry>
+  <entry key="806">За да планирате среща, добавете събитие към каледара. За всяко събитие в каледара ще бъде автоматично създадена стая за конференция. Вие и всички присъстващи ще получат мейл с линк към стаята&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; Може да изберете различни типове стаи с различен тип модерация.</entry>
+  <entry key="807">Нужда от помощ?</entry>
+  <entry key="808">Ограничен</entry>
+  <entry key="809">Търсене</entry>
+  <entry key="810">Добавяне</entry>
+  <entry key="811">Не е избран потребител. Моля изберете елемент от списъка и го добавете.</entry>
+  <entry key="812">Добавяне на присъстващ</entry>
+  <entry key="813">Запазване</entry>
+  <entry key="814">Изтриване</entry>
+  <entry key="815">Детайли за събитието</entry>
+  <entry key="816">Модератори по подразбиране</entry>
+  <entry key="817">Супер</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Име</entry>
+  <entry key="820">Е-майл</entry>
+  <entry key="821">Добавяне на нов Модератор по подразбиране</entry>
+  <entry key="822">е Супер Модератор</entry>
+  <entry key="823">Ако стаята е модерирана, Модератор или Администратор автоматично са с права на Модератор. Ако искате определен потребител да бъде Модератор, използвайте опцията Модератор по подразбиране.</entry>
+  <entry key="824">Супер Модератор винаги е Модератор при вход в стаята и никой не може да премахне тези негови права.</entry>
+  <entry key="825">Прилагане права на Супер Модератор</entry>
+  <entry key="826">Премахване права на Супер Модератор</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Ако добавите организация към стаята, само потребителите от тази организация ще виждат стаята.</entry>
+  <entry key="829">Модерация</entry>
+  <entry key="830">Ограничения</entry>
+  <entry key="831">Организация</entry>
+  <entry key="832">Сигурни ли сте?</entry>
+  <entry key="833">Наистина ли искате да изтриете този елемент? Трябва да натиснете бутона Save, за запазване на промените!</entry>
+  <entry key="834">Не е избран потребител. Моля изберете потребител, преди да го добавите!</entry>
+  <entry key="835">Добавяне на нов Модератор по подразбиране</entry>
+  <entry key="836">Искате ли да дадете права на Супер Модератор на този потребител? Супер Модератор винаги е Модератор при вход в стаята и никой не може да премахне тези негови права. Трябва да запазите стаята, за да запазите настройките!</entry>
+  <entry key="837">Искате ли да премахнете правата на Супер Модератор от този потребител? Трябва да запазите стаята, за да запазите настройките!</entry>
+  <entry key="838">Потребителят е Супер Модератор и никой не може да премахне тези негови права!</entry>
+  <entry key="839">Наистина ли искате да изтриете този файл/папка?</entry>
+  <entry key="840">Изтриване на файл/папка?</entry>
+  <entry key="841">Г-жа</entry>
+  <entry key="842">Д-р</entry>
+  <entry key="843">Свойства</entry>
+  <entry key="844">Показване позицията на мишката на гледащите</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
new file mode 100644
index 0000000..60ea20e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferència</entry>
+  <entry key="2">Videoconferència</entry>
+  <entry key="3">Auditories</entry>
+  <entry key="4">Configuració</entry>
+  <entry key="5">Usuari</entry>
+  <entry key="6">Administració</entry>
+  <entry key="7">Aturar</entry>
+  <entry key="8">Grabar</entry>
+  <entry key="9">No s'ha seleccionat ningun fitxer</entry>
+  <entry key="10">Gravació pel professor</entry>
+  <entry key="11">Usuaris conectats:</entry>
+  <entry key="12">Iniciar conferència</entry>
+  <entry key="13">El meu nom</entry>
+  <entry key="14">Videoconferència</entry>
+  <entry key="15">Importar fitxer</entry>
+  <entry key="16">Actualitzar llista de fitxers</entry>
+  <entry key="17">Selecciona un fitxer com a principal</entry>
+  <entry key="18">Nova enquesta</entry>
+  <entry key="19">Nova enquesta per la conferència</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipus d'enquesta</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Informació: descripció d'enquesta.</entry>
+  <entry key="24">Crear enquesta</entry>
+  <entry key="25">Cancel·lar</entry>
+  <entry key="26">Sí/No</entry>
+  <entry key="27">Valor numèric [1-10]</entry>
+  <entry key="28">Enquesta</entry>
+  <entry key="29">És necessita ser moderador per crear una enquesta.</entry>
+  <entry key="30">El seu vot ha sigut registrat</entry>
+  <entry key="31">Ja a respòs a la enquesta prèviament</entry>
+  <entry key="32">Votar</entry>
+  <entry key="33">La seva resposta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Vol saber:</entry>
+  <entry key="37">Resultats</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultats:</entry>
+  <entry key="40">Respostes:</entry>
+  <entry key="41">No hi ha enquestes</entry>
+  <entry key="42">Votar</entry>
+  <entry key="43">Reunió (màx 4 llocs)</entry>
+  <entry key="44">Conferència (máx 50 llocs)</entry>
+  <entry key="45">Tipus</entry>
+  <entry key="46">Altres llocs</entry>
+  <entry key="47">Ja ha seleccionat.</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">El moderador a deixat la reunió.</entry>
+  <entry key="50">Informació del sistema</entry>
+  <entry key="51">Seleccionar el dispositiu</entry>
+  <entry key="52">Seleccionar camara:</entry>
+  <entry key="53">Seleccionar micròfon:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Necessita reconectar-se</entry>
+  <entry key="57">Editar configuració</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">cancelar</entry>
+  <entry key="62">Eliminar pissarra</entry>
+  <entry key="63">Vols netejar la pissarra abans de afegir una nova imatge?</entry>
+  <entry key="64">No tornar a preguntar</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Editar la configuració</entry>
+  <entry key="67">Requerix confirmació abans de netejar la pissarra</entry>
+  <entry key="68">Informació del usuari</entry>
+  <entry key="69">Netejar l'àrea de dibuix</entry>
+  <entry key="70">Desfer</entry>
+  <entry key="71">Refer</entry>
+  <entry key="72">Seleccionar un objecte</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Traçar una línia</entry>
+  <entry key="76">Subratllar</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">El·lipse</entry>
+  <entry key="79">Data</entry>
+  <entry key="80">Esborrar l'ítem escollit</entry>
+  <entry key="81">Solicitar la moderació</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">Cancel·lar</entry>
+  <entry key="84">Convertir-se en moderador</entry>
+  <entry key="85">Tancar</entry>
+  <entry key="86">Itálica</entry>
+  <entry key="87">Negreta</entry>
+  <entry key="88">En espera...</entry>
+  <entry key="89">Un usuari sol·licita la moderació:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Denegar</entry>
+  <entry key="92">Cancel·lar</entry>
+  <entry key="93">Envian la sol·licitud als següents usuaris</entry>
+  <entry key="94">Aceptat</entry>
+  <entry key="95">Rebutjat</entry>
+  <entry key="96">Cambiar el moderador</entry>
+  <entry key="97">Voste no és moderador</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Ho sentim, però aquesta sala està plena. Intenti'l més tard</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">tancar</entry>
+  <entry key="102">error en la introducció de dades</entry>
+  <entry key="103">el nom d'usuari ha de contenir almenys 4 caràcters</entry>
+  <entry key="104">la clau d'usuari ha de contenir almenys 4 caràcters</entry>
+  <entry key="105">Aquest nombre d'usuari ja existeix</entry>
+  <entry key="106">Aquest email ja està registrat</entry>
+  <entry key="107">Error, per favor contacti amb l'administrador del sistema</entry>
+  <entry key="108">Entrar</entry>
+  <entry key="109">Usuari:</entry>
+  <entry key="110">Contrasenya:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Entrar</entry>
+  <entry key="113">Registrar-se</entry>
+  <entry key="114">Usuari:</entry>
+  <entry key="115">Contrasenya:</entry>
+  <entry key="116">Contrasenya (un altre vegada):</entry>
+  <entry key="117">Nom:</entry>
+  <entry key="118">Cognoms:</entry>
+  <entry key="119">Correu electronic:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar-se</entry>
+  <entry key="122">Cancel·lar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">Inici</entry>
+  <entry key="125">Usuaris</entry>
+  <entry key="126">Grups</entry>
+  <entry key="127">Organitzacions</entry>
+  <entry key="128">Sales de conferèncias</entry>
+  <entry key="129">Públic</entry>
+  <entry key="130">Organització</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Usuari</entry>
+  <entry key="133">Contrasenya</entry>
+  <entry key="134">Escriure de nou</entry>
+  <entry key="135">Nom</entry>
+  <entry key="136">Cognoms</entry>
+  <entry key="137">Correu Electrónic</entry>
+  <entry key="138">Data de neixement</entry>
+  <entry key="139">Direcció</entry>
+  <entry key="140">Població</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Més informació</entry>
+  <entry key="143">Dades de usuari</entry>
+  <entry key="144">Guardar</entry>
+  <entry key="145">Guardar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Usuari</entry>
+  <entry key="148">nom</entry>
+  <entry key="149">cognoms</entry>
+  <entry key="150">mostrar següent</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">eliminar registre</entry>
+  <entry key="153">cancel·lar</entry>
+  <entry key="154">borrar</entry>
+  <entry key="155">Nou registre</entry>
+  <entry key="156">Actualitzar registre</entry>
+  <entry key="157">Esborrar registre</entry>
+  <entry key="158">Estat</entry>
+  <entry key="159">no actiu</entry>
+  <entry key="160">actiu</entry>
+  <entry key="161">Organitzacions</entry>
+  <entry key="162">calendari</entry>
+  <entry key="163">tancar</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Nom</entry>
+  <entry key="166">Usuari</entry>
+  <entry key="167">moderador</entry>
+  <entry key="168">administrador</entry>
+  <entry key="169">Rol de usuari</entry>
+  <entry key="170">organització</entry>
+  <entry key="171">nom</entry>
+  <entry key="172">afegir organització</entry>
+  <entry key="173">afegir organització</entry>
+  <entry key="174">cancel·lar</entry>
+  <entry key="175">afegir</entry>
+  <entry key="176">eliminar organització</entry>
+  <entry key="177">usuari</entry>
+  <entry key="178">afegir usuari</entry>
+  <entry key="179">eliminar usuari</entry>
+  <entry key="180">afegir usuari</entry>
+  <entry key="181">buscar usuari</entry>
+  <entry key="182">buscar</entry>
+  <entry key="183">usuari</entry>
+  <entry key="184">organització</entry>
+  <entry key="185">ingressar</entry>
+  <entry key="186">Sales</entry>
+  <entry key="187">Sales de conferència</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nom</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organitzacions</entry>
+  <entry key="192">Sales de conferència</entry>
+  <entry key="193">Nom</entry>
+  <entry key="194">Tipus</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentari</entry>
+  <entry key="197">guardar</entry>
+  <entry key="198">carregar</entry>
+  <entry key="199">guardar com</entry>
+  <entry key="200">fitxer</entry>
+  <entry key="201">fitxer</entry>
+  <entry key="202">cancel·lar</entry>
+  <entry key="203">guardar</entry>
+  <entry key="204">error</entry>
+  <entry key="205">carregan</entry>
+  <entry key="206">objectes carregats</entry>
+  <entry key="207">sincronitzant clients, esperi un moment.</entry>
+  <entry key="208">Carregant dades d'imatge.</entry>
+  <entry key="209">sincronitzant clients, esperi un moment.</entry>
+  <entry key="210">netejar l'àrea de dibuix</entry>
+  <entry key="211">netejar l'àrea de dibuix, tota la informació de la pissarra s'esborrarà</entry>
+  <entry key="212">Confirmar abans de carregar un arxiu</entry>
+  <entry key="213">Enviar invitació</entry>
+  <entry key="214">Enviar invitació</entry>
+  <entry key="215">Tema</entry>
+  <entry key="216">Destinatari</entry>
+  <entry key="217">Missatge</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancel·lar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dades d'usuari</entry>
+  <entry key="222">El seu pseudònim per a aquesta conferència</entry>
+  <entry key="223">nom que es mostrarà</entry>
+  <entry key="224">nom</entry>
+  <entry key="225">cognoms</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">ingressar</entry>
+  <entry key="229">Carregan</entry>
+  <entry key="230">Carregant dades, espere un moment</entry>
+  <entry key="231">Contrasenya errònia</entry>
+  <entry key="232">Per favor introdueixi dues vegades les mateixa contrasenya amb un mínim de 6 caràcters</entry>
+  <entry key="233">Correu invàlid</entry>
+  <entry key="234">Vostè ha introduït una adreça no vàlida de correu electrònic</entry>
+  <entry key="235">El registre s'ha completat amb èxit</entry>
+  <entry key="236">El seu compte ha estat creada, pot ingressar des d'aquest moment</entry>
+  <entry key="237">No pot compartir el seu escriptori en aquest moment. Algú més ja està compartint el seu escriptori.</entry>
+  <entry key="238">Compartició prohibida</entry>
+  <entry key="239">Compartir escriptori</entry>
+  <entry key="240">Problemes de connexió: La seva ample de banda és insuficient i es perdrà la informació. Si el missatge es repeteix amb freqüència sol·liciti al moderador reduir la qualitat d'imatge i àudio.</entry>
+  <entry key="241">Escriptori de:</entry>
+  <entry key="242">Dibuixar</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Fitxers</entry>
+  <entry key="246">Membres</entry>
+  <entry key="247">Descarregar el document original</entry>
+  <entry key="248">Descarregar el document en pdf</entry>
+  <entry key="249">Pujar un arxiu a la pissarra</entry>
+  <entry key="250">Configuració</entry>
+  <entry key="251">Arrossegar aquest objecte</entry>
+  <entry key="252">Ajustar el tamany del objete</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Anar a la primera pàgina</entry>
+  <entry key="256">Anar a la pàgina anterior</entry>
+  <entry key="257">Anar a la pàgina següent</entry>
+  <entry key="258">Anar a l'última pàgina</entry>
+  <entry key="259">Disminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuració</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clau</entry>
+  <entry key="266">Configuració</entry>
+  <entry key="267">Clau</entry>
+  <entry key="268">última actualizació</entry>
+  <entry key="269">actualitzat per</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">clau</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuaris</entry>
+  <entry key="274">Eliminar usuari de l'organització</entry>
+  <entry key="275">Eliminar</entry>
+  <entry key="276">Aquest usuari ja és membre de l'organització</entry>
+  <entry key="277">Noticies</entry>
+  <entry key="278">Enllaços ràpids</entry>
+  <entry key="279">Anar a la videoconferència</entry>
+  <entry key="280">Anar a l'auditori</entry>
+  <entry key="281">Ajuda i support tecnic</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Enviar "bug"</entry>
+  <entry key="285">més</entry>
+  <entry key="286">Web del Projecte (http://openmeetings.apache.org)</entry>
+  <entry key="287">Llista de correus del Projecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Recordar</entry>
+  <entry key="289">Contingut</entry>
+  <entry key="290">La meva pàgina d'inici</entry>
+  <entry key="291">Reunions programades</entry>
+  <entry key="292">Events programats</entry>
+  <entry key="293">Reunion publiques</entry>
+  <entry key="294">Reunions privades</entry>
+  <entry key="295">Events publics</entry>
+  <entry key="296">Events privats</entry>
+  <entry key="297">Contingut public</entry>
+  <entry key="298">Contingut privat</entry>
+  <entry key="299">Contenido personal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderació</entry>
+  <entry key="302">Sol·licitar la moderació</entry>
+  <entry key="303">Enquestes</entry>
+  <entry key="304">Seleccioni un fitxer</entry>
+  <entry key="305">Configuració</entry>
+  <entry key="306">Càmera i micròfon</entry>
+  <entry key="307">Configuració de la pissarra</entry>
+  <entry key="308">Sortir</entry>
+  <entry key="309">Regressar a les sales</entry>
+  <entry key="310">Sortir</entry>
+  <entry key="311">Ha oblidat la seva contrasenya?</entry>
+  <entry key="312">Resetear contrasenya</entry>
+  <entry key="313">Audi i Video</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Pissarra</entry>
+  <entry key="316">Moderació</entry>
+  <entry key="317">Fitxers</entry>
+  <entry key="318">Usuaris</entry>
+  <entry key="319">Enquestes</entry>
+  <entry key="320">No hi ha ningú connectat amb aquest nom d'usuari</entry>
+  <entry key="321">El email conté un enllaç especial que ha estat enviat al seu correu. Si no apareix aquest correu revisi la configuració de filtres de spam del seu servidor i reenvée aquest correu novament.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Missatge</entry>
+  <entry key="324">No es va trobar a l'usuari (mètode de generació de claus incorrecte).</entry>
+  <entry key="325">Generar contrasenya</entry>
+  <entry key="326">Entrar</entry>
+  <entry key="327">cambiar contrasenya</entry>
+  <entry key="328">nova contrasenya</entry>
+  <entry key="329">torni a escriure la contrasenya</entry>
+  <entry key="330">Les contrasenyes introduïdes no són iguals.</entry>
+  <entry key="331">Escrigui 4 o més caràcters. Distingeix majúscules de minúscules</entry>
+  <entry key="332">La contrasenya ha estat canviada, ara pot iniciar sessió.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Error desconegut. Enviï aquesta informació a l'administrador del sistema.</entry>
+  <entry key="335">No es va trobar a l'usuari</entry>
+  <entry key="336">Contrasenya incorrecta</entry>
+  <entry key="337">Ha sortit del sistema</entry>
+  <entry key="338">Es troba deshabilitada l'opció de registre.</entry>
+  <entry key="339">Correu incorrecte</entry>
+  <entry key="340">fitxer duplicat, per favor seleccioni un altre</entry>
+  <entry key="341">el nom de l'arxiu és massa curt</entry>
+  <entry key="342">No es va poder guardar l'adreça</entry>
+  <entry key="343">L'usuari va ser afegit, no obstant això haurà d'estar almenys en una organització per a poder iniciar la sessió.</entry>
+  <entry key="344">Nova gravació</entry>
+  <entry key="345">No es va trobar un camp en aquest FieldId.</entry>
+  <entry key="346">No es va trobar una etiqueta per a aquest camp.</entry>
+  <entry key="347">Es necessita autorització de l'administrador</entry>
+  <entry key="348">Editor d'idiomes</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Etiqueta-ID</entry>
+  <entry key="351">Etiqueta-Nom</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valor dels camps</entry>
+  <entry key="354">Nom</entry>
+  <entry key="355">Valor de l'etiqueta</entry>
+  <entry key="356">ID de l'etiqueta</entry>
+  <entry key="357">Ha eliminat l'etiqueta però no el camp. No es pot eliminar un camp ja que pot tenir etiquetes en altres idiomes.</entry>
+  <entry key="358">Labelid incorrecte. El seu FieldLanguagesvaluesAneu no es va trobar en la base de dades.</entry>
+  <entry key="359">Vostè no pot eliminar aquest camp, només les etiquetes. No hi ha una etiqueta carregada de moment o no es troba seleccionada cap (pot ser que no existeixi en l'idioma seleccionat).</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Necessita tancar la sessió per a veure els canvis.</entry>
+  <entry key="362">Afegir nou idioma</entry>
+  <entry key="363">eliminar idioma</entry>
+  <entry key="364">Afegir nou idioma</entry>
+  <entry key="365">Nom</entry>
+  <entry key="366">afegir idioma</entry>
+  <entry key="367">Copia de seguretat</entry>
+  <entry key="368">anar a l'inici</entry>
+  <entry key="369">anterior</entry>
+  <entry key="370">sigüente</entry>
+  <entry key="371">anar al final</entry>
+  <entry key="372">l'usuari parla (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">encendre o apagar so</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">La seva configuració</entry>
+  <entry key="376">Salutacions,</entry>
+  <entry key="377">Editar perfil</entry>
+  <entry key="378">Nous missatges:</entry>
+  <entry key="379">Pujar imatge</entry>
+  <entry key="380">Exportació de dades d'usuari</entry>
+  <entry key="381">¡Han d'existir totes les organitzacions!</entry>
+  <entry key="382">Exportar usuaris</entry>
+  <entry key="383">Exportar per organizació</entry>
+  <entry key="384">Iniciar procés d'exportació</entry>
+  <entry key="385">Importació de dades d'usuari</entry>
+  <entry key="386">Seleccionar fitxer xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Aquests fitxers poden ser usats per a: - Contribuir en el projecte - Importar-los en altre sistema - Copia de Respatller - Personalització - Col·locar-lo en el directori d'idiomes per a la pròxima instal·lació.</entry>
+  <entry key="389">Seleccioni un arxiu d'idioma que s'importarà. Configuri correctament l'idioma en el menú desplegable (no importa el nom que tingui l'arxiu ja que serà importat de tots les maneres).</entry>
+  <entry key="390">importar - seleccionar fitxer</entry>
+  <entry key="391">Guardar com...</entry>
+  <entry key="392">Nom:</entry>
+  <entry key="393">Comentari:</entry>
+  <entry key="394">guardar</entry>
+  <entry key="395">Grabacions</entry>
+  <entry key="396">Visor de grabacions</entry>
+  <entry key="397">Grabacions de salas publiques i privades</entry>
+  <entry key="398">Usuaris:</entry>
+  <entry key="399">En el sistema:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuaris en la sala:</entry>
+  <entry key="402">actualitzar</entry>
+  <entry key="403">La sala esta plena. Per favor, intenti'l més tard.</entry>
+  <entry key="404">Premi sobre una sala per a veure els detalls</entry>
+  <entry key="405">Escriure als usuaris d'aquesta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuaris en aquesta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproduir gravació</entry>
+  <entry key="410">Duració:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Manera d'enregistrament: no pot canviar cap valor ja que es tracta d'un arxiu gravat.</entry>
+  <entry key="413">Reproduir aquesta gravació</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Iniciar gravació</entry>
+  <entry key="416">Parar gravació</entry>
+  <entry key="417">Gravació:</entry>
+  <entry key="418">Actualmente algú es troba graban:</entry>
+  <entry key="419">Gravant per l'usuari:</entry>
+  <entry key="420">cancel·lar</entry>
+  <entry key="421">La gravació serà cancel·lada i no es guardarà.</entry>
+  <entry key="422">reprendre</entry>
+  <entry key="423">Tancar finestra i reprendre la gravació</entry>
+  <entry key="424">Canviar el color de línia</entry>
+  <entry key="425">Seleccionar color</entry>
+  <entry key="426">Deshabilitar / Habilitar color de línia</entry>
+  <entry key="427">canviar color de fons</entry>
+  <entry key="428">Deshabilitar / Habilitar color de fons</entry>
+  <entry key="429">canviar grossor de línia</entry>
+  <entry key="430">tancar</entry>
+  <entry key="431">canviar grandària de lletra</entry>
+  <entry key="432">Eliminar gravació</entry>
+  <entry key="433">Invitat</entry>
+  <entry key="434">Per:</entry>
+  <entry key="435">Nom</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancel·lar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nom</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Eliminar registre (log) de xat en el servidor</entry>
+  <entry key="443">Xat</entry>
+  <entry key="444">enviar un missatge</entry>
+  <entry key="445">Emoticones</entry>
+  <entry key="446">Emoticones</entry>
+  <entry key="447">Seleccionar dispositius</entry>
+  <entry key="448">Àudio i Vídeo</entry>
+  <entry key="449">Només Àudio</entry>
+  <entry key="450">Només Vídeo</entry>
+  <entry key="451">Sense Àudio/Vídeo (Imatge fixa)</entry>
+  <entry key="452">No es transmetrà Àudio/Vídeo des del seu equip. En el seu lloc es mostrarà la imatge del seu perfil. Seleccioni aquesta configuració si té problemes amb l'ample de banda d'internet.</entry>
+  <entry key="453">DL</entry>
+  <entry key="454">DM</entry>
+  <entry key="455">MC</entry>
+  <entry key="456">DJ</entry>
+  <entry key="457">DV</entry>
+  <entry key="458">DS</entry>
+  <entry key="459">DG</entry>
+  <entry key="460">Dilluns</entry>
+  <entry key="461">Dimarts</entry>
+  <entry key="462">Dimecres</entry>
+  <entry key="463">Dijous</entry>
+  <entry key="464">Divendres</entry>
+  <entry key="465">Disabte</entry>
+  <entry key="466">Diumenge</entry>
+  <entry key="467">S#</entry>
+  <entry key="468">Nombre de setmana de calendari</entry>
+  <entry key="469">Gener</entry>
+  <entry key="470">Febrer</entry>
+  <entry key="471">Març</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maig</entry>
+  <entry key="474">Juny</entry>
+  <entry key="475">Juliol</entry>
+  <entry key="476">Agost</entry>
+  <entry key="477">Setembre</entry>
+  <entry key="478">Octubre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Desembre</entry>
+  <entry key="481">Calendari</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Mostrar la configuració</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ample | Alt</entry>
+  <entry key="486">Contenidor: vídeo</entry>
+  <entry key="487">Contenidor: moderació</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contenidor: pissarra</entry>
+  <entry key="490">Habilitat</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ample | Alt</entry>
+  <entry key="493">Contenidor: Fitxer,Xat,Participants</entry>
+  <entry key="494">Habilitat</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ample | Alt</entry>
+  <entry key="497">El moderador s'ha retirat pel que ningú està realitzant una presentació en aquests moments. Pot sol·licitar la moderació o esperar.</entry>
+  <entry key="498">No hi ha moderador en aquesta sala, però si participants. Pot sol·licitar la moderació o esperar.</entry>
+  <entry key="499">Comentari de {0}</entry>
+  <entry key="500">{0} - Invitació</entry>
+  <entry key="501">Missatge del usuari:</entry>
+  <entry key="502">Missatge:</entry>
+  <entry key="503">Premi en aquest enllaç per a poder participar en la conferència:</entry>
+  <entry key="504">Premi aquí per a entrar a la sala</entry>
+  <entry key="505">Si té problemes amb l'enllaç, li vam suggerir que copiï i pegui el següent text en el seu navegador:</entry>
+  <entry key="506">Registre {0}</entry>
+  <entry key="507">La seva informació d'usuari:</entry>
+  <entry key="508">Usuari:</entry>
+  <entry key="509">Contrasenya:</entry>
+  <entry key="510">Correu:</entry>
+  <entry key="511">Equip-{0}</entry>
+  <entry key="512">{0} - Registre</entry>
+  <entry key="513">{0} - Resetear contrasenya</entry>
+  <entry key="514">Premi en el següent enllaç per a sol·licitar una nova contrasenya:</entry>
+  <entry key="515">Premi aquí per a introduir una nova contrasenya</entry>
+  <entry key="516">Si té problemes amb l'enllaç, li vam suggerir que copiï i pegui el següent text en el seu navegador:</entry>
+  <entry key="517">{0} - Nova Contrasenya</entry>
+  <entry key="518">Per favor, introdueixi una data vàlida amb el format dd.mm.yyyy Exemple: 24.12.2008.</entry>
+  <entry key="519">Per favor, introdueixi una adreça de correu vàlida</entry>
+  <entry key="520">Per favor, introdueixi un nombre decimal. Exemple: 1.00 (usi punt i no la coma)</entry>
+  <entry key="521">Per favor, introdueixi un nombre sencer</entry>
+  <entry key="522">Per favor, introdueixi un nombre de telèfon vàlid. Exemple: +593 947 225 200.</entry>
+  <entry key="523">Per favor introdueixi una hora vàlida en el format hh:mm. Exemple: 12:23.</entry>
+  <entry key="524">Contrasenya protegida</entry>
+  <entry key="525">Contrasenya</entry>
+  <entry key="526">Període de validesa</entry>
+  <entry key="527">Sense límit</entry>
+  <entry key="528">Període</entry>
+  <entry key="529">Una vegada</entry>
+  <entry key="530">Des de:</entry>
+  <entry key="531">Fins a:</entry>
+  <entry key="532">Invitació a {0}</entry>
+  <entry key="533">No existeix una invitació disponible amb aquest codi.</entry>
+  <entry key="534">Aquesta invitació ja va ser usada i no pot tornar-se a utilitzar.</entry>
+  <entry key="535">El codi d'invitació no és vàlid.</entry>
+  <entry key="536">Contrasenya:</entry>
+  <entry key="537">Verificar contrasenya</entry>
+  <entry key="538">Contrasenya incorrecta</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronitzar Àudio/Vídeo</entry>
+  <entry key="541">El login és correcte, però la sessió en la qual intenta entrar no està activa o no va ser guardada en el servidor. Ha d'iniciar una nova sessió.</entry>
+  <entry key="542">La SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">El grabador actualment està en fase beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eix -x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eix-y</entry>
+  <entry key="549">a</entry>
+  <entry key="550">amplària</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Canviar Transparència</entry>
+  <entry key="554">Navegador Obrir</entry>
+  <entry key="555">Navegador Tancar</entry>
+  <entry key="556">S'ha perdut la connexió amb el servidor. Necessita recarregar l'aplicació i/o comprovar la seva Xarxa.</entry>
+  <entry key="557">Punter</entry>
+  <entry key="558">Sincronitzant</entry>
+  <entry key="559">Sincronitzant usuaris. Per favor, esperi.</entry>
+  <entry key="560">&lt;u&gt;Descarregar com SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descarregar com PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descarregar com JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descarregar com PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descarregar com TIF&lt;/u&gt;</entry>
+  <entry key="565">Recordi:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Repetició:</entry>
+  <entry key="568">ningú</entry>
+  <entry key="569">Localització:</entry>
+  <entry key="570">Inici</entry>
+  <entry key="571">Final</entry>
+  <entry key="572">Títol:</entry>
+  <entry key="573">Comentari:</entry>
+  <entry key="574">Convidar a persones</entry>
+  <entry key="575">Diàriament</entry>
+  <entry key="576">Mensualment</entry>
+  <entry key="577">Anualment</entry>
+  <entry key="578">La cita final va després de la cita d'inici</entry>
+  <entry key="579">Per favor, posi un títol</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activi aquesta opció si l'escriptura del seu idioma va de dreta a esquerra</entry>
+  <entry key="582">Eines</entry>
+  <entry key="583">Veure esdeveniments o trobades gravades</entry>
+  <entry key="584">Videoconferència - Reuneixi's amb 4 o més (fins a 16) usuaris\ntots tindran accés d'àudio i vídeo.</entry>
+  <entry key="585">Auditori - Reuneixi's amb fins a 200 participants&lt;br/&gt;només el moderador tindrà àudio i/o vídeo</entry>
+  <entry key="586">Crear usuaris, sales, organitzacions&lt;br/&gt; + canvis en la configuració</entry>
+  <entry key="587">Usuaris en la Sala</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Carregant Arxiu. Esperi fins que tots els clients hagin estat sincronitzats.</entry>
+  <entry key="592">Pujada completa. Convertint l'arxiu...</entry>
+  <entry key="593">Iniciar Pujada</entry>
+  <entry key="594">Pujar i importar conversa. Per favor, seleccioni un arxiu del seu disc.</entry>
+  <entry key="595">Cancel·lar</entry>
+  <entry key="596">Seleccionar Arxiu</entry>
+  <entry key="597">Conexions</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Conectat des de</entry>
+  <entry key="602">Sala / Àmbit</entry>
+  <entry key="603">Expulsar a l'usuari</entry>
+  <entry key="604">Expulsar</entry>
+  <entry key="605">Està segur de voler expulsar a aquest client de la connexió?\n El client serà expulsat de la Sala, però podrà tornar a autenticar-se de nou.</entry>
+  <entry key="606">La seva sessió ha estat tancada per l'administrador o el moderador.</entry>
+  <entry key="607">Telèfon</entry>
+  <entry key="608">L'usuari és el moderador d'aquesta Sala</entry>
+  <entry key="609">L'usuari té permisos per a dibuixar en la pissarra</entry>
+  <entry key="610">(Re) Iniciar Àudio/Vídeo o canviar la configuració de dispositius</entry>
+  <entry key="611">Permetre a aquest usuari dibuixar en la pissarra</entry>
+  <entry key="612">Llevar permisos per a dibuixar en la pissarra</entry>
+  <entry key="613">Usuaris</entry>
+  <entry key="614">Fitxers</entry>
+  <entry key="615">Pissarra</entry>
+  <entry key="616">Xat</entry>
+  <entry key="617">El seu compte està assignada a diverses organitzacions. Seleccioni aquella amb la qual vulgui entrar en aquesta sessió.</entry>
+  <entry key="618">Aquesta sala està completa. Intenti'l més tard.</entry>
+  <entry key="619">Tipus de sala</entry>
+  <entry key="620">Sala per a citar-se</entry>
+  <entry key="621">Hora del servidor</entry>
+  <entry key="622">{0} - Recordatori</entry>
+  <entry key="623">Missatge de l'usuari:</entry>
+  <entry key="624">Missatge:</entry>
+  <entry key="625">Premi en l'enllaç per a participar en la (Vídeo)Conferència:</entry>
+  <entry key="626">Premi aquí per a entrar en la sala</entry>
+  <entry key="627">Si té problemes, copiï i pegui aquest enllaç en el seu navegador:</entry>
+  <entry key="628">recerca interna:</entry>
+  <entry key="629">usarios externs</entry>
+  <entry key="630">nom</entry>
+  <entry key="631">cognoms</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar Sortir</entry>
+  <entry key="634">Està segur que desitja sortir?</entry>
+  <entry key="635">Accions</entry>
+  <entry key="636">Sala Demo</entry>
+  <entry key="637">Hora Demo</entry>
+  <entry key="638">Temporitzador de trobades</entry>
+  <entry key="639">Aquesta Sala és demo. Per a desactivar aquest avís, hauria d'aconseguir una sala privada per a ús propi o bé configurar el seu propi Servidor. Serà desconnectat automàticament en:</entry>
+  <entry key="640">Amb moderador</entry>
+  <entry key="641">Per favor, esperi fins que el moderador entre en la sala. El moderador pot ser un professor, l'administrador o el creador d'aquesta sala.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Escriptori compartit iniciant-se</entry>
+  <entry key="644">Està iniciant-se un escriptori compartit de l'usuari:</entry>
+  <entry key="645">Començar a compartir</entry>
+  <entry key="646">Afegir una nova trobada</entry>
+  <entry key="647">Sala de trobades</entry>
+  <entry key="648">Sala d'esdeveniments</entry>
+  <entry key="649">Moderació</entry>
+  <entry key="650">Moderar Usuaris</entry>
+  <entry key="651">Moderar Sales</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Desitja convertir a aquest usuari en Moderador d'aquesta Organització?</entry>
+  <entry key="654">Per favor, seleccioni una Organització abans d'intentar incloure a un usuari en la mateixa.</entry>
+  <entry key="655">Organització - Moderador</entry>
+  <entry key="656">Realment desitja esborrar a aquest usuari de l'Organització?</entry>
+  <entry key="657">Aquest usuari és Moderador</entry>
+  <entry key="658">Aquest usuari no és Moderador</entry>
+  <entry key="659">Desitja que aquest usuari deixi de ser Moderador d'aquesta Organització?</entry>
+  <entry key="660">Afegir o esborrar Usuaris i/o Sales en la seva Organització</entry>
+  <entry key="661">Realment vol esborrar aquest registre?</entry>
+  <entry key="662">Realment vol esborrar a aquest usuari de la seva organització? Només s'esborrarà la connexió entre l'usuari i la seva organització. En realitat, per a esborrar a l'usuari ha d'ingressar al Panell d'Administració.</entry>
+  <entry key="663">¡Vd no pot esborrar-se a si mateix!</entry>
+  <entry key="664">¡Aquest mètode necessita un compte d'Administració per a poder ser utilitzat!</entry>
+  <entry key="665">No hi ha cap sessió associada a aquest ID.</entry>
+  <entry key="666">Aquesta és un compte d'Administrador o de Moderador. Només pot editar aquest compte utilitzant el Panell d'Administració.</entry>
+  <entry key="667">Per a completar el seu registre, faci el favor de prémer en el següent enllaç. Altra opció és copiar la URL en la barra del seu navegador.</entry>
+  <entry key="668">Premi per a verificar el seu E-Mail</entry>
+  <entry key="669">No s'ha trobat un usuari per a aquest algorisme Hash.</entry>
+  <entry key="670">¡Aquest usuari ja va ser activat!</entry>
+  <entry key="671">¡Ud ha activat el seu compte amb èxit!</entry>
+  <entry key="672">Ingressi ara</entry>
+  <entry key="673">El seu compte no està activada. Utilitzi en primer lloc l'enllaç que hi ha en correu rebut al finalitzar el procés de registre.</entry>
+  <entry key="674">Ud s'ha registrat amb èxit. Li hem enviat un correu amb un codi de verificació. Per favor, revisi el seu compte de correu.</entry>
+  <entry key="675">Llevar el rol de Moderador a aquest usuari</entry>
+  <entry key="676">Donar permisos de Moderació a aquest usuari</entry>
+  <entry key="677">Usuari</entry>
+  <entry key="678">Accés a la pissarra</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderació: Per favor, seleccioni qualsevol usuari de la llista per a donar-li accés a la Pissarra, Moderació o Vídeo.</entry>
+  <entry key="681">Aquest usuari ja és Moderador, així que automàticament té permisos per a dibuixar.</entry>
+  <entry key="682">Aquest és Ud! No pot llevar-se els permisos de Moderació a si mateix.</entry>
+  <entry key="683">Permetre a aquest usuari Publicar el seu Àudio/Vídeo</entry>
+  <entry key="684">Esborrar l'Àudio/Vídeo d'aquest usuari</entry>
+  <entry key="685">M'agradaria ser moderador d'aquesta sala</entry>
+  <entry key="686">M'agradaria utilitzar la pissarra</entry>
+  <entry key="687">Desitjaria compartir el meu Àudio/Vídeo</entry>
+  <entry key="688">Vè. és el moderador d'aquesta sala</entry>
+  <entry key="689">Té permisos per a dibuixar en la pissarra</entry>
+  <entry key="690">Té permís per a compartir el seu Àudio/Video</entry>
+  <entry key="691">Missatge al Moderador</entry>
+  <entry key="692">L'usuari</entry>
+  <entry key="693">Desitjaria ser Moderador. Usi les icones d'estat pròxims a l'usuari en la Llista d'Usuaris per a agregar o remoure el permís de Moderació.</entry>
+  <entry key="694">desitjaria utilitzar la pissarra. Utilitzi les icones que hi ha al costat del nom de l'usuari (en la Llista d'Usuaris) per a agregar o llevar els permisos corresponents.</entry>
+  <entry key="695">desitjaria compartir el seu Àudio/Vídeo. Usi les icones que hi ha al costat del nom d'usuari (en la Llista d'Usuaris) per a agregar o llevar els permisos per a compartir Àudio/Video.</entry>
+  <entry key="696">Ha d'esperar fins que un Moderador ingressi a la sala.</entry>
+  <entry key="697">Cancel·lar</entry>
+  <entry key="698">Guardar</entry>
+  <entry key="699">Dia</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Any</entry>
+  <entry key="702">Pujar fitxer</entry>
+  <entry key="703">Fitxer carpeta</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Papelera</entry>
+  <entry key="706">Els meus Arxius (Dispositiu personal)</entry>
+  <entry key="707">Arxius de la Sala (Dispositiu públic)</entry>
+  <entry key="708">Afegir fitxer</entry>
+  <entry key="709">AfegirCarpeta</entry>
+  <entry key="710">Borrar Carpeta</entry>
+  <entry key="711">Editar nom</entry>
+  <entry key="712">Nova Carpeta</entry>
+  <entry key="713">Està segur que vol esborrar aquest ítem?)</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Obrir document</entry>
+  <entry key="717">Mostrar tots els arxius (Vista d'arbre)</entry>
+  <entry key="718">Tancar document</entry>
+  <entry key="719">Esborrar fitxer</entry>
+  <entry key="720">No té permisos per a escriure o dibuixar en la pissarra. Ha de ser moderador o, almenys, tenir permisos d'edició de la pissarra. Sol·liciti-l'hi a un Moderador.</entry>
+  <entry key="721">Propietats</entry>
+  <entry key="722">Iniciar Client (extern)</entry>
+  <entry key="723">Iniciar Client (HTTP)</entry>
+  <entry key="724">Un usuari desitja compartir la seva pantalla. Desitja visualitzar-lo?</entry>
+  <entry key="725">Actualment està compartint el seu escriptori. Per a deixar de fer-lo, premi en el botó Stop en el client utilitzat.</entry>
+  <entry key="726">Compartint sessió</entry>
+  <entry key="727">¡Ja està compartint el seu Escriptori!</entry>
+  <entry key="728">Visor d'Escriptori</entry>
+  <entry key="729">Sortir</entry>
+  <entry key="730">Compartint l'Escriptori</entry>
+  <entry key="731">Premi Iniciar per a publicar la seva pantalla</entry>
+  <entry key="732">Iniciar el compartir escriptori</entry>
+  <entry key="733">Finalitzar el compartir escriptori</entry>
+  <entry key="734">Seleccioni l'àrea de la seva pantalla:</entry>
+  <entry key="735">Canviar amplària</entry>
+  <entry key="736">!Ha finalitzat aquesta sessió!</entry>
+  <entry key="737">Canviar altura</entry>
+  <entry key="738">Desplaçament eix X</entry>
+  <entry key="739">Desplaçament eix Y</entry>
+  <entry key="740">Amplària:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">La connexió ha estat tancada pel servidor</entry>
+  <entry key="743">Cancel·lar</entry>
+  <entry key="744">Iniciar Externa</entry>
+  <entry key="745">Si tanca aquesta sessió completament, no serà possible reiniciar el visor durant aquesta sessió.</entry>
+  <entry key="746">Confirmar el tancament de la sessió</entry>
+  <entry key="747">Compartir pantalla</entry>
+  <entry key="748">Grabar sessió</entry>
+  <entry key="749">Co-Navegació</entry>
+  <entry key="750">Hum... Firefox en windows no mostra la co-navegació amb claredat. Per favor, utilitzi altre navegador o tancament aquesta funcionalitat.</entry>
+  <entry key="751">Previ</entry>
+  <entry key="752">Sigüent</entry>
+  <entry key="753">Recarregar</entry>
+  <entry key="754">Inici</entry>
+  <entry key="755">Carregar</entry>
+  <entry key="756">Configurar en el seu perfil aquest lloc com la pàgina web per defecte.</entry>
+  <entry key="757">Provar configuració</entry>
+  <entry key="758">Comprovi la configuració del seu micròfon i/o càmera abans d'entrar en la sala. Per a això gravi durant alguns segons i reprodueixi'l.</entry>
+  <entry key="759">No tornar a mostrar aquest test</entry>
+  <entry key="760">Cancel·lar</entry>
+  <entry key="761">Iniciar</entry>
+  <entry key="762">No demanar de nou</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Pot continuar sense fer la comprovació si no desitja publicar la imatge i/o el so. Els participants sense àudio o sense vídeo poden en tot cas utilitzar la pissarra, compartir el seu escriptori o enviar missatges utilitzant el xat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de Nivell</entry>
+  <entry key="768">Pressioni Iniciar</entry>
+  <entry key="769">Iniciar Conferència</entry>
+  <entry key="770">Iniciar Esdeveniment</entry>
+  <entry key="771">Anar a la Sala</entry>
+  <entry key="772">Comprovar Config.</entry>
+  <entry key="773">Iniciar Conferen.</entry>
+  <entry key="774">Instruccions Conferència:</entry>
+  <entry key="775">Iniciar Gravació</entry>
+  <entry key="776">No mostrar el test de gravació d'àudio /vídeo abans d'entrar en una Conferència</entry>
+  <entry key="777">Salas públiques</entry>
+  <entry key="778">Les sales públiques són accessibles per a tots els usuaris.</entry>
+  <entry key="779">Salas privades</entry>
+  <entry key="780">Les sales privades són accessibles només per als usuaris de la mateixa organització.</entry>
+  <entry key="781">Les meves sales</entry>
+  <entry key="782">Les sales en aquesta secció són per a ús personal. Es creen utilitzant el calendari i tenen una data d'inici i de finalització. Només es mostren en aquesta secció durant l'interval temporal de validesa.</entry>
+  <entry key="783">Ha de ser moderador per a executar aquesta acció.</entry>
+  <entry key="784">Sol·licitar la moderació</entry>
+  <entry key="785">Sol·licitar accés a la pissarra</entry>
+  <entry key="786">Sol·licitar accés a la càmera/micròfon</entry>
+  <entry key="787">L'autenticació d'aquesta sessió ja ha estat utilitzada. No pot fer-se dues vegades.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SORTIR</entry>
+  <entry key="790">¿Desitja realment sortir? És convenient que abans esborri els documents pujats, la pissarra o l'historial del xat.</entry>
+  <entry key="791">Sortir de la conferència</entry>
+  <entry key="792">Sales</entry>
+  <entry key="793">Seleccioni una sala</entry>
+  <entry key="794">Hi ha un esdeveniment sense guardar en el calendari. Per favor, guardi'l o bé esborri'l.</entry>
+  <entry key="795">¡Per favor, afegexi almenys a un participant!</entry>
+  <entry key="796">¿Realment desitja esborrar aquest esdeveniment?</entry>
+  <entry key="797">Avis</entry>
+  <entry key="798">afegir event</entry>
+  <entry key="799">dia</entry>
+  <entry key="800">setmana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descripció</entry>
+  <entry key="803">Asistents</entry>
+  <entry key="804">{0}, la seva Plataforma Web de Videoconferència. Només segueixi les instruccions, pressioni el botó per a iniciar immediatament o vagi al Calendari per a programar una Trobada més endavant.</entry>
+  <entry key="805">Progr. Trobada</entry>
+  <entry key="806">Per a planificar una conferència, afegeixi un nou Esdeveniment en el Calendari. Per a cada Esdeveniment es crearà automàticament una Sala de (vídeo)conferència. Vostè i la resta d'assistents rebran un correu amb un enllaç de la sala. &lt;br/&gt;&lt;br/&gt;Pot escollir entre diferents tipus de sales amb diferents dissenys i sistemes de moderació. També pot escollir entre diferents tipus de notificació de correu que s'envien en cada esdeveniment del calendari.</entry>
+  <entry key="807">¿Necessita ajuda?</entry>
+  <entry key="808">Restringit</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Afegir</entry>
+  <entry key="811">No hi ha cap usuari seleccionat. Seleccioni primer un ítem de la llista i premi a Afegir.</entry>
+  <entry key="812">Afegir asistent</entry>
+  <entry key="813">Guardar</entry>
+  <entry key="814">Esborrar</entry>
+  <entry key="815">Detalls de l'Esdeveniment</entry>
+  <entry key="816">Moderadors per defecte</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nom</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Afegir nou Moderador per defecte</entry>
+  <entry key="822">¿És supermoderador</entry>
+  <entry key="823">Si la sala està moderada, qui sigui ja moderador seguirà sent-lo. Si no desitja que sigui així, i només vol que determinat usuari sigui el moderador, utilitzi l'opció de Moderador per defecte.</entry>
+  <entry key="824">Un supermoderador és sempre el moderador d'una sala quan entra en ella. A més, ningú pot llevar-li la marca de moderació</entry>
+  <entry key="825">Aplicar supermoderación a l'usuari</entry>
+  <entry key="826">Llevar supermoderación a l'usuari</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si afegix una organització a la sala, només els usuaris d'aquesta organització tindran accés a la mateixa (això només és vàlid si la marca de Pública està configurada com falsa)</entry>
+  <entry key="829">Moderació</entry>
+  <entry key="830">Limitacions</entry>
+  <entry key="831">Organització</entry>
+  <entry key="832">¿Està Vè. segur?</entry>
+  <entry key="833">Realment desitja esborrar aquest ítem? Ha de prémer en el botó de guardar per a emmagatzemar els canvis!</entry>
+  <entry key="834">No hi ha cap usuari seleccionat. Per favor, seleccioni'l primer.</entry>
+  <entry key="835">Afegir un nou moderador per defecte</entry>
+  <entry key="836">¿Desitja afegir una marca de supermoderador a aquest usuari? Recordi que un supermoderador no només és el moderador d'una sala, sinó que a més cap altre moderador podrà esborrar la marca de moderació. Necessita guardar l'objecte sala per a emmagatzemar aquestes configuracions.</entry>
+  <entry key="837">¿Desitja eliminar la marca de supermoderador a aquest usuari? Necessita guardar l'objecte sala per a emmagatzemar aquestes configuracions.</entry>
+  <entry key="838">Aquest usuari té el rol de supermoderador. No pot llevar-li la marca de moderació a un supermoderador.</entry>
+  <entry key="839">¿Realment desitja esborrar aquest Fitxer/Directori?</entry>
+  <entry key="840">¿Esborrar Fitxer/Directori ?</entry>
+  <entry key="841">Sra.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propietats</entry>
+  <entry key="844">Mostrar la posició del ratolí als participants</entry>
+  <entry key="845">Compartir Àudio amb el applet SIP</entry>
+  <entry key="846">Compartir Àudio amb SIP i Vídeo amb Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Veure pantalla</entry>
+  <entry key="849">El usuari</entry>
+  <entry key="850">desitja compartir la seva pantalla. Desitja visualitzar-la?</entry>
+  <entry key="851">Tancar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La sessió ha estat tancada per qui compartia pantalla</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Compartir pantalla</entry>
+  <entry key="856">Minimitzar</entry>
+  <entry key="857">Maximitzar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Línia temporal de gravació</entry>
+  <entry key="860">Les meves grabacions</entry>
+  <entry key="861">Grabacions públics</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nom</entry>
+  <entry key="864">Longitud</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Per</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Vídeo - Principal</entry>
+  <entry key="869">Gravació</entry>
+  <entry key="870">Pot grabar i compartir la seva pantalla alhora. Per a permetre que uns altres vegin la seva pantalla, premi en el botó -iniciar- de la part superior. Per a gravar la sessió, és suficient amb prémer a iniciar enregistrament.</entry>
+  <entry key="871">Iniciar Gravació</entry>
+  <entry key="872">Parar Gravació</entry>
+  <entry key="873">Descarregar l'arxiu FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">L'usuari té el micròfon activat</entry>
+  <entry key="878">Detenir compartir</entry>
+  <entry key="879">Permetre preguntes de l'usuari</entry>
+  <entry key="880">Desactivi això per a impedir que cap usuari li molesti en aquesta sala. Al fer-lo, el botó per a sol·licitar la moderació no serà visible.</entry>
+  <entry key="881">Permissos</entry>
+  <entry key="882">Descarregar com AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Només audio</entry>
+  <entry key="887">Hi ha hagut errors mentre es processava gravació.</entry>
+  <entry key="888">La gravació encara no aquesta llista. Intenti'l de nou en un parell de minuts.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Missatge del grabador:</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">El applet SIP no està llest</entry>
+  <entry key="893">Configuració del compte SIP</entry>
+  <entry key="894">Configuración SIP para cada usuario. Puede activar o desactivar SIP desde Administración &gt; Configuración (Key: enable_sip). Los datos SIP de cada usuario deberían crearse automáticamente.</entry>
+  <entry key="895">Usuari SIP</entry>
+  <entry key="896">Contrasenya SIP</entry>
+  <entry key="897">ID Aut-SIP</entry>
+  <entry key="898">L'autenticació SIP ha fallat. Hauria de comprovar les dades d'autenticació del seu proveïdor SIP i del compte SIP de cada usuari. Com administrador, podrà autenticar-se i comprovar la configuració. Si entra com usuari o com moderador, qualsevol intent d'interacció serà bloquejat.</entry>
+  <entry key="899">L'autenticació SIP ha fallat. Contacti amb el servei tècnic.</entry>
+  <entry key="900">Autenticant en la porta d'enllaç SIP...</entry>
+  <entry key="901">Autenticant en la porta d'enllaç SIP...</entry>
+  <entry key="902">Mostrar Log</entry>
+  <entry key="903">Missatges Log del procés de postgravación</entry>
+  <entry key="904">Missatge de applet SIP</entry>
+  <entry key="905">El applet SIP no està llest. Per favor, accepti el applet i premi OK.</entry>
+  <entry key="906">Sol·licitar la moderació</entry>
+  <entry key="907">Guardar canvis de la cita</entry>
+  <entry key="908">La cita ha estat canviada. Desitja guardar aquests canvis? Tots els participants implicats rebran un correu amb la data i hora actualitzades (depenent del tipus de notificació d'aquesta cita).</entry>
+  <entry key="909">Per accedir a les gravacions que tingui per entrar en l'aplicació {0}.</entry>
+  <entry key="910">Seleccioneu l'usuari d'aquest vídeo</entry>
+  <entry key="911">Usuaris disponibles per aquesta POD</entry>
+  <entry key="912">Vostè és un moderador en aquesta entrevista. Pots decidir qui parla en aquesta entrevista i vostè pot començar / aturar la gravació de la sessió.</entry>
+  <entry key="913">Començar la gravació</entry>
+  <entry key="914">Aturar la gravació</entry>
+  <entry key="915">La gravació de l'entrevista ja ha començat.</entry>
+  <entry key="916">La gravació s'ha aturat o no han iniciat encara.</entry>
+  <entry key="917">La gravació d'aquesta entrevista ja s'ha iniciat!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
new file mode 100644
index 0000000..4fa0716
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konference</entry>
+  <entry key="2">Schůzka</entry>
+  <entry key="3">Posluchárna</entry>
+  <entry key="4">Nastavení</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrace</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Záznam</entry>
+  <entry key="9">Žádný soubor není dostupný</entry>
+  <entry key="10">Záznam učitele</entry>
+  <entry key="11">Připojení uživatelé:</entry>
+  <entry key="12">Start konference</entry>
+  <entry key="13">Mé jméno</entry>
+  <entry key="14">VideoKonference</entry>
+  <entry key="15">Nahrej soubor</entry>
+  <entry key="16">Aktualizuj</entry>
+  <entry key="17">Můj soubor</entry>
+  <entry key="18">Nová anketa</entry>
+  <entry key="19">Nová anketa pro konferenci.</entry>
+  <entry key="20">Otázka:</entry>
+  <entry key="21">Typ ankety:</entry>
+  <entry key="22">Vytvoř</entry>
+  <entry key="23">Info: Všichni připojení uživatelé obdrželi zprávu o nové anketě.</entry>
+  <entry key="24">Vytvoř anketu</entry>
+  <entry key="25">Zrušit</entry>
+  <entry key="26">Ano/Ne</entry>
+  <entry key="27">Čísla 1-10</entry>
+  <entry key="28">Anketa</entry>
+  <entry key="29">Pro vytvoření otázky musíte být moderátor</entry>
+  <entry key="30">Vaše hlasování bylo uloženo.</entry>
+  <entry key="31">V této anketě jste již hlasoval.</entry>
+  <entry key="32">Hlasuj !</entry>
+  <entry key="33">Vaše otpověď:</entry>
+  <entry key="34">Ano</entry>
+  <entry key="35">Ne</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">Výsledek ankety</entry>
+  <entry key="38">Otázka:</entry>
+  <entry key="39">Výsledek:</entry>
+  <entry key="40">Odpověď:</entry>
+  <entry key="41">Nejsou dostupné žádné ankety.</entry>
+  <entry key="42">Hlasuj!</entry>
+  <entry key="43">Schůzka (max 4 sedění)</entry>
+  <entry key="44">Konference (max 50 sedění)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Jiné sedění</entry>
+  <entry key="47">Vybráno</entry>
+  <entry key="48">vstup</entry>
+  <entry key="49">Moderátor opustil schůzku.</entry>
+  <entry key="50">Systémové informace</entry>
+  <entry key="51">Vyber zařízení</entry>
+  <entry key="52">Vyber webcam:</entry>
+  <entry key="53">Vyber mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">zruš</entry>
+  <entry key="56">Musíte se znovu připojit.</entry>
+  <entry key="57">Uprav nastavení.</entry>
+  <entry key="58">Cesta:</entry>
+  <entry key="59">Jazyk:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">zruš</entry>
+  <entry key="62">Smaž tabuli</entry>
+  <entry key="63">Chcete aby tabule byla prázdná před přidáním nového obrázku?</entry>
+  <entry key="64">Žádné další dotazy</entry>
+  <entry key="65">ne</entry>
+  <entry key="66">Uprav nastavení</entry>
+  <entry key="67">Potvrzovací dotaz před smazáním tabule.</entry>
+  <entry key="68">Informace o uživateli</entry>
+  <entry key="69">Smaž kreslící oblast</entry>
+  <entry key="70">Krok zpět</entry>
+  <entry key="71">Krok vpřed</entry>
+  <entry key="72">Vyber Objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Kreslení</entry>
+  <entry key="75">Kresli čáru</entry>
+  <entry key="76">Kresli podtržení</entry>
+  <entry key="77">čtyřúhelník</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Šipka</entry>
+  <entry key="80">smaž vybranou položku</entry>
+  <entry key="81">Použít pro moderování</entry>
+  <entry key="82">použij</entry>
+  <entry key="83">zruš</entry>
+  <entry key="84">Stát se moderátorem</entry>
+  <entry key="85">zavřít</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">tlustě</entry>
+  <entry key="88">ČEKÁM</entry>
+  <entry key="89">Uživatel chce použít pro moderování:</entry>
+  <entry key="90">akceptuj</entry>
+  <entry key="91">odmítni</entry>
+  <entry key="92">zruš</entry>
+  <entry key="93">Odeslat dotaz následujícím uživatelům</entry>
+  <entry key="94">Akceptováno</entry>
+  <entry key="95">Odmítnuto</entry>
+  <entry key="96">Změna moderátora</entry>
+  <entry key="97">Nemůžete moderovat tento kurz!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Místnost je plná. Omlováme se příjďte jindy.</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">zavři</entry>
+  <entry key="102">chyba vstupních dat</entry>
+  <entry key="103">4 nebo více znaků; záleží na velkých písmenkách!</entry>
+  <entry key="104">heslo musí mít minimálně 4 znaky</entry>
+  <entry key="105">Uživatel již existuje</entry>
+  <entry key="106">Email je již registrován</entry>
+  <entry key="107">Systémová chyba, kontaktujte správce sítě!</entry>
+  <entry key="108">Přihlášení</entry>
+  <entry key="109">Uživatel:</entry>
+  <entry key="110">Heslo:</entry>
+  <entry key="111">Jazyk</entry>
+  <entry key="112">Přihlásit</entry>
+  <entry key="113">Registrace:</entry>
+  <entry key="114">Uživatel:</entry>
+  <entry key="115">Heslo:</entry>
+  <entry key="116">Znovu:</entry>
+  <entry key="117">Jméno:</entry>
+  <entry key="118">Příjmení:</entry>
+  <entry key="119">Mail:</entry>
+  <entry key="120">Země:</entry>
+  <entry key="121">Registrace</entry>
+  <entry key="122">Zruš</entry>
+  <entry key="123">Nejsi členem?</entry>
+  <entry key="124">Domů</entry>
+  <entry key="125">Uživatelé</entry>
+  <entry key="126">Skupiny</entry>
+  <entry key="127">Organizace</entry>
+  <entry key="128">Jednací místnost</entry>
+  <entry key="129">veřejné</entry>
+  <entry key="130">Organizace</entry>
+  <entry key="131">vstup</entry>
+  <entry key="132">Uživatelské jméno</entry>
+  <entry key="133">Heslo</entry>
+  <entry key="134">Znovu</entry>
+  <entry key="135">Jméno</entry>
+  <entry key="136">Příjmení</entry>
+  <entry key="137">Mail</entry>
+  <entry key="138">Datum narození</entry>
+  <entry key="139">Ulice</entry>
+  <entry key="140">PSČ/Město</entry>
+  <entry key="141">Stát</entry>
+  <entry key="142">Info o adrese</entry>
+  <entry key="143">Uživatelská data</entry>
+  <entry key="144">ulož</entry>
+  <entry key="145">Ulož</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Jméno</entry>
+  <entry key="149">Příjmení</entry>
+  <entry key="150">ukaž další</entry>
+  <entry key="151">ukaž předchozí</entry>
+  <entry key="152">smaž záznam</entry>
+  <entry key="153">zruš</entry>
+  <entry key="154">smaž</entry>
+  <entry key="155">nový záznam</entry>
+  <entry key="156">aktualizuj záznam</entry>
+  <entry key="157">smaž záznam</entry>
+  <entry key="158">stav</entry>
+  <entry key="159">zakázáno</entry>
+  <entry key="160">povoleno</entry>
+  <entry key="161">Organizace</entry>
+  <entry key="162">kalendář</entry>
+  <entry key="163">zavři</entry>
+  <entry key="164">ID organizace</entry>
+  <entry key="165">Název</entry>
+  <entry key="166">Uživatel</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">uživatelská úroveň</entry>
+  <entry key="170">Organizace</entry>
+  <entry key="171">název</entry>
+  <entry key="172">přidej organizaci</entry>
+  <entry key="173">přidej organizaci</entry>
+  <entry key="174">zruš</entry>
+  <entry key="175">přidej</entry>
+  <entry key="176">zruš organizaci</entry>
+  <entry key="177">uživatel</entry>
+  <entry key="178">přidej uživatele</entry>
+  <entry key="179">zruš uživatele</entry>
+  <entry key="180">přidej uživatele</entry>
+  <entry key="181">hledej uživatele</entry>
+  <entry key="182">hledej</entry>
+  <entry key="183">uživatel</entry>
+  <entry key="184">Organizace</entry>
+  <entry key="185">vstup</entry>
+  <entry key="186">Konferenční místnost</entry>
+  <entry key="187">Konferenční místnost</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Jméno</entry>
+  <entry key="190">veřejné</entry>
+  <entry key="191">Organizace</entry>
+  <entry key="192">Zasedací místnost</entry>
+  <entry key="193">Název</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Veřejné</entry>
+  <entry key="196">Komentář</entry>
+  <entry key="197">ulož a exportuj</entry>
+  <entry key="198">nahrej</entry>
+  <entry key="199">ulož jako</entry>
+  <entry key="200">Název souboru</entry>
+  <entry key="201">název souboru</entry>
+  <entry key="202">zruš</entry>
+  <entry key="203">ulož</entry>
+  <entry key="204">Chyba</entry>
+  <entry key="205">nahrávám</entry>
+  <entry key="206">objekt nahrán</entry>
+  <entry key="207">synchronizace klientů; čekající klienti:</entry>
+  <entry key="208">Nahrávám obrázek</entry>
+  <entry key="209">synchronizace klientů; čekající klienti:</entry>
+  <entry key="210">smaž kreslící oblast</entry>
+  <entry key="211">smaž kreslící oblast, všechna data z tabule budou ztracena</entry>
+  <entry key="212">Potvrzení před nahrátím souboru</entry>
+  <entry key="213">Zaslat pozvání</entry>
+  <entry key="214">Zaslat pozvání</entry>
+  <entry key="215">Předmět</entry>
+  <entry key="216">Příjemce</entry>
+  <entry key="217">Zpráva</entry>
+  <entry key="218">Odeslat</entry>
+  <entry key="219">zruš</entry>
+  <entry key="220">odeslat</entry>
+  <entry key="221">Uživatelská data</entry>
+  <entry key="222">Vaše přezdívka v této konferenci</entry>
+  <entry key="223">Přezdívka</entry>
+  <entry key="224">Jméno</entry>
+  <entry key="225">Příjmení</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Jazyk</entry>
+  <entry key="228">vstup</entry>
+  <entry key="229">Nahrávám</entry>
+  <entry key="230">Data se nahrávají, čekejte prosím</entry>
+  <entry key="231">Špatné heslo</entry>
+  <entry key="232">Zadejte prosím stejné heslo minimálně se 6 znaky</entry>
+  <entry key="233">Špatný mail</entry>
+  <entry key="234">Zadali jste špatnou emailovou adresu</entry>
+  <entry key="235">Registrace je kompletní</entry>
+  <entry key="236">Váš uživatelský účet byl vytvořen. Můžete se přihlásit.</entry>
+  <entry key="237">Nyní nemůžete sdílet obrazovku. Někdo jiný již sdílí svou obrazovku.</entry>
+  <entry key="238">Sdílení zakázáno</entry>
+  <entry key="239">Sdílej svou obrazovku</entry>
+  <entry key="240">Špatná šířka pásma: Nemůžete synchronizovat svou obrazovku. Snímek byl zahozen. Pokud se toto varování objeví, domluvte se s moderátorem na snížení kvality přenosu obrazovky.</entry>
+  <entry key="241">Obrazovka vypnuta:</entry>
+  <entry key="242">Kreslení</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Pokec</entry>
+  <entry key="245">Soubory</entry>
+  <entry key="246">Členové</entry>
+  <entry key="247">Nahrej originální dokument</entry>
+  <entry key="248">Nahrej PDF dokument</entry>
+  <entry key="249">Nahrej prezentaci na tabuli</entry>
+  <entry key="250">Konfigurace</entry>
+  <entry key="251">Přesun objektu</entry>
+  <entry key="252">Změna velikosti objektu</entry>
+  <entry key="253">%</entry>
+  <entry key="254">z</entry>
+  <entry key="255">První strana</entry>
+  <entry key="256">Předchozí strana</entry>
+  <entry key="257">Další strana</entry>
+  <entry key="258">Poslední strana</entry>
+  <entry key="259">Zmenši --</entry>
+  <entry key="260">Zvětši ++</entry>
+  <entry key="261">Pan</entry>
+  <entry key="262">Paní/slečna</entry>
+  <entry key="263">Konfigurace</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Klíč</entry>
+  <entry key="266">Konfigurace</entry>
+  <entry key="267">Klíč</entry>
+  <entry key="268">poslední aktualizace</entry>
+  <entry key="269">aktualizoval</entry>
+  <entry key="270">komentář</entry>
+  <entry key="271">Hodnota</entry>
+  <entry key="272">z</entry>
+  <entry key="273">Uživatelé</entry>
+  <entry key="274">smaž uživatele z organizace</entry>
+  <entry key="275">smaž</entry>
+  <entry key="276">Tentu uživatel již je členem organizace.</entry>
+  <entry key="277">Zprávy</entry>
+  <entry key="278">Rychlá navigace</entry>
+  <entry key="279">Schůzky</entry>
+  <entry key="280">Posluchárna</entry>
+  <entry key="281">Nápověda a podpora</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Nahlášení chyb!</entry>
+  <entry key="285">více</entry>
+  <entry key="286">Stránky projektu</entry>
+  <entry key="287">Archiv uživatelské korespondence</entry>
+  <entry key="288">Zapamatuj si přihlášení</entry>
+  <entry key="289">Obsah</entry>
+  <entry key="290">Má domovská stránka</entry>
+  <entry key="291">Mé plánované schůzky</entry>
+  <entry key="292">Mé plánované přednášky</entry>
+  <entry key="293">Veřejné schůzky</entry>
+  <entry key="294">Soukromé schůzky</entry>
+  <entry key="295">Veřejné přednáška</entry>
+  <entry key="296">Soukromé přednáška</entry>
+  <entry key="297">Veřejný obsah</entry>
+  <entry key="298">Soukromý obsah</entry>
+  <entry key="299">Uživatelský obsah</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderace</entry>
+  <entry key="302">Požadavek na moderaci</entry>
+  <entry key="303">Ankety</entry>
+  <entry key="304">Vyber soubor</entry>
+  <entry key="305">Nastavení</entry>
+  <entry key="306">Nastavení kamery a mikrofonu</entry>
+  <entry key="307">Nastavení tabule</entry>
+  <entry key="308">Odchod</entry>
+  <entry key="309">Zpět do výběru místností</entry>
+  <entry key="310">Odhlásit</entry>
+  <entry key="311">Zapměli jste heslo?</entry>
+  <entry key="312">Reset hesla</entry>
+  <entry key="313">Mailem</entry>
+  <entry key="314">Přihlášením</entry>
+  <entry key="315">Váš email</entry>
+  <entry key="316">Vaše uživatelské jméno</entry>
+  <entry key="317">Odeslán mail s odkazem na reset hesla</entry>
+  <entry key="318">Emailová adresa nenalezena. Použíjte stejnou adresu jako při zakládání uživatelského účtu.</entry>
+  <entry key="319">Zadejte prosím mail, nebo uživatelské jméno</entry>
+  <entry key="320">Takový uživatelský účet neexistuje</entry>
+  <entry key="321">Email obsahuje speciální odkaz, skontrolujte Vaši schránku. Pokud jste mail neobdrželi, skontrolujte nastavení antispamového filtru a pošlete mail znovu.</entry>
+  <entry key="322">Chyba</entry>
+  <entry key="323">Zpráva</entry>
+  <entry key="324">Špatný Hash. Uživatel nenalezen.</entry>
+  <entry key="325">Reset Vašeho hesla</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">změna hesla</entry>
+  <entry key="328">nové heslo</entry>
+  <entry key="329">znovu heslo</entry>
+  <entry key="330">Hesla nejsou stejná.</entry>
+  <entry key="331">4 nebo více znaků; záleží na velikosti písmen!</entry>
+  <entry key="332">Heslo nastaveno. Můžete se přihlásit.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Neznámá chyba. Nahlaste ji servisnímu týmu.</entry>
+  <entry key="335">Uživatelský účet nenalezen</entry>
+  <entry key="336">Špatné heslo</entry>
+  <entry key="337">Byli jste vpořádku odhlášeni</entry>
+  <entry key="338">Registrace uživatelů zakázána.</entry>
+  <entry key="339">Špatný mail</entry>
+  <entry key="340">soubor již existuje, vyberte jiný název souboru</entry>
+  <entry key="341">název souboru je krátký</entry>
+  <entry key="342">Nemohu uložit adresu</entry>
+  <entry key="343">Uživatel přidán, ale musíte jej přiřadit k organizaci, jinak se nebude moci přihlásit.</entry>
+  <entry key="344">Nový záznam</entry>
+  <entry key="345">Pole nenalezeno v FieldId.</entry>
+  <entry key="346">Pro toto pole nexistuje název.</entry>
+  <entry key="347">Vyžadovány práva administrátora</entry>
+  <entry key="348">Lokalizace</entry>
+  <entry key="349">Jazyk</entry>
+  <entry key="350">ID pole</entry>
+  <entry key="351">Název pole</entry>
+  <entry key="352">Hodnota</entry>
+  <entry key="353">Hodnoty pole</entry>
+  <entry key="354">Název pole</entry>
+  <entry key="355">Hodnota pole</entry>
+  <entry key="356">ID pole</entry>
+  <entry key="357">Smazali jste pouze název pole, ne pole! Nemůžete smazat pole, používá se v ostatních jazycích.</entry>
+  <entry key="358">Špatné ID pole. ID pole nenalezeno v databázi.</entry>
+  <entry key="359">Nemůžete smazat toto pole. Můžete smazat pouze názvy polí. Není nahrán žádný název pole, protože jste nevybrali žádné pole, nebo není pro toto pole název definován.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">Odhlaste se a pak uvidíte změny.</entry>
+  <entry key="362">Přidej nový jazyk</entry>
+  <entry key="363">smaž jazyk</entry>
+  <entry key="364">Přidej nový jazyk</entry>
+  <entry key="365">Název</entry>
+  <entry key="366">přidej jazyk</entry>
+  <entry key="367">Záloha</entry>
+  <entry key="368">jdi na první</entry>
+  <entry key="369">jdi na předchozí</entry>
+  <entry key="370">jdi na další</entry>
+  <entry key="371">jdi na poslední</entry>
+  <entry key="372">uživatel mluví (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Vpnout/Zapnout zvuk</entry>
+  <entry key="374">Systém</entry>
+  <entry key="375">Vaše nastavení</entry>
+  <entry key="376">Dobrý den,</entry>
+  <entry key="377">Uprav svůj profil</entry>
+  <entry key="378">Nové zprávy:</entry>
+  <entry key="379">Nahrej nový obrázek</entry>
+  <entry key="380">Export uživatelských dat</entry>
+  <entry key="381">AVšechny organizace musí existovat!</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">Dle organizace</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">Import uživatelských dat</entry>
+  <entry key="386">vyber uživatel.xml</entry>
+  <entry key="387">import</entry>
+  <entry key="388">Export do XML - Tento soubor může být použit pro: - Přispění k projektu - Import do jiného systému - Zálohu - Úpravy - Vložení do adresáře jazyků a použití pro další instalaci</entry>
+  <entry key="389">Vyberte soubor s překladem k importu.Vyberte správný jazyk ve výběru! Nezáleží na názvu souboru!</entry>
+  <entry key="390">import - vyber soubor</entry>
+  <entry key="391">Ulož jako</entry>
+  <entry key="392">Název:</entry>
+  <entry key="393">Popis:</entry>
+  <entry key="394">ulož</entry>
+  <entry key="395">Záznamy</entry>
+  <entry key="396">Prohlížeč záznamů</entry>
+  <entry key="397">Záznamy z veřejných a soukromých místností</entry>
+  <entry key="398">Uživatelé:</entry>
+  <entry key="399">Joined:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Uživatelé v této místnosti:</entry>
+  <entry key="402">aktualizuj</entry>
+  <entry key="403">Místnost je plná. Zkuste to za pár minut.</entry>
+  <entry key="404">Pro získání detalů klikněte na místnost</entry>
+  <entry key="405">Pokec uživatelů v této místnosti:</entry>
+  <entry key="406">Mistnost:</entry>
+  <entry key="407">Uživatelé v této místnosti:</entry>
+  <entry key="408">od:</entry>
+  <entry key="409">přehrej záznam</entry>
+  <entry key="410">Délka:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Mód záznamu! Nemůžete měnit žádné hodnoty, toto je pouze záznam!</entry>
+  <entry key="413">Přehrej záznam</entry>
+  <entry key="414">Přehrej / Pozastav</entry>
+  <entry key="415">Začátek záznamu</entry>
+  <entry key="416">konec záznamu</entry>
+  <entry key="417">Záznam:</entry>
+  <entry key="418">Zde jsou dostupné záznamy:</entry>
+  <entry key="419">Zaznamenáno! Uživatelem:</entry>
+  <entry key="420">zruš</entry>
+  <entry key="421">Záznam byl ukončen a neuložen.</entry>
+  <entry key="422">opakovat</entry>
+  <entry key="423">Zavřete toto okno a zopakujte nahrávání</entry>
+  <entry key="424">změna barvy čáry</entry>
+  <entry key="425">Vyber barvu</entry>
+  <entry key="426">Zakaž / Povol změnu barvy čáry</entry>
+  <entry key="427">změň barvu výplně</entry>
+  <entry key="428">Zakaž / Povol změnu barvy výplně</entry>
+  <entry key="429">Změň tloušťku čáry</entry>
+  <entry key="430">zavři</entry>
+  <entry key="431">změň velikost písma</entry>
+  <entry key="432">Smaž nahrávku</entry>
+  <entry key="433">Host</entry>
+  <entry key="434">Zaznamenal:</entry>
+  <entry key="435">Název</entry>
+  <entry key="436">Místnost</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">zruš</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Název</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Smaž záznam pokecu na serveru</entry>
+  <entry key="443">Pokec</entry>
+  <entry key="444">zaslat zprávu</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Vyber zveřejněné zařízení</entry>
+  <entry key="448">Zvuk a obraz</entry>
+  <entry key="449">Pouze zvuk</entry>
+  <entry key="450">Pouze obraz</entry>
+  <entry key="451">Bez zvuku a obrazu (statický obrázek)</entry>
+  <entry key="452">Zvuk a Obraz z Vašeho PC není zveřejněno, bude zobrazen pouze obrázek z Vašeho profilu.Pokud máte problémy zkontrolujte Vaše nastavení, nebo máte velmi pomalé připojení k internetu.</entry>
+  <entry key="453">Po</entry>
+  <entry key="454">Út</entry>
+  <entry key="455">St</entry>
+  <entry key="456">Čt</entry>
+  <entry key="457">Pá</entry>
+  <entry key="458">So</entry>
+  <entry key="459">Ne</entry>
+  <entry key="460">Pondělí</entry>
+  <entry key="461">Úterý</entry>
+  <entry key="462">Středa</entry>
+  <entry key="463">Čtvrtek</entry>
+  <entry key="464">Pátek</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Neděle</entry>
+  <entry key="467">Týden</entry>
+  <entry key="468">Týdenní kalendář</entry>
+  <entry key="469">Leden</entry>
+  <entry key="470">Únor</entry>
+  <entry key="471">Březen</entry>
+  <entry key="472">Duben</entry>
+  <entry key="473">Květen</entry>
+  <entry key="474">Červen</entry>
+  <entry key="475">Červenec</entry>
+  <entry key="476">Srpen</entry>
+  <entry key="477">Září</entry>
+  <entry key="478">Říjen</entry>
+  <entry key="479">Listopad</entry>
+  <entry key="480">Prosinec</entry>
+  <entry key="481">Kalendář</entry>
+  <entry key="482">Účastníci</entry>
+  <entry key="483">Ukaž nastavení zobrazení</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Šířka | Výška</entry>
+  <entry key="486">Video-okno</entry>
+  <entry key="487">Moderation-okno</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tabule-okno</entry>
+  <entry key="490">Povoleno</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Šířka | Výška</entry>
+  <entry key="493">Soubory,Pokec,Účastníci - okno</entry>
+  <entry key="494">Povoleno</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Šířka | Výška</entry>
+  <entry key="497">Moderátor opustil místnost. Není v tento moment přítomen. Můžete se stát moderátorem, nebo čekat.</entry>
+  <entry key="498">V této místnosti není moderátor, ale jsou zde účastníci. Můžete se stát moderátorem, nebo čekat.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Pozvánka</entry>
+  <entry key="501">Zpráva od uživatele:</entry>
+  <entry key="502">Zpráva:</entry>
+  <entry key="503">Klikněte sem a podílejte se na konferenci:</entry>
+  <entry key="504">Klikněte sem pro vstup do místnosti</entry>
+  <entry key="505">pokud máte problém s tímto odkazem, nakopírujte jej a vložte do prohlížeče:</entry>
+  <entry key="506">{0} Registrace</entry>
+  <entry key="507">Vaše uživatelská data:</entry>
+  <entry key="508">Uživatelské jméno:</entry>
+  <entry key="509">Heslo:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Tým</entry>
+  <entry key="512">{0} Registrace</entry>
+  <entry key="513">{0} - Reset hesla</entry>
+  <entry key="514">Klikněte na tento odkaz a zadejte nové heslo:</entry>
+  <entry key="515">Klkněte sem a zadejte nové heslo</entry>
+  <entry key="516">pokud máte problém s tímto odkazem, nakopírujte jej a vložte do prohlížeče:</entry>
+  <entry key="517">{0} heslo resetováno</entry>
+  <entry key="518">Zadejte správné datum, například 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Zadejte správný email, například name@mail.com</entry>
+  <entry key="520">Zadejte desitinné číslo, například 1.00</entry>
+  <entry key="521">Zadejte celé číslo, například 100</entry>
+  <entry key="522">Zadejte správné tel. číslo, například +49 0123 123123</entry>
+  <entry key="523">Zadejte správný čas, například 12:23 (hh:mm)</entry>
+  <entry key="524">Heslo zabezpečeno</entry>
+  <entry key="525">Heslo</entry>
+  <entry key="526">Platnost opakování</entry>
+  <entry key="527">Nekonečně</entry>
+  <entry key="528">Opakovaně</entry>
+  <entry key="529">Jen jednou</entry>
+  <entry key="530">Platí od:</entry>
+  <entry key="531">Platí do:</entry>
+  <entry key="532">Pozvánka do {0}</entry>
+  <entry key="533">Pro tento kód pozvánky není žádná pozvánka dostupná</entry>
+  <entry key="534">Pozvánka byla použita. Tento typ pozvánky nemůže být znovu použit.</entry>
+  <entry key="535">Tento kód pozvánky je špatný.</entry>
+  <entry key="536">Heslo:</entry>
+  <entry key="537">Zkontrolujte heslo</entry>
+  <entry key="538">Špatné heslo!</entry>
+  <entry key="539">Zvuk_Obraz</entry>
+  <entry key="540">Synchronizuji Zvuk/Obraz</entry>
+  <entry key="541">Už. účet v pořádku, ale připojení není aktivní, nebo registrované na serveru. Musíte se znovu přihlásit.</entry>
+  <entry key="542">Sezení není přihlášeno, nebo nemáte administrátorská práva. SOAP brána vyžaduje práva administrátora pro založení uživatele.</entry>
+  <entry key="543">Sezení nemá spojení na vzdálené uživatelské data. Nemůžete přistupovat k SOAP bráně před vstupem do aplikace, nebo používáte špatné ID sezení</entry>
+  <entry key="544">Záznamy jsou pouze beta verze!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">osa x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">osa y</entry>
+  <entry key="549">š</entry>
+  <entry key="550">šířka</entry>
+  <entry key="551">v</entry>
+  <entry key="552">výška</entry>
+  <entry key="553">Změna průhlednosti</entry>
+  <entry key="554">Průzkumník otevřen</entry>
+  <entry key="555">Průzkumník uzavřen</entry>
+  <entry key="556">Spojení se serverem bylo přerušeno. Musíte znovunahrát aplikaci (zkontrolujte Vaši síť).</entry>
+  <entry key="557">Ukazovátko</entry>
+  <entry key="558">Synchronizuji</entry>
+  <entry key="559">Synchronizuji uživatele, čekejte prosím</entry>
+  <entry key="560">&lt;u&gt;Načti jako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Načti jako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Načti jako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Načti jako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Načti jako TIF&lt;/u&gt;</entry>
+  <entry key="565">Připomínka:</entry>
+  <entry key="566">Kategorie:</entry>
+  <entry key="567">Opakování:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Umístění:</entry>
+  <entry key="570">Začátek</entry>
+  <entry key="571">Konec</entry>
+  <entry key="572">Titul:</entry>
+  <entry key="573">Komentář:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Denně</entry>
+  <entry key="576">Měsíčně</entry>
+  <entry key="577">Ročně</entry>
+  <entry key="578">Schůzka končí pouze pokud schůzka začala!</entry>
+  <entry key="579">Zadejte prosím nadpis!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivujte pouze pokud píšete z prava do leva</entry>
+  <entry key="582">Rychlá navigace</entry>
+  <entry key="583">Záznamy z konferencí</entry>
+  <entry key="584">Schůzka - Vytvořte konference se 4 (max 16) účastníky&lt;br/&gt;všichni mohou používat zvuk a obraz</entry>
+  <entry key="585">Přednáška - Vytvořte konferenci až s 200 účastníky&lt;br/&gt;Pouze moderátor může používat zvuk a obraz</entry>
+  <entry key="586">Tvorba uživatelů, místností, organizací&lt;br/&gt; + změna konfigurace</entry>
+  <entry key="587">Uživatelé v této místnosti teď</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Nahrávám dokument. Poškejte prosím na synchronizaci všech uživatelů.</entry>
+  <entry key="592">Nahráno, konvertuji dokument ...</entry>
+  <entry key="593">Odešli</entry>
+  <entry key="594">Vyberte soubor z Vašeho disku.</entry>
+  <entry key="595">Zruš</entry>
+  <entry key="596">Vyber soubor</entry>
+  <entry key="597">Připojení</entry>
+  <entry key="598">Hodnota</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Připojeni poté</entry>
+  <entry key="602">Místnost / Možnosti</entry>
+  <entry key="603">Odpojit uživatele</entry>
+  <entry key="604">Odpojit uživatele</entry>
+  <entry key="605">Opravdu chcete odpojit uživatele?&lt;br/&gt; Toto pouze odpojí uživatele od dané místnosti. Uživatel se může opět přihlásit.</entry>
+  <entry key="606">Vaše sezení bylo ukončeno administrátorem, nebo moderátorem.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Uživatel je moderátor této místnosti</entry>
+  <entry key="609">Uživatel má povoleno kreslit na tabuli</entry>
+  <entry key="610">(Re) Start Zvuk/Obraz, nebo změna nastavení zařízení</entry>
+  <entry key="611">Povolit tomuto uživateli kreslit na tabuli</entry>
+  <entry key="612">Odejmout možnost kreslení na tabuli</entry>
+  <entry key="613">Uživatelé</entry>
+  <entry key="614">Soubory</entry>
+  <entry key="615">Tabule</entry>
+  <entry key="616">Pokec</entry>
+  <entry key="617">Váš uživatelský účet je přiřazen do více organizací. Pro toto sezení vyberte jednu z nich.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml
new file mode 100644
index 0000000..a0bebb1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konference</entry>
+  <entry key="2">Møde</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Indstillinger</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Optag</entry>
+  <entry key="9">Ingen fil tilgængelig</entry>
+  <entry key="10">Indspillet af lærer/instruktør</entry>
+  <entry key="11">Tilsluttede brugere:</entry>
+  <entry key="12">Start en konference</entry>
+  <entry key="13">Mit navn</entry>
+  <entry key="14">Videokonference</entry>
+  <entry key="15">Importer præsentation</entry>
+  <entry key="16">Opdater liste</entry>
+  <entry key="17">Til hovedfil</entry>
+  <entry key="18">Ny afstemning</entry>
+  <entry key="19">En ny afstemning før konferencen</entry>
+  <entry key="20">Spørgsmål:</entry>
+  <entry key="21">Afstemningstype:</entry>
+  <entry key="22">Opret</entry>
+  <entry key="23">INFO: Alle tilsluttede brugere får tilsendt en meddelelse med den nye afstemning.</entry>
+  <entry key="24">Opret afstemning</entry>
+  <entry key="25">Annuller</entry>
+  <entry key="26">Ja/Nej</entry>
+  <entry key="27">Numerisk 1-10</entry>
+  <entry key="28">Stem</entry>
+  <entry key="29">Du skal vare moderator for at kunne oprette en afstemning</entry>
+  <entry key="30">Din afstemning er accepteret</entry>
+  <entry key="31">Du har allerede stemt i denne afstemning.</entry>
+  <entry key="32">Stem!</entry>
+  <entry key="33">Dit svar:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nej</entry>
+  <entry key="36">Vil vide:</entry>
+  <entry key="37">Afstemningsresultat</entry>
+  <entry key="38">Spørg:</entry>
+  <entry key="39">Resultat:</entry>
+  <entry key="40">Svar:</entry>
+  <entry key="41">Ingen nye afsteminger er startet.</entry>
+  <entry key="42">Stem!</entry>
+  <entry key="43">Møde (max 4 pladser)</entry>
+  <entry key="44">Konference (max 50 pladser)</entry>
+  <entry key="45">Type</entry>
+  <entry key="46">Andre pladser</entry>
+  <entry key="47">Allerede valgt</entry>
+  <entry key="48">Kom ind</entry>
+  <entry key="49">Moderatoren har forladt mødet.</entry>
+  <entry key="50">Systeminformation</entry>
+  <entry key="51">Vælg setup</entry>
+  <entry key="52">Vælg webcam:</entry>
+  <entry key="53">Vælg mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Afbryd</entry>
+  <entry key="56">Tilslut igen.</entry>
+  <entry key="57">Ændre setup.</entry>
+  <entry key="58">Kursus:</entry>
+  <entry key="59">Sprog:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Afbryd</entry>
+  <entry key="62">Rens skrivebordet</entry>
+  <entry key="63">Ønsker du at skrivebordet skal renses inden du uploader til et nyt billede?</entry>
+  <entry key="64">Spørg ikke igen</entry>
+  <entry key="65">Nej</entry>
+  <entry key="66">Ændre setup</entry>
+  <entry key="67">Spørg inden skrivebordet tømmes?.</entry>
+  <entry key="68">Brugerinfo</entry>
+  <entry key="69">Rens tegneområdet</entry>
+  <entry key="70">Fortryd</entry>
+  <entry key="71">Klar</entry>
+  <entry key="72">Vælg et objekt</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Mal/tegn</entry>
+  <entry key="75">Tegn linie</entry>
+  <entry key="76">Tegn understregning</entry>
+  <entry key="77">Rektangel</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Pil</entry>
+  <entry key="80">Slet valgt objekt</entry>
+  <entry key="81">Læg til før moderation</entry>
+  <entry key="82">Læg til</entry>
+  <entry key="83">Afbryd</entry>
+  <entry key="84">Bliv moderator</entry>
+  <entry key="85">Luk</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">fed</entry>
+  <entry key="88">VENTER</entry>
+  <entry key="89">En bruger venter på at blive moderator:</entry>
+  <entry key="90">Accepter</entry>
+  <entry key="91">Afvis</entry>
+  <entry key="92">Annuller</entry>
+  <entry key="93">Send spørgsmål til følgende brugere</entry>
+  <entry key="94">Accepteret</entry>
+  <entry key="95">Afvist</entry>
+  <entry key="96">Ændre moderator</entry>
+  <entry key="97">Du er ikke moderator på dette kursus!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Rummet er optaget. Prøv igen senere.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Luk</entry>
+  <entry key="102">Forkerte data angivet</entry>
+  <entry key="103">Brugernavnet skal indeholde mindst 4 tegn</entry>
+  <entry key="104">Adgangskoden skal indeholde mindst 4 tegn</entry>
+  <entry key="105">Brugernavnet anvendes i forvejen</entry>
+  <entry key="106">Emailadressen anvendes i forvejen</entry>
+  <entry key="107">Systemfejl, kontakt systemadministrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Brugernavn:</entry>
+  <entry key="110">Adgangskode:</entry>
+  <entry key="111">Sprog</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Registrering</entry>
+  <entry key="114">Brugernavn:</entry>
+  <entry key="115">Adgangskode:</entry>
+  <entry key="116">Adgangskode igen:</entry>
+  <entry key="117">Fornavn:</entry>
+  <entry key="118">Efternavn:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrer</entry>
+  <entry key="122">Annuller</entry>
+  <entry key="123">Registrer</entry>
+  <entry key="124">Forside</entry>
+  <entry key="125">Brugere</entry>
+  <entry key="126">Grupper</entry>
+  <entry key="127">Organisationer</entry>
+  <entry key="128">Konferencerum</entry>
+  <entry key="129">Offentlig</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Log ind</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Adgangskode</entry>
+  <entry key="134">Adgangskode igen</entry>
+  <entry key="135">Fornavn</entry>
+  <entry key="136">Efternavn</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Fødselsdato</entry>
+  <entry key="139">Vej/nr</entry>
+  <entry key="140">Postnr./By</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adresse-Info</entry>
+  <entry key="143">Brugerdata</entry>
+  <entry key="144">Gem</entry>
+  <entry key="145">Gem</entry>
+  <entry key="146">Bruger-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Fornavn</entry>
+  <entry key="149">Efternavn</entry>
+  <entry key="150">Vis næste</entry>
+  <entry key="151">Vis forrige</entry>
+  <entry key="152">Slet indhold</entry>
+  <entry key="153">Annuller</entry>
+  <entry key="154">Slet</entry>
+  <entry key="155">Nyt indhold</entry>
+  <entry key="156">Opdater indhold</entry>
+  <entry key="157">Slet indhold</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Ikke tilgængelig</entry>
+  <entry key="160">Tilgængelig</entry>
+  <entry key="161">Organisation</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Luk</entry>
+  <entry key="164">Organisation-ID</entry>
+  <entry key="165">Navn</entry>
+  <entry key="166">Bruger</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Brugerniveau</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Navn</entry>
+  <entry key="172">Gem til organisation</entry>
+  <entry key="173">Gem til organisation</entry>
+  <entry key="174">Annuller</entry>
+  <entry key="175">Gem</entry>
+  <entry key="176">Fjern organisation</entry>
+  <entry key="177">Brugere</entry>
+  <entry key="178">Gem til brugere</entry>
+  <entry key="179">Slet brugere</entry>
+  <entry key="180">Gem til brugere</entry>
+  <entry key="181">Søg brugere</entry>
+  <entry key="182">søg</entry>
+  <entry key="183">Brugere</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Log ind</entry>
+  <entry key="186">Konferencerum</entry>
+  <entry key="187">Konferencerum</entry>
+  <entry key="188">Id</entry>
+  <entry key="189">Navn</entry>
+  <entry key="190">Offentlig</entry>
+  <entry key="191">Organisationer</entry>
+  <entry key="192">Konferencerum</entry>
+  <entry key="193">Navn</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Offentlig</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Gem og eksport</entry>
+  <entry key="198">Upload</entry>
+  <entry key="199">Gem som</entry>
+  <entry key="200">Filnavn</entry>
+  <entry key="201">Filnavn</entry>
+  <entry key="202">Annuller</entry>
+  <entry key="203">Gem</entry>
+  <entry key="204">Fejl</entry>
+  <entry key="205">Gemmer</entry>
+  <entry key="206">Objekter indlæst</entry>
+  <entry key="207">Synkroniserer, vent:</entry>
+  <entry key="208">Indlæser billeddata</entry>
+  <entry key="209">Synkroniserer, vent:</entry>
+  <entry key="210">Rens tegneområde</entry>
+  <entry key="211">Rens tegneområde, alle data mistes</entry>
+  <entry key="212">Spørg inden indlæsning af fil</entry>
+  <entry key="213">Send invitation</entry>
+  <entry key="214">Send invitation</entry>
+  <entry key="215">Emne</entry>
+  <entry key="216">Modtagere</entry>
+  <entry key="217">Meddelelser</entry>
+  <entry key="218">Send</entry>
+  <entry key="219">Annuller</entry>
+  <entry key="220">Send</entry>
+  <entry key="221">Brugerdata</entry>
+  <entry key="222">Dit alias i denne konference</entry>
+  <entry key="223">Alias</entry>
+  <entry key="224">Fornavn</entry>
+  <entry key="225">Efternavn</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Sprog</entry>
+  <entry key="228">Log ind</entry>
+  <entry key="229">Indlæser</entry>
+  <entry key="230">Indlæser data, vent!</entry>
+  <entry key="231">Forkert adgangskode</entry>
+  <entry key="232">2 identiske adgangskoder med mindst 4 tegn, tak!</entry>
+  <entry key="233">Forkert emailadresse</entry>
+  <entry key="234">Du har angivet en forkert emailadresse</entry>
+  <entry key="235">Registrering er fuldført</entry>
+  <entry key="236">Din konto er oprettet. Du kan nu logge ind.</entry>
+  <entry key="237">Du kan ikke dele din skærm lige nu. En anden bruger funktionen lige nu.</entry>
+  <entry key="238">Deling forbudt</entry>
+  <entry key="239">Del din skærm</entry>
+  <entry key="240">Ringe båndbredde: Du kan ikke synkronisere din skærm. Frames bliver droppet. Hvis denne advarsel vises ofte kan du bede moderatoren om at sænke kvaliteten.</entry>
+  <entry key="241">Skærm af:</entry>
+  <entry key="242">Male/tegne</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Filer</entry>
+  <entry key="246">Medlemmer</entry>
+  <entry key="247">Download originalt dokument</entry>
+  <entry key="248">Download PDF-dokument</entry>
+  <entry key="249">Indlæs præsentationen til whiteboard</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Træk dette objekt</entry>
+  <entry key="252">Ændre størrelse på dette objekt</entry>
+  <entry key="253">%</entry>
+  <entry key="254">af</entry>
+  <entry key="255">Gå til første side</entry>
+  <entry key="256">Gå til foregående side</entry>
+  <entry key="257">Gå til næste side</entry>
+  <entry key="258">Gå til sidste side</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Hr.</entry>
+  <entry key="262">Fr.</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Nøgle</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Nøgle</entry>
+  <entry key="268">sidste opdatering</entry>
+  <entry key="269">opdateret af</entry>
+  <entry key="270">kommentar</entry>
+  <entry key="271">nøgle</entry>
+  <entry key="272">af</entry>
+  <entry key="273">Brugere</entry>
+  <entry key="274">slet brugere fra organisationen</entry>
+  <entry key="275">slet</entry>
+  <entry key="276">Denne bruger er allerede medlem af organisationen.</entry>
+  <entry key="277">Nyheder</entry>
+  <entry key="278">Hurtige genveje</entry>
+  <entry key="279">Gå til Konference</entry>
+  <entry key="280">Gå til Auditorium</entry>
+  <entry key="281">Hjælp og support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Anmeld bugs</entry>
+  <entry key="285">mere</entry>
+  <entry key="286">Projekt Webside (http://openmeetings.apache.org)</entry>
+  <entry key="287">Bruger mailliste (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Husk dit login</entry>
+  <entry key="289">Indhold</entry>
+  <entry key="290">Min forside</entry>
+  <entry key="291">Mine skemalagte møder</entry>
+  <entry key="292">Mine planlagte Auditorier</entry>
+  <entry key="293">Offentlige møder</entry>
+  <entry key="294">Private møder</entry>
+  <entry key="295">Offentlige Auditorier</entry>
+  <entry key="296">Private Auditorier</entry>
+  <entry key="297">Offentligt indhold</entry>
+  <entry key="298">Privat indhold</entry>
+  <entry key="299">Personligt indhold</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderering</entry>
+  <entry key="302">Anmod om moderering</entry>
+  <entry key="303">Afstemning</entry>
+  <entry key="304">Vælg en fil</entry>
+  <entry key="305">Indstillinger</entry>
+  <entry key="306">Cam. &amp; Mik. Indstil.</entry>
+  <entry key="307">Whiteboard Indstillinger</entry>
+  <entry key="308">Afslut</entry>
+  <entry key="309">Forlad rummet</entry>
+  <entry key="310">Log af</entry>
+  <entry key="311">Glemt din adgangskode?</entry>
+  <entry key="312">Nulstil adgangskode</entry>
+  <entry key="313">Via email</entry>
+  <entry key="314">Via brugernavn</entry>
+  <entry key="315">Din emailadresse</entry>
+  <entry key="316">Dit brugernavn</entry>
+  <entry key="317">Send email med aktiveringslink</entry>
+  <entry key="318">Brugere</entry>
+  <entry key="319">Indsæt venligst emailadresse eller brugernavn</entry>
+  <entry key="320">Ingen bruger er forbundet med dette brugernavn</entry>
+  <entry key="321">Emailen med det specielle link er blevet sendt til din emailadresse. Kontroller venligst din indbakke. Hvis du ikke har modtaget en email, bedes du kontrollere dint SPAM-filter og genfremsende emailen fra systemet.</entry>
+  <entry key="322">Fejl</entry>
+  <entry key="323">Meddelelse</entry>
+  <entry key="324">Forkert HASH. Ingen bruger fundet.</entry>
+  <entry key="325">Nulstil din adgangskode</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Ændre adgangskode</entry>
+  <entry key="328">Ny adgangskode</entry>
+  <entry key="329">Adgangskode igen</entry>
+  <entry key="330">Adgangskoderne du har angivet er ikke identiske.</entry>
+  <entry key="331">4 tegn eller mere; forskel på små og store bogstaver!</entry>
+  <entry key="332">Adgangskode valgt. Du kan logge ind nu.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Ukendt fejl. Rapporter venligst til dine support muligheder.</entry>
+  <entry key="335">Brugernavnet blev ikke fundet.</entry>
+  <entry key="336">Ugyldig adgangskode.</entry>
+  <entry key="337">Du er nu logget ud.</entry>
+  <entry key="338">Registrering via loginside (frontend) er inaktiveret.</entry>
+  <entry key="339">Ugyldig emailadresse.</entry>
+  <entry key="340">Filnavnet eksisterer i forvejen. Vælg venligst et andet filnavn.</entry>
+  <entry key="341">Filnavnet er for kort.</entry>
+  <entry key="342">Kunne ikke gemme adressen.</entry>
+  <entry key="343">Bruger oprettet, men skal tildeles til en organisation for at kunne logge ind.</entry>
+  <entry key="344">Nyt felt</entry>
+  <entry key="345">Der er ikke fundet et felt med dette feltID.</entry>
+  <entry key="346">Der er ikke fundet en etiket til dette felt.</entry>
+  <entry key="347">Admin autorisation er krævet.</entry>
+  <entry key="348">Sprogeditor</entry>
+  <entry key="349">Sprog</entry>
+  <entry key="350">Etiket-ID</entry>
+  <entry key="351">Etiket-Navn</entry>
+  <entry key="352">Værdi</entry>
+  <entry key="353">Feltværdi</entry>
+  <entry key="354">EtiketNavn</entry>
+  <entry key="355">EtiketVærdi</entry>
+  <entry key="356">Etiket-ID</entry>
+  <entry key="357">Du slettede kun etiketten, IKKE Feltet! Du kan ikke slettet feltet, det indeholder måske etiketter på andre sprog.</entry>
+  <entry key="358">Ugyldig Etiket-ID. FieldLanguagesvalues_Id kan ikke findes i databasen.</entry>
+  <entry key="359">Du kan ikke slette dette felt. Du kan kun slette etiketter, IKKE Felt. I øjeblikket er der ikke indlæst etiketter, dette kan skyldes, at ingen etiket er valgt eller defineret for dette felt og sproget.</entry>
+  <entry key="360">Eksporter</entry>
+  <entry key="361">Du skal logge ud for at kunne se ændringer.</entry>
+  <entry key="362">Tilføj nyt sprog</entry>
+  <entry key="363">Fjern sprog</entry>
+  <entry key="364">Tilføj nyt sprog</entry>
+  <entry key="365">Navn</entry>
+  <entry key="366">Tilføj sprog</entry>
+  <entry key="367">Sikkerhedskopier</entry>
+  <entry key="368">Gå til første</entry>
+  <entry key="369">Gå til foregående</entry>
+  <entry key="370">Gå til næste</entry>
+  <entry key="371">Gå til sidste</entry>
+  <entry key="372">Bruger taler (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">LYD til/fra</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Dine indstillinger</entry>
+  <entry key="376">Hej,</entry>
+  <entry key="377">Rediger profil</entry>
+  <entry key="378">Nye meddelelser:</entry>
+  <entry key="379">Indlæs nyt billede</entry>
+  <entry key="380">Brugerdata - Exporter</entry>
+  <entry key="381">Alla organisationer skal eksistere i forvejen!</entry>
+  <entry key="382">Start eksporteringen</entry>
+  <entry key="383">Ifølge organisation</entry>
+  <entry key="384">Start eksporteringen</entry>
+  <entry key="385">Brugerdata - Importer</entry>
+  <entry key="386">Vælg users.xml</entry>
+  <entry key="387">Importer</entry>
+  <entry key="388">Eksporter til XML - Disse filer kan bruges til: - Bidrage til projektet - Importere til et andet system - Lave sikkerhedskopier - Skræddersy programmet - Lægge i language-mappen for kommende installationer</entry>
+  <entry key="389">Vælg en sprogfil du vil importere. Husk at vælge den rigtige sprogfil fra combokoksen! Sprog filen vil blive importeret til dette sprog uafhængigt af navnet på filen.</entry>
+  <entry key="390">Importer - vælg fil</entry>
+  <entry key="391">Gem som</entry>
+  <entry key="392">Navn:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Gem</entry>
+  <entry key="395">Optagelser</entry>
+  <entry key="396">Optagelser/fremviser</entry>
+  <entry key="397">Optagelser fra offentlige og private rum</entry>
+  <entry key="398">Brugere:</entry>
+  <entry key="399">Tlsluttede:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Brugere i dette rum:</entry>
+  <entry key="402">Opdater</entry>
+  <entry key="403">Dette rum er optaget. Forsøg igen om nogle få minutter.</entry>
+  <entry key="404">Klik på et rum for at få flere detaljer</entry>
+  <entry key="405">Chat med brugere i dette rum:</entry>
+  <entry key="406">Rum:</entry>
+  <entry key="407">Brugere i dette rum:</entry>
+  <entry key="408">Siden:</entry>
+  <entry key="409">Afspil optagelse</entry>
+  <entry key="410">Længde:</entry>
+  <entry key="411">Dato:</entry>
+  <entry key="412">Optagelsestilstand! Du kan ikke ændre nogen værdier. Dette er en indspillet fil!</entry>
+  <entry key="413">Afspil denne optagelse</entry>
+  <entry key="414">Afspil / Pause</entry>
+  <entry key="415">Påbegynd optagelse</entry>
+  <entry key="416">Stop optagelse</entry>
+  <entry key="417">Optagelse:</entry>
+  <entry key="418">Der er allerede nogen der optager i øjeblikket:</entry>
+  <entry key="419">Optagelse! Af bruger:</entry>
+  <entry key="420">Annuller</entry>
+  <entry key="421">Optagelsen vil blive afbrudt og gemmes ikke.</entry>
+  <entry key="422">Genoptag</entry>
+  <entry key="423">Luk dette vindue og genoptag optagelsen</entry>
+  <entry key="424">Ændre linjefarve</entry>
+  <entry key="425">Vælg farve</entry>
+  <entry key="426">Inaktiver / aktiver linjefarve</entry>
+  <entry key="427">Ændre fyldfarve</entry>
+  <entry key="428">Inaktiver / aktiver fyldfarve</entry>
+  <entry key="429">Ændre linjebredde</entry>
+  <entry key="430">Luk</entry>
+  <entry key="431">Ændre font størrelse</entry>
+  <entry key="432">Slet optagelse</entry>
+  <entry key="433">Gæst</entry>
+  <entry key="434">Af:</entry>
+  <entry key="435">Navn</entry>
+  <entry key="436">Rum</entry>
+  <entry key="437">Dato</entry>
+  <entry key="438">Annuller</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Navn</entry>
+  <entry key="441">Dato</entry>
+  <entry key="442">Slet serverens Chat-log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Send meddelelse</entry>
+  <entry key="445">Emotikoner</entry>
+  <entry key="446">Emotikoner</entry>
+  <entry key="447">Vælg enheder</entry>
+  <entry key="448">Lyd og video</entry>
+  <entry key="449">Kun lyd</entry>
+  <entry key="450">Kun video</entry>
+  <entry key="451">Ingen lyd/video (statisk billede)</entry>
+  <entry key="452">Ingen Lyd/Video vil blive publiceret. I stedet vil et billede fra din profil blive vist. Vælg denne indstilling, hvis du har en dårlig båndbredde.</entry>
+  <entry key="453">MA</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">ON</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">LØ</entry>
+  <entry key="459">SØ</entry>
+  <entry key="460">Mandag</entry>
+  <entry key="461">Tirsdag</entry>
+  <entry key="462">Onsdag</entry>
+  <entry key="463">Torsdag</entry>
+  <entry key="464">Fredag</entry>
+  <entry key="465">Lørdag</entry>
+  <entry key="466">Søndag</entry>
+  <entry key="467">KU</entry>
+  <entry key="468">Kalender uge</entry>
+  <entry key="469">Januar</entry>
+  <entry key="470">Februar</entry>
+  <entry key="471">Marts</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Deltagere</entry>
+  <entry key="483">Vis Layout indstillinger</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Bredde | Højde</entry>
+  <entry key="486">Video-container</entry>
+  <entry key="487">Moderator-container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-container</entry>
+  <entry key="490">Aktiveret</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Bredde | Højde</entry>
+  <entry key="493">Filer, Chat, Deltagere - container</entry>
+  <entry key="494">Aktiveret</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Bredde | Højde</entry>
+  <entry key="497">Moderatoren har forladt rummet. I øjeblikket er der ikke nogen som præsenterer noget. Du kan ansøge om at blive moderator eller vente.</entry>
+  <entry key="498">Der er ikke nogen moderator i dette rum, men der er nogen deltagere. Du kan ansøge om at blive moderator eller vente.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Meddelelse fra bruger:</entry>
+  <entry key="502">Meddelelse:</entry>
+  <entry key="503">Klik på dette link for at deltage i mødet:</entry>
+  <entry key="504">Klik her for at gå til rummet.</entry>
+  <entry key="505">Hvis du har problemer med at åbne genvejen (link), bedes du kopiere genvejen og indsætte denne i din webbrowser:</entry>
+  <entry key="506">{0} registrering</entry>
+  <entry key="507">Dine brugerdata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Adgangskode:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">{0} - Teamet</entry>
+  <entry key="512">{0} registrering</entry>
+  <entry key="513">{0} - Nulstil adgangskode</entry>
+  <entry key="514">Klik på den her genvej (link) for at indsætte ny adgangskode:</entry>
+  <entry key="515">Klik her for at angive ny adgangskode</entry>
+  <entry key="516">Hvis du har problemer med at åbne genvejen (link), bedes du kopiere genvejen og indsætte denne i din webbrowser:</entry>
+  <entry key="517">{0} nulstilling af adgangskode</entry>
+  <entry key="518">Angiv venligst en gyldig dato, f.eks. 24.12.2009 (dd.mm.åååå)</entry>
+  <entry key="519">Angiv venligst en gyldig emailadresse, f.eks navn@mail.dk</entry>
+  <entry key="520">Angiv venligst et gyldigt flydende nummer, f.eks. 1.00</entry>
+  <entry key="521">Angiv venligst et gyldigt nummer (Integer), f.eks. 100</entry>
+  <entry key="522">Angiv venligst et gyldigt telefonnummer, f.eks. +45 39151515</entry>
+  <entry key="523">Angiv venligst en gyldig tid, f.eks. 12:23 (tt:mm)</entry>
+  <entry key="524">Adgangskodebeskyttet</entry>
+  <entry key="525">Adgangskode</entry>
+  <entry key="526">Gyldighedsstid</entry>
+  <entry key="527">Uendelig</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Engangs</entry>
+  <entry key="530">Gyldig fra og med:</entry>
+  <entry key="531">Gyldig til:</entry>
+  <entry key="532">Invitation til {0}</entry>
+  <entry key="533">Ingen invitation tilgængelig med denne invitationskode.</entry>
+  <entry key="534">Invitationen anvendes allerede. Den her type invitationer kan ikke genanvendes.</entry>
+  <entry key="535">Invitationskoden er ikke gyldig udenfor mødets start og slut tidspunkt. Kontroller venligst tidspunktet i den tilsendte mødeindkaldelse (email)</entry>
+  <entry key="536">Adgangskode:</entry>
+  <entry key="537">Kontroller Adgangskode</entry>
+  <entry key="538">Ugyldig adgangskode!</entry>
+  <entry key="539">Webbrowser</entry>
+  <entry key="540">Synkroniser lyd/video</entry>
+  <entry key="541">Indlogningen var korrekt, men sessionen er ikke længere aktiv eller lagret på serveren. Prøv at logge ind igen efter du har fået et nyt SessionId.</entry>
+  <entry key="542">SessionId er ikke logget ind eller har ikke nogen administrationsrettigheder. SOAP Gateway kræver en bruger med administrationsrettigheder for at tilkoble nye brugere.</entry>
+  <entry key="543">Den her session er ikke koplet til nogen Remoteuser-Data. Enten blev den såkaldte SOAP-Gateway ikke indlæst før applikationen blev kørt eller der er anvendt et fejlagtigt Session-ID.</entry>
+  <entry key="544">Optageren er fortsat i Beta-stadie!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-aksel</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-aksel</entry>
+  <entry key="549">b</entry>
+  <entry key="550">bredde</entry>
+  <entry key="551">h</entry>
+  <entry key="552">højde</entry>
+  <entry key="553">Ændre gennemsigtghed (transparent)</entry>
+  <entry key="554">Åben browseren</entry>
+  <entry key="555">Luk browseren</entry>
+  <entry key="556">Forbindelsen til serveren er er gået tabt. Du skal indlæse applikationen igen eller/og kontrollere din netværksforbindelse.</entry>
+  <entry key="557">Peger</entry>
+  <entry key="558">Synkroniserer</entry>
+  <entry key="559">Synkroniserer brugere, vent venligst</entry>
+  <entry key="560">&lt;u&gt;Dovnload som SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download som PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download som JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download som PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download som TIF&lt;/u&gt;</entry>
+  <entry key="565">Påmindelse:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">ingen</entry>
+  <entry key="569">Placering:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Slut</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Inviter deltagere</entry>
+  <entry key="575">Daglig</entry>
+  <entry key="576">Måndelig</entry>
+  <entry key="577">Årlig</entry>
+  <entry key="578">Mødets sluttidspunkt skal være efter dets begyndelse!</entry>
+  <entry key="579">Tilføj en titel, tak!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktiver det her hvis du skriver på et højre til venstre sprog</entry>
+  <entry key="582">Skrivebord (Forside)</entry>
+  <entry key="583">Se optagelser fra møder og auditorier</entry>
+  <entry key="584">Møde - Opret en konference med 4 (op til 16) deltagere &lt;br&gt; alle vil have tilgang til lyd + video.</entry>
+  <entry key="585">Auditorium - Opret en konference med op til 200 deltagare&lt;br/&gt;Her er det kun moderatoren som har tilgang til lyd + video.</entry>
+  <entry key="586">Opret brugere, rum, organisationer&lt;br/&gt; + ændre konfigurationer</entry>
+  <entry key="587">Brugere i dette rum lige nu</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Indlæser dokument. Vent venligst til alle klienter er synkroniserede.</entry>
+  <entry key="592">Indlæsning færdig, konverterer dokument...</entry>
+  <entry key="593">Start indlæsning</entry>
+  <entry key="594">Dialog indlæsning og importering. Vælg venligst en fil fra din harddisk.</entry>
+  <entry key="595">Annuller</entry>
+  <entry key="596">Vælg fil</entry>
+  <entry key="597">Forbindelser</entry>
+  <entry key="598">Værdi</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Tilsluttet siden</entry>
+  <entry key="602">Rum</entry>
+  <entry key="603">Udeluk bruger</entry>
+  <entry key="604">Udeluk brugere</entry>
+  <entry key="605">Vil du virkelig udelukke denne klient?&lt;br/&gt; Det her udelukker kun klienten fra det aktuelle rum. Vedkommende kan tilslutte sig igen.</entry>
+  <entry key="606">Din session er blevet lukket af administratoren eller moderatoren.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Brugeren er moderator i dette rum</entry>
+  <entry key="609">Brugeren har tilladelse til at tegne på whiteboardet</entry>
+  <entry key="610">Genstart lyd/video eller ændre indstillinger</entry>
+  <entry key="611">Tillad denne bruger at tegne på whiteboardet</entry>
+  <entry key="612">Fjern muligheden for at tegne på whiteboardet</entry>
+  <entry key="613">Brugere</entry>
+  <entry key="614">Filer</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Din konto er tildelt til flere organisationer. Vælg venligst en til denne session.</entry>
+  <entry key="618">Dette rum er optaget i øjeblikket. Forsøg venligst igen senere.</entry>
+  <entry key="619">Rumtyper</entry>
+  <entry key="620">Tidsbooket rum</entry>
+  <entry key="621">Servertid</entry>
+  <entry key="622">{0} - Påmindelse</entry>
+  <entry key="623">Meddelelse fra bruger:</entry>
+  <entry key="624">Meddelelse:</entry>
+  <entry key="625">Klik på denne genvej (link) for at deltage i mødet:</entry>
+  <entry key="626">Klik her for at gå ind i rummet</entry>
+  <entry key="627">Hvis du har problemer med genvejen, bedes du kopiere denne genvej i stedet og indsætte i din webbrowser:</entry>
+  <entry key="628">Søg internt</entry>
+  <entry key="629">eksterne brugere</entry>
+  <entry key="630">fornavn</entry>
+  <entry key="631">navn</entry>
+  <entry key="632">email</entry>
+  <entry key="633">Bekræft at du logger af</entry>
+  <entry key="634">Er du sikker på at du vil logge af?</entry>
+  <entry key="635">Aktioner</entry>
+  <entry key="636">Demo Rum</entry>
+  <entry key="637">Demo Tid</entry>
+  <entry key="638">Mødetimer</entry>
+  <entry key="639">Dette rum er et demo rum. For at fjerne denne advarsel, skal du enten oprette et privat møderum eller sætte et op på din egen server. Du bliver automatisk loget ud om:</entry>
+  <entry key="640">Modereret</entry>
+  <entry key="641">Vent venligst indtil moderatoren har tilsluttet sig rummet. Moderatoren kan enten være en lærer, instruktør, administrator eller den bruger som har oprettet rummet.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Indkommende skærmdeling</entry>
+  <entry key="644">En ny skærmdeling vil blive påbegyndt af brugeren:</entry>
+  <entry key="645">Start deling</entry>
+  <entry key="646">Tilføj et nyt møde</entry>
+  <entry key="647">Møderum</entry>
+  <entry key="648">Auditorium</entry>
+  <entry key="649">Moderering</entry>
+  <entry key="650">Moderer brugere</entry>
+  <entry key="651">Moderer rum</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vil du ændre denne bruger til at være moderator af denne organisation?</entry>
+  <entry key="654">Vælg venligst en organisation før du forsøger at tilføje en bruger til den!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Vil du virkelig fjerne denne bruger fra organisationen?</entry>
+  <entry key="657">Denne bruger er moderator</entry>
+  <entry key="658">Denne bruger er ikke moderator</entry>
+  <entry key="659">Vil du fjerne denne bruger som moderator fra organisationen?</entry>
+  <entry key="660">Tilføj eller fjern brugere eller rum i din organisation</entry>
+  <entry key="661">Vil du virkelig fjerne denne?</entry>
+  <entry key="662">Vil du virkelig fjerne denne bruger fra organisationen? Du vil kun fjerne tilslutningen mellem brugeren og organisationen. For at fjerne brugeren helt, skal du logge ind i administrationspanelet.</entry>
+  <entry key="663">Du kan ikke fjerne din egen bruger!</entry>
+  <entry key="664">Denne funktion/metode kræver en administrationskonto for at kunne kaldes!</entry>
+  <entry key="665">Der findes ingen session associeret med dette ID.</entry>
+  <entry key="666">Dette er en administrations- eller moderatorkonto. Du kan kun ændre denne konto via administrationspanelet.</entry>
+  <entry key="667">Klik venligst på flg. link eller kopier adressen til din webbrowsers adressefelt for at fuldføre registreringen.</entry>
+  <entry key="668">Klik her for at verificere din emailadresse.</entry>
+  <entry key="669">Ingen brugere fundet med denne Hash-kode.</entry>
+  <entry key="670">Denne bruger er allerede aktiveret!</entry>
+  <entry key="671">Du har aktiveret din konto!</entry>
+  <entry key="672">Log ind nu</entry>
+  <entry key="673">Din konto er ikke aktiveret. Anvend genvejen (link) i den email du modtog, da du registrerede dig.</entry>
+  <entry key="674">Du har nu registreret dig til systemet. Du har fået tilsendt en email med din verificeringskode. Kontroller venligst din indbakke.</entry>
+  <entry key="675">Fjern denne bruger som moderator</entry>
+  <entry key="676">Tildel moderator rettigheder til denne bruger</entry>
+  <entry key="677">Brugere</entry>
+  <entry key="678">Adgang til whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Vælg venligst en bruger fra listen for at give vedkommende adgang til whiteboard, moderation eller video.</entry>
+  <entry key="681">Denne bruger er allerede moderator, så han har automatiskt ret til at tegne.</entry>
+  <entry key="682">Dette er dig! Du kan ikke fjerne moderator rettighederne fra dig selv.</entry>
+  <entry key="683">Tillad denne bruger at publicere lyd/video</entry>
+  <entry key="684">Fjern lyd/video fra denne bruger</entry>
+  <entry key="685">Jeg vil være moderator for dette rum</entry>
+  <entry key="686">Jeg vil tegne på whiteboardet</entry>
+  <entry key="687">Jeg vil dele lyd/video</entry>
+  <entry key="688">Du er moderator for dette rum</entry>
+  <entry key="689">Du har tilladelse til at tegne på whiteboardet</entry>
+  <entry key="690">Du har tilladelse til at publicere audio/video</entry>
+  <entry key="691">Meddelelse til moderatoren</entry>
+  <entry key="692">Brugeren</entry>
+  <entry key="693">vil have moderator rettigheder. Brug status ikonerne i brugerlisten for at tildele eller fjerne moderator rettigheder.</entry>
+  <entry key="694">vil tegne på whiteboardet. Brug status ikonerne i brugerlisten for at tildele eller fjerne rettigheder til at tegne på whiteboardet.</entry>
+  <entry key="695">vil publicere lyd/video. Brug status ikonerne i brugerlisten for at tildele eller fjerne rettigheder til publicering af lyd/video.</entry>
+  <entry key="696">Du skal vente til en moderator er trådt ind i rummet.</entry>
+  <entry key="697">Annuller</entry>
+  <entry key="698">Gem</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Måned</entry>
+  <entry key="701">År</entry>
+  <entry key="702">Indlæs fil</entry>
+  <entry key="703">Tilføj mappe</entry>
+  <entry key="704">Opdater</entry>
+  <entry key="705">Papirkurv</entry>
+  <entry key="706">Mine filer (Privat drev)</entry>
+  <entry key="707">Rum filer (Offentligt drev)</entry>
+  <entry key="708">Tilføj fil</entry>
+  <entry key="709">Tilføj mappe</entry>
+  <entry key="710">Slet mappe</entry>
+  <entry key="711">Ret navn</entry>
+  <entry key="712">Ny mappe</entry>
+  <entry key="713">Er du sikker på at du vil slette dette emne?</entry>
+  <entry key="714">Søg</entry>
+  <entry key="715">Søg</entry>
+  <entry key="716">Åben dokument</entry>
+  <entry key="717">Vis alle filer (Træstruktur)</entry>
+  <entry key="718">Luk dokument</entry>
+  <entry key="719">Slet fil</entry>
+  <entry key="720">Du har ikke tilladelse til at tegne på whiteboardet. Du skal være moderator eller som min. have rettigheder til at redigere Wwhiteboardet. Du må spørge moderatoren om han vil give dig rettigheder.</entry>
+  <entry key="721">Dokument egenskaber</entry>
+  <entry key="722">Start klient (ekstern)</entry>
+  <entry key="723">Start klient (HTTP)</entry>
+  <entry key="724">En bruger vil dele sin skærm. Vil du se vedkommendes skærm?</entry>
+  <entry key="725">Du deler din skærm i øjeblikket. For at stoppe denne funktion (session) skal du klikke på stop knappen i klient programmet til deling af skærm.</entry>
+  <entry key="726">deling af skærm session</entry>
+  <entry key="727">Du deler allerede din skærm!</entry>
+  <entry key="728">Fremviser til deling af skærm</entry>
+  <entry key="729">Luk</entry>
+  <entry key="730">Fremviser til deling af skærm</entry>
+  <entry key="731">Klik på start for at dele din skærm</entry>
+  <entry key="732">Start deling af skærm</entry>
+  <entry key="733">Stop deling af skærm</entry>
+  <entry key="734">Vælg skærm område:</entry>
+  <entry key="735">Ændre bredde</entry>
+  <entry key="736">Deling af skærm sessionen er afsluttet!</entry>
+  <entry key="737">Ændre højde</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Bredde:</entry>
+  <entry key="741">Højde:</entry>
+  <entry key="742">Forbindelsen blev lukket af serveren</entry>
+  <entry key="743">Annuller</entry>
+  <entry key="744">Start ekstern</entry>
+  <entry key="745">Hvis du lukker denne session helt vil du ikke være i stand til at genstarte fremviseren for denne session.</entry>
+  <entry key="746">Bekræft lukning af fremviser sessionen.</entry>
+  <entry key="747">Del skærm</entry>
+  <entry key="748">Optag session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ups, ... Firefox på Windows viser ikke Co-Browsing så godt. Brug venligst en anden browser for at bruge denne mulighed.</entry>
+  <entry key="751">Forrige</entry>
+  <entry key="752">Næste</entry>
+  <entry key="753">Indlæs igen</entry>
+  <entry key="754">Hjem</entry>
+  <entry key="755">Indlæs</entry>
+  <entry key="756">Tilføj denne hjemmeside som standard hjemmeside i tilknytning til din profil.</entry>
+  <entry key="757">Test indstillinger</entry>
+  <entry key="758">Kontroller mikrofon og kameraindstillinger inden du går ind i et rum ved at optage i et par sek. Du kan efterflg. se din optagelse for at kontrollere din lyd samt dit kamerabillede.</entry>
+  <entry key="759">Vis ikke denne test igen</entry>
+  <entry key="760">Annuller</entry>
+  <entry key="761">Start konference</entry>
+  <entry key="762">Spørg ikke igen</entry>
+  <entry key="763">OPTAG</entry>
+  <entry key="764">AFSPIL</entry>
+  <entry key="765">Du kan fortsætte uden at teste, hvis du ikke planlægger at publicere lyd og billede. Deltagere uden lyd og video kan stadig bruge whiteboard, dele skærm eller skrive chat meddelelser.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau (visning)</entry>
+  <entry key="768">Klik på start</entry>
+  <entry key="769">Start konference</entry>
+  <entry key="770">Start event</entry>
+  <entry key="771">Vælg rum</entry>
+  <entry key="772">Kontroller Setup</entry>
+  <entry key="773">Start konference</entry>
+  <entry key="774">Sådan gør du:</entry>
+  <entry key="775">Start optagelse</entry>
+  <entry key="776">Vis ikke Audio / Video Test (optagelse) før du deltager i en konference</entry>
+  <entry key="777">Offentlige Rum</entry>
+  <entry key="778">Offentlige Rum er tilgængelige for alle brugere.</entry>
+  <entry key="779">Private Rum</entry>
+  <entry key="780">Private Rum er kun tilgængelige for brugere i samme organisation.</entry>
+  <entry key="781">Mine rum</entry>
+  <entry key="782">Rum i dette afsnit er oprettet til privat brug. De er oprettet via kalenderen og har en start og slut dato. De vises kun i dette afsnit mens de er aktive (gyldige).</entry>
+  <entry key="783">Du skal være moderator for at kunne gøre dette.</entry>
+  <entry key="784">Ansøg om moderation</entry>
+  <entry key="785">Ansøg om whiteboard adgang</entry>
+  <entry key="786">Ansøg om kamera/mikrofon adgang</entry>
+  <entry key="787">Denne sessions Hash-kode er allerede brugt. Du kan ikke bruge den 2 gange.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">LUK</entry>
+  <entry key="790">Vil du virkelg lukke? Du skal måske slette indlæste dokumenter, whiteboard og chat historie først.</entry>
+  <entry key="791">Luk konference</entry>
+  <entry key="792">Rum</entry>
+  <entry key="793">Vælg rum til et møde</entry>
+  <entry key="794">Der er en event i kalenderen som ikke er gemt. Gem den først eller fjern den.</entry>
+  <entry key="795">Tilføj venligst min. 1 deltager til dit møde!</entry>
+  <entry key="796">Vil du virkelig slette denne event?</entry>
+  <entry key="797">Advarsel</entry>
+  <entry key="798">Tilføj event</entry>
+  <entry key="799">dag</entry>
+  <entry key="800">uge</entry>
+  <entry key="801">måned</entry>
+  <entry key="802">Beskrivelse</entry>
+  <entry key="803">Deltagere</entry>
+  <entry key="804">{0} konferenceplatform. Klik på startknappen for at starte en konference med det samme eller gå til din kalender for at planlægge et møde.</entry>
+  <entry key="805">Planlæg et møde</entry>
+  <entry key="806">For at sætte en konference op, kan du tilføje en event i din kalender. For hver event der oprettes, vil der automatisk blive oprettet et konferencerum. Alle deltagere samt dig selv, vil få tilsendt en email med en genvej (link) til det pågældende konferencerum.&lt;br/&gt;&lt;br/&gt;Du kan vælge mellem forskellige rumtyper med forskellig layout og funktionalitet. Du kan også vælge mellem forskellige notificeringsmuligheder (email), som sendes for hver kalender event.</entry>
+  <entry key="807">Behov for hjælp?</entry>
+  <entry key="808">Begrænset</entry>
+  <entry key="809">Søg</entry>
+  <entry key="810">Tilføj</entry>
+  <entry key="811">Ingen bruger valgt. Vælg venligst et emne fra listen først og klik på tilføj efterfølgende.</entry>
+  <entry key="812">Tilføj deltager</entry>
+  <entry key="813">Gem</entry>
+  <entry key="814">Slet</entry>
+  <entry key="815">Event detaljer</entry>
+  <entry key="816">Default moderatorer</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Navn</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Tilføj ny default moderator</entry>
+  <entry key="822">Er Super moderator</entry>
+  <entry key="823">Hvis rummet er modereret, vil brugere med moderator eller administrator niveau automatisk blive moderator hvis de går ind i rummet. Såfremt du ikke vil angive dette og kun vil lade en bestemt bruger blive moderator, skal du anvende default moderator valgmuligheden.</entry>
+  <entry key="824">En Super moderator er altid moderator, når vedkommende går ind i et rum og ingen kan fjerne moderator flaget fra vedkommende.</entry>
+  <entry key="825">Tildel Super moderator funk. til en bruger</entry>
+  <entry key="826">Fjern Super moderator funk. fra en bruger</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Såfremt du tilføjer en organisation til et rum, er det kun brugere som er medlem af organisationen, som kan få adgang til pågældende rum (Dette er kun gyldigt hvis hvis isPublic flaget er sat til false!).</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Begrænsninger</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Er du sikker?</entry>
+  <entry key="833">Vil du virkelig slette dette emne? Du skal klikke på Gem knappen for at gemme ændringerne!</entry>
+  <entry key="834">Ingen bruger er valgt. Vælg først inden du tilføjer!</entry>
+  <entry key="835">Tilføj ny default moderator</entry>
+  <entry key="836">Vil du tilføje Super moderator flaget for denne bruger? En Super moderator er ikke kun moderator i et rum, hvilket betyder at ingen andre moderatorer kan fjerne moderator flaget for denne bruger. Du mangler at gemme rum objektet for at gemme disse indstillinger!</entry>
+  <entry key="837">Vil du fjerne Super moderator flaget for denne bruger?? Du mangler at gemme rum objektet for at gemme disse indstillinger!</entry>
+  <entry key="838">Denne bruger er en Super moderator. Du kan ikke fjerne moderator flaget fra en Super moderator!</entry>
+  <entry key="839">Vil du virkelig slette denne fil/mappe?</entry>
+  <entry key="840">Slet fil/mappe?</entry>
+  <entry key="841">Fr.</entry>
+  <entry key="842">Hr.</entry>
+  <entry key="843">Egenskaber</entry>
+  <entry key="844">Vis musens position for brugerne</entry>
+  <entry key="845">Del lyd med SIP Appletten</entry>
+  <entry key="846">Del lyd med SIP og video med Flash</entry>
+  <entry key="847">Fyldig</entry>
+  <entry key="848">Se skærm</entry>
+  <entry key="849">Brugeren</entry>
+  <entry key="850">ønsker at dele sin skærm. Vil du se?</entry>
+  <entry key="851">Luk</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Sessionen blev lukket at den delende bruger!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Ny deling af skærm</entry>
+  <entry key="856">Minimer</entry>
+  <entry key="857">Maximer</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Optagelse tidslinie</entry>
+  <entry key="860">Mine optagelser</entry>
+  <entry key="861">Offentlige optagelser</entry>
+  <entry key="862">INFO</entry>
+  <entry key="863">Navn</entry>
+  <entry key="864">Længde</entry>
+  <entry key="865">Dato</entry>
+  <entry key="866">Af</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">MAIN - Video</entry>
+  <entry key="869">Optager</entry>
+  <entry key="870">Du kan optage og dele din skærm samtidigt. For at gøre det muligt for andre at se din skærm, skal du bare klikke på Start knappen i toppen. For kun at optage sessionen er det nok at klikke på Start optagelse.</entry>
+  <entry key="871">Start optagelse</entry>
+  <entry key="872">Stop optagelse</entry>
+  <entry key="873">Download FLV-filen</entry>
+  <entry key="874">Rum</entry>
+  <entry key="875">Afspil</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Brugeren har mikrofonen tilsluttet</entry>
+  <entry key="878">Stop deling</entry>
+  <entry key="879">Tillad bruger spørgsmål</entry>
+  <entry key="880">Slå fra for at forhindre at brugere kan forstyrre dig i dette rum. Effekten er, at knappen som anvendes til moderation ("Jeg har et spørgsmål") ikke vil være synlig.</entry>
+  <entry key="881">Rettigheder</entry>
+  <entry key="882">Download som AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Rå skærmvideo</entry>
+  <entry key="886">Kun lyd</entry>
+  <entry key="887">Der har været fejl under processionen af optagelsen.</entry>
+  <entry key="888">Optagelsen er ikke klar til at blive set. Prøv venligst igen om et par minutter.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Optager meddelelse</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet er ikke klar</entry>
+  <entry key="893">SIP-konto indstillinger</entry>
+  <entry key="894">SIP for hver enkelt bruger. Du kan tilslutte eller afslutte SIP via administration &gt; konfiguration (Nøgle: enable_sip). SIP data for hver enkelt bruger bør blive oprettet automatisk.</entry>
+  <entry key="895">SIP-Bruger</entry>
+  <entry key="896">Sip-Adgangskode</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Login til SIP Gateway har fejlet. Du bør kontrollere autentifikations data fra din SIP-udbyder og SIP-onto data for hver enkelt bruger. Som administrator har du stadig mulighed for at logge ind og kontrollere konfigurationen. Som bruger eller moderator vil du blive blokeret med hensyn til interaktion.</entry>
+  <entry key="899">Login til SIP Gateway har fejlet. Kontakt support!</entry>
+  <entry key="900">Logger ind til SIP-Gateway ...</entry>
+  <entry key="901">Logger ind til SIP-Gateway ...</entry>
+  <entry key="902">Vis Log</entry>
+  <entry key="903">Log meddelelser fra sendingen af optagelses processen</entry>
+  <entry key="904">SIP-Applet meddelelse</entry>
+  <entry key="905">SIP-Appletten er ikke klar. Accepter appletten og klik på OK!</entry>
+  <entry key="906">Anmod om at blive moderator</entry>
+  <entry key="907">Gem møde ændringer</entry>
+  <entry key="908">Mødet har været ændret. Vil du gemme disse ændringer? &lt;br/&gt;&lt;br/&gt;Alle deltagere til dette møde vil modtage en email med den opdaterede dato og tid (afhængig af notifikationstypen for dette møde).</entry>
+  <entry key="909">For at få adgang til andre optagelser skal du logge ind i {0} applikationen.</entry>
+  <entry key="910">Vælg bruger for denne video</entry>
+  <entry key="911">Bruge tilgængelige for denne Pod</entry>
+  <entry key="912">Du er moderator i dette interview. Du kan bestemme hvem der taler i dette interview og du kan starte / stoppe optagelsen af denne session.</entry>
+  <entry key="913">Start optagelse</entry>
+  <entry key="914">Stop optagelse</entry>
+  <entry key="915">Optagelsen af interviewet er allerede startet.</entry>
+  <entry key="916">Optagelsen er allerede stoppet eller er ikke startet endnu.</entry>
+  <entry key="917">Optagelsen af dette interview er allerede startet!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">This is a Team-Room, you can send the Team-Moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">1) Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything! [Screen Sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml
new file mode 100644
index 0000000..f0d5ab3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -0,0 +1,1882 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferenz</entry>
+  <entry key="2">Meeting</entry>
+  <entry key="3">Event</entry>
+  <entry key="4">Einstellungen</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Aufnahme</entry>
+  <entry key="9">Keine Datei vorhanden</entry>
+  <entry key="10">Aufnahme nur für Lehrer verfügbar</entry>
+  <entry key="11">verbundene Benutzer:</entry>
+  <entry key="12">Konferenz starten</entry>
+  <entry key="13">Mein Name</entry>
+  <entry key="14">Videokonferenz</entry>
+  <entry key="15">Datei importieren</entry>
+  <entry key="16">Liste neu laden</entry>
+  <entry key="17">Zum Hauptverzeichnis</entry>
+  <entry key="18">Neue Umfrage</entry>
+  <entry key="19">Eine neue Umfrage für die Konferenz.</entry>
+  <entry key="20">Frage:</entry>
+  <entry key="21">Umfragenart:</entry>
+  <entry key="22">Anlegen</entry>
+  <entry key="23">Info: Jeder verbundene Benutzer erhält eine Nachricht mit der neuen Umfrage.</entry>
+  <entry key="24">Umfrage anlegen</entry>
+  <entry key="25">Abbrechen</entry>
+  <entry key="26">Ja/Nein</entry>
+  <entry key="27">Numerisch 1-10</entry>
+  <entry key="28">Umfrage</entry>
+  <entry key="29">Sie müssen Moderator/Lehrer in diesem Raum sein, um eine Umfrage anzulegen.</entry>
+  <entry key="30">Ihr Stimme wurde abgegeben.</entry>
+  <entry key="31">Sie haben für diese Umfrage bereits ihr Votum abgegeben.</entry>
+  <entry key="32">Abstimmen!</entry>
+  <entry key="33">Ihre Antwort:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nein</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">Umfrageergebnisse</entry>
+  <entry key="38">Frage:</entry>
+  <entry key="39">Antworten:</entry>
+  <entry key="40">Ergebnis:</entry>
+  <entry key="41">Es gibt zur Zeit keine Umfrage.</entry>
+  <entry key="42">Abstimmen!</entry>
+  <entry key="43">Meeting (max 4 Plätze)</entry>
+  <entry key="44">Konferenz (max 50 Plätze)</entry>
+  <entry key="45">Modus</entry>
+  <entry key="46">verbleibende Plätze</entry>
+  <entry key="47">Bereits vergeben</entry>
+  <entry key="48">Eintreten</entry>
+  <entry key="49">Der Moderator/Lehrer hat den Raum verlassen.</entry>
+  <entry key="50">Systemnachricht</entry>
+  <entry key="51">Geräteauswahl</entry>
+  <entry key="52">Kamera wählen:</entry>
+  <entry key="53">Mikrofon wählen:</entry>
+  <entry key="54">Ok</entry>
+  <entry key="55">Abbrechen</entry>
+  <entry key="56">Sie müssen sich erneut verbinden damit die Änderungen wirksam werden.</entry>
+  <entry key="57">Einstellungen ändern.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Kurssprache:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Abbrechen</entry>
+  <entry key="62">Zeichenbrett leeren</entry>
+  <entry key="63">Soll das Zeichenbrett geleert werden bevor ein neues Bild hinzugefügt wird?</entry>
+  <entry key="64">Nicht nochmal fragen</entry>
+  <entry key="65">Nein</entry>
+  <entry key="66">Einstellungen bearbeiten</entry>
+  <entry key="67">Bestätigung anfordern bevor das Zeichenbrett geleert wird.</entry>
+  <entry key="68">Profil</entry>
+  <entry key="69">Zeichenbrett leeren</entry>
+  <entry key="70">Rückgängig</entry>
+  <entry key="71">Wiederherstellen</entry>
+  <entry key="72">Markieren</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Frei zeichnen</entry>
+  <entry key="75">Linien zeichnen</entry>
+  <entry key="76">Unterstreichen</entry>
+  <entry key="77">Rechteck</entry>
+  <entry key="78">Kreis</entry>
+  <entry key="79">Pfeil</entry>
+  <entry key="80">Löschen</entry>
+  <entry key="81">Moderation beantragen</entry>
+  <entry key="82">Beantragen</entry>
+  <entry key="83">Abbrechen</entry>
+  <entry key="84">Moderator werden</entry>
+  <entry key="85">Schließen</entry>
+  <entry key="86">Kursiv</entry>
+  <entry key="87">Fett</entry>
+  <entry key="88">Warte</entry>
+  <entry key="89">Ein Benutzer möchte die Moderation übernehmen:</entry>
+  <entry key="90">Annehmen</entry>
+  <entry key="91">Ablehnen</entry>
+  <entry key="92">Abbrechen</entry>
+  <entry key="93">Sende Anfrage an folgende Nutzer</entry>
+  <entry key="94">bestätigt</entry>
+  <entry key="95">abgelehnt</entry>
+  <entry key="96">Ändere Moderator</entry>
+  <entry key="97">Sie sind nicht der Moderator dieser Konferenz!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Dieser Raum ist voll. Bitte versuchen Sie es zu einem späteren Zeitpunkt nochmals.</entry>
+  <entry key="100">Kreis</entry>
+  <entry key="101">Schließen</entry>
+  <entry key="102">Eingabefehler</entry>
+  <entry key="103">Der Benutzername muss mindestens 4 Zeichen lang sein</entry>
+  <entry key="104">Das Passwort muss mindestens 4 Zeichen lang sein</entry>
+  <entry key="105">Der Benutzername ist bereits vergeben</entry>
+  <entry key="106">Die E-Mail ist bereits registriert</entry>
+  <entry key="107">Ein Fehler trat auf. Bitte kontaktieren Sie den Administrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Benutzer/E-Mail:</entry>
+  <entry key="110">Passwort:</entry>
+  <entry key="111">Sprache</entry>
+  <entry key="112">Einloggen</entry>
+  <entry key="113">Registrieren</entry>
+  <entry key="114">Benutzer:</entry>
+  <entry key="115">Passwort:</entry>
+  <entry key="116">Wiederhole:</entry>
+  <entry key="117">Vorname:</entry>
+  <entry key="118">Nachname:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrieren</entry>
+  <entry key="122">Abbrechen</entry>
+  <entry key="123">Registrieren</entry>
+  <entry key="124">Home</entry>
+  <entry key="125">Benutzer</entry>
+  <entry key="126">Gruppen</entry>
+  <entry key="127">Organisationen</entry>
+  <entry key="128">Konferenzräume</entry>
+  <entry key="129">Öffentlich</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Betreten</entry>
+  <entry key="132">Benutzer</entry>
+  <entry key="133">Passwort</entry>
+  <entry key="134">Wiederholen</entry>
+  <entry key="135">Vorname</entry>
+  <entry key="136">Nachname</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Geburtstag</entry>
+  <entry key="139">Straße/Nr.</entry>
+  <entry key="140">PLZ/Stadt</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adressinfo</entry>
+  <entry key="143">Benutzerdaten</entry>
+  <entry key="144">Speichern</entry>
+  <entry key="145">Speichervorgang</entry>
+  <entry key="146">Benutzer-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Vorname</entry>
+  <entry key="149">Nachname</entry>
+  <entry key="150">Vorwärts</entry>
+  <entry key="151">Zurück</entry>
+  <entry key="152">Datensatz entfernen</entry>
+  <entry key="153">Abbrechen</entry>
+  <entry key="154">Enfernen</entry>
+  <entry key="155">Datensatz anlegen</entry>
+  <entry key="156">Datensatz neu laden</entry>
+  <entry key="157">Datensatz entfernen</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">gesperrt</entry>
+  <entry key="160">aktiv</entry>
+  <entry key="161">Organisationen</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Schließen</entry>
+  <entry key="164">Organisations-ID</entry>
+  <entry key="165">Name</entry>
+  <entry key="166">Benutzer</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Benutzerrolle</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Name</entry>
+  <entry key="172">Organisation hinzufügen</entry>
+  <entry key="173">Organisation hinzufügen</entry>
+  <entry key="174">Abbrechen</entry>
+  <entry key="175">Hinzufügen</entry>
+  <entry key="176">Organisation entfernen</entry>
+  <entry key="177">Benutzer</entry>
+  <entry key="178">Benutzer hinzufügen</entry>
+  <entry key="179">Benutzer entfernen</entry>
+  <entry key="180">Benutzer hinzufügen</entry>
+  <entry key="181">Benutzer suchen</entry>
+  <entry key="182">Suchen</entry>
+  <entry key="183">Benutzer</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Auswählen</entry>
+  <entry key="186">Konferenzräume</entry>
+  <entry key="187">Konferenzräume</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Name</entry>
+  <entry key="190">öffentlich</entry>
+  <entry key="191">Organisationen</entry>
+  <entry key="192">Konferenzräume</entry>
+  <entry key="193">Name</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Öffentlich</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Speichern</entry>
+  <entry key="198">Öffnen</entry>
+  <entry key="199">Speichern unter</entry>
+  <entry key="200">Dateiname</entry>
+  <entry key="201">Dateiname</entry>
+  <entry key="202">Abbrechen</entry>
+  <entry key="203">Speichern</entry>
+  <entry key="204">Fehler</entry>
+  <entry key="205">Laden</entry>
+  <entry key="206">Objekte geladen</entry>
+  <entry key="207">Synchronisiere Benutzer. Restliche Benutzer:</entry>
+  <entry key="208">Lade Bilddaten</entry>
+  <entry key="209">Synchronisiere Benutzer. Restliche Benutzer:</entry>
+  <entry key="210">Zeichenbrett leeren</entry>
+  <entry key="211">Zeichenbrett leeren. Alle bisherigen Änderungen gehen damit verloren!</entry>
+  <entry key="212">Bestätigung anfordern vor dem Laden einer Datei</entry>
+  <entry key="213">Einladung versenden</entry>
+  <entry key="214">Einladung versenden</entry>
+  <entry key="215">Betreff</entry>
+  <entry key="216">Empfänger</entry>
+  <entry key="217">Nachricht</entry>
+  <entry key="218">Abschicken</entry>
+  <entry key="219">Abbrechen</entry>
+  <entry key="220">Senden</entry>
+  <entry key="221">Benutzerdaten</entry>
+  <entry key="222">Nickname für diese Konferenz</entry>
+  <entry key="223">Spitzname/Alias</entry>
+  <entry key="224">Vorname</entry>
+  <entry key="225">Nachname</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Sprache</entry>
+  <entry key="228">Absenden</entry>
+  <entry key="229">Laden</entry>
+  <entry key="230">Daten werden geladen. Bitte warten!</entry>
+  <entry key="231">Falsches Passwort</entry>
+  <entry key="232">Bitte geben Sie ihr Passwort zweimal ein. Länge: mindestens 6 Buchstaben.</entry>
+  <entry key="233">Ungültige E-Mail</entry>
+  <entry key="234">Die angegebene E-Mail-Adresse ist ungültig</entry>
+  <entry key="235">Registration abgeschlossen</entry>
+  <entry key="236">Ihr Benutzer wurde angelegt. Sie können sich nun einloggen.</entry>
+  <entry key="237">Sie können Ihren Bildschirm im Moment nicht veröffentlichen, da dies bereits ein anderer Benutzer in diesem Konferenzraum tut.</entry>
+  <entry key="238">Veröffentlichung abgelehnt</entry>
+  <entry key="239">Desktop veröffentlichen</entry>
+  <entry key="240">Schlechte Bandbreite. Es war nicht möglich alle Bilder des Bildschirms zu laden. Tritt dieser Fehler häufiger auf können Sie den Moderator darum bitten, die Qualität zur verringern.</entry>
+  <entry key="241">Bildschirm von:</entry>
+  <entry key="242">Zeichnen</entry>
+  <entry key="243">Dokumente</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Dateien</entry>
+  <entry key="246">Benutzer</entry>
+  <entry key="247">Orginaldatei herunterladen</entry>
+  <entry key="248">PDF-Dokument herunterladen</entry>
+  <entry key="249">Präsentation in Zeichenbrett laden</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Objekt verschieben</entry>
+  <entry key="252">Objekt vergrößern/verkleinern</entry>
+  <entry key="253">%</entry>
+  <entry key="254">von</entry>
+  <entry key="255">zur ersten Seite springen</entry>
+  <entry key="256">zur vorherigen Seite springen</entry>
+  <entry key="257">zur nächsten Seite springen</entry>
+  <entry key="258">zur letzten Seite springen</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herr</entry>
+  <entry key="262">Frau</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Schlüssel</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Schlüssel</entry>
+  <entry key="268">Zuletzt bearbeitet</entry>
+  <entry key="269">Bearbeitet von</entry>
+  <entry key="270">Kommentar</entry>
+  <entry key="271">Schlüssel</entry>
+  <entry key="272">von</entry>
+  <entry key="273">Benutzer</entry>
+  <entry key="274">Benutzer aus Organisation entfernen</entry>
+  <entry key="275">Löschen</entry>
+  <entry key="276">Dieser Benutzer ist bereits Teil dieser Organisation.</entry>
+  <entry key="277">Neuigkeiten</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">Zu den Konferenzräumen (max. 50 Teilnehmer)</entry>
+  <entry key="280">Zu den Eventräumen (unbegrenzte Zuschauer)</entry>
+  <entry key="281">Hilfe und Support</entry>
+  <entry key="282">http://openmeetings.apache.org//</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Fehler melden!</entry>
+  <entry key="285">Mehr</entry>
+  <entry key="286">Projekt im Netz (http://openmeetings.apache.org/)</entry>
+  <entry key="287">Benutzer Mailing Liste (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Login merken</entry>
+  <entry key="289">Dateien</entry>
+  <entry key="290">Meine Übersicht</entry>
+  <entry key="291">Meetings planen</entry>
+  <entry key="292">Meine Events</entry>
+  <entry key="293">Öffentliche Meetings</entry>
+  <entry key="294">Private Meetings</entry>
+  <entry key="295">Öffentliche Events</entry>
+  <entry key="296">Private Events</entry>
+  <entry key="297">Öffentliche Dateien</entry>
+  <entry key="298">Private Dateien</entry>
+  <entry key="299">Persönliche Dateien</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">Moderation anfordern</entry>
+  <entry key="303">Umfrage</entry>
+  <entry key="304">Datei auswählen</entry>
+  <entry key="305">Einstellungen</entry>
+  <entry key="306">Kamera-/Mikro-Einstellungen</entry>
+  <entry key="307">Zeichenbrett-Einstellungen</entry>
+  <entry key="308">Verlassen</entry>
+  <entry key="309">Zurück zur Raum-Übersicht</entry>
+  <entry key="310">Abmelden</entry>
+  <entry key="311">Passwort zurücksetzen?</entry>
+  <entry key="312">Passwort zurücksetzen</entry>
+  <entry key="313">Bei E-Mail</entry>
+  <entry key="314">Bei Login</entry>
+  <entry key="315">E-Mail</entry>
+  <entry key="316">Login</entry>
+  <entry key="317">Dateien</entry>
+  <entry key="318">E-Mail mit Reset-Link versenden</entry>
+  <entry key="319">Geben Sie bitte entweder eine E-Mail oder einen Login an.</entry>
+  <entry key="320">Es gibt keinen Benutzer mit diesem Benutzernamen.</entry>
+  <entry key="321">Die E-Mail mit dem dazugehörigen Link wurde an Ihre E-Mail-Adresse gesandt. Bitte überprüfen Sie Ihren Posteingang. Falls Sie immer noch keine E-Mail erhalten haben, korrigieren Sie bitte Ihre Spam-Einstellungen und senden Sie die E-Mail nochmals.</entry>
+  <entry key="322">Fehler!</entry>
+  <entry key="323">Nachricht</entry>
+  <entry key="324">Ungültiger Hash.</entry>
+  <entry key="325">Passwort zurücksetzen</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Passwort ändern</entry>
+  <entry key="328">Neues Passwort</entry>
+  <entry key="329">Passwort wiederholen</entry>
+  <entry key="330">Die von Ihnen angegebenen Passwörter sind nicht identisch.</entry>
+  <entry key="331">Benutzername oder Passwort sind zu kurz, bitte geben Sie mindestens folgende Anzahl an Zeichen für Benutzername / Passwort ein:</entry>
+  <entry key="332">Passwort gespeichert. Sie können sich nun damit einloggen.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unbekannter Fehler. Bitte melden Sie das dem Service-Team.</entry>
+  <entry key="335">Benutzername nicht gefunden</entry>
+  <entry key="336">Ungültiges Passwort</entry>
+  <entry key="337">Erfolgreich ausgeloggt</entry>
+  <entry key="338">Registrierung ist ausgeschaltet.</entry>
+  <entry key="339">Ungültige E-Mail-Adresse</entry>
+  <entry key="340">Dieser Dateiname wird schon verwendet. Bitte geben Sie einen anderen an.</entry>
+  <entry key="341">Dateiname zu kurz</entry>
+  <entry key="342">Adresse konnte nicht gespeichert werden.</entry>
+  <entry key="343">Benutzer hinzugefügt. Vergessen Sie nicht diesem Benutzer auch eine Organisation hinzuzufügen. Benutzer ohne Organisation können sich nicht einloggen.</entry>
+  <entry key="344">Neuer Datensatz</entry>
+  <entry key="345">Es konnte kein Feld zu dieser ID ermittelt werden.</entry>
+  <entry key="346">Es konnte kein Label für diese ID ermittelt werden.</entry>
+  <entry key="347">Sie müssen Administrator sein, um diese Aktion auszuführen.</entry>
+  <entry key="348">Sprach-Editor</entry>
+  <entry key="349">Sprache</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Wert</entry>
+  <entry key="353">Feldwerte</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelWert</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Sie haben nur das Label gelöscht nicht das Feld! Das Feld könnte noch Referenzen in anderen Sprachen beinhalten.</entry>
+  <entry key="358">Ungültige Labelid. FieldLanguagesvalues_Id kann in der Datenbank nicht gefunden werden.</entry>
+  <entry key="359">Sie können dieses Feld nicht löschen. Sie können nur Labels, nicht aber Felder löschen. Zur Zeit ist kein Label geladen, entweder ist kein Feld ausgewählt oder es gibt kein Label in dieser Sprache für das Feld.</entry>
+  <entry key="360">Exportieren</entry>
+  <entry key="361">Sie müssen sich neu anmelden, um Änderungen zu sehen.</entry>
+  <entry key="362">Neue Sprache anlegen</entry>
+  <entry key="363">Sprache löschen</entry>
+  <entry key="364">Neue Sprache anlegen</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Sprache anlegen</entry>
+  <entry key="367">Sicherung</entry>
+  <entry key="368">Zum Ersten</entry>
+  <entry key="369">Zum Letzten</entry>
+  <entry key="370">Zum Nächsten</entry>
+  <entry key="371">Zum Letzten</entry>
+  <entry key="372">Benutzer spricht (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Sound an/ausschalten</entry>
+  <entry key="374">Übersicht</entry>
+  <entry key="375">Ihr Profil</entry>
+  <entry key="376">Hallo,</entry>
+  <entry key="377">Profil bearbeiten</entry>
+  <entry key="378">Ungelesene Nachrichten:</entry>
+  <entry key="379">Bild ändern</entry>
+  <entry key="380">Benutzerdaten - Exportieren</entry>
+  <entry key="381">Alle Organisationen müssen bereits vorhanden sein!</entry>
+  <entry key="382">Starte Export</entry>
+  <entry key="383">Nach Organisation</entry>
+  <entry key="384">Starte Export</entry>
+  <entry key="385">Benutzerdaten - Import</entry>
+  <entry key="386">Wählen Sie users.xml aus</entry>
+  <entry key="387">importiere</entry>
+  <entry key="388">Exportiere als XML - Diese Dateien können benutzt werden als: Beitrag zum Projekt - Import in ein anderes System - Sicherung - kundenspezifische Anpassung - Ablage im Sprachverzeichnins für Ihre nächste Installation.</entry>
+  <entry key="389">Wählen Sie eine Sprachdatei für den Import aus. Wählen Sie die passende Sprache aus der Combobox! Egal welchen Namen die Datei hat, sie wird in diese Sprache importiert!</entry>
+  <entry key="390">Import - Wählen Sie eine Datei aus</entry>
+  <entry key="391">Speichern unter</entry>
+  <entry key="392">Name:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Speichern</entry>
+  <entry key="395">Aufnahmen</entry>
+  <entry key="396">Aufnahmen ansehen</entry>
+  <entry key="397">Aufnahmen aus allen Räumen</entry>
+  <entry key="398">Benutzer:</entry>
+  <entry key="399">Mitglied seit:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Benutzer in diesem Raum:</entry>
+  <entry key="402">Neu laden</entry>
+  <entry key="403">Dieser Raum ist voll. Bitte versuchen Sie es später noch einmal.</entry>
+  <entry key="404">Wählen Sie einen Raum aus, um Details zu erhalten.</entry>
+  <entry key="405">Chatten Sie mit Benutzern in diesem Raum:</entry>
+  <entry key="406">Raum:</entry>
+  <entry key="407">Benutzer in diesem Raum:</entry>
+  <entry key="408">Seit:</entry>
+  <entry key="409">Aufnahme abspielen</entry>
+  <entry key="410">Länge:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Aufnahme! Sie können hier nichts mehr ändern ...</entry>
+  <entry key="413">Aufnahme abspielen</entry>
+  <entry key="414">Abspielen / Pause</entry>
+  <entry key="415">Aufnahme starten</entry>
+  <entry key="416">Aufnahme beenden</entry>
+  <entry key="417">Aufnahmen:</entry>
+  <entry key="418">Die Aufnahme ist bereits gestartet.</entry>
+  <entry key="419">Aufnahme gestartet von Benutzer:</entry>
+  <entry key="420">Abbrechen</entry>
+  <entry key="421">Aufnahme wird abgebrochen und nicht gespeichert.</entry>
+  <entry key="422">Fortsetzen</entry>
+  <entry key="423">Aufnahme fortsetzen</entry>
+  <entry key="424">Linienfarbe ändern</entry>
+  <entry key="425">Farbe auswählen</entry>
+  <entry key="426">Randfarbe de/aktivieren</entry>
+  <entry key="427">Füllfarbe ändern</entry>
+  <entry key="428">Füllfarbe de/aktivieren</entry>
+  <entry key="429">Linienstärke ändern</entry>
+  <entry key="430">Schließen</entry>
+  <entry key="431">Schriftgröße anpassen</entry>
+  <entry key="432">Aufnahme löschen</entry>
+  <entry key="433">Gäste</entry>
+  <entry key="434">Von:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Raum</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Abbrechen</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Chatlog löschen</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Nachricht abschicken</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Wählen Sie die Geräte aus:</entry>
+  <entry key="448">Ton und Video</entry>
+  <entry key="449">nur Ton (Mikrophon)</entry>
+  <entry key="450">nur Video (Webcam)</entry>
+  <entry key="451">kein Video/Ton (nur Profil-Bild)</entry>
+  <entry key="452">Kein Video/Ton veröffentlichen. Wählen Sie diese Einstellung wenn die verfügbare Bandbreite sehr niedrig ist.</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">DI</entry>
+  <entry key="455">MI</entry>
+  <entry key="456">DO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SO</entry>
+  <entry key="460">Montag</entry>
+  <entry key="461">Dienstag</entry>
+  <entry key="462">Mittwoch</entry>
+  <entry key="463">Donnerstag</entry>
+  <entry key="464">Freitag</entry>
+  <entry key="465">Samstag</entry>
+  <entry key="466">Sonntag</entry>
+  <entry key="467">KW</entry>
+  <entry key="468">Kalenderwoche</entry>
+  <entry key="469">Januar</entry>
+  <entry key="470">Februar</entry>
+  <entry key="471">März</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mai</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">Dezember</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Teilnehmerzahl</entry>
+  <entry key="483">Zeige Layouteinstellungen</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Breite | Höhe</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderations-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">Aktiviert</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Breite | Höhe</entry>
+  <entry key="493">Dateien-, Chat-, Teilnehmer-Container</entry>
+  <entry key="494">Aktiv</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Breite | Höhe</entry>
+  <entry key="497">Der Moderator hat den Raum verlassen. Sie müssen die Moderation beantragen wenn Sie auf das Zeichenbrett zeichnen wollen.</entry>
+  <entry key="498">Es gibt momentan keinen Moderator in diesen Raum. Sie müssen die Moderation beantragen oder warten.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Einladung</entry>
+  <entry key="501">Nachricht von Benutzer:</entry>
+  <entry key="502">Nachricht:</entry>
+  <entry key="503">Klicken Sie auf diesen Link, um in den Raum zu gelangen:</entry>
+  <entry key="504">Klicken Sie hier</entry>
+  <entry key="505">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile ihres Browsers:</entry>
+  <entry key="506">{0} Registrierung</entry>
+  <entry key="507">Ihre Benutzerdaten:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">E-Mail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Registrierung</entry>
+  <entry key="513">{0} - Passwort zurücksetzen</entry>
+  <entry key="514">Klicken Sie hier, um ein neues Passwort einzugeben:</entry>
+  <entry key="515">Klicken Sie hier</entry>
+  <entry key="516">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile Ihres Browsers:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">Bitte geben Sie ein gültiges Datum an, zum Beispiel 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Bitte geben Sie eine gültige E-Mail an, zum Beispiel name@mail.com</entry>
+  <entry key="520">Bitte geben Sie eine Dezimalzahl an, zum Beispiel 1.00</entry>
+  <entry key="521">Bitte geben Sie eine Ganzzahl an, zum Beispiel 100</entry>
+  <entry key="522">Bitte geben Sie eine gültige Telefon-Nummer an, zum Beispiel ++49 0123 123123</entry>
+  <entry key="523">Bitte geben Sie eine gültige Uhrzeit an, zum Beispiel 12:23 (hh:mm)</entry>
+  <entry key="524">Passwort geschützt</entry>
+  <entry key="525">Passwort</entry>
+  <entry key="526">Gültigkeit</entry>
+  <entry key="527">Immer</entry>
+  <entry key="528">Zeitspanne</entry>
+  <entry key="529">Einmalig</entry>
+  <entry key="530">Gültig ab:</entry>
+  <entry key="531">Gültig bis:</entry>
+  <entry key="532">Einladung für diese Konferenz</entry>
+  <entry key="533">Keine Einladung für diesen Code</entry>
+  <entry key="534">Die Einladung ist nicht mehr gültig.</entry>
+  <entry key="535">Die Einladung ist nicht mehr gültig.</entry>
+  <entry key="536">Passwort:</entry>
+  <entry key="537">Überprüfen Sie das Passwort</entry>
+  <entry key="538">Falsches Passwort!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Ton/Video neu starten</entry>
+  <entry key="541">Sitzung abgelaufen oder ungültig.</entry>
+  <entry key="542">SessionId ist nicht eingeloggt oder hat keine Administratorrechte. Das SOAP Gateway benötigt einen Benutzer mit Admin-Rechten um einen neuen Nutzer einzubetten.</entry>
+  <entry key="543">Diese Sitzung steht mit keiner Remoteuser-Data in Verbindung. Entweder haben Sie das SOAP-Gateway vor dem Zugriff auf die Anwendung nicht gerufen oder Sie benutzen die falsche Sitzungs-ID</entry>
+  <entry key="544">Die Aufnahme von Meetings ist noch Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-Achse</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-Achse</entry>
+  <entry key="549">w</entry>
+  <entry key="550">Breite</entry>
+  <entry key="551">h</entry>
+  <entry key="552">Höhe</entry>
+  <entry key="553">Transparenz ändern</entry>
+  <entry key="554">Browser offen</entry>
+  <entry key="555">Browser geschlossen</entry>
+  <entry key="556">Die Verbindung zum Server ist abgebrochen. Prüfen Sie ihre Netzwerk-Verbindung und starten Sie die Anwendung neu.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronisiere</entry>
+  <entry key="559">Synchroniziere Benutzer, bitte warten Sie</entry>
+  <entry key="560">&lt;u&gt;Download als SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download als PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download als JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download als PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download als TIF&lt;/u&gt;</entry>
+  <entry key="565">Erinnerung</entry>
+  <entry key="566">Kategorie</entry>
+  <entry key="567">Wiederholung</entry>
+  <entry key="568">Keine</entry>
+  <entry key="569">Ort:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Ende</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Jemanden einladen</entry>
+  <entry key="575">täglich</entry>
+  <entry key="576">monatlich</entry>
+  <entry key="577">jährlich</entry>
+  <entry key="578">Terminstart muss vor Terminende liegen!</entry>
+  <entry key="579">Bitte geben Sie einen Titel an!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivieren Sie die falls es sich um eine Eingabe einer Rechts-Nach-Links Sprache (arabisch, persich, hebräisch) handelt.</entry>
+  <entry key="582">Start</entry>
+  <entry key="583">Aufgenommene Konferenzen betrachten</entry>
+  <entry key="584">Meeting - Machen Sie eine Konferenz&lt;br/&gt;</entry>
+  <entry key="585">Event</entry>
+  <entry key="586">Benutzer, Konfiguration und Verwaltung</entry>
+  <entry key="587">Benutzer in diesem Raum</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Einloggen</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Lade Dokument. Bitte warten Sie bis alle Benutzer synchonisiert wurden.</entry>
+  <entry key="592">Dokument hochgeladen. Konvertiere ...</entry>
+  <entry key="593">Starte Upload</entry>
+  <entry key="594">Hochladen und importieren. Bitte wählen Sie eine Datei aus.</entry>
+  <entry key="595">Abbrechen</entry>
+  <entry key="596">Datei auswählen</entry>
+  <entry key="597">Verbindungen</entry>
+  <entry key="598">Wert</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Verbunden seit</entry>
+  <entry key="602">Raum / Bereich</entry>
+  <entry key="603">Ausloggen</entry>
+  <entry key="604">Benutzeranbindung ausloggen</entry>
+  <entry key="605">Wollen Sie diesen Benutzer wirklich von dieser Verbingung ausschließen?&lt;br/&gt; Diese Maßnahme entfernt den Benutzer lediglich aus dem Raum. Der Benutzer kann sich wieder einloggen.</entry>
+  <entry key="606">Ihre Sitzung wurde beendet.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Benutzer ist Moderator dieses Raumes.</entry>
+  <entry key="609">Benutzer darf nicht auf dem Zeichenbrett zeichnen</entry>
+  <entry key="610">Neu starten von Ton/Video oder Einstellungen ändern</entry>
+  <entry key="611">Diesem Benutzer den Zugang zum Zeichenbrett gewähren.</entry>
+  <entry key="612">Diesem Benutzer den Zugang zum Zeichenbrett verwehren.</entry>
+  <entry key="613">Benutzer</entry>
+  <entry key="614">Dateien</entry>
+  <entry key="615">Zeichenbrett</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ihr Benutzer-Profil ist Mitglied in mehreren Organisationen. Bitte wählen Sie eine für diese Sitzung.</entry>
+  <entry key="618">Der Raum ist im Moment voll. Bitte versuchen Sie es später noch einmal.</entry>
+  <entry key="619">Raumtyp</entry>
+  <entry key="620">Termin Raum</entry>
+  <entry key="621">Server Zeit</entry>
+  <entry key="622">{0} - Erinnerung</entry>
+  <entry key="623">Nachricht von Benutzer:</entry>
+  <entry key="624">Nachricht:</entry>
+  <entry key="625">Klicken Sie auf diesen Link um in den Raum zu gelangen [Der Link funktioniert erst 15 Minuten vor dem Meeting!]:</entry>
+  <entry key="626">Klicken Sie hier</entry>
+  <entry key="627">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile Ihres Browsers:</entry>
+  <entry key="628">Suche intern</entry>
+  <entry key="629">Externe Benutzer eingeben</entry>
+  <entry key="630">Vorname</entry>
+  <entry key="631">Name</entry>
+  <entry key="632">E-Mail</entry>
+  <entry key="633">Abmeldung bestätigen</entry>
+  <entry key="634">Wollen Sie sich wirklich ausloggen?</entry>
+  <entry key="635">Aktionen</entry>
+  <entry key="636">Demoraum</entry>
+  <entry key="637">Demo Zeit</entry>
+  <entry key="638">Meeting Zeitmesser</entry>
+  <entry key="639">Dies ist ein Demo-Raum. Um diesen Hinweis abzuschalten sollten Sie entweder einen privaten Meeting-Raum für Ihren persönlichen Zweck aufsuchen oder Ihren eigenen Server anlegen. Sie werden automatisch ausgeloggt in:</entry>
+  <entry key="640">Moderiert</entry>
+  <entry key="641">Bitte warten Sie bis der Moderator den Raum betreten hat. Der Moderator kann ein Lehrer, ein Administrator oder der Erschaffer dieses Raumes sein.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Einkommende Bildteilung</entry>
+  <entry key="644">Es gibt eine neue ankommende Bildteilung vom Benutzer:</entry>
+  <entry key="645">Beginne Teilung</entry>
+  <entry key="646">Füge ein neues Meeting hinzu</entry>
+  <entry key="647">Meeting Raum</entry>
+  <entry key="648">Event Raum</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderiere Benutzer</entry>
+  <entry key="651">Moderiere Räume</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Wollen Sie diesen Benutzer zum Moderator der Organisation ernennen?</entry>
+  <entry key="654">Bitte wählen Sie zuerst die Organisation aus bevor Sie einen Benutzer hinzufügen wollen!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Wollen Sie diesen Benutzer aus der Organisation wirklich löschen?</entry>
+  <entry key="657">Dieser Benutzer ist ein Moderator</entry>
+  <entry key="658">Dieser Benutzer ist kein Moderator</entry>
+  <entry key="659">Wollen Sie diesem Benutzer die Funktion des Moderators entziehen?</entry>
+  <entry key="660">Räume innerhalb der Organisation hinzufügen oder löschen</entry>
+  <entry key="661">Wollen Sie diese Aufnahme wirklich löschen?</entry>
+  <entry key="662">Wollen Sie diesen Benutzer aus Ihrer Organisation wirklich löschen? Sie werden nur die Verbindung zwischen dem Benutzer und Ihrer Organisation löschen können, um den Benutzer wirklich zu löschen brauchen Sie Administrator-Rechte.</entry>
+  <entry key="663">Sie können Ihren eigenen Nutzeraccount nicht löschen!</entry>
+  <entry key="664">Diese Methode benötigt ein Administrator-Account um aufgerufen zu werden.</entry>
+  <entry key="665">Es ist keine Sitzung mit dieser ID verbungen.</entry>
+  <entry key="666">Dies ist ein Administrator- oder Moderator-Account. Dieses Account können Sie nur mittels eines Administrator-Tableau bearbeiten.</entry>
+  <entry key="667">Um Ihre Registration abzuschließen klicken Sie bitte auf den folgenden Link. Oder kopieren Sie die URL(Link) in Ihre Browser-Adressleiste.</entry>
+  <entry key="668">Klicken Sie um Ihre E-Mail zu bestätigen</entry>
+  <entry key="669">Es wurde kein Benutzer für diesen Hash gefunden.</entry>
+  <entry key="670">Dieser Benutzer ist bereits aktiviert!</entry>
+  <entry key="671">Sie haben Ihr Account erfolgreich aktiviert!</entry>
+  <entry key="672">Jetzt einloggen</entry>
+  <entry key="673">Ihr Account ist nicht aktiviert. Benutzen Sie zuerst den Link in der E-Mail die Sie während der Registrierung erhalten haben.</entry>
+  <entry key="674">Sie haben sich erfolgreich angemeldet. Wir haben eine E-Mail mit einem Verifizierungscode an Ihre E-Mail-Adresse geschickt. Bitte überprüfen Sie Ihren Posteingang.</entry>
+  <entry key="675">Diesem Benutzer die Moderationsrechte entziehen.</entry>
+  <entry key="676">Diesem Benutzer Moderatoionsrechte übertragen</entry>
+  <entry key="677">Benutzer</entry>
+  <entry key="678">Zugang zum Zeichenbrett</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Wählen Sie einen Benutzer aus der Liste um ihm den Zugriff auf Zeichenbrett, Moderation oder Video zu ermöglichen.</entry>
+  <entry key="681">Dieser Benutzer ist bereits Moderator. Er hat automatisch das Recht zu zeichnen.</entry>
+  <entry key="682">Das sind Sie! Sie können Ihre eigenen Moderatorrechte nicht entfernen.</entry>
+  <entry key="683">Erlaube diesem Benutzer sein Video/ Audio zu veröffentlichen</entry>
+  <entry key="684">Audio/Video von diesem Benutzer entfernen</entry>
+  <entry key="685">Ich würde gerne die Moderation dieses Raumes übernehmen.</entry>
+  <entry key="686">Ich würde gerne auf dem Zeichenbrett zeichnen.</entry>
+  <entry key="687">Ich würde gerne mein Audio/Video mit anderen teilen</entry>
+  <entry key="688">Sie sind der Moderator dieses Raumes</entry>
+  <entry key="689">Ihnen ist es erlaubt, auf dem Zeichenbrett zu zeichnen</entry>
+  <entry key="690">Ihnen ist es erlaubt, Ihr Audio/Video mit anderen zu teilen</entry>
+  <entry key="691">Nachricht an den Moderator</entry>
+  <entry key="692">Der Benutzer</entry>
+  <entry key="693">würde gerne die Moderation übernehmen.</entry>
+  <entry key="694">würde gerne auf dem Zeichenbrett zeichnen.</entry>
+  <entry key="695">würde gerne sein Audio/Video mit anderen teilen.</entry>
+  <entry key="696">Sie müssen warten bis der Moderator den Raum betritt.</entry>
+  <entry key="697">Abbruch</entry>
+  <entry key="698">Speichern</entry>
+  <entry key="699">Tag</entry>
+  <entry key="700">Monat</entry>
+  <entry key="701">Jahr</entry>
+  <entry key="702">Datei hochladen</entry>
+  <entry key="703">Ordner hinzufügen</entry>
+  <entry key="704">Aktualisieren</entry>
+  <entry key="705">Papierkorb (Ziehen Sie eine Datei mit der Maus hierher)</entry>
+  <entry key="706">Meine Dateien (persönliches Laufwerk)</entry>
+  <entry key="707">Konferenzdokumente (öffentliches Laufwerk)</entry>
+  <entry key="708">Datei hinzufügen</entry>
+  <entry key="709">Ordner hinzufügen</entry>
+  <entry key="710">Ordner löschen</entry>
+  <entry key="711">Name bearbeiten</entry>
+  <entry key="712">Neuer Ordner</entry>
+  <entry key="713">Sind Sie sicher, dass Sie dieses Element löschen wollen?</entry>
+  <entry key="714">Suche</entry>
+  <entry key="715">Suche</entry>
+  <entry key="716">Dokument öffnen</entry>
+  <entry key="717">Zeige alle Dateien (Baum Ansicht)</entry>
+  <entry key="718">Dokument schließen</entry>
+  <entry key="719">Datei löschen</entry>
+  <entry key="720">Es ist Ihnen nicht gestattet auf dem Zeichenbrett zu zeichnen. Sie müssen Moderator sein oder zumindest das Recht besitzen das Zeichenbrett zu bearbeiten. Sie können den Moderator nach den Rechten fragen.</entry>
+  <entry key="721">Dokumenteigenschaften</entry>
+  <entry key="722">Starte Client (extern)</entry>
+  <entry key="723">Starte Client (HTTP)</entry>
+  <entry key="724">Ein Benutzer will seinen Desktop freigeben. Wollen Sie ihn sehen?</entry>
+  <entry key="725">Sie haben ihren Desktop freigegeben. Wenn Sie die Freigabe beenden wollen drücken Sie die Anhalten-Schaltfläche im Desktop Sharer.</entry>
+  <entry key="726">Geteilte Sitzung</entry>
+  <entry key="727">Sie haben Ihren Desktop bereits freigegeben!</entry>
+  <entry key="728">Desktop-Betrachter</entry>
+  <entry key="729">Beenden</entry>
+  <entry key="730">Desktop-Teiler</entry>
+  <entry key="731">Drücken Sie Start, um ihren Desktop freizugeben</entry>
+  <entry key="732">Start</entry>
+  <entry key="733">Anhalten</entry>
+  <entry key="734">Wählen Sie einen Bildschirmbereich aus:</entry>
+  <entry key="735">Breite ändern</entry>
+  <entry key="736">Die Freigabe wurde beendet!</entry>
+  <entry key="737">Höhe ändern</entry>
+  <entry key="738">X-Abstand</entry>
+  <entry key="739">Y-Abstand</entry>
+  <entry key="740">Breite:</entry>
+  <entry key="741">Höhe:</entry>
+  <entry key="742">Die Verbindung wurde vom Server abgebrochen.</entry>
+  <entry key="743">Abbrechen</entry>
+  <entry key="744">Extern starten</entry>
+  <entry key="745">Wenn Sie diese Session schließen, können Sie die Session nicht wieder starten.</entry>
+  <entry key="746">Sitzung wirklich schließen?</entry>
+  <entry key="747">Bildschirm teilen</entry>
+  <entry key="748">Sitzung aufnehmen</entry>
+  <entry key="749">Geteiltes surfen</entry>
+  <entry key="750">Upsa, ... Firefox unter Windows ist nicht in der Lage, mangelfreies Co-Browsing zu gewährleisten. Bitte benutzen Sie einen anderen Browser um die Co-Browsing-Funktion zu nutzen.</entry>
+  <entry key="751">Vorherige</entry>
+  <entry key="752">Nächste</entry>
+  <entry key="753">Nachladen</entry>
+  <entry key="754">Heim</entry>
+  <entry key="755">Laden</entry>
+  <entry key="756">Diese Webseite als vorgegebene Webseite zu meinem Profil hinzufügen.</entry>
+  <entry key="757">Teste Setup</entry>
+  <entry key="758">Überprüfen Sie Ihre Mikrofon- und Kameraeinstellungen bevor Sie einen Raum betreten und Aufzeichnungen durchführen. Sie können Ihre Aufnahmen im Nachhinein abspielen.</entry>
+  <entry key="759">Dieses Fenster nicht wieder anzeigen</entry>
+  <entry key="760">Abbrechen</entry>
+  <entry key="761">Beginne Konferenz</entry>
+  <entry key="762">Nicht wieder fragen</entry>
+  <entry key="763">Aufnahme</entry>
+  <entry key="764">Abspielen</entry>
+  <entry key="765">Sie können auch ohne einen Test fortfahren, falls Sie beabsichtigen Ihre Stimme oder Ihr Bild nicht zu veröffentlichen. Kursteilnehmer ohne Video oder Audio können dennoch das Zeichenbrett benutzen, ihren Desktop mit anderen teilen oder am Chat teilnehmen.</entry>
+  <entry key="766">Stop</entry>
+  <entry key="767">Lautstärke</entry>
+  <entry key="768">Start drücken</entry>
+  <entry key="769">Konferenz starten</entry>
+  <entry key="770">Event starten</entry>
+  <entry key="771">Raum wählen</entry>
+  <entry key="772">Prüfe Setup</entry>
+  <entry key="773">Starte Konferenz</entry>
+  <entry key="774">Wie starte ich eine Konferenz</entry>
+  <entry key="775">Starte Aufnahme</entry>
+  <entry key="776">Audio-/Video-Test (Aufnahme) vor dem Betreten einer Konferenz nicht zeigen</entry>
+  <entry key="777">Öffentliche Räume</entry>
+  <entry key="778">Öffentliche Räume können von allen Benutzern benutzt werden.</entry>
+  <entry key="779">Gruppenräume</entry>
+  <entry key="780">Private Räume sind nur für Benutzer in der selben Organisation verfügbar.</entry>
+  <entry key="781">Private Räume</entry>
+  <entry key="782">Räume in diesem Bereich sind für den persönlichen Bedarf. Die Räume haben ein Start und Enddatum und stehen nur in diesem Zeitraum zur Verfügung.</entry>
+  <entry key="783">Sie müssen Moderator sein, um diese Aktion auszuführen.</entry>
+  <entry key="784">Moderation beantragen</entry>
+  <entry key="785">Zeichenbrett beantragen</entry>
+  <entry key="786">WebCam/Mikrofon beantragen</entry>
+  <entry key="787">Dieser SessionHasgh wird bereits genutzt. Er kann nicht zweifach vergeben werden.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Wollen Sie die Konferenz wirklich verlassen? Vielleicht sollten Sie zuerst Dokumente, Zeichenbrett und Chat History leeren. Andernfalls werden die Dateien einfach in diesem Raum bis zu Ihrem nächsten Besuch bleiben.</entry>
+  <entry key="791">Konferenz beenden</entry>
+  <entry key="792">Räume</entry>
+  <entry key="793">Wählen Sie einen Raum für die Konferenz aus</entry>
+  <entry key="794">Es ist ein nicht gespeichertes Event im Kalender. Speichern Sie es oder löschen Sie es wieder.</entry>
+  <entry key="795">Bitte fügen Sie mindestens einen Teilnehmer zum Event.</entry>
+  <entry key="796">Soll dieses Event wirklich aus dem Kalender gelöscht werden?</entry>
+  <entry key="797">Warnung</entry>
+  <entry key="798">Neues Event</entry>
+  <entry key="799">Tag</entry>
+  <entry key="800">Woche</entry>
+  <entry key="801">Monat</entry>
+  <entry key="802">Beschreibung</entry>
+  <entry key="803">Teilnehmer</entry>
+  <entry key="804">{0}, Ihre Web Konferenz Plattform. Entweder starten Sie sofort ein Meeting indem Sie den 1-2-3 Anweisungen folgen oder Sie benutzen "Meetings planen" um eine Konferenz zu planen.</entry>
+  <entry key="805">Konferenz planen</entry>
+  <entry key="806">Um eine Konferenz zu planen können Sie einen Event im Kalender hinzufügen.</entry>
+  <entry key="807">Brauchen Sie Hilfe?</entry>
+  <entry key="808">Webinar</entry>
+  <entry key="809">Suche</entry>
+  <entry key="810">Ok</entry>
+  <entry key="811">Es ist kein Benutzer ausgewählt. Wählen Sie zuerst einen Benutzer und drücken dann Ok.</entry>
+  <entry key="812">Teilnehmer hinzufügen</entry>
+  <entry key="813">Speichern</entry>
+  <entry key="814">Löschen</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderatoren</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Neuen Default-Moderator hinzufügen</entry>
+  <entry key="822">Ist Super-Moderator</entry>
+  <entry key="823">In einem moderierten Raum sind Nutzer mit den Rollen Level-Moderator oder Administrator beim Betreten des Raums automatisch Moderatoren. Um dies abzuschalten, verwenden Sie die Funktion Default-Moderator.</entry>
+  <entry key="824">Der Super-Moderator ist beim Betreten eines Raums immer Moderator. Das Recht kann ihm im Raum nicht genommen werden.</entry>
+  <entry key="825">Nutzer Super-Moderatorrechte zuweisen</entry>
+  <entry key="826">Nutzer Super-Moderatorrechte aberkennen</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Wenn eine Organisation einen Raum zugewiesen wird, haben nur Mitglieder der Organisation Zugang. (Dies gilt nur wenn die Einstellung isPublic auf false gesetzt wurde!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Begrenzungen</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Sind Sie sicher?</entry>
+  <entry key="833">Wirklich löschen? Diese Aktion kann nicht wiederufen werden.</entry>
+  <entry key="834">Es wurde kein Nutzer ausgewählt. Bitte erst auswählen, um ihn hinzuzufügen!</entry>
+  <entry key="835">Neuen Default-Moderator hinzufügen</entry>
+  <entry key="836">Soll dieser Nutzer Super-Moderation werden? Super-Moderatorenrechte können nicht gelöscht werden. Zum Speichern der Einstellungen muss das Raumobjekt gespeichert werden!</entry>
+  <entry key="837">Sollen die Super-Moderatorenrechte für diesen Nutzer aufgehoben werden? Zum Speichern der Einstellungen muss das Raumobjekt gespeichert werden!</entry>
+  <entry key="838">Dies ist ein Super-Moderator. Sie können die Moderationsrechte dem Nutzer nicht entziehen!</entry>
+  <entry key="839">Wollen Sie wirklich diese Datei oder Ordner löschen?</entry>
+  <entry key="840">Datei/Ordner löschen?</entry>
+  <entry key="841">Fräulein</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Einstellungen</entry>
+  <entry key="844">Teilnehmern Mauszeiger anzeigen</entry>
+  <entry key="845">Audio mit SIP Applet übertragen</entry>
+  <entry key="846">Audio mit SIP aud Video mit Flash übertragen</entry>
+  <entry key="847">Vollformat</entry>
+  <entry key="848">Bildschirm zeigen</entry>
+  <entry key="849">Der Nutzer</entry>
+  <entry key="850">möchte den Bildschirm übertragen. Wollen Sie ihn sehen?</entry>
+  <entry key="851">Schließen</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Die Sitzung wurde vom übertragenden Nutzer geschlossen!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Neuer Desktop verfügbar</entry>
+  <entry key="856">Minimieren</entry>
+  <entry key="857">Maximieren</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Video Zeitspur</entry>
+  <entry key="860">Meine Aufnahmen</entry>
+  <entry key="861">Öffentliche Aufnahmen</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Länge</entry>
+  <entry key="865">Datum</entry>
+  <entry key="866">Von</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Haupt - Video</entry>
+  <entry key="869">Aufnahmen</entry>
+  <entry key="870">Sie können gleichzeitig ihren Bildschirm teilen ode die komplette Session aufnehmen. Wenn Sie nur den Bildschirm teilen wollen genügt esauf Start zu drücken. Die fertige Aufnahme befindet sich bei den anderen Aufnahmen im öffentlichen Ordner.</entry>
+  <entry key="871">Aufnahme starten</entry>
+  <entry key="872">Aufnahme stoppen</entry>
+  <entry key="873">Download FLV-Datei</entry>
+  <entry key="874">Raum</entry>
+  <entry key="875">Abspielen</entry>
+  <entry key="876">Stopp</entry>
+  <entry key="877">Teilnehmer hat das Mikrofon an</entry>
+  <entry key="878">Bildschirm teilen stoppen</entry>
+  <entry key="879">Benutzerfragen erlauben</entry>
+  <entry key="880">Wenn Sie diese Option aktivieren ist die Schaltfläche zum beantragen der Moderation für andere Teilnehmer nicht sichtbar und Sie werden nicht in ihrem Vortrag gestört.</entry>
+  <entry key="881">Rechte</entry>
+  <entry key="882">Download AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Nur Audio nur</entry>
+  <entry key="887">Es gab Fehler beim Verarbeiten der Aufzeichnung.</entry>
+  <entry key="888">Die Aufzeichnung ist noch nicht zur Wiedergabe bereit. Versuchen Sie es in einigen Minuten erneut.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Nachricht</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet ist nicht bereit</entry>
+  <entry key="893">SIP-Account Einstellungen</entry>
+  <entry key="894">SIP Einstellungen für jeden Nutzer. De-Aktivieren Sie SIP über Administration &gt; Konfiguration (Key: enable_sip). Die SIP Daten für jeden Nutzer sollten automatisch generiert werden. Sie können diese neu erstellen lassen über die Funktion "Re-Generate/Wieder Herstellen der SIP Daten"</entry>
+  <entry key="895">SIP-Nutzer</entry>
+  <entry key="896">Sip-Passwort</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Der Login zum SIP Gateway ist fehlgeschlagen. Prüfen Sie die Authentifizierungsdaten zum SIP-Provider und die SIP-Account Daten für jeden Nutzer. Als Administrator können Sie sich enloggen und die Konfiguration überprüfen. Nur Nutzer und Moderatoren sind derzeit von den Aktionen ausgeschlossen.</entry>
+  <entry key="899">Der Login zum SIP Gateway ist fehlgeschlagen. Kontakten Sie das SerrviceTeam.</entry>
+  <entry key="900">Am SIP-Gateway einloggen...</entry>
+  <entry key="901">Am SIP-Gateway einloggen ...</entry>
+  <entry key="902">Log anzeigen</entry>
+  <entry key="903">Log-Mitteilungen früherer Aufzeichnungen</entry>
+  <entry key="904">SIP-Applet Mitteilungen</entry>
+  <entry key="905">Das SIP-Applet ist nicht bereit. Applet bitte bestätigen und dann 'OK' klicken.</entry>
+  <entry key="906">Moderation bekommen</entry>
+  <entry key="907">Terminänderungen speichern</entry>
+  <entry key="908">Der Termin wurde geändert. Wollen Sie die Änderungen nun speichern? &lt;br/&gt;&lt;br/&gt;Alle Teilnehmer des Termins erhalten nun eine Benachrichtigung per E-Mail mit den neuen Daten (abhängig vom Benachrichtigungstyp).</entry>
+  <entry key="909">Zugriff zu anderen Aufzeichnungen über {0} Application.</entry>
+  <entry key="910">Nutzer für dieses Video auswählen</entry>
+  <entry key="911">Verfügbare Nutzer für dieses Pod</entry>
+  <entry key="912">Sie sind Moderator dieses Interview. Sie legen die Sprecher fest und können die Aufzeichnung starten und stoppen.</entry>
+  <entry key="913">Aufzeichnung starten</entry>
+  <entry key="914">Aufzeichnung stoppen</entry>
+  <entry key="915">Die Interviewaufzeichung wurde bereits gestartet.</entry>
+  <entry key="916">Die Aufzeichung wurde bereits gestoppt oder noch nicht gestartet.</entry>
+  <entry key="917">Die Aufzeichnung des Interviews wurde bereits gestartet.</entry>
+  <entry key="918">Abbrechen</entry>
+  <entry key="919">Die Nachbearbeitung eines Interview benötigt fünf Minuten für jede aufgezeichnete Minute. Die Anzeige zeigt den Fortschritt:</entry>
+  <entry key="920">Sie müssen das Passwort erneut eingeben, um SIP Daten automatisch zu erzeugen.</entry>
+  <entry key="921">SIP Daten neu erzeugen</entry>
+  <entry key="922">Sie können die Datei oder Ordner nicht in einen eigenen Unterordner verschieben.</entry>
+  <entry key="923">Größe Homeverzeichnis</entry>
+  <entry key="924">Größe öffentliches Verzeichnis</entry>
+  <entry key="925">Lizenzeinstellungen</entry>
+  <entry key="926">Mit der Lizenzaktivierung können Sie ein Ablaufdatum oder eine Höchstnutzungszeit (Minuten) für Nutzer festlegen.</entry>
+  <entry key="927">Lizenz prüfen</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Ablaufdatum</entry>
+  <entry key="930">Verbrauchte Sekunden</entry>
+  <entry key="931">Gesamtzeit</entry>
+  <entry key="932">Ihre Lizenz ist abgelaufen. Sie können weitere Minuten ((Pay-per-minute) oder eine Flatate erwerben.</entry>
+  <entry key="933">Click-and-buy</entry>
+  <entry key="934">Restzeit für Account:</entry>
+  <entry key="935">Nutzerlizenzinformation</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Schließen</entry>
+  <entry key="938">Ihre Lizenz ist abgelaufen. Sie können weitere Minuten ((Pay-per-minute) oder eine Flatate erwerben.</entry>
+  <entry key="939">Lizenzeinstellungen</entry>
+  <entry key="940">Sie können entweder Nutzungszeit für Webkonferenzen (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; oder eine Volumenflatrate für 3-12 Monate erwerben. &lt;br/&gt;&lt;br/&gt;Der Versand von Einladungen mit direktem Link zum Konferenzraum oder dasErstellen von Konferenzräumen mittels Kalender für externe Nutzer ist nur mit einer Volumenflatrate zulässig.</entry>
+  <entry key="941">60 Minuten 9,99 EURO (16 Cent pro Minute) kaufen</entry>
+  <entry key="942">5 Stunden 19,99 EURO (6 Cent pro Minute) kaufen</entry>
+  <entry key="943">3 Monate für 29,99 EURO (9,99 Euro pro Monat) kaufen</entry>
+  <entry key="944">6 Monate fürr 39,99 EURO (6,66 Euro pro Monat) kaufen</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volumenflatrate</entry>
+  <entry key="947">Sie haben eine unbegrenzte Lizenz</entry>
+  <entry key="948">Ablaufdatum Ihrer Lizenz:</entry>
+  <entry key="949">Sie nutzen das Pay-per-minute-Modell. Sie haben noch:</entry>
+  <entry key="950">Neue einkaufen!</entry>
+  <entry key="951">Wollen Sie einen eigenen Server?</entry>
+  <entry key="952">Sie wünschen {0} als eigenständige Installation oder integriert in Moodle, SugarCRM, Website oder Intranet? Beginnen Sie ab 500 Euro.</entry>
+  <entry key="953">Oder senden Sie uns eine Nachricht</entry>
+  <entry key="954">Antwort an:</entry>
+  <entry key="955">Nachricht:</entry>
+  <entry key="956">Senden</entry>
+  <entry key="957">Kontaktinformationen und Preise? Klicken Sie hier</entry>
+  <entry key="958">Kreditkartendetails</entry>
+  <entry key="959">Vorname</entry>
+  <entry key="960">Nachname</entry>
+  <entry key="961">Kreditkartentyp</entry>
+  <entry key="962">VISA Karte</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Kreditkartennummer</entry>
+  <entry key="967">Ablaufdatum</entry>
+  <entry key="968">Kartenprüfnummer</entry>
+  <entry key="969">Rechnungsanschrift</entry>
+  <entry key="970">Adresse</entry>
+  <entry key="971"></entry>
+  <entry key="972">Stadt</entry>
+  <entry key="973">Land</entry>
+  <entry key="974">Staat (nur US)</entry>
+  <entry key="975">PLZ</entry>
+  <entry key="976">Betrag</entry>
+  <entry key="977">Abschicken</entry>
+  <entry key="978">Schritt 1: {0} - Zahlungsformular</entry>
+  <entry key="979">E-Mail</entry>
+  <entry key="980">Klicken Sie auf "Zahlen mit Paypal".&lt;br/&gt; Paypal akzeptiert VISA, MasterCard, Discover oder American Express. &lt;br/&gt;Sie müssen sich dazu nicht bei Paypal registrieren. &lt;br/&gt;Nutzer aus Deutschland können auch per Lastschrift-Einzug zahlen.</entry>
+  <entry key="981">Vielen Dank für Ihren Einkauf von {0}. &lt;br/&gt; &lt;br/&gt; Sobald die Zahlung bei uns eingetroffen ist wird Ihr Account aktualisiert.&lt;br/&gt; Sie erhalten eine E-Mail mit Ihrer Rechnung als PDF.&lt;br/&gt;Die aktuelle und frühere Transaktionen sind in Ihren Profileinstellungen dokumentiert.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Sie können dieses browserfenster/den Tab nun schließen und zu {0} zurückkehren.</entry>
+  <entry key="982">Abschicken Kauf bestätigen.</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Schritt: {0} Bezahlung - Bestellung prüfen und kaufen.</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Zahlung erhalten.</entry>
+  <entry key="987">Guten Tag,</entry>
+  <entry key="988"></entry>
+  <entry key="989">Vielen Dank für die Nutzung von {0}!</entry>
+  <entry key="990">Zahlung erhalten {0} -</entry>
+  <entry key="991">Zahlungen und Transaktionsstatus</entry>
+  <entry key="992">Transaktions-Hash</entry>
+  <entry key="993">Minuten</entry>
+  <entry key="994">Monate</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Rechnung</entry>
+  <entry key="998"></entry>
+  <entry key="999">Zum Versand von Einladungen oder zur Erstellung von Sitzungen über den Kalender benötigen Sie eine Volumenflatrate. Mit Pay-per-minute Tarifen können Sie selber das Angebot von {0} nutzen, nicht aber Dritte zur Teilnahme an einem Meeting einladen.</entry>
+  <entry key="1000">Diese E-Mail-Adresse wird bereits durch einen anderen Nutzer verwandt.</entry>
+  <entry key="1001">SIP-Einstellungen</entry>
+  <entry key="1002">Die Konferenznummer und PIN ist automatisch über das OpenXG RPC-Gateway erstellt worden.</entry>
+  <entry key="1003">SIP Nummer</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Nur auf aktueller Seite löschen.</entry>
+  <entry key="1006">Nur die URL der Statusanzeige wird an Teilnehmer versandt.</entry>
+  <entry key="1007">Teamräume [Breakout session] erstellen</entry>
+  <entry key="1008">Nutzer für neuen Teamraum auswählen</entry>
+  <entry key="1009">Sie können nun Teilnehmer auswählen und für diese einen Konferenzraum (Teamraum) anlegen. Die ausgewählten Teilnehmer werden direkt in den Raum verschoben oder benachrichtigt. Moderateoren in den Teamräumen erhalten eine Liste ihrer aktuellen Räume, um zwischen diesen zu wechseln falls ein Moderator benötigt wird.</entry>
+  <entry key="1010">Nutzername</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Nutzer für neuen Teamrraum:</entry>
+  <entry key="1014">Teamraum anlegen</entry>
+  <entry key="1015">Abbrechen</entry>
+  <entry key="1016">Wählen Sie zumindest einen Nutzer für den Teamraum</entry>
+  <entry key="1017">In Team einfügen</entry>
+  <entry key="1018">Aus Teamraum austragen</entry>
+  <entry key="1019">Nutzer hat Moderatorenrolle im Teamraum. Er ist zur Verwaltung des Teamraums berechtigt und kann Teilnehmer zulassen.</entry>
+  <entry key="1020">Raumtyp</entry>
+  <entry key="1021">Wenn Sie "Wechseln in neuen Teamraum erzwingen" anklicken erden alle Nutzer automatisch in diesen Raum übertragen. Andernfalls erhalten sie eine Benachrichtigung mit einem Button und &lt;i&gt;können&lt;/i&gt; wählen, ob sie in den neuen Raum wechseln wollen. Teammoderatoren haben immer die Wahl zu entscheiden,ob sie wechseln wollen.</entry>
+  <entry key="1022">Teamräume verwalten</entry>
+  <entry key="1023">Als Teamraummoderator können Sie zwischen allen Räumen wechseln, denen Sie zugewiesen wurden. Teilnehmer in Teamräumen können Ihnen eine Nachricht senden, uz.B. um Sie zu bitten Ihnen behilflich zu sein. Sie können die Teamräume auch beschränken und Nutzer ausloggen.</entry>
+  <entry key="1024">Wechseln in neuen Teamraum erzwingen</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Erstellt</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Verfügbare Nutzer</entry>
+  <entry key="1030">Mit Pluszeichen Nutzer hinzufügen; mit Kreuz austragen.</entry>
+  <entry key="1031">1. Teamraumeinstellungen</entry>
+  <entry key="1032">2. Nutzer zu Teamraum hinzufügen</entry>
+  <entry key="1033">Titel Teamraum</entry>
+  <entry key="1034">Teamraum</entry>
+  <entry key="1035">In Raum wechseln</entry>
+  <entry key="1036">In diesen Teamraum wechseln</entry>
+  <entry key="1037">Teamraum schließen und alle Nutzer ausloggen</entry>
+  <entry key="1038">Neuer Teamraum</entry>
+  <entry key="1039">Ein neuer Teamraum wurde für Sie angelegt.</entry>
+  <entry key="1040">In Teamraum wechseln</entry>
+  <entry key="1041">Teamraumaktionen</entry>
+  <entry key="1042">Sie können dieses Fenster erneut öffnen über das Hauptmenu &gt; Aktionen.</entry>
+  <entry key="1043">Mitteilung an Teamraummoderator versenden</entry>
+  <entry key="1044">Neuer Teamraum</entry>
+  <entry key="1045">Ein neuer Teamraum steht zur Verfügung. Sie können nun in diesen Raum wechseln. Teamräume sind Bereiche für Arbeitsgruppen. Sie haben zusätzlich die Möglichkeit, einen Moderator um Hilfe zu bitten. Der Teamraum wird ihnen auch in der Übersicht "Meine Meetings" angezeigt.</entry>
+  <entry key="1046">In Teamraum wechseln</entry>
+  <entry key="1047">Erstelltvon:</entry>
+  <entry key="1048">Name des Teamraums:</entry>
+  <entry key="1049">Dieses Fenster bleibt offen auch wenn Sie den Teamraum verlassen.</entry>
+  <entry key="1050">Nutzer dieses Teamraums</entry>
+  <entry key="1051">3. Andere Teamräume auf die Sie Zugriff haben</entry>
+  <entry key="1052">Teammoderator Nachricht senden. Nutzen Sie diese Möglichkeit falls Sie Hilfe benötigen oder eine Frage haben.</entry>
+  <entry key="1053">Senden</entry>
+  <entry key="1054">2. Eingeladene Nutzer für diesen Teamraum</entry>
+  <entry key="1055">ist Teamraummoderator</entry>
+  <entry key="1056">Alle vom Moderator eingeladenen Nutzer für diesen Teamraum.</entry>
+  <entry key="1057">Zur Zeit ist kein Teammoderator eingeloggt.</entry>
+  <entry key="1058">Bitte Nachricht eintragen</entry>
+  <entry key="1059">Bitte helfen Sie uns. Wir haben ein Problem im Teamraum.</entry>
+  <entry key="1060">Ein Nutzer des Teamraums bittet Sie um Unterstützung.</entry>
+  <entry key="1061">Teamraum Unterstützungsanfrage</entry>
+  <entry key="1062">Mitteilung:</entry>
+  <entry key="1063">Von:</entry>
+  <entry key="1064">Sie befinden sich derzeit in keinem Teamraum. Von hier aus können Sie in jeden Teamraum wechseln auf den Sie Zugriff haben.</entry>
+  <entry key="1065">Systembackup. Das Backup schließt alle von Nutzern erzeugten Daten ein. Die Konfiguration wird nicht ins Backup einbezogen, da diese Daten mit der Systeminstallation erstellt werden. Zum Update des Systems exportieren Sie das alte System (1), installieren Sie das neue Systempaket in eine neue Datenbank (2) und imporieren Sie das Backup des alten Systems (3). Achten Sie darauf, das Backup vorzunehmen, bevor im neuen System neue Daten erzeugt werden.</entry>
+  <entry key="1066">Systembackup</entry>
+  <entry key="1067">Bildschirm teilen/Aufzeichnung Nutzern erlauben</entry>
+  <entry key="1068">Bildschirm teilen/aufzeichnen Nutzern untersagen</entry>
+  <entry key="1069">Nutzer ist Moderator. Er kann alles tun.</entry>
+  <entry key="1070">möchte Bildschirm zeigen/aufzeichnen.</entry>
+  <entry key="1071">Sie können den Bildschirm teilen /aufzeichnen</entry>
+  <entry key="1072">Anfrage zum Teilen/Aufzeichnen des Bildschirms.</entry>
+  <entry key="1073">Erlauben/untersagen Bildschirm zu teilen/aufzuzeichnen.</entry>
+  <entry key="1074">Ton abschalten</entry>
+  <entry key="1075">Ton anschalten</entry>
+  <entry key="1076">Raum nur mit Audio</entry>
+  <entry key="1077">Mit dieser Funktion erlauben Sie im Raum nur Audioübertragung und schalten Video ab. Dies kann sinnvoll sein, um Bandbreite zu reduzieren.</entry>
+  <entry key="1078">Remote Control erlauben (während Bildschirmübertragung)</entry>
+  <entry key="1079">Remote Control untersagen (während Bildschirmübertragung)</entry>
+  <entry key="1080">Remote Control Screen-Berechtigung anfragen (während Bildschirmübertragung)</entry>
+  <entry key="1081">Sie sind berechtigt zu Remote Control Screen (während Übertragung)</entry>
+  <entry key="1082">bittet um Zugriff auf remote control screen.</entry>
+  <entry key="1083">Nutzer ist Moderator. Er kann alles tun. [Remote Desktop Control]</entry>
+  <entry key="1084">Erlauben/untersagen Recht auf Remote Control Screen (Während Bildschirmübertragung)</entry>
+  <entry key="1085">1. Ihr PC an Remote-PC: Klicken Sie auf den Bildschirm um Text aus Zwischenablage in Remote Screen einzufügen. Machen Sie dann einen Rechtsklick im Textfeld und wählen 'Einfügen' im Kontextmenu&lt;br&gt;&lt;br&gt;2. Vom Remote PC auf Ihren PC: Um Text vom Remote PC auf ihren PC zu übertragen markieren Sie zunächst am Remote PC mit der Maus. Klicken sie dort mit der rechten Maustaste auf den Text und wählen Sie &lt;i&gt;Kopieren des markierten Texts&lt;/i&gt; im Kontextmenu. Auf Ihrem PC nutzen Sie die Funktion 'einfügen'.</entry>
+  <entry key="1086">Kopieren und Einfügen von Text zwischen Remote PC und eigenem PC.</entry>
+  <entry key="1087">Kopieren des markierten Texts</entry>
+  <entry key="1088">Kopieren und Einfügen</entry>
+  <entry key="1089">Qualität der Übertragung:</entry>
+  <entry key="1090">Sehr hohe Qualität</entry>
+  <entry key="1091">Hohe Qualität</entry>
+  <entry key="1092">Mittlere Qualität</entry>
+  <entry key="1093">Niedrige Qualität</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Tastatur:</entry>
+  <entry key="1097">Webinar beenden</entry>
+  <entry key="1098">Das Webinar ist bereits beendet. Weitere interessante Angebote befinden sich in</entry>
+  <entry key="1099">Raum schließen</entry>
+  <entry key="1100">Ausgang (URL)</entry>
+  <entry key="1101">Einstellungen für Raumbeschränkung (zeitlich)</entry>
+  <entry key="1102">Wenn der Raum geschlossen wird, werden die Teilnehmer zum Ausgang (URL) geleitet.</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Configurationsdatei</entry>
+  <entry key="1107">LDAP Konfiguration</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Aktiviert</entry>
+  <entry key="1110">Eingefügt</entry>
+  <entry key="1111">Eingefügt von</entry>
+  <entry key="1112">Aktualisiert</entry>
+  <entry key="1113">Aktualisiert von</entry>
+  <entry key="1114">Die Konfigurationsdateien liegen im gleichen Ordner wie webapps/openmeetings/conf. Die Dateien müssen manuell in den Ordner kopiert werden. Änderungen an der Konfigurationsdatei sind direkt online wirksam.</entry>
+  <entry key="1115">Name der Konfigurationsdatei</entry>
+  <entry key="1116">Wenn Sie "Domain zum Nutzernamen hinzufügen" aktivieren wird der Eingabe des Nutzers beim Login derim Feld 'Domain' hinterlegte Wert hinzugefügt. Dies ist sinnvoll wenn in einem LDAP System der Nutzer mit einer Domainangabe geführt wird. Beispiel. Der Nutzer gibt beim Login 'Hans' ein. Die Domain ist mit 'localhost.com' eingetragen. Im LDAP wird hans@localhost.com geprüft.</entry>
+  <entry key="1117">Domain zum Nutzernamen hinzufügen</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Einfügen</entry>
+  <entry key="1120">Markierten Text kopieren</entry>
+  <entry key="1121">Text aus Remote Zwischenablage</entry>
+  <entry key="1122">Remote Zwischenablage anzeigen</entry>
+  <entry key="1123">Nicht noch einmal anzeigen</entry>
+  <entry key="1124">Text hier einfügen ...</entry>
+  <entry key="1125">Sie benötigen Remote Control-Rechte (oder Moderationsrechte)um das kopieren und Enfügen auf dem Remote Screen auszuführen.</entry>
+  <entry key="1126">Grundeinstellungen bearbeiten ...</entry>
+  <entry key="1127">Infofeld zum Kopieren/Einfügen nicht in Remote Control anzeigen</entry>
+  <entry key="1128">Speichern</entry>
+  <entry key="1129">Entfernen</entry>
+  <entry key="1130">Abbrechen</entry>
+  <entry key="1131">Nutzer in Konferenzraum einladen</entry>
+  <entry key="1132">Konferenzraum auswählen. Die eingeladenen Nutzer erhalten eine Nachricht mit Ihrem Namen und dem Link zum Raum.</entry>
+  <entry key="1133">Verbunden seit:</entry>
+  <entry key="1134">Nach Einladungsversand Raum betreten</entry>
+  <entry key="1135">Einladen</entry>
+  <entry key="1136">Nachricht</entry>
+  <entry key="1137">möchte Sie in den Konferenzraum einladen:</entry>
+  <entry key="1138">Einladung</entry>
+  <entry key="1139">Einladung versenden</entry>
+  <entry key="1140">nimmt Ihre Einladung &lt;b&gt;nichtt&lt;/b&gt; an.</entry>
+  <entry key="1141">Annehmen</entry>
+  <entry key="1142">Ablehnen</entry>
+  <entry key="1143">Zeitzone</entry>
+  <entry key="1144">Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Beschreibung</entry>
+  <entry key="1147">Erstellt von</entry>
+  <entry key="1148">Hinweis zur Zeitzone</entry>
+  <entry key="1149">"Hinweis zur Zeitzone" geben wenn Nutzer sich das nächste Mal einloggt, damit diese das Nutzerprofil aktualisieren.</entry>
+  <entry key="1150">Bitte prüfen Sie die eingestellte Zeitzone in Ihrem Nutzerprofil.</entry>
+  <entry key="1151">Neue {0} Konferenz:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">Ende:</entry>
+  <entry key="1155">{0} Konferenz geändert:</entry>
+  <entry key="1156">Organisation durch:</entry>
+  <entry key="1157">{0} Konferenz abgesagt:</entry>
+  <entry key="1158">Erinnerung an {0} Konferenz:</entry>
+  <entry key="1159">Community-Einstellungen</entry>
+  <entry key="1160">Kontaktdaten für alle sichtbar</entry>
+  <entry key="1161">Interessenfelder eingeben, um ebenfalls interessierte Partner für Konferenz zu finden. Werte durch Komma trennen (z.B.: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">Meine Angebote</entry>
+  <entry key="1163">Meine Interessen</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Zeitzone</entry>
+  <entry key="1166">Interessenfelder</entry>
+  <entry key="1167">Kontaktinformationen</entry>
+  <entry key="1168">Meine Kontaktdaten nur persönlichen Kontakten anzeigen</entry>
+  <entry key="1169">Niemanden meine Kontaktdaten anzeigen</entry>
+  <entry key="1170">Mein Profil</entry>
+  <entry key="1171">Einstellungen bearbeiten</entry>
+  <entry key="1172">Nutzer suchen</entry>
+  <entry key="1173">Profilvorschau</entry>
+  <entry key="1174">Einstellungen bearbeiten; z.B: Interessen eingeben, um gefunden zu werden</entry>
+  <entry key="1175">Andere Nutzer suchen und Netzwerk erweitern</entry>
+  <entry key="1176">Suchen</entry>
+  <entry key="1177">Nutzer bietet an</entry>
+  <entry key="1178">Nutzer sucht</entry>
+  <entry key="1179">Freitext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Zeitzone</entry>
+  <entry key="1182">Angebote</entry>
+  <entry key="1183">Gesuche</entry>
+  <entry key="1184">Suchergebnis</entry>
+  <entry key="1185">Aktionen</entry>
+  <entry key="1186">Als Kontakt hinzufügen</entry>
+  <entry key="1187">Nachricht senden</entry>
+  <entry key="1188">Kontakte und Nachrichten</entry>
+  <entry key="1189">Wartende Kontakte</entry>
+  <entry key="1190">Akzeptiern</entry>
+  <entry key="1191">Ablehnen</entry>
+  <entry key="1192">Guten Tag,</entry>
+  <entry key="1193">ich würde Sie gerne als Kontakt hinzufügen.</entry>
+  <entry key="1194">Prüfen Sie Ihre Kontaktanfragen in {0} oder klicken Sie auf die Links zum Akzeptieren oder Ablehnen der Anfragen.</entry>
+  <entry key="1195">Der Nutzer ist bereits in Ihrer Kontaktliste oder hat von Ihnen eine Benachrichtigung erhalten, die noch nicht beantwortet wurde.</entry>
+  <entry key="1196">Ihre Kontaktliste</entry>
+  <entry key="1197">Kontakte und Nachrichten bearbeiten,&lt;br/&gt; wartende Kontakte bearbeiten</entry>
+  <entry key="1198">hat Sie als Kontakt bestätigt</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Chat Log anzeigen/kopieren</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">Von</entry>
+  <entry key="1203">Thema</entry>
+  <entry key="1204">Senden</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Nachrichten</entry>
+  <entry key="1207">Neue Mail</entry>
+  <entry key="1208">Neue Nachricht an meine Kontakte schreiben</entry>
+  <entry key="1209">Neue Nachricht schreiben</entry>
+  <entry key="1210">An:</entry>
+  <entry key="1211">Thema:</entry>
+  <entry key="1212">Vollansicht: das Whiteboard wird in der größtmöglichen Ansicht &lt;br/&gt; gezeigt. Darstellung ist abhängig von der&lt;br/&gt;Bildschirmauflösung der Nutzer.</entry>
+  <entry key="1213">Nutzer entfernen</entry>
+  <entry key="1214">Sie können sich nicht selbst aus dem Konferenzraum entfernen. Wenn Sie den Konferenzraum verlassen wollen, schließen Sie das Browserfenster oder nutzen Sie den Ausgang-Button.</entry>
+  <entry key="1215">Wollen Sie den Nutzer tatsächlich aus diesem Konferenzraum entfernen?</entry>
+  <entry key="1216">Aktion bestätigen....</entry>
+  <entry key="1217">Sie können den Super-Moderator nicht aus dem Raum ausschließen</entry>
+  <entry key="1218">Konferenzraum buchen</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">Ende</entry>
+  <entry key="1221">Erstellen Sie einen Konferenzraum und eine optionale Teilnahmeanfrage zum Meeting. Der Termin wird in die Kalender aller Teilnehmer eingetragen.</entry>
+  <entry key="1222">Eingang</entry>
+  <entry key="1223">Gesendet</entry>
+  <entry key="1224">Gelöscht</entry>
+  <entry key="1225">Sie können sich nicht selbst als Kontakt einfügen.</entry>
+  <entry key="1226">Der Nutzer wurde bereits abgelehnt.</entry>
+  <entry key="1227">Der Nutzer wurde bereits bestätigt.</entry>
+  <entry key="1228">Nutzerkontakt Hash-Wert ist ungültig</entry>
+  <entry key="1229">Nutzer wurde zu Kontaktliste hinzugefügt.</entry>
+  <entry key="1230">Kontakt für Nutzer abgelehnt und von Warteliste entfernt.</entry>
+  <entry key="1231">Kein Kontakt gefunden.</entry>
+  <entry key="1232">Wollen Sie den Kontakt tatsächlich entfernen?</entry>
+  <entry key="1233">Kontakt entfernen bestätigen</entry>
+  <entry key="1234">Kontakt von Liste entfernen</entry>
+  <entry key="1235">Nutzerprofile</entry>
+  <entry key="1236">Nutzerprofile anzeigen</entry>
+  <entry key="1237">Nachrichten</entry>
+  <entry key="1238">Suche</entry>
+  <entry key="1239">Alle auswählen</entry>
+  <entry key="1240">Keine auswählen</entry>
+  <entry key="1241">Ungelesene auswählen</entry>
+  <entry key="1242">Gelesene auswählen</entry>
+  <entry key="1243">In Ordner verschieben ...</entry>
+  <entry key="1244">Neuen Ordner anlegen ...</entry>
+  <entry key="1245">Löschen</entry>
+  <entry key="1246">Gelöschte Mails liegen im Papierkorb.</entry>
+  <entry key="1247">Ungelesene markieren</entry>
+  <entry key="1248">Gelesene markieren</entry>
+  <entry key="1249">Antwort</entry>
+  <entry key="1250">Antwort an alle</entry>
+  <entry key="1251">Weiterleiten</entry>
+  <entry key="1252">Aktionen ...</entry>
+  <entry key="1253">Private Nachricht senden</entry>
+  <entry key="1254">Nichts ausgewählt</entry>
+  <entry key="1255">In Eingang verschieben</entry>
+  <entry key="1256">Löschen (endgültig)</entry>
+  <entry key="1257">Diese Aktion kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1258">Ordner hinzufügen</entry>
+  <entry key="1259">Ordner hinzufügen und Nachrichten verwalten.</entry>
+  <entry key="1260">Ordner hinzufügen</entry>
+  <entry key="1261">Hinzufügen</entry>
+  <entry key="1262">Ordner löschen</entry>
+  <entry key="1263">Löschen oder verschieben Sie erst die Nachrichten in dem Ordner. Danach kann der Ordner gelöscht werden.</entry>
+  <entry key="1264">Name bearbeiten</entry>
+  <entry key="1265">Wollen Sie den Ordner wirklich löschen? Der Vorgang kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1266">Ihre Anfrage wurde an den Nutzer gesandt. Er kann die Benachrichtigung annhmen oder ablehnen. Nur angenommene Anfragen erscheinen in Ihrer Kontaktliste.</entry>
+  <entry key="1267">Nachricht</entry>
+  <entry key="1268">Der Nutzer veröffentlicht die persönlichen Kontaktdaten nicht.</entry>
+  <entry key="1269">Der Nutzer zeigt die persönlichen Kontaktdaten nur seinen bestätigten Kontakten.</entry>
+  <entry key="1270">Adresse &amp; Telefon</entry>
+  <entry key="1271">Ihr Einladungscode ist ungültig. Er kann nur im angegebenen Zeitraum genutzt werden:</entry>
+  <entry key="1272">Der Termin ist in den Kalendern anderer Nutzer eingetragen. Die Änderungen werden auch dort vorgenommen. Wollen Sie den Termine wirklich aktualisieren?</entry>
+  <entry key="1273">Aktualisierung bestätigen</entry>
+  <entry key="1274">Dieser Kontakt darfen meinen Kalender einsehen (nur Ansicht)</entry>
+  <entry key="1275">Kalender nicht veröffentlichen</entry>
+  <entry key="1276">Kalender meiner Kontakte</entry>
+  <entry key="1277">Erste wenn die Kontakte bestätigt wurden besteht Zugriff auf die Kalender.</entry>
+  <entry key="1278">Sie können nur in Ihrem eigenen Kalender Termine speichern oder löschen.</entry>
+  <entry key="1279">Meinen eigenen Kalender anzeigen.</entry>
+  <entry key="1280">Der Termin ist in den Kalendern anderer Nutzer eingetragen. Soll der Termin wirklich überall gelöscht werden?</entry>
+  <entry key="1281">Aktion bestätigen</entry>
+  <entry key="1282">Raum betreten</entry>
+  <entry key="1283">Zugang zum Konferenzraum</entry>
+  <entry key="1284">Ein Konferenzraum und Termin ist durch diese private Nachricht gebucht worden.</entry>
+  <entry key="1285">DerTermin muß erst noch gespeichert werden.</entry>
+  <entry key="1286">Der Termin und der gebuchte Raum wurden inzwischen gelöscht. Der Raum steht nicht zur Verfügung.</entry>
+  <entry key="1287">Spitznamen wählen</entry>
+  <entry key="1288">Vorname</entry>
+  <entry key="1289">Nachname</entry>
+  <entry key="1290">E-Mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Mindestens 4 Zeichen für Vor- und Nachname eingeben.</entry>
+  <entry key="1293">Bitte geben Sie eine gültige Mail-Adresse ein.</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login mit Ihrem Facebook-Account</entry>
+  <entry key="1296">Mitglied seit</entry>
+  <entry key="1297">Sie sind über Ihren Facebook-Account eingeloggt. Aktualisieren Sie in Ihrem Profil Ihre E-Mailadresse. Sie erhalten sonst keine Einladungen zu Sitzungen odr Nachrichten von Ihren Kontakten.</entry>
+  <entry key="1298">Nachricht</entry>
+  <entry key="1299">Mitteilung zur Profilaktualisierung künftig nicht anzeigen.</entry>
+  <entry key="1300">weitere Anzeigemöglichkeiten ...</entry>
+  <entry key="1301">Neue private Nachrichten:</entry>
+  <entry key="1302">Klicken Sie auf Ihr Profil um die ganze Nachricht zu sehen....</entry>
+  <entry key="1303">Anworten</entry>
+  <entry key="1304">Räume und Chat</entry>
+  <entry key="1305">Meine Räume</entry>
+  <entry key="1306">Mein Konferenzraum (für 1-16 Benutzer)</entry>
+  <entry key="1307">Mein Webinarraum (für 1-120 Benutzer)</entry>
+  <entry key="1308">Eigne ID</entry>
+  <entry key="1309">Bitte Passwort eingeben</entry>
+  <entry key="1310">Sie benötigen einen Nutzeraccount als Teilnehmer, Moderator oder Administrator</entry>
+  <entry key="1311">Web-Service (nur SOAP)</entry>
+  <entry key="1312">Direkt auf Whiteboard ablegen</entry>
+  <entry key="1313">Soll dieses Whiteboard wirklich entfernt werden? Die Aktion kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1314">In Whiteboard laden</entry>
+  <entry key="1315">Vergessen Sie nicht die Aufzeichnung zu starten. Ein Nutzer des Raum muß die Aufzeichnung starten, damit diese anschließend zur Verfügung steht.</entry>
+  <entry key="1316">Aufzeichnung starten</entry>
+  <entry key="1317">Pfeil</entry>
+  <entry key="1318">Kreis</entry>
+  <entry key="1319">Linie</entry>
+  <entry key="1320">Rechteck</entry>
+  <entry key="1321">Dreieck</entry>
+  <entry key="1322">Text/Notiz</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Frei Zeichnen</entry>
+  <entry key="1325">Auswählen/Verschieben</entry>
+  <entry key="1326">Form zeichnen</entry>
+  <entry key="1327">Ausschneiden/verschieben</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Drucken</entry>
+  <entry key="1330">Rückgängig</entry>
+  <entry key="1331">Löschen</entry>
+  <entry key="1332">Raster einfügen</entry>
+  <entry key="1333">Datei bereitstellen</entry>
+  <entry key="1334">Form auswählen</entry>
+  <entry key="1335">Clipart auswählen</entry>
+  <entry key="1336">Kopieren</entry>
+  <entry key="1337">Ausschneide</entry>
+  <entry key="1338">Einfügen</entry>
+  <entry key="1339">Löschen</entry>
+  <entry key="1340">Wollen Sie wirklich den gesamten Inhalt der Whiteboard löschen?</entry>
+  <entry key="1341">Direkt auf Whiteboard ablegen.</entry>
+  <entry key="1342">Teilnehmer</entry>
+  <entry key="1343">Teilnehmerverwaltung</entry>
+  <entry key="1344">Anwesend</entry>
+  <entry key="1345">Remote Control</entry>
+  <entry key="1346">Austragen</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Teilnehmer einladen</entry>
+  <entry key="1349">Per E-Mail</entry>
+  <entry key="1350">Nutzer ist Moderator</entry>
+  <entry key="1351">Nutzer hat Webcam aktiviert</entry>
+  <entry key="1352">Form ausfüllen deaktivieren</entry>
+  <entry key="1353">Form ausfüllen aktivieren</entry>
+  <entry key="1354">Einrasten</entry>
+  <entry key="1355">Aufzeichnung erlauben</entry>
+  <entry key="1356">Warten auf Aufzeichnung</entry>
+  <entry key="1357">Topbar verbergen</entry>
+  <entry key="1358">Video abspielen</entry>
+  <entry key="1359">Wollen Sie wirklich den Inhalt der aktuellen Folie löschen?</entry>
+  <entry key="1360">Nutzerrechte akzeptieren/gewähren</entry>
+  <entry key="1361">Ablehnen</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Aktivitäten und Aktionen</entry>
+  <entry key="1364">Whiteboard entfernen</entry>
+  <entry key="1365">Um Whiteboards zu entfernen benötigen Sie Moderations- oder Schreibrechte für die Whiteboards.</entry>
+  <entry key="1366">Nicht erlaubt</entry>
+  <entry key="1367">hat den Raum verlassen.</entry>
+  <entry key="1368">Mathematische Zeichen</entry>
+  <entry key="1369">Keine Kategorie</entry>
+  <entry key="1370">Farbstil</entry>
+  <entry key="1371">Qualität</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">besuche</entry>
+  <entry key="1374">rot-orange</entry>
+  <entry key="1375">mittel seegrün</entry>
+  <entry key="1376">stahlblau</entry>
+  <entry key="1377">hellstahlblau</entry>
+  <entry key="1378">rotgold</entry>
+  <entry key="1379">silbergrau</entry>
+  <entry key="1380">nutzerdefiniert</entry>
+  <entry key="1381">beste</entry>
+  <entry key="1382">Upload</entry>
+  <entry key="1383">mittlere</entry>
+  <entry key="1384">Mikrofone für alle stumm schalten</entry>
+  <entry key="1385">Mikrofone für alle aktivieren</entry>
+  <entry key="1386">Mikrofone für andere stumm schalten</entry>
+  <entry key="1387">Der Moderator hat ihr Mikrofon stumm geschaltet. Sie können dies nicht selber ändern.</entry>
+  <entry key="1388">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1389">Wollen Sie Ihr Mikrofon wirklich stumm schalten? Niemand wird Sie dann hören können.</entry>
+  <entry key="1390">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1391">Wollen Sie dieses Mikrofon wirklich stumm schalten? Sie hören danach den Nutzer nicht mehr. Dies hat keine Auswirkung ob andere Nutzer es noch hören. Nur Moderatoren können Mikrofone für alle abschalten.</entry>
+  <entry key="1392">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1393">Wenn Sie dieses Mikrofon für alle stumm schalten wird kein Nutzer es mehr hören können.</entry>
+  <entry key="1394">Ihr Ton ist aktiv. Klicken Sie hier, um dem Moderator eine Nachricht zu senden, Ihr Mikrofon für alle Nutzer im Konferenzraum stummzuschalten.</entry>
+  <entry key="1395">Ihr Ton ist stummgeschaltet. Klicken Sie hier, um dem Moderator eine Nachricht zu senden, Ihr Mikrofon für alle Nutzer im Konferenzraum anzuschalten.</entry>
+  <entry key="1396">bittet den Moderator das eigene Mikrofon für alle Nutzer des Raums stummzuschalten.</entry>
+  <entry key="1397">bittet den Moderator das eigene Mikrofon für alle Nutzer des Raums anzuschalten.</entry>
+  <entry key="1398">bittet den Moderator sein/ihr Mikrofon anzuschalten.</entry>
+  <entry key="1399">bittet den Moderator sein/ihr Mikrofon stummzuschalten.</entry>
+  <entry key="1400">Mikrofon anschalten. Hier klicken, um das Mikrofon für alle Nutzer des Raums stummzuschalten.</entry>
+  <entry key="1401">Mikrofon stummschalten. Hier klicken, um das Mikrofon für alle Nutzer des Raums anzuschalten.</entry>
+  <entry key="1402">Mikrofon des Nutzers ist vom Moderator für alle stummgeschaltet. Sie können es nicht reaktivieren.</entry>
+  <entry key="1403">Mein Mikrofon für alle stummschalten.</entry>
+  <entry key="1404">Mein Mikrofon für alle anschalten.</entry>
+  <entry key="1405">Mikrofon stummschalten</entry>
+  <entry key="1406">Mikrofon anschalten</entry>
+  <entry key="1407">Mikrofon für alle abschalten</entry>
+  <entry key="1408">Mikrofon für alle anschalten</entry>
+  <entry key="1409">Nur Moderatoren können Mikrofone für alle an/abschalten. Sie können Ihr eigenes Mikrofon mit dem Mikrofon-Icon abschalten.</entry>
+  <entry key="1410">Titel der Abstimmung</entry>
+  <entry key="1411">Sie</entry>
+  <entry key="1412">Archivierte Abstimmungen</entry>
+  <entry key="1413">aktiv</entry>
+  <entry key="1414">Einfache Grafik</entry>
+  <entry key="1415">Tortengrafik</entry>
+  <entry key="1416">Bitte geben Sie eine E-Mail-Adresse an</entry>
+  <entry key="1417">Neue Nachricht(en)</entry>
+  <entry key="1418">Abstimmung schließen</entry>
+  <entry key="1419">Wollen Sie die Abstimmung wirklich schließen? Danach kann sich niemand mehr beteiligen.</entry>
+  <entry key="1420">Abstimmung löschen</entry>
+  <entry key="1421">Wollen Sie die Abstimmung wirklich löschen? Damit werden auch alle Ergebnisse gelöscht.</entry>
+  <entry key="1422">Sprache: ISO Code</entry>
+  <entry key="1423">Recht für exklusiven Audiozugriff vergeben/entziehen.</entry>
+  <entry key="1424">Nutzer erhält Recht für exklusives Audio</entry>
+  <entry key="1425">Recht für exklusives Audio für Nutzer entziehen</entry>
+  <entry key="1426">bittet um Recht für exklusives Audio.</entry>
+  <entry key="1427">bittet den Moderator darum ihm exklusives Audio-Recht zu geben.</entry>
+  <entry key="1428">Recht für exklusives Audio geben.</entry>
+  <entry key="1429">Kamera-Auflösung</entry>
+  <entry key="1430">Die Kamera-Auflösung hat einen direkten Einfluss auf die verbrauchte Upload-Bandbreite!</entry>
+  <entry key="1431">Sie verfügen nicht über das Recht sich selbst oder anderen exklusives Audiorecht zu geben. Sie können jedoch den Moderator bitten, Ihnen diese Berechtigung zuzuweisen.</entry>
+  <entry key="1432">Ich würde gerne das Recht auf exklusives Audio erhalten.</entry>
+  <entry key="1433">Mir exklusives Rederecht geben (alternativ: klick auf Video Pod oder F12)</entry>
+  <entry key="1434">Mikrofon ist an</entry>
+  <entry key="1435">Mikrofon ist abgeschaltet</entry>
+  <entry key="1436">Chat verbergen</entry>
+  <entry key="1437">Aktivitäten verbergen</entry>
+  <entry key="1438">Dateiverwaltung verbergen</entry>
+  <entry key="1439">Aktionenmenü verbergen</entry>
+  <entry key="1440">Screen Sharing verbergen</entry>
+  <entry key="1441">Whiteboard verbergen</entry>
+  <entry key="1442">Mikrofonstatus in Video anzeigen</entry>
+  <entry key="1443">Layout Optionen</entry>
+  <entry key="1444">Neuer Termin</entry>
+  <entry key="1445">Passwortgeschützt ist nicht der Raum sondern die Einladungen die an die Teilnehmer verschickt werden! D.h. wenn Sie einen Termin mehrmals mit unterschiedlichem Passwort speichern wird jedesmal ein Link per mail zum Konferenzraum an alle Teilnehmer verschickt mit dem jeweiligem Passwort. Bereits versendete Einladungen funktionieren weiterhin!</entry>
+  <entry key="1446">Termin ändern</entry>
+  <entry key="1447">Zeige sip dialer</entry>
+  <entry key="1448">Anrufen</entry>
+  <entry key="1449">Zeige Kalender Einträge</entry>
+  <entry key="1450">Startseite</entry>
+  <entry key="1451">Ihr Terminkalender</entry>
+  <entry key="1452">Aufnahmen ansehen und verwalten</entry>
+  <entry key="1453">Konferenzraum beitreten</entry>
+  <entry key="1454">Benutzerrechte verwalten</entry>
+  <entry key="1455">Verbindungen verwalten</entry>
+  <entry key="1456">Benutzergruppen verwalten</entry>
+  <entry key="1457">Konferenzräume verwalten</entry>
+  <entry key="1458">System-Einstellungen verwalten</entry>
+  <entry key="1459">Sprachen verwalten</entry>
+  <entry key="1460">LDAP und ADS Konfiguration</entry>
+  <entry key="1461">Export/Import von Systemsicherungen</entry>
+  <entry key="1462">Sie verfügen nicht über die erforderlichen Berechtigungen für diese Funktion</entry>
+  <entry key="1463">Text bearbeiten</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Veröffentlichen</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduzieren Sie die Breite des Sharing-Screens, bevor Sie versuchen ihn nach links zu verschieben.</entry>
+  <entry key="1472">Reduzieren Sie die Höhe des Sharing-Screens, bevor Sie versuchen ihn nach unten zu verschieben,</entry>
+  <entry key="1473">Reduzieren Sie x des Sharing-Screens, bevor Sie versuchen ihn zu erweitern weiter,</entry>
+  <entry key="1474">Reduzieren Sie y des Sharing-Screens, bevor Sie versuchen die Höhe zu verändern.</entry>
+  <entry key="1475">Tragen Sie hier die Einstellungen zu Ihren Bildschirmdaten für Drittanbeiter wie justin.tv ein</entry>
+  <entry key="1476">Bitte starten Sie Screen-Sharing, um in der Lage zu sein, ihn zu veröffentlichen</entry>
+  <entry key="1477">Moderator Berechtigung erforderliche, um die Aufnahme zu starten</entry>
+  <entry key="1478">Sie haben keine Berechtigung, um jedem Teilnehmer Audio-Rechte zu gewähren. Sie müssen Rolle Moderator besitzen oder das Recht Audio für jedes Mikrofon einzuschalten.</entry>
+  <entry key="1479">neue Datei in Datei-Explorer hochladen</entry>
+  <entry key="1480">Öffne neuen Dialog mit Sharing-Einstellungen</entry>
+  <entry key="1481">Ein existierender Moderator muss dies genehmigen</entry>
+  <entry key="1482">Fragen Sie den Moderator, um Ihr/e Webcam/Mikro zu teilen</entry>
+  <entry key="1483">Feedback sammeln, indem sie eine Umfrage starten</entry>
+  <entry key="1484">Vergangene und gegenwärtige Umfrage-Ergebnisse als Diagramme</entry>
+  <entry key="1485">Stimmen Sie ab, wenn es eine Umfrage für diesen Konferenzraum gibt</entry>
+  <entry key="1486">Bearbeiten der Webcam und Mikrofon-Einstellungen</entry>
+  <entry key="1487">Bestätigen und verlassen des Raumes</entry>
+  <entry key="1488">Rufen Sie externe Personen über VoIP/SIP an</entry>
+  <entry key="1489">Senden Sie eine E-Mail mit einem direkten Link zu diesem Raum</entry>
+  <entry key="1490">Ändern Sie Ihre Whiteboard-Einstellungen</entry>
+  <entry key="1491">Maximal Upload-Größe</entry>
+  <entry key="1492">Fragen Sie den Moderator, um Ihr Whiteboard teilen</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">Alle</entry>
+  <entry key="1495">Sie können nicht mit sichselbst einen privaten Chat starten.</entry>
+  <entry key="1496">Sie haben bereits einen privaten Chat mit diesem Teilnehmer gestartet.</entry>
+  <entry key="1497">Wollen Sie wirklich diesen privaten Chat löschen?</entry>
+  <entry key="1498">Server</entry>
+  <entry key="1499">Beteiligten Server im Cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server-Addresse</entry>
+  <entry key="1502">Server-Details</entry>
+  <entry key="1503">Sende SMS</entry>
+  <entry key="1504">Veröffentlichen. Nutzer:</entry>
+  <entry key="1505">Um Zeit und Internet-Verkehr sparen, können Sie den Befehl admin für Backup/Wiederherstellen/Aktualisieren verwenden. &lt;ol&gt; &lt;li&gt;Gehen sie zum OM-Installationspfad (z.b. /opt/red5)&lt;/li&gt; &lt;li&gt;Stopen Sie OM (z.b. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/heute_om_backup.zip (Backup vom bestehenden OM erstellen)&lt;/li&gt; &lt;li&gt;Laden Sie die neue Version OM herunter&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (kopieren Sie die existierende OM-Version für den Fall :))&lt;/li&gt; &lt;li&gt;Entpacken Sie die heruntergeladene OM-Version nach /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/heute_om_backup.zip (or './admin.sh -i -file ~/heute_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass', für den Fall, dass Sie eine Nicht-Standard-DB verwenden)&lt;/li&gt; &lt;li&gt;Starten Sie OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">gemeinsame Räume für alle Benutzer</entry>
+  <entry key="1507">gemeinsame Räume für die aktuelle Benutzer-Gruppe</entry>
+  <entry key="1508">Räume des aktuellen Benutzers</entry>
+  <entry key="1509">Erstellen/Ändern Termin spezieller Raum</entry>
+  <entry key="1510">Sie können mehrere Adressen im folgenden Format angeben: vorname1 nachname1 &lt;email1&gt;,"vorname2 nachname2" &lt;email2&gt;,'vorname nachname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Stream-Volumen anpassen</entry>
+  <entry key="1512">Mikrofon-Volumen anpassen</entry>
+  <entry key="1513">Chat ist moderiert</entry>
+  <entry key="1514">Erlaube Nachrichten</entry>
+  <entry key="1515">Chat-Feld standardmäßig geöffnet</entry>
+  <entry key="1516">Dateien-Fenster standardmäßig geöffnet</entry>
+  <entry key="1517">letzter ping</entry>
+  <entry key="1518">Jeder Slave sendet alle 3 Sekunden einen Ping an den Master (konfigurierbar). Der lastPing des Slave muss kleiner sein als 1 Minute, so dass der Master den Slave verwendet.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">Benutzer (SOAP-Access)</entry>
+  <entry key="1521">Passwort</entry>
+  <entry key="1522">Webapplikations-Pfad</entry>
+  <entry key="1523">Protokoll</entry>
+  <entry key="1524">ping läuft</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">URL generieren</entry>
+  <entry key="1527">Netzwerk testen</entry>
+  <entry key="1528">Auswahl Interview Video Pod</entry>
+  <entry key="1529">unterstreichen</entry>
+  <entry key="1530">Schriftart</entry>
+  <entry key="1531">Schriftarten erlauben</entry>
+  <entry key="1532">Schriftfarbe</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Session-Statistiken anzeigen</entry>
+  <entry key="1535">Details zur Session</entry>
+  <entry key="1536">System Import</entry>
+  <entry key="1537">beinhaltet hochgeladene Dateien und Aufnahmen im Backup</entry>
+  <entry key="1538">Aktivieren Sie SIP-Verkehr im Raum</entry>
+  <entry key="1539">Wollen Sie wirklich diesem Benutzer exklusive Audiorechte geben?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Import von Bildern auf 
+					das Whiteboard erm&ouml;glichen<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>ImageMagick</strong> auf dem Server. Weitere
+					Informationen unter <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>.
+					Anleitungen f&uuml;r die Installation finden Sie unter <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>, in den
+					meisten Linux-Distributionen l&auml;sst es sich jedoch bequem per Paketmanager
+					(z.B. apt-get) installieren.
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Import von PDF-Dateien auf das
+					Whiteboard erm&ouml;glichen<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>GhostScript</strong> auf dem Server. Weitere
+					Informationen (Installationsanleitungen etc.) finden Sie unter <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>. 
+					In den meisten Linux-Distributionen l&auml;sst es sich bequem per Paketmanager
+					(z.B. apt-get) installieren.
+				</li>
+				<li>Installieren Sie <strong>SWFTools</strong> auf dem Server. Weitere 
+					Informationen (Installationsanleitungen etc.) finden Sie unter <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>. 
+					Einige Linux-Distributionen haben es bereits in ihre Paketquellen aufgenommen (siehe 
+					<a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>).
+					Die empfohlene Version von <strong>SWFTools</strong> ist 0.9 - fr&uuml;here Versionen
+					enthalten einen Bug, welcher zu falschen Objektausdehnungen auf dem Whiteboard 
+					f&uuml;hrt.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Import von 
+					Office-Dokumenten (.doc, .docx, .ppt, .pptx, etc.) auf das Whiteboard erm&ouml;glichen
+					<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> muss gestartet worden sein und auf Port 8100 lauschen, 
+					siehe <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Aufzeichnung und 
+					Import von Videos (.avi, .flv, .mov und .mp4) auf das Whiteboard erm&ouml;glichen<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>FFmpeg</strong>. Sie sollten die neueste Version verwenden! 
+					Windows-Binaries finden Sie z.B. unter 
+					<a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a>. Linux- oder OSx-Nutzer sollten 
+					eine der zahlreichen Installationsanleitungen im Web zu Rate ziehen. libmp3lame muss 
+					aktiviert sein!
+				</li>
+				<li>Installieren Sie <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					Sie sollten die neueste Version verwenden! SoX 12.xx wird NICHT funktionieren!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Falls Sie weitere Fragen haben oder Support bei Installation und Hosting 
+			ben&ouml;tigen:</span></b>
+	<br />
+	<br />
+    <br />
+	<br />
+	<b><span style="font-size: 1.2em">Support durch die OpenMeetings-Community:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailinglisten</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.4em">Einige Unternehmen bieten kommerziellen Support
+	    f&uuml;r Apache OpenMeetings an:</span></b>
+	<br />
+	<br />
+
+    <span style="font-size: 1.3em"><a
+        href="http://openmeetings.apache.org/commercial-support.html"
+        target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+    <br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Empfehlung 
+				f&uuml;r Produktivumgebungen<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Standardm&auml;&szlig;ig verwendet {0} die integrierte 
+			{1} Datenbank. In Produktivumgebungen wird jedoch der Einsatz von {2}, {3}, {4}, {5} or {6} empfohlen.
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Nutzerdaten</entry>
+	<entry key="install.wizard.params.step1.username">Nutzername</entry>
+	<entry key="install.wizard.params.step1.username.title">Geben Sie einen Nutzernamen ein</entry>
+	<entry key="install.wizard.params.step1.password">Nutzerpasswort</entry>
+	<entry key="install.wizard.params.step1.password.title">Geben Sie ein Passwort ein</entry>
+	<entry key="install.wizard.params.step1.email">E-Mail</entry>
+	<entry key="install.wizard.params.step1.email.title">Geben Sie eine E-Mail-Adresse ein</entry>
+	<entry key="install.wizard.params.step1.tz">Zeitzone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Geben Sie den Namen Ihrer Organisation ein</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Konfiguration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Neuen Nutzern erlauben, sich zu registrieren (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">E-Mail an neu registrierte Nutzer senden (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode"><![CDATA[Neu registrierte Nutzer m&uuml;ssen Ihre E-Mail-Adresse verifizieren (sendEmailWithVerficationCode)]]></entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms"><![CDATA[Beispielr&auml;ume aller Raumtypen erstellen]]></entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server-Port(Standard ist 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Nutzername (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Nutzerpasswort (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">TLS zur Mailserver-Authentifizierung aktivieren</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Die E-Mail-Adresse des Einladenden als 'ReplyTo'-Adresse
+					in E-Mail-Einladungen verwenden (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Voreingestellte Sprache</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Voreingestellte Schriftart beim Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Konverter</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> Siehe</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title"><![CDATA[Geben Sie an, wieviel dpi swftools f&uuml;r die 'PDF zu SWF'-Konvertierung nutzen soll.]]></entry>
+	<entry key="install.wizard.params.step3.swfZoom.text"><![CDATA[Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben.
+		Geben Sie an, wieviel dpi swftools f&uuml;r die 'PDF zu SWF'-Konvertierung nutzen soll.
+		Voreingestellter Wert ist 100 dpi.]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality"><![CDATA[SWFTools JPEG-Qualit&auml;t]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title"><![CDATA[Geben Sie an, welche Qualit&auml;tsstufe f&uuml;r eingebettete JPEG-Bilder verwendet werden soll.]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text"><![CDATA[Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben.
+		Geben Sie an, welche Qualit&auml;tsstufe f&uuml;r eingebettete JPEG-Bilder 
+		verwendet werden soll. 0 bedeutet schlechteste Qualit&auml;t (kleinste 
+		Dateigr&ouml;&szlig;e), 100 bedeutet beste Qualit&auml;t (gr&ouml;&szlig;te 
+		Dateigr&ouml;&szlig;e) (Voreinstellung: 85)]]></entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools-Pfad</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Geben Sie den Pfad zu swftools an, z.B. C:/swftools (Windows), falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.swfPath.text"><![CDATA[
+		Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben. Wenn daraufhin eine Liste mit Optionen angezeigt wird, 
+		k&ouml;nen Sie dieses Feld leer lassen. Ansonsten m&uuml;ssen Sie den Pfad 
+		zu pdf2swf hier eintragen.
+	]]></entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick-Pfad</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Geben Sie den Pfad zu ImageMagick an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG-Pfad</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Geben Sie den Pfad zu FFMPEG an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX-Pfad</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Geben Sie den Pfad zu SoX an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD-Pfad</entry>
+	<entry key="install.wizard.params.step3.jodPath.title"><![CDATA[Der Pfad zur JOD-Bibliothek (http://code.google.com/p/jodconverter). Beachten Sie, dass der Pfad auf das lib-Verzeichnis zeigen muss, welches auch jodconverter-core-version.jar enth&auml;lt.]]></entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath"><![CDATA[OpenOffice-/LibreOffice-Pfad f&uuml;r jodconverter]]></entry>
+	<entry key="install.wizard.params.step3.officePath.title">Der Pfad zu OpenOffice/LibreOffice (optional). Bitte geben Sie den echten Pfad an, falls jodconverter die OpenOffice-/LibreOffice-Installation nicht automatisch findet.</entry>
+	<entry key="install.wizard.params.step3.officePath.text">Der Pfad zu OpenOffice/LibreOffice (optional). Bitte geben Sie den richtigen Pfad an, falls 
+					jodconverter die OpenOffice-/LibreOffice-Installation nicht automatisch findet.
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Krypto-Typ</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Krypto-Klasse</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title"><![CDATA[Geben Sie den Klassennamen der Krypto-Klasse an. &Auml;NDERN SIE DIESEN WERT NICHT, WENN SIE SICH NICHT SICHER SIND!]]></entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Sie k&ouml;nnen den voreingestellten Krypto-Typ (welcher der 
+		PHP-MD5-Funktion entspricht) benutzen, oder Sie geben 
+		<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		ein, um BSD-artige Verschl&uuml;sselung zu benutzen. F&uuml;r 
+		weitergehende Informationen, auch zum Schreiben einer eigenen 
+		Krypto-Klasse, siehe <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a>. Sie k&ouml;nnen diesen 
+		Wert sp&auml;ter ver&auml;ndern, ABER vorher erstellte Nutzer und 
+		Sitzungen k&ouml;nnten anschlie&szlig;end unbenutzbar sein. 
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">SIP aktivieren</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">red5SIP-Integration aktivieren</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix"><![CDATA[Pr&auml;fix f&uuml;r SIP-R&auml;ume]]></entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text"><![CDATA[Pr&auml;fix f&uuml;r Telefonnummer der Konferenzr&auml;ume]]></entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP-Erweiterungskontext</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text"><![CDATA[Kontext f&uuml;r Asterisk-Erweiterungen]]></entry>
+
+	<entry key="install.wizard.install.desc">Bitte klicken Sie auf "Finish" um die Installation zu starten!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter"><![CDATA[&Ouml;ffnen der Anwendung]]></entry>
+	<entry key="install.wizard.congrats.port">Falls Ihr Red5-Server einen anderen Port oder eine andere Domain benutzt, sollten Sie</entry>
+	<entry key="install.wizard.congrats.config">die Konfiguration des Clients anpassen</entry>
+	<entry key="install.wizard.congrats.mail">Mailingliste</entry>
+	<entry key="install.wizard.congrats.commercial"><![CDATA[Einige Unternehmen bieten kommerziellen Support
+		f&uuml;r Apache OpenMeetings an:]]></entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml
new file mode 100644
index 0000000..0b74cb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Συνδιάσκεψη</entry>
+  <entry key="2">Συνάντηση</entry>
+  <entry key="3">Γεγονότα</entry>
+  <entry key="4">Ρυθμίσεις</entry>
+  <entry key="5">Προφίλ</entry>
+  <entry key="6">Διαχείριση</entry>
+  <entry key="7">Διακοπή</entry>
+  <entry key="8">Εγγραφή</entry>
+  <entry key="9">Το αρχείο δεν βρέθηκε!</entry>
+  <entry key="10">Εγγραφή κατά Δάσκαλο</entry>
+  <entry key="11">Συνδεδεμένοι Χρήστες:</entry>
+  <entry key="12">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="13">Το Όνομά Μου</entry>
+  <entry key="14">ΒιντεοΣυνδιάσκεψη</entry>
+  <entry key="15">Φόρτωση Αρχείου</entry>
+  <entry key="16">Ανανέωση Λίστας</entry>
+  <entry key="17">Στο Βασικό Αρχείο</entry>
+  <entry key="18">Νέα Ψηφοφορία</entry>
+  <entry key="19">Νέα Ψηφοφορία Συνδιάσκεψης.</entry>
+  <entry key="20">Ερώτηση:</entry>
+  <entry key="21">Τύπος Ψηφοφορίας:</entry>
+  <entry key="22">Δημιουργία</entry>
+  <entry key="23">Ενημέρωση: Κάθε συνδεδεμένος Χρήστης λαμβάνει ένα μήνυμα με τη νέα Ψηφοφορία.</entry>
+  <entry key="24">Δημιουργία Ψηφοφορίας</entry>
+  <entry key="25">Ακύρωση</entry>
+  <entry key="26">Ναι/Όχι</entry>
+  <entry key="27">Αριθμός 1-10</entry>
+  <entry key="28">Ψηφοφορία</entry>
+  <entry key="29">Μόνο ο Συντονιστής μπορεί να δημιουργεί Ερωτήσεις!</entry>
+  <entry key="30">Η Ψήφος σας καταχωρήθηκε.</entry>
+  <entry key="31">Έχετε ήδη συμμετάσχει σε αυτήν την Ψηφοφορία.</entry>
+  <entry key="32">Ψηφίστε!</entry>
+  <entry key="33">Η Απάντησή Σας:</entry>
+  <entry key="34">Ναι</entry>
+  <entry key="35">Όχι</entry>
+  <entry key="36">θέλει να ξέρει:</entry>
+  <entry key="37">Αποτελέσματα Ψηφοφορίας</entry>
+  <entry key="38">Ερώτηση:</entry>
+  <entry key="39">Αποτελέσματα:</entry>
+  <entry key="40">Απαντήσεις:</entry>
+  <entry key="41">Δεν έχει ξεκινήσει καμία Ψηφοφορία.</entry>
+  <entry key="42">Ψηφίστε!</entry>
+  <entry key="43">Συνάντηση (μέγιστο 4 θέσεις)</entry>
+  <entry key="44">Συνδιάσκεψη (μέγιστο 50 θέσεις)</entry>
+  <entry key="45">Τύπος</entry>
+  <entry key="46">Άλλες Θέσεις</entry>
+  <entry key="47">Ήδη Επιλεγμένη</entry>
+  <entry key="48">Είσοδος</entry>
+  <entry key="49">Ο Συντονιστής εγκατέλειψε τη Συνάντηση.</entry>
+  <entry key="50">Πληροφορίες Συστήματος</entry>
+  <entry key="51">Επιλογή Συσκευής</entry>
+  <entry key="52">Επιλογή Web Κάμερας:</entry>
+  <entry key="53">Επιλογή Μικροφώνου:</entry>
+  <entry key="54">Εντάξει</entry>
+  <entry key="55">Ακύρωση</entry>
+  <entry key="56">Πρέπει να συνδεθείτε ξανά!</entry>
+  <entry key="57">Τροποποίηση Εγκατάστασης.</entry>
+  <entry key="58">Μάθημα:</entry>
+  <entry key="59">Γλώσσα:</entry>
+  <entry key="60">Εντάξει</entry>
+  <entry key="61">Ακύρωση</entry>
+  <entry key="62">Εκκαθάριση Πίνακα</entry>
+  <entry key="63">Να αδειάζει ο Πίνακας πριν από την προσθήκη Νέας Εικόνας</entry>
+  <entry key="64">Να μην ερωτηθώ ξανά!</entry>
+  <entry key="65">Όχι</entry>
+  <entry key="66">Ρύθμιση Εγκατάστασης</entry>
+  <entry key="67">Να ζητείται Επιβεβαίωση πριν από την εκκαθάριση του Πίνακα</entry>
+  <entry key="68">Πληροφορίες Χρήστη</entry>
+  <entry key="69">Εκκαθάριση Περιοχής Σχεδίασης</entry>
+  <entry key="70">Αναίρεση</entry>
+  <entry key="71">Επαναφορά</entry>
+  <entry key="72">Επιλογή Αντικειμένου</entry>
+  <entry key="73">Κείμενο</entry>
+  <entry key="74">Ζωγραφική</entry>
+  <entry key="75">Σχεδίαση Γραμμής</entry>
+  <entry key="76">Σχεδίαση Υπογράμμισης</entry>
+  <entry key="77">Ορθογώνιο</entry>
+  <entry key="78">Έλλειψη</entry>
+  <entry key="79">Βέλος</entry>
+  <entry key="80">Διαγραφή Επιλεγμένου Στοιχείου</entry>
+  <entry key="81">Αίτηση για Συντονισμό</entry>
+  <entry key="82">Αίτηση</entry>
+  <entry key="83">Ακύρωση</entry>
+  <entry key="84">Γίνετε Συντονιστής</entry>
+  <entry key="85">Κλείσιμο</entry>
+  <entry key="86">Italic</entry>
+  <entry key="87">Bold</entry>
+  <entry key="88">Σε Αναμονή</entry>
+  <entry key="89">Κάποιος Χρήστης θέλει να κάνει Αίτηση για Συντονισμό. Μπορείτε να του παραχωρήσετε πρόσβαση μόνο στον Πίνακα ή να μεταστρέψετε πλήρως το ρόλο Συντονισμού. Χρήστης:</entry>
+  <entry key="90">Αποδοχή</entry>
+  <entry key="91">Απόρριψη</entry>
+  <entry key="92">Ακύρωση</entry>
+  <entry key="93">Αποστολή Αιτήματος στους ακόλουθους Χρήστες:</entry>
+  <entry key="94">Αποδεκτό</entry>
+  <entry key="95">Μη Αποδεκτό</entry>
+  <entry key="96">Αλλαγή Συντονιστή</entry>
+  <entry key="97">Δεν συντονίζετε εσείς αυτό το Μάθημα!</entry>
+  <entry key="98">Συντονιστής:</entry>
+  <entry key="99">Αυτό το Δωμάτιο είναι πλήρες. Παρακαλούμε δοκιμάστε ξανά αργότερα.</entry>
+  <entry key="100">Έλλειψη</entry>
+  <entry key="101">Κλείσιμο</entry>
+  <entry key="102">Σφάλμα Δεδομένων Εισόδου</entry>
+  <entry key="103">4 ή Περισσότεροι Χαρακτήρες: Προβλήματα Καταχώρησης με Κεφαλαία Γράμματα!</entry>
+  <entry key="104">Ο Κωδικός Χρήστη πρέπει να περιέχει τουλάχιστον 4 Χαρακτήρες!</entry>
+  <entry key="105">Το συγκεκριμένο Όνομα Χρήστη έχει επιλεγεί ήδη!</entry>
+  <entry key="106">Το συγκεκριμένο Email έχει καταχωρηθεί ήδη!</entry>
+  <entry key="107">Σφάλμα Συστήματος: Παρακαλούμε επικοινωνήστε με τους Διαχειριστές Συστήματος!</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Χρήστης ή Email:</entry>
+  <entry key="110">Κωδικός:</entry>
+  <entry key="111">Γλώσσα</entry>
+  <entry key="112">Σύνδεση</entry>
+  <entry key="113">Εγγραφή</entry>
+  <entry key="114">Χρήστης:</entry>
+  <entry key="115">Κωδικός:</entry>
+  <entry key="116">Επαν. Κωδικού:</entry>
+  <entry key="117">Όνομα:</entry>
+  <entry key="118">Επώνυμο:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Χώρα:</entry>
+  <entry key="121">Καταχώρηση</entry>
+  <entry key="122">Ακύρωση</entry>
+  <entry key="123">Δεν είστε Μέλος;</entry>
+  <entry key="124">Αρχική Σελίδα</entry>
+  <entry key="125">Χρήστες</entry>
+  <entry key="126">Ομάδες</entry>
+  <entry key="127">Οργανισμοί</entry>
+  <entry key="128">Δωμάτια Συναντήσεων</entry>
+  <entry key="129">Κοινό</entry>
+  <entry key="130">Οργανισμός</entry>
+  <entry key="131">Είσοδος</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Κωδικός</entry>
+  <entry key="134">Επαν. Κωδικού</entry>
+  <entry key="135">Όνομα</entry>
+  <entry key="136">Επώνυμο</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Γενέθλια</entry>
+  <entry key="139">Οδός/Αριθμός</entry>
+  <entry key="140">Τ.Κ./Πόλη</entry>
+  <entry key="141">Χώρα</entry>
+  <entry key="142">Διεύθυνση</entry>
+  <entry key="143">Στοιχεία Χρήστη</entry>
+  <entry key="144">Αποθήκευση</entry>
+  <entry key="145">Αποθήκευση</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Όνομα</entry>
+  <entry key="149">Επώνυμο</entry>
+  <entry key="150">Επόμενο</entry>
+  <entry key="151">Προηγούμενο</entry>
+  <entry key="152">Διαγραφή Εγγραφής</entry>
+  <entry key="153">Ακύρωση</entry>
+  <entry key="154">Διαγραφή</entry>
+  <entry key="155">Νέα Εγγραφή</entry>
+  <entry key="156">Ανανέωση Εγγραφής</entry>
+  <entry key="157">Διαγραφή Εγγραφής</entry>
+  <entry key="158">Κατάσταση</entry>
+  <entry key="159">Απενεργοποιημένη</entry>
+  <entry key="160">Ενεργοποιημένη</entry>
+  <entry key="161">Οργανισμοί</entry>
+  <entry key="162">Ημερολόγιο</entry>
+  <entry key="163">Κλείσιμο</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Όνομα</entry>
+  <entry key="166">Χρήστης</entry>
+  <entry key="167">Συντονιστής</entry>
+  <entry key="168">Διαχειριστής</entry>
+  <entry key="169">Επίπεδο Χρήστη</entry>
+  <entry key="170">Οργανισμός</entry>
+  <entry key="171">Όνομα</entry>
+  <entry key="172">Προσθήκη Οργανισμού</entry>
+  <entry key="173">Προσθήκη Οργανισμού</entry>
+  <entry key="174">Ακύρωση</entry>
+  <entry key="175">Προσθήκη</entry>
+  <entry key="176">Αφαίρεση Οργανισμού</entry>
+  <entry key="177">Χρήστης</entry>
+  <entry key="178">Προσθήκη Χρήστη</entry>
+  <entry key="179">Διαγραφή Χρήστη</entry>
+  <entry key="180">Προσθήκη Χρήστη σε Οργανισμό</entry>
+  <entry key="181">Εύρεση Χρήστη</entry>
+  <entry key="182">Εύρεση</entry>
+  <entry key="183">Χρήστης</entry>
+  <entry key="184">Οργανισμός</entry>
+  <entry key="185">Είσοδος</entry>
+  <entry key="186">Δωμάτια Συνδιασκέψεων</entry>
+  <entry key="187">Δωμάτιο Συνδιάσκέψεων</entry>
+  <entry key="188">Αριθμός</entry>
+  <entry key="189">Όνομα</entry>
+  <entry key="190">Δημόσιο</entry>
+  <entry key="191">Οργανισμοί</entry>
+  <entry key="192">Δωμάτια Συναντήσεων</entry>
+  <entry key="193">Όνομα</entry>
+  <entry key="194">Τύπος</entry>
+  <entry key="195">Δημόσιο</entry>
+  <entry key="196">Σχόλιο</entry>
+  <entry key="197">Αποθήκευση και Εξαγωγή</entry>
+  <entry key="198">Φόρτωση</entry>
+  <entry key="199">Αποθήκευση ως</entry>
+  <entry key="200">Όνομα Αρχείου</entry>
+  <entry key="201">Όνομα Αρχείου</entry>
+  <entry key="202">Ακύρωση</entry>
+  <entry key="203">Αποθήκευση</entry>
+  <entry key="204">Μήνυμα</entry>
+  <entry key="205">Φόρτωση</entry>
+  <entry key="206">Τα Αντικείμενα Φορτώθηκαν με Επιτυχία</entry>
+  <entry key="207">Συγχρονισμός πελατών. Πελάτες προς Αναμονή:</entry>
+  <entry key="208">Φόρτωση Δεδομένων Εικόνας</entry>
+  <entry key="209">Συγχρονισμός πελατών. Πελάτες προς Αναμονή:</entry>
+  <entry key="210">Εκκαθάριση Περιοχής Σχεδίασης</entry>
+  <entry key="211">Εκκαθάριση Περιοχής Σχεδίασης: Όλα τα δεδομένα του Πίνακα θα χαθούν!</entry>
+  <entry key="212">Να ζητείται Επιβεβαίωση πριν από την Φόρτωση Αρχείου</entry>
+  <entry key="213">Αποστολή Πρόσκλησης</entry>
+  <entry key="214">Αποστολή Πρόσκλησης</entry>
+  <entry key="215">Θέμα</entry>
+  <entry key="216">Παραλήπτης</entry>
+  <entry key="217">Μήνυμα</entry>
+  <entry key="218">Αποστολή</entry>
+  <entry key="219">Ακύρωση</entry>
+  <entry key="220">Aποστολή</entry>
+  <entry key="221">Στοιχεία Χρήστη</entry>
+  <entry key="222">Ψευδώνυμο για αυτήν τη Συνδιάσκεψη</entry>
+  <entry key="223">Ψευδώνυμο</entry>
+  <entry key="224">Όνομα</entry>
+  <entry key="225">Επώνυμο</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Γλώσσα</entry>
+  <entry key="228">Είσοδος</entry>
+  <entry key="229">Φόρτωση</entry>
+  <entry key="230">Φόρτωση Δεδομένων: Παρακαλούμε περιμένετε!</entry>
+  <entry key="231">Λάθος Κωδικός</entry>
+  <entry key="232">Παρακαλούμε εισάγετε δύο πανομοιότυπους Κωδικούς τουλάχιστον 6 Χαρακτήρων!</entry>
+  <entry key="233">Λάθος Email</entry>
+  <entry key="234">Μη Έγκυρη Διεύθυνση Email!</entry>
+  <entry key="235">Η Kαταχώρηση Oλοκληρώθηκε</entry>
+  <entry key="236">Ο Λογαριασμός σας δημιουργήθηκε με επιτυχία. Τώρα μπορείτε να συνδεθείτε.</entry>
+  <entry key="237">Δεν μπορείτε να μοιραστείτε την Οθόνη σας αυτή τη στιγμή! Κάποιος άλλος μοιράζεται ήδη την δική του.</entry>
+  <entry key="238">Διαμοίραση Απαγορευμένη</entry>
+  <entry key="239">Διαμοίραση Οθόνης</entry>
+  <entry key="240">Κακό Bandwidth: Δεν μπορέσατε να συγχρονίσετε την Οθόνη. Κάποια πλαίσια θα χαθούν. Αν αυτή η ειδοποίηση εμφανίζεται συχνά μπορείτε να ζητήσετε στο συντονιστή να μειώσει την Ποιότητα.</entry>
+  <entry key="241">Οθόνη του:</entry>
+  <entry key="242">Ζωγραφική</entry>
+  <entry key="243">Έγγραφα</entry>
+  <entry key="244">Συνομιλία</entry>
+  <entry key="245">Αρχεία</entry>
+  <entry key="246">Μέλη</entry>
+  <entry key="247">Αποθήκευση Γνήσιου Εγγράφου</entry>
+  <entry key="248">Αποθήκευση pdf Εγγράφου</entry>
+  <entry key="249">Φόρτωση Παρουσίασης στον Πίνακα</entry>
+  <entry key="250">Διαμόρφωση</entry>
+  <entry key="251">Σύρετε το Αντικείμενο</entry>
+  <entry key="252">Αλλάξτε το μέγεθος του Αντικειμένου</entry>
+  <entry key="253">%</entry>
+  <entry key="254">από</entry>
+  <entry key="255">Μεταφορά στην Πρώτη Σελίδα</entry>
+  <entry key="256">Μεταφορά στην Προηγούμενη Σελίδα</entry>
+  <entry key="257">Μεταφορά στην Επόμενη Σελίδα</entry>
+  <entry key="258">Μεταφορά στην Τελευταία Σελίδα</entry>
+  <entry key="259">Εστίαση --</entry>
+  <entry key="260">Εστίαση ++</entry>
+  <entry key="261">Κος</entry>
+  <entry key="262">Κα</entry>
+  <entry key="263">Διαμόρφωση</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Κλειδί</entry>
+  <entry key="266">Διαμόρφωση</entry>
+  <entry key="267">Κλειδί</entry>
+  <entry key="268">Τελευταία Τροποποίηση</entry>
+  <entry key="269">Τροποποιημένο από</entry>
+  <entry key="270">Σχόλιο</entry>
+  <entry key="271">Τιμή</entry>
+  <entry key="272">από</entry>
+  <entry key="273">Χρήστες</entry>
+  <entry key="274">Διαγραφή Χρήστη από Οργανισμό</entry>
+  <entry key="275">Δ</entry>
+  <entry key="276">Ο Χρήστης είναι ήδη Μέλος του συγκεκριμένου Οργανισμού!</entry>
+  <entry key="277">Νέα</entry>
+  <entry key="278">Γρήγοροι Σύνδεσμοι</entry>
+  <entry key="279">Συνδιάσκεψη</entry>
+  <entry key="280">Αμφιθέατρο</entry>
+  <entry key="281">Βοήθεια και Υποστήριξη</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Αναφορά Bug!</entry>
+  <entry key="285">Περισσότερα</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">Λίστα με Email Χρηστών (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Υπενθύμιση Login</entry>
+  <entry key="289">Περιεχόμενο</entry>
+  <entry key="290">Η Αρχική Μου Σελίδα</entry>
+  <entry key="291">Προγραμματισμένες Συναντήσεις</entry>
+  <entry key="292">Προγραμματισμένα Συμβάντα</entry>
+  <entry key="293">Δημόσιες Συναντήσεις</entry>
+  <entry key="294">Ιδιωτικές Συναντήσεις</entry>
+  <entry key="295">Δημόσια Συμβάντα</entry>
+  <entry key="296">Ιδιωτικά Συμβάντα</entry>
+  <entry key="297">Δημόσιο Περιεχόμενο</entry>
+  <entry key="298">Ιδιωτικό Περιεχόμενο</entry>
+  <entry key="299">Προσωπικό Περιεχόμενο</entry>
+  <entry key="300"></entry>
+  <entry key="301">Συντονισμός</entry>
+  <entry key="302">Αίτηση για Συντονισμό</entry>
+  <entry key="303">Ψηφοφορίες</entry>
+  <entry key="304">Επιλογή Αρχείου</entry>
+  <entry key="305">Ρυθμίσεις</entry>
+  <entry key="306">Κάμερα &amp; Μικρόφωνο</entry>
+  <entry key="307">Πίνακας</entry>
+  <entry key="308">Έξοδος</entry>
+  <entry key="309">Πίσω στα Δωμάτια</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Ξεχάσατε τον Κωδικό σας?</entry>
+  <entry key="312">Αλλάξτε Κωδικό</entry>
+  <entry key="313">Μέσω Email</entry>
+  <entry key="314">Μέσω Login</entry>
+  <entry key="315">To Email Σας</entry>
+  <entry key="316">Το Login Σας</entry>
+  <entry key="317">Αποστολή Email με Σύνδεσμο εκ νέου ρύθμισης (reset)</entry>
+  <entry key="318">Η διεύθυνση Email δεν βρέθηκε! Εισάγετε την ίδια διεύθυνση Email με εκείνην που χρησιμοποιήσατε για τη δημιουργία του Λογαριασμού σας.</entry>
+  <entry key="319">Παρακαλούμε εισάγετε Διεύθυνση Email ή Όνομα Χρήστη</entry>
+  <entry key="320">Δεν βρέθηκε Χρήστης που να αντιστοιχεί στο συγκεκριμένο Όνομα Χρήστη!</entry>
+  <entry key="321">Ένα mail με Ειδικό Σύνδεσμο έχει σταλεί στη διεύθυνση Email σας. Παρακαλούμε ελέγξτε το ταχυδρομείο σας. Αν δεν έχετε λάβει ακόμα mail, παρακαλούμε προσαρμόστε τις ρυθμίσεις spam του ταχυδρομείου σας και επαναλάβατε την αποστολή του mail Επιβεβαίωσης.</entry>
+  <entry key="322">Μήνυμα</entry>
+  <entry key="323">Μήνυμα</entry>
+  <entry key="324">Μη Έγκυρη Τιμή Hash! Δεν βρέθηκαν Χρήστες.</entry>
+  <entry key="325">Αλλάξτε τον Κωδικό σας</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Αλλαγή Κωδικού</entry>
+  <entry key="328">Νέος Κωδικός</entry>
+  <entry key="329">Επανάληψη Κωδικού</entry>
+  <entry key="330">Οι Κωδικοί που πληκτρολογήσατε δεν είναι ίδιοι!</entry>
+  <entry key="331">4 ή Περισσότεροι Χαρακτήρες: Προβλήματα Καταχώρησης με Κεφαλαία Γράμματα!</entry>
+  <entry key="332">Ο Κωδικός ρυθμίστηκε. Τώρα μπορείτε να συνδεθείτε.</entry>
+  <entry key="333">Εντάξει</entry>
+  <entry key="334">Άγνωστο Σφάλμα: Παρακαλούμε να το αναφέρετε στην Ομάδα Εξυπηρέτησής σας.</entry>
+  <entry key="335">Το Όνομα Χρήστη δεν βρέθηκε.</entry>
+  <entry key="336">Μη Έγκυρος Κωδικός</entry>
+  <entry key="337">Επιτυχής Αποσύνδεση</entry>
+  <entry key="338">Frontend Εγγραφές Απενεργοποιημένες.</entry>
+  <entry key="339">Μη Έγκυρο Email</entry>
+  <entry key="340">Επανάληψη Ονόματος Αρχείου: Παρακαλούμε επιλέξτε διαφορετικό Όνομα Αρχείου!</entry>
+  <entry key="341">Πολύ μικρό Όνομα Αρχείου!</entry>
+  <entry key="342">Αδυναμία Αποθήκευσης Διεύθυνσης</entry>
+  <entry key="343">Ο Χρήστης προστέθηκε επιτυχώς, αλλά πρέπει να τοποθετηθεί σε κάποιον Οργανισμό, αλλιώς δεν θα μπορεί να συνδεθεί!</entry>
+  <entry key="344">Νέα Εγγραφή</entry>
+  <entry key="345">Δεν βρέθηκε Πεδίο με το συγκεκριμένο ID (Κωδικό Αριθμό) Πεδίου!</entry>
+  <entry key="346">Δεν βρέθηκε Ετικέτα για το συγκεκριμένο Πεδίο!</entry>
+  <entry key="347">Απαιτείται Εξουσιοδότηση από το Διαχειριστή!</entry>
+  <entry key="348">Σύνταξη Γλώσσας</entry>
+  <entry key="349">Γλώσσα</entry>
+  <entry key="350">ID Ετικέτας</entry>
+  <entry key="351">Όνομα Ετικέτας</entry>
+  <entry key="352">Τιμή</entry>
+  <entry key="353">Τιμές Πεδίου</entry>
+  <entry key="354">Όνομα Ετικέτας:</entry>
+  <entry key="355">Τιμή Ετικέτας:</entry>
+  <entry key="356">Αριθμός Ετικέτας:</entry>
+  <entry key="357">Διαγράψατε μόνο την Ετικέτα και ΟΧΙ το Πεδίο! Δεν μπορείτε να διαγράψετε το Πεδίο, διότι ενδέχεται να περιέχει Ετικέτες σε άλλες Γλώσσες.</entry>
+  <entry key="358">Μη Έγκυρο ID (Κωδικός Αριθμός) Ετικέτας! Δεν βρέθηκε καταχωρημένο στη Βάση Δεδομένων.</entry>
+  <entry key="359">Δεν μπορείτε να διαγράψετε το συγκεκριμένο Πεδίο! Μπορείτε να διαγράφετε Ετικέτες αλλά ΟΧΙ Πεδία. Αυτή τη στιγμή δεν έχει επιλεγεί κάποια Ετικέτα. Είτε δεν έγινε επιλογή Ετικέτας από κανένα Πεδίο, είτε δεν υπάρχει Ετικέτα για την συγκεκριμένη Γλώσσα και το συγκεκριμένο Πεδίο.</entry>
+  <entry key="360">Εξαγωγή</entry>
+  <entry key="361">Πρέπει να αποσυνδεθείτε για να δείτε τις αλλαγές!</entry>
+  <entry key="362">Προσθήκη Νέας Γλώσσας</entry>
+  <entry key="363">Διαγραφή Γλώσσας</entry>
+  <entry key="364">Προσθήκη Νέας Γλώσσας</entry>
+  <entry key="365">Όνομα</entry>
+  <entry key="366">Προσθήκη Γλώσσας</entry>
+  <entry key="367">Αντίγραφα Ασφαλείας</entry>
+  <entry key="368">Αρχή</entry>
+  <entry key="369">Προηγούμενο</entry>
+  <entry key="370">Επόμενο</entry>
+  <entry key="371">Τέλος</entry>
+  <entry key="372">Ο Χρήστης μιλάει (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Ανοιγμα/Κλείσιμο Ήχου</entry>
+  <entry key="374">Σύστημα</entry>
+  <entry key="375">Οι Ρυθμίσεις Σας</entry>
+  <entry key="376">Γειά σας,</entry>
+  <entry key="377">Επεξεργασία Προφίλ</entry>
+  <entry key="378">Νέα Μηνύματα:</entry>
+  <entry key="379">Αλλαγή Εικόνας</entry>
+  <entry key="380">Δεδομένα Χρήστη - Εξαγωγή</entry>
+  <entry key="381">Όλοι οι Oργανισμοί πρέπει να είναι ήδη υπάρχοντες!</entry>
+  <entry key="382">Εκκίνηση Εξαγωγής</entry>
+  <entry key="383">Κατά Οργανισμό</entry>
+  <entry key="384">Εκκίνηση Εξαγωγής</entry>
+  <entry key="385">Δεδομένα Χρήστη - Εισαγωγή</entry>
+  <entry key="386">Επιλογή users.xml</entry>
+  <entry key="387">Εισαγωγή</entry>
+  <entry key="388">Εξαγωγή σε XML Αρχείο. Το Αρχείο αυτό μπορεί να χρησιμοποιηθεί για:&lt;br/&gt; - Συνεισφορά στο Project &lt;br/&gt; - Εισαγωγή σε άλλο Σύστημα&lt;br/&gt; - Αντίγραφο Ασφαλείας &lt;br/&gt; - Εξατομίκευση&lt;br/&gt; - Εισαγωγή στο φάκελο Γλωσσών για επόμενη Εγκατάσταση</entry>
+  <entry key="389">Επιλογή Αρχείου Γλώσσας για Εισαγωγή. &lt;br/&gt;ΠΡΟΣΟΧΗ: Επιλέξτε τη σωστή Γλώσσα από τη λίστα! &lt;br/&gt;Όποιο και να είναι το όνομα του αρχείου&lt;br/&gt;θα εισαχθεί στην επιλεγμένη γλώσσα!</entry>
+  <entry key="390">Εισαγωγή - Επιλογή Αρχείου</entry>
+  <entry key="391">Αποθήκευση ως</entry>
+  <entry key="392">Όνομα:</entry>
+  <entry key="393">Σχόλιο:</entry>
+  <entry key="394">Αποθήκευση</entry>
+  <entry key="395">Μαγνητοσκοπήσεις</entry>
+  <entry key="396">Προβολέας Μαγνητοσκοπήσεων</entry>
+  <entry key="397">Μαγνητοσκοπήσεις Δημοσίων και Ιδιωτικών Δωματίων.</entry>
+  <entry key="398">Χρήστες :</entry>
+  <entry key="399">Συνδεδεμένοι:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="402">Ανανέωση</entry>
+  <entry key="403">Αυτό το Δωμάτιο είναι πλήρες! Δοκιμάστε ξανά σε μερικά λεπτά.</entry>
+  <entry key="404">Επιλέξτε ένα Δωμάτιο για να δείτε Λεπτομέρειες.</entry>
+  <entry key="405">Συνομιλήστε με τους Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="406">Δωμάτιο:</entry>
+  <entry key="407">Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="408">Από:</entry>
+  <entry key="409">Αναπαραγωγή Μαγνητοσκόπησης</entry>
+  <entry key="410">Μήκος:</entry>
+  <entry key="411">Ημερομηνία:</entry>
+  <entry key="412">Λειτουργία Μαγνητοσκόπησης! Δεν μπορείτε να μεταβάλλετε καμία Τιμή. Πρόκειται για ένα μαγνητοσκοπημένο Αρχείο!</entry>
+  <entry key="413">Αναπαραγωγή</entry>
+  <entry key="414">Αναπαραγωγή / Παύση</entry>
+  <entry key="415">Έναρξη Μαγνητοσκόπησης</entry>
+  <entry key="416">Λήξη Μαγνητοσκόπησης</entry>
+  <entry key="417">Μαγνητοσκόπηση:</entry>
+  <entry key="418">Κάποιος άλλος μαγνητοσκοπεί ήδη αυτή τη στιγμή:</entry>
+  <entry key="419">Μαγνητοσκόπηση! Από τον Χρήστη:</entry>
+  <entry key="420">Ακύρωση</entry>
+  <entry key="421">Ακύρωση Μαγνητοσκόπησης χωρίς Αποθήκευση!</entry>
+  <entry key="422">Συνέχεια</entry>
+  <entry key="423">Κλείσιμο Παραθύρου και Συνέχεια Μαγνητοσκόπησης.</entry>
+  <entry key="424">Αλλαγή Χρώματος Γραμμής</entry>
+  <entry key="425">Επιλογή Χρώματος</entry>
+  <entry key="426">Απενεργοποίηση / Ενεργοποίηση Χρώματος Γραμμής</entry>
+  <entry key="427">Αλλαγή Χρώματος Γεμίσματος</entry>
+  <entry key="428">Απενεργοποίηση / Ενεργοποίηση Χρώματος Γεμίσματος</entry>
+  <entry key="429">Αλλαγή Πλάτους Γραμμής</entry>
+  <entry key="430">Κλείσιμο</entry>
+  <entry key="431">Αλλαγή Μεγέθους Γραμματοσειράς</entry>
+  <entry key="432">Διαγραφή Μαγνητοσκόπησης</entry>
+  <entry key="433">Επισκέπτης</entry>
+  <entry key="434">Από:</entry>
+  <entry key="435">Όνομα</entry>
+  <entry key="436">Δωμάτιο</entry>
+  <entry key="437">Ημερομηνία</entry>
+  <entry key="438">Ακύρωση</entry>
+  <entry key="439">Έναρξη</entry>
+  <entry key="440">Όνομα</entry>
+  <entry key="441">Ημερομηνία</entry>
+  <entry key="442">Διαγραφή Chatlog από το Διακομιστή</entry>
+  <entry key="443">Συνομιλία</entry>
+  <entry key="444">Aποστολή Μηνύματος</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Επιλογή Δημοσιευμένων Συσκευών</entry>
+  <entry key="448">Ήχος και Βίντεο</entry>
+  <entry key="449">Ήχος μόνο</entry>
+  <entry key="450">Βίντεο μόνο</entry>
+  <entry key="451">Χωρίς Ηχό/Βίντεο (Στατική Εικόνα)</entry>
+  <entry key="452">Δεν θα δημοσιεύεται ούτε Ήχος ούτε Βίντεο από το PC σας. Αντί αυτού θα εμφανίζεται η Εικόνα του Προφίλ σας. Επιλέξτε αυτήν τη ρύθμιση αν έχετε προβλήματα με το bandwidth σας ή μια πολύ αργή Σύνδεση Internet.</entry>
+  <entry key="453">ΔΕΥ</entry>
+  <entry key="454">ΤΡΙ</entry>
+  <entry key="455">ΤΕΤ</entry>
+  <entry key="456">ΠΕΜ</entry>
+  <entry key="457">ΠΑΡ</entry>
+  <entry key="458">ΣΑΒ</entry>
+  <entry key="459">ΚΥΡ</entry>
+  <entry key="460">Δευτέρα</entry>
+  <entry key="461">Τρίτη</entry>
+  <entry key="462">Τετάρτη</entry>
+  <entry key="463">Πέμπτη</entry>
+  <entry key="464">Παρασκευή</entry>
+  <entry key="465">Σάββατο</entry>
+  <entry key="466">Κυριακή</entry>
+  <entry key="467">ΗΕ</entry>
+  <entry key="468">Ημερολογιακή Εβδομάδα</entry>
+  <entry key="469">Ιανουάριος</entry>
+  <entry key="470">Φεβρουάριος</entry>
+  <entry key="471">Μάρτιος</entry>
+  <entry key="472">Απρίλιος</entry>
+  <entry key="473">Μάιος</entry>
+  <entry key="474">Ιούνιος</entry>
+  <entry key="475">Ιούλιος</entry>
+  <entry key="476">Αύγουστος</entry>
+  <entry key="477">Σεπτέμβριος</entry>
+  <entry key="478">Οκτώβριος</entry>
+  <entry key="479">Νοέμβριος</entry>
+  <entry key="480">Δεκέμβριος</entry>
+  <entry key="481">Ημερολόγιο</entry>
+  <entry key="482">Συμμετέχοντες</entry>
+  <entry key="483">Εμφάνιση Ρυθμίσεων Διάταξης</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Πλάτος | Ύψος</entry>
+  <entry key="486">Χώρος Βίντεο</entry>
+  <entry key="487">Χώρος Συντονισμού</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Χώρος Πίνακα</entry>
+  <entry key="490">Ενεργοποιημένος</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Πλάτος | Ύψος</entry>
+  <entry key="493">Χώρος Αρχείων, Συνομιλιών και Συμμετεχόντων</entry>
+  <entry key="494">Ενεργοποιημένος</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Πλάτος | Ύψος</entry>
+  <entry key="497">Ο Συντονιστής εγκατέλειψε το Δωμάτιο. Κανείς δεν παρουσιάζει αυτήν τη στιγμή. Μπορείτε να κάνετε αίτηση για Συντονισμό ή να περιμένετε.</entry>
+  <entry key="498">Δεν υπάρχει Συντονιστής σε αυτό το Δωμάτιο, αλλά υπάρχουν κάποιοι Συμμετέχοντες. Πρέπει να κάνετε αίτηση για Συντονισμό ή να περιμένετε.</entry>
+  <entry key="499">{0} - Ανάδραση</entry>
+  <entry key="500">{0} - Πρόσκληση</entry>
+  <entry key="501">Μήνυμα από το Χρήστη:</entry>
+  <entry key="502">Μήνυμα:</entry>
+  <entry key="503">Κάντε κλικ σε αυτόν το Σύνδεσμο για να συμμετάσχετε στις Συναντήσεις:</entry>
+  <entry key="504">Κάντε κλικ εδώ για να μπείτε σε κάποιο Δωμάτιο.</entry>
+  <entry key="505">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="506">Εγγραφή στο {0}</entry>
+  <entry key="507">Τα Στοιχεία Σας:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Κωδικός:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">{0} - Ομάδα</entry>
+  <entry key="512">{0} - Εγγραφή Μέλους</entry>
+  <entry key="513">{0} - Αλλαγή Κωδικού</entry>
+  <entry key="514">Κάντε κλικ σε αυτόν το Σύνδεσμο για να εισάγετε έναν νέο Κωδικό:</entry>
+  <entry key="515">Κάντε κλικ εδώ για να εισάγετε έναν νέο Κωδικό.</entry>
+  <entry key="516">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="517">{0} - Αλλαγή Κωδικού</entry>
+  <entry key="518">Παρακαλούμε εισάγετε μια έγκυρη Ημερομηνία, για παράδειγμα: 24.12.2001 (ΗΗ.ΜΜ.ΕΕΕΕ)</entry>
+  <entry key="519">Παρακαλούμε εισάγετε ένα έγκυρο Email, για παράδειγμα: name@mail.com</entry>
+  <entry key="520">Παρακαλούμε εισάγετε έναν πραγματικό Aριθμό, για παράδειγμα: 1.00</entry>
+  <entry key="521">Παρακαλούμε εισάγετε έναν ακέραιο Aριθμό, για παράδειγμα: 100</entry>
+  <entry key="522">Παρακαλούμε εισάγετε έναν έγκυρο Aριθμό Tηλεφώνου, για παράδειγμα: ++30 210 5731230</entry>
+  <entry key="523">Παρακαλούμε εισάγετε μια έγκυρη Ώρα, για παράδειγμα: 12:23 (ΩΩ:ΛΛ)</entry>
+  <entry key="524">Προστατευμένο με Κωδικό</entry>
+  <entry key="525">Κωδικός</entry>
+  <entry key="526">Εγκυρότητα</entry>
+  <entry key="527">Απεριόριστη</entry>
+  <entry key="528">Περίοδος</entry>
+  <entry key="529">Μία Φορά</entry>
+  <entry key="530">Έγκυρο Από:</entry>
+  <entry key="531">Έγκυρο Έως:</entry>
+  <entry key="532">Πρόσκληση στο {0}</entry>
+  <entry key="533">Δεν υπάρχει διαθέσιμη Πρόσκληση για το συγκεκριμένο Κωδικό!</entry>
+  <entry key="534">Η Πρόσκληση έχει ήδη χρησιμοποιηθεί! Αυτός ο τύπος Πρόσκλησης δεν μπορεί να χρησιμοποιηθεί ξανά.</entry>
+  <entry key="535">Ο συγκεκριμένος Κωδικός Πρόσκλησης δεν είναι έγκυρος!</entry>
+  <entry key="536">Κωδικός:</entry>
+  <entry key="537">Έλεγχος Κωδικού</entry>
+  <entry key="538">Μη Έγκυρος Κωδικός!</entry>
+  <entry key="539">Ήχος/Βίντεο</entry>
+  <entry key="540">Συγχρονισμός Ήχου/Βίντεο</entry>
+  <entry key="541">Το login ήταν σωστό, αλλά η Σύνοδος που δοκιμάσατε δεν είναι ενεργή ή δεν είναι αποθηκευμένη στον Διακομιστή. Πρέπει να αποκτήσετε νέο Αριθμό Συνόδου και να δοκιμάσετε να συνδεθείτε ξανά.</entry>
+  <entry key="542">Ο Αριθμός Συνόδου δεν είναι ενεργός ή δεν έχει δικαιώματα Διαχείρισης. Η πύλη SOAP χρειάζεται έναν Χρήστη με Δικαιώματα Διαχείρισης για την ενσωμάτωση νέων Χρηστών.</entry>
+  <entry key="543">Η συγκεκριμένη Σύνοδος δεν έχει συνδεδεμένα Στοιχεία Απομακρυσμένου Χρήστη. Είτε δεν καλέσατε την πύλη SOAP πριν την πρόσβαση στην Εφαρμογή, είτε χρησιμοποιείτε λάθος Αριθμό Συνόδου.</entry>
+  <entry key="544">Η Συσκευή Εγγραφής είναι σε πειραματικό στάδιο προς το παρόν!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">Άξονας-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">Άξονας-y</entry>
+  <entry key="549">π</entry>
+  <entry key="550">Πλάτος</entry>
+  <entry key="551">υ</entry>
+  <entry key="552">Ύψος</entry>
+  <entry key="553">Αλλαγή Βαθμού Διαφάνειας</entry>
+  <entry key="554">Άνοιγμα Φυλλομετρητή</entry>
+  <entry key="555">Κλείσιμο Φυλλομετρητή</entry>
+  <entry key="556">Η Σύνδεση με το Διακομιστή χάθηκε. Πρέπει να φορτώσετε ξανά την Εφαρμογή ή/και να ελέγξετε το Δίκτυό σας.</entry>
+  <entry key="557">Δείκτης</entry>
+  <entry key="558">Συγχρονισμός</entry>
+  <entry key="559">Συγχρονισμός Χρηστών. Παρακαλούμε περιμένετε.</entry>
+  <entry key="560">&lt;u&gt;Αποθήκευση ως SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Αποθήκευση ως PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Αποθήκευση ως JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Αποθήκευση ως PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Αποθήκευση ως TIF&lt;/u&gt;</entry>
+  <entry key="565">Υπενθύμιση:</entry>
+  <entry key="566">Κατηγορία:</entry>
+  <entry key="567">Επανάληψη:</entry>
+  <entry key="568">Καμία</entry>
+  <entry key="569">Τοποθεσία:</entry>
+  <entry key="570">Έναρξη</entry>
+  <entry key="571">Λήξη</entry>
+  <entry key="572">Τίτλος:</entry>
+  <entry key="573">Σχόλιο:</entry>
+  <entry key="574">Προσκαλέστε Κόσμο</entry>
+  <entry key="575">Καθημερινά</entry>
+  <entry key="576">Κάθε Μήνα</entry>
+  <entry key="577">Κάθε Έτος</entry>
+  <entry key="578">Η Λήξη μιας Συνάντησης πρέπει να είναι μετά από την Έναρξη της Συνάντησης!</entry>
+  <entry key="579">Παρακαλούμε εισάγετε Τίτλο!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Ενεργοποιήστε αυτό για γλώσσες με διάταξη από τα δεξιά προς τα αριστερά.</entry>
+  <entry key="582">Αρχικό Ταμπλό</entry>
+  <entry key="583">Παρακολουθήστε μαγνητοφωνημένες Συναντήσεις ή Συμβάντα</entry>
+  <entry key="584">Συνάντηση - Συνδιάσκεψη με 4 (έως 16) Χρήστες&lt;br/&gt;Όλοι θα έχουν πρόσβαση σε Ήχο και Βίντεο.</entry>
+  <entry key="585">Συμβάν - Συνδιάσκεψη με έως και 200 συμμετέχοντες&lt;br/&gt;Μόνο ο Συντονιστής θα έχει Ήχο και Βίντεο.</entry>
+  <entry key="586">Δημιουργία Χρηστών, Δωματίων, Οργανισμών&lt;br/&gt; και Αλλαγή Διαμόρφωσης.</entry>
+  <entry key="587">Χρήστες Δωματίου</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">Δ</entry>
+  <entry key="591">Φόρτωση Εγγράφου. Παρακαλούμε περιμένετε μέχρι να συγχρονιστούν όλοι οι Πελάτες.</entry>
+  <entry key="592">Η Φόρτωση Ολοκληρώθηκε. Μετατροπή Εγγράφου ...</entry>
+  <entry key="593">Έναρξη Φόρτωσης</entry>
+  <entry key="594">Διάλογος Φόρτωσης και Εισαγωγής: Παρακαλούμε επιλέξτε ένα Αρχείο από το Δίσκο.</entry>
+  <entry key="595">Ακύρωση</entry>
+  <entry key="596">Επιλογή Αρχείου</entry>
+  <entry key="597">Συνδέσεις</entry>
+  <entry key="598">Τιμή</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Συνδεδεμένος Από</entry>
+  <entry key="602">Δωμάτιο / Πλαίσιο</entry>
+  <entry key="603">Αφαίρεση Χρήστη</entry>
+  <entry key="604">Αφαίρεση Χρήστη</entry>
+  <entry key="605">Θέλετε πραγματικά να βγάλετε αυτόν τον Πελάτη από τη Σύνδεση;&lt;br/&gt; Με αυτόν τον τρόπο ο Πελάτης αφαιρείται μόνο από το τρέχον Δωμάτιο και μπορεί να συνδεθεί ξανά.</entry>
+  <entry key="606">Η Σύνοδός σας έχει κλείσει από Διαχειριστή ή Συντονιστή.</entry>
+  <entry key="607">Τηλέφωνο</entry>
+  <entry key="608">Ο Χρήστης είναι ο Συντονιστής του συγκεκριμένου Δωματίου!</entry>
+  <entry key="609">Ο Χρήστης επιτρέπεται να σχεδιάσει πάνω στον Πίνακα.</entry>
+  <entry key="610">(Επαν)Εκκίνηση Ήχου/Βίντεο ή Αλλαγή Ρυθμίσεων Συσκευής</entry>
+  <entry key="611">Επιτρέψτε στο Χρήστη να σχεδιάσει πάνω στον Πίνακα</entry>
+  <entry key="612">Αφαιρέστε τη δυνατότητα σχεδίασης πάνω στον Πίνακα</entry>
+  <entry key="613">Χρήστες</entry>
+  <entry key="614">Αρχεία</entry>
+  <entry key="615">Πίνακας</entry>
+  <entry key="616">Συνομιλία</entry>
+  <entry key="617">Ο Λογαριασμός σας αντιστοιχεί σε πολλαπλούς Οργανισμούς. Παρακαλούμε επιλέξτε έναν από αυτούς για τη συγκεκριμένη Σύνοδο.</entry>
+  <entry key="618">Αυτό το Δωμάτιο είναι πλήρες. Παρακαλούμε δοκιμάστε ξανά αργότερα.</entry>
+  <entry key="619">Τύπος Δωματίου</entry>
+  <entry key="620">Δωμάτιο Συνάντησης</entry>
+  <entry key="621">Χρόνος Διακομιστή</entry>
+  <entry key="622">{0} - Υπενθύμιση</entry>
+  <entry key="623">Μήνυμα από τον Χρήστη:</entry>
+  <entry key="624">Μήνυμα:</entry>
+  <entry key="625">Κάντε κλικ σε αυτόν το Σύνδεσμο για να συμμετάσχετε στις Συναντήσεις:</entry>
+  <entry key="626">Κάντε κλικ εδώ για να εισέλθετε στο Δωμάτιο</entry>
+  <entry key="627">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="628">Εσωτερική Αναζήτηση</entry>
+  <entry key="629">Εξωτερική Προσθήκη</entry>
+  <entry key="630">Όνομα</entry>
+  <entry key="631">Επώνυμο</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Επιβεβαίωση Αποσύνδεσης</entry>
+  <entry key="634">Θέλετε σίγουρα να αποσυνδεθείτε;</entry>
+  <entry key="635">Ενέργειες</entry>
+  <entry key="636">Δωμάτιο Επιδείξεων</entry>
+  <entry key="637">Χρόνος Επίδειξης</entry>
+  <entry key="638">Χρονόμετρο Συνάντησης</entry>
+  <entry key="639">Αυτό το Δωμάτιο είναι ένα Δωμάτιο Επιδείξεων. Για να απενεργοποιήθεί αυτή η ειδοποίηση πρέπει να βρείτε ένα Ιδιωτικό Δωμάτιο Συναντήσεων για προσωπική χρήση ή να εγκαταστήσετε Διακομιστή της κυριότητάς σας. Αυτόματη Αποσύνδεση σε:</entry>
+  <entry key="640">Υπό Συντονισμό</entry>
+  <entry key="641">Παρακαλούμε περιμένετε μέχρι να εισέλθει στο Δωμάτιο Συντονιστής. ο Συντονιστής μπορεί να είναι κάποιος Δάσκαλος, Διαχειριστής ή ο δημιουργός του Δωματίου.</entry>
+  <entry key="642">Εντάξει</entry>
+  <entry key="643">Εισερχόμενη Διαμοίραση Οθόνης</entry>
+  <entry key="644">Υπάρχει μια νέα εισερχόμενη Διαμοίραση Οθόνης από το Χρήστη:</entry>
+  <entry key="645">Έναρξη Διαμοίρασης</entry>
+  <entry key="646">Προσθήκη Νέας Συνάντησης</entry>
+  <entry key="647">Δωμάτιο Συναντήσεων</entry>
+  <entry key="648">Δωμάτιο Συμβάντων</entry>
+  <entry key="649">Συντονισμός</entry>
+  <entry key="650">Συντονισμός Χρηστών</entry>
+  <entry key="651">Συντονισμός Δωματίων</entry>
+  <entry key="652">Σ</entry>
+  <entry key="653">Θα θέλατε να μετατρέψετε αυτόν το Χρήστη σε Συντονιστή του Οργανισμού;</entry>
+  <entry key="654">Παρακαλούμε επιλέξτε έναν Οργανισμό πριν προσπαθήσετε να προσθέσετε κάποιον Χρήστη σε αυτόν!</entry>
+  <entry key="655">Οργανισμός - Συντονιστής</entry>
+  <entry key="656">Θέλετε πραγματικά να διαγράψετε αυτόν το Χρήστη από τον Οργανισμό;</entry>
+  <entry key="657">Αυτός ο Χρήστης είναι Συντονιστής!</entry>
+  <entry key="658">Αυτός ο Χρήστης δεν είναι Συντονιστής.</entry>
+  <entry key="659">Θέλετε αυτός ο Χρήστης να μην είναι Συντονιστής του Οργανισμού;</entry>
+  <entry key="660">Προσθέστε ή διαγράψτε Χρήστες/Δωμάτια στον Οργανισμό σας.</entry>
+  <entry key="661">Θέλετε πραγματικά να διαγράψετε αυτήν την Εγγραφή;</entry>
+  <entry key="662">Θέλετε πραγματικά να διαγράψετε αυτόν το Χρήστη από τον Οργανισμό σας; Θα διαγραφεί μόνο η Σύνδεση μεταξύ του Χρήστη και του Οργανισμού. Για να διαγράψετε πραγματικά τον Χρήστη πρέπει να συνδεθείτε στον Πίνακα Διαχείρισης.</entry>
+  <entry key="663">Δεν μπορείτε να διαγράψετε το δικό σας Χρήστη!</entry>
+  <entry key="664">Αυτή η Μέθοδος χρειάζεται Λογαριασμό Διαχειριστή για να εκτελεστεί!</entry>
+  <entry key="665">Δεν υπάρχει Σύνοδος που να σχετίζεται με το συγκεκριμένο Κωδικό Αριθμό (ID).</entry>
+  <entry key="666">Πρόκειται για Λογαριασμό Διαχειριστή ή Συντονιστή! Η επεξεργασία τέτοιων Λογαριασμών είναι δυνατή μόνο από τον Πίνακα Διαχείρισης.</entry>
+  <entry key="667">Για την ολοκλήρωση της Εγγραφής σας παρακαλούμε κάντε κλικ στον παρακάτω Σύνδεσμο ή αντιγράψτε το URL στην μπάρα του Φυλλομετρητή σας.</entry>
+  <entry key="668">Κάντε κλικ για να επιβεβαιώσετε το Email σας.</entry>
+  <entry key="669">Δεν βρέθηκε Xρήστης για τη συγκεκριμένη τιμή Hash.</entry>
+  <entry key="670">Αυτός ο Xρήστης έχει ενεργοποιηθεί ήδη!</entry>
+  <entry key="671">Ο Λογαριασμός σας ενεργοποιήθηκε με επιτυχία!</entry>
+  <entry key="672">Συνδεθείτε Τώρα</entry>
+  <entry key="673">Ο Λογαριασμός σας δεν είναι ενεργοποιημένος! Χρησιμοποιείστε πρώτα το Σύνδεσμο που βρίσκεται στο Email που λάβατε κατά την διάρκεια της Εγγραφής σας.</entry>
+  <entry key="674">Εγγραφήκατε με επιτυχία. Ένα μήνυμα με Επαναληπτικό Κωδικό έχει σταλεί στο Email σας. Παρακαλούμε ελέγξτε το Ταχυδρομείο σας.</entry>
+  <entry key="675">Αφαίρεση Συντονιστικού Ρόλου από αυτόν το Χρήστη.</entry>
+  <entry key="676">Παραχώρηση Δικαιωμάτων Συντονισμού σε αυτόν το Χρήστη.</entry>
+  <entry key="677">Χρήστης</entry>
+  <entry key="678">Πρόσβαση στον Πίνακα</entry>
+  <entry key="679">Συντονιστής</entry>
+  <entry key="680">Συντονισμός: Επιλέξτε κάποιον Χρήστη από τη Λίστα για να του παραχωρήσετε το Συντονισμό και πρόσβαση σε Πίνακα ή Βίντεο.</entry>
+  <entry key="681">Αυτός ο Χρήστης είναι ήδη Συντονιστής, οπότε έχει αυτόματα Δικαιώματα Σχεδίασης.</entry>
+  <entry key="682">Πρόκειται για εσάς! Δεν μπορείτε να αφαιρέσετε δικαιώματα Συντονισμού από τον εαυτό σας.</entry>
+  <entry key="683">Επιτρέψτε σε αυτόν τον Χρήστη να Δημοσιεύσει τον Ήχο/Βίντεό του.</entry>
+  <entry key="684">Αφαίρεση Ήχου/Βίντεο του συγκεκριμένου Χρήστη.</entry>
+  <entry key="685">Θα ήθελα να αναλάβω τον Συντονισμό αυτού του Δωματίου.</entry>
+  <entry key="686">Θα ήθελα να σχεδιάσω πάνω στον Πίνακα.</entry>
+  <entry key="687">Θα ήθελα να μοιραστώ τον Ήχο/Βίντεό μου.</entry>
+  <entry key="688">Είσαστε ο Συντονιστής αυτού του Δωματίου.</entry>
+  <entry key="689">Μπορείτε να σχεδιάσετε πάνω στον Πίνακα.</entry>
+  <entry key="690">Μπορείτε να μοιραστείτε τον Ήχο/Βίντεό σας.</entry>
+  <entry key="691">Μήνυμα στο Συντονιστή</entry>
+  <entry key="692">Ο Χρήστης</entry>
+  <entry key="693">θα ήθελε να αναλάβει το Συντονισμό. Χρησιμοποιήστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να αναθέσετε ή να αφαιρέσετε το Συντονισμό.</entry>
+  <entry key="694">θα ήθελε να σχεδιάσει πάνω στον Πίνακα. Χρησιμοποιείστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να παραχωρήσετε ή να αφαιρέσετε δικαιώματα σχεδίασης πάνω στον Πίνακα.</entry>
+  <entry key="695">θα ήθελε να μοιραστεί τον Ήχο/Βίντεό του. Χρησιμοποιείστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να παραχωρήσετε ή να αφαιρέσετε το δικαίωμα οποιουδήποτε Χρήστη να μοιράζεται Ήχο/Βίντεο.</entry>
+  <entry key="696">Πρέπει να περιμένετε μέχρι να εισέλθει κάποιος Συντονιστής στο Δωμάτιο.</entry>
+  <entry key="697">Ακύρωση</entry>
+  <entry key="698">Αποθήκευση</entry>
+  <entry key="699">Ημέρα</entry>
+  <entry key="700">Μήνας</entry>
+  <entry key="701">Έτος</entry>
+  <entry key="702">Φόρτωση Αρχείου</entry>
+  <entry key="703">Προσθήκη Φακέλου</entry>
+  <entry key="704">Ανανέωση</entry>
+  <entry key="705">Σκουπίδια</entry>
+  <entry key="706">Τα Αρχεία Μου (Home Drive)</entry>
+  <entry key="707">Αρχεία Δωματίου (Public Drive)</entry>
+  <entry key="708">Προσθήκη Αρχείου</entry>
+  <entry key="709">Προσθήκη Φακέλου</entry>
+  <entry key="710">Διαγραφή Φακέλου</entry>
+  <entry key="711">Επεξεργασία Ονόματος</entry>
+  <entry key="712">Νέος Φάκελος</entry>
+  <entry key="713">Θέλετε σίγουρα να διαγράψετε το συγκεκριμένο Στοιχείο;</entry>
+  <entry key="714">Αναζήτηση</entry>
+  <entry key="715">Αναζήτηση</entry>
+  <entry key="716">Άνοιγμα Εγγράφου</entry>
+  <entry key="717">Εμφάνιση όλων των Αρχείων (Δενδρική Εικόνα)</entry>
+  <entry key="718">Κλείσιμο Εγγράφου</entry>
+  <entry key="719">Διαγραφή Αρχείου</entry>
+  <entry key="720">Δεν επιτρέπεται να σχεδιάσετε τίποτα πάνω στον Πίνακα. Πρέπει να γίνετε Συντονιστής ή τουλάχιστον να αποκτήσετε δικαιώματα Επεξεργασίας του Πίνακα. Μπορείτε να ζητήσετε από ένα Συντονιστή να σας παραχωρήσει τέτοια δικαιώματα.</entry>
+  <entry key="721">Ιδιότητες Εγγράφου</entry>
+  <entry key="722">Έναρξη Πελάτη (external)</entry>
+  <entry key="723">Έναρξη Πελάτη (HTTP)</entry>
+  <entry key="724">Κάποιος Χρήστης θέλει να μοιραστεί την Οθόνη του. Επιθυμείτε να την δείτε?</entry>
+  <entry key="725">Αυτήν τη στιγμή μοιράζεστε την Επιφάνεια Εργασίας σας. Για την διακοπή της Συνόδου Διαμοίρασης παρακαλούμε πατήστε το κουμπί Διακοπής στο Διαμοιραζόμενο Πελάτη.</entry>
+  <entry key="726">Σύνοδος Διαμοίρασης</entry>
+  <entry key="727">Ήδη μοιράζεστε την Επιφάνεια Εργασίας σας!</entry>
+  <entry key="728">Προβολή Επιφάνειας Εργασίας</entry>
+  <entry key="729">Έξοδος</entry>
+  <entry key="730">Διαμοιραστής Επιφάνειας Εργασίας</entry>
+  <entry key="731">Πατήστε "Έναρξη Διαμοίρασης" για να δημοσιοποιήσετε την Οθόνη σας.</entry>
+  <entry key="732">Έναρξη Διαμοίρασης</entry>
+  <entry key="733">Τερματισμός Διαμοίρασης</entry>
+  <entry key="734">Επιλογή Περιοχής Οθόνης:</entry>
+  <entry key="735">Μεταβολή Πλάτους</entry>
+  <entry key="736">Ο Διαμοιραστής τερμάτισε την συγκεκριμένη Σύνοδο!</entry>
+  <entry key="737">Μεταβολή Ύψους</entry>
+  <entry key="738">Αρχικό Σημείο-X</entry>
+  <entry key="739">Αρχικό Σημείο-Y</entry>
+  <entry key="740">Πλάτος:</entry>
+  <entry key="741">Ύψος:</entry>
+  <entry key="742">Η Σύνδεση έκλεισε από τον Διακομιστή!</entry>
+  <entry key="743">Ακύρωση</entry>
+  <entry key="744">Εξωτερική Έναρξη</entry>
+  <entry key="745">Αν κλείσετε πλήρως αυτήν την Σύνοδο δεν θα μπορείτε να επανεκκινήσετε την προβολή για την συγκεκριμένη Σύνοδο!</entry>
+  <entry key="746">Επιβεβαίωση Τερματισμού Συνόδου Προβολής</entry>
+  <entry key="747">Διαμοίραση Οθόνης</entry>
+  <entry key="748">Σύνοδος Εγγραφής</entry>
+  <entry key="749">Από Κοινού Φυλλομέτρηση</entry>
+  <entry key="750">Λυπούμαστε, ... Ο Firefox στα Windows δεν εμφανίζει καθαρά την Από Κοινού Φυλλομέτρηση (Co-Browsing). Παρακαλούμε χρησιμοποιήστε κάποιον άλλο Φυλομετρητή για να κάνετε χρήση του συγκεκριμένου χαρακτηριστικού.</entry>
+  <entry key="751">Προηγούμενο</entry>
+  <entry key="752">Επόμενο</entry>
+  <entry key="753">Επαναφόρτωση</entry>
+  <entry key="754">Αρχική Σελίδα</entry>
+  <entry key="755">Φόρτωση</entry>
+  <entry key="756">Προσθήκη του συγκεκριμένου Website ως Εξ'ορισμού Website στο Προφίλ σας.</entry>
+  <entry key="757">Δοκιμή Εγκατάστασης</entry>
+  <entry key="758">Ελέγξτε την εγκατάσταση του Μικροφώνου και της Κάμεράς σας πριν εισέλθετε σε κάποιο Δωμάτιο, μαγνητοσκοπώντας για κάποια δευτερόλεπτα.</entry>
+  <entry key="759">Να μην εμφανιστεί αυτός ο έλεγχος ξανά.</entry>
+  <entry key="760">Ακύρωση</entry>
+  <entry key="761">Συνδιάσκεψη</entry>
+  <entry key="762">Να μην ερωτηθώ ξανά.</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Μπορείτε να συνεχίσετε χωρίς ελέγχους αν δεν σχεδιάζετε να δημοσιοποιήσετε την φωνή ή την εικόνα σας. Οι Συμμετέχοντες χωρίς Ήχο ή Βίντεο μπορούν να κάνουν χρήση του Πίνακα, να μοιράζονται την Επιφάνεια Εργασίας τους ή να γράφουν μηνύματα Συνομιλιών.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Μέτρο Επιπέδου</entry>
+  <entry key="768">Έναρξη</entry>
+  <entry key="769">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="770">Έναρξη Συμβάντος</entry>
+  <entry key="771">Επιλογή Δωματίου</entry>
+  <entry key="772">Έλεγχος</entry>
+  <entry key="773">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="774">Διαδικασία Συνδιάσκεψης:</entry>
+  <entry key="775">Μαγνητοσκόπηση</entry>
+  <entry key="776">Να μην γίνεται Έλεγχος Ήχου/Βίντεο (Μαγνητοσκόπηση) πριν από την είσοδο σε Συνδιάσκεψη.</entry>
+  <entry key="777">Δημόσια Δωμάτια</entry>
+  <entry key="778">Στα Δημόσια Δωμάτια έχουν πρόσβαση όλοι οι Χρήστες.</entry>
+  <entry key="779">Ιδιωτικά Δωμάτια</entry>
+  <entry key="780">Στα Ιδιωτικά Δωμάτια έχουν πρόσβαση μόνο οι Χρήστες του ίδιου Οργανισμού.</entry>
+  <entry key="781">Τα Δωμάτιά Μου</entry>
+  <entry key="782">Τα Δωμάτια του συγκεκριμένου τμήματος δημιουργούνται για προσωπική χρήση μέσα από το Ημερολόγιο και διαθέτουν μια αρχική και μια τελική ημερομηνία. Μόνο έγκυρα Δωμάτια εμφανίζονται εδώ.</entry>
+  <entry key="783">Πρέπει να είσαστε Συντονιστής για να πραγματοποιήσετε την συγκεκριμένη ενέργεια.</entry>
+  <entry key="784">Αίτηση Συντονισμού</entry>
+  <entry key="785">Αίτηση Πρόσβασης στον Πίνακα</entry>
+  <entry key="786">Αίτηση Πρόσβασης σε Κάμερα/Μικρόφωνο</entry>
+  <entry key="787">Η συγκεκριμένη τιμή Hash Συνόδου έχει χρησιμοποιηθεί ήδη. Δεν μπορείτε να την χρησιμοποιήσετε ξανά!</entry>
+  <entry key="788">ΕΝΑΡΞΗ</entry>
+  <entry key="789">ΕΧΙΤ</entry>
+  <entry key="790">Θέλετε πραγματικά να εγκαταλείψετε την Συνδιάσκεψη; Καλό θα ήταν να καθαρίσετε τον Πίνακα και το Ιστορικό Συνομιλιών και να αφαιρέσετε Έγγραφα που πιθανώς έχουν φορτωθεί.</entry>
+  <entry key="791">Έξοδος από την Συνδιάσκεψη</entry>
+  <entry key="792">Δωμάτια</entry>
+  <entry key="793">Επιλέξτε Δωμάτιο για Συνάντηση</entry>
+  <entry key="794">Υπάρχει κάποιο μη αποθηκευμένο Συμβάν στο Ημερολόγιο. Παρακαλούμε είτε να το αποθηκεύσετε είτε να το αφαιρέσετε.</entry>
+  <entry key="795">Παρακαλούμε προσθέστε τουλάχιστον έναν Συμμετέχοντα στην Συνάντησή σας!</entry>
+  <entry key="796">Θέλετε πραγματικά να διαγράψετε αυτό το Συμβάν;</entry>
+  <entry key="797">Προειδοποίηση</entry>
+  <entry key="798">Προσθήκη Συμβάντος</entry>
+  <entry key="799">Μέρα</entry>
+  <entry key="800">Εβδομάδα</entry>
+  <entry key="801">Μήνας</entry>
+  <entry key="802">Περιγραφή</entry>
+  <entry key="803">Συμμετέχοντες</entry>
+  <entry key="804">{0}: Η Πλατφόρμα Σας για Web Συνδιασκέψεις. Μπορείτε να ακολουθήσετε τις Οδηγίες, να πατήσετε το κουμπί Έναρξης και να ξεκινήσετε αμέσως μια Συνδιάσκεψη ή να μετα-φερθείτε στο Ημερολόγιο και να προγραμματίσετε μια Συνδιάσκεψη για το μέλλον.</entry>
+  <entry key="805">Σχέδιο Συνάντησης</entry>
+  <entry key="806">Για να προγραμματίσετε μια Συνδιάσκεψη μπορείτε να προσθέσετε ένα νέο Συμβάν στο Ημερολόγιο. Για κάθε Συμβάν του Ημερολογίου δημιουργείται αυτόματα ένα Δωμάτιο Συνδιασκέψεων. Εσείς, μάζι με όλους τους Συμμετέχοντες στην Συνδιάσκεψη, θα λάβετε ένα mail με σύνδεσμο στο συγκεκριμένο Δωμάτιο.&lt;br/&gt;&lt;br/&gt;Μπορείτε να επιλέξετε μεταξύ διαφορετικών τύπων Δωματίων που έχουν διαφορετικές διατάξεις και διαφορετικά συστήματα Συντονισμού. Μπορείτε επίσης να επιλέξετε μεταξύ διαφορετικών τύπων Ειδοποίησης για το mail που θα σταλεί για κάθε Συμβάν του Ημερολογίου.</entry>
+  <entry key="807">Χρειάζεστε Βοήθεια;</entry>
+  <entry key="808">Περιορισμένη</entry>
+  <entry key="809">Αναζήτηση</entry>
+  <entry key="810">Προσθήκη</entry>
+  <entry key="811">Δεν έχει επιλεγεί Χρήστης! Παρακαλούμε επιλέξτε πρώτα ένα στοιχείο από τη λίστα και έπειτα πατήστε "Προσθήκη".</entry>
+  <entry key="812">Προσθήκη Συμμετέχοντα</entry>
+  <entry key="813">Αποθήκευση</entry>
+  <entry key="814">Διαγραφή</entry>
+  <entry key="815">Λεπτομέρειες Συμβάντος</entry>
+  <entry key="816">Εξ Oρισμού Συντονιστές</entry>
+  <entry key="817">Ανώτερος</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Όνομα</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Προσθήκη Νέου Εξ Oρισμού Συντονιστή</entry>
+  <entry key="822">Είναι Ανώτερος Συντονιστής</entry>
+  <entry key="823">Αν το Δωμάτιο είναι συντονιζόμενο, οι Χρήστες επιπέδου Συντονιστή ή Διαχειριστή γίνονται αυτόματα Συντονιστές όταν εισέλθουν στο Δωμάτιο. Αν θέλετε μόνο κάποιος συγκεκριμένος Χρήστης να γίνει Συντονιστής χρησιμοποιήστε την επιλογή Εξ Ορισμού Συντονιστή.</entry>
+  <entry key="824">Ένας Ανώτερος Συντονιστής είναι πάντα Συντονιστής όταν εισέρχεται σε κάποιο Δωμάτιο και κανείς δεν μπορεί να αφαιρέσει το Σήμα Συντονισμού από αυτόν.</entry>
+  <entry key="825">Εφαρμογή Ανώτερου Συντονισμού σε Χρήστη</entry>
+  <entry key="826">Αφαίρεση Ανώτερου Συντονισμού από Χρήστη</entry>
+  <entry key="827">Δ</entry>
+  <entry key="828">Με την προσθήκη ενός Οργανισμού σε ένα Δωμάτιο, μόνο οι Χρήστες που ανήκουν στον συγκεκριμένο Οργανισμό έχουν πρόσβαση στο συγκεκριμένο δωμάτιο (Αυτό ισχύει μόνο όταν η τιμή "Δημόσιο" είναι ίση με false!).</entry>
+  <entry key="829">Συντονισμός</entry>
+  <entry key="830">Περιορισμοί</entry>
+  <entry key="831">Οργανισμός</entry>
+  <entry key="832">Είστε σίγουρος;</entry>
+  <entry key="833">Θέλετε πραγματικά να διαγράψετε το συγκεκριμένο Στοιχείο; Πρέπει να πατήσετε το κουμπί αποθήκευσης για να αποθηκευτούν οι αλλαγές!</entry>
+  <entry key="834">Δεν έχει επιλεγεί κάποιος Χρήστης! Παρακαλούμε επιλέξτε πρώτα έναν Χρήστη και μετά κάντε προσθήκη.</entry>
+  <entry key="835">Προσθήκη Νέου Εξ Ορισμού Συντονιστή</entry>
+  <entry key="836">Επιθυμείτε να προσθέσετε το Σήμα Ανώτερου Συντονισμού σε αυτόν τον Χρήστη; Ένας Ανώτερος Συντονιστής δεν είναι μόνο Συντονιστής κάποιου Δωματίου. Επιπλέον, κανένας άλλος Συντονιστής δεν μπορεί να αφαιρέσει το Σήμα Συντονισμού από αυτόν. Πρέπει να αποθηκεύσετε το Αντικείμενο Δωματίου για την αποθήκευση των συγκεκριμένων ρυθμίσεων!</entry>
+  <entry key="837">Επιθυμείτε να αφαιρέσετε το Σήμα Ανώτερου Συντονισμού από αυτόν τον Χρήστη; Πρέπει να αποθηκεύσετε το Αντικείμενο Δωματίου για την αποθήκευση των συγκεκριμένων ρυθμίσεων!</entry>
+  <entry key="838">Αυτός ο Χρήστης είναι Ανώτερος Συντονιστής! Δεν μπορείτε να αφαιρέσετε το Σήμα Συντονισμού από έναν Ανώτερο Συντονιστή!</entry>
+  <entry key="839">Θέλετε πραγματικά να διαγράψετε το συγκεκριμένο Αρχείο/Φάκελο;</entry>
+  <entry key="840">Διαγραφή Αρχείου/Φακέλου;</entry>
+  <entry key="841">Δις.</entry>
+  <entry key="842">Δρ.</entry>
+  <entry key="843">Ιδιότητες</entry>
+  <entry key="844">Εμφάνιση θέσης ποντικιού στους θεατές</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml
new file mode 100644
index 0000000..a921e0d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -0,0 +1,1868 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferencia</entry>
+  <entry key="2">Reunión</entry>
+  <entry key="3">Eventos</entry>
+  <entry key="4">Ajustes</entry>
+  <entry key="5">Perfil</entry>
+  <entry key="6">Administración</entry>
+  <entry key="7">Detener</entry>
+  <entry key="8">Grabar</entry>
+  <entry key="9">No hay ningún archivo disponible</entry>
+  <entry key="10">Grabado por el profesor</entry>
+  <entry key="11">Usuarios conectados:</entry>
+  <entry key="12">Iniciar conferencia</entry>
+  <entry key="13">Mi nombre</entry>
+  <entry key="14">Videoconferencia</entry>
+  <entry key="15">Enviar un archivo</entry>
+  <entry key="16">Actualizar la lista</entry>
+  <entry key="17">Marcar como archivo principal</entry>
+  <entry key="18">Nueva encuesta</entry>
+  <entry key="19">Nueva encuesta para la conferencia</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipo de Encuesta:</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Información: cada usuario conectado recibe un mensaje con la nueva encuesta.</entry>
+  <entry key="24">Crear encuesta</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sí/No</entry>
+  <entry key="27">Valor numérico [1-10]</entry>
+  <entry key="28">Encuesta</entry>
+  <entry key="29">Se necesita ser moderador para crear una encuesta.</entry>
+  <entry key="30">Su voto ha sido registrado</entry>
+  <entry key="31">Ya ha respondido a la encuesta con anterioridad</entry>
+  <entry key="32">Votar</entry>
+  <entry key="33">Su respuesta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Desea saber:</entry>
+  <entry key="37">Resultados</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respuestas:</entry>
+  <entry key="41">No hay encuestas</entry>
+  <entry key="42">Votar</entry>
+  <entry key="43">Reunión (máx 4 puestos)</entry>
+  <entry key="44">Conferencia (máx 50 puestos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Otros puestos</entry>
+  <entry key="47">Ya fue seleccionado.</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">El moderador ha abandonado la reunión.</entry>
+  <entry key="50">Información del sistema</entry>
+  <entry key="51">Seleccionar dispositivo</entry>
+  <entry key="52">Seleccionar cámara:</entry>
+  <entry key="53">Seleccionar micrófono:</entry>
+  <entry key="54">Aceptar</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Necesita reconectarse</entry>
+  <entry key="57">Editar configuración</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Aceptar</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Borrar pizarra</entry>
+  <entry key="63">¿Desea limpiar la pizarra antes de añadir una nueva imagen?</entry>
+  <entry key="64">No volver a preguntar</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Editar configuración</entry>
+  <entry key="67">Requerir confirmación antes de limpiar la pizarra</entry>
+  <entry key="68">Información del usuario</entry>
+  <entry key="69">Limpiar la pizarra</entry>
+  <entry key="70">Deshacer</entry>
+  <entry key="71">Rehacer</entry>
+  <entry key="72">Seleccionar un objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Trazar una línea</entry>
+  <entry key="76">Subrayar</entry>
+  <entry key="77">Rectángulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Flecha</entry>
+  <entry key="80">Borrar el ítem escogido</entry>
+  <entry key="81">Solicitar ser moderador</entry>
+  <entry key="82">Solicitar</entry>
+  <entry key="83">Cancelar</entry>
+  <entry key="84">Tengo una pregunta</entry>
+  <entry key="85">Cerrar</entry>
+  <entry key="86">Itálica</entry>
+  <entry key="87">Negrita</entry>
+  <entry key="88">En espera...</entry>
+  <entry key="89">Un usuario solicita la moderación; puede concederle acceso sólo a la pizarra o cambiar por completo el rol de la moderación. Usuario:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Denegar</entry>
+  <entry key="92">Cancelar</entry>
+  <entry key="93">Enviando la solicitud a los siguientes usuarios</entry>
+  <entry key="94">Aceptado</entry>
+  <entry key="95">Rechazado</entry>
+  <entry key="96">Cambiar de moderador</entry>
+  <entry key="97">Usted no es moderador</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Lo sentimos, pero esta sala está llena. Inténtelo más tarde</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">Cerrado</entry>
+  <entry key="102">error en la introducción de datos</entry>
+  <entry key="103">el nombre de usuario debe contener al menos 4 caracteres</entry>
+  <entry key="104">la clave de usuario debe contener al menos 4 caracteres</entry>
+  <entry key="105">Este nombre de usuario ya existe</entry>
+  <entry key="106">Este email ya está registrado</entry>
+  <entry key="107">Error del sistema, por favor contacte con el administrador</entry>
+  <entry key="108">Entrar</entry>
+  <entry key="109">Usuario:</entry>
+  <entry key="110">Contraseña:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Entrar</entry>
+  <entry key="113">Registrarse</entry>
+  <entry key="114">Usuario:</entry>
+  <entry key="115">Contraseña:</entry>
+  <entry key="116">Contraseña (otra vez):</entry>
+  <entry key="117">Nombre:</entry>
+  <entry key="118">Apellidos:</entry>
+  <entry key="119">Correo electrónico:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrarse</entry>
+  <entry key="122">Cancelar</entry>
+  <entry key="123">¿No está registrado?</entry>
+  <entry key="124">Inicio</entry>
+  <entry key="125">Usuarios</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizaciones</entry>
+  <entry key="128">Salas de Conferencias</entry>
+  <entry key="129">Público</entry>
+  <entry key="130">Organización</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Inicio</entry>
+  <entry key="133">Contraseña</entry>
+  <entry key="134">Escribir de nuevo</entry>
+  <entry key="135">Nombre</entry>
+  <entry key="136">Apellidos</entry>
+  <entry key="137">Correo Electrónico</entry>
+  <entry key="138">Fecha nacimiento</entry>
+  <entry key="139">Dirección</entry>
+  <entry key="140">Código/Población</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Más información</entry>
+  <entry key="143">Datos de Usuario</entry>
+  <entry key="144">Guardar</entry>
+  <entry key="145">Guardar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Inicio</entry>
+  <entry key="148">Nombre</entry>
+  <entry key="149">Apellido(s)</entry>
+  <entry key="150">Mostrar siguiente</entry>
+  <entry key="151">Mostrar anterior</entry>
+  <entry key="152">Eliminar registro</entry>
+  <entry key="153">Cancelar</entry>
+  <entry key="154">Borrar</entry>
+  <entry key="155">Nuevo registro</entry>
+  <entry key="156">Actualizar registro</entry>
+  <entry key="157">Borrar registro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">desactivado</entry>
+  <entry key="160">activado</entry>
+  <entry key="161">Organizaciones</entry>
+  <entry key="162">Calendario</entry>
+  <entry key="163">Cerrar</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Nombre</entry>
+  <entry key="166">Usuario</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Administrador</entry>
+  <entry key="169">Nivel de usuario</entry>
+  <entry key="170">Organización</entry>
+  <entry key="171">nombre</entry>
+  <entry key="172">Añadir organización</entry>
+  <entry key="173">Añadir organización</entry>
+  <entry key="174">Cancelar</entry>
+  <entry key="175">Añadir</entry>
+  <entry key="176">Eliminar organización</entry>
+  <entry key="177">Usuario</entry>
+  <entry key="178">Añadir usuario</entry>
+  <entry key="179">Eliminar usuario</entry>
+  <entry key="180">Añadir usuario</entry>
+  <entry key="181">Buscar usuario</entry>
+  <entry key="182">Buscar</entry>
+  <entry key="183">Usuario</entry>
+  <entry key="184">Organización</entry>
+  <entry key="185">Entrar</entry>
+  <entry key="186">Salas</entry>
+  <entry key="187">Salas de Conferencia</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nombre</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organizaciones</entry>
+  <entry key="192">Salas de Conferencia</entry>
+  <entry key="193">Nombre</entry>
+  <entry key="194">Tipo</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentario</entry>
+  <entry key="197">Guardar y exportar</entry>
+  <entry key="198">cargar</entry>
+  <entry key="199">Guardar como</entry>
+  <entry key="200">Archivo</entry>
+  <entry key="201">archivo</entry>
+  <entry key="202">Cancelar</entry>
+  <entry key="203">Guardar</entry>
+  <entry key="204">Error</entry>
+  <entry key="205">Cargando</entry>
+  <entry key="206">Objetos cargados</entry>
+  <entry key="207">Sincronizando clientes, espere un momento.</entry>
+  <entry key="208">Cargando datos de imagen</entry>
+  <entry key="209">Sincronizando. Espere, por favor.</entry>
+  <entry key="210">Limpiar la pizarra</entry>
+  <entry key="211">limpiar la pizarra, toda la información de la pizarra se perderá</entry>
+  <entry key="212">Confirmar antes de cargar un archivo</entry>
+  <entry key="213">Enviar invitación</entry>
+  <entry key="214">Enviar invitación</entry>
+  <entry key="215">Tema</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Mensaje</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Datos de usuario</entry>
+  <entry key="222">Su nombre para esta conferencia</entry>
+  <entry key="223">Nombre (apodo)</entry>
+  <entry key="224">Nombre</entry>
+  <entry key="225">Apellido</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Idioma</entry>
+  <entry key="228">Entrar</entry>
+  <entry key="229">Cargando</entry>
+  <entry key="230">Cargando datos, espere un momento</entry>
+  <entry key="231">Contraseña errónea</entry>
+  <entry key="232">Por favor introduzca dos veces las misma contraseña con un mínimo de 4 caracteres</entry>
+  <entry key="233">Correo inválido</entry>
+  <entry key="234">Usted ha introducido una dirección no válida de correo electrónico</entry>
+  <entry key="235">El registro se ha completado con éxito</entry>
+  <entry key="236">Su cuenta ha sido creada, puede ingresar desde este momento</entry>
+  <entry key="237">No puede compartir su escritorio en este momento. Alguien más ya está compartiendo su escritorio.</entry>
+  <entry key="238">Compartición no permitida</entry>
+  <entry key="239">Compartir/grabar escritorio</entry>
+  <entry key="240">Problemas de conexión: Su ancho de banda es insuficiente y se perderá la información. Si el mensaje se repite con frecuencia solicite al moderador reducir la calidad de imagen y audio.</entry>
+  <entry key="241">Escritorio de:</entry>
+  <entry key="242">Dibujar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Archivos</entry>
+  <entry key="246">Miembros</entry>
+  <entry key="247">Descargar el documento original</entry>
+  <entry key="248">Descargar el documento en pdf</entry>
+  <entry key="249">Subir un archivo a la pizarra</entry>
+  <entry key="250">Configuración</entry>
+  <entry key="251">Arrastrar este objeto</entry>
+  <entry key="252">Ajustar el tamaño del objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir a la primera página</entry>
+  <entry key="256">Ir a la página anterior</entry>
+  <entry key="257">Ir a la página siguiente</entry>
+  <entry key="258">Ir a la última página</entry>
+  <entry key="259">Disminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuración</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clave</entry>
+  <entry key="266">Configuración</entry>
+  <entry key="267">Clave</entry>
+  <entry key="268">última actualización</entry>
+  <entry key="269">actualizado por</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">Valor</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuarios</entry>
+  <entry key="274">Eliminar usuario de la organización</entry>
+  <entry key="275">Eliminar</entry>
+  <entry key="276">Este usuario ya es miembro de la organización</entry>
+  <entry key="277">Noticias</entry>
+  <entry key="278">Enlaces rápidos</entry>
+  <entry key="279">Ir a la (Vídeo)Conferencia</entry>
+  <entry key="280">Ir al Auditorio</entry>
+  <entry key="281">Ayuda y Soporte Técnico</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Enviar "bug"</entry>
+  <entry key="285">más</entry>
+  <entry key="286">Web del Proyecto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de correo del Proyecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Recordar</entry>
+  <entry key="289">Contenido</entry>
+  <entry key="290">Mi página de inicio</entry>
+  <entry key="291">Reuniones programadas</entry>
+  <entry key="292">Eventos programados</entry>
+  <entry key="293">Reuniones públicas</entry>
+  <entry key="294">Reuniones privadas</entry>
+  <entry key="295">Eventos públicos</entry>
+  <entry key="296">Eventos privados</entry>
+  <entry key="297">Contenido público</entry>
+  <entry key="298">Contenido privado</entry>
+  <entry key="299">Contenido personal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderación</entry>
+  <entry key="302">Tengo una pregunta</entry>
+  <entry key="303">Encuestas</entry>
+  <entry key="304">Seleccione un archivo</entry>
+  <entry key="305">Configuración</entry>
+  <entry key="306">Cámara y micrófono</entry>
+  <entry key="307">Configuración de la pizarra</entry>
+  <entry key="308">Salir</entry>
+  <entry key="309">Regresar a las salas</entry>
+  <entry key="310">Salir</entry>
+  <entry key="311">¿Ha olvidado su contraseña?</entry>
+  <entry key="312">Resetear contraseña</entry>
+  <entry key="313">Por email</entry>
+  <entry key="314">Por inicio de sesión</entry>
+  <entry key="315">Su email</entry>
+  <entry key="316">Su inicio de sesión</entry>
+  <entry key="317">Enviar correo con enlace de restablecimiento</entry>
+  <entry key="318">No se ha encontrado esa dirección de correo. Asegúrese de introducir la misma dirección que utilizó al crear la cuenta</entry>
+  <entry key="319">Escriba o su correo o su nombre de usuario</entry>
+  <entry key="320">No hay ningún usuario con ese nombre</entry>
+  <entry key="321">Se le ha enviado un correo con un enlace especial. Si no aparece este correo revise la configuración de filtros de spam de su servidor y reenvée este correo nuevamente.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Mensaje</entry>
+  <entry key="324">No se encontró al usuario (método de generación de claves incorrecto).</entry>
+  <entry key="325">Generar contraseña</entry>
+  <entry key="326">Inicio</entry>
+  <entry key="327">cambiar contraseña</entry>
+  <entry key="328">nueva contraseña</entry>
+  <entry key="329">vuelva a escribir la contraseña</entry>
+  <entry key="330">Las contraseñas introducidas no son iguales.</entry>
+  <entry key="331">Escriba 4 ó más caracteres. Distingue mayúsculas de minúsculas</entry>
+  <entry key="332">La contraseña ha sido cambiada, ahora puede iniciar sesión.</entry>
+  <entry key="333">Aceptar</entry>
+  <entry key="334">Error desconocido. Envíe esta información al administrador del sistema.</entry>
+  <entry key="335">No se encontró al usuario</entry>
+  <entry key="336">Contraseña incorrecta</entry>
+  <entry key="337">Ha salido del sistema</entry>
+  <entry key="338">Registro desactivado.</entry>
+  <entry key="339">Correo incorrecto</entry>
+  <entry key="340">nombre de archivo duplicado, por favor seleccione otro</entry>
+  <entry key="341">el nombre del archivo es demasiado corto</entry>
+  <entry key="342">No se pudo guardar la dirección</entry>
+  <entry key="343">El usuario fue añadido, sin embargo deberá estar al menos en una organización para poder iniciar la sesión.</entry>
+  <entry key="344">Nueva grabación</entry>
+  <entry key="345">No se encontró un campo en este FieldId.</entry>
+  <entry key="346">No se encontró una etiqueta para este campo.</entry>
+  <entry key="347">Se necesita autorización del administrador</entry>
+  <entry key="348">Editor de idioma</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">ID de la etiqueta</entry>
+  <entry key="351">Nombre de la etiqueta</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valor de los campos</entry>
+  <entry key="354">Nombre</entry>
+  <entry key="355">Valor de la etiqueta</entry>
+  <entry key="356">ID de la etiqueta</entry>
+  <entry key="357">Ha eliminado la etiqueta pero no el campo. No se puede eliminar un campo ya que puede tener etiquetas en otros idiomas.</entry>
+  <entry key="358">ID de la etiqueta incorrecto. Su FieldLanguagesvalues_Id no se encontró en la base de datos.</entry>
+  <entry key="359">Usted no puede eliminar este campo, sólo las etiquetas. No hay una etiqueta cargada por el momento o no se encuentra seleccionada ninguna (puede que no exista en el idioma seleccionado).</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Necesita cerrar la sesión para ver los cambios.</entry>
+  <entry key="362">Añadir nuevo idioma</entry>
+  <entry key="363">eliminar idioma</entry>
+  <entry key="364">Añadir nuevo idioma</entry>
+  <entry key="365">Nombre</entry>
+  <entry key="366">añadir idioma</entry>
+  <entry key="367">Copia de seguridad</entry>
+  <entry key="368">ir al inicio</entry>
+  <entry key="369">anterior</entry>
+  <entry key="370">siguiente</entry>
+  <entry key="371">ir al final</entry>
+  <entry key="372">usuario habla (Haciendo clic aquí usted podrá dar audio exclusivo o silenciar el micrófono de los demás)</entry>
+  <entry key="373">encender o apagar sonido</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Su configuración</entry>
+  <entry key="376">Saludos,</entry>
+  <entry key="377">Editar perfil</entry>
+  <entry key="378">Nuevos mensajes:</entry>
+  <entry key="379">Subir imagen</entry>
+  <entry key="380">Datos de usuario - Exportar</entry>
+  <entry key="381">Deben existir todas las organizaciones previamente</entry>
+  <entry key="382">Iniciar la exportación</entry>
+  <entry key="383">Por organización</entry>
+  <entry key="384">Iniciar la exportación</entry>
+  <entry key="385">Datos de usuario - Importar</entry>
+  <entry key="386">Seleccione archivo xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Estos archivos pueden ser usados para: - Contribuir en el proyecto - Importarlos en otro sistema - Copia de Respaldo (Backup) - Personalización - Colocarlo en el directorio de idiomas para la próxima instalación.</entry>
+  <entry key="389">Seleccione un archivo de idioma que se importará. Configure correctamente el idioma en el menú desplegable (no importa el nombre que tenga el archivo ya que será importado de todos los modos).</entry>
+  <entry key="390">importar - seleccionar archivo</entry>
+  <entry key="391">Guardar como...</entry>
+  <entry key="392">Nombre:</entry>
+  <entry key="393">Comentario:</entry>
+  <entry key="394">guardar</entry>
+  <entry key="395">Grabaciones</entry>
+  <entry key="396">Visor de grabaciones</entry>
+  <entry key="397">Grabaciones de salas públicas y privadas</entry>
+  <entry key="398">Usuarios:</entry>
+  <entry key="399">Unido:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuarios en la sala:</entry>
+  <entry key="402">actualizar</entry>
+  <entry key="403">La sala esta llena. Por favor, inténtelo más tarde.</entry>
+  <entry key="404">Pulse sobre una sala para ver los detalles</entry>
+  <entry key="405">Conversar con los usuarios de esta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuarios en esta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproducir grabación</entry>
+  <entry key="410">Duración:</entry>
+  <entry key="411">Fecha:</entry>
+  <entry key="412">Modo de grabación: no puede cambiar ningún valor ya que se trata de un archivo grabado.</entry>
+  <entry key="413">Reproducir esta grabación</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Iniciar grabación</entry>
+  <entry key="416">Detener grabación</entry>
+  <entry key="417">Grabación:</entry>
+  <entry key="418">Actualmente alguien se encuentra grabando:</entry>
+  <entry key="419">Grabando por el usuario:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">La grabación será cancelada y no se guardará.</entry>
+  <entry key="422">reanudar</entry>
+  <entry key="423">Cerrar ventana y reanudar grabación</entry>
+  <entry key="424">Cambiar el color de línea</entry>
+  <entry key="425">Seleccionar color</entry>
+  <entry key="426">Deshabilitar / Habilitar color de línea</entry>
+  <entry key="427">Cambiar color de relleno</entry>
+  <entry key="428">Deshabilitar / Habilitar color de relleno</entry>
+  <entry key="429">Cambiar grosor de línea</entry>
+  <entry key="430">Cerrar</entry>
+  <entry key="431">cambiar tamaño de letra</entry>
+  <entry key="432">Eliminar grabación</entry>
+  <entry key="433">Invitado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nombre</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Fecha</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nombre</entry>
+  <entry key="441">Fecha</entry>
+  <entry key="442">Eliminar registro (log) de chat en el servidor</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">enviar mensaje</entry>
+  <entry key="445">Emoticones</entry>
+  <entry key="446">Emoticones</entry>
+  <entry key="447">Seleccionar dispositivos</entry>
+  <entry key="448">Audio y vídeo</entry>
+  <entry key="449">Sólo audio</entry>
+  <entry key="450">Sólo vídeo</entry>
+  <entry key="451">Sin audio/vídeo (Imagen fija)</entry>
+  <entry key="452">No se transmitirá audio/vídeo desde su equipo. En su lugar se mostrará la imagen de su perfil. Seleccione esta configuración si tiene problemas con el ancho de banda de internet.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">MI</entry>
+  <entry key="456">JU</entry>
+  <entry key="457">VI</entry>
+  <entry key="458">SÁ</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lunes</entry>
+  <entry key="461">Martes</entry>
+  <entry key="462">Miércoles</entry>
+  <entry key="463">Jueves</entry>
+  <entry key="464">Viernes</entry>
+  <entry key="465">Sábado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">S#</entry>
+  <entry key="468">Número de semana de calendario</entry>
+  <entry key="469">Enero</entry>
+  <entry key="470">Febrero</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Mayo</entry>
+  <entry key="474">Junio</entry>
+  <entry key="475">Julio</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Septiembre</entry>
+  <entry key="478">Octubre</entry>
+  <entry key="479">Noviembre</entry>
+  <entry key="480">Diciembre</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar la configuración</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ancho | Alto</entry>
+  <entry key="486">Contenedor de vídeo</entry>
+  <entry key="487">Contenedor de moderación</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contenedor de pizarra</entry>
+  <entry key="490">Activado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ancho | Alto</entry>
+  <entry key="493">Contenedor de archivos, chat, participantes</entry>
+  <entry key="494">Activado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ancho | Alto</entry>
+  <entry key="497">El moderador se ha retirado por lo que nadie está realizando una presentación en estos momentos. Puede solicitar la moderación o esperar.</entry>
+  <entry key="498">No hay moderador en esta sala, pero sí participantes. Puede solicitar la moderación o esperar.</entry>
+  <entry key="499">Comentario de {0}</entry>
+  <entry key="500">{0} - Invitación</entry>
+  <entry key="501">Mensaje del usuario:</entry>
+  <entry key="502">Mensaje:</entry>
+  <entry key="503">Pulse en este enlace para poder participar en la conferencia:</entry>
+  <entry key="504">Pulse aquí para entrar a la sala</entry>
+  <entry key="505">Si tiene problemas con el enlace, le sugerimos que copie y pegue el siguiente texto en su navegador:</entry>
+  <entry key="506">Registro {0}</entry>
+  <entry key="507">Sus datos de usuario:</entry>
+  <entry key="508">Inicio:</entry>
+  <entry key="509">Contraseña:</entry>
+  <entry key="510">Correo:</entry>
+  <entry key="511">{0} - Equipo</entry>
+  <entry key="512">{0} - Registro</entry>
+  <entry key="513">{0} - Resetear contraseña</entry>
+  <entry key="514">Pulse en el siguiente enlace para solicitar una nueva contraseña:</entry>
+  <entry key="515">Pulse aquí para introducir una nueva contraseña</entry>
+  <entry key="516">Si tiene problemas con el enlace, le sugerimos que copie y pegue el siguiente texto en su navegador:</entry>
+  <entry key="517">{0} - Nueva Contraseña</entry>
+  <entry key="518">Por favor, introduzca una fecha válida con el formato dd.mm.yyyy Ejemplo: 24.12.2008</entry>
+  <entry key="519">Por favor, introduzca una dirección de correo válida</entry>
+  <entry key="520">Por favor, introduzca un número decimal. Ejemplo: 1.00 (use punto y no la coma)</entry>
+  <entry key="521">Por favor, introduzca un número entero</entry>
+  <entry key="522">Por favor, introduzca un número de teléfono válido. Ejemplo: +593 947 225 200</entry>
+  <entry key="523">Por favor introduzca una hora válida en el formato hh:mm. Ejemplo: 12:23</entry>
+  <entry key="524">Contraseña protegida</entry>
+  <entry key="525">Contraseña</entry>
+  <entry key="526">Período de validez</entry>
+  <entry key="527">Sin límite</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Una vez</entry>
+  <entry key="530">Válido desde:</entry>
+  <entry key="531">Válido hasta:</entry>
+  <entry key="532">Invitación a {0}</entry>
+  <entry key="533">No existe una invitación disponible con este código.</entry>
+  <entry key="534">Esta invitación ya fue usada y no puede volverse a utilizar.</entry>
+  <entry key="535">El código de invitación no es válido.</entry>
+  <entry key="536">Contraseña:</entry>
+  <entry key="537">Verificar contraseña</entry>
+  <entry key="538">Contraseña incorrecta</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar audio/vídeo</entry>
+  <entry key="541">El login es correcto, pero la sesión en la que intenta entrar no está activa o no fue guardada en el servidor. Tiene que iniciar una nueva sesión.</entry>
+  <entry key="542">El ID de la sesión no está iniciado o no tiene permisos de administración. La pasarela SOAP necesita un usuario con permisos de administración para añadir nuevos usuarios.</entry>
+  <entry key="543">Esta sesión no tiene datos del usuario remoto conectado. Quizás no llamó a la pasarela SOAP antes de acceder a la aplicación o está utilizando un ID de sesión incorrecto</entry>
+  <entry key="544">El grabador actualmente está en fase beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eje-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eje-y</entry>
+  <entry key="549">a</entry>
+  <entry key="550">anchura</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Cambiar transparencia</entry>
+  <entry key="554">Abrir el navegador</entry>
+  <entry key="555">Cerrar el navegador</entry>
+  <entry key="556">Se ha perdido la conexión con el servidor. Necesita recargar la aplicación y/o comprobar su Red.</entry>
+  <entry key="557">Puntero</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando usuarios. Por favor, espere.</entry>
+  <entry key="560">&lt;u&gt;Descargar como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descargar como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descargar como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descargar como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descargar como TIF&lt;/u&gt;</entry>
+  <entry key="565">Recuerde:</entry>
+  <entry key="566">Categoría:</entry>
+  <entry key="567">Repetición:</entry>
+  <entry key="568">ninguno</entry>
+  <entry key="569">Localización:</entry>
+  <entry key="570">Inicio</entry>
+  <entry key="571">Final</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentario:</entry>
+  <entry key="574">Invitar a personas</entry>
+  <entry key="575">Diario</entry>
+  <entry key="576">Mensual</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">La fecha final va después de la fecha de inicio</entry>
+  <entry key="579">Por favor, ponga un título</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active esta opción si la escritura de su idioma va de derecha a izquierda</entry>
+  <entry key="582">Panel de control</entry>
+  <entry key="583">Ver eventos o encuentros grabados</entry>
+  <entry key="584">Videoconferencia - Reúnase con 4 ó más (hasta 16) usuarios&lt;br/&gt;todos tendrán acceso de audio y vídeo.</entry>
+  <entry key="585">Auditorio - Reúnase con hasta 200 participantes&lt;br/&gt;sólo el moderador tendrá audio y/o vídeo</entry>
+  <entry key="586">Crear usuarios, salas, organizaciones&lt;br/&gt; + cambios en la configuración</entry>
+  <entry key="587">Usuarios en la sala</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inicio</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Cargando documento. Aguarde hasta que todos los clientes estén sincronizados.</entry>
+  <entry key="592">Subida completa. Convirtiendo documento...</entry>
+  <entry key="593">Iniciar Subida</entry>
+  <entry key="594">Diálogo de subir e importar. Por favor, seleccione un archivo de su disco.</entry>
+  <entry key="595">Cancelar</entry>
+  <entry key="596">Seleccionar archivo</entry>
+  <entry key="597">Conexiones</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">ID de flujo</entry>
+  <entry key="600">Inicio</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Ámbito</entry>
+  <entry key="603">Expulsar al usuario</entry>
+  <entry key="604">Expulsar</entry>
+  <entry key="605">¿Está seguro de querer expulsar a este cliente de la conexión?&lt;br/&gt; El cliente será expulsado de la sala, pero podrá volver a autenticarse de nuevo.</entry>
+  <entry key="606">Su sesión ha sido cerrada por el administrador o el moderador.</entry>
+  <entry key="607">Teléfono</entry>
+  <entry key="608">El usuario es el moderador de esta sala</entry>
+  <entry key="609">El usuario tiene permisos para dibujar en la pizarra</entry>
+  <entry key="610">(Re) Iniciar audio/vídeo o cambiar la configuración de dispositivos</entry>
+  <entry key="611">Permitir a este usuario dibujar en la pizarra</entry>
+  <entry key="612">Quitar permisos para dibujar en la pizarra</entry>
+  <entry key="613">Usuarios</entry>
+  <entry key="614">Archivos</entry>
+  <entry key="615">Pizarra</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Su cuenta está asignada a varias organizaciones. Seleccione aquella con la que quiera entrar en esta sesión.</entry>
+  <entry key="618">Esta sala está completa. Inténtelo más tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Sala para citarse</entry>
+  <entry key="621">Hora del servidor</entry>
+  <entry key="622">{0} - Recordatorio</entry>
+  <entry key="623">Mensaje del usuario:</entry>
+  <entry key="624">Mensaje:</entry>
+  <entry key="625">Pulse en el enlace para participar en la (Vídeo)Conferencia:</entry>
+  <entry key="626">Pulse aquí para entrar en la sala</entry>
+  <entry key="627">Si tiene problemas, copie y pegue este enlace en su navegador:</entry>
+  <entry key="628">búsqueda interna</entry>
+  <entry key="629">Añadir externos</entry>
+  <entry key="630">Nombre</entry>
+  <entry key="631">Apellidos</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar la salida</entry>
+  <entry key="634">¿Está seguro de que desea salir?</entry>
+  <entry key="635">Acciones</entry>
+  <entry key="636">Sala de demostración</entry>
+  <entry key="637">Hora de la demostración</entry>
+  <entry key="638">Horario del encuentro</entry>
+  <entry key="639">Esta es una sala de demostración. Para desactivar este aviso, debería conseguir una sala privada para uso propio o bien configurar su propio Servidor. Será desconectado automáticamente en:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, espere hasta que el moderador entre en la sala. El moderador puede ser un profesor, el administrador o el creador de esta sala.</entry>
+  <entry key="642">Aceptar</entry>
+  <entry key="643">Recibiendo el escritorio compartido</entry>
+  <entry key="644">Hay una nueva recepción de escritorio compartido del usuario:</entry>
+  <entry key="645">Comenzar a compartir</entry>
+  <entry key="646">Añadir un nuevo encuentro</entry>
+  <entry key="647">Sala de encuentros</entry>
+  <entry key="648">Sala de eventos</entry>
+  <entry key="649">Moderación</entry>
+  <entry key="650">Moderar usuarios</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">¿Desea convertir a este usuario en moderador de esa organización?</entry>
+  <entry key="654">Por favor, seleccione una organización antes de intentar incluir a un usuario en la misma.</entry>
+  <entry key="655">Organización - Moderador</entry>
+  <entry key="656">¿Realmente desea borrar a este usuario de la Organización?</entry>
+  <entry key="657">Este usuario es moderador</entry>
+  <entry key="658">Este usuario no es moderador</entry>
+  <entry key="659">¿Desea que este usuario deje de ser moderador de esta organización?</entry>
+  <entry key="660">Añadir o borrar usuarios y/o salas en su organización</entry>
+  <entry key="661">¿Realmente quiere borrar este registro?</entry>
+  <entry key="662">¿Realmente quiere borrar a este usuario de su organización? Sólo se borrará la conexión entre el usuario y su organización. En realidad, para borrar al usuario debe ingresar al Panel de administración.</entry>
+  <entry key="663">¡Vd no puede borrarse a sí mismo!</entry>
+  <entry key="664">¡Para usar este método necesita de una cuenta de administrador!</entry>
+  <entry key="665">No hay ninguna sesión asociada a este ID.</entry>
+  <entry key="666">Esta es una cuenta de administrador o de moderador. Sólo puede editar esta cuenta utilizando el Panel de administración.</entry>
+  <entry key="667">Para completar su registro, haga el favor de pulsar en el siguiente enlace. Otra opción es copiar la URL en la barra de su navegador.</entry>
+  <entry key="668">Pulse para verificar su correo</entry>
+  <entry key="669">No se ha encontrado un usuario para ese algoritmo Hash.</entry>
+  <entry key="670">¡Este usuario ya está activado!</entry>
+  <entry key="671">¡Ha activado su cuenta con éxito!</entry>
+  <entry key="672">Ingrese ahora</entry>
+  <entry key="673">Su cuenta no está activada. Utilice en primer lugar el enlace que hay en correo recibido al finalizar el proceso de registro.</entry>
+  <entry key="674">Se ha registrado con éxito. Le hemos enviado un correo con un código de verificación. Por favor, revise su cuenta de correo.</entry>
+  <entry key="675">Quitar el rol de moderador a este usuario</entry>
+  <entry key="676">Dar permisos de moderación a este usuario</entry>
+  <entry key="677">Usuario</entry>
+  <entry key="678">Acceso a la pizarra</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderación: Por favor, seleccione cualquier usuario de la lista para darle acceso a la pizarra, moderación o vídeo.</entry>
+  <entry key="681">Este usuario ya es moderador, así que automáticamente tiene permisos para dibujar.</entry>
+  <entry key="682">¡Este es Vd! No puede quitarse los permisos de moderación a sí mismo.</entry>
+  <entry key="683">Permitir a este usuario publicar su audio/vídeo</entry>
+  <entry key="684">Borrar el audio/vídeo de este usuario</entry>
+  <entry key="685">Desearía ser moderador de esta sala</entry>
+  <entry key="686">Desearía utilizar la pizarra</entry>
+  <entry key="687">Desearía compartir mi audio/vídeo</entry>
+  <entry key="688">Usted es el moderador de esta sala</entry>
+  <entry key="689">Tiene permisos para dibujar en la pizarra</entry>
+  <entry key="690">Tiene permiso para compartir su audio/video</entry>
+  <entry key="691">Mensaje al moderador</entry>
+  <entry key="692">El Usuario</entry>
+  <entry key="693">Desearía ser moderador. Use los iconos de estado próximos al usuario en la Lista de Usuarios para agregar o remover el permiso de moderación.</entry>
+  <entry key="694">desearía utilizar la pizarra. Utilice los iconos que hay junto al nombre del usuario (en la Lista de Usuarios) para agregar o quitar los permisos correspondientes.</entry>
+  <entry key="695">desearía compartir su audio/vídeo. Use los iconos que hay junto al nombre de usuario (en la Lista de Usuarios) para agregar o quitar los permisos para compartir audio/vídeo.</entry>
+  <entry key="696">Debe esperar hasta que un moderador ingrese a la sala.</entry>
+  <entry key="697">Cancelar</entry>
+  <entry key="698">Guardar</entry>
+  <entry key="699">Día</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Año</entry>
+  <entry key="702">Subir archivo</entry>
+  <entry key="703">Añadir carpeta</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Papelera</entry>
+  <entry key="706">Mis archivos (Dispositivo personal)</entry>
+  <entry key="707">Archivos de la sala (Dispositivo público)</entry>
+  <entry key="708">Agregar archivo</entry>
+  <entry key="709">Agregar carpeta</entry>
+  <entry key="710">Borrar carpeta</entry>
+  <entry key="711">Editar nombre</entry>
+  <entry key="712">Nueva carpeta</entry>
+  <entry key="713">¿Está seguro de que quiere borrar este ítem?</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Abrir documento</entry>
+  <entry key="717">Mostrar todos los archivos (Vista de árbol)</entry>
+  <entry key="718">Cerrar documento</entry>
+  <entry key="719">Borrar archivo</entry>
+  <entry key="720">No tiene permisos para escribir o dibujar en la pizarra. Debe ser moderador o, al menos, tener permisos de edición de la pizarra. Solicíteselo a un moderador.</entry>
+  <entry key="721">Propiedades</entry>
+  <entry key="722">Iniciar Java</entry>
+  <entry key="723">Iniciar Flash</entry>
+  <entry key="724">Un usuario desea compartir su escritorio. ¿Desea visualizarlo?</entry>
+  <entry key="725">Actualmente está compartiendo su escritorio. Para dejar de hacerlo, pulse en el botón Stop en el cliente utilizado.</entry>
+  <entry key="726">Compartiendo sesión</entry>
+  <entry key="727">¡Ya está compartiendo su escritorio!</entry>
+  <entry key="728">Visor de escritorio</entry>
+  <entry key="729">Salir</entry>
+  <entry key="730">Compartiendo el escritorio</entry>
+  <entry key="731">Pulse Iniciar para publicar su escritorio</entry>
+  <entry key="732">Iniciar la compartición</entry>
+  <entry key="733">Pausar la compartición</entry>
+  <entry key="734">Seleccione el área de la pantalla:</entry>
+  <entry key="735">Cambiar anchura</entry>
+  <entry key="736">!Ha finalizado esta sesión!</entry>
+  <entry key="737">Cambiar altura</entry>
+  <entry key="738">Desplazamiento eje X</entry>
+  <entry key="739">Desplazamiento eje Y</entry>
+  <entry key="740">Anchura:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">La conexión ha sido cerrada por el Servidor</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar Java</entry>
+  <entry key="745">Si cierra esta sesión completamente, no será posible reiniciar el visor durante esta sesión.</entry>
+  <entry key="746">Confirmar el cierre de la sesión</entry>
+  <entry key="747">Compartir escritorio</entry>
+  <entry key="748">Grabar sesión</entry>
+  <entry key="749">Co-navegación</entry>
+  <entry key="750">Hum... Firefox en windows no muestra la co-navegación con claridad. Por favor, utilice otro navegador o cierre esta funcionalidad.</entry>
+  <entry key="751">Previo</entry>
+  <entry key="752">Siguiente</entry>
+  <entry key="753">Recargar</entry>
+  <entry key="754">Inicio</entry>
+  <entry key="755">Cargar</entry>
+  <entry key="756">Configurar en su perfil este sitio como predeterminado.</entry>
+  <entry key="757">Probar configuración</entry>
+  <entry key="758">Compruebe la configuración de su micrófono y/o cámara antes de entrar en la sala. Para ello grabe durante algunos segundos y reprodúzcalo.</entry>
+  <entry key="759">No volver a mostrar este test</entry>
+  <entry key="760">Cancelar</entry>
+  <entry key="761">Iniciar</entry>
+  <entry key="762">No volver a preguntar</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Puede continuar sin hacer la comprobación si no desea publicar la imagen y/o el sonido. Los participantes sin audio o sin vídeo pueden en todo caso utilizar la pizarra, compartir su escritorio o enviar mensajes utilizando el chat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de Nivel</entry>
+  <entry key="768">Presione Iniciar</entry>
+  <entry key="769">Iniciar Conferencia</entry>
+  <entry key="770">Iniciar Evento</entry>
+  <entry key="771">Ir a la sala</entry>
+  <entry key="772">Comprobar Config.</entry>
+  <entry key="773">Iniciar Confer.</entry>
+  <entry key="774">Instrucciones Conferencia:</entry>
+  <entry key="775">Iniciar Grabación</entry>
+  <entry key="776">No mostrar el test de grabación de audio /vídeo antes de entrar en una Conferencia</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">Las salas públicas son accesibles a todos los usuarios.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">Las salas privadas son accesibles sólo para los usuarios de la misma organización.</entry>
+  <entry key="781">Mis salas</entry>
+  <entry key="782">Las salas en esta sección son para uso personal. Se crean utilizando el calendario y tienen una fecha de inicio y de finalización. Sólo se muestran en esta sección durante el intervalo temporal de validez.</entry>
+  <entry key="783">Tiene que ser moderador para ejecutar esta acción.</entry>
+  <entry key="784">Solicitar la moderación</entry>
+  <entry key="785">Solicitar acceso a la pizarra</entry>
+  <entry key="786">Solicitar acceso a la cámara/micrófono</entry>
+  <entry key="787">La autenticación de esta sesión ya ha sido utilizada. No puede hacerse dos veces.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SALIR</entry>
+  <entry key="790">¿Desea realmente salir? Es conveniente que antes borre los documentos subidos, la pizarra o el historial del chat.</entry>
+  <entry key="791">Salir de la conferencia</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Seleccione una sala</entry>
+  <entry key="794">Hay un evento sin guardar en el calendario. Por favor, guárdelo o bien bórrelo.</entry>
+  <entry key="795">¡Añada, al menos, a un participante!</entry>
+  <entry key="796">¿Realmente desea borrar este evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Añadir evento</entry>
+  <entry key="799">día</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descripción</entry>
+  <entry key="803">Asistentes</entry>
+  <entry key="804">{0}, su Plataforma Web de Videoconferencia. Sólo siga las instrucciones, presione el botón para iniciar inmediatamente o vaya al Calendario para programar un Encuentro más adelante.</entry>
+  <entry key="805">Progr. Encuentro</entry>
+  <entry key="806">Para planificar una conferencia, añada un nuevo Evento en el Calendario. Para cada Evento se creará automáticamente una sala de (vídeo)conferencia. Usted y el resto de asistentes recibirán un correo con un enlace de la sala.&lt;br/&gt;&lt;br/&gt;Puede escoger entre diferentes tipos de salas con diferentes diseños y sistemas de moderación. También puede escoger entre diferentes tipos de notificación de correo que se envían en cada evento del calendario.</entry>
+  <entry key="807">¿Necesita ayuda?</entry>
+  <entry key="808">Restringido</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Añadir</entry>
+  <entry key="811">No hay ningún usuario seleccionado. Seleccione primero un ítem de la lista y pulse en Añadir.</entry>
+  <entry key="812">Añadir asistente</entry>
+  <entry key="813">Guardar</entry>
+  <entry key="814">Borrar</entry>
+  <entry key="815">Detalles del Evento</entry>
+  <entry key="816">Moderadores por defecto</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nombre</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Añadir nuevo moderador por defecto</entry>
+  <entry key="822">¿Es supermoderador</entry>
+  <entry key="823">Si la sala está moderada, quien sea ya moderador seguirá siéndolo. Si no desea que sea así, y sólo quiere que determinado usuario sea el moderador, utilice la opción de moderador por defecto.</entry>
+  <entry key="824">Un supermoderador es siempre el moderador de una sala cuando entra en ella. Además, nadie puede quitarle la marca de moderación</entry>
+  <entry key="825">Aplicar supermoderación al usuario</entry>
+  <entry key="826">Quitar supermoderación al usuario</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si añade una organización a la sala, sólo los usuarios de dicha organización tendrán acceso a la misma (esto sólo es válido si la marca de Pública está configurada como falsa)</entry>
+  <entry key="829">Moderación</entry>
+  <entry key="830">Limitaciones</entry>
+  <entry key="831">Organización</entry>
+  <entry key="832">¿Está usted seguro?</entry>
+  <entry key="833">¿Realmente desea borrar este ítem? ¡Tiene que pulsar en el botón de guardar para almacenar los cambios!</entry>
+  <entry key="834">No hay ningún usuario seleccionado. Por favor, selecciónelo primero.</entry>
+  <entry key="835">Añadir un nuevo moderador por defecto</entry>
+  <entry key="836">¿Desea añadir una marca de supermoderador a este usuario? Recuerde que un supermoderador no sólo es el moderador de una sala, sino que además ningún otro moderador podrá borrar la marca de moderación. Necesita guardar el objeto sala para almacenar estas configuraciones.</entry>
+  <entry key="837">¿Desea eliminar la marca de supermoderador a este usuario? Necesita guardar el objeto sala para almacenar estas configuraciones.</entry>
+  <entry key="838">Este usuario tiene el rol de supermoderador. No puede quitarle la marca de moderación a un supermoderador.</entry>
+  <entry key="839">¿Realmente desea borrar este Archivo/Directorio?</entry>
+  <entry key="840">¿Borrar archivo/directorio?</entry>
+  <entry key="841">Dña.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propiedades</entry>
+  <entry key="844">Mostrar la posición del ratón a los participantes</entry>
+  <entry key="845">Compartir audio con el applet SIP</entry>
+  <entry key="846">Compartir audio con SIP y vídeo con Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Ver escritorio</entry>
+  <entry key="849">El usuario</entry>
+  <entry key="850">desea compartir su escritorio. ¿Desea visualizarlo?</entry>
+  <entry key="851">Cerrar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La sesión ha sido cerrada por quien compartía escritorio</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Nueva compartición de escritorio</entry>
+  <entry key="856">Minimizar</entry>
+  <entry key="857">Maximizar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Línea temporal de grabación</entry>
+  <entry key="860">Mis grabaciones</entry>
+  <entry key="861">Grabaciones públicas</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nombre</entry>
+  <entry key="864">Longitud</entry>
+  <entry key="865">Fecha</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">Descarga</entry>
+  <entry key="868">Principal - Vídeo</entry>
+  <entry key="869">Grabación</entry>
+  <entry key="870">Puede grabar y compartir su escritorio a la vez. Para permitir que otros vean su escritorio, pulse en el botón -iniciar- de la parte superior. Para grabar la sesión, es suficiente con pulsar en iniciar grabación.</entry>
+  <entry key="871">Iniciar grabación</entry>
+  <entry key="872">Parar grabación</entry>
+  <entry key="873">Descargar el archivo FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">El usuario tiene el micrófono activado</entry>
+  <entry key="878">Detener la compartición</entry>
+  <entry key="879">Permitir preguntas del usuario</entry>
+  <entry key="880">Desactive esta opción para impedir que ningún usuario le moleste en esta sala. Al hacerlo, el botón para solicitar la moderación no será visible.</entry>
+  <entry key="881">Permisos</entry>
+  <entry key="882">Descargar como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Sólo audio</entry>
+  <entry key="887">Ha habido errores mientras se procesaba la grabación.</entry>
+  <entry key="888">La grabación aún no esta lista. Inténtelo de nuevo en un par de minutos.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Mensaje del grabador:</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">El applet SIP no está listo</entry>
+  <entry key="893">Configuración de la cuenta SIP</entry>
+  <entry key="894">Configuración SIP para cada usuario. Puede activar o desactivar SIP desde Administración &gt; Configuración (Key: enable_sip). Los datos SIP de cada usuario deberían crearse automáticamente.</entry>
+  <entry key="895">Usuario SIP</entry>
+  <entry key="896">Contraseña SIP</entry>
+  <entry key="897">ID Aut-SIP</entry>
+  <entry key="898">La autenticación SIP ha fallado. Debería comprobar los datos de autenticación de su proveedor SIP y de la cuenta SIP de cada usuario. Como administrador, podrá autenticarse y comprobar la configuración. Si entra como usuario o como moderador, cualquier intento de interacción será bloqueado.</entry>
+  <entry key="899">La autenticación SIP ha fallado. Contacte con el servicio técnico.</entry>
+  <entry key="900">Autenticando en la puerta de enlace SIP...</entry>
+  <entry key="901">Autenticando en la puerta de enlace SIP...</entry>
+  <entry key="902">Mostrar Log</entry>
+  <entry key="903">Mensajes Log del proceso de postgrabación</entry>
+  <entry key="904">Mensaje del applet SIP</entry>
+  <entry key="905">El applet SIP no está listo. Por favor, acepte el applet y pulse OK.</entry>
+  <entry key="906">Solicitar la moderación</entry>
+  <entry key="907">Guardar cambios de la cita</entry>
+  <entry key="908">La cita ha sido cambiada. ¿Desea guardar dichos cambios? Todos los participantes implicados recibirán un correo con la fecha y hora actualizadas (dependiendo del tipo de notificación de esta cita).</entry>
+  <entry key="909">Para acceder a otras grabaciones, tiene que autenticarse en la aplicación {0}.</entry>
+  <entry key="910">Seleccione el usuario para este vídeo</entry>
+  <entry key="911">Usuarios disponsibles para esta transmisión Pod</entry>
+  <entry key="912">Usted es moderador en esta entrevista. Puede decidir quién habla así como iniciar / parar la grabación de la sesión.</entry>
+  <entry key="913">Iniciar Grabación</entry>
+  <entry key="914">Parar Grabación</entry>
+  <entry key="915">La grabación de la entrevista está ya iniciada.</entry>
+  <entry key="916">La grabación está ya parada o bien no ha sido iniciada aún.</entry>
+  <entry key="917">¡Ya se ha iniciado la grabación de esta entrevista!</entry>
+  <entry key="918">Cancelar</entry>
+  <entry key="919">El post-proceso de una entrevista lleva cinco veces más tiempo que el de la propia entrevista. El progreso actual de este proceso es el siguiente:</entry>
+  <entry key="920">Tiene que introducir de nuevo su contraseña para autocrear los datos SIP</entry>
+  <entry key="921">Regenerar datos SIP</entry>
+  <entry key="922">¡No puede mover este archivo o carpeta dentro de su propio subdirectorio!</entry>
+  <entry key="923">Tamaño del dispositivo personal</entry>
+  <entry key="924">Tamaño del dispositivo público</entry>
+  <entry key="925">Ajustes de licencia</entry>
+  <entry key="926">Al habilitar la licencia puede obligar a los usuarios bien con una fecha de caducidad bien con un número máximo de minutos.</entry>
+  <entry key="927">Comprobar licencia</entry>
+  <entry key="928">Tarifa plana</entry>
+  <entry key="929">Fecha de caducidad</entry>
+  <entry key="930">Segundos restantes</entry>
+  <entry key="931">Tiempo total</entry>
+  <entry key="932">Su licencia ha expirado. Necesita comprar más tiempo (pago por minuto) o bien pasarse a una tarifa plana.</entry>
+  <entry key="933">Pulsar y comprar</entry>
+  <entry key="934">Tiempo restante de su cuenta:</entry>
+  <entry key="935">Información de la licencia del usuario</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Cerrar</entry>
+  <entry key="938">Su licencia ha expirado. Necesita comprar o un paquete de tiempo (pago-por-minutos) o una tarifa plana.</entry>
+  <entry key="939">Configuración de la licencia</entry>
+  <entry key="940">Puede o bien comprar minutos de uso de la videoconferencia.&lt;br/&gt;&lt;br/&gt; O puede comprar una tarifa plana de 3 a 12 meses.&lt;br/&gt;&lt;br/&gt;Sólo se permite el envío de invitaciones (enlaces directos para entrar en las salas) o la creación de salas de conferencia a través del calendario a usuarios con tarifa plana.</entry>
+  <entry key="941">Comprar 60 minutos 9,99 € (16 céntimos por minuto)</entry>
+  <entry key="942">Comprar 5 horas 19,99 € (6 céntimos por minuto)</entry>
+  <entry key="943">Comprar 3 meses por 29,99 € (9,99 € por mes)</entry>
+  <entry key="944">Comporar 6 meses por 39,99 € (6,66 € por mes)</entry>
+  <entry key="945">Pago-por-minuto</entry>
+  <entry key="946">Tarifa plana</entry>
+  <entry key="947">Tiene una licencia ilimitada</entry>
+  <entry key="948">Su licencia expirará a las:</entry>
+  <entry key="949">Ha comprado Pago-por-minuto. Todavía tiene:</entry>
+  <entry key="950">¡Ampliar el crédito!</entry>
+  <entry key="951">¿Desea tener su propio servidor?</entry>
+  <entry key="952">Puede que desee tener {0} instalado en su servidor o integrado con Moodle, SugarCRM, la página web o la intranet. El precio mínimo es de 500 € por la instalación.</entry>
+  <entry key="953">O envíenos un mensaje</entry>
+  <entry key="954">Responder a:</entry>
+  <entry key="955">Mensaje:</entry>
+  <entry key="956">Enviar</entry>
+  <entry key="957">Pulse aquí para conseguir información de contacto y precios</entry>
+  <entry key="958">Detalles de la tarjeta de crédito</entry>
+  <entry key="959">Nombre</entry>
+  <entry key="960">Apellidos</entry>
+  <entry key="961">Tipo de tarjeta de crédito</entry>
+  <entry key="962">Tarjeta VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Número de la tarjeta de crédito</entry>
+  <entry key="967">Fecha de caducidad</entry>
+  <entry key="968">Número de verificación de la tarjeta</entry>
+  <entry key="969">Dirección de facturación</entry>
+  <entry key="970">Dirección</entry>
+  <entry key="971"></entry>
+  <entry key="972">Ciudad</entry>
+  <entry key="973">País</entry>
+  <entry key="974">Estado (Sólo US)</entry>
+  <entry key="975">Código Postal</entry>
+  <entry key="976">Cantidad</entry>
+  <entry key="977">Enviar</entry>
+  <entry key="978">Paso 1: {0} - Forma de pago</entry>
+  <entry key="979">Correo</entry>
+  <entry key="980">Pulse "Verificar con Paypal" para pagar.&lt;br/&gt; Paypal acepta VISA, MasterCard, Discover o American Express. &lt;br/&gt;No es obligatorio registrarse con Paypal. &lt;br/&gt;Los ciudadanos de Alemana pueden pagar también utilizando domiciliación bancaria.</entry>
+  <entry key="981">Gracias por comprar {0}. &lt;br/&gt; &lt;br/&gt; Tan pronto como tengamos confirmación del pago, su cuenta será actualizada.&lt;br/&gt; Recibirá un correo con su factura en pdf.&lt;br/&gt;Puede también comprobar los movimientos pasados y actuales en su perfil.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Si lo desea, pueda ya cerrar esta ventana en el navegador y volver a {0}.</entry>
+  <entry key="982">Enviar y Comprar</entry>
+  <entry key="983">Pulsar y Comprar</entry>
+  <entry key="984">Paso 3: Pago por {0} - Verifique la orden y pague</entry>
+  <entry key="985">Nombre</entry>
+  <entry key="986">¡Pago recibido!</entry>
+  <entry key="987">Saludos,</entry>
+  <entry key="988">Hemos recibido su pago. Su perfil de usuario se ha actualizado convenientemente. Vea adjuntada su factura. Esta (así como todas las anteriores) podrá ser descargada desde su perfil.</entry>
+  <entry key="989">Gracias por utilizar {0}!</entry>
+  <entry key="990">Pago recibido de {0} -</entry>
+  <entry key="991">Estado de pagos y transferencias</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutos</entry>
+  <entry key="994">Meses</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Estado</entry>
+  <entry key="997">Factura</entry>
+  <entry key="998"></entry>
+  <entry key="999">Necesita comprar una tarifa plana para poder enviar invitaciones o crear encuentros utilizando el calendario. Con el sistema pago por minutos sólo es posible acceder a {0}.</entry>
+  <entry key="1000">Esta dirección de correo está siendo utilizada por otro usuario.</entry>
+  <entry key="1001">Ajustes SIP</entry>
+  <entry key="1002">El número de la videoconferencia y el PIN son creados automáticamente utilizando la pasarela OpenXG RPC-Gateway</entry>
+  <entry key="1003">Número SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">¡Limpiar sólo los objetos de la presentación actual!</entry>
+  <entry key="1006">Sólo se enviará a los participantes la URL introducida en la barra de estado</entry>
+  <entry key="1007">Hacer salas de equipos</entry>
+  <entry key="1008">Seleccione usuarios para una nueva sala de equipo</entry>
+  <entry key="1009">Puede seleccionar usuarios aquí y crear una nueva sala de (vídeo)conferencia ("sala de equipo") para los mismos. Los usuarios seleccionados automáticamente podrán conectarse a la nueva sala o bien recibir una notificación. Los moderadores conseguirán adicionalmente una lista de las salas actuales de tal modo que puedan conectarse a cada sala si fuera necesario moderarlas.</entry>
+  <entry key="1010">Usuario</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Usuarios para la nueva sala de equipo:</entry>
+  <entry key="1014">Crear sala de equipo</entry>
+  <entry key="1015">Cancelar</entry>
+  <entry key="1016">Seleccione al menos un usuario para la sala de equipo</entry>
+  <entry key="1017">Añadir un usuario al equipo</entry>
+  <entry key="1018">Quitar usuarios de la sala de equipo</entry>
+  <entry key="1019">El usuario es moderador de la sala de equipo (puede gestionar salas, y los usuarios del equipo pueden soliciarte entrar)</entry>
+  <entry key="1020">Tipo de sala</entry>
+  <entry key="1021">Si activa "Forzar a los usuarios a conectarse a la nueva sala de equipo" todos los usuarios seleccionados serán conectados automáticamente a la última sala creada. Por otro lado, reciben una notificación con un botón que ellos cambiar a la nueva sala. Los moderadores de equipo siempre tienen libertad de elección para gestionar las salas y conectarse a la que deseen.</entry>
+  <entry key="1022">Gestionar Salas de Equipos</entry>
+  <entry key="1023">Puede conectarse aquí a la sala que desee de las que es moderador. Los usuarios del equipo pueden enviarle un mensaje, por ejemplo para pedirle que entre en su sala y les ayude. También puede finalizar la sala de equipo con lo que todos los usuarios serán desconectados.</entry>
+  <entry key="1024">Forzar al usuario a conectarse a la nueva sala de equipo</entry>
+  <entry key="1025">Nombre</entry>
+  <entry key="1026">Creado</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Usuarios disponibles</entry>
+  <entry key="1030">Añada un usuario con el + en la izquierda o bórrelo con la x de la derecha</entry>
+  <entry key="1031">1) Configuración de la sala</entry>
+  <entry key="1032">2) Añadir usuarios a la sala de equipo</entry>
+  <entry key="1033">Nombre de la sala de equipo</entry>
+  <entry key="1034">Sala de equipo</entry>
+  <entry key="1035">Cambiar a la sala</entry>
+  <entry key="1036">Conectar a esta sala de equipo</entry>
+  <entry key="1037">Finalizar sala y desconectar a todos los usuarios</entry>
+  <entry key="1038">Nueva sala de equipo</entry>
+  <entry key="1039">Hay una nueva sala de equipo disponible para usted.</entry>
+  <entry key="1040">Cambiar a la sala de equipo</entry>
+  <entry key="1041">Acciones de la sala de equipo</entry>
+  <entry key="1042">Puede reabrir esta ventana a través del menú principal en la sección "Acciones"</entry>
+  <entry key="1043">Enviar mensaje al moderador de la sala de equipo</entry>
+  <entry key="1044">Nueva sala de equipo</entry>
+  <entry key="1045">Hay una nueva sala de equipo disponible. Puede cambiarse a esa sala. Las salas de equipo son como "grupos de trabajo" con posibilidades adicionales para solicitar ayuda al moderador. Sus salas de equipo son también accesibles desde la sección "Mis Reuniones".</entry>
+  <entry key="1046">Cambiar a la sala de equipo</entry>
+  <entry key="1047">Creada por:</entry>
+  <entry key="1048">Nombre de la sala de equipo:</entry>
+  <entry key="1049">Esta ventana permanecerá abierta aunque salga de la sala.</entry>
+  <entry key="1050">Usuarios de esta sala de equipo</entry>
+  <entry key="1051">3) Otras salas de equipo a las que podría conectarse</entry>
+  <entry key="1052">Enviar un mensaje a los moderadores de esta sala. Por ejemplo, si necesita ayuda en la moderación de la sala o si tiene alguna pregunta sobre el tema.</entry>
+  <entry key="1053">Enviar</entry>
+  <entry key="1054">2) Usuarios que están invitados a esta sala de equipo</entry>
+  <entry key="1055">Es moderador de la sala de equipo</entry>
+  <entry key="1056">Estos son todos los usuarios a los que el moderador ha invitado a entrar a esta sala de equipo.</entry>
+  <entry key="1057">No hay un moderador conectado en este momento</entry>
+  <entry key="1058">Por favor, introduzca un mensaje</entry>
+  <entry key="1059">Por favor, ayúdenos. Tenemos un problema en nuestra sala de equipo</entry>
+  <entry key="1060">Un usuario de una sala de equipo solicita su ayuda.</entry>
+  <entry key="1061">El Equipo pide ayuda</entry>
+  <entry key="1062">Mensaje:</entry>
+  <entry key="1063">De:</entry>
+  <entry key="1064">Actualmente no está en ninguna sala de equipo. Puede entrar aquí a todas las Salas a las que tiene acceso.</entry>
+  <entry key="1065">Resguarde el sistma. El backup incluye los datos generados por todos los usuarios. La configuración no se incluye, al igual que las etiquetas de idiomas, ya que esos valores se importan con el instalador de sistema. Para actualizar su sistema, exporte los valores antiguos (1), reinstale en una nueva base de datos el nuevo paquete (2) e importe la archivo de backup de nuevo (3). El Backup debiera ser importado antes de generar los datos en el nuevo sistema.</entry>
+  <entry key="1066">Sistema de Backup</entry>
+  <entry key="1067">Permitir al usuario compartir Pantalla/Grabación</entry>
+  <entry key="1068">Denegar al usuario compartir Pantalla/Grabación</entry>
+  <entry key="1069">El usuario es moderador, tiene todos los permisos.</entry>
+  <entry key="1070">le gustaría compartir/grabar pantalla.</entry>
+  <entry key="1071">Puede compartir/grabar pantalla</entry>
+  <entry key="1072">Aplicar para permitir compartir/grabar pantalla.</entry>
+  <entry key="1073">Permitir/Denegar permisos para compartir/grabar pantalla.</entry>
+  <entry key="1074">Apagar sonido</entry>
+  <entry key="1075">Activar sonido</entry>
+  <entry key="1076">Sala de sólo audio</entry>
+  <entry key="1077">Active esta bandera y los usuarios tendrán sólo la opción de Audio (sin vídeo) en la sala. Es indicado para ahorrar ancho de banda.</entry>
+  <entry key="1078">Permitir control remoto (durante la compartición de pantalla)</entry>
+  <entry key="1079">Denegar control remoto (durante la compartición de pantalla)</entry>
+  <entry key="1080">Aplicar para permitir el control remoto de la pantalla</entry>
+  <entry key="1081">Tiene permisos para el control remoto de la pantalla (durante la compartición de pantalla)</entry>
+  <entry key="1082">le gustaría tener control remoto de la pantalla.</entry>
+  <entry key="1083">El usuario es moderador, así que tiene todos los permisos.</entry>
+  <entry key="1084">Permitir/Denegar permisos en la Pantalla de Control Remoto (durante la compartición de pantalla)</entry>
+  <entry key="1085">1) De su PC a un PC remoto: para copiar y pegar texto de su portapapeles a una pantalla remota, pulse sobre la pantalla, luego pulse el botón derecho del ratón y, en el campo de texto, seleccione "Insertar" del menú.&lt;br/&gt;&lt;br/&gt;2) Del PC remoto a su PC: para copiar texto de un PC remoto al portapapeles de su PC, seleccione el texto con el ratón en la pantalla remota, luego pulse el botón derecho del ratón sobre la pantalla remota y seleccione &lt;i&gt;Copiar texto destacado&lt;/i&gt;</entry>
+  <entry key="1086">Copie y pegue texto de su PC al PC remoto y viceversa.</entry>
+  <entry key="1087">Copie el texto destacado</entry>
+  <entry key="1088">Cómo copiar y pegar</entry>
+  <entry key="1089">Calidad para compartir pantalla:</entry>
+  <entry key="1090">Calidad muy Alta</entry>
+  <entry key="1091">Calidad Alta</entry>
+  <entry key="1092">Calidad Media</entry>
+  <entry key="1093">Calidad baja</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Teclado:</entry>
+  <entry key="1097">¡Cerrar conferencia!</entry>
+  <entry key="1098">La conferencia ya está cerrada, será redirigido a otras ofertas interesantes</entry>
+  <entry key="1099">Cerra sala</entry>
+  <entry key="1100">URL de Salida</entry>
+  <entry key="1101">Configuración de finalización de sala</entry>
+  <entry key="1102">Si la sala está cerrada los usuarios serán redirigidos a la URL de salida.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nombre</entry>
+  <entry key="1106">Archivo de Configuración</entry>
+  <entry key="1107">Configuración Ldap</entry>
+  <entry key="1108">Nombre</entry>
+  <entry key="1109">Activado</entry>
+  <entry key="1110">Insertado</entry>
+  <entry key="1111">Insertado por</entry>
+  <entry key="1112">Actualizado</entry>
+  <entry key="1113">Actualizado por</entry>
+  <entry key="1114">Los archivos de configuración están en la carpeta webapps/openmeetings/conf. Necesita subir manualmente los archivos a esta carpeta. Los cambios realizados en el archivo estarán online inmediatamente.</entry>
+  <entry key="1115">Nombre del archivo de configuración</entry>
+  <entry key="1116">Si activa "Añadir Dominio al nombre de usuario" el valor del campo "dominio" se añade a cada registro que el usuario introduce en la casilla de login. Esto es útil si el Login en el Ldap se almacena incluyendo el nombre de dominio. Ejemplo: supongamos que el usuario introduce "hans" y el dominio está especificado como "localhost.com". El login que se verificará contra el Ldap será: hans@localhost.com</entry>
+  <entry key="1117">Añadir Dominio al nombre de usuario</entry>
+  <entry key="1118">Dominio</entry>
+  <entry key="1119">Insertar</entry>
+  <entry key="1120">Copiar el texto remarcado</entry>
+  <entry key="1121">Texto remoto en Portapapeles</entry>
+  <entry key="1122">Mostrar Portapapeles remoto</entry>
+  <entry key="1123">No mostrar nuevamente</entry>
+  <entry key="1124">Copie el texto aquí ...</entry>
+  <entry key="1125">Necesita derechos de control remoto (o moderación) para copiar y pegar texto desde o a la pantalla remota.</entry>
+  <entry key="1126">Editar configuración original ...</entry>
+  <entry key="1127">No mostrar la caja de información en el Control Remoto acerca de Copiar y Pegar</entry>
+  <entry key="1128">Guardar</entry>
+  <entry key="1129">Suprimir</entry>
+  <entry key="1130">Cancelar</entry>
+  <entry key="1131">Invitar usuario a sala de conferencias</entry>
+  <entry key="1132">Escoja sala de conferencias. El usuario invitado verá un mensaje con tu nombre y un link a la sala.</entry>
+  <entry key="1133">Conectado desde:</entry>
+  <entry key="1134">Entrar a sala tras enviar invitación</entry>
+  <entry key="1135">Invitar</entry>
+  <entry key="1136">Mensaje</entry>
+  <entry key="1137">Me gustaría invitarle a sala de conferencia:</entry>
+  <entry key="1138">Mensaje de invitación</entry>
+  <entry key="1139">Enviar invitación</entry>
+  <entry key="1140">did &lt;b&gt;no&lt;/b&gt; acepta su invitación</entry>
+  <entry key="1141">Aceptar</entry>
+  <entry key="1142">Denegar</entry>
+  <entry key="1143">Zona Horaria</entry>
+  <entry key="1144">Detalles del Evento</entry>
+  <entry key="1145">Nombre</entry>
+  <entry key="1146">Descripción</entry>
+  <entry key="1147">Hecho por</entry>
+  <entry key="1148">Mensaje de Zona Horaria</entry>
+  <entry key="1149">Chequear "Mensaje de Zona Horaria" para dar mensaje a los usuarios la próxima vez que accedan para que actualicen sus perfiles.</entry>
+  <entry key="1150">Por favor, chequee la zona horaria en su perfil.</entry>
+  <entry key="1151">Nueva {0} conferencia:</entry>
+  <entry key="1152">Detalles:</entry>
+  <entry key="1153">Comenzar:</entry>
+  <entry key="1154">Finalizar:</entry>
+  <entry key="1155">Conferencia {0} cambiada:</entry>
+  <entry key="1156">Organizar:</entry>
+  <entry key="1157">Conferencia {0} cancelada:</entry>
+  <entry key="1158">{0} Recordar conferencia:</entry>
+  <entry key="1159">Datos para la Comunidad</entry>
+  <entry key="1160">Mostrar datos de contacto a todos</entry>
+  <entry key="1161">Agregar campos de interés que usted ofrece o que está buscando para encontrar socios interesantes para una conferencia. Las comas separan los términos (por ejemplo: Servicio médico, Aseguradoras de la Salud, ...)</entry>
+  <entry key="1162">Mis ofertas</entry>
+  <entry key="1163">Mis intereses</entry>
+  <entry key="1164">Nombre</entry>
+  <entry key="1165">Zona Horaria</entry>
+  <entry key="1166">Campos de interés</entry>
+  <entry key="1167">Información de contacto</entry>
+  <entry key="1168">Mostrar información de contacto solo a contactados.</entry>
+  <entry key="1169">No mostrar datos de contacto a nadie</entry>
+  <entry key="1170">Mi Perfil</entry>
+  <entry key="1171">Editar configuraciones</entry>
+  <entry key="1172">Buscar usuarios</entry>
+  <entry key="1173">Ver tu perfil como los demás lo ven</entry>
+  <entry key="1174">Editar tu configuraciones, añadir tus intereses para ser encontradas</entry>
+  <entry key="1175">Buscar otros usuarios y ampliar tu red</entry>
+  <entry key="1176">Buscar</entry>
+  <entry key="1177">Ofertas del usuario</entry>
+  <entry key="1178">Busca usuario</entry>
+  <entry key="1179">Texto libre</entry>
+  <entry key="1180">Nombre</entry>
+  <entry key="1181">Zona Horaria</entry>
+  <entry key="1182">Ofertas</entry>
+  <entry key="1183">Búsquedas</entry>
+  <entry key="1184">Resultado de búsqueda</entry>
+  <entry key="1185">Acciones</entry>
+  <entry key="1186">Añadir a Contactos</entry>
+  <entry key="1187">Enviar mensaje</entry>
+  <entry key="1188">Contactos y Mensajes</entry>
+  <entry key="1189">Contactos pendientes</entry>
+  <entry key="1190">Aceptar</entry>
+  <entry key="1191">Denegar</entry>
+  <entry key="1192">Hola,</entry>
+  <entry key="1193">me gustaría añadirle como contacto.</entry>
+  <entry key="1194">Chequear sus peticiones de contacto {0} o hacer clic en los links para aceptar o denegar la petición</entry>
+  <entry key="1195">Este usuario ya se encuentra en su lista de contactos o ha recibido una invitación a su lista de contactos que aún no ha contestado.</entry>
+  <entry key="1196">Su lista de contactos</entry>
+  <entry key="1197">Editar sus Contactos y Mensajes,&lt;br/&gt; administrar sus contactos pendientes!</entry>
+  <entry key="1198">está usted confirmado como contacto!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Mostrar / Copiar log del chat</entry>
+  <entry key="1201">Log del chat</entry>
+  <entry key="1202">De:</entry>
+  <entry key="1203">Asunto</entry>
+  <entry key="1204">Enviar</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Mensajes</entry>
+  <entry key="1207">Nuevo correo</entry>
+  <entry key="1208">Click para escribir nuevo mensaje a cualquiera de sus contactos</entry>
+  <entry key="1209">Escribir nuevo mensaje</entry>
+  <entry key="1210">A:</entry>
+  <entry key="1211">Asunto:</entry>
+  <entry key="1212">Activar ajuste completo y la pizarra hará zoom para que todos&lt;br/&gt;documentos sean visibles en función de la resolución de los monitores de cada participante.</entry>
+  <entry key="1213">Expulsar usuario</entry>
+  <entry key="1214">No puede expulsarse a sí mismo de la sala de conferencia! Si quiere salir cierre el navegador o emplee el botón Salir!</entry>
+  <entry key="1215">Realmente quiere desconectar este usuario de la sala de conferencia?</entry>
+  <entry key="1216">Confirme la acción ...</entry>
+  <entry key="1217">No puede expulsar de la sala a un Super-Moderador!</entry>
+  <entry key="1218">Libro sala de conferencias</entry>
+  <entry key="1219">Comenzar</entry>
+  <entry key="1220">Finalizar</entry>
+  <entry key="1221">Agregar una solicitud opcional para reunirse al mensaje y hacer una sala de conferencias. El evento es entonces copiado en el calendario de cada participante.</entry>
+  <entry key="1222">Carpeta de entrada</entry>
+  <entry key="1223">Enviados</entry>
+  <entry key="1224">Papelera</entry>
+  <entry key="1225">Este es usted! No puede añadirse a sí mismo como contacto.</entry>
+  <entry key="1226">El usuario ya estaba denegado!</entry>
+  <entry key="1227">El usuario ya estaba aprobado!</entry>
+  <entry key="1228">El hash de este usuario-contacto es inválido!</entry>
+  <entry key="1229">Usuario añadido a lista de contactos!</entry>
+  <entry key="1230">Usuario denegado como contacto y eliminado de la lista de contactos pendiente!</entry>
+  <entry key="1231">No está ese contacto!</entry>
+  <entry key="1232">Realmente quiere eliminar ese contacto?</entry>
+  <entry key="1233">Confirmar eliminación del contacto</entry>
+  <entry key="1234">Eliminar contacto de la lista</entry>
+  <entry key="1235">Perfil de Usuario</entry>
+  <entry key="1236">Mostrar perfil del usuario</entry>
+  <entry key="1237">Mensajes</entry>
+  <entry key="1238">Buscar</entry>
+  <entry key="1239">Seleccionar todos</entry>
+  <entry key="1240">No seleccionar ninguno</entry>
+  <entry key="1241">Seleccionar no leidos</entry>
+  <entry key="1242">Seleccionar leidos</entry>
+  <entry key="1243">Mover a carpeta ...</entry>
+  <entry key="1244">Añadir nueva carpeta ...</entry>
+  <entry key="1245">Borrar</entry>
+  <entry key="1246">Correos borrados aún permanecen en su papelera!</entry>
+  <entry key="1247">Marcar no leidos</entry>
+  <entry key="1248">Marcar leidos</entry>
+  <entry key="1249">Responder</entry>
+  <entry key="1250">Responder a todos</entry>
+  <entry key="1251">Adelante</entry>
+  <entry key="1252">Acciones ...</entry>
+  <entry key="1253">Enviar mensaje privado</entry>
+  <entry key="1254">Nada seleccionado!</entry>
+  <entry key="1255">Mover a carpeta de entrada</entry>
+  <entry key="1256">Borrar (final)</entry>
+  <entry key="1257">Esta acción no puede ser deshecha!</entry>
+  <entry key="1258">Añadir carpeta</entry>
+  <entry key="1259">Añadir carpetas y organizar sus mensajes!</entry>
+  <entry key="1260">Añadir carpeta</entry>
+  <entry key="1261">Añadir</entry>
+  <entry key="1262">Borrar carpeta</entry>
+  <entry key="1263">No puede borrar esta carpeta, aún contiene mensajes! Borre antes los mensajes o muévalos a otra carpeta.</entry>
+  <entry key="1264">Editar nombre</entry>
+  <entry key="1265">Realmente quiere borrar esta carpeta? No se podrá recuperar.</entry>
+  <entry key="1266">Su petición fue enviada al usuario. El usuario recibirá una notificación para aceptar o denegar la petición. Solamente las peticiones aceptadas estarán en su lista de contactos...naturalmente!</entry>
+  <entry key="1267">Mensaje</entry>
+  <entry key="1268">El usuario no comparte sus datos personales de contacto.</entry>
+  <entry key="1269">El usuario comparte sus datos personales solamente con sus contactos.</entry>
+  <entry key="1270">Dirección &amp; Teléfono</entry>
+  <entry key="1271">Su código de invitación no es válido. El código solamente es válido durante la fecha y hora especificados:</entry>
+  <entry key="1272">Este evento está conectado a los calendarios de otros usuarios. Los cambios que efectúe afectarán tambien a sus calendarios. Realmente quiere cambiar el evento?</entry>
+  <entry key="1273">Confirmar cambios</entry>
+  <entry key="1274">Permitir a los contactos ver mi calendario (ver solamente)</entry>
+  <entry key="1275">No compartir calendario</entry>
+  <entry key="1276">Calendario de contactos</entry>
+  <entry key="1277">Sus contactos necesitan aprovarle primero para poder ver sus calendarios.</entry>
+  <entry key="1278">Usted no puede almacenar o borrar eventos de otros calendarios que no sean el suyo!</entry>
+  <entry key="1279">Mostrar mi calendario nuevamente!</entry>
+  <entry key="1280">Este evento está conectado a los calendarios de otros usuarios. Su acción borrará tambien el evento de sus calendarios. Realmente quiere borrar el evento?</entry>
+  <entry key="1281">Confirmar acción</entry>
+  <entry key="1282">Entrar a sala</entry>
+  <entry key="1283">Acceso a la sala de conferencias</entry>
+  <entry key="1284">Hay una sala de conferencias y evento reservado con este mensaje privado.</entry>
+  <entry key="1285">Primero es necesario almacenar el evento!</entry>
+  <entry key="1286">Esa sala no es accesible. El evento en el Calendario y sala relacionada, ya ha sido eliminada!</entry>
+  <entry key="1287">Elija su nick-nombre</entry>
+  <entry key="1288">Nombre</entry>
+  <entry key="1289">Apellidos</entry>
+  <entry key="1290">Dirección mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Mínimo 4 caracteres! para ambos: Nombre y Apellidos.</entry>
+  <entry key="1293">Por favor, introduzca un mail válido!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login con su cuenta de Facebook</entry>
+  <entry key="1296">Miembro desde</entry>
+  <entry key="1297">Ha hecho login con su cuenta de Facebook. Actualice su perfil con la cuenta de mail correcta; de otro modo no podrá recibir invitaciones ni mensajes privados de otros usuarios.</entry>
+  <entry key="1298">Mensaje</entry>
+  <entry key="1299">No mostrar nuevamente mensaje actualización del perfil</entry>
+  <entry key="1300">más opciones ...</entry>
+  <entry key="1301">Nuevo mensaje privado:</entry>
+  <entry key="1302">Haga click aquí para visitar su perfil y ver el mensaje completo ...</entry>
+  <entry key="1303">Replicar</entry>
+  <entry key="1304">Salas y Chats</entry>
+  <entry key="1305">Mis salas</entry>
+  <entry key="1306">Mi sala de conferencias (para 1-16 usuarios)</entry>
+  <entry key="1307">Mi sala webinar (para 1-120 usuarios)</entry>
+  <entry key="1308">Propietario Id</entry>
+  <entry key="1309">Por favor introduzca una contraseña</entry>
+  <entry key="1310">Necesita una cuenta con el Nivel de Usuario, Moderador o Admin.</entry>
+  <entry key="1311">Web-Service (acceso solamente via SOAP)</entry>
+  <entry key="1312">Cargar directamente a la pizarra</entry>
+  <entry key="1313">Realmente quiere suprimir esta pizarra? Esta acción no puede ser deshecha!</entry>
+  <entry key="1314">Cargar a la pizarra</entry>
+  <entry key="1315">No olvide comenzar la grabación! Un usuario por sala necesita comenzarla para tener después el control de la misma.</entry>
+  <entry key="1316">Comenzar grabación</entry>
+  <entry key="1317">Flecha</entry>
+  <entry key="1318">Circulo</entry>
+  <entry key="1319">Linea</entry>
+  <entry key="1320">Cuadrado</entry>
+  <entry key="1321">Triangulo</entry>
+  <entry key="1322">Texto/Nota</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Dibujo Libre</entry>
+  <entry key="1325">Seleccionar/Mover</entry>
+  <entry key="1326">Dibujar Formas</entry>
+  <entry key="1327">Cortar/Mover</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Imprimir</entry>
+  <entry key="1330">Deshacer</entry>
+  <entry key="1331">Papelera</entry>
+  <entry key="1332">Añadir Rejilla</entry>
+  <entry key="1333">Compartir Archivo</entry>
+  <entry key="1334">Seleccionar Formas</entry>
+  <entry key="1335">Seleccionar Clipart</entry>
+  <entry key="1336">Copiar</entry>
+  <entry key="1337">Cortar</entry>
+  <entry key="1338">Pegar</entry>
+  <entry key="1339">Borrar</entry>
+  <entry key="1340">Realmente quiere borrar todo el contenido de la pizarra?</entry>
+  <entry key="1341">Cargar directamente a la pizarra</entry>
+  <entry key="1342">Asistentes</entry>
+  <entry key="1343">Administrador de asistentes</entry>
+  <entry key="1344">Presente</entry>
+  <entry key="1345">Control Remoto</entry>
+  <entry key="1346">Expulsar</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invitar Asistentes</entry>
+  <entry key="1349">Por Email</entry>
+  <entry key="1350">Usuario es moderador</entry>
+  <entry key="1351">Usuario ha conectado su webcam</entry>
+  <entry key="1352">Desactivar llenar con formas</entry>
+  <entry key="1353">Activar llenar con formas</entry>
+  <entry key="1354">Click a Rejilla</entry>
+  <entry key="1355">Permitir grabación</entry>
+  <entry key="1356">Esperando a grabación</entry>
+  <entry key="1357">Ocultar la barra superior</entry>
+  <entry key="1358">Reproducir video</entry>
+  <entry key="1359">Realmente quiere borrar el contenido de la presente exposición?</entry>
+  <entry key="1360">Aceptar y otorgar derechos al usuario</entry>
+  <entry key="1361">Denegar</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Actividades y acciones</entry>
+  <entry key="1364">Suprimir pizarra</entry>
+  <entry key="1365">Necesita la moderación o el derecho a dibujar en la pizarra para suprimir esta!</entry>
+  <entry key="1366">No permitido</entry>
+  <entry key="1367">ha salido de la sala.</entry>
+  <entry key="1368">Iconos de Matematicas</entry>
+  <entry key="1369">Sin categoría</entry>
+  <entry key="1370">Color-Estilo</entry>
+  <entry key="1371">Calidad</entry>
+  <entry key="1372">Dominio</entry>
+  <entry key="1373">visite</entry>
+  <entry key="1374">rojo-naranja</entry>
+  <entry key="1375">verde-mar</entry>
+  <entry key="1376">azul-industrial</entry>
+  <entry key="1377">azul-brillante</entry>
+  <entry key="1378">rojo-oro</entry>
+  <entry key="1379">gris-plata</entry>
+  <entry key="1380">usuario-definido</entry>
+  <entry key="1381">mejor</entry>
+  <entry key="1382">subir</entry>
+  <entry key="1383">medio</entry>
+  <entry key="1384">Silenciar micrófonos globalmente</entry>
+  <entry key="1385">Volver a activar micrófonos globalmente</entry>
+  <entry key="1386">Silenciar los micrófonos de los demás</entry>
+  <entry key="1387">Usted ha sido desactivado globalmente por el moderador. Usted no puede volver a activarse a sí mismo!</entry>
+  <entry key="1388">Silenciar micrófonos globalmente?</entry>
+  <entry key="1389">Realmente quiere silenciarse globalmente a sí mismo? Nadie podrá oirle!</entry>
+  <entry key="1390">Silenciar micrófono localmente?</entry>
+  <entry key="1391">Realmente quiere silenciar este micrófono? Puede silenciarlo solo en su pantalla localmente. Esto no tendrá efecto en cómo otros usuarios oyen a este usuario. Solo los moderadores pueden silenciarlo globalmente!</entry>
+  <entry key="1392">Silenciar micrófono globalmente?</entry>
+  <entry key="1393">Realmente quiere silenciar a este usuario globalmente? Ningún otro usuario podrá oirle!</entry>
+  <entry key="1394">Su sonido está activado. Haga click aquí y enviará un mensaje al moderador para silenciar globalmente tu micrófono (en toda la sala de conferencias)!</entry>
+  <entry key="1395">Su sonido está desactivado. Haga click aquí y enviará un mensaje al moderador para reactivar tu micrófono globalmente (en toda la sala de conferencias)!</entry>
+  <entry key="1396">desearía que el moderador silencie mi micrófono globalmente.</entry>
+  <entry key="1397">desearía que el moderador reactive mi micrófono globalmente.</entry>
+  <entry key="1398">quiero que el moderador reactive su micrófono.</entry>
+  <entry key="1399">quiero que el moderador silencie su micrófono.</entry>
+  <entry key="1400">Reactivar micrófono. Haga click aquí para silenciar su micrófono globalmente!</entry>
+  <entry key="1401">Silenciar micrófono. Haga click aquí para reactivar su micrófono globalmente!</entry>
+  <entry key="1402">Este usuario ha sido desactivado globalmente por el moderador. Usted no puede reactivarle!</entry>
+  <entry key="1403">Silenciar tu micrófono globalmente</entry>
+  <entry key="1404">Reactivar tu micrófono globalmente</entry>
+  <entry key="1405">Silenciar micrófono</entry>
+  <entry key="1406">Reactivar micrófono</entry>
+  <entry key="1407">Silenciar micrófono globalmente</entry>
+  <entry key="1408">Reactivar micrófono globalmente</entry>
+  <entry key="1409">Solo los moderadores pueden pueden desactivar o reactivar globalmente a un usuario! Para silenciar su propio micrófono: Por favor, emplee el icono en tu ventana de video!</entry>
+  <entry key="1410">Nombre Encuesta</entry>
+  <entry key="1411">Usted</entry>
+  <entry key="1412">Encuestas archivadas</entry>
+  <entry key="1413">activa</entry>
+  <entry key="1414">Cuadro Simple</entry>
+  <entry key="1415">Cuadro Gráfico</entry>
+  <entry key="1416">Por favor, introduzca su dirección de correo</entry>
+  <entry key="1417">Nuevo mensaje(s)</entry>
+  <entry key="1418">Encuesta cerrada</entry>
+  <entry key="1419">Realmente quiere cerrar esta encuesta? Nadie más podrá votar.</entry>
+  <entry key="1420">Eliminar encuesta</entry>
+  <entry key="1421">Realmente quiere eliminar esta encuesta? Los resultados tambien se eliminarán.</entry>
+  <entry key="1422">Lenguaje ISO Código</entry>
+  <entry key="1423">Permitir/Denegar derecho para dar audio exclusivo.</entry>
+  <entry key="1424">Permitir a usuario dar audio exclusivo</entry>
+  <entry key="1425">Denegar a usuario dar audio exclusivo</entry>
+  <entry key="1426">Quisiera obtener permiso para tener audio exclusivo.</entry>
+  <entry key="1427">Quisiera que el moderador me concediera permiso para tener audio exclusivo.</entry>
+  <entry key="1428">Dar permiso para audio exclusivo.</entry>
+  <entry key="1429">Resolución de cámara</entry>
+  <entry key="1430">Cambiando la resolución a efecto de ancho de banda, fotos grandes necesitan más ancho de banda!</entry>
+  <entry key="1431">Usted no tiene los derechos para darse a sí mismo o a los demás audio exclusivo. Necesita solicitar los derechos al moderador o que éste le de audio exclusivo.</entry>
+  <entry key="1432">Quisiera obtener los derechos para audio exclusivo</entry>
+  <entry key="1433">Darme audio exclusivo a mí mismo (alternativamente hacer click en la ventana de video o pulsar F12)</entry>
+  <entry key="1434">El micrófono está abierto!</entry>
+  <entry key="1435">El micrófono esta silenciado</entry>
+  <entry key="1436">Ocultar chat</entry>
+  <entry key="1437">Ocultar actividades</entry>
+  <entry key="1438">Ocultar explorador de archivos</entry>
+  <entry key="1439">Ocultar menú de acciones</entry>
+  <entry key="1440">Ocultar compartir pantalla</entry>
+  <entry key="1441">Ocultar pizarra</entry>
+  <entry key="1442">Mostrar estatus del micrófono en video</entry>
+  <entry key="1443">Opciones de capa</entry>
+  <entry key="1444">Nuevo Evento</entry>
+  <entry key="1445">Los enlaces a la conferencia que son enviados a los participantes cuando usted guarda el evento en el calendario, están protegidos por contraseña, no la sala! Ello quiere decir que si guarda el evento múltiples veces pero con diferentes contraseñas, cada participante recibirá un nuevo enlace con una contraseña diferente. Aunque los enlaces primeros seguirán estando activos una vez se hayan enviado!</entry>
+  <entry key="1446">Editar detalles</entry>
+  <entry key="1447">Mostrar sip dialer</entry>
+  <entry key="1448">Llamar</entry>
+  <entry key="1449">Mostrar los eventos de contacto en el calendario</entry>
+  <entry key="1450">Su inicio!</entry>
+  <entry key="1451">Planear sus reuniones</entry>
+  <entry key="1452">Ver grabaciones y entrevistas</entry>
+  <entry key="1453">Escoger y comenzar una web-conferencia</entry>
+  <entry key="1454">Administrar usuarios y derechos</entry>
+  <entry key="1455">Administrar conexiones y usuarios expulsados</entry>
+  <entry key="1456">Administrar grupos de usuarios</entry>
+  <entry key="1457">Administrar salas de conferencia</entry>
+  <entry key="1458">Administrar configuraciones del sistema</entry>
+  <entry key="1459">Administrar etiquetas y formularios</entry>
+  <entry key="1460">Administrar configuraciones de LDAP y ADS</entry>
+  <entry key="1461">Exportar/Importar Backups del Sistema</entry>
+  <entry key="1462">Usted necesita la moderación o el derecho para dibujar en la pizarra, subir, añadir, suprimir o cargar archivos y carpetas.</entry>
+  <entry key="1463">Editar texto</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publicar</entry>
+  <entry key="1466">Comenzar Publicación</entry>
+  <entry key="1467">Finalizar Publicación</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publicar App</entry>
+  <entry key="1470">Publicar Id</entry>
+  <entry key="1471">Reducir la anchura de la Compartición de Escritorio antes de intentar moverlo a la izquierda</entry>
+  <entry key="1472">Reducir la altura de la Compartición de Escritorio antes de intentar moverlo abajo</entry>
+  <entry key="1473">Reducir la x de la Compartición de Escritorio antes de intentar hacerla más ancho</entry>
+  <entry key="1474">Reducir la y de la Compartición de Escritorio antes de intentar hacerla más alta</entry>
+  <entry key="1475">Completar estas configuraciones stream con los datos de tu pantalla a proveedores de terceras partes como justin.tv</entry>
+  <entry key="1476">Por favor lance Compartición de Escritorio para que pueda ser publicada</entry>
+  <entry key="1477">Es requerido permiso del Moderador para comenzar la grabaciónModerator permission required to start recording</entry>
+  <entry key="1478">Usted no tiene permiso para conceder audio exclusivo a cualquier participante. Necesita tener el papel de moderador o el derecho de audio exclusivo para hacer exclusivo y activo a algun micrófono.</entry>
+  <entry key="1479">Subir nuevo archivo al explorador de archivos</entry>
+  <entry key="1480">Abrir nuevo diálogo de configuraciones compartidas</entry>
+  <entry key="1481">Un moderador debe aprobarlo</entry>
+  <entry key="1482">Decir al moderador que quieres compartir tu webcam/micro</entry>
+  <entry key="1483">Reunir feedback al crear una encuesta</entry>
+  <entry key="1484">Resultados de las encuestas pasadas y actual como gráfico</entry>
+  <entry key="1485">Vote si hay una encuesta para esta sala de conferencias</entry>
+  <entry key="1486">Editar configuraciones de cam y micro</entry>
+  <entry key="1487">Confirmar y dejar la sala</entry>
+  <entry key="1488">Llamada a gente externa via VoIP/SIP</entry>
+  <entry key="1489">Enviar un correo con un link directo a esta sala</entry>
+  <entry key="1490">Cambiar sus configuraciones de la pizarra</entry>
+  <entry key="1491">Máximo peso de subida</entry>
+  <entry key="1492">Pedir al moderador compartir tu pizarra</entry>
+  <entry key="1493">Comenzar Chat Privado</entry>
+  <entry key="1494">Todo</entry>
+  <entry key="1495">No puede comenzar un chat privado con usted mismo.</entry>
+  <entry key="1496">Usted ya comenzó un chat privado con este participante.</entry>
+  <entry key="1497">Realmente quiere eliminar este chat privado?</entry>
+  <entry key="1498">Servidores</entry>
+  <entry key="1499">Servidores participantes en grupo</entry>
+  <entry key="1500">Nombre del Servidor</entry>
+  <entry key="1501">Dirección del Servidor</entry>
+  <entry key="1502">Detalles del Servidor</entry>
+  <entry key="1503">Enviar SMS</entry>
+  <entry key="1504">Publicando. Usuario:</entry>
+  <entry key="1505">Para guardar hora y tráfico de internet puede emplear la linea de comandos como administrador para hacer backup/restaurar/actualizar: &lt;ol&gt; &lt;li&gt;ir al directorio de instalación en OM (por ejemplo /opt/red5)&lt;/li&gt; &lt;li&gt;detenga OM (por ejemplo ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (hacer backup del actual OM)&lt;/li&gt; &lt;li&gt;descargar archivo con el nuevo OM&lt;/li&gt; &lt;li&gt; (mover versión de trabajo de OM solo en el caso :))&lt;/li&gt; &lt;li&gt;extraer el OM descargado a /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' en el caso de que esté usted empleando una base de datos DB distinta a la original )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Salas comunes a todos los usuarios</entry>
+  <entry key="1507">Salas comunes al grupo de usuarios actual</entry>
+  <entry key="1508">Salas del usuario actual</entry>
+  <entry key="1509">Crear/Modificar sala especial de cita</entry>
+  <entry key="1510">Puede insertar múltiples direcciones en el formato: nombre1 apellidos1 &lt;correo1&gt;,"nombre2 apellidos2" &lt;correo2&gt;,'nombre3 apellidos3' &lt;correo3&gt;, ...</entry>
+  <entry key="1511">Ajustar volumen de flujo</entry>
+  <entry key="1512">Ajustar volumen del micrófono</entry>
+  <entry key="1513">Es un chat moderado</entry>
+  <entry key="1514">Permitir mensajes</entry>
+  <entry key="1515">Panel de chat abierto por defecto</entry>
+  <entry key="1516">Panel de archivos abierto por defecto</entry>
+  <entry key="1517">Último ping</entry>
+  <entry key="1518">Cada esclavo envió un ping al master cada 3 segundos (configurable). El último ping del esclavo debe ser inferior a 1 minuto así el master emplea al esclavo. Every slave sends a ping to the master every 3 seconds (configurable).</entry>
+  <entry key="1519">Puerto HTTP</entry>
+  <entry key="1520">Usuario (SOAP-Access)</entry>
+  <entry key="1521">Contraseña</entry>
+  <entry key="1522">Ruta Webapp</entry>
+  <entry key="1523">Protocolo</entry>
+  <entry key="1524">Ping funcionando</entry>
+  <entry key="1525">Activo</entry>
+  <entry key="1526">Generar URL</entry>
+  <entry key="1527">Testeando la Red</entry>
+  <entry key="1528">Auto-seleccionar ventana de video en interview</entry>
+  <entry key="1529">Subrayar</entry>
+  <entry key="1530">Estilo de fuente</entry>
+  <entry key="1531">Permitir estilos de fuentes</entry>
+  <entry key="1532">Color de fuente</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Mostrar estadísticas de sesión</entry>
+  <entry key="1535">Detalles de la sesión</entry>
+  <entry key="1536">Importar sistema</entry>
+  <entry key="1537">Incluir archivos subidos y grabaciones en el backup</entry>
+  <entry key="1538">Permitir transporte SIP en la sala</entry>
+  <entry key="1539">Realmente quiere proveer a este usuario de audio exclusivo?</entry>
+  <entry key="1540">Por favor, especifique su Zona Horaria</entry>
+  <entry key="1541">conferencia (1-25 usuarios)</entry>
+  <entry key="1542">restringida (1-150 usuarios)</entry>
+  <entry key="1543">interview (1:1 reunión con grabación)</entry>
+  <entry key="1544">Ya existe la configuración con esa clave, por favor especifique otra clave o edite la configuración existente</entry>
+  <entry key="1545">El contenido se está guardando, Por favor espere.</entry>
+  <entry key="1546">BienVenidos</entry>
+  <entry key="1547">El Widget muestra información básica del usuario y links soportados</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">Acerca de</entry>
+  <entry key="1550">Nonmbre</entry>
+  <entry key="1551">Versión</entry>
+  <entry key="1552">Revisión</entry>
+  <entry key="1553">Fecha de construcción</entry>
+  <entry key="1554">Cargando ...</entry>
+  <entry key="1555">hoy</entry>
+  <entry key="1556">Ene</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Abr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Ago</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dic</entry>
+  <entry key="1568">no envíe notificación</entry>
+  <entry key="1569">correo simple</entry>
+  <entry key="1570">iCal correo</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Administrar configuraciones de OAuth2</entry>
+  <entry key="1573">Nombre</entry>
+  <entry key="1574">Permitido</entry>
+  <entry key="1575">Icono URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Solicitud de clave URL</entry>
+  <entry key="1579">Solicitud simbólica de URL</entry>
+  <entry key="1580">Solicitud de información URL</entry>
+  <entry key="1581">Configuración de OAuth2</entry>
+  <entry key="1582">Login parámetros nombre</entry>
+  <entry key="1583">Correo parámetros nombre</entry>
+  <entry key="1584">Nombre parámetros nombre</entry>
+  <entry key="1585">Apellidos parámetros nombre</entry>
+  <entry key="1586">Solicitud simbólica de atributos</entry>
+  <entry key="1587">Redireccionar uri</entry>
+  <entry key="1588">Puede introducir la dirección de correo en el formato: nombre1 apellidos1 &lt;email1&gt; o "nombre2 apellidos2" &lt;email2&gt; o 'nombre3 apellidos3' &lt;email3&gt; o email</entry>
+  <entry key="1589">Notificar desconexión</entry>
+  <entry key="1590">Exponer</entry>
+  <entry key="1591">Su cuenta ha sido hecha. El correo de confirmación ha sido enviado. Ahora puede usted hacer login.</entry>
+  <entry key="1592">El final de la fecha introducida es anterior a la fecha del comienzo.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Instalación</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Activar Subir Imagen e Importar a la pizarra
+				<a href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instalar <strong>ImageMagick</strong> en el servidor, puede obtener más información en
+				<a target="_blank" href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					observando instalación. Las instrucciones para la misma puede encontrarlas aquí
+					<a target="_blank" href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					de todos modos en la mayoría de los sistemas linux puede conseguirlo via su paquete favorito
+					de administración (apt-get it).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Activando
+				importar PDFs a la pizarra<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instale <strong>GhostScript</strong> en el servidor, puede tener
+					más información en <a target="_blank" href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					mire en instalación. Las instrucciones para la instalación se encuentran allí, 
+					de todos modos en la mayoría de los sistemas linux puede conseguirlo
+					via su paquete favorito de administración (apt-get it)
+				</li>
+				<li>Instale <strong>SWFTools</strong> en el servidor, puede tener
+					más información en <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					mire en instalación. Algunas de las distribuciones Linux ya lo tienen en el
+					administrador de paquetes, vea <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					la versión recomendada de <strong>SWFTools</strong> es 0.9 porque las
+					anteriores tienen un bug que hace llevar unas dimensiones erróneas al objeto
+                     en la Pizarra.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Activando
+				importar .doc, .docx, .ppt, .pptx, ... todos los Documentos de Oficina a la Pizarra
+				<a href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu" class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> lanzado escucha en el
+					puerto 8100, vea <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					para más detalles.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Activando
+				Grabación e importación de .avi, .flv, .mov and .mp4 a la pizarra<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instalar <strong>FFMpeg</strong>. Puede conseguir FFMPEG de una copia actualizada! 
+				    Para Windows puede descargar una Build, por ejemplo desde
+					<a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Los usuarios de Linux o OSx
+					pueden emplear una de las variadas Instrucciones de Instalación que hay en la Web. 
+					Es necesario activar libmp3lame!
+				</li>
+				<li>Instalar <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_blank">http://sox.sourceforge.net/</a>.
+					Instalar una copia de SOX actualizada! SOX 12.xx no funcionará!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Si tiene otras cuestiones o necesita soporte para instalación o hosting:</span></b>
+	<br />
+	<br />
+
+	
+	<b><span style="font-size: 1.2em">Soporte-Comunidad:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Listas de correo</a></span>
+	<br />
+	
+	<b> <span style="font-size: 1.4em">Hay algunas compañias
+            que tambien ofrecen soporte comercial para Apache OpenMeetings:</span></b>
+    <br />
+    <br />
+    <br />
+    <br />
+    <span style="font-size: 1.3em"><a
+        href="http://openmeetings.apache.org/commercial-support.html"
+        target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+    <br />
+    ]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recomendación 
+			para medios de producción<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Viene predeterminado {0} para emplear la base de datos {1}. Para
+			medios de producción considere emplear {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+    ]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Datos del usuario</entry>
+	<entry key="install.wizard.params.step1.username">Nombre de usuario</entry>
+	<entry key="install.wizard.params.step1.username.title">Introduzca un nombre de usuario</entry>
+	<entry key="install.wizard.params.step1.password">Contraseña</entry>
+	<entry key="install.wizard.params.step1.password.title">Introduzca una contraseña</entry>
+	<entry key="install.wizard.params.step1.email">Dirección de correo</entry>
+	<entry key="install.wizard.params.step1.email.title">Introduzca una dirección de correo</entry>
+	<entry key="install.wizard.params.step1.tz">Time Zone del Usuario</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organización (Dominios)</entry>
+	<entry key="install.wizard.params.step1.group">Nombre</entry>
+	<entry key="install.wizard.params.step1.group.title">Introduzca una Organización por omisión</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuración</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Permitir auto-registro (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Enviar Correo a los nuevos Usuarios registrados (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Los Nuevos Usuarios necesitan verificarse con sus Correos (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Salas Preconfiguradas de todo tipo serán creadas</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Correo de Referencia (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Introduzca una Referencia</entry>
+	<entry key="install.wizard.params.step2.smtpServer">Servidor SMTP (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Introduzca un Servidor-SMTP</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Puerto del Servidor (el Puerto clásico del Servidor-Smtp es el 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Introduzca un Puerto SMTP normalmente 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">Nombre de Usuario de correo SMTP (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Introduzca nombre usuario de correo</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">Contraseña del usuario de correo SMTP (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Introduzca la contraseña del usuario de correo</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Activar TLS en el Servidor de Correo Autentificado</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Poner la dirección de correo electrónico como ReplyTo en los correos de invitaciónes (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Idioma preferido</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Fuente Preferida para Exportar [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Convertidores</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> consulte</entry>
+	<entry key="install.wizard.params.step3.installation">Instalación</entry>
+	<entry key="install.wizard.params.step3.swfZoom">Zoom SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Introduzca el dpi que swftools empleará para convertir PDF a SWF</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Introduzca la dpi
+		que swftools empleará para convertir PDF a SWF. Preconfigurada es
+		100 dpi</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">Calidad de JPEG en SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Introduzca la calidad embebida de las imágenes jpeg. 0 es la menor (pesa menos), 100 es la mejor (pesa más). (por omisión:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Introduzca la calidad
+		de las imagenes jpeg embebidas. 0 es la menor (pequeña),
+		100 es la mejor (grande). (preconfigurada:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Introduzca la ruta a swftools, por ejemplo C:/swftools (Windows) o déjelo en blanco si swftools está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Si muestra
+		una lista de opciones, deje este campo en blanco, si no debe especificar
+		la ruta a pdf2swf en su sistema
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Introduzca la ruta a ImageMagick, o déjelo en blanco si ImageMagick está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Introduzca la ruta a FFMPEG, o déjelo en blanco si ImageMagick está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Introduzca la ruta a SOX, o déjelo en blanco si SOX está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Ruta a la libreria JOD (http://code.google.com/p/jodconverter), introduzca la ruta al directorio lib donde se encuentra el archivo jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path (Ruta) para jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Ruta a OpenOffice/LibreOffice (opcional), por favor introdúzcala en el caso que jodconverter no encuentre a OpenOffice/LibreOffice automáticamente</entry>
+	<entry key="install.wizard.params.step3.officePath.text">El path (ruta) a OpenOffice/LibreOffice (opcional) por favor
+		configúrelo correctamente en caso de que jodconverter no pueda
+		encontrar la instalación de OpenOffice/LibreOffice
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Tipo de Encriptación</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Introduzca el nombre del tipo de Encriptación. NO LO CAMBIE SI NO ESTÁ SEGURO</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Puede emplear este tipo de encriptación que es igual
+		a la función PHP-MD5 o BSD-Style empleando: <b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		para más información o escribir su propio Cryp-Style mire en: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Customizar Mecanismo de Encriptación</a> Puede editar este valor
+		después AUNQUE los Usuarios y Sesiones creadas anteriormente pueden quedar
+		en desuso para siempre.
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuración</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Activar SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Activar la integración de red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP prefijo de salas</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefijo para número telefónico de salas de conferencia</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensiones contexto</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Contexto de Asterisk extensiones</entry>
+
+	<entry key="install.wizard.install.desc">Por favor pulse el botón "Finalizar" para comenzar la instalación.</entry>
+	<entry key="install.wizard.install.started">Por favor aguarde, instalación en progreso...</entry>
+	<entry key="install.wizard.install.failed">Instalación fallida</entry>
+
+	<entry key="install.wizard.congrats.enter">Entrar a la Aplicación</entry>
+	<entry key="install.wizard.congrats.port">Si su servidor Red5 corre en un Puerto distinto o en diferente dominio</entry>
+	<entry key="install.wizard.congrats.config">cambie los valores de configuración del cliente</entry>
+	<entry key="install.wizard.congrats.mail">Listas de correo</entry>
+	<entry key="install.wizard.congrats.commercial">Hay algunas compañias
+		que tambien ofrecen soporte comercial para Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
new file mode 100644
index 0000000..045216f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">كنفرانس</entry>
+  <entry key="2">ملاقات</entry>
+  <entry key="3">درس كلاس</entry>
+  <entry key="4">تنظيمات</entry>
+  <entry key="5">فردي مشخصات</entry>
+  <entry key="6">مدیریت</entry>
+  <entry key="7">توقف</entry>
+  <entry key="8">ضبط</entry>
+  <entry key="9">دسترس قابل غير فايل</entry>
+  <entry key="10">استاد توسط ضبط</entry>
+  <entry key="11">حاضر كاربران</entry>
+  <entry key="12">كنفرانس يك شروع</entry>
+  <entry key="13">من نام</entry>
+  <entry key="14">ويديويي كنفرانس</entry>
+  <entry key="15">بارگذاري</entry>
+  <entry key="16">ليست بازبيني</entry>
+  <entry key="17">اصلي فايل</entry>
+  <entry key="18">جديد سنجي نظر</entry>
+  <entry key="19">كنفرانس براي جديد راي يك</entry>
+  <entry key="20">:پرسش</entry>
+  <entry key="21">:سنجي نظر انواع</entry>
+  <entry key="22">ايجاد</entry>
+  <entry key="23">اطلاعات پيام</entry>
+  <entry key="24">سنجي نظر يك ايجاد</entry>
+  <entry key="25">انصراف</entry>
+  <entry key="26">خير/بله</entry>
+  <entry key="27">1-10 اعداد</entry>
+  <entry key="28">سنجي نظر</entry>
+  <entry key="29">اعتدال</entry>
+  <entry key="30">راي</entry>
+  <entry key="31">پيشين آرا</entry>
+  <entry key="32">راي</entry>
+  <entry key="33">پاسخ</entry>
+  <entry key="34">بله</entry>
+  <entry key="35">خير</entry>
+  <entry key="36">:پاسخ درخواست</entry>
+  <entry key="37">راي پيامد</entry>
+  <entry key="38">:پرسش</entry>
+  <entry key="39">:پيامد</entry>
+  <entry key="40">:پاسخ</entry>
+  <entry key="41">است نشده آغاز سنجي نظر هيچ</entry>
+  <entry key="42">آرا</entry>
+  <entry key="43">جلسه</entry>
+  <entry key="44">كنفرانس</entry>
+  <entry key="45">نوع</entry>
+  <entry key="46">ديگر جايگاه</entry>
+  <entry key="47">پيشين انتخابهاي</entry>
+  <entry key="48">ورود</entry>
+  <entry key="49">.کردند ترک را جلسه سيستم مدير</entry>
+  <entry key="50">سيستم پيام</entry>
+  <entry key="51">انتخاب شيوه</entry>
+  <entry key="52">دوربين انتخاب</entry>
+  <entry key="53">ميكروفن انتخاب</entry>
+  <entry key="54">ادامه</entry>
+  <entry key="55">انصراف</entry>
+  <entry key="56">داريد مجدد اتصال به احتياج شما</entry>
+  <entry key="57">تنظيمات ويرايش</entry>
+  <entry key="58">رشته</entry>
+  <entry key="59">:زبان</entry>
+  <entry key="60">ادامه</entry>
+  <entry key="61">انصراف</entry>
+  <entry key="62">مانيتور صفحه كردن پاك</entry>
+  <entry key="63">شود؟ اضافه جديد عكس يك اينكه از قبل شود خالي مانيتور صفحه ميخواهيد آيا</entry>
+  <entry key="64">نفرماييد سوال دوباره</entry>
+  <entry key="65">خير</entry>
+  <entry key="66">نصب تصحيح</entry>
+  <entry key="67"></entry>
+  <entry key="68">كاربر اطلاعات</entry>
+  <entry key="69">شده ترسيم محيط وضوح</entry>
+  <entry key="70">كردن خنثي</entry>
+  <entry key="71">دوباره انجام</entry>
+  <entry key="72">نظر مورد موضوع</entry>
+  <entry key="73">متن</entry>
+  <entry key="74">كردن نقاشي</entry>
+  <entry key="75">كشيدن خط</entry>
+  <entry key="76">كردن دار خط زير</entry>
+  <entry key="77">گوش چهار</entry>
+  <entry key="78">بيضي</entry>
+  <entry key="79">پيكان</entry>
+  <entry key="80">انتخابي آيتم حذف</entry>
+  <entry key="81">مديريت درخواست</entry>
+  <entry key="82">اجرا قابل</entry>
+  <entry key="83">انصراف</entry>
+  <entry key="84">مديريت درخواست</entry>
+  <entry key="85">بستن</entry>
+  <entry key="86">كج حروف</entry>
+  <entry key="87">توپر حروف</entry>
+  <entry key="88">ماندن منتظر</entry>
+  <entry key="89">اجرا قابل پيغام</entry>
+  <entry key="90">پذيرفتن</entry>
+  <entry key="91">كردن رد</entry>
+  <entry key="92"></entry>
+  <entry key="93">سيستم مدير به درخواست پيام ارسال</entry>
+  <entry key="94">پذيرفتن</entry>
+  <entry key="95">كردن رد</entry>
+  <entry key="96">سيستم مدير تغيير</entry>
+  <entry key="97">You are not moderating this course!</entry>
+  <entry key="98">:سيستم مدير</entry>
+  <entry key="99">This Room is full. Sorry please try again later.</entry>
+  <entry key="100">بيضي</entry>
+  <entry key="101">بستن</entry>
+  <entry key="102"></entry>
+  <entry key="103">كاراكتر 4 از بيش يا 4</entry>
+  <entry key="104">باشد كاراكتر 4 حداقل بايد عبور رمز</entry>
+  <entry key="105">The username is already taken</entry>
+  <entry key="106">The email is already registered</entry>
+  <entry key="107">سيستم اخطار</entry>
+  <entry key="108">ارتباط قطع</entry>
+  <entry key="109">:كاربر</entry>
+  <entry key="110">:عبور رمز</entry>
+  <entry key="111">:زبان</entry>
+  <entry key="112">سيستم به ورود</entry>
+  <entry key="113">Sign Up</entry>
+  <entry key="114">:كاربر</entry>
+  <entry key="115">عبور رمز:</entry>
+  <entry key="116">تايپ بازبيني:</entry>
+  <entry key="117">:نام</entry>
+  <entry key="118">:خانوادگي نام</entry>
+  <entry key="119">:ايميل</entry>
+  <entry key="120">:كشور</entry>
+  <entry key="121">ثبت</entry>
+  <entry key="122">انصراف</entry>
+  <entry key="123">Not a member?</entry>
+  <entry key="124">اصلي صفحه</entry>
+  <entry key="125">كاربر</entry>
+  <entry key="126">ها گروه</entry>
+  <entry key="127">دهي سازمان</entry>
+  <entry key="128">گفتگو اطاق</entry>
+  <entry key="129">همگاني</entry>
+  <entry key="130">دهي سازمان</entry>
+  <entry key="131">ورود</entry>
+  <entry key="132">ارتباط قطع</entry>
+  <entry key="133">عبور رمز</entry>
+  <entry key="134">تايپ بازبيني</entry>
+  <entry key="135">:نام</entry>
+  <entry key="136">:خانوادگي نام</entry>
+  <entry key="137">:ايميل</entry>
+  <entry key="138">:تولد تاريخ</entry>
+  <entry key="139">:سكونت محل</entry>
+  <entry key="140">:كدپستي</entry>
+  <entry key="141">:كشور</entry>
+  <entry key="142">:آدرس</entry>
+  <entry key="143">كاربر سوابق</entry>
+  <entry key="144">ذخيره</entry>
+  <entry key="145">ذخيره</entry>
+  <entry key="146">كاربر شناسه</entry>
+  <entry key="147">ارتباط قطع</entry>
+  <entry key="148">نام</entry>
+  <entry key="149">خانوادگي نام</entry>
+  <entry key="150">بعدي نمايش</entry>
+  <entry key="151">قبلي نمايش</entry>
+  <entry key="152">ضبط حذف</entry>
+  <entry key="153">انصراف</entry>
+  <entry key="154">حذف</entry>
+  <entry key="155">جديد ضبط</entry>
+  <entry key="156">ضبط بيني باز</entry>
+  <entry key="157">ضبط حذف</entry>
+  <entry key="158">وضعيت</entry>
+  <entry key="159">صلاحيت فاقد</entry>
+  <entry key="160">ساختن قادر</entry>
+  <entry key="161">دهي سازمان</entry>
+  <entry key="162">تقويم</entry>
+  <entry key="163">بستن</entry>
+  <entry key="164">سازمان شناسه</entry>
+  <entry key="165">نام</entry>
+  <entry key="166">كاربر</entry>
+  <entry key="167">سيستم مدير</entry>
+  <entry key="168">سيستم مدير</entry>
+  <entry key="169">كاربر سطح</entry>
+  <entry key="170">دهي سازمان</entry>
+  <entry key="171">نام</entry>
+  <entry key="172">دهي سازمان افزودن</entry>
+  <entry key="173">دهي سازمان افزودن</entry>
+  <entry key="174">انصراف</entry>
+  <entry key="175">افزودن</entry>
+  <entry key="176">remove organisation</entry>
+  <entry key="177">كاربر</entry>
+  <entry key="178">اضافه كاربر</entry>
+  <entry key="179">كاربر حذف</entry>
+  <entry key="180">كاربر افزودن</entry>
+  <entry key="181">كاربر جستجوي</entry>
+  <entry key="182">كاوش</entry>
+  <entry key="183">كاربر</entry>
+  <entry key="184">دهي سازمان</entry>
+  <entry key="185">ورود</entry>
+  <entry key="186">كنفرانس اطاق</entry>
+  <entry key="187">كنفرانس اطاق</entry>
+  <entry key="188">شناسه</entry>
+  <entry key="189">نام</entry>
+  <entry key="190">همگاني</entry>
+  <entry key="191">دهي سازمان</entry>
+  <entry key="192">گفتگو اطاق</entry>
+  <entry key="193">نام</entry>
+  <entry key="194">تايپ</entry>
+  <entry key="195">همگاني</entry>
+  <entry key="196">تفسير</entry>
+  <entry key="197">ذخيره</entry>
+  <entry key="198">گذاري بار</entry>
+  <entry key="199">از ذخيره</entry>
+  <entry key="200">فايل نام</entry>
+  <entry key="201">فايل نام</entry>
+  <entry key="202">انصراف</entry>
+  <entry key="203">ذخيره</entry>
+  <entry key="204">خطا</entry>
+  <entry key="205">گذاري بار</entry>
+  <entry key="206">موضوع بارگذاري</entry>
+  <entry key="207">snychronizing clients, clients to wait:</entry>
+  <entry key="208">تصويري هاي داده گذاري بار</entry>
+  <entry key="209">snychronizing clients, clients to wait:</entry>
+  <entry key="210">شده ترسيم محيط وضوح</entry>
+  <entry key="211">clear drawarea, all data on whiteboard will be lost</entry>
+  <entry key="212">فايل گذاري بار از قبل تثبيت</entry>
+  <entry key="213">نامه دعوت ارسال</entry>
+  <entry key="214">نامه دعوت ارسال</entry>
+  <entry key="215">موضوع</entry>
+  <entry key="216">گيرنده</entry>
+  <entry key="217">پيام</entry>
+  <entry key="218">ارسال</entry>
+  <entry key="219">انصراف</entry>
+  <entry key="220">ارسال</entry>
+  <entry key="221">كاربر داده</entry>
+  <entry key="222">كنفرانس اين براي شما اختصار نام</entry>
+  <entry key="223">مستعار نام</entry>
+  <entry key="224">نام</entry>
+  <entry key="225">خانوادگي نام</entry>
+  <entry key="226">ايميل</entry>
+  <entry key="227">زبان</entry>
+  <entry key="228">ورود</entry>
+  <entry key="229">گذاري بار</entry>
+  <entry key="230">كنيد صبر لطفا-اطلاعات گذاري بار حال در</entry>
+  <entry key="231">ورود رمز اخطار</entry>
+  <entry key="232">كنيد وارد عبور رمز دو لطفا</entry>
+  <entry key="233">ايميل اخطار</entry>
+  <entry key="234">كرديد وارد صحيح نا پستي آدرس</entry>
+  <entry key="235">Registration Complete</entry>
+  <entry key="236">است شده ايجاد شما اكانت</entry>
+  <entry key="237">بگذاريد اشتراك به را خود صفحه نميتوانيد شما</entry>
+  <entry key="238">ممنوع گذاري اشتراك به</entry>
+  <entry key="239">شما صفحه گذاري اشتراك</entry>
+  <entry key="240">Bad Bandwidth: You have not been able to syncronize the Screen. Frames will be dropped. If this Warning is shown often you could ask the moderator to reduce the Quality.</entry>
+  <entry key="241">:صفحه</entry>
+  <entry key="242">كردن نقاشي</entry>
+  <entry key="243">سند</entry>
+  <entry key="244"></entry>
+  <entry key="245">ها فايل</entry>
+  <entry key="246">اعضا</entry>
+  <entry key="247">اصلي سند دانلود</entry>
+  <entry key="248">pdf سند دانلود</entry>
+  <entry key="249">Load Presentation to whiteboard</entry>
+  <entry key="250">بندي پيكره</entry>
+  <entry key="251">موضوع اين كشيدن</entry>
+  <entry key="252">موضوع اين سايز تغيير</entry>
+  <entry key="253">درصد</entry>
+  <entry key="254">مبدا</entry>
+  <entry key="255">اول صفحه به بازگشت</entry>
+  <entry key="256">قبلي صفحه به بازگشت</entry>
+  <entry key="257">بعدي صفحه به رفتن</entry>
+  <entry key="258">آخر صفحه به رفتن</entry>
+  <entry key="259">-- زوم</entry>
+  <entry key="260">++ زوم</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">موقعيت</entry>
+  <entry key="264">شناسه</entry>
+  <entry key="265">راهنما</entry>
+  <entry key="266">موقعيت</entry>
+  <entry key="267">راهنما</entry>
+  <entry key="268">رساني بروز آخرين</entry>
+  <entry key="269">توسط شده روز به</entry>
+  <entry key="270">تفسير</entry>
+  <entry key="271">بها</entry>
+  <entry key="272">مبدا</entry>
+  <entry key="273">كاربر</entry>
+  <entry key="274">سازمان از كاربر حذف</entry>
+  <entry key="275">حذف</entry>
+  <entry key="276">This user is already member of this organisation.</entry>
+  <entry key="277">خبر</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">كنفرانس به بازگشت</entry>
+  <entry key="280">كنفرانس تالار به بازگشت</entry>
+  <entry key="281">پشتيباني و همكاري</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">!اشكال يك ضبط</entry>
+  <entry key="285">بيشتر</entry>
+  <entry key="286">Project website (http://openmeetings.apache.org/)</entry>
+  <entry key="287">User mailing list (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember Login</entry>
+  <entry key="289">محتوا</entry>
+  <entry key="290">من خانگي صفحه</entry>
+  <entry key="291">My Scheduled Meetings</entry>
+  <entry key="292">My Scheduled Events</entry>
+  <entry key="293">همگاني گفتگوي</entry>
+  <entry key="294">همگاني گفتگو</entry>
+  <entry key="295">همگاني وقايع</entry>
+  <entry key="296">خصوصي وقايع</entry>
+  <entry key="297">همگاني محتوا</entry>
+  <entry key="298">خصوصي محتواي</entry>
+  <entry key="299">شخصي محتواي</entry>
+  <entry key="300"></entry>
+  <entry key="301">مديريت</entry>
+  <entry key="302">مديريت درخواست</entry>
+  <entry key="303">سنجي نظر</entry>
+  <entry key="304">فايل يك انتخاب</entry>
+  <entry key="305">تنظيمات</entry>
+  <entry key="306">دوربين و ميكروفن تنظيمات</entry>
+  <entry key="307">مانيتور صفحه تنظيمات</entry>
+  <entry key="308">خروج</entry>
+  <entry key="309">اتاق به بازگشت</entry>
+  <entry key="310">خروج</entry>
+  <entry key="311">ايد؟كرده فراموش را خودعبور رمز</entry>
+  <entry key="312">Reset Password</entry>
+  <entry key="313">ايميل توسط</entry>
+  <entry key="314">By Login</entry>
+  <entry key="315">شما ايميل</entry>
+  <entry key="316">Your Login</entry>
+  <entry key="317">Send Mail with reset Link</entry>
+  <entry key="318">No such email address was found. Make sure you enter the same email address you used to create your account.</entry>
+  <entry key="319">Please enter either a Mail or a Username</entry>
+  <entry key="320">There is no User connected to this Username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address, please check your mailbox. If you still have not received a email, please adjust your email spam settings and resend confirmation email.</entry>
+  <entry key="322">خطا</entry>
+  <entry key="323">پيام</entry>
+  <entry key="324">Invalid Hash. No User found.</entry>
+  <entry key="325">Reset Your Password</entry>
+  <entry key="326">ارتباط قطع</entry>
+  <entry key="327">عبور رمز تغيير</entry>
+  <entry key="328">جديد عبور رمز</entry>
+  <entry key="329">عبور رمز مجدد ورود</entry>
+  <entry key="330">The Passwords you entered weren't identical.</entry>
+  <entry key="331">4 از بيش يا كاراكتر 4</entry>
+  <entry key="332">Password set. You can login now.</entry>
+  <entry key="333">ادامه</entry>
+  <entry key="334">Unkown Error. Please report this to your Service-Team.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">صحيح نا عبور رمز</entry>
+  <entry key="337">Successfully Logged out</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">صحيح نا ايميل</entry>
+  <entry key="340">كنيد وارد را ديگري فايل نام لطفا است تكراري فايل نام</entry>
+  <entry key="341">است كوتاه خيلي فايل نام</entry>
+  <entry key="342">كنيد ذخيره توانيد نمي را آدرس</entry>
+  <entry key="343">User added but you need to assign this User to an Organisation, otherwise he won't be able to sign-in.</entry>
+  <entry key="344">جديد ضبط</entry>
+  <entry key="345">No Field found with this FieldId.</entry>
+  <entry key="346">No Label found for that Field.</entry>
+  <entry key="347">Admin Authorization required</entry>
+  <entry key="348">Language-Editor</entry>
+  <entry key="349">زبان</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">You did only delete the Label NOT the Field! You cannot delete the Field, it may has Labels in other Languages.</entry>
+  <entry key="358">Invalid Labelid. The FieldLanguagesvalues_Id cannot be found in the database.</entry>
+  <entry key="359">You cannot delete this Field. You can only delete Labels NOT Fields. There is no Label loaded at the moment, wether it is not selected any Field or there is no Label for this Language for that Field defined.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">You need to logout to see any changes.</entry>
+  <entry key="362">جديد زبان افزودن</entry>
+  <entry key="363">زبان حذف</entry>
+  <entry key="364">جديد زبان افزودن</entry>
+  <entry key="365">نام</entry>
+  <entry key="366">زبان افزودن</entry>
+  <entry key="367">پشتيبان</entry>
+  <entry key="368">اولين به بازگشت</entry>
+  <entry key="369">قبلي به بازگشت</entry>
+  <entry key="370">بعدي به رفتن</entry>
+  <entry key="371">آخر به رفتن</entry>
+  <entry key="372">كاربر گفتگوي (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">صدا كردن خاموش/روشن</entry>
+  <entry key="374">سيستم</entry>
+  <entry key="375">شما تنظيمات</entry>
+  <entry key="376">سلام</entry>
+  <entry key="377">شما نمودار ويرايش</entry>
+  <entry key="378">:جديد پيام</entry>
+  <entry key="379">جديد تصوير گذاري بار</entry>
+  <entry key="380">Userdata - Export</entry>
+  <entry key="381">بندي طبقه همه</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">بندي طبقه بوسيله</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">كاربر داده</entry>
+  <entry key="386">كاربر انتخاب</entry>
+  <entry key="387">اهميت</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">فايل انتخاب</entry>
+  <entry key="391">از ذخيره</entry>
+  <entry key="392">:نام</entry>
+  <entry key="393">:توضيح</entry>
+  <entry key="394">ذخيره</entry>
+  <entry key="395">بایگانی</entry>
+  <entry key="396">Recordings Viewer</entry>
+  <entry key="397">Recordings of public and private Rooms</entry>
+  <entry key="398">:كاربر</entry>
+  <entry key="399">:پيوستن</entry>
+  <entry key="400"></entry>
+  <entry key="401">:اطاق اين در كاربر</entry>
+  <entry key="402">بيني باز</entry>
+  <entry key="403">This Room is Full. Try again in a few minutes.</entry>
+  <entry key="404">click on a room to get details</entry>
+  <entry key="405">Chat with the users in this Room:</entry>
+  <entry key="406">:اطاق</entry>
+  <entry key="407">:اطاق در كاربر</entry>
+  <entry key="408">:ابتدا از</entry>
+  <entry key="409">play recording</entry>
+  <entry key="410">:طول</entry>
+  <entry key="411">:تاريخ</entry>
+  <entry key="412">Recorder Mode! You cannot change any values, this is a recorded File!</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">مكث/</entry>
+  <entry key="415">ضبط شروع</entry>
+  <entry key="416">ضبط توقف</entry>
+  <entry key="417">:ضبط</entry>
+  <entry key="418">There is already somebody recording at the moment:</entry>
+  <entry key="419">كاربر توسط!ضبط</entry>
+  <entry key="420">انصراف</entry>
+  <entry key="421">Recording will be canceled and not saved.</entry>
+  <entry key="422">مطالب خلاصه</entry>
+  <entry key="423">شود ضبط مطالب خلاصه و شود بسته پنجره اين</entry>
+  <entry key="424">خط رنگ تغيير</entry>
+  <entry key="425">رنگ انتخاب</entry>
+  <entry key="426">خط رنگ ساختن توانايي عدم /توانايي</entry>
+  <entry key="427">رنگ سطل ساختن توانايي عدم/توانايي</entry>
+  <entry key="428">خط رنگ ساختن توانايي عدم/توانايي</entry>
+  <entry key="429">خط ضخامت تغيير</entry>
+  <entry key="430">بستن</entry>
+  <entry key="431">فونت تغيير</entry>
+  <entry key="432">ضبط حذف</entry>
+  <entry key="433">مهمان</entry>
+  <entry key="434">:بوسيله</entry>
+  <entry key="435">نام</entry>
+  <entry key="436">اطاق</entry>
+  <entry key="437">تاريخ</entry>
+  <entry key="438">انصراف</entry>
+  <entry key="439">شروع</entry>
+  <entry key="440">نام</entry>
+  <entry key="441">تاريخ</entry>
+  <entry key="442">سرور حذف</entry>
+  <entry key="443"></entry>
+  <entry key="444">پيام ارسال</entry>
+  <entry key="445">احساسات</entry>
+  <entry key="446">احساسات</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">بصري و سمعي</entry>
+  <entry key="449">سمعي فقط</entry>
+  <entry key="450">بصري فقط</entry>
+  <entry key="451">بصري نه/سمعي نه</entry>
+  <entry key="452">بصري نه/سمعي نه</entry>
+  <entry key="453">دوشنبه</entry>
+  <entry key="454">شنبه سه</entry>
+  <entry key="455">شنبه چهار</entry>
+  <entry key="456">شنبه پنج</entry>
+  <entry key="457">جمعه</entry>
+  <entry key="458">شنبه</entry>
+  <entry key="459">شنبه يك</entry>
+  <entry key="460">شنبه دو</entry>
+  <entry key="461">شنبه سه</entry>
+  <entry key="462">شنبه چهار</entry>
+  <entry key="463">شنبه پنج</entry>
+  <entry key="464">جمعه</entry>
+  <entry key="465">شنبه</entry>
+  <entry key="466">شنبه يك</entry>
+  <entry key="467">هفتگي تقويم</entry>
+  <entry key="468">هفتگي تقويم</entry>
+  <entry key="469">ژانويه</entry>
+  <entry key="470">فوريه</entry>
+  <entry key="471">مارس</entry>
+  <entry key="472">آوريل</entry>
+  <entry key="473">مه</entry>
+  <entry key="474">ژوئن</entry>
+  <entry key="475">جولاي</entry>
+  <entry key="476">آگوست</entry>
+  <entry key="477">سپتامبر</entry>
+  <entry key="478">اكتبر</entry>
+  <entry key="479">نوامبر</entry>
+  <entry key="480">دسامبر</entry>
+  <entry key="481">تقويم</entry>
+  <entry key="482">كنندگان شركت</entry>
+  <entry key="483">Show Layout Settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">عرض/طول</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderation-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">ساختن قادر</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | Height</entry>
+  <entry key="493">Files,Chat,Participants - Container</entry>
+  <entry key="494">ساختن قادر</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">عرض/طول</entry>
+  <entry key="497">The Moderator has left the Room. No one is presenting at the Moment. You could apply for Moderation or wait.</entry>
+  <entry key="498">There is no Moderator in this Room, but there are some Participants. You have to apply for Moderation or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">كاربر براي پيام</entry>
+  <entry key="502">:پيام</entry>
+  <entry key="503">:كنيد كليك كنندگان شركت با گفتگو براي لينك اين در</entry>
+  <entry key="504">كنيد كليك را اينجا اطاق به ورود براي</entry>
+  <entry key="505">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">:شما كاربر داده</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">:عبور رمز</entry>
+  <entry key="510">:ايميل</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password:</entry>
+  <entry key="515">كنيد كليك اينجا جديد عبور رمز ورود براي</entry>
+  <entry key="516">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">(dd.mm.yyyy)24/12/2001 مثال عنوان به كنيد وارد صحيح تاريخ يك لطفا</entry>
+  <entry key="519">name@mail.com مثال عنوان به كنيد وارد صحيح ايميل يك لطفا</entry>
+  <entry key="520">Please enter a Float-Number, for example 1.00</entry>
+  <entry key="521">100 مثال عنوان به كنيد وارد عدد يك لطفا</entry>
+  <entry key="522">++490123123123مثال عنوان به كنيد وارد صحيح تلفن يك لطفا</entry>
+  <entry key="523">(hh:mm)12:23 مثال عنوان به كنيد وارد صحيح زمان يك لطفا</entry>
+  <entry key="524">عبور رمز حفاظت</entry>
+  <entry key="525">عبور رمز</entry>
+  <entry key="526">دوره اعتبار</entry>
+  <entry key="527">ناپذير پايان</entry>
+  <entry key="528">دوره يك</entry>
+  <entry key="529">اول دوره</entry>
+  <entry key="530">:از اعتبار</entry>
+  <entry key="531">:تا اعتبار</entry>
+  <entry key="532">آنلاين كلاس به دعوت</entry>
+  <entry key="533">Not Invitation availible for this Invitation-Code</entry>
+  <entry key="534">The Invitation was already used. This type of Invitation cannot be re-used.</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">:عبور رمز</entry>
+  <entry key="537">Check Password</entry>
+  <entry key="538">Invalid Password!</entry>
+  <entry key="539">گذاشتن اجرا به</entry>
+  <entry key="540">بصري /سمعي بودن مطابق</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
new file mode 100644
index 0000000..43be712
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferenssi</entry>
+  <entry key="2">Kokous</entry>
+  <entry key="3">Tapahtumat</entry>
+  <entry key="4">Asetukset</entry>
+  <entry key="5">Profiili</entry>
+  <entry key="6">Ylläpito</entry>
+  <entry key="7">Pysäytä</entry>
+  <entry key="8">Nauhoita</entry>
+  <entry key="9">Ei tiedostoa saatavilla</entry>
+  <entry key="10">Opettajan nauhoitus</entry>
+  <entry key="11">Aktiiviset käyttäjät:</entry>
+  <entry key="12">Aloita konferenssi</entry>
+  <entry key="13">Oma nimi</entry>
+  <entry key="14">Videokonferenssi</entry>
+  <entry key="15">Lähetä tiedosto</entry>
+  <entry key="16">Päivitä lista</entry>
+  <entry key="17">Päätiedostoon</entry>
+  <entry key="18">uusi kysely</entry>
+  <entry key="19">Uusi kysely konferenssiin.</entry>
+  <entry key="20">Kysymys:</entry>
+  <entry key="21">Kyselyn tyyppi:</entry>
+  <entry key="22">Luo</entry>
+  <entry key="23">Tiedoksi: Jokainen paikalla oleva käyttäjä vastaanottaa viestin kyselystä.</entry>
+  <entry key="24">Luo kysely</entry>
+  <entry key="25">Peruuta</entry>
+  <entry key="26">Kyllä/Ei</entry>
+  <entry key="27">Numeerinen 1-10</entry>
+  <entry key="28">Kysely</entry>
+  <entry key="29">Sinun täytyy olla moderaattori luodaksesi kysymyksen.</entry>
+  <entry key="30">Äänesi on rekisteröity.</entry>
+  <entry key="31">Olet jo äänestänyt tässä kysymyksessä.</entry>
+  <entry key="32">Äänestä!</entry>
+  <entry key="33">Vastauksesi:</entry>
+  <entry key="34">Kyllä</entry>
+  <entry key="35">Ei</entry>
+  <entry key="36">haluaa tietää:</entry>
+  <entry key="37">Kyselyn tulokset</entry>
+  <entry key="38">Kysymys:</entry>
+  <entry key="39">Tulokset:</entry>
+  <entry key="40">Vastaukset:</entry>
+  <entry key="41">Kyselyitä ei ole aloitettu.</entry>
+  <entry key="42">Äänestä!</entry>
+  <entry key="43">Kokous (enintään 4 osanottajaa)</entry>
+  <entry key="44">Konferenssi (enintään 50 osanottajaa)</entry>
+  <entry key="45">Tyyppi</entry>
+  <entry key="46">Vapaita paikkoja</entry>
+  <entry key="47">On jo valittu</entry>
+  <entry key="48">astu sisään</entry>
+  <entry key="49">Moderaattori on lähtenyt kokouksesta.</entry>
+  <entry key="50">Järjestelmän viesti</entry>
+  <entry key="51">Valitse laite</entry>
+  <entry key="52">Valitse web-kamera:</entry>
+  <entry key="53">Valitse mikrofoni:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">peruuta</entry>
+  <entry key="56">Sinun täytyy yhdistä uudelleen.</entry>
+  <entry key="57">Muokkaa asetuksia.</entry>
+  <entry key="58">Kurssi:</entry>
+  <entry key="59">Kieli:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">peruuta</entry>
+  <entry key="62">Tyhjää kirjoitustaulu</entry>
+  <entry key="63">Haluatko tyhjentää kirjoitustaulun ennen uuden kuvan lisäämistä?</entry>
+  <entry key="64">Älä kysy uudestaan</entry>
+  <entry key="65">ei</entry>
+  <entry key="66">Muokkaa asetuksia</entry>
+  <entry key="67">Kysy varmistus ennen kirjoitustaulun tyhjäystä.</entry>
+  <entry key="68">Käyttäjätiedot</entry>
+  <entry key="69">Tyhjää piirtoalue</entry>
+  <entry key="70">Peru</entry>
+  <entry key="71">Tee uudestaan</entry>
+  <entry key="72">Valitse objekti</entry>
+  <entry key="73">Teksti</entry>
+  <entry key="74">Piirrä</entry>
+  <entry key="75">Piirrä viiva</entry>
+  <entry key="76">Alleviivaa</entry>
+  <entry key="77">Suorakaide</entry>
+  <entry key="78">Ellipsi</entry>
+  <entry key="79">Nuoli</entry>
+  <entry key="80">poista valittu kohde</entry>
+  <entry key="81">Pyydä moderaattorin oikeutta</entry>
+  <entry key="82">aseta</entry>
+  <entry key="83">peruuta</entry>
+  <entry key="84">Muutu moderaattoriksi</entry>
+  <entry key="85">sulje</entry>
+  <entry key="86">kursivointi</entry>
+  <entry key="87">lihavointi</entry>
+  <entry key="88">ODOTTAA</entry>
+  <entry key="89">Käyttäjä hakee moderaattorin oikeutta:</entry>
+  <entry key="90">hyväksy</entry>
+  <entry key="91">hylkää</entry>
+  <entry key="92">peruuta</entry>
+  <entry key="93">Sending request to following Users</entry>
+  <entry key="94">Hyväksytty</entry>
+  <entry key="95">Hylätty</entry>
+  <entry key="96">Vaihda moderaattoria</entry>
+  <entry key="97">Et ole tämän kurssin moderaattori!</entry>
+  <entry key="98">Moderaattori:</entry>
+  <entry key="99">Tämä huone on täynnä. Yritä myöhemmin uudestaan.</entry>
+  <entry key="100">Ellipsi</entry>
+  <entry key="101">sulje</entry>
+  <entry key="102">syötevirhe</entry>
+  <entry key="103">vähintään 4 merkkiä; isoilla kirjaimilla on merkitystä!</entry>
+  <entry key="104">salasanan täytyy olla vähintään 4 merkkiä pitkä</entry>
+  <entry key="105">Tunnus on jo varattu</entry>
+  <entry key="106">Sähköpostiosoite on jo rekisteröity</entry>
+  <entry key="107">Järjestelmävirhe, ota yhteyttä ylläpitoon</entry>
+  <entry key="108">Kirjautuminen</entry>
+  <entry key="109">Käyttäjä:</entry>
+  <entry key="110">Salasana:</entry>
+  <entry key="111">Kieli</entry>
+  <entry key="112">Kirjaudu</entry>
+  <entry key="113">Rekisteröinti</entry>
+  <entry key="114">Käyttäjätunnus:</entry>
+  <entry key="115">Salasana:</entry>
+  <entry key="116">Uudestaan:</entry>
+  <entry key="117">Etunimi:</entry>
+  <entry key="118">Sukunimi:</entry>
+  <entry key="119">Sähköposti:</entry>
+  <entry key="120">Maa:</entry>
+  <entry key="121">Rekisteröidy</entry>
+  <entry key="122">Peruuta</entry>
+  <entry key="123">Etkö ole jäsen?</entry>
+  <entry key="124">Koti</entry>
+  <entry key="125">Users</entry>
+  <entry key="126">Ryhmät</entry>
+  <entry key="127">Organisaatiot</entry>
+  <entry key="128">Kokoushuoneet</entry>
+  <entry key="129">julkinen</entry>
+  <entry key="130">Organisaatio</entry>
+  <entry key="131">astu sisään</entry>
+  <entry key="132">Tunnus</entry>
+  <entry key="133">Salasana</entry>
+  <entry key="134">Uudestaan</entry>
+  <entry key="135">Etunimi</entry>
+  <entry key="136">Sukunimi</entry>
+  <entry key="137">Sähköposti</entry>
+  <entry key="138">Synnyinaika</entry>
+  <entry key="139">Katuosoite</entry>
+  <entry key="140">Postinumero/Toimipaikka</entry>
+  <entry key="141">Maa</entry>
+  <entry key="142">Osoitteen lisätieto</entry>
+  <entry key="143">Käyttäjätieto</entry>
+  <entry key="144">tallenna</entry>
+  <entry key="145">Tallenna</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Tunnus</entry>
+  <entry key="148">Etunimi</entry>
+  <entry key="149">Sukunimi</entry>
+  <entry key="150">näytä seuraava</entry>
+  <entry key="151">näytä edellinen</entry>
+  <entry key="152">poista tietue</entry>
+  <entry key="153">peruuta</entry>
+  <entry key="154">poista</entry>
+  <entry key="155">uusi tietue</entry>
+  <entry key="156">päivitä tietue</entry>
+  <entry key="157">poista tietue</entry>
+  <entry key="158">tila</entry>
+  <entry key="159">pois käytöstä</entry>
+  <entry key="160">käytössä</entry>
+  <entry key="161">Organisaatiot</entry>
+  <entry key="162">kalenteri</entry>
+  <entry key="163">sulje</entry>
+  <entry key="164">Organisaatio-ID</entry>
+  <entry key="165">Nimi</entry>
+  <entry key="166">Käyttäjä</entry>
+  <entry key="167">Moderaattori</entry>
+  <entry key="168">Ylläpitäjä</entry>
+  <entry key="169">käyttäjätaso</entry>
+  <entry key="170">Organisaatio</entry>
+  <entry key="171">nimi</entry>
+  <entry key="172">uusi organisaatio</entry>
+  <entry key="173">uusi organisaatio</entry>
+  <entry key="174">peruuta</entry>
+  <entry key="175">lisää</entry>
+  <entry key="176">poista organisaatio</entry>
+  <entry key="177">käyttäjä</entry>
+  <entry key="178">uusi käyttäjä</entry>
+  <entry key="179">poista käyttäjä</entry>
+  <entry key="180">uusi käyttäjä</entry>
+  <entry key="181">etsi käyttäjää</entry>
+  <entry key="182">haku</entry>
+  <entry key="183">käyttäjä</entry>
+  <entry key="184">Organisaatio</entry>
+  <entry key="185">hyväksy</entry>
+  <entry key="186">Konferenssihuoneet</entry>
+  <entry key="187">Konferenssihuoneet</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nimi</entry>
+  <entry key="190">julkinen</entry>
+  <entry key="191">Organisaatiot</entry>
+  <entry key="192">Kokoushuoneet</entry>
+  <entry key="193">Nimi</entry>
+  <entry key="194">Tyyppi</entry>
+  <entry key="195">Julkinen</entry>
+  <entry key="196">Kommentti</entry>
+  <entry key="197">tallenna ja vie</entry>
+  <entry key="198">lataa</entry>
+  <entry key="199">tallenna nimellä</entry>
+  <entry key="200">Tiedostonimi</entry>
+  <entry key="201">tiedostonimi</entry>
+  <entry key="202">peruuta</entry>
+  <entry key="203">tallenna</entry>
+  <entry key="204">Virhe</entry>
+  <entry key="205">ladataan</entry>
+  <entry key="206">objektia ladattu</entry>
+  <entry key="207">synkronisoidaan, odottavat asiakkaat:</entry>
+  <entry key="208">Ladataan kuvadataa</entry>
+  <entry key="209">synkronisoidaan, odottavat asiakkaat:</entry>
+  <entry key="210">tyhjää piirtoalue</entry>
+  <entry key="211">tyhjää piirtoalue, koko piirtoalue tyhjennetään</entry>
+  <entry key="212">Varmista ennen tiedoston lataamista</entry>
+  <entry key="213">Lähetä kutsu</entry>
+  <entry key="214">Lähetä kutsu</entry>
+  <entry key="215">Aihe</entry>
+  <entry key="216">Vastaanottaja</entry>
+  <entry key="217">Viesti</entry>
+  <entry key="218">Lähetä</entry>
+  <entry key="219">peruuta</entry>
+  <entry key="220">lähetä</entry>
+  <entry key="221">Käyttäjätieto</entry>
+  <entry key="222">Lempinimesi tähän konferenssiin</entry>
+  <entry key="223">Lempinimi</entry>
+  <entry key="224">Etunimi</entry>
+  <entry key="225">Sukunimi</entry>
+  <entry key="226">Sähköposti</entry>
+  <entry key="227">Kieli</entry>
+  <entry key="228">lisää</entry>
+  <entry key="229">Ladataan</entry>
+  <entry key="230">Ladataan, ole hyvä ja odota!</entry>
+  <entry key="231">Väärä salasana</entry>
+  <entry key="232">Anna kaksi samaa salasanaa joissa vähintään 6 merkkiä</entry>
+  <entry key="233">Epäkelpo sähköposti</entry>
+  <entry key="234">Annoit epäkelvon sähköpostiosoitteen</entry>
+  <entry key="235">Rekisteröinti onnistui</entry>
+  <entry key="236">Tilisi on luotu, voit kirjautua sisään.</entry>
+  <entry key="237">Et voi jakaa ruutua tällä hetkellä, koska joku muu jakaa jo omaa ruutuaan.</entry>
+  <entry key="238">Jakaminen kielletty</entry>
+  <entry key="239">Jaa ruutusi</entry>
+  <entry key="240">Kaistanleveys ei riitä: Et pysty synkronisoimaan ruutua. Ruudunpäivityksiä saattaa jäädä pois. Jos tämä ilmoitus toistuu usein, voit pyytää moderaattoria pienentämään kuvan laatua.</entry>
+  <entry key="241">Käyttäjän ruutu:</entry>
+  <entry key="242">Maalaa</entry>
+  <entry key="243">Dokumentti</entry>
+  <entry key="244">Keskustelu</entry>
+  <entry key="245">Tiedostot</entry>
+  <entry key="246">Jäsenet</entry>
+  <entry key="247">Lataa alkuperäinen dokumentti</entry>
+  <entry key="248">Lataa pdf-dokumentti</entry>
+  <entry key="249">Lataa esitys piirtoalueelle</entry>
+  <entry key="250">Asetukset</entry>
+  <entry key="251">Raaha tätä objektia</entry>
+  <entry key="252">Muuta objektin kokoa</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Mene ensimmäiselle sivulle</entry>
+  <entry key="256">Mene edelliselle sivulle</entry>
+  <entry key="257">Mene seuraavalle sivulle</entry>
+  <entry key="258">Mene viimeiselle sivulle</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herra</entry>
+  <entry key="262">Rouva</entry>
+  <entry key="263">Asetukset</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Avain</entry>
+  <entry key="266">Asetukset</entry>
+  <entry key="267">Avain</entry>
+  <entry key="268">edellinen päivitys</entry>
+  <entry key="269">päivityksen tekijä</entry>
+  <entry key="270">kommentti</entry>
+  <entry key="271">Arvo</entry>
+  <entry key="272">/</entry>
+  <entry key="273">Käyttäjät</entry>
+  <entry key="274">poista käyttäjä organisaatiosta</entry>
+  <entry key="275">poista</entry>
+  <entry key="276">Käyttäjä on jo tämän organisaation jäsen.</entry>
+  <entry key="277">Uutiset</entry>
+  <entry key="278">Pikalinkit</entry>
+  <entry key="279">Mene konferenssiin</entry>
+  <entry key="280">Mene auditorioon</entry>
+  <entry key="281">Apua ja tukea</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Ilmoita bugi!</entry>
+  <entry key="285">lisää</entry>
+  <entry key="286">Projektin web-sivut (http://openmeetings.apache.org)</entry>
+  <entry key="287">Käyttäjien postituslista (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Muista kirjautuminen</entry>
+  <entry key="289">Sisältö</entry>
+  <entry key="290">Oma sivu</entry>
+  <entry key="291">Tulevat kokoukset</entry>
+  <entry key="292">Omat tulevat kokoukset</entry>
+  <entry key="293">Julkiset kokoukset</entry>
+  <entry key="294">Yksityiset kokoukset</entry>
+  <entry key="295">Julkiset tapahtumat</entry>
+  <entry key="296">Yksityiset tapahtumat</entry>
+  <entry key="297">Julkinen sisältö</entry>
+  <entry key="298">Yksityinen sisältö</entry>
+  <entry key="299">Henkilökohtainen sisältö</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderointi</entry>
+  <entry key="302">Hae moderointioikeutta</entry>
+  <entry key="303">Kyselyt</entry>
+  <entry key="304">Valitse tiedosto</entry>
+  <entry key="305">Asetukset</entry>
+  <entry key="306">Kamera ja mikrofoni</entry>
+  <entry key="307">Piirtoalueen asetukset</entry>
+  <entry key="308">Poistu</entry>
+  <entry key="309">Takaisin huoneisiin</entry>
+  <entry key="310">Poistu</entry>
+  <entry key="311">Unohditko salasanasi?</entry>
+  <entry key="312">Nollaa salasana</entry>
+  <entry key="313">Sähköpostilla</entry>
+  <entry key="314">Käyttäjätunnuksella</entry>
+  <entry key="315">Sähköpostisi</entry>
+  <entry key="316">Tunnuksesi</entry>
+  <entry key="317">Lähetä sähköposti nollauslinkillä</entry>
+  <entry key="318">Sähköpostiosoitetta ei löytynyt. Varmista että annoit saman osoitteen kuin mitä käytit rekisteröityessäsi.</entry>
+  <entry key="319">Anna sähköpostiosoite tai käyttäjätunnus</entry>
+  <entry key="320">Käyttäjätunnusta ei ole</entry>
+  <entry key="321">Linkin sisältävä sähköposti on lähetetty osoitteeseesi, ole hyvä ja tarkista sähköpostisi. Jos et ole vielä vastaanottanut viestiä, tarkista roskapostiasetuksesi ja yritä uudestaan.</entry>
+  <entry key="322">Virhe</entry>
+  <entry key="323">Viesti</entry>
+  <entry key="324">Epäkelpo hash. Käyttäjää ei löydy.</entry>
+  <entry key="325">Nollaa salasanasi</entry>
+  <entry key="326">Kirjaudu</entry>
+  <entry key="327">vaihda salasana</entry>
+  <entry key="328">uusi salasana</entry>
+  <entry key="329">salasana uudestaan</entry>
+  <entry key="330">Antamasi salasanat eivät täsmänneet.</entry>
+  <entry key="331">4 merkkiä tai pidempi; isoilla kirjaimilla on merkitystä!</entry>
+  <entry key="332">Salasana asetettu. Voit nyt kirjautua sisään.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Tuntematon virhe. Ole hyvä ja ilmoita virheestä tukitiimillesi.</entry>
+  <entry key="335">Käyttäjää ei löydy</entry>
+  <entry key="336">Epäkelpo salasana</entry>
+  <entry key="337">Uloskirjautuminen onnistui</entry>
+  <entry key="338">Rekisteröinti on poissa käytöstä.</entry>
+  <entry key="339">Epäkelpo sähköposti</entry>
+  <entry key="340">saman niminen tiedosto on jo olemassa, valitse toinen nimi</entry>
+  <entry key="341">tiedostonimi liian lyhyt</entry>
+  <entry key="342">Ei voitu tallentaa osoitetta</entry>
+  <entry key="343">Käyttäjä lisätty, mutta sinun täytyy lisätä tämä käyttäjä johonkin organisaatioon jotta hän voi kirjautua sisään.</entry>
+  <entry key="344">Uusi tietue</entry>
+  <entry key="345">Kenttää ei löytynyt kentän id:llä.</entry>
+  <entry key="346">Kentälle ei löydy kuvausta.</entry>
+  <entry key="347">Ylläpitäjän oikeudet tarvitaan.</entry>
+  <entry key="348">Kielien muokkaus</entry>
+  <entry key="349">Kieli</entry>
+  <entry key="350">Nimi-ID</entry>
+  <entry key="351">Kuvaus-Nimi</entry>
+  <entry key="352">Arvo</entry>
+  <entry key="353">Kentän arvot</entry>
+  <entry key="354">Kuvaus</entry>
+  <entry key="355">Arvo</entry>
+  <entry key="356">Kuvaus-ID</entry>
+  <entry key="357">Poistit pelkän kuvauksen etkä kenttää! Et voi poistaa kenttää, sillä voi olla kuvauksia muilla kielillä.</entry>
+  <entry key="358">Epäkelpo kuvaus-ID. Kenttää FieldLanguagesvalues_Id ei löydy tietokannasta.</entry>
+  <entry key="359">Et voi poistaa tätä kenttää. Voit ainostaa poistaa kuvauksia, et kenttiä. Kuvausta ei ole ladattuna nyt, joko sitä ei ole valittuna mistään kentästä tai tälle kielelle ei ole määritelty kuvauksen mukaista kenttää.</entry>
+  <entry key="360">vie</entry>
+  <entry key="361">Sinun täytyy kirjaudua uudestaan nähdäksesi muutokset.</entry>
+  <entry key="362">Lisää kieli</entry>
+  <entry key="363">poista kieli</entry>
+  <entry key="364">Lisää kieli</entry>
+  <entry key="365">Nimi</entry>
+  <entry key="366">lisää kieli</entry>
+  <entry key="367">Varmuuskopiointi</entry>
+  <entry key="368">mene alkuun</entry>
+  <entry key="369">edellinen</entry>
+  <entry key="370">seuraava</entry>
+  <entry key="371">viimeinen</entry>
+  <entry key="372">käyttäjä puhuu (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">ääni päälle/pois</entry>
+  <entry key="374">Järjestelmä</entry>
+  <entry key="375">Asetuksesi</entry>
+  <entry key="376">hei,</entry>
+  <entry key="377">Muokkaa profiiliasi</entry>
+  <entry key="378">Uudet viestit:</entry>
+  <entry key="379">Lataa uusi kuva</entry>
+  <entry key="380">Käyttäjädata - Vie</entry>
+  <entry key="381">Organisaatioiden täytyy olla jo olemassa!</entry>
+  <entry key="382">aloita vienti</entry>
+  <entry key="383">Organisaation mukaan</entry>
+  <entry key="384">aloita vienti</entry>
+  <entry key="385">Käyttäjädata - Tuo</entry>
+  <entry key="386">valitse users.xml</entry>
+  <entry key="387">tuo</entry>
+  <entry key="388">Vie XML-tiedostoksi - Näitä tiedostoja voidaan käyttää: Projektiin osallistuminen - Toiseen järjestelmään vienti - Varmuuskopiointi - Mukautus - Laita se hakemistoon language seuraavaa asennustasi varten.</entry>
+  <entry key="389">Valitse kielitiedosto tuotavaksi. Valitse oikea kieli valintalistalta! Tämä määrää asetettavan kielen tiedoston nimestä riippumatta!</entry>
+  <entry key="390">tuonti - valitse tiedosto</entry>
+  <entry key="391">Tallenna nimellä</entry>
+  <entry key="392">Nimi:</entry>
+  <entry key="393">Kommentti:</entry>
+  <entry key="394">tallenna</entry>
+  <entry key="395">Nauhoitukset</entry>
+  <entry key="396">Nauhoitusten katselu</entry>
+  <entry key="397">Julkisten ja yksityisten huoneiden nauhoitukset</entry>
+  <entry key="398">Käyttäjät :</entry>
+  <entry key="399">Liittynyt:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Käyttäjiä huoneessa:</entry>
+  <entry key="402">päivitä</entry>
+  <entry key="403">Tämä huone on täynnä. Yritä uudestaan muutaman minuutin kuluttua.</entry>
+  <entry key="404">klikkaa huonetta saadaksesi lisätietoja</entry>
+  <entry key="405">Keskustele tämän huoneen käyttäjien kanssa:</entry>
+  <entry key="406">Huone:</entry>
+  <entry key="407">Käyttäjät huoneessa:</entry>
+  <entry key="408">since:</entry>
+  <entry key="409">toista nauhoitus</entry>
+  <entry key="410">Pituus:</entry>
+  <entry key="411">Päivämäärä:</entry>
+  <entry key="412">Nauhoitustila! Et voi muuttaa arvoja, tämä on nauhoitettu tiedosto!</entry>
+  <entry key="413">Toista nauhoitus</entry>
+  <entry key="414">Toista / Keskeytä</entry>
+  <entry key="415">Aloita nauhoitus</entry>
+  <entry key="416">pysäytä nauhoitus</entry>
+  <entry key="417">Nauhoittaa:</entry>
+  <entry key="418">Joku on jo nauhoittamassa tällä hetkellä:</entry>
+  <entry key="419">Nauhoitetaan! Käyttäjä:</entry>
+  <entry key="420">peruuta</entry>
+  <entry key="421">Nauhoitus peruutetaan ja sitä ei tallenneta.</entry>
+  <entry key="422">palaa</entry>
+  <entry key="423">Sulje ikkuna ja jatka nauhoitusta</entry>
+  <entry key="424">muuta viivan väriä</entry>
+  <entry key="425">Valitse väri</entry>
+  <entry key="426">Viivan väri päälle/pois</entry>
+  <entry key="427">muuta täytön väriä</entry>
+  <entry key="428">täyttöväri päälle/pois</entry>
+  <entry key="429">Muuta viivan leveyttä</entry>
+  <entry key="430">sulje</entry>
+  <entry key="431">muuta fontin kokoa</entry>
+  <entry key="432">Poista nauhoitus</entry>
+  <entry key="433">Vieras</entry>
+  <entry key="434">Tehnyt:</entry>
+  <entry key="435">Nimi</entry>
+  <entry key="436">Huone</entry>
+  <entry key="437">Aika</entry>
+  <entry key="438">peruuta</entry>
+  <entry key="439">aloita</entry>
+  <entry key="440">Nimi</entry>
+  <entry key="441">Päivämäärä</entry>
+  <entry key="442">Poista palvelimen keskusteluloki</entry>
+  <entry key="443">Keskustelu</entry>
+  <entry key="444">lähetä viesti</entry>
+  <entry key="445">Hymiöt</entry>
+  <entry key="446">Hymiöt</entry>
+  <entry key="447">Valitse julkaistavat laitteet</entry>
+  <entry key="448">Ääni ja video</entry>
+  <entry key="449">Vain ääni</entry>
+  <entry key="450">Vain video</entry>
+  <entry key="451">Ei ääntä/videota (kiinteä kuva)</entry>
+  <entry key="452">Ääntä/kuvaa tietokoneelta ei julkaista. Profiilikuvasi näytetään sen sijaan. Valitse tämä asetus jos sinulla on ongelmia yhteytesi kanssa tai yhteytesi on erittäin hidas.</entry>
+  <entry key="453">MA</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">KE</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">PE</entry>
+  <entry key="458">LA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Maanantai</entry>
+  <entry key="461">Tiistai</entry>
+  <entry key="462">Keskiviikko</entry>
+  <entry key="463">Torstai</entry>
+  <entry key="464">Perjantai</entry>
+  <entry key="465">Lauantai</entry>
+  <entry key="466">Sunnuntai</entry>
+  <entry key="467">KV</entry>
+  <entry key="468">Kalenteriviikko</entry>
+  <entry key="469">Tammikuu</entry>
+  <entry key="470">Helmikuu</entry>
+  <entry key="471">Maaliskuu</entry>
+  <entry key="472">Huhtikuu</entry>
+  <entry key="473">Toukokuu</entry>
+  <entry key="474">Kesäkuu</entry>
+  <entry key="475">Heinäkuu</entry>
+  <entry key="476">Elokuu</entry>
+  <entry key="477">Syyskuu</entry>
+  <entry key="478">Lokakuu</entry>
+  <entry key="479">Marraskuu</entry>
+  <entry key="480">Joulukuu</entry>
+  <entry key="481">Kalenteri</entry>
+  <entry key="482">Osanottajat</entry>
+  <entry key="483">Näytä asettelun asetukset</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Leveys | Korkeus</entry>
+  <entry key="486">Video-Säiliö</entry>
+  <entry key="487">Moderaatio-Säiliö</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Piirtoalue-Säiliö</entry>
+  <entry key="490">Päällä</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Leveys | Korkeus</entry>
+  <entry key="493">Tiedostot,Keskustelu,Osanottajat - Säiliö</entry>
+  <entry key="494">Päällä</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Leveys | Korkeus</entry>
+  <entry key="497">Moderaattori on lähtenyt huoneesta, kukaan ei ole esittäjänä tällä hetkellä. Voit hakea moderaattorin oikeuksia tai odottaa.</entry>
+  <entry key="498">Tässä huoneessa on muutama osanottaja mutta ei moderaattoria. Voit hakea moderaattorin oikeuksia tai odottaa.</entry>
+  <entry key="499">{0} palaute</entry>
+  <entry key="500">{0} - Kutsu</entry>
+  <entry key="501">Viesti käyttäjältä:</entry>
+  <entry key="502">Viesti:</entry>
+  <entry key="503">Käytä tätä linkkiä ottaaksesi osaa kokoukseen:</entry>
+  <entry key="504">Klikkaa tästä liittyäksesi huoneeseen</entry>
+  <entry key="505">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="506">{0} Rekisteröinti</entry>
+  <entry key="507">Käyttäjätietosi:</entry>
+  <entry key="508">Tunnus:</entry>
+  <entry key="509">Salasana:</entry>
+  <entry key="510">Sähköposti:</entry>
+  <entry key="511">{0}-Tiimi</entry>
+  <entry key="512">{0} Rekisteröinti</entry>
+  <entry key="513">{0} - Salasanan nollaus</entry>
+  <entry key="514">Käytä tätä linkkiä syöttääksesi uuden salasanan:</entry>
+  <entry key="515">Klikkaa tästä syöttääksesi uuden salasanan</entry>
+  <entry key="516">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="517">{0} Salasanan nollaus</entry>
+  <entry key="518">Anna päivämäärä muodossa pp.kk.vvvv (esim. 24.12.2009)</entry>
+  <entry key="519">Anna toimiva sähköpostiosoite, muodossa nimi@mail.com</entry>
+  <entry key="520">Anna liukuluku, esim. 1.00</entry>
+  <entry key="521">Anna kokonaisluku, esim. 100</entry>
+  <entry key="522">Anna puhelinnumero, esim. +358501234567</entry>
+  <entry key="523">Anna kellonaika, esim. 12:23 (tt:mm)</entry>
+  <entry key="524">Salasanasuojaus</entry>
+  <entry key="525">Salasana</entry>
+  <entry key="526">Voimassaoloaika</entry>
+  <entry key="527">Päättymätön</entry>
+  <entry key="528">Aikaväli</entry>
+  <entry key="529">Kertakäyttöinen</entry>
+  <entry key="530">Voimassa alkaen:</entry>
+  <entry key="531">Voimassa kunnes:</entry>
+  <entry key="532">Kutsu {0}iin</entry>
+  <entry key="533">Kutsua ei ole saatavilla antamallesi kutsukoodille</entry>
+  <entry key="534">Kutsu on jo käytetty. Kutsua ei voi uudelleenkäyttää.</entry>
+  <entry key="535">Kutsu ei ole kelvollinen.</entry>
+  <entry key="536">Salasana:</entry>
+  <entry key="537">Tarkista salasana</entry>
+  <entry key="538">Väärä salasana!</entry>
+  <entry key="539">Ääni_Kuva</entry>
+  <entry key="540">Synkronisoi ääni/kuva</entry>
+  <entry key="541">Kirjautuminen onnistu, mutta haluamasi istunto ei ole aktiivinen tai ei ole tallennettu palvelimelle. Sinun täytyy hankkia uusi istunto-id ja yrittää kirjautumista uudelleen.</entry>
+  <entry key="542">Istunnon id ei ole kirjautunut tai sillä ei ole ylläpitäjän oikeuksia. SOAP-yhdyskäytävä tarvitsee ylläpitokäyttäjän oikeudet lisätäkseen käyttäjiä.</entry>
+  <entry key="543">Tällä istunnolla ei ole etäkäyttäjän tietoja. Joko kutsuit SOAP-yhdyskäytävää ennen ohjelman käyttämistä tai käytät väärää istunnon id:tä</entry>
+  <entry key="544">Nauhoittaminen on vielä Beta-asteella!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-akseli</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-akseli</entry>
+  <entry key="549">l</entry>
+  <entry key="550">leveys</entry>
+  <entry key="551">k</entry>
+  <entry key="552">korkeus</entry>
+  <entry key="553">Muuta läpinäkyvyyttä</entry>
+  <entry key="554">Avaa selain</entry>
+  <entry key="555">Sulje selain</entry>
+  <entry key="556">Yhteys palvelimeen menetettiin. Sinun täytyy käynnistää sovellus uudelleen ja/tai tarkistaa verkkoyhteytesi.</entry>
+  <entry key="557">Osoitin</entry>
+  <entry key="558">Synkronisoidaan</entry>
+  <entry key="559">Synkronisoidaan käyttäjiä, ole hyvä ja odota</entry>
+  <entry key="560">&lt;u&gt;Lataa SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Lataa PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Lataa JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Lataa PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Lataa TIF&lt;/u&gt;</entry>
+  <entry key="565">Muistutus:</entry>
+  <entry key="566">Kategoria:</entry>
+  <entry key="567">Toisto:</entry>
+  <entry key="568">tyhjä</entry>
+  <entry key="569">Sijainti:</entry>
+  <entry key="570">Alku</entry>
+  <entry key="571">Loppu</entry>
+  <entry key="572">Otsikko:</entry>
+  <entry key="573">Kommentti:</entry>
+  <entry key="574">Kutsu ihmisiä</entry>
+  <entry key="575">Päivittäinen</entry>
+  <entry key="576">Kuukausittainen</entry>
+  <entry key="577">Vuosittainen</entry>
+  <entry key="578">Tapaamisen loppuaika on ennen alkuaikaa!</entry>
+  <entry key="579">Anna otsikko!</entry>
+  <entry key="580">Oikea-Vasen</entry>
+  <entry key="581">Käytä tätä jos tarvitset käänteistä sanajärjestystä (oikealta vasemmalle)</entry>
+  <entry key="582">Paneeli</entry>
+  <entry key="583">Katsele nauhoitettuja kokouksia tai tapahtumia</entry>
+  <entry key="584">Kokous - Perusta konferenssi neljälle käyttäjälle (korkeintaan 16) &lt;br/&gt;kaikilla on oikeus ääneen + kuvaan</entry>
+  <entry key="585">Tapahtuma - Luo konferenssi enintään 200 osanottajalle. &lt;br/&gt;Vain moderaattorilla on kuva ja ääni</entry>
+  <entry key="586">Luo käyttäjiä, huoneita, organisaatioita &lt;br/&gt; + muokkaa asetuksia</entry>
+  <entry key="587">Käyttäjät tällä hetkellä tässä huoneessa</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Tunnis</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Ladataan dokumenttia. Ole hyvä ja odota kunnes kaikki asiakkaat ovat synkronisoineet.</entry>
+  <entry key="592">Lähetys valmis, muunnetaan dokumenttia ...</entry>
+  <entry key="593">Aloita lähetys</entry>
+  <entry key="594">Tiedoston lähetys ja tuonti-ikkuna. Ole hyvä ja valitse tiedosto koneeltasi.</entry>
+  <entry key="595">Peruuta</entry>
+  <entry key="596">Valitse tiedosto</entry>
+  <entry key="597">Yhteydet</entry>
+  <entry key="598">Arvo</entry>
+  <entry key="599">Stream id</entry>
+  <entry key="600">Kirjaudu</entry>
+  <entry key="601">Yhdistetty alkaen</entry>
+  <entry key="602">Huone / Laajuus</entry>
+  <entry key="603">Poista käyttäjä</entry>
+  <entry key="604">Poista käyttäjä</entry>
+  <entry key="605">Haluatko varmasti katkaista tämän asiakkaan yhteyden?&lt;br/&gt; Tämä vain poistaa asiakkaan huoneesta. Asiakas voi kirjautua aina uudestaan.</entry>
+  <entry key="606">Istuntosi on lopetettu ylläpitäjän tai moderaattorin toimesta.</entry>
+  <entry key="607">Puhelin</entry>
+  <entry key="608">Käyttäjä on tämän huoneen moderaattori</entry>
+  <entry key="609">Käyttäjä voi piirtää piirtoalueelle</entry>
+  <entry key="610">(Re) Käynnistä Ääni/Kuva tai muuta laitteiden asetuksia</entry>
+  <entry key="611">Salli tämän käyttäjän piirtää piirtoalueelle</entry>
+  <entry key="612">Estä käyttäjän piirtäminen piirtoalueelle</entry>
+  <entry key="613">Käyttäjät</entry>
+  <entry key="614">Tiedostot</entry>
+  <entry key="615">Piirtoalue</entry>
+  <entry key="616">Keskustelu</entry>
+  <entry key="617">Tunnuksesi on liitetty useampaan organisaatioon. Ole hyvä ja valitse yksi tätä istuntoa varten.</entry>
+  <entry key="618">Tämä huone on täynnä. Ole hyvä ja yritä myöhemmin uudestaan.</entry>
+  <entry key="619">Huoneen tyyppi</entry>
+  <entry key="620">Tapaamishuone</entry>
+  <entry key="621">Palvelimen aika</entry>
+  <entry key="622">{0} - Muistutus</entry>
+  <entry key="623">Viesti käyttäjältä:</entry>
+  <entry key="624">Viesti:</entry>
+  <entry key="625">Klikkaa tätä linkkiä osallistuaksesi kokoukseen:</entry>
+  <entry key="626">Klikkaa tästä liittyäksesi huoneeseen</entry>
+  <entry key="627">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="628">hae sisäisiä</entry>
+  <entry key="629">ulkoiset käyttäjät</entry>
+  <entry key="630">nimen etuliite</entry>
+  <entry key="631">nimi</entry>
+  <entry key="632">Sähköposti</entry>
+  <entry key="633">Varmista poistuminen</entry>
+  <entry key="634">Haluatko varmasti kirjautua ulos?</entry>
+  <entry key="635">Toiminnot</entry>
+  <entry key="636">Esittelyhuone</entry>
+  <entry key="637">Esittelyaika</entry>
+  <entry key="638">Kokousajastin</entry>
+  <entry key="639">Tämä on esittelyhuone. Poistaaksesi tämän varoituksen voit hankkia oman yksityishuoneesi tai perustaa oman palvelimen. Sinut kirjataan ulos automaattisesti hetken kuluttua:</entry>
+  <entry key="640">Moderoitu</entry>
+  <entry key="641">Ole hyvä ja odota kunnes moderaattori on liittynyt huoneeseen. Moderaattori voi olla joko opettaja, ylläpitäjä tai tämän huoneen tekijä.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">Uusi ruudun jako on tulossa käyttäjältä:</entry>
+  <entry key="645">Aloita jakaminen</entry>
+  <entry key="646">Lisää uusi kokous</entry>
+  <entry key="647">Kokoushuone</entry>
+  <entry key="648">Tapahtumahuone</entry>
+  <entry key="649">Moderointi</entry>
+  <entry key="650">Moderoi käyttäjiä</entry>
+  <entry key="651">Moderoi huoneita</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Haluatko asettaa tämän käyttäjän moderaattoriksi tälle organisaatiolle?</entry>
+  <entry key="654">Ole hyvä ja valitse organisaatio ennenkuin yrität lisätä siihen käyttäjiä!</entry>
+  <entry key="655">Organisaatio - Moderaattori</entry>
+  <entry key="656">Haluatko poistaa käyttäjän organisaatiosta?</entry>
+  <entry key="657">Tämä käyttäjä on Moderaattori</entry>
+  <entry key="658">Tämä käyttäjä ei ole moderaattori</entry>
+  <entry key="659">Haluatko että käyttäjä ei ole moderaattori tälle organisaatiolle?</entry>
+  <entry key="660">Lisää tai poista käyttäjiä tai huoneita organisaatiossasi</entry>
+  <entry key="661">Haluatko poistaa tämän tietueen?</entry>
+  <entry key="662">Haluatko todella poistaa käyttäjän organisaatiostasi? Tämä poistaa pelkästään linkin käyttäjän ja organisaation välillä, jos haluat poistaa käyttäjän niin joudut kirjautumaan ylläpitopaneeliin.</entry>
+  <entry key="663">Et voi poistaa itseäsi!</entry>
+  <entry key="664">Tämä toiminto vaatii ylläpitäjän oikeudet!</entry>
+  <entry key="665">Tälle ID-numerolle ei ole määritelty istuntoa.</entry>
+  <entry key="666">Tämä on ylläpitäjän tai moderaattorin tili. Voit muokata tiliä vain ylläpitopaneelin kautta.</entry>
+  <entry key="667">Klikkaa seuraavaa linkkiä viimeistelläksesi rekisteröintisi tai kopioi osoite selaimesi osoiteriville.</entry>
+  <entry key="668">Klikkaa varmistaaksesi sähköpostiosoitteesi</entry>
+  <entry key="669">Käyttäjää ei löytynyt annetulla tunnuksella</entry>
+  <entry key="670">Käyttäjä on jo aktivoitu!</entry>
+  <entry key="671">Käyttäjätunnuksesi aktivoitiin onnistuneesti!</entry>
+  <entry key="672">Kirjaudu nyt</entry>
+  <entry key="673">Käyttäjätunnustasi ei ole aktivoitu. Muista käyttää varmistussähköpostin mukana tullutta linkkiä ennen uutta yritystä.</entry>
+  <entry key="674">Olen rekisteröitynyt onnistuneesti. Lähetimme sinulle sähköpostin jossa on varmistuskoodi. Ole hyvä ja tarkista sähköpostilaatikkosi.</entry>
+  <entry key="675">Poista käyttäjän moderointioikeus</entry>
+  <entry key="676">Anna moderointioikeus tälle käyttäjälle</entry>
+  <entry key="677">Käyttäjä</entry>
+  <entry key="678">Käyttöoikeus piirtopöydälle</entry>
+  <entry key="679">Moderaattori</entry>
+  <entry key="680">Moderointi: Ole hyvä ja valitse käyttäjä listalta antaaksesi hänelle oikeuden piirtopöydälle, moderointiin tai videoon.</entry>
+  <entry key="681">Tämä käyttäjä on jo moderaattori, joten hänellä on aina oikeus piirtää.</entry>
+  <entry key="682">Et voi poistaa moderointioikeutta itseltäsi!</entry>
+  <entry key="683">Salli tämän käyttäjän julkaista ääntä / kuvaa</entry>
+  <entry key="684">Poista ääni/kuva tältä käyttäjältä</entry>
+  <entry key="685">Haluaisin saada moderointioikeuden tähän huoneeseen</entry>
+  <entry key="686">Haluan piirtää piirtoalueelle</entry>
+  <entry key="687">Haluan jakaa ääntä/kuvaa</entry>
+  <entry key="688">Olet tämän huoneen moderaattori</entry>
+  <entry key="689">Sinulla on oikeus piirtää piirtoalueelle</entry>
+  <entry key="690">Sinulla on oikeus jakaa ääntä/kuvaa</entry>
+  <entry key="691">Lähetä viesti moderaattorille</entry>
+  <entry key="692">Käyttäjä</entry>
+  <entry key="693">pyytää moderointioikeutta. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="694">pyytää oikeutta piirtää piirtoalueelle. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="695">pyytää oikeutta jakaa ääntä/kuvaa. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="696">Sinun täytyy odottaa kunnes moderaattori liittyy huoneeseen.</entry>
+  <entry key="697">Peruuta</entry>
+  <entry key="698">Tallenna</entry>
+  <entry key="699">Päivä</entry>
+  <entry key="700">Kuukausi</entry>
+  <entry key="701">Vuosi</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
new file mode 100644
index 0000000..5b572bb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -0,0 +1,1838 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conférence</entry>
+  <entry key="2">Réunion</entry>
+  <entry key="3">Conférence</entry>
+  <entry key="4">Paramètres</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Enregistrer</entry>
+  <entry key="9">Aucun fichier disponible</entry>
+  <entry key="10">Enregistrement par le professeur</entry>
+  <entry key="11">Utilisateurs connectés :</entry>
+  <entry key="12">Commencer une conférence</entry>
+  <entry key="13">Mon nom</entry>
+  <entry key="14">Vidéoconférence</entry>
+  <entry key="15">Nouvelle présentation</entry>
+  <entry key="16">Charger à nouveau la liste</entry>
+  <entry key="17">Retour à la liste des fichiers</entry>
+  <entry key="18">Nouveau sondage</entry>
+  <entry key="19">Un nouveau sondage pour la conférence.</entry>
+  <entry key="20">Question :</entry>
+  <entry key="21">Type de sondage :</entry>
+  <entry key="22">Créer</entry>
+  <entry key="23">Info : Chaque utilisateur reçoit le nouveau sondage.</entry>
+  <entry key="24">Créer un sondage</entry>
+  <entry key="25">Annuler</entry>
+  <entry key="26">Oui/Non</entry>
+  <entry key="27">Numérique 1-10</entry>
+  <entry key="28">Sondage</entry>
+  <entry key="29">Vous devez être modérateur pour créer un sondage.</entry>
+  <entry key="30">Votre vote est enregistré.</entry>
+  <entry key="31">Vous avez déjà voté pour ce sondage.</entry>
+  <entry key="32">Voter !</entry>
+  <entry key="33">Votre réponse :</entry>
+  <entry key="34">Oui</entry>
+  <entry key="35">Non</entry>
+  <entry key="36">Question posée :</entry>
+  <entry key="37">Résultats des votes</entry>
+  <entry key="38">Question :</entry>
+  <entry key="39">Résultats :</entry>
+  <entry key="40">Réponses :</entry>
+  <entry key="41">Aucun sondage n'est en cours.</entry>
+  <entry key="42">Voter !</entry>
+  <entry key="43">Réunion (max. 4 places)</entry>
+  <entry key="44">Conférence (max. 50 places)</entry>
+  <entry key="45">Mode</entry>
+  <entry key="46">Autres places</entry>
+  <entry key="47">Déjà choisi</entry>
+  <entry key="48">Entrer</entry>
+  <entry key="49">L'animateur a quitté la réunion.</entry>
+  <entry key="50">Information du système</entry>
+  <entry key="51">Choix du périphérique</entry>
+  <entry key="52">Choix de la caméra :</entry>
+  <entry key="53">Choix du micro :</entry>
+  <entry key="54">Ok</entry>
+  <entry key="55">Annuler</entry>
+  <entry key="56">Vous devez vous reconnecter</entry>
+  <entry key="57">Edition des réglages</entry>
+  <entry key="58">Cours :</entry>
+  <entry key="59">Langue :</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Annuler</entry>
+  <entry key="62">Nettoyer le tableau blanc</entry>
+  <entry key="63">Voulez-vous nettoyer le tableau blanc avant d'ajouter une nouvelle image ?</entry>
+  <entry key="64">Ne pas redemander</entry>
+  <entry key="65">Non</entry>
+  <entry key="66">Modifier les réglages</entry>
+  <entry key="67">Demander confirmation avant de nettoyer le tableau blanc</entry>
+  <entry key="68">Information sur l'utilisateur</entry>
+  <entry key="69">Effacer tableau blanc</entry>
+  <entry key="70">Annuler</entry>
+  <entry key="71">Refaire</entry>
+  <entry key="72">Sélectionner un objet</entry>
+  <entry key="73">Texte</entry>
+  <entry key="74">Dessiner</entry>
+  <entry key="75">Tracer une ligne</entry>
+  <entry key="76">Surligner</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Flèche</entry>
+  <entry key="80">Supprimer l'élément sélectionné</entry>
+  <entry key="81">Demander la modération</entry>
+  <entry key="82">Appliquer</entry>
+  <entry key="83">Annuler</entry>
+  <entry key="84">Devenir modérateur</entry>
+  <entry key="85">Fermer</entry>
+  <entry key="86">Italique</entry>
+  <entry key="87">Gras</entry>
+  <entry key="88">En attente...</entry>
+  <entry key="89">Un utilisateur souhaite devenir modérateur :</entry>
+  <entry key="90">Accepter</entry>
+  <entry key="91">Rejeter</entry>
+  <entry key="92">Annuler</entry>
+  <entry key="93">Envoi aux autres utilisateurs</entry>
+  <entry key="94">Accepté</entry>
+  <entry key="95">Rejeté</entry>
+  <entry key="96">Changer de modérateur</entry>
+  <entry key="97">Vous n'êtes pas le modérateur de ce cours !</entry>
+  <entry key="98">Modérateur :</entry>
+  <entry key="99">Cette salle est pleine. Merci de revenir plus tard.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Fermer</entry>
+  <entry key="102">Erreur de formulaire</entry>
+  <entry key="103">Le nom d'utilisateur doit contenir au moins 4 caractères</entry>
+  <entry key="104">Le mot de passe doit contenir au moins 4 caractères</entry>
+  <entry key="105">Le nom d'utilisateur existe déjà</entry>
+  <entry key="106">Cette adresse e-mail est déjà utilisée</entry>
+  <entry key="107">Erreur système, merci de contacter l'administrateur</entry>
+  <entry key="108">Connexion</entry>
+  <entry key="109">Utilisateur :</entry>
+  <entry key="110">Mot de passe :</entry>
+  <entry key="111">Langue :</entry>
+  <entry key="112">Se connecter</entry>
+  <entry key="113">S'enregistrer</entry>
+  <entry key="114">Utilisateur :</entry>
+  <entry key="115">Mot de passe :</entry>
+  <entry key="116">Retapez :</entry>
+  <entry key="117">Prénom :</entry>
+  <entry key="118">Nom :</entry>
+  <entry key="119">E-mail :</entry>
+  <entry key="120">Pays :</entry>
+  <entry key="121">Enregistrer</entry>
+  <entry key="122">Annuler</entry>
+  <entry key="123">Inscription</entry>
+  <entry key="124">Accueil</entry>
+  <entry key="125">Utilisateurs</entry>
+  <entry key="126">Groupes</entry>
+  <entry key="127">Organisations</entry>
+  <entry key="128">Salles</entry>
+  <entry key="129">Publique</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Entrer</entry>
+  <entry key="132">Identifiant</entry>
+  <entry key="133">Mot de passe</entry>
+  <entry key="134">Confirmez</entry>
+  <entry key="135">Prénom</entry>
+  <entry key="136">Nom</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Date de naissance</entry>
+  <entry key="139">Rue et N°</entry>
+  <entry key="140">Code postal/Ville</entry>
+  <entry key="141">Pays</entry>
+  <entry key="142">Commentaires</entry>
+  <entry key="143">Détails sur l'utilisateur</entry>
+  <entry key="144">Sauvegarder</entry>
+  <entry key="145">Sauvegarder</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Prénom</entry>
+  <entry key="149">Nom</entry>
+  <entry key="150">Suivant</entry>
+  <entry key="151">Précédent</entry>
+  <entry key="152">Effacer l'enregistrement</entry>
+  <entry key="153">Annuler</entry>
+  <entry key="154">Effacer</entry>
+  <entry key="155">Nouvel enregistrement</entry>
+  <entry key="156">Actualiser l'enregistrement</entry>
+  <entry key="157">Effacer l'enregistrement</entry>
+  <entry key="158">Statut</entry>
+  <entry key="159">Désactivé</entry>
+  <entry key="160">Activé</entry>
+  <entry key="161">Organisations</entry>
+  <entry key="162">Calendrier</entry>
+  <entry key="163">Fermer</entry>
+  <entry key="164">ID Organisation</entry>
+  <entry key="165">Nom</entry>
+  <entry key="166">Utilisateur</entry>
+  <entry key="167">Modérateur</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Type d'utilisateur</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Nom</entry>
+  <entry key="172">Ajouter une organisation</entry>
+  <entry key="173">Ajouter une organisation</entry>
+  <entry key="174">Annuler</entry>
+  <entry key="175">Ajouter</entry>
+  <entry key="176">Effacer organisation</entry>
+  <entry key="177">Utilisateur</entry>
+  <entry key="178">Ajouter utilisateur</entry>
+  <entry key="179">Effacer utilisateur</entry>
+  <entry key="180">Ajouter utilisateur</entry>
+  <entry key="181">Rechercher un utilisateur</entry>
+  <entry key="182">Rechercher</entry>
+  <entry key="183">Utilisateur</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Entrer</entry>
+  <entry key="186">Salles</entry>
+  <entry key="187">Salles</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nom</entry>
+  <entry key="190">Publique</entry>
+  <entry key="191">Organisations</entry>
+  <entry key="192">Salle de conférence</entry>
+  <entry key="193">Nom</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Publique</entry>
+  <entry key="196">Commentaire :</entry>
+  <entry key="197">Enregistrer</entry>
+  <entry key="198">Charger</entry>
+  <entry key="199">Enregistrer sous</entry>
+  <entry key="200">Nom du fichier</entry>
+  <entry key="201">Nom du fichier</entry>
+  <entry key="202">Annuler</entry>
+  <entry key="203">Sauvegarder</entry>
+  <entry key="204">Erreur</entry>
+  <entry key="205">Chargement</entry>
+  <entry key="206">Objets chargés</entry>
+  <entry key="207">Synchronisation des clients, patientez...</entry>
+  <entry key="208">Chargement des données</entry>
+  <entry key="209">Synchronisation des clients, patientez...</entry>
+  <entry key="210">Effacer la zone de dessin</entry>
+  <entry key="211">Effacer la zone de dessin, toutes les données sur le tableau blanc seront perdues</entry>
+  <entry key="212">Confirmer avant de charger un fichier</entry>
+  <entry key="213">Envoyer invitation</entry>
+  <entry key="214">Envoyer invitation</entry>
+  <entry key="215">Sujet</entry>
+  <entry key="216">Destinataire</entry>
+  <entry key="217">Message</entry>
+  <entry key="218">Envoyer</entry>
+  <entry key="219">Annuler</entry>
+  <entry key="220">Envoyer</entry>
+  <entry key="221">Détails sur l'utilisateur</entry>
+  <entry key="222">Votre pseudonyme pour cette conférence</entry>
+  <entry key="223">Pseudo</entry>
+  <entry key="224">Prénom</entry>
+  <entry key="225">Nom</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Langue</entry>
+  <entry key="228">Entrer</entry>
+  <entry key="229">Chargement</entry>
+  <entry key="230">Sélectionnez votre langue</entry>
+  <entry key="231">Mot de passe erroné</entry>
+  <entry key="232">Merci de mettre deux mots de passes identiques avec 6 caractères minimum</entry>
+  <entry key="233">Adresse e-mail erronée</entry>
+  <entry key="234">Vous avez utilisé une adresse E-mail non valide</entry>
+  <entry key="235">Enregistrement effectué</entry>
+  <entry key="236">Votre compte a été créé. Vous pouvez maintenant vous connecter</entry>
+  <entry key="237">Vous ne pouvez pas partager votre écran car un autre utilisateur utilise déjà cette fonctionnalité</entry>
+  <entry key="238">Partage annulé</entry>
+  <entry key="239">Partager votre écran</entry>
+  <entry key="240">Mauvaise bande passante : Vous ne pouvez pas synchroniser votre écran. Des images seront supprimées.</entry>
+  <entry key="241">Ecran de :</entry>
+  <entry key="242">Dessiner</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">T'chat</entry>
+  <entry key="245">Fichiers</entry>
+  <entry key="246">Membres</entry>
+  <entry key="247">Télécharger le document original</entry>
+  <entry key="248">Télécharger le document PDF</entry>
+  <entry key="249">Chargement de la présentation sur le tableau blanc</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Déplacer cet objet</entry>
+  <entry key="252">Redimensionner cet objet</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Aller à la première page</entry>
+  <entry key="256">Aller à la page précédente</entry>
+  <entry key="257">Aller à la page suivante</entry>
+  <entry key="258">Aller à la dernière page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">M.</entry>
+  <entry key="262">Mme.</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clé</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Clé</entry>
+  <entry key="268">Dernière MAJ</entry>
+  <entry key="269">Mis à jour par</entry>
+  <entry key="270">Commentaire</entry>
+  <entry key="271">Clé</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Utilisateurs</entry>
+  <entry key="274">Effacer l'organisation</entry>
+  <entry key="275">Effacer</entry>
+  <entry key="276">Cet utilisateur est déjà membre de l'organisation</entry>
+  <entry key="277">Nouvelles</entry>
+  <entry key="278">Raccourcis</entry>
+  <entry key="279">Aller à la réunion</entry>
+  <entry key="280">Aller à la conférence</entry>
+  <entry key="281">Aide et support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Un bug !</entry>
+  <entry key="285">Détail</entry>
+  <entry key="286">Site du projet (http://openmeetings.apache.org)</entry>
+  <entry key="287">Liste de diffusion pour les utilisateurs (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Se souvenir de moi</entry>
+  <entry key="289">Contenu</entry>
+  <entry key="290">Ma page personnelle</entry>
+  <entry key="291">Mes réunions programmées</entry>
+  <entry key="292">Mes conférences programmées</entry>
+  <entry key="293">Réunions publiques</entry>
+  <entry key="294">Réunions privées</entry>
+  <entry key="295">Auditorium public</entry>
+  <entry key="296">Auditorium privé</entry>
+  <entry key="297">Contenu public</entry>
+  <entry key="298">Contenu privé</entry>
+  <entry key="299">Contenu personnel</entry>
+  <entry key="300"></entry>
+  <entry key="301">Modération</entry>
+  <entry key="302">Demander la modération</entry>
+  <entry key="303">Sondage</entry>
+  <entry key="304">Choisir un fichier</entry>
+  <entry key="305">Configuration</entry>
+  <entry key="306">Choix micro/caméra</entry>
+  <entry key="307">Config. du tableau blanc</entry>
+  <entry key="308">Sortir</entry>
+  <entry key="309">Retour aux salles</entry>
+  <entry key="310">Quitter</entry>
+  <entry key="311">Mot de passe oublié ?</entry>
+  <entry key="312">Réinitialiser votre mot de passe</entry>
+  <entry key="313">Par e-mail</entry>
+  <entry key="314">Par login</entry>
+  <entry key="315">Votre e-mail</entry>
+  <entry key="316">Votre login</entry>
+  <entry key="317">Envoyer un e-mail de réinitialisation</entry>
+  <entry key="318">Aucune adresse trouvée. Soyez sûr d'avoir entré la même adresse que durant l'inscription.</entry>
+  <entry key="319">Entrez votre e-mail ou nom d'utilisateur</entry>
+  <entry key="320">Il n'y a pas d'utilisateur avec ce nom</entry>
+  <entry key="321">Un e-mail contenant un lien vous a été envoyé. Si vous n'avez pas reçu d'e-mail, vérifiez votre antispam et redemandez une confirmation.</entry>
+  <entry key="322">Quitter</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">Hachage non valide. Pas d'utilisateur trouvé.</entry>
+  <entry key="325">Changez votre mot de passe</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Changez votre mot de passe</entry>
+  <entry key="328">Nouveau mot de passe</entry>
+  <entry key="329">Retapez votre mot de passe</entry>
+  <entry key="330">Les mots de passe que vous avez entrés ne sont pas identiques.</entry>
+  <entry key="331">4 caractères ou plus ; la casse a de l'importance !</entry>
+  <entry key="332">Mot de passe changé. Vous pouvez vous connecter.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erreur inconnue. Veuillez le signaler à votre équipe support.</entry>
+  <entry key="335">Nom d'utilisateur inconnu</entry>
+  <entry key="336">Mot de passe non valide</entry>
+  <entry key="337">Déconnecté avec succès</entry>
+  <entry key="338">Enregistrement depuis la page d'accueil désactivé.</entry>
+  <entry key="339">E-mail non valide</entry>
+  <entry key="340">Nom de fichier identique, veuillez choisir un autre nom de fichier</entry>
+  <entry key="341">Nom de fichier trop court</entry>
+  <entry key="342">Impossible de sauvegarder l'adresse</entry>
+  <entry key="343">Utilisateur ajouté. Si vous ne l'avez pas assigné à une organisation, veuillez le faire sans quoi il ne pourra pas se connecter.</entry>
+  <entry key="344">Nouvel enregistrement</entry>
+  <entry key="345">Pas de champ trouvé avec cet ID.</entry>
+  <entry key="346">Pas d'étiquette trouvée pour ce champ.</entry>
+  <entry key="347">Requière l'autorisation de l'administrateur</entry>
+  <entry key="348">Editeur de langue</entry>
+  <entry key="349">Langue</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Nom</entry>
+  <entry key="352">Label-Valeur</entry>
+  <entry key="353">Champs</entry>
+  <entry key="354">Label-Nom</entry>
+  <entry key="355">Label-Valeur</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Vous avez effacé le label, pas le champ ! Vous ne pouvez pas effacer le champ, il peut contenir des labels pour d'autres langues.</entry>
+  <entry key="358">ID du label non valide. Le FieldLanguagesvalues_Id n'est pas dans la base de données.</entry>
+  <entry key="359">Vous ne pouvez pas supprimer ce champ, seulement les labels. Il n'y a pas de labels pour le moment ou il n'y a pas de labels pour ce langage.</entry>
+  <entry key="360">Exporter</entry>
+  <entry key="361">Vous devez vous déconnecter pour voir les changements.</entry>
+  <entry key="362">Ajouter un langage</entry>
+  <entry key="363">Effacer un langage</entry>
+  <entry key="364">Ajouter un langage</entry>
+  <entry key="365">Nom</entry>
+  <entry key="366">Ajouter un langage</entry>
+  <entry key="367">Sauvegarde</entry>
+  <entry key="368">Retour au début</entry>
+  <entry key="369">Précédent</entry>
+  <entry key="370">Suivant</entry>
+  <entry key="371">Aller au dernier</entry>
+  <entry key="372">L'utilisateur parle</entry>
+  <entry key="373">Son marche/arrêt</entry>
+  <entry key="374">Système</entry>
+  <entry key="375">Votre configuration</entry>
+  <entry key="376">Bonjour,</entry>
+  <entry key="377">Editez votre profil</entry>
+  <entry key="378">Nouveau(x) Message(s) :</entry>
+  <entry key="379">Nouvelle image</entry>
+  <entry key="380">Détails utilisateurs</entry>
+  <entry key="381">Choisissez votre organisation</entry>
+  <entry key="382">Commencer l'export</entry>
+  <entry key="383">Tous les utilisateurs</entry>
+  <entry key="384">Commencer l'export</entry>
+  <entry key="385">Importer détails utilisateurs</entry>
+  <entry key="386">Choisissez users.xml</entry>
+  <entry key="387">Importer</entry>
+  <entry key="388">Export en XML - Ces fichiers peuvent être utilisés pour : - Contribuer au projet - Importation sur un autre système - Sauvegarde - Personnalisation - Mettez-le dans le dossier des langues pour votre prochaine installation</entry>
+  <entry key="389">Choisissez un fichier de langue à importer. Choisissez le bon langage depuis la boite déroulante ! Peu importe le nom du fichier, il sera importé pour ce langage</entry>
+  <entry key="390">Import - Choisir un fichier</entry>
+  <entry key="391">Enregistrer sous</entry>
+  <entry key="392">Nom :</entry>
+  <entry key="393">Commentaire :</entry>
+  <entry key="394">Sauvegarde</entry>
+  <entry key="395">Enregistrements</entry>
+  <entry key="396">Lecteur d'enregistrements</entry>
+  <entry key="397">Enregistrement des salles privées et publiques</entry>
+  <entry key="398">Utilisateurs :</entry>
+  <entry key="399">Inscrits :</entry>
+  <entry key="400"></entry>
+  <entry key="401">Utilisateur dans la salle :</entry>
+  <entry key="402">Rafraichir</entry>
+  <entry key="403">Cette salle est pleine. Réessayez dans quelques minutes.</entry>
+  <entry key="404">Infos : Cliquez sur une salle</entry>
+  <entry key="405">Discutez avec les utilisateurs de cette salle :</entry>
+  <entry key="406">Salle :</entry>
+  <entry key="407">Utilisateurs dans cette salle :</entry>
+  <entry key="408">Depuis :</entry>
+  <entry key="409">Lire l'enregistrement</entry>
+  <entry key="410">Durée :</entry>
+  <entry key="411">Date :</entry>
+  <entry key="412">Mode enregistrement ! Vous ne pouvez rien modifier, ceci est un document enregistré !</entry>
+  <entry key="413">Lire cet enregistrement</entry>
+  <entry key="414">Lecture/Pause</entry>
+  <entry key="415">Commencer l'enregistrement</entry>
+  <entry key="416">Stopper l'enregistrement</entry>
+  <entry key="417">Enregistrement :</entry>
+  <entry key="418">Quelqu'un est déjà en train d'enregistrer cette session :</entry>
+  <entry key="419">Enregistrement par :</entry>
+  <entry key="420">Annuler</entry>
+  <entry key="421">Si vous annulez l'enregistrement, il ne sera pas sauvegardé.</entry>
+  <entry key="422">Reprendre</entry>
+  <entry key="423">Fermer cette fenêtre et reprendre l'enregistrement</entry>
+  <entry key="424">Changer la couleur de ligne</entry>
+  <entry key="425">Choisir une couleur</entry>
+  <entry key="426">Désactiver/Activer la couleur de ligne</entry>
+  <entry key="427">changer la couleur de remplissage</entry>
+  <entry key="428">Désactiver / Activer couleur de remplissage</entry>
+  <entry key="429">Changer la largeur de ligne</entry>
+  <entry key="430">Fermer</entry>
+  <entry key="431">Changer la taille de la police</entry>
+  <entry key="432">Effacer l'enregistrement</entry>
+  <entry key="433">Invité</entry>
+  <entry key="434">Par :</entry>
+  <entry key="435">Nom</entry>
+  <entry key="436">Salle</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">Annuler</entry>
+  <entry key="439">Démarrer</entry>
+  <entry key="440">Nom</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Effacer l'historique du t'chat</entry>
+  <entry key="443">T'chat</entry>
+  <entry key="444">Envoyer message</entry>
+  <entry key="445">Emoticônes</entry>
+  <entry key="446">Emoticônes</entry>
+  <entry key="447">Choisissez le périphérique</entry>
+  <entry key="448">Audio et Vidéo</entry>
+  <entry key="449">Audio seulement</entry>
+  <entry key="450">Vidéo seulement</entry>
+  <entry key="451">Pas d'audio ni de vidéo (image statique)</entry>
+  <entry key="452">Aucun flux Audio/Vidéo ne sera émis, à la place l'image de votre profil sera affichée. Choisissez cette configuration en cas de problème de bande passante ou si votre connexion internet est lente.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">JE</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DI</entry>
+  <entry key="460">Lundi</entry>
+  <entry key="461">Mardi</entry>
+  <entry key="462">Mercredi</entry>
+  <entry key="463">Jeudi</entry>
+  <entry key="464">Vendredi</entry>
+  <entry key="465">Samedi</entry>
+  <entry key="466">Dimanche</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendrier semaine</entry>
+  <entry key="469">Janvier</entry>
+  <entry key="470">Février</entry>
+  <entry key="471">Mars</entry>
+  <entry key="472">Avril</entry>
+  <entry key="473">Mai</entry>
+  <entry key="474">Juin</entry>
+  <entry key="475">Juillet</entry>
+  <entry key="476">Août</entry>
+  <entry key="477">Septembre</entry>
+  <entry key="478">Octobre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Décembre</entry>
+  <entry key="481">Calendrier</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Montrer la disposition</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largeur | Hauteur</entry>
+  <entry key="486">Conteneur-vidéo</entry>
+  <entry key="487">Conteneur-modération</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Conteneur-tableau blanc</entry>
+  <entry key="490">Activé</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largeur | Hauteur</entry>
+  <entry key="493">Conteneur Fichier,t'chat,participants</entry>
+  <entry key="494">Activé</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largeur | Hauteur</entry>
+  <entry key="497">Le modérateur a quitté la salle. Personne n'est présent actuellement. Vous pouvez demander la modération ou attendre.</entry>
+  <entry key="498">Il n'y a pas de modérateur dans cette salle, mais il reste des participants. Vous pouvez demander la modération ou attendre.</entry>
+  <entry key="499">Sentiments sur {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message de :</entry>
+  <entry key="502">Message :</entry>
+  <entry key="503">Cliquez sur le lien pour participer à la conférence :</entry>
+  <entry key="504">Cliquez pour entrer dans la salle</entry>
+  <entry key="505">Si ce lien ne fonctionne pas, copier/coller-le dans votre navigateur.</entry>
+  <entry key="506">Inscription {0}</entry>
+  <entry key="507">Vos données utilisateur :</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Mot de passe :</entry>
+  <entry key="510">E-mail :</entry>
+  <entry key="511">Equipe-{0}</entry>
+  <entry key="512">Inscription {0}</entry>
+  <entry key="513">{0} - Réinitialiser mot de passe</entry>
+  <entry key="514">Cliquez sur le lien pour saisir un nouveau mot de passe :</entry>
+  <entry key="515">Cliquez ici pour saisir un nouveau mot de passe</entry>
+  <entry key="516">Si ce lien ne fonctionne pas, copier/coller-le dans votre navigateur.</entry>
+  <entry key="517">{0} nouveau mot de passe</entry>
+  <entry key="518">Entrez une date valide, par exemple 24.12.2001 (jj.mm.aaaa)</entry>
+  <entry key="519">Entrez un e-mail valide, par exemple name@mail.com</entry>
+  <entry key="520">Entrez un nombre décimal valide, par exemple 1.00</entry>
+  <entry key="521">Entrez un entier valide, par exemple 100</entry>
+  <entry key="522">Entrez un numéro de téléphone valide, par exemple 01 02 03 04 05</entry>
+  <entry key="523">Entrez une heure valide, par exemple 12:23 (hh:mm)</entry>
+  <entry key="524">Protégé par mot de passe</entry>
+  <entry key="525">Mot de passe</entry>
+  <entry key="526">Période de validité</entry>
+  <entry key="527">Indéfinie</entry>
+  <entry key="528">Temporaire</entry>
+  <entry key="529">Une connexion</entry>
+  <entry key="530">Valide à partir de :</entry>
+  <entry key="531">Valide jusqu'à :</entry>
+  <entry key="532">Invitation à une conférence {0}</entry>
+  <entry key="533">Pas d'invitation disponible pour ce code</entry>
+  <entry key="534">L'invitation est déjà utilisé. Impossible d'accéder à la réunion/conférence.</entry>
+  <entry key="535">Ce code d'invitation n'est pas valide.</entry>
+  <entry key="536">Mot de passe:</entry>
+  <entry key="537">Vérification du mot de passe</entry>
+  <entry key="538">Mot de passe non valide !</entry>
+  <entry key="539">Navigateur</entry>
+  <entry key="540">Synchroniser Audio/Vidéo</entry>
+  <entry key="541">Votre mot de passe est correct mais la session est inactive. Vous devez récupérer une nouvelle ID de session et vous reconnecter.</entry>
+  <entry key="542">L'ID de session n'est pas connecté ou ne possède pas les droits d'administration. La passerelle SOAP nécessite un utilisateur ayant les droits d'administration pour intégrer de nouveaux utilisateurs.</entry>
+  <entry key="543">Cette session n'a pas d'utilisateur distant connecté. Soit vous n'avez pas appelé la passerelle SOAS avant d'accéder à l'application, soit vous utilisez une mauvaise ID de session.</entry>
+  <entry key="544">L'enregistrement est en construction...</entry>
+  <entry key="545">x</entry>
+  <entry key="546">axe-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">axe-y</entry>
+  <entry key="549">w</entry>
+  <entry key="550">Largeur</entry>
+  <entry key="551">h</entry>
+  <entry key="552">Hauteur</entry>
+  <entry key="553">Modifier la transparence</entry>
+  <entry key="554">Navigateur ouvert</entry>
+  <entry key="555">Navigateur fermé</entry>
+  <entry key="556">La connexion avec le serveur est interrompue. Vérifiez le réseau ou contactez l'adminitrateur.</entry>
+  <entry key="557">Pointeur</entry>
+  <entry key="558">Synchronisation</entry>
+  <entry key="559">Synchronisation des utilisateurs, patientez s'il vous plait...</entry>
+  <entry key="560">&lt;u&gt;Télécharger en SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Télécharger en PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Télécharger en JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Télécharger en PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Télécharger en TIF&lt;/u&gt;</entry>
+  <entry key="565">Rappel :</entry>
+  <entry key="566">Catégorie:</entry>
+  <entry key="567">Répétition:</entry>
+  <entry key="568">Nul</entry>
+  <entry key="569">Lieu :</entry>
+  <entry key="570">Début</entry>
+  <entry key="571">Fin</entry>
+  <entry key="572">Titre :</entry>
+  <entry key="573">Commentaire :</entry>
+  <entry key="574">Inviter</entry>
+  <entry key="575">Jour</entry>
+  <entry key="576">Mois</entry>
+  <entry key="577">Année</entry>
+  <entry key="578">Fin de rendez-vous est après début de rendez-vous !</entry>
+  <entry key="579">Indiquez un titre s'il vous plait</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Cochez cette case pour écrire de droite à gauche</entry>
+  <entry key="582">Tableau de bord</entry>
+  <entry key="583">Visionner vos réunions ou conférences</entry>
+  <entry key="584">Accéder aux réunions en cours&lt;br/&gt;Tout le monde pourra parler et entendre l'ensemble des conversations.</entry>
+  <entry key="585">Accéder aux conférences en cours&lt;br/&gt;Le droit de parole est réservée au conférencier. Vous ne pourrez qu'écouter.</entry>
+  <entry key="586">Créer un utilisateur, une réunion, une organisation.&lt;br/&gt; + changer la configuration</entry>
+  <entry key="587">Utilisateurs actuellement dans cette réunion :</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Document en chargement. Attendez que tous les utilisateurs soient synchronisés.</entry>
+  <entry key="592">Téléchargement ok, conversion en cours...</entry>
+  <entry key="593">Démarrer l'importation</entry>
+  <entry key="594">Sélectionnez un fichier sur votre disque :</entry>
+  <entry key="595">Quitter</entry>
+  <entry key="596">Sélectionner un fichier</entry>
+  <entry key="597">Connexions</entry>
+  <entry key="598">Valeur</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connecté depuis</entry>
+  <entry key="602">Salle / Limite</entry>
+  <entry key="603">Sortir utilisateur</entry>
+  <entry key="604">Sortir utilisateur</entry>
+  <entry key="605">Voulez-vous vraiment sortir cet utilisateur ?&lt;br/&gt; Cela supprimera le client de la réunion actuelle mais il pourra se reconnecter.</entry>
+  <entry key="606">Votre session a été interrompue par l'administrateur ou le modérateur.</entry>
+  <entry key="607">Téléphone</entry>
+  <entry key="608">Modérateur de cette réunion</entry>
+  <entry key="609">Autoriser/Refuser le droit de dessiner sur le tableau blanc</entry>
+  <entry key="610">(Re) Démarrer audio/vidéo ou changer les paramètres</entry>
+  <entry key="611">Autoriser cet utilisateur à dessiner sur le tableau blanc</entry>
+  <entry key="612">Retirer le droit de dessiner sur le tableau blanc.</entry>
+  <entry key="613">Utilisateurs</entry>
+  <entry key="614">Fichiers</entry>
+  <entry key="615">Tableau blanc</entry>
+  <entry key="616">T'chat</entry>
+  <entry key="617">Votre compte est assigné à plusieurs organisations. Choisissez-en une pour cette session.</entry>
+  <entry key="618">Le nombre max. d'utilisateurs est atteint. Veuillez réessayez plus tard.</entry>
+  <entry key="619">Type de salle</entry>
+  <entry key="620">Salle temporaire</entry>
+  <entry key="621">Heure serveur</entry>
+  <entry key="622">{0} - Rappel</entry>
+  <entry key="623">Message de l'utilisateur :</entry>
+  <entry key="624">Message :</entry>
+  <entry key="625">Cliquez sur ce lien pour participer à la réunion :</entry>
+  <entry key="626">Cliquez ici pour entrer dans la salle</entry>
+  <entry key="627">Si vous avez un problème avec le lien, copier-coller-le dans votre navigateur s.v.p. :</entry>
+  <entry key="628">recherche interne</entry>
+  <entry key="629">Ajouter un utilisateur extérieur</entry>
+  <entry key="630">Prénom</entry>
+  <entry key="631">Nom</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmer la sortie</entry>
+  <entry key="634">Etes-vous sûr de vouloir quitter ?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Salle Démo</entry>
+  <entry key="637">Heure Démo</entry>
+  <entry key="638">Temps de réunion</entry>
+  <entry key="639">C'est une salle de Démo. Pour désactiver ce message vous devez utiliser une réunion privée pour votre usage personnel ou avoir votre propre serveur. Vous allez être automatiquement déconnecté dans :</entry>
+  <entry key="640">Modération</entry>
+  <entry key="641">S.V.P. attendez que le modérateur rejoigne la salle.&lt;br/&gt;Le modérateur peut-être un enseignant,&lt;br/&gt;l'administrateur ou le créateur de&lt;br/&gt; cette réunion.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Nouveau partage d'écran</entry>
+  <entry key="644">C'est un nouveau partage d'écran de cet utilisateur:</entry>
+  <entry key="645">Démarrer le partage</entry>
+  <entry key="646">Ajouter une nouvelle réunion</entry>
+  <entry key="647">Salle de réunion</entry>
+  <entry key="648">Salle de conférence</entry>
+  <entry key="649">Modération</entry>
+  <entry key="650">Modérer les utilisateurs</entry>
+  <entry key="651">Salles modérées</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Voulez-vous que cet utilisateur devienne un modérateur de cette organisation ?</entry>
+  <entry key="654">Choisissez une organisation avant de lui ajouter un utilisateur s.v.p. !</entry>
+  <entry key="655">Organisation - Modérateur</entry>
+  <entry key="656">Voulez-vous réellement supprimer cet utilisateur de cette organisation?</entry>
+  <entry key="657">Cet utilisateur est un modérateur</entry>
+  <entry key="658">Cet utilisateur n'est pas un modérateur</entry>
+  <entry key="659">Voulez-vous que cet utilisateur ne soit pas un modérateur de cette organisation ?</entry>
+  <entry key="660">Ajouter ou supprimer des utilisateurs ou des salles de votre organisation</entry>
+  <entry key="661">Voulez-vous réellement supprimer cet enregistrement ?</entry>
+  <entry key="662">Voulez-vous réellement supprimer cet utilisateur de votre organisation ? Vous supprimez seulement le lien entre cet utilisateur et votre organisation, pour supprimer réellement cet utilisateur vous devez aller dans l'onglet d'administration.</entry>
+  <entry key="663">Vous ne pouvez pas vous supprimer !</entry>
+  <entry key="664">Cette méthode nécessite des droits d'administration.</entry>
+  <entry key="665">Il n'y a pas de session associée à cet ID.</entry>
+  <entry key="666">C'est un compte d'administration ou de modérateur. Vous ne pouvez l'éditer qu'à travers l'onglet d'administration.</entry>
+  <entry key="667">Pour terminer votre enregistrement veuillez cliquer sur le lien suivant. Ou copier l'URL dans la barre d'adresse de votre navigateur.</entry>
+  <entry key="668">Cliquez pour vérifier votre E-mail</entry>
+  <entry key="669">Aucun utilisateur pour ce hachage.</entry>
+  <entry key="670">Cet utilisateur est déjà activé !</entry>
+  <entry key="671">Vous avez activé votre compte avec succès !</entry>
+  <entry key="672">Se connecter maintenant</entry>
+  <entry key="673">Votre compte n'est pas actif. Utilisez le lien dans l'e-mail que vous avez reçu pour l'enregistrement.</entry>
+  <entry key="674">Vous êtes enregistré. Nous vous avons envoyé un e-mail avec un code de vérification. Regardez votre boite de messagerie.</entry>
+  <entry key="675">Enlever le rôle de modérateur à cet utilisateur</entry>
+  <entry key="676">Donner les droits de modération à cet utilisateur</entry>
+  <entry key="677">Utilisateur</entry>
+  <entry key="678">Accès au tableau blanc</entry>
+  <entry key="679">Modérateur</entry>
+  <entry key="680">Modération : Choisissez un utilisateur de cette liste pour lui donner accès au tableau blanc, à la modération ou à la vidéo.</entry>
+  <entry key="681">Cet utilisateur est déjà modérateur, donc il a le droit de dessiner.</entry>
+  <entry key="682">Il s'agit de vous ! Vous ne pouvez pas vous retirer &lt;br/&gt;les droits de modération.</entry>
+  <entry key="683">Autoriser cet utilisateur à publier son Audio/Vidéo</entry>
+  <entry key="684">Supprimer l'Audio/Vidéo de cet utilisateur</entry>
+  <entry key="685">Je souhaiterais obtenir le modération de cette salle.</entry>
+  <entry key="686">Je souhaiterais dessiner sur le tableau blanc</entry>
+  <entry key="687">Je souhaiterais partager mon audio/vidéo</entry>
+  <entry key="688">Vous êtes le modérateur de cette salle</entry>
+  <entry key="689">Vous êtes autorisé à dessiner sur le tableau blanc</entry>
+  <entry key="690">Vous êtes autorisé à partager votre Audio/Vidéo.</entry>
+  <entry key="691">Message au modérateur</entry>
+  <entry key="692">L'utilisateur</entry>
+  <entry key="693">&lt;br/&gt;demande la modération. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever la modération.</entry>
+  <entry key="694">&lt;br/&gt;demande l'accès au tableau blanc. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever le droit de dessiner sur le tableau blanc.</entry>
+  <entry key="695">&lt;br/&gt;demande le partage audio/vidéo. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever le droit de partager l'audio/vidéo.</entry>
+  <entry key="696">Vous devez attendre qu'un modérateur entre dans la salle.</entry>
+  <entry key="697">Annuler</entry>
+  <entry key="698">Sauver</entry>
+  <entry key="699">Jour</entry>
+  <entry key="700">Mois</entry>
+  <entry key="701">Année</entry>
+  <entry key="702">Ajouter un fichier</entry>
+  <entry key="703">Ajouter un dossier</entry>
+  <entry key="704">Rafraichir</entry>
+  <entry key="705">Poubelle</entry>
+  <entry key="706">Mes fichiers personnels</entry>
+  <entry key="707">Les fichiers de la salle (Public)</entry>
+  <entry key="708">Ajouter un fichier</entry>
+  <entry key="709">Ajouter un dossier</entry>
+  <entry key="710">Supprimer un dossier</entry>
+  <entry key="711">Modifier le nom</entry>
+  <entry key="712">Nouveau dossier</entry>
+  <entry key="713">Etes-vous sûr de vouloir supprimer cet item ?</entry>
+  <entry key="714">Recherche</entry>
+  <entry key="715">Recherche</entry>
+  <entry key="716">Ouvrir le document</entry>
+  <entry key="717">Montrer tous les fichiers (Arborescence)</entry>
+  <entry key="718">Fermer le document</entry>
+  <entry key="719">Supprimer le fichier</entry>
+  <entry key="720">Tableau blanc non autorisé.</entry>
+  <entry key="721">Propriétés Document</entry>
+  <entry key="722">+net +long</entry>
+  <entry key="723">conseillé</entry>
+  <entry key="724">Un utilisateur souhaite partager son écran. Voulez-vous le voir ?</entry>
+  <entry key="725">Vous partagez actuellement votre écran. Pour arrêter ce partage, cliquez sur le bouton Sortie de la fenêtre de partage.</entry>
+  <entry key="726">Session de partage</entry>
+  <entry key="727">Vous partagez déjà votre écran !</entry>
+  <entry key="728">Vue d'écran</entry>
+  <entry key="729">Sortie</entry>
+  <entry key="730">Partage d'écran</entry>
+  <entry key="731">Cliquez sur Partager pour publier votre écran</entry>
+  <entry key="732">Partager</entry>
+  <entry key="733">Arrêter</entry>
+  <entry key="734">Sélectionner la partie d'écran :</entry>
+  <entry key="735">Changer la largeur</entry>
+  <entry key="736">La session de partage est terminée !</entry>
+  <entry key="737">Changer la hauteur</entry>
+  <entry key="738">Marge-X</entry>
+  <entry key="739">Marge-Y</entry>
+  <entry key="740">Largeur :</entry>
+  <entry key="741">Hauteur :</entry>
+  <entry key="742">La connection a été fermée par le serveur</entry>
+  <entry key="743">Annuler</entry>
+  <entry key="744">+ net</entry>
+  <entry key="745">Si vous fermez cette session vous ne pourrez plus redemarrer le partage pour cette session.</entry>
+  <entry key="746">Confirmez la fermeture de cette session de partage</entry>
+  <entry key="747">Ecran partage</entry>
+  <entry key="748">Enregistrement de la session</entry>
+  <entry key="749">Navigation collaborative</entry>
+  <entry key="750">Oups... Firefox et Windows ne permettent pas une bonne navigation collaborative. Veuillez utiliser un autre navigateur pour utiliser cette fonction.</entry>
+  <entry key="751">Précédent</entry>
+  <entry key="752">Suivant</entry>
+  <entry key="753">Rechargement</entry>
+  <entry key="754">Accueil</entry>
+  <entry key="755">Chargement</entry>
+  <entry key="756">Ajouter ce site web comme site par défaut pour votre profil</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Testez votre micro et votre caméra avant d'entrer dans la réunion en enregistrant quelques secondes. Vous pourrez alors rejouer votre enregistrement pour vérification.</entry>
+  <entry key="759">Ne plus montrer ce test (modifiable dans le profil)</entry>
+  <entry key="760">Annuler</entry>
+  <entry key="761">Début de réunion</entry>
+  <entry key="762">Ne plus poser cette question</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Vous pouvez continuer sans tester si vous ne pensez pas publier votre voix ou votre vidéo. Les participants sans audio ou vidéo peuvent utiliser le tableau blanc, partager leur écran ou écrire des messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau</entry>
+  <entry key="768">Cliquer sur Début</entry>
+  <entry key="769">Commencer la réunion</entry>
+  <entry key="770">Commencer la conférence</entry>
+  <entry key="771">Choisir la salle</entry>
+  <entry key="772">Auto-test</entry>
+  <entry key="773">Commencer la réunion</entry>
+  <entry key="774">Chronologie d'emploi :</entry>
+  <entry key="775">Début d'enreg.</entry>
+  <entry key="776">Ne pas montrer le test audio/vidéo (Enregistrement) avant d'entrer en réunion.</entry>
+  <entry key="777">Salles publiques</entry>
+  <entry key="778">Les salles publiques sont accessibles à tous les utilisateurs.</entry>
+  <entry key="779">Salles privées</entry>
+  <entry key="780">Les salles privées ne sont accessibles qu'aux utilisateurs de l'organisation pour laquelle elles ont été créées.</entry>
+  <entry key="781">Mes salles</entry>
+  <entry key="782">Ici les salles sont créées pour un usage personnel. Elles sont créées par le calendrier et ont une date de début et de fin. Elles ne sont listées ici que tant qu'elles sont valides dans le jour J (aujourd'hui).</entry>
+  <entry key="783">Vous devez être modérateur pour faire cela.</entry>
+  <entry key="784">Demander la modération</entry>
+  <entry key="785">Demander l'accès au tableau blanc</entry>
+  <entry key="786">Demander l'accès à caméra/micro</entry>
+  <entry key="787">Ce hachage est déjà utilisé. Vous ne pouvez l'utiliser deux fois.</entry>
+  <entry key="788">DEBUT</entry>
+  <entry key="789">Sortie</entry>
+  <entry key="790">Voulez-vous réellement sortir ? Vous devriez peut-être préalablement nettoyer les documents chargés, le tableau blanc ou les messages instantanés.</entry>
+  <entry key="791">Sortie de réunion</entry>
+  <entry key="792">Salles</entry>
+  <entry key="793">Choisir une salle pour la réunion</entry>
+  <entry key="794">Il y a un évènement non sauvegardé dans le calendrier. S.V.P. sauvegardez-le ou supprimez-le.</entry>
+  <entry key="795">S.V.P. ajoutez au moins un participant à votre réunion</entry>
+  <entry key="796">Voulez-vous réellement supprimer cet évènement ?</entry>
+  <entry key="797">Attention</entry>
+  <entry key="798">Ajouter un évènement</entry>
+  <entry key="799">jour</entry>
+  <entry key="800">semaine</entry>
+  <entry key="801">mois</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Participants</entry>
+  <entry key="804">{0}, votre plateforme de conférence web. Suivez les instructions.&lt;br/&gt;Cliquez sur le bouton 'Début' pour commencer une réunion immédiatement ou allez au calendrier pour planifier une réunion.</entry>
+  <entry key="805">Planifier</entry>
+  <entry key="806">Pour planifier une réunion vous pouvez créer un événement dans le calendrier.</entry>
+  <entry key="807">Besoin d'aide ?</entry>
+  <entry key="808">Accès réservé</entry>
+  <entry key="809">Recherche</entry>
+  <entry key="810">Ajouter</entry>
+  <entry key="811">Il n'y a pas d'utilisateur sélectionné. S.V.P. choisissez un utilisateur dans la liste.</entry>
+  <entry key="812">Ajouter un participant</entry>
+  <entry key="813">Sauvegarde</entry>
+  <entry key="814">Supprimer</entry>
+  <entry key="815">Détails de l'évènement</entry>
+  <entry key="816">Modérateurs par défaut</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nom</entry>
+  <entry key="820">E-mail</entry>
+  <entry key="821">Ajouter un nouveau modérateur par défaut</entry>
+  <entry key="822">C'est le super modérateur</entry>
+  <entry key="823">Si la salle est modérée, un utilisateur avec le niveau modérateur ou administrateur est automatiquement modérateur s'il participe à la réunion. Si vous ne voulez pas de ce fonctionnement et que voulez qu'un certain utilisateur devienne modérateur, utilisez l'option modérateur par défaut.</entry>
+  <entry key="824">Un super modérateur est toujours modérateur quand il participe à une réunion, et personne ne peut lui retirer ce droit</entry>
+  <entry key="825">Appliquer la super-modération à cet utilisateur</entry>
+  <entry key="826">Retirer la super-modération à cet utilisateur</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si vous spécifiez une organisation pour la réunion, seuls les utilisateurs qui appartiennent à cette organisation y ont accès (S'il ne s'agit pas d'une réunion publique !)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Etes-vous sûr ?</entry>
+  <entry key="833">Voulez-vous réellement supprimer cet item ? Vous devez utiliser le bouton Sauvegarde pour garder les modifications !</entry>
+  <entry key="834">Aucun utilisateur sélectionné. S.V.P. sélectionnez en un avant de l'ajouter !</entry>
+  <entry key="835">Ajouter un nouveau modérateur par défaut</entry>
+  <entry key="836">Voulez-vous que cet utilisateur soit super-modérateur ? Un super-modérateur n'est pas seulement modérateur de la réunion, son rôle ne peut de plus être enlevé par aucun autre modérateur. Vous devez sauvegarder la salle pour sauvegarder ces paramètres !</entry>
+  <entry key="837">Voulez-vous retirer la super-modération à cet utilisateur ? Vous devez sauvegarder la salle pour sauvegarder ces paramètres !</entry>
+  <entry key="838">Cet utilisateur est un super-modérateur. Vous ne pouvez pas enlever la modération à un super-modérateur !</entry>
+  <entry key="839">Voulez-vous réellement supprimer ce fichier/dossier ?</entry>
+  <entry key="840">Supprimer Fichier/Dossier ?</entry>
+  <entry key="841">Mlle.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Propriétés</entry>
+  <entry key="844">Montrer la souris sur l'écran</entry>
+  <entry key="845">Partager l'audio avec l'applet SIP</entry>
+  <entry key="846">Partager l'audio avec SIP et la vidéo avec Flash</entry>
+  <entry key="847">Zoom 100%</entry>
+  <entry key="848">Voir écran</entry>
+  <entry key="849">L'utilisateur</entry>
+  <entry key="850">souhaite partager son écran. Voulez-vous le voir ?</entry>
+  <entry key="851">Fermer</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La session a été fermée par l'utilisateur qui partageait son écran!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Nouveau partage d'écran</entry>
+  <entry key="856">Réduire</entry>
+  <entry key="857">Maximiser</entry>
+  <entry key="858">Vidéo</entry>
+  <entry key="859">Chronologie de l'enregistrement</entry>
+  <entry key="860">Mes enregistrements</entry>
+  <entry key="861">Enregistrements publics</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nom</entry>
+  <entry key="864">Durée</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">par</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Enregistrement</entry>
+  <entry key="870">Vous pouvez enregistrer et partager votre écran en même temps. Pour permettre aux autres de voir votre écran, cliquez le bouton Partager en haut. Pour seulement enregistrer la session, il suffit de cliquer sur Démarrer l'enregistrement.</entry>
+  <entry key="871">Démarrer l'enregistrement</entry>
+  <entry key="872">Arrêter l'enregistrement</entry>
+  <entry key="873">Télécharger le fichier FLV</entry>
+  <entry key="874">Salle</entry>
+  <entry key="875">Jouer</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">L'utilisateur a son micro activé</entry>
+  <entry key="878">Arrêter le partage</entry>
+  <entry key="879">Accepter les questions</entry>
+  <entry key="880">Désactivez ceci pour éviter que les utilisateurs ne vous disturbent dans la salle. Cela a pour effet de masquer le bouton permettant de demander la modération.</entry>
+  <entry key="881">Droits</entry>
+  <entry key="882">Télécharger le fichier AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Ecran vidéo brut</entry>
+  <entry key="886">Audio seulement</entry>
+  <entry key="887">Il y a eu des erreurs durant le traitement de l'enregistrement.</entry>
+  <entry key="888">L'enregistrement n'est pas encore prêt à être visionné. Veuillez réessayer dans quelques minutes.</entry>
+  <entry key="889">Log :</entry>
+  <entry key="890">Message de l'enregistreur</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">L'applet SIP n'est pas prêt</entry>
+  <entry key="893">Paramètre compte SIP</entry>
+  <entry key="894">Paramètres SIP pour chaque utilisateur. Vous pouvez activer ou désactiver SIP via Administration &gt; Configuration (Champ : enable_sip). Les données SIP pour chaque utilisateur devraient être créées automatiquement. Vous pouvez recréer les données en cochant "Regénérer les données SIP"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">La connexion à la passerelle SIP a échoué. Vous devrier vérifier les données d'autentification de votre fournisseur SIP et les données des comptes SIP de chaque utilisateur. En tant qu'administrateur vous pouvez toujours vous connecter et vérifier la configuration. En tant qu'utilisateur ou modérateur vous ne pourrez pas interragir.</entry>
+  <entry key="899">La connexion à la passerelle SIP a échoué. Veuiller contacter votre équipe de support !</entry>
+  <entry key="900">Connexion à la passerelle SIP...</entry>
+  <entry key="901">Connexion à la passerelle SIP...</entry>
+  <entry key="902">Montrer le journal</entry>
+  <entry key="903">Journaliser les messages de post traitement de l'enregistreur</entry>
+  <entry key="904">Message de l'applet SIP</entry>
+  <entry key="905">L'applet SIP n'est pas prêt. Acceptez l'applet et cliquez ok !</entry>
+  <entry key="906">Obtenir la modération</entry>
+  <entry key="907">Sauvegarder les modifications de la réunion</entry>
+  <entry key="908">La réunion a été modifiée. Voulez-vous sauvegarder les changements ? &lt;br/&gt;&lt;br/&gt;Tous les participants à la réunion recevront un e-mail avec la date et l'heure mises à jour (cela dépend du type de notification pour cette réunion).</entry>
+  <entry key="909">Pour accéder à d'autres enregistrements vous devez vous connecter à l'application {0} Application.</entry>
+  <entry key="910">Choisissez l'utilisateur pour cette vidéo</entry>
+  <entry key="911">Utilisateurs disponibles pour ce conteneur</entry>
+  <entry key="912">Vous êtes un modérateur dans cette salle d'interview. Vous pouvez décider de qui parle et vous pouvez démarrer/arrêter l'enregistrement de la session.</entry>
+  <entry key="913">Démarrer l'enregistr.</entry>
+  <entry key="914">Arrêter l'enregistr.</entry>
+  <entry key="915">L'enregisrement de l'interview est déjà démarré.</entry>
+  <entry key="916">L'enregistrement est déjà arrêté ou n'a pas encore démarré.</entry>
+  <entry key="917">L'enregistrement pour cette interview a déjà démarré !</entry>
+  <entry key="918">Annuler</entry>
+  <entry key="919">Le post traitement d'une interview dure 5 minutes par minute d'interview. L'avancement actuel du post traitement est :</entry>
+  <entry key="920">Vous devez entrer votre mot de passe à nouveau pour créer automatiquement les données SIP</entry>
+  <entry key="921">Regénérer les données</entry>
+  <entry key="922">Vous ne pouvez déplacer ce fichier ou dossier dans son propre sous-dossier !</entry>
+  <entry key="923">Taille du disque local</entry>
+  <entry key="924">Taille du disque public</entry>
+  <entry key="925">Paramètres de la licence</entry>
+  <entry key="926">Vous pouvez soit lier l'utilisateur à une date d'expiration ou à un nombre de minutes lorsque vous activez la licence.</entry>
+  <entry key="927">Vérifier la licence</entry>
+  <entry key="928">Forfait</entry>
+  <entry key="929">Date d'expiration</entry>
+  <entry key="930">Secondes restantes</entry>
+  <entry key="931">Temps total</entry>
+  <entry key="932">Votre licence a expiré. Vous devez soit acheter des minutes (paiement à la minute) soit un volume forfaitaire.</entry>
+  <entry key="933">Cliquez et achetez</entry>
+  <entry key="934">Temps restant sur votre compte :</entry>
+  <entry key="935">Information licence utilisateur</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Fermer</entry>
+  <entry key="938">Votre licence a expiré. Vous devez soit acheter des minutes (paiement à la minute) soit un volume forfaitaire</entry>
+  <entry key="939">Paramètres de la licence</entry>
+  <entry key="940">Vous pouvez soit acheter des minutes pour faire des conférences en ligne (paiement à la minute).&lt;br/&gt;&lt;br/&gt; Ou acheter un volume forfaitaire de 3-12 mois.&lt;br/&gt;&lt;br/&gt;Envoyer des invitations (liens directs vers les salles de conférences) ou créer des salles de conférences via le calendrier pour des utilisateurs externes est seulement possible avec un volume forfaitaire !</entry>
+  <entry key="941">Acheter 60 minutes 9,99 euros (16 cents par minute)</entry>
+  <entry key="942">Acheter 5 heures 19,99 euros (6 cents par minute)</entry>
+  <entry key="943">Acheter 3 mois pour 29,99 euros (9,99 euros par mois)</entry>
+  <entry key="944">Acheter 6 mois pour 39,99 euros (6,66 euros par mois)</entry>
+  <entry key="945">Paiement à la minute</entry>
+  <entry key="946">Volume forfaitaire</entry>
+  <entry key="947">Vous avez une licence illimitée</entry>
+  <entry key="948">Votre licence expirera à :</entry>
+  <entry key="949">Vous avez effectué un paiement à la minute. Il vous reste :</entry>
+  <entry key="950">Acheter un nouveau crédit !</entry>
+  <entry key="951">Voulez-vous votre propre serveur ?</entry>
+  <entry key="952">Vous voudriez avoir {0} installé sur votre serveur ou intégré dans Moodle, SugarCRM, votre site web ou intranet ? Les prix commencent à 500 euros par installation !</entry>
+  <entry key="953">Ou envoyez-nous un message</entry>
+  <entry key="954">Répondre à :</entry>
+  <entry key="955">Message :</entry>
+  <entry key="956">Envoyer</entry>
+  <entry key="957">Cliquez ici pour obtenir des infos et les prix</entry>
+  <entry key="958">Détails de la carte de crédit</entry>
+  <entry key="959">Prénom</entry>
+  <entry key="960">Nom</entry>
+  <entry key="961">Type de carte de crédit</entry>
+  <entry key="962">Carte VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Numéro de carte</entry>
+  <entry key="967">Date d'expiration</entry>
+  <entry key="968">Numéro de vérification</entry>
+  <entry key="969">Adresse de facturation</entry>
+  <entry key="970">Adresse</entry>
+  <entry key="971"></entry>
+  <entry key="972">Ville</entry>
+  <entry key="973">Pays</entry>
+  <entry key="974">Etat (seulement USA)</entry>
+  <entry key="975">Code postal</entry>
+  <entry key="976">Montant</entry>
+  <entry key="977">Soumettre</entry>
+  <entry key="978">Etape 1: {0} - Formulaire de paiement</entry>
+  <entry key="979">E-mail</entry>
+  <entry key="980">Cliquez "Régler avec Paypal" pour payer.&lt;br/&gt; Paypal accepte VISA, MasterCard, Discover ou American Express. &lt;br/&gt;Il ne faut pas s'inscrire chez Paypal. &lt;br/&gt;Les citoyens allemands peuvent aussi payer avec un débit direct (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Merci d'avoir acheté {0}. &lt;br/&gt; &lt;br/&gt; Dès que nous aurons reçu le paiement, votre compte sera mis à jour.&lt;br/&gt; Vous recevrez un e-mail avec votre facture en PDF.&lt;br/&gt;Vous pouvez également vérifier les transactions passées et actuelles dansd votre profil.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Vous pouvez fermer cette fenêtre maintenant et retourner à {0}.</entry>
+  <entry key="982">Soumettre et acheter !</entry>
+  <entry key="983">Cliquer et acheter !</entry>
+  <entry key="984">Etape 3 : Paiement {0} - Vérifier la commande et acheter !</entry>
+  <entry key="985">Nom</entry>
+  <entry key="986">Paiement reçu !</entry>
+  <entry key="987">Bonjour,</entry>
+  <entry key="988">Nous avons reçu votre paiement. Votre profil utilisateur a été mis-à-jour. Voir votre facture ci-attachée. La facture ansi que toutes les factures passées peuvent être téléchargées dans votre profil utilisateur.</entry>
+  <entry key="989">Merci d'utiliser {0}!</entry>
+  <entry key="990">Paiement {0} reçu-</entry>
+  <entry key="991">Statut des paiements et transactions</entry>
+  <entry key="992">Hachage de transaction</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Mois</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Statut</entry>
+  <entry key="997">Facture</entry>
+  <entry key="998"></entry>
+  <entry key="999">Vous devez acheter un volume forfaitaire pour pouvoir envoyer des invitations ou créer des réunions via le calendrier. Avec un paiement à la minute il ne vous est possible que d'accéder à {0}. Vous ne pouvez pas permettre à des tiers de participer à une réunion.</entry>
+  <entry key="1000">Cette adresse e-mail est déjà utilisée par un autre utilisateur.</entry>
+  <entry key="1001">Paramètres SIP</entry>
+  <entry key="1002">Le numéro de conférence et PIN sont créés automatiquement via la passerelle OpenXG RPC</entry>
+  <entry key="1003">Numéro SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Supprimer les objets sur le document actuel seulement !</entry>
+  <entry key="1006">Seule l'URL entrée dans la barre de statut est envoyée aux participants !</entry>
+  <entry key="1007">Créer des groupes de travail [Groupes restreints]</entry>
+  <entry key="1008">Choisir les utilisateurs pour un nouveau groupe de travail !</entry>
+  <entry key="1009">Vous pouvez choisir les utilisateurs ici et créer une nouvelle salle de conférence ("Groupe de travail") pour eux. Les utilisateurs choisis seront automatiquement transférés dans la nouvelle salle ou recevront une notification. Les modérateurs des groupes de travail recevront en plus une liste des salles actuelles afin qu'ils puissent changer de salle si nécessaire.</entry>
+  <entry key="1010">Nom d'utilisateur</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Utilisateurs pour le nouveau groupe de travail :</entry>
+  <entry key="1014">Créer un groupe de travail</entry>
+  <entry key="1015">Annuler</entry>
+  <entry key="1016">Choisissez au moins un utilisateur pour le groupe de travail !</entry>
+  <entry key="1017">Ajouter utilisateur au groupe</entry>
+  <entry key="1018">Supprimer utilisateur du groupe de travail</entry>
+  <entry key="1019">L'utilisateur est modérateur du groupe de travail (Il peut gérer les groupes de travail et les utilisateurs des groupes de travail peuvent lui demander de venir dans la salle)</entry>
+  <entry key="1020">Type de salle</entry>
+  <entry key="1021">Si vous cochez "Forcer utilisateur à changer de groupe de travail", tous les utilisateurs choisis seront automatiquement transférés vers la nouvelle salle. Autrement ils recevront une notification avec un bouton afin qu'ils &lt;i&gt;puissent&lt;/i&gt; aller dans la nouvelle salle. Les modérateurs de groupes de travail ont toujours la possibilité de gérer les groupes de travail et de passer de l'un à l'autre.</entry>
+  <entry key="1022">Gérer les groupes de travail</entry>
+  <entry key="1023">Vous pouvez ici passer d'un groupe de travail à l'autre pour lesquels vous êtes modérateur. Les utilisateurs dans les groupes de travail peuvent vous envoyer un message, par exemple pour vous demander de passer les aider. Vous pouvez également terminer un groupe de travil et tous les utilisateurs seront alors déconnectés.</entry>
+  <entry key="1024">Forcer utilisateur à passer dans un nouveau groupe de travail</entry>
+  <entry key="1025">Nom</entry>
+  <entry key="1026">Créé</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Utilisateurs disponibles</entry>
+  <entry key="1030">Ajouter un utilisateur avec le 'plus' à gauche ou le supprimer avec la croix à droite !</entry>
+  <entry key="1031">1) Paramètres du groupe de travail</entry>
+  <entry key="1032">2) Ajouter des utilisateurs au groupe de travail</entry>
+  <entry key="1033">Nom du groupe de travail</entry>
+  <entry key="1034">Groupe de travail</entry>
+  <entry key="1035">Aller dans la salle</entry>
+  <entry key="1036">Changer pour ce groupe de travail</entry>
+  <entry key="1037">Terminer le groupe de travail et déconnecter tous les utilisateurs</entry>
+  <entry key="1038">Nouveau groupe de travail</entry>
+  <entry key="1039">Il y a un nouveau groupe de travail disponible pour vous.</entry>
+  <entry key="1040">Aller dans le groupe de travail</entry>
+  <entry key="1041">Actions du groupe de travail</entry>
+  <entry key="1042">Vous pouvez réouvrir cette fenêtre via le menu principal dans la sedction "Actions" !</entry>
+  <entry key="1043">Envoyer un message au modérateur du groupe de travail</entry>
+  <entry key="1044">Nouveau groupe de travail</entry>
+  <entry key="1045">Il y a un nouveau groupe de travail disponible. Vous pouvez passer dans cette salle. Les groupes de travail sont des groupes restreints avec la possibilité de demander de l'aide au modérateur. Votre groupe de travail est également accessible dans la section 'Mes réunions'.</entry>
+  <entry key="1046">Aller au groupe de travail</entry>
+  <entry key="1047">Créé par :</entry>
+  <entry key="1048">Nom du groupe de travail :</entry>
+  <entry key="1049">Cette fenêtre restera ouverte même si vous quittez la salle !</entry>
+  <entry key="1050">Utilisateurs pour ce groupe de travail</entry>
+  <entry key="1051">3) Autres groupes de travail auxquels vous avez accès</entry>
+  <entry key="1052">Envoyer un message au modérateur du groupe de travail. Par exemple si vous devez modérer la salle ou si vous avez une question particulière.</entry>
+  <entry key="1053">Envoyer</entry>
+  <entry key="1054">2) Utilisateurs invités à ce groupe de travail</entry>
+  <entry key="1055">Est modérateur du groupe de travail</entry>
+  <entry key="1056">Voici tous les utilisateurs qui ont été invités à ce groupe de travail par le modérateur.</entry>
+  <entry key="1057">Il n'y a pas de modérateur connecté pour le moment !</entry>
+  <entry key="1058">Veuillez entrer un message</entry>
+  <entry key="1059">Veuillez venir nous aider, nous avons un problème dans notre groupe de travail !</entry>
+  <entry key="1060">Un utilisateur d'un groupe de travail a besoin de votre aide.</entry>
+  <entry key="1061">Groupe de travail demande de l'aide</entry>
+  <entry key="1062">Message :</entry>
+  <entry key="1063">De :</entry>
+  <entry key="1064">Vous n'êtes pour le moment dans aucun groupe de travail. Mais vous pouvez accéder ici à tous les groupes de travail auxquels vous avez accès.</entry>
+  <entry key="1065">Sauvegarder le système. La sauvegarde inclut toutes les données générées par les utilisateurs. La configuration n'est pas inclue ainsi que les étiquettes des langues car ces données sont importées avec l'installateur du système. Pour mettre votre système à jour, exportez votre système (1) réinstallez la nouvelle version dans une nouvelle base de données (2) et importez la sauvegarde (3). La sauvegarde devrait être importée avant de générer de nouvelles données avec le nouveau système.</entry>
+  <entry key="1066">Sauvegarde système</entry>
+  <entry key="1067">Permettre à l'utilisateur de partager/enregistrer son écran</entry>
+  <entry key="1068">Refuser à l'utilisateur de partager/enregistrer son écran</entry>
+  <entry key="1069">L'utilisateur est modérateur, il peut tout faire !</entry>
+  <entry key="1070">voudrait partager/enregistrer son écran.</entry>
+  <entry key="1071">Vous avez la permission de partager/enregistrer votre écran</entry>
+  <entry key="1072">Demander le droit de partager/enregistrer l'écran.</entry>
+  <entry key="1073">Autoriser/Refuser le droit de partager/enregistrer l'écran</entry>
+  <entry key="1074">Couper le son</entry>
+  <entry key="1075">Mettre le son</entry>
+  <entry key="1076">Salle audio seulement</entry>
+  <entry key="1077">Activez ce champ et les utilisateurs auront seulement l'option audio et non vidéo dans une salle de conférence. Ceci peut-être bon pour économiser de la bande passante.</entry>
+  <entry key="1078">Permettre le contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1079">Refuser le contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1080">Demander le droit de contrôler à distance (Durant un partage d'écran)</entry>
+  <entry key="1081">Vous avez le droit de contrôler à distance (Durant un partage d'écran)</entry>
+  <entry key="1082">souhaite contrôler à distance.</entry>
+  <entry key="1083">L'utilisateur est modérateur, il peut tout faire (Contôle du bureau à distance)</entry>
+  <entry key="1084">Autoriser/Refuser le droit au contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1085">1) Pour copier et coller du texte de votre presse-papier vers l'écran du PC distant, cliquez sur l'écran, ensuite cliquez avec le bouton droit dans le champ de texte et choisissez "Insérer" du menu contextuel.&lt;br/&gt;&lt;br/&gt;2) Pour copier du texte depuis le PC distant vers le presse-papier de votre PC, mettez le texte en surbrillance sur l'écran du PC distant, ensuite cliquez avec le bouton droit et choisissez &lt;i&gt;Copier le texte en surbrillancet&lt;/i&gt;</entry>
+  <entry key="1086">Copier et coller du texte de votre PC vers un PC distant et vice-versa..</entry>
+  <entry key="1087">Copier le texte en surbrillance</entry>
+  <entry key="1088">Comment copier-coller</entry>
+  <entry key="1089">Qualité du partage d'écran :</entry>
+  <entry key="1090">très haute qualité</entry>
+  <entry key="1091">Haute qualité</entry>
+  <entry key="1092">Qualité moyenne</entry>
+  <entry key="1093">Basse qualité</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Clavier :</entry>
+  <entry key="1097">Fermer le Webinar !</entry>
+  <entry key="1098">Le Webinar est déjà fermé, vous allez être redirigé vers une offre intéressante dans</entry>
+  <entry key="1099">Fermer la salle</entry>
+  <entry key="1100">URL de sortie</entry>
+  <entry key="1101">Paramètres de fermeture</entry>
+  <entry key="1102">Si la salle est fermée les utilisateurs seront redirigés vers l'URL de sortie.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nom</entry>
+  <entry key="1106">Fichier de configuration</entry>
+  <entry key="1107">Configuration Ldap</entry>
+  <entry key="1108">Nom</entry>
+  <entry key="1109">Activé</entry>
+  <entry key="1110">Inséré</entry>
+  <entry key="1111">Inséré par</entry>
+  <entry key="1112">Mis à jour</entry>
+  <entry key="1113">Mis à jour par</entry>
+  <entry key="1114">Les fichiers de configuration sont dans le répertoire webapps/openmeetings/conf. Vous devez charger manuellement les fichiers vers ce répertoire. Les modifications dans le fichier de configuration sont en ligne immédiatement.</entry>
+  <entry key="1115">Nom du fichier</entry>
+  <entry key="1116">Si vous activez "Ajouter le domaine au nom d'utilisateur" la veleur du champ "domaine" sera ajoutée à chaque login entré dans la fenêtre de login. Ceci peut-être utile si le login dans le Ldap est enregistré en incluant le nom de domaine. Par exemple : un utilisateur entre "hans" le domaine spécifié étant "localhost.com", le login vérifié avec Ldap sera : hans@localhost.com</entry>
+  <entry key="1117">Ajouter le domaine</entry>
+  <entry key="1118">Domaine</entry>
+  <entry key="1119">Insérer</entry>
+  <entry key="1120">Copier le texte en surbrillance</entry>
+  <entry key="1121">Texte du presse-papier distant</entry>
+  <entry key="1122">Montrer le presse-papier distant</entry>
+  <entry key="1123">Ne plus montrer</entry>
+  <entry key="1124">Copier le texte ici...</entry>
+  <entry key="1125">Vous devez avoir le droit de contôler à distance (ou avoir la modération) pour copier et coller du texte de ou vers l'écran distant.</entry>
+  <entry key="1126">Editer les paramètres par défaut...</entry>
+  <entry key="1127">Ne pas montrer la boite d'info dans le contrôle à distance à propos du copier-coller</entry>
+  <entry key="1128">Sauver</entry>
+  <entry key="1129">Enlever</entry>
+  <entry key="1130">Annuler</entry>
+  <entry key="1131">Inviter l'utilisateur dans la salle de conférence</entry>
+  <entry key="1132">Choisissez une salle de conférence. L'utilisateur invité recevra un message avec votre nom et un lien vers la salle.</entry>
+  <entry key="1133">Connecté depuis :</entry>
+  <entry key="1134">Entrer dans la salle après l'envoi de l'invitation</entry>
+  <entry key="1135">Inviter</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">souhaite vous inviter dans la salle de conférence :</entry>
+  <entry key="1138">Message d'invitation</entry>
+  <entry key="1139">Envoyer invitation</entry>
+  <entry key="1140">n'a &lt;b&gt;pas&lt;/b&gt; accepté votre invitation !</entry>
+  <entry key="1141">Accepter</entry>
+  <entry key="1142">Refuser</entry>
+  <entry key="1143">Fus. horaire</entry>
+  <entry key="1144">Détails de l'événement</entry>
+  <entry key="1145">Nom</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Créé par</entry>
+  <entry key="1148">Message du fus. hor.</entry>
+  <entry key="1149">Vérifiez "le message du fuseau horaire" pour transmettre aux utilisateurs un message la fois prochaine qu'ils se connectent.</entry>
+  <entry key="1150">Veuillez vérifier le fuseau horaire dans votre profil utilisateur.</entry>
+  <entry key="1151">Nouvelle conférence {0} :</entry>
+  <entry key="1152">Détails :</entry>
+  <entry key="1153">Début :</entry>
+  <entry key="1154">Fin :</entry>
+  <entry key="1155">Conférence {0} modifiée :</entry>
+  <entry key="1156">Organisateur :</entry>
+  <entry key="1157">Conférence {0} annulée :</entry>
+  <entry key="1158">Rappel conférence {0} :</entry>
+  <entry key="1159">Paramètres communautaires</entry>
+  <entry key="1160">Montrer les données de contact à tout le monde</entry>
+  <entry key="1161">Ajoutez des champs d'intérêt que vous avez ou que vous cherchez afin de trouver des partenaires intéressants pour une conférence. Séparez les termes par des virgules.</entry>
+  <entry key="1162">Mes intérêts</entry>
+  <entry key="1163">Je cherche</entry>
+  <entry key="1164">Nom</entry>
+  <entry key="1165">Fus. horaire</entry>
+  <entry key="1166">Centres d'intérêt</entry>
+  <entry key="1167">Information de contact</entry>
+  <entry key="1168">Montrer les données de contact aux contacts seulement</entry>
+  <entry key="1169">Ne montrer les données de contact à personne</entry>
+  <entry key="1170">Mon profil</entry>
+  <entry key="1171">Editer les paramètres</entry>
+  <entry key="1172">Chercher des utilisateurs</entry>
+  <entry key="1173">Voir votre profil comme les autres le voient</entry>
+  <entry key="1174">Editer vos paramètres, ajouter vos centres d'intérêts</entry>
+  <entry key="1175">Chercher d'autres utilisateurs et étendre votre réseau</entry>
+  <entry key="1176">Chercher</entry>
+  <entry key="1177">Utilisateur offre</entry>
+  <entry key="1178">Utilisateur cherche</entry>
+  <entry key="1179">Texte libre</entry>
+  <entry key="1180">Nom</entry>
+  <entry key="1181">Fus. horaire</entry>
+  <entry key="1182">Offres</entry>
+  <entry key="1183">Recherches</entry>
+  <entry key="1184">Résultat :</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Ajouter à vos contacts</entry>
+  <entry key="1187">Envoyer un message</entry>
+  <entry key="1188">Contacts et Messages</entry>
+  <entry key="1189">Contacts en attente</entry>
+  <entry key="1190">Accepter</entry>
+  <entry key="1191">Refuser</entry>
+  <entry key="1192">Bonjour,</entry>
+  <entry key="1193">souhaite vous ajouter à sa liste de contacts.</entry>
+  <entry key="1194">Vérifiez vos demandes de contact dans {0} ou cliquez sur les liens pour accepter ou refuser les demandes</entry>
+  <entry key="1195">cet utilisateur est déjà dans vos contacts ou a reçu une invitation à votre liste de contact à laquelle il n'a pas encore répondu.</entry>
+  <entry key="1196">Votre liste de contacts</entry>
+  <entry key="1197">Editez vos contacts et messages,&lt;br/&gt; gérez vos contacts en attente !</entry>
+  <entry key="1198">vous a confirmé comme contact !</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Afficher/Copier le journal du t'chat</entry>
+  <entry key="1201">Journal du t'chat</entry>
+  <entry key="1202">De</entry>
+  <entry key="1203">Sujet</entry>
+  <entry key="1204">Envoyer</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">Nouveau mail</entry>
+  <entry key="1208">Cliquez pour écrire un nouveau message à n'importe quel de vos contacts</entry>
+  <entry key="1209">Ecrire un nouveau message</entry>
+  <entry key="1210">A :</entry>
+  <entry key="1211">Sujet:</entry>
+  <entry key="1212">Activez le zoom 100% et le tableau blanc zoomera de telle sorte que tous les&lt;br/&gt;documents seront visibles suivant la résolution d'écran de chaque participant.</entry>
+  <entry key="1213">Ejecter l'utilisateur</entry>
+  <entry key="1214">Vous ne pouvez pas vous éjecter vous-même de la salle de conférence ! Si vous désirez sortir, fermez votre navigateur ou utilisez le bouton de sortie !</entry>
+  <entry key="1215">Voulez-vous vraiment déconnecter cet utilisateur de cette salle de conférence ?</entry>
+  <entry key="1216">Confirmez l'action...</entry>
+  <entry key="1217">Vous ne pouvez pas éjecter un super-modérateur d'une salle !</entry>
+  <entry key="1218">Réserver une salle de conférence</entry>
+  <entry key="1219">Début</entry>
+  <entry key="1220">Fin</entry>
+  <entry key="1221">Ajouter une requête opionnelle pour la réunion et créer la salle. L'événement sera alors copié dans le calendrier de chaque participant.</entry>
+  <entry key="1222">Boite de réception</entry>
+  <entry key="1223">Envoyé</entry>
+  <entry key="1224">Poubelle</entry>
+  <entry key="1225">C'est vous ! Vous ne pouvez pas vous ajouter vous-même à vos propres contacts.</entry>
+  <entry key="1226">L'utilisateur a déjà été refusé !</entry>
+  <entry key="1227">L'utilisateur a déjà été approuvé !</entry>
+  <entry key="1228">Le hachage de ce contact n'est pas valide !</entry>
+  <entry key="1229">Utilisateur ajouté à la liste de contact !</entry>
+  <entry key="1230">Utilisateur refusé comme contact et supprimé de la liste des contacts en attente !</entry>
+  <entry key="1231">Il n'y a pas un tel contact !</entry>
+  <entry key="1232">Vous voulez vraiment supprimer ce contact ?</entry>
+  <entry key="1233">Confirmez la suppression du contact</entry>
+  <entry key="1234">Supprimer le contact de la liste</entry>
+  <entry key="1235">Profil utilisateur</entry>
+  <entry key="1236">Afficher le profil utilisateur</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Chercher</entry>
+  <entry key="1239">Tout sélectionner</entry>
+  <entry key="1240">Sélectionner aucun</entry>
+  <entry key="1241">Sélectionner non lus</entry>
+  <entry key="1242">Sélectionner lus</entry>
+  <entry key="1243">Déplacer vers répertoire...</entry>
+  <entry key="1244">Ajouter nouveau répertoire...</entry>
+  <entry key="1245">Supprimer</entry>
+  <entry key="1246">Des mails effacés se trouvent toujours dans votre poubelle !</entry>
+  <entry key="1247">Marquer non lu</entry>
+  <entry key="1248">Marquer lu</entry>
+  <entry key="1249">Répondre</entry>
+  <entry key="1250">Répondre à tous</entry>
+  <entry key="1251">Faire suivre</entry>
+  <entry key="1252">Actions...</entry>
+  <entry key="1253">Envoyer un message privé</entry>
+  <entry key="1254">Rien de sélectionné !</entry>
+  <entry key="1255">Déplacer dans la boite de réception</entry>
+  <entry key="1256">Supprimer (final)</entry>
+  <entry key="1257">Cette action ne peut être annulée !</entry>
+  <entry key="1258">Créer dossier</entry>
+  <entry key="1259">Ajouter des dossiers et organiser vos messages !</entry>
+  <entry key="1260">Ajouter un dossier</entry>
+  <entry key="1261">Ajouter</entry>
+  <entry key="1262">Supprimer un dossier</entry>
+  <entry key="1263">Vous ne pouvez supprimer ce dossier, il contient toujours des messages ! Supprimez-les d'abord ou déplacez-les vers un autre dossier.</entry>
+  <entry key="1264">Editer le nom</entry>
+  <entry key="1265">Voulez-vous vraiment supprimer ce dossier ? Il n'est pas possible d'annuler cette action par la suite.</entry>
+  <entry key="1266">Votre demande a été envoyée à l'utilisateur. L'utilisateur va recevoir une notification pour accepter ou refuser votre demande. Bien évidemment, seules les demandes acceptées se trouvent dans vore liste de contacts !</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">L'utilisateur ne partage pas ses données personnelles de contact.</entry>
+  <entry key="1269">L'utilisateur ne partage ses données personnelles de contact qu'avec ses contacts.</entry>
+  <entry key="1270">Adresse &amp; tél.</entry>
+  <entry key="1271">Votre code d'invitation n'est pas valide, le code n'est valide que durant cette date et heure spécifiques :</entry>
+  <entry key="1272">Cet événement est connecté à plusieurs calendriers d'autres utilisateurs. Vos modifications seront également mises-à-jour dans leurs calendriers. Voulez*-vous vraiment mettre à jour l'événement ?</entry>
+  <entry key="1273">Confirmez la mise à jour</entry>
+  <entry key="1274">Permettre au contact de voir le calendrier (voir seulement)</entry>
+  <entry key="1275">Ne pas partager le calendrier</entry>
+  <entry key="1276">Calendriers des contacts</entry>
+  <entry key="1277">Vos contacts doivent vous approuver d'abord avant que vous ne puissiez voir leurs calendriers.</entry>
+  <entry key="1278">Vous ne pouvez pas enregistrer ou supprimer des événements d'un autre calendrier que le vôtre !</entry>
+  <entry key="1279">Montrer mon propre calendrier à nouveau !</entry>
+  <entry key="1280">Cet événement est connecté à plusieurs calendriers d'autres utilisateurs. Votre action va également supprimer l'événement de leurs calendriers. Voulez-vous vraiment supprimer cet événement ?</entry>
+  <entry key="1281">Confirmez l'action</entry>
+  <entry key="1282">Entrer dans la salle</entry>
+  <entry key="1283">Accéder à la salle de conférence</entry>
+  <entry key="1284">Il y a un événement et une salle de conférence liée à ce message privé.</entry>
+  <entry key="1285">Vous devez enregistrer l'événement d'abord !</entry>
+  <entry key="1286">Il n'y a pas de telle salle libre. L'événement dans le calendrier et de la salle associée a déjà été supprimé !</entry>
+  <entry key="1287">Choisissez votre pseudo</entry>
+  <entry key="1288">Prénom</entry>
+  <entry key="1289">Nom</entry>
+  <entry key="1290">E-mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Longueur minimum de 4 caractères pour le prénom et le nom.</entry>
+  <entry key="1293">Veuillez entrer un e-mail valide !</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Vous connecter avec votre login Facebook</entry>
+  <entry key="1296">Date inscr.</entry>
+  <entry key="1297">Vous êtes connecté avec votre compte Facebook. Vous devriez mettre à jour votre profil avec l'e-mail correct. Sans quoi vous ne recevrez pas les invitations et messages privés des autres utilisateurs.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Ne plus montrer le message de mise à jour du profil</entry>
+  <entry key="1300">plus d'options d'affichage...</entry>
+  <entry key="1301">Nouveau message privé :</entry>
+  <entry key="1302">Cliquez ici pour aller dans votre profil et voir le message complet...</entry>
+  <entry key="1303">Répondre</entry>
+  <entry key="1304">Salles et t'chats</entry>
+  <entry key="1305">Mes salles</entry>
+  <entry key="1306">Ma salle de conférence (pour 1-16 utilisateurs)</entry>
+  <entry key="1307">Ma salle webinar (pour 1-120 utilisateurs)</entry>
+  <entry key="1308">Id du propriétaire</entry>
+  <entry key="1309">Veuillez entrer un mot de passe</entry>
+  <entry key="1310">Vous devez avoir un compte de niveau Utilisateur, Modérateur ou Administrateur</entry>
+  <entry key="1311">Service-Web (accessible seulement via SOAP)</entry>
+  <entry key="1312">Charger directement sur le tableau blanc</entry>
+  <entry key="1313">Voulez-vous vraiment supprimer ce tableau blanc ? Cette action ne peut être annulée !</entry>
+  <entry key="1314">Charger sur le tableau blanc</entry>
+  <entry key="1315">N'oubliez pas de commencer l'enregistrement ! Un utilisateur par salle doit toujours le commencer si vous souhaitez avoir l'enregistrement par la suite.</entry>
+  <entry key="1316">Commencer l'enregistrement</entry>
+  <entry key="1317">Flèche</entry>
+  <entry key="1318">Cercle</entry>
+  <entry key="1319">Ligne</entry>
+  <entry key="1320">Carré</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Texte/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Dessin libre</entry>
+  <entry key="1325">Sélectionner/Déplacer</entry>
+  <entry key="1326">Dessiner Formes</entry>
+  <entry key="1327">Couper/Déplacer</entry>
+  <entry key="1328">Zoom +/-</entry>
+  <entry key="1329">Imprimer</entry>
+  <entry key="1330">Défaire</entry>
+  <entry key="1331">Poubelle</entry>
+  <entry key="1332">Ajouter Grille</entry>
+  <entry key="1333">Partager Fichier</entry>
+  <entry key="1334">Sélectionner Forme</entry>
+  <entry key="1335">Sélectionner Clipart</entry>
+  <entry key="1336">Copier</entry>
+  <entry key="1337">Couper</entry>
+  <entry key="1338">Coller</entry>
+  <entry key="1339">Effacer</entry>
+  <entry key="1340">Voulez-vous vraiment effacer le contenu entier du tableau blanc ?</entry>
+  <entry key="1341">Charger directement sur le tableau blanc</entry>
+  <entry key="1342">Participants</entry>
+  <entry key="1343">Gestionnaire de participants</entry>
+  <entry key="1344">Présent</entry>
+  <entry key="1345">Contrôle à distance</entry>
+  <entry key="1346">Ejecter</entry>
+  <entry key="1347">T'chat</entry>
+  <entry key="1348">Inviter Participants</entry>
+  <entry key="1349">Par e-mail</entry>
+  <entry key="1350">L'utilisateur est modérateur</entry>
+  <entry key="1351">L'utilisateur a sa webcam connectée</entry>
+  <entry key="1352">Désactiver le remplissage de forme</entry>
+  <entry key="1353">Activer le remplissage de forme</entry>
+  <entry key="1354">Aimanter à la grille</entry>
+  <entry key="1355">Autoriser l'enregistrement</entry>
+  <entry key="1356">Attendre l'enregistrement</entry>
+  <entry key="1357">Cacher la barre supérieure</entry>
+  <entry key="1358">Jouer la vidéo</entry>
+  <entry key="1359">Voulez-vous vraiment supprimer le contenu du document actif ?</entry>
+  <entry key="1360">Accepter et donner le droit à l'utilisateur</entry>
+  <entry key="1361">Refuser</entry>
+  <entry key="1362">Je</entry>
+  <entry key="1363">Activités et actions</entry>
+  <entry key="1364">Supprimer le tableau blanc</entry>
+  <entry key="1365">Vous devez avoir la modération ou le droit de dessiner sur le tableau blanc pour supprimer un tableau blanc !</entry>
+  <entry key="1366">Pas permis</entry>
+  <entry key="1367">a quitté la salle.</entry>
+  <entry key="1368">Icônes mathématiques</entry>
+  <entry key="1369">Pas de catégorie</entry>
+  <entry key="1370">Style de couleurs</entry>
+  <entry key="1371">Qualité</entry>
+  <entry key="1372">Domaine</entry>
+  <entry key="1373">Aller à</entry>
+  <entry key="1374">rouge-orange</entry>
+  <entry key="1375">vert océan</entry>
+  <entry key="1376">bleu acier</entry>
+  <entry key="1377">bleu acier clair</entry>
+  <entry key="1378">rouge doré</entry>
+  <entry key="1379">gris argent</entry>
+  <entry key="1380">défini par l'utilisateur</entry>
+  <entry key="1381">meilleur</entry>
+  <entry key="1382">charger/déposer</entry>
+  <entry key="1383">moyen</entry>
+  <entry key="1384">Couper le micro globalement</entry>
+  <entry key="1385">Activer le micro globalement</entry>
+  <entry key="1386">Couper le micro des autres</entry>
+  <entry key="1387">Votre micro a été globalement coupé par le modérateur. Vous ne pouvez pas l'activer vous-même !</entry>
+  <entry key="1388">Couper le micro globalement ?</entry>
+  <entry key="1389">Voulez-vous vraiment couper votre propre micro globalement ? Plus personne ne pourra plus vous entendre !</entry>
+  <entry key="1390">Couper le micro localement ?</entry>
+  <entry key="1391">Voulez-vous vraiment couper ce micro ? Vous ne pouvez le couper que localement sur votre écran. Cela n'a pas d'effet sur les autres utilisateurs. Seuls les modérateurs peuvent couper un micro globalement !</entry>
+  <entry key="1392">Couper le micro globalement ?</entry>
+  <entry key="1393">Voulez-vraiment couper le micro de cet utilisateur globalement ? Plus personne ne pourra l'entendre !</entry>
+  <entry key="1394">Votre micro est allumé. Cliquez ici pour envoyer un message au modérateur afin qu'il coupe votre micro globalement (dans toute la salle) !</entry>
+  <entry key="1395">Votre micro est coupé. Cliquez ici pour envoyer un message au modérateur afin qu'il active votre micro globalement (dans toute la salle) !</entry>
+  <entry key="1396">souhaite que le modérateur coupe mon micro globalement.</entry>
+  <entry key="1397">souhaite que le modérateur active mon micro globalement.</entry>
+  <entry key="1398">souhaite que le modérateur active son micro.</entry>
+  <entry key="1399">souhaite que le modérateur coupe son micro.</entry>
+  <entry key="1400">Activer micro. Cliquez ici pour couper son micro globalement !</entry>
+  <entry key="1401">Couper micro. Cliquez ici pour activer son micro globalement !</entry>
+  <entry key="1402">Le micro de cet utilisateur est coupé globalement par le modérateur. Vous ne pouvez pas l'activer !</entry>
+  <entry key="1403">Couper votre micro globalement</entry>
+  <entry key="1404">Activer votre micro globalement</entry>
+  <entry key="1405">Couper micro</entry>
+  <entry key="1406">Activer micro</entry>
+  <entry key="1407">Couper le micro globalement</entry>
+  <entry key="1408">Activer micro globalement</entry>
+  <entry key="1409">Seuls les modérateurs peuvent couper ou activer le micro d'un utilisateur globalement ! Pour couper votre propre micro : veuillez utiliser l'icône microphone sur votre fenêtre vidéo !</entry>
+  <entry key="1410">Nom du sondage</entry>
+  <entry key="1411">Vous</entry>
+  <entry key="1412">Sondages</entry>
+  <entry key="1413">actif</entry>
+  <entry key="1414">Simple graphique</entry>
+  <entry key="1415">Graphique camembert</entry>
+  <entry key="1416">Veuillez entrer e-mail</entry>
+  <entry key="1417">Nouveau(x) message(s)</entry>
+  <entry key="1418">Clôturer</entry>
+  <entry key="1419">Etes-vous sûr de vouloir clore ce sondage ? Plus personne ne pourra plus voter.</entry>
+  <entry key="1420">Supprimer</entry>
+  <entry key="1421">Etes-vous sûr de vouloir supprimer ce sondage ? Les résultats seront supprimés également.</entry>
+  <entry key="1422">Code IS de la langue</entry>
+  <entry key="1423">Autoriser/Refuser le droit de donner l'audio exclusif</entry>
+  <entry key="1424">Autoriser l'utilisateur à donner l'audio exclusif</entry>
+  <entry key="1425">Refuser à l'utilisateur de donner l'audio exclusif</entry>
+  <entry key="1426">souhaite avoir la permission d'avoir l'audio exclusif.</entry>
+  <entry key="1427">souhaite que le modérateur me donne la permission d'audio exclusif.</entry>
+  <entry key="1428">Donner une permission d'audio exclusif.</entry>
+  <entry key="1429">Résolution caméra</entry>
+  <entry key="1430">Changer la résolution affecte la bande passante, une image plus grande à besoin de plus de bande passante !</entry>
+  <entry key="1431">Vous n'avez pas l'autorisation de vous donner à vous ou aux autres l'audio exclusif. Vous devez demander cette autorisation au modérateur ou lui demander de le faire.</entry>
+  <entry key="1432">Je souhaite avoir le droit d'avoir l'audio exclusif</entry>
+  <entry key="1433">Me donne l'audio exclusif (alternativement cliquez sur votre fenêtre vidéo ou appuyez sur F12)</entry>
+  <entry key="1434">Microphone est allumé !</entry>
+  <entry key="1435">Microphone est coupé !</entry>
+  <entry key="1436">Cacher le t'chat</entry>
+  <entry key="1437">Cacher les activités</entry>
+  <entry key="1438">Cacher l'explorateur de fichiers</entry>
+  <entry key="1439">Cacher le menu actions</entry>
+  <entry key="1440">Cacher le partage d'écran</entry>
+  <entry key="1441">Cacher le tableau blanc</entry>
+  <entry key="1442">Afficher le statut du micro</entry>
+  <entry key="1443">Options de disposition</entry>
+  <entry key="1444">Nouvel événement</entry>
+  <entry key="1445">Les liens envoyés aux participants pour une conférence lorsque vous sauvez le calendrier sont protégés par mot de passe, pas la salle ! Cela signifie que si vous sauvez l'événement plusieurs fois avec un mot de passe différent, chaque participant recevra un nouveau lien avec un mot de passe différent. Les anciens liens sont toujours valables une fois envoyés !</entry>
+  <entry key="1446">Editer les détails</entry>
+  <entry key="1447">Afficher composeur SIP</entry>
+  <entry key="1448">Appeler</entry>
+  <entry key="1449">Afficher les événements du contact</entry>
+  <entry key="1450">Votre page d'accueil</entry>
+  <entry key="1451">Organiser les réunions</entry>
+  <entry key="1452">Regarder les enregistrements et les interviews</entry>
+  <entry key="1453">Choisir et démarrer une conférence</entry>
+  <entry key="1454">Gérer les utilisateurs et les droits</entry>
+  <entry key="1455">Gérer les connections et éjecter des utilisateurs</entry>
+  <entry key="1456">Gérer les groupes d'utilisateurs</entry>
+  <entry key="1457">Gérer les salles de conférences</entry>
+  <entry key="1458">Gérer les paramètres système</entry>
+  <entry key="1459">Gérer les étiquettes et les formulations</entry>
+  <entry key="1460">Gérer les configurations LDAP et ADS</entry>
+  <entry key="1461">Exporter/Importer les sauvegardes système</entry>
+  <entry key="1462">Vous devez être modérateur ou avoir le droit d'accéder au tableau blanc pour pouvoir déposer ou télécharger des fichiers ou pour ajouter ou supprimer des dossiers.</entry>
+  <entry key="1463">Editer texte</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publier</entry>
+  <entry key="1466">Commencer la diffusion</entry>
+  <entry key="1467">Arrêter la diffusion</entry>
+  <entry key="1468">Hôte</entry>
+  <entry key="1469">App</entry>
+  <entry key="1470">ID</entry>
+  <entry key="1471">Réduisez la largeur de l'écran avant de le déplacer</entry>
+  <entry key="1472">Réduisez la hauteur de l'écran avant de le déplacer</entry>
+  <entry key="1473">Réduisez 'x' avant d'agrandir</entry>
+  <entry key="1474">Réduisez 'y' avant d'agrandir</entry>
+  <entry key="1475">Complétez ces paramètres pour diffuser votre écran vers un site tiers.</entry>
+  <entry key="1476">Veuillez démarrer le partage d'écran pour pouvoir le diffuser</entry>
+  <entry key="1477">La permission du modérateur est requise pour enregistrer</entry>
+  <entry key="1478">Vous n'avez pas la permission de donner l'audio exclusif à un participant. Vous devez être modérateur ou avoir le droit de donner l'audio exclusif.</entry>
+  <entry key="1479">Charger un fichier</entry>
+  <entry key="1480">Ouvre la fenêtre des paramètres du partage d'écran</entry>
+  <entry key="1481">Un modérateur existant doit l'approuver</entry>
+  <entry key="1482">Demander au modérateur de pouvoir partager votre micro/caméra</entry>
+  <entry key="1483">Proposez aux utilisateurs de voter en répondant à un sondage</entry>
+  <entry key="1484">Les résultats graphiques des sondages</entry>
+  <entry key="1485">Voter s'il existe un sondage activé dans cette salle</entry>
+  <entry key="1486">Editer les paramètres de la caméra et du micro</entry>
+  <entry key="1487">Confirmer et quitter la salle</entry>
+  <entry key="1488">Appeler une personne extérieure via VoIP/SIP</entry>
+  <entry key="1489">Envoyer un mail avec un lien direct vers cette salle</entry>
+  <entry key="1490">Changer les paramètres de votre tableau blanc</entry>
+  <entry key="1491">Taille maximum</entry>
+  <entry key="1492">Demander au modérateur le droit de partager votre tableau blanc</entry>
+  <entry key="1493">Démarrer t'chat privé</entry>
+  <entry key="1494">Tous</entry>
+  <entry key="1495">Vous ne pouvez pas démarrer un t'chat privé avec vous-même.</entry>
+  <entry key="1496">Vous avez déjà démarré un t'chat privé avec ce participant.</entry>
+  <entry key="1497">Voulez-vous vraiment supprimer ce t'chat privé ?</entry>
+  <entry key="1498">Serveurs</entry>
+  <entry key="1499">Serveurs dans le groupe</entry>
+  <entry key="1500">Nom du serveur</entry>
+  <entry key="1501">Adresse du serveur</entry>
+  <entry key="1502">Détails du serveur</entry>
+  <entry key="1503">Envoyer SMS</entry>
+  <entry key="1504">Publier. Utilisateur :</entry>
+  <entry key="1505">Pour économiser du temps et de la bande passante vous pouvez utiliser la ligne de commande pour sauvegarder/restaurer/mettre à niveau votre système &lt;ol&gt; &lt;li&gt;Aller dans le répertoire d'installation d'OM (par ex. /opt/red5)&lt;/li&gt; &lt;li&gt;Arrêter OM (par ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/nom_du_backup.zip (créer la sauvegarde d'OM)&lt;/li&gt; &lt;li&gt;télécharger la nouvelle version d'OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (déplacer la version d'OM qui fonctionne par sécurité.)&lt;/li&gt; &lt;li&gt;extraire la nouvelle version d'OM dans /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (ou './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' dans le cas d'une BD qui n'est pas celle par défaut )&lt;/li&gt; &lt;li&gt;Démarrer OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Salles pour tous les utilisateurs</entry>
+  <entry key="1507">Salles pour les utilisateurs du groupe actuel</entry>
+  <entry key="1508">Salles de l'utilisateur</entry>
+  <entry key="1509">Créer/Modifier salle particulière</entry>
+  <entry key="1510">Vous pouvez entrer plusieurs adresses sous le format : prénom1 nom1 &lt;e-mail1&gt;,"prénom2 nom2" &lt;e-mail2&gt;,'prénom3 nom3' &lt;e-mail3&gt;, ...</entry>
+  <entry key="1511">Ajuster le volume</entry>
+  <entry key="1512">Ajuster le volume du micro</entry>
+  <entry key="1513">T'chat est-t-il modéré</entry>
+  <entry key="1514">Autoriser les messages</entry>
+  <entry key="1515">Panneau de t'chat ouvert par défaut</entry>
+  <entry key="1516">Panneau des fichiers ouvert par défaut</entry>
+  <entry key="1517">Dernier ping</entry>
+  <entry key="1518">Chaque 'esclave' envoie un ping au maitre toutes les 3 secondes (configurable). Le dernier ping doit être inférieur à 1 minute pour que le maitre utilise l'esclave.</entry>
+  <entry key="1519">Port HTTP</entry>
+  <entry key="1520">Utilisateur (Accès SOAP)</entry>
+  <entry key="1521">Mot de passe</entry>
+  <entry key="1522">Chemin vers Webapp</entry>
+  <entry key="1523">Protocole</entry>
+  <entry key="1524">Ping</entry>
+  <entry key="1525">Actif</entry>
+  <entry key="1526">Générer URL</entry>
+  <entry key="1527">Test réseau</entry>
+  <entry key="1528">Sélection auto de la fenêtre vidéo de l'interview</entry>
+  <entry key="1529">Souligné</entry>
+  <entry key="1530">Style de police</entry>
+  <entry key="1531">Autoriser les styles de police</entry>
+  <entry key="1532">Couleur de police</entry>
+  <entry key="1533">Hyperlien</entry>
+  <entry key="1534">Montrer les statistiques de session</entry>
+  <entry key="1535">Détails de session</entry>
+  <entry key="1536">Importer Système</entry>
+  <entry key="1537">Inclure les fichiers uploadés et les enregistrements dans le backup</entry>
+  <entry key="1538">Activer le transport SIP dans la salle</entry>
+  <entry key="1539">Voulez-vous vraiment donner l'audio exclusif à cet utilisateur ?</entry>
+  <entry key="1540">Veuillez spécifier votre fuseau horaire</entry>
+  <entry key="1541">conférence (1-25 utilisateurs)</entry>
+  <entry key="1542">restreint (1-150 utilisateurs)</entry>
+  <entry key="1543">interview (1:1 réunion avec enregistrement)</entry>
+  <entry key="1544">Une configuration avec cette clé existe déjà, veuillez spécifier une autre clé ou éditer la configuration existante</entry>
+  <entry key="1545">Sauvegarde, veuillez patienter.</entry>
+  <entry key="1546">Bienvenue</entry>
+  <entry key="1547">Widget affichant les infos de base des utilisateurs et les liens pour le support</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Activer l'upload et l'import d'images vers le tableau blanc<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>ImageMagick</strong> sur le serveur. Vous trouverez plus d'informations à l'adresse <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>.
+					Les instructions d'installation peuvent être trouvées ici <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>. Sur la majorité des systèmes linux vous pouvez le trouver via votre manager de paquets (apt-get).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Activer l'import de fichiers PDF sur le tableau blanc<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>GhostScript</strong> sur le serveur. Vous trouverez plus d'information sur <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>. 
+					Sur la majorité des systèmes linux vous pouvez le trouver via votre manager de paquets (apt-get).
+				</li>
+				<li>Installez <strong>SWFTools</strong> sur le serveur. Vous trouverez plus d'informations sur <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>. 
+					Certaines distribution de Linux le possède déjà. Voir
+					<a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>).
+					La version recommandée de <strong>SWFTools</strong> est 0.9 - les versions précédentes ont un bug qui modifie les dimensions des objets sur le tableau blanc.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Activer l'import de documents Office (.doc, .docx, .ppt, .pptx, etc.) sur le tableau blanc<a	href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>Le service OpenOffice</strong> doit être démarré et en écoute sur le port 8100.  Voir <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a> pour plus de détails.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Activer l'enregistrement et l'import de fichiers vidéo (.avi, .flv, .mov und .mp4) sur le tableau blanc<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>FFmpeg</strong>. Vous devez obtenir la dernière version de FFMPEG ! Pour Windows vous pouvez la télécharger par exemple de <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a>. Pour Linux ou OSx vous devriez utiliser l'une des nombreuses instructions d'installation sur le web.  Vous devez activer libmp3lame !
+				</li>
+				<li>Installez <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					Vous devez installer la dernière version ! SoX 12.xx ne fonctionnera PAS !
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Si vous avez plus de questions ou avez besoin d'aide pour l'installation ou l'hébergement :</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Support via la communauté OpenMeetings :</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Listes de diffusion</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Support commercial:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Support commercial</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation pour l'environnement de production<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Par défaut {0} utilise la base de données {1}. Dans un environnement de production vous devriez opter pour
+			{2}, {3}, {4}, {5} or {6}.
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Données utilisateur</entry>
+	<entry key="install.wizard.params.step1.username">Nom d'utilisateur</entry>
+	<entry key="install.wizard.params.step1.username.title">Entrez un nom d'utilisateur</entry>
+	<entry key="install.wizard.params.step1.password">Mot de passe</entry>
+	<entry key="install.wizard.params.step1.password.title">Entrez un mot de passe</entry>
+	<entry key="install.wizard.params.step1.email">E-Mail</entry>
+	<entry key="install.wizard.params.step1.email.title">Entrez une adresse E-Mail</entry>
+	<entry key="install.wizard.params.step1.tz">Fuseau horaire</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domaines)</entry>
+	<entry key="install.wizard.params.step1.group">Nom</entry>
+	<entry key="install.wizard.params.step1.group.title">Entrez le nom de votre organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Autoriser les  nouveaux utilisateurs de s'enregistrer (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Envoyer un E-Mail aux nouveaux utilisateurs (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Les nouveaux utilisateurs doivent vérifier leur adresse E-Mail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Installer toutes les salles par défaut</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Adresse mail du système (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Entrez l'adresse mail utilisaée par le système</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Entrez un  serveur SMTP</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Port du serveur SMTP (Le port standard est 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Entrez le port du serveur SMTP Normalement 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">Nom d'utilisateur système SMTP (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Entrez le nom d'utilisateur mail du système</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">Mot de passe SMTP (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Entrez le mot de passe mail du système</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Activer TLS pour le serveur mail</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Inclure l'adresse mail de l'organisateur dans le champ des destinataires d'un E-Mail (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Langue par défaut</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Police par défaut pour l'export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Convertisseurs</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> Voir</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Veuillez indiquer le nombre de dpi que swftools devra utiliser lors de la conversion de PDF vers SWF.</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. Indiquez combien de dpi swtools devra utiliser pour les conversions PDF vers SWF. (Par défaut : 100 dpi).</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools Qualité JPEG</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Entrez la qualité des images jpec incorporées. 0 étant la moins bonne et 100 la meilleure (par défaut : 85).</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. 
+						Indiquez la qualité pour les images jpeg. 0 est la moins bonne (taille plus petite), 100 est la meilleure (taille plus grande) (par défaut : 85).</entry>
+	<entry key="install.wizard.params.step3.swfPath">Chemin vers SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Indiquez le chemin vers swftools,  par ex. C:/swftools (Windows), ou laissez vide si swftools se trouve déjà dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. Si le résultat de cette commande vous montre une liste d'options, laissez ce champ vide, dans le cas contraire veuillez indiquer le chemin vers swftools.
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">Chemin vers ImageMagick</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Indiquez le chemin vers ImageMagick dans le cas où ImageMagick ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">Chemin vers FFMPEG</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Indiquez le chemin vers FFMPEG dans le cas où FFMPEG ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">Chemin vers SoX</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Indiquez le chemin vers SoX dans le cas où SoX ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">Chemin vers JOD</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Chemin vers la bibliothèque JOD (http://code.google.com/p/jodconverter). Configurez le chemin pour pointer vers le répertoire lib de JOD qui contient également le fichier jodconverter-core-version.jar.</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">Chemin vers OpenOffice-/LibreOffice pour jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Chemin vers OpenOffice/LibreOffice (optionnel). Indiquez le chemin réel dans le cas où jodconverter ne pourrait pas trouver l'installation de OpenOffice-/LibreOffice automatiquement.</entry>
+	<entry key="install.wizard.params.step3.officePath.text">Chemin vers OpenOffice/LibreOffice (optionnel). Indiquez le chemin réel dans le cas où jodconverter ne pourrait pas trouver l'installation de OpenOffice-/LibreOffice automatiquement.</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Type de cryptage</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Classe de cryptage</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Indiquez le nom de la classe de cryptage. NE MODIFIEZ PAS CECI SI VOUS N'ETES PAS SUR !</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Vous pouvez utiliser ce cryptage par défaut qui est équivalent à la fonction MD5 de PHP ou style de cryptage BDS en utilisant : 
+		<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		Pour plus d'information ou pour écrire votre propre cryptage voir : <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a>. Vous pouvez éditer cette valeur plus tard MAIS les utilisateurs créés précédemment pourraient ne plus être utilisables. 
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Configuration red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Activer SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Activer l'intégration red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">Préfix pour les salles SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Préfix pour le num. de tél. des salles de conférence</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">Contexte des extensions SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Contexte des extensions Asterisk</entry>
+
+	<entry key="install.wizard.install.desc">Veuillez cliquer sur "Finish" pour commencer l'installation !</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Entrer dans l'application</entry>
+	<entry key="install.wizard.congrats.port">Si votre serveur Red5 tourne sur un port différent ou sur un domaine différent</entry>
+	<entry key="install.wizard.congrats.config">modifiez la config du client</entry>
+	<entry key="install.wizard.congrats.mail">Liste de diffusion</entry>
+	<entry key="install.wizard.congrats.commercial">Il existe des sociétés
+		qui offrent un support commercial pour Apache OpenMeetings :</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
new file mode 100644
index 0000000..ce8d21e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferencia</entry>
+  <entry key="2">Xuntanza</entry>
+  <entry key="3">Eventos</entry>
+  <entry key="4">Axustes</entry>
+  <entry key="5">Perfíl</entry>
+  <entry key="6">Administración</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Non hai ningín ficheiro dispoñíbel</entry>
+  <entry key="10">Gravado polo profesor</entry>
+  <entry key="11">Usuarios conectados:</entry>
+  <entry key="12">Iniciar unha conferencia</entry>
+  <entry key="13">O meu nome</entry>
+  <entry key="14">Vídeo conferencia</entry>
+  <entry key="15">Enviar un ficheiro</entry>
+  <entry key="16">Actualizar a lista</entry>
+  <entry key="17">Marcar como ficheiro principal</entry>
+  <entry key="18">Nova enquisa</entry>
+  <entry key="19">Nova enquisa para a conferencia</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipo de enquisa:</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Información: Cada usuario conectado recibe unha mensaxe coa nova enquisa.</entry>
+  <entry key="24">Crear unha enquisa</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sí/Non</entry>
+  <entry key="27">Valor numérico 1-10</entry>
+  <entry key="28">Enquisa</entry>
+  <entry key="29">Precisase ser moderador para crear unha enquisa.</entry>
+  <entry key="30">O seu voto foi rexistrado</entry>
+  <entry key="31">Xa respostou á enquisa previamente</entry>
+  <entry key="32">Votar!</entry>
+  <entry key="33">A súa resposta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">Non</entry>
+  <entry key="36">desexa coñecer:</entry>
+  <entry key="37">Resultados da enquisa</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Non hai enquisas</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunión (max 4 postos)</entry>
+  <entry key="44">Conferencia (max 50 postos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros postos</entry>
+  <entry key="47">Xa foi seleccionado</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">O moderador abandonou a reunión.</entry>
+  <entry key="50">Información do sistema</entry>
+  <entry key="51">Seleccionar un dispositivo</entry>
+  <entry key="52">Seleccionar a cámara:</entry>
+  <entry key="53">Seleccionar o micrófono:</entry>
+  <entry key="54">Aceptar</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Precisa volverse conectar</entry>
+  <entry key="57">Editar a configuración</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Aceptar</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Borrar o taboleiro</entry>
+  <entry key="63">Desexa limpar o taboleiro antes de engadir outro gráfico?</entry>
+  <entry key="64">Non volver preguntar</entry>
+  <entry key="65">non</entry>
+  <entry key="66">Editar a configuración</entry>
+  <entry key="67">Requirir confirmación antes de limpar o taboleiro</entry>
+  <entry key="68">Información do usuario</entry>
+  <entry key="69">Limpar o taboleiro</entry>
+  <entry key="70">Desfacer</entry>
+  <entry key="71">Refacer</entry>
+  <entry key="72">Seleccionar un obxeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Debuxar unha liña</entry>
+  <entry key="76">Debuxar un subraiado</entry>
+  <entry key="77">Rectángulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Frecha</entry>
+  <entry key="80">Borrar o elemento escollido</entry>
+  <entry key="81">Solicitar ser moderador</entry>
+  <entry key="82">Solicitar</entry>
+  <entry key="83">Cancelar</entry>
+  <entry key="84">Teño unha pregunta</entry>
+  <entry key="85">Pechar</entry>
+  <entry key="86">Cursiva</entry>
+  <entry key="87">Negriña</entry>
+  <entry key="88">ESPERANDO</entry>
+  <entry key="89">Un usuario desexa facerse moderador, pode concederlle acceso só ao taboleiro ou cambiar por completo o rol da moderación. Usuario:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Rexeitar</entry>
+  <entry key="92">Cancelar</entry>
+  <entry key="93">Enviando solicitudes aos seguintes usuarios</entry>
+  <entry key="94">Aceptado</entry>
+  <entry key="95">Rexeitado</entry>
+  <entry key="96">Cambiar de moderador</entry>
+  <entry key="97">Vostede non é moderador deste curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Sentimolo pero esta aula está completa. Ténteo máis tarde</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">Pechado</entry>
+  <entry key="102">erro na entrada de datos</entry>
+  <entry key="103">o nome de usuario debe conter alo menos 4 caracteres</entry>
+  <entry key="104">o contrasinal de usuario debe conter alo menos 4 caracteres</entry>
+  <entry key="105">Este nome de usuario xa existe</entry>
+  <entry key="106">Este correo-e xa está rexistrado</entry>
+  <entry key="107">Erro do sistema, por favor contacte co administrador do sistema</entry>
+  <entry key="108">Inicio de sesión</entry>
+  <entry key="109">Usuario ou correo-e:</entry>
+  <entry key="110">Contrasinal:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Conectarse</entry>
+  <entry key="113">Rexistrarse</entry>
+  <entry key="114">Usuario:</entry>
+  <entry key="115">Contrasinal:</entry>
+  <entry key="116">Contrasinal (de novo):</entry>
+  <entry key="117">Nome:</entry>
+  <entry key="118">Apelido(s):</entry>
+  <entry key="119">Correo Electrónico:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Rexistrarse</entry>
+  <entry key="122">Cancelar</entry>
+  <entry key="123">Non está rexistrado?</entry>
+  <entry key="124">Inicio</entry>
+  <entry key="125">Usuarios</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizacións</entry>
+  <entry key="128">Salas de xuntanzas</entry>
+  <entry key="129">público</entry>
+  <entry key="130">Organización</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Inicio de sesión</entry>
+  <entry key="133">Contrasinal</entry>
+  <entry key="134">Contrasinal (de novo)</entry>
+  <entry key="135">Nome</entry>
+  <entry key="136">Apelido(s)</entry>
+  <entry key="137">Correo Electrónico</entry>
+  <entry key="138">Data de nacemento</entry>
+  <entry key="139">Enderezo</entry>
+  <entry key="140">Código postal</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Información adicional</entry>
+  <entry key="143">Datos do usuario</entry>
+  <entry key="144">Gardar</entry>
+  <entry key="145">Gardar</entry>
+  <entry key="146">ID do usuario</entry>
+  <entry key="147">Inicio de sesión</entry>
+  <entry key="148">Nome</entry>
+  <entry key="149">Apelido(s)</entry>
+  <entry key="150">Mostrar o seguinte</entry>
+  <entry key="151">Mostrar o anterior</entry>
+  <entry key="152">Eliminar o rexistro</entry>
+  <entry key="153">Cancelar</entry>
+  <entry key="154">Eliminar</entry>
+  <entry key="155">Novo rexistro</entry>
+  <entry key="156">Actualizar o rexistro</entry>
+  <entry key="157">Eliminar o rexistro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">desactivado</entry>
+  <entry key="160">activado</entry>
+  <entry key="161">Organizacións</entry>
+  <entry key="162">Calendario</entry>
+  <entry key="163">Pechar</entry>
+  <entry key="164">ID da organización</entry>
+  <entry key="165">Nome</entry>
+  <entry key="166">Usuario</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Administrador</entry>
+  <entry key="169">Nivel de usuario</entry>
+  <entry key="170">Organización</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">Engadir unha organización</entry>
+  <entry key="173">Engadir unha organización</entry>
+  <entry key="174">Cancelar</entry>
+  <entry key="175">Engadir</entry>
+  <entry key="176">Eliminar unha organización</entry>
+  <entry key="177">Usuario</entry>
+  <entry key="178">Engadir un usuario</entry>
+  <entry key="179">Eliminar un usuario</entry>
+  <entry key="180">Engadir un usuario á organización</entry>
+  <entry key="181">Buscar un usuario</entry>
+  <entry key="182">Buscar</entry>
+  <entry key="183">Usuario</entry>
+  <entry key="184">Organización</entry>
+  <entry key="185">Entrar</entry>
+  <entry key="186">Salas de conferencias</entry>
+  <entry key="187">Salas de conferencia</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organizacións</entry>
+  <entry key="192">Salas de xuntanzas</entry>
+  <entry key="193">Nome</entry>
+  <entry key="194">Tipo</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentario</entry>
+  <entry key="197">Gardar e exportar</entry>
+  <entry key="198">cargar</entry>
+  <entry key="199">Gardar como</entry>
+  <entry key="200">Nome do ficheiro</entry>
+  <entry key="201">nome do ficheiro</entry>
+  <entry key="202">Cancelar</entry>
+  <entry key="203">Gardar</entry>
+  <entry key="204">Erro</entry>
+  <entry key="205">Cargando</entry>
+  <entry key="206">Obxetos cargados</entry>
+  <entry key="207">Sincronizando, usuarios en espera:</entry>
+  <entry key="208">Cargando datos de imaxe</entry>
+  <entry key="209">Sincronizando, usuarios en espera:</entry>
+  <entry key="210">Limpar o taboleiro</entry>
+  <entry key="211">limpiar o taboleiro, perderase toda a información do taboleiro</entry>
+  <entry key="212">Confirmar antes de cargar un ficheiro</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Asunto</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Mensaxe</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Datos do usuario</entry>
+  <entry key="222">O seu alcume para esta conferencia</entry>
+  <entry key="223">Alcume</entry>
+  <entry key="224">Nome</entry>
+  <entry key="225">Apelido(s)</entry>
+  <entry key="226">Correo-e</entry>
+  <entry key="227">Idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Cargando</entry>
+  <entry key="230">Cargando datos, espere un momento</entry>
+  <entry key="231">Contrasinal incorrecto</entry>
+  <entry key="232">Por favor introduza dúas veces o mesmo contrasinal con un mínimo de 6 caracteres</entry>
+  <entry key="233">Correo incorrecto</entry>
+  <entry key="234">Vostede introduciu un enderezo de correo electrónico incorrecto</entry>
+  <entry key="235">O rexistro completouse satisfactoriamente</entry>
+  <entry key="236">A súa conta foi creada, a partires deste momento xa pode iniciar unha sesión</entry>
+  <entry key="237">Vostede non pode compartir o seu escritorio neste momento. Alguén está xa a compartir o seu escritorio neste momento.</entry>
+  <entry key="238">Compartición non permitida</entry>
+  <entry key="239">Compartir/gravar o seu escritorio</entry>
+  <entry key="240">Problemas de conexión: O seu largo de banda non é abondo e perderase información. Si a mensaxe se repite con frecuencia solicitelle ao moderador que reduza a calidade.</entry>
+  <entry key="241">Escritorio de:</entry>
+  <entry key="242">Debuxar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Conversa</entry>
+  <entry key="245">Ficheiros</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Descargar o documento orixinal</entry>
+  <entry key="248">Descargar o documento en pdf</entry>
+  <entry key="249">Cargar unha presentación no taboleiro</entry>
+  <entry key="250">Configuración</entry>
+  <entry key="251">Arrastrar este obxecto</entry>
+  <entry key="252">Axustar o tamaño do obxecto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir á primeira páxina</entry>
+  <entry key="256">Ir á páxina anterior</entry>
+  <entry key="257">Ir á páxina seguinte</entry>
+  <entry key="258">Ir á última páxina</entry>
+  <entry key="259">Diminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuración</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuración</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última actualización</entry>
+  <entry key="269">actualizado por</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">Valor</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuarios</entry>
+  <entry key="274">Eliminar un usuario da organización</entry>
+  <entry key="275">E</entry>
+  <entry key="276">Este usuario xa é membro da organización</entry>
+  <entry key="277">Novas</entry>
+  <entry key="278">Ligazóns rápidas</entry>
+  <entry key="279">Ir á conferencia</entry>
+  <entry key="280">Ir ao auditorio</entry>
+  <entry key="281">Axuda e asistencia</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Informar dun fallo!</entry>
+  <entry key="285">máis</entry>
+  <entry key="286">Sitio web do proxecto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de correo do Proxecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Lembrar o inicio de sesión</entry>
+  <entry key="289">Contido</entry>
+  <entry key="290">A miña páxina de inicio</entry>
+  <entry key="291">As miñas xuntanzas programadas</entry>
+  <entry key="292">Os meus eventos programados</entry>
+  <entry key="293">Xuntanzas públicas</entry>
+  <entry key="294">Xuntanzas privadas</entry>
+  <entry key="295">Eventos públicos</entry>
+  <entry key="296">Eventos privados</entry>
+  <entry key="297">Contido público</entry>
+  <entry key="298">Contido privado</entry>
+  <entry key="299">Contido persoal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderación</entry>
+  <entry key="302">Teño unha pregunta</entry>
+  <entry key="303">Enquisas</entry>
+  <entry key="304">Seleccione un ficheiro</entry>
+  <entry key="305">Axustes</entry>
+  <entry key="306">Axustes de cámara e micrófono</entry>
+  <entry key="307">Configuración do taboleiro</entry>
+  <entry key="308">Saír</entry>
+  <entry key="309">Volver ás salas</entry>
+  <entry key="310">Saír</entry>
+  <entry key="311">Esqueceu o seu contrasinal?</entry>
+  <entry key="312">Restablecer o contrasinal</entry>
+  <entry key="313">Por correo-e</entry>
+  <entry key="314">Por inicio de sesión</entry>
+  <entry key="315">O seu correo-e</entry>
+  <entry key="316">O seu inicio de seción</entry>
+  <entry key="317">Enviar correo-e con ligazón de restablecemento</entry>
+  <entry key="318">Nose atopou o enderezo de correo electrónico. Asegúrese de introducir o mesmo enderezo de correo electrónico que utilizou para crear a súa conta.</entry>
+  <entry key="319">Escriba o seu correo-e ou o nome de usuario</entry>
+  <entry key="320">Non hai ningun usuario con este nome</entry>
+  <entry key="321">Enviouselle un correo-e cunha ligazón especial, revise a súa bandexa de entrada de correo. Se non atopa este correo revise a configuración de spam do seu servidor e reenvie o correo de confirmación.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensaxe</entry>
+  <entry key="324">Non se atopou ó usuario (hash incorrecto).</entry>
+  <entry key="325">Xerar contrasinal</entry>
+  <entry key="326">Inicio de sesión</entry>
+  <entry key="327">cambiar o contrasinal</entry>
+  <entry key="328">novo contrasinal</entry>
+  <entry key="329">volva a escribir o contrasinal</entry>
+  <entry key="330">Os contrasinais introducidos non son identicos.</entry>
+  <entry key="331">Escriba 4 ou máis caracteres. Diferéncianse as maiúsculas</entry>
+  <entry key="332">Cambiouse o contrasinal, agora pode a iniciar sesión.</entry>
+  <entry key="333">Aceptar</entry>
+  <entry key="334">Erro descoñecido. Informe ao administradores.</entry>
+  <entry key="335">Non se atopou o nome de usuario</entry>
+  <entry key="336">Contrasinal incorrecto</entry>
+  <entry key="337">Vostede saiu do sistema</entry>
+  <entry key="338">A ferramenta de rexistro está desactivada.</entry>
+  <entry key="339">Correo-e incorrecto</entry>
+  <entry key="340">nome de ficheiro duplicado, por favor elixa outro</entry>
+  <entry key="341">o nome de ficheiro é moi curto</entry>
+  <entry key="342">Non se puido gardar o enderezo</entry>
+  <entry key="343">O usuario foi engadido, máis deberá engadilo a unha organización, ou non poderá conectarse.</entry>
+  <entry key="344">Nova gravación</entry>
+  <entry key="345">Non se atopou un campo neste FieldId.</entry>
+  <entry key="346">Non se atopou unha etiqueta para este campo.</entry>
+  <entry key="347">Precisase autorización do administrador</entry>
+  <entry key="348">Editor de idioma.</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">ID da etiqueta</entry>
+  <entry key="351">Nome da etiqueta</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valores do campo</entry>
+  <entry key="354">Nome da etiqueta</entry>
+  <entry key="355">Valor da etiqueta</entry>
+  <entry key="356">ID da etiqueta</entry>
+  <entry key="357">Vostede só eliminou a etiqueta pero NON o campo! Non se pode eliminar un campo, é probábel que existan etiquetas noutros idiomas.</entry>
+  <entry key="358">ID de etiqueta incorrecto. O seu FieldLanguagesvalues_Id non se atopou na base de datos.</entry>
+  <entry key="359">Vostede non pode eliminar este campo, só pode eliminar etiquetas, NON campos. Non hai unha etiqueta cargada polo momento, ou non hai ningún campo seleccionado, ou non é unha etiqueta para este idioma para o campo definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Precisa pechar a sesión para ver os cambio.</entry>
+  <entry key="362">Engadir un novo idioma</entry>
+  <entry key="363">eliminar un idioma</entry>
+  <entry key="364">Engadir un novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">engadir un idioma</entry>
+  <entry key="367">Copia de seguranza</entry>
+  <entry key="368">ir ao inicio</entry>
+  <entry key="369">ir á anterior</entry>
+  <entry key="370">ir á seguinte</entry>
+  <entry key="371">ir ao final</entry>
+  <entry key="372">o usuario fala (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">acender ou apagar o son</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Os seus axustes</entry>
+  <entry key="376">ola!</entry>
+  <entry key="377">Editar o seu perfil</entry>
+  <entry key="378">Novas mensaxes:</entry>
+  <entry key="379">Cargar unha nova imaxe</entry>
+  <entry key="380">Datos do usuario - Exportar</entry>
+  <entry key="381">Todas as organizacións deben existir previamente!</entry>
+  <entry key="382">iniciar a exportación</entry>
+  <entry key="383">Por organización</entry>
+  <entry key="384">iniciar a exportación</entry>
+  <entry key="385">Datos do usuario - Importar</entry>
+  <entry key="386">elixa users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Estos ficheiros poden ser usados para:&lt;br/&gt; - Contribuir ao proxecto - Importalos a outro sistema&lt;br/&gt; - Copia de seguranza - Personalización&lt;br/&gt; - Colocalo no directorio de idiomas para a próxima instalación.</entry>
+  <entry key="389">Seleccione un ficheiro de idioma a importar. &lt;br/&gt;Seleccione correctamente o idioma no selector! &lt;br/&gt;non importa cal sexa o nome do ficheiro, &lt;br/&gt;será importado a ese idioma!</entry>
+  <entry key="390">importar - escoller ficheiro</entry>
+  <entry key="391">Gardar como...</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentario:</entry>
+  <entry key="394">gardar</entry>
+  <entry key="395">Gravacións</entry>
+  <entry key="396">Visor de gravacións</entry>
+  <entry key="397">Gravacións de salas públicas e privadas</entry>
+  <entry key="398">Usuarios:</entry>
+  <entry key="399">Unido:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuarios na sala:</entry>
+  <entry key="402">actualizar</entry>
+  <entry key="403">A sala está chea, por favor tenteo nuns minutos.</entry>
+  <entry key="404">prema nunha sala para ver os detalles</entry>
+  <entry key="405">Conversar cos usuarios desta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuarios nesta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproducir a gravación</entry>
+  <entry key="410">Duración:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo de gravación! Non pode cambiar ningún valor xa que se trata dun ficheiro gravado.</entry>
+  <entry key="413">Reproducir esta gravación</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Gravar esta xuntanza</entry>
+  <entry key="416">parar a gravación</entry>
+  <entry key="417">Gravación:</entry>
+  <entry key="418">Alguén esta a gravar agora esta xuntanza:</entry>
+  <entry key="419">Gravando! Polo usuario:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">A gravación será cancelada e non gardada.</entry>
+  <entry key="422">reanudar</entry>
+  <entry key="423">Pechar esta fiestra e reanudar a gravación</entry>
+  <entry key="424">Cambiar a liña de cor</entry>
+  <entry key="425">Seleccionar cor</entry>
+  <entry key="426">Desactivar / activar a liña de cor</entry>
+  <entry key="427">cambiar a cor de recheo</entry>
+  <entry key="428">Desactivar / activar o recheo de cor</entry>
+  <entry key="429">Cambiar o groso da liña</entry>
+  <entry key="430">Pechar</entry>
+  <entry key="431">cambiar tamaño de letra</entry>
+  <entry key="432">Eliminar a gravación</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Eliminar o rexistro da conversa no servidor</entry>
+  <entry key="443">Conversa</entry>
+  <entry key="444">enviar a mensaxe</entry>
+  <entry key="445">Emoticonas</entry>
+  <entry key="446">Emoticonas</entry>
+  <entry key="447">Escolla os dispositivos</entry>
+  <entry key="448">Són e vídeo</entry>
+  <entry key="449">Só son</entry>
+  <entry key="450">Só vídeo</entry>
+  <entry key="451">Sen son/vídeo (imáxe fixa)</entry>
+  <entry key="452">Non se enviará son/vídeo desde o seu computador, no seu lugar mostrarase a imáxe do seu perfil. Seleccione esta configuración se vostede tén problemas co seu largo de banda ou unha conexión de Internet lenta.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">XO</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lúns</entry>
+  <entry key="461">Martes</entry>
+  <entry key="462">Mércores</entry>
+  <entry key="463">Xoves</entry>
+  <entry key="464">Venres</entry>
+  <entry key="465">Sábado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">S</entry>
+  <entry key="468">Número de semana do calendario</entry>
+  <entry key="469">Xaneiro</entry>
+  <entry key="470">Febreiro</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Xuño</entry>
+  <entry key="475">Xullo</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Decembro</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar os axustes de deseño</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largo | Alto</entry>
+  <entry key="486">Contedor de video</entry>
+  <entry key="487">Contedor de moderación</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contedor de taboleiro</entry>
+  <entry key="490">Activado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largo | Alto</entry>
+  <entry key="493">Contedor de ficheiros, conversas, participantes</entry>
+  <entry key="494">Activado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largo | Alto</entry>
+  <entry key="497">O moderador retirouse, polo que ninguén está a realizar unha presentación actualmente. Vostede pode agardar ou solicitar ser moderador.</entry>
+  <entry key="498">Non hai moderador nesta sala, pero si participantes. Vostede pode esperar ou solicitar ser moderador.</entry>
+  <entry key="499">Comentario de {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensaxe do usuario:</entry>
+  <entry key="502">Mensaxe:</entry>
+  <entry key="503">Prema nesta ligazón para poder participar na xuntanza:</entry>
+  <entry key="504">Prema aquí para entrar á sala</entry>
+  <entry key="505">Se ten problemas coa ligazón, suxerímoslle que copie e pegue o seguinte texto no seu navegador:</entry>
+  <entry key="506">{0}, rexistro</entry>
+  <entry key="507">Os seus datos de usuario:</entry>
+  <entry key="508">Iniciar sesión:</entry>
+  <entry key="509">Contrasinal:</entry>
+  <entry key="510">Correo-e:</entry>
+  <entry key="511">{0} - Equipo</entry>
+  <entry key="512">{0}, rexistro</entry>
+  <entry key="513">{0} - Restablecer o contrasinal</entry>
+  <entry key="514">Prema na seguiente ligazón para introducir un novo contrasinal:</entry>
+  <entry key="515">Prema aquí para introducir un novo contrasinal</entry>
+  <entry key="516">Se ten problemas coa ligazón, suxerimoslle que copie e pegue o seguinte texto no seu navegador:</entry>
+  <entry key="517">{0}, restablecer o contrasinal</entry>
+  <entry key="518">Por favor introduza unha data correcta no formato dd.mm.aaaa, p.ex. 24.12.2001</entry>
+  <entry key="519">Por favor introduza un enderezo de correo-e corecto</entry>
+  <entry key="520">Por favor introduza un número decimal, p.ex. 1.00 (use punto e non coma)</entry>
+  <entry key="521">Por favor introduza un número enteiro, p.ex. 100</entry>
+  <entry key="522">Por favor introduza un número de teléfono correcto, p.ex +34 999 111 111</entry>
+  <entry key="523">Por favor introduza unha hora válida no formato hh:mm, p.ex. 12:34</entry>
+  <entry key="524">Contrasinal protexido</entry>
+  <entry key="525">Contrasinal</entry>
+  <entry key="526">Período de validez</entry>
+  <entry key="527">Interminable</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Unha vez</entry>
+  <entry key="530">Válido desde:</entry>
+  <entry key="531">Válido até:</entry>
+  <entry key="532">Convite a {0}</entry>
+  <entry key="533">Non existe un convite dispoñíbel para este código.</entry>
+  <entry key="534">Este convite xa foi usado e non pode utilizarse de novo.</entry>
+  <entry key="535">O código do convite é incorrecto. O convite ao través de ligazón ten validez só no momento da xuntanza! vostede non pode acceder á sala antes ou despois da reunión a través desa ligazón!</entry>
+  <entry key="536">Contrasinal:</entry>
+  <entry key="537">Verificar o contrasinal</entry>
+  <entry key="538">Contrasinal incorrecto!</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar son/vídeo</entry>
+  <entry key="541">O acceso é correcto, pero a sesión non está activa ou gardada no servidor.Vostede ten que conseguir un novo identificador de sesión e volver a acceder.</entry>
+  <entry key="542">O identificador de sesión non está iniciado ou non ten permisos de Administración. A pasarela SOAP precisa un usuario con dereitos de administrador para engadir novos usuarios.</entry>
+  <entry key="543">Esta sesión non ten datos do usuario remoto conectado. Quizais non chamou á pasarela SOAP antes de acceder ao aplicativo ou está usando un identificador de sesión incorrecto</entry>
+  <entry key="544">O gravador aínda está en fase Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eixo-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eixo-y</entry>
+  <entry key="549">l</entry>
+  <entry key="550">largo</entry>
+  <entry key="551">a</entry>
+  <entry key="552">alto</entry>
+  <entry key="553">Cambiar transparencia</entry>
+  <entry key="554">Abrir o navegador</entry>
+  <entry key="555">Pechar o navegador</entry>
+  <entry key="556">Perdeuse a conexión co servidor. Vostede precisa reiniciar o aplicativo e/ou comprobar a súa rede.</entry>
+  <entry key="557">Punteiro</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando, por favor agarde</entry>
+  <entry key="560">&lt;u&gt;Descargar como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descargar como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descargar como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descargar como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descargar como TIF&lt;/u&gt;</entry>
+  <entry key="565">Lembranza:</entry>
+  <entry key="566">Categoría:</entry>
+  <entry key="567">Repetición:</entry>
+  <entry key="568">nada</entry>
+  <entry key="569">Ubicación:</entry>
+  <entry key="570">Comeza</entry>
+  <entry key="571">Remata</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentario:</entry>
+  <entry key="574">Convidar xente</entry>
+  <entry key="575">Diario</entry>
+  <entry key="576">Mensual</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">A data de fin é despois da data de comezo!</entry>
+  <entry key="579">Por favor, insira un título!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active isto se vostede escribe nunha lingua de dereita a esquerda (orde inversa de palabras)</entry>
+  <entry key="582">Panel de control</entry>
+  <entry key="583">Ver eventos ou xuntanzas gravadas</entry>
+  <entry key="584">Xuntanza - Facer unha conferencia con 4 (ata 16) Usuarios&lt;br/&gt;todos terán acceso de son + vídeo</entry>
+  <entry key="585">Evento - Facer unha conferencia con ata 200 participantes&lt;br/&gt;Só o moderador terá son/video</entry>
+  <entry key="586">Crear usuarios, salas, organizacións&lt;br/&gt; + cambiar a configuración</entry>
+  <entry key="587">Usuarios nesta sala agora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inicio de sesión</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Cargando o documento. Por favor agarde ata que todos os clientes estean sincronizados.</entry>
+  <entry key="592">Carga completa, convertindo Documento ...</entry>
+  <entry key="593">Comezar carga</entry>
+  <entry key="594">Dialogo de cargar e importar. Por favor escolla un ficheiro do seu disco.</entry>
+  <entry key="595">Cancelar</entry>
+  <entry key="596">Seleccionar ficheiro</entry>
+  <entry key="597">Conexións</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Identificador de fluxo</entry>
+  <entry key="600">Iniciar sesión</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Alcance</entry>
+  <entry key="603">Expulsar usuario</entry>
+  <entry key="604">Expulsar a un usuario</entry>
+  <entry key="605">Realmente quere expulsar este cliente da conexión?&lt;br/&gt; Isto só borra ao cliente da sala actual. O cliente pode volver a acceder de novo.</entry>
+  <entry key="606">A súa sesión foi pechada por un administrador ou un moderador.</entry>
+  <entry key="607">Teléfono</entry>
+  <entry key="608">O usuario é moderador desta sala</entry>
+  <entry key="609">O usuario está autorizado a escribir no taboleiro</entry>
+  <entry key="610">(Re)iniciar o son/vídeo ou cambiar a configuración dos dispositivos</entry>
+  <entry key="611">Autorizar a este usuario a debuxar no taboleiro</entry>
+  <entry key="612">Denegar o permiso a debuxar no taboleiro</entry>
+  <entry key="613">Usuarios</entry>
+  <entry key="614">Filtros</entry>
+  <entry key="615">Taboleiro</entry>
+  <entry key="616">Conversa</entry>
+  <entry key="617">A súa conta está asignada a multiples organizacións. Por favor escolla unha para esta sesión.</entry>
+  <entry key="618">Esta sala atópase completa neste momento. Por favor, ténteo de novo máis tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Nomeado da sala</entry>
+  <entry key="621">Hora do servidor</entry>
+  <entry key="622">{0} - Lembranza</entry>
+  <entry key="623">Mensaxe do usuario:</entry>
+  <entry key="624">Mensaxe:</entry>
+  <entry key="625">Prema nesta ligazón para participar na xuntanza:</entry>
+  <entry key="626">Prema aquí para entrar na sala</entry>
+  <entry key="627">se ten problemas coa ligazón, por favor copie e pegue no seu navegador:</entry>
+  <entry key="628">busca interna</entry>
+  <entry key="629">Engadir externos</entry>
+  <entry key="630">Nome</entry>
+  <entry key="631">Apelido(s)</entry>
+  <entry key="632">Correo-e</entry>
+  <entry key="633">Confirme a saída</entry>
+  <entry key="634">Ten a certeza de querer saír agora?</entry>
+  <entry key="635">Acccións</entry>
+  <entry key="636">Sala de demostración</entry>
+  <entry key="637">Hora da demostración</entry>
+  <entry key="638">Horario da xuntanza</entry>
+  <entry key="639">Esta é unha sala de demostración. Para desactivar esta advertencia debería conseguir unha sala privada para o seu uso persoal ou obter un servidor propio. Será automaticamente redirixido dentro:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, agarde ata que o moderador entre na sala. O moderador pode ser un profesor, administrador, ou o creador desta sala.</entry>
+  <entry key="642">Aceptar</entry>
+  <entry key="643">Recibindo o escritorio compartida</entry>
+  <entry key="644">Hai unha nova recepción de escritorio compartido do usuario:</entry>
+  <entry key="645">Iniciar a compartición do escritorio</entry>
+  <entry key="646">Engadir nova xuntanza</entry>
+  <entry key="647">Sala de xuntanzas</entry>
+  <entry key="648">Sala de eventos</entry>
+  <entry key="649">Moderación</entry>
+  <entry key="650">Moderar usuarios</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Desexa que este usuario se convirta en moderador desa organización?</entry>
+  <entry key="654">Por favor, escolla unha organización antes de tentar engadir un usuario a ela!</entry>
+  <entry key="655">Organización - Moderador</entry>
+  <entry key="656">Ten a certeza de que desexa eliminar este usuario da organización?</entry>
+  <entry key="657">Este usuario é moderador</entry>
+  <entry key="658">Este usuario non é moderador</entry>
+  <entry key="659">Desexa que este usuario non sexa moderador desta organización?</entry>
+  <entry key="660">Engadir ou eliminar usuarios ou salas na súa organización</entry>
+  <entry key="661">Desexa elmininar este rexistro?</entry>
+  <entry key="662">Relmente desexa eliminar este usuario da súa organización? Só eliminará a relación entre o usuario e a organización, para eliminar definitivamente ao usuario ten que entrar no menú de administración.</entry>
+  <entry key="663">Non pode eliminar o seu propio usuario!</entry>
+  <entry key="664">Para usar este método precisa dunha conta de administrador!</entry>
+  <entry key="665">Non hai unha sesión asociada con este ID.</entry>
+  <entry key="666">Esta é unha conta de administrador ou moderador. Só pode editar esta conta a través do panel de administración.</entry>
+  <entry key="667">Para completar o seu rexistro, por favor prema na seguinte ligazón. Ou copie o URL na barra de navegación do seu navegador.</entry>
+  <entry key="668">Prema para verificar o seu correo-e</entry>
+  <entry key="669">Non se atopou un usuario para este Hash.</entry>
+  <entry key="670">Este usuario xa está activado!</entry>
+  <entry key="671">A súa conta foi activada satisfactoriamente!</entry>
+  <entry key="672">Iniciar sesión agora</entry>
+  <entry key="673">A súa conta non está activada. Antes use a ligazón do correo-e que recebiu durante o rexistro.</entry>
+  <entry key="674">Rexistrouse correctamente. Enviamoslle un correo-e cun código de verificación. Por favor, comprobe a súa bandexa de entrada de correo.</entry>
+  <entry key="675">Eliminar o rol de moderador deste usuario</entry>
+  <entry key="676">Dar dereitos de moderador a este usuario</entry>
+  <entry key="677">Usuario</entry>
+  <entry key="678">Acceso ao taboleiro</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderación: Por favor escolla un usuario da lista para darlle acceso ao taboleiro, moderación ou video.</entry>
+  <entry key="681">Este usuario xa é moderador, ten automáticamente acceso para debuxar.</entry>
+  <entry key="682">Este é vostede! Non é posíbel quitarse dereitos de moderador a un mesmo.</entry>
+  <entry key="683">Permitir a este usuario enviar o seu son / vídeo</entry>
+  <entry key="684">Eliminar son/vídeo deste usuario</entry>
+  <entry key="685">Teño unha pregunta</entry>
+  <entry key="686">Gustarialle debuxar no taboleiro</entry>
+  <entry key="687">Gustarialle compartir o meu son/vídeo</entry>
+  <entry key="688">Vostede é moderador desta sala</entry>
+  <entry key="689">Vostede ten acceso a debuxar no taboleiro</entry>
+  <entry key="690">Non lle está permitido compartir o seu son/vídeo</entry>
+  <entry key="691">Mensaxe ao moderador</entry>
+  <entry key="692">O usuario</entry>
+  <entry key="693">gustarialle facer unha pregunta.&lt;br/&gt;&lt;br/&gt; &lt;i&gt;(Use as iconas de estado cerca do usuario na lista de usuarios para engadir ou eliminar dereitos de moderación.)&lt;7i&gt;</entry>
+  <entry key="694">gustarialle debuxar no taboleiro. Use as iconas de estado cerca do usuario na lista de usuarios para engadir ou eliminar dereitos de debuxo no taboleiro.</entry>
+  <entry key="695">gustarialle compartir o seu son/vídeo. Use os iconos de estado preto do usuario na lista de usuarios para dar ou quitar dereitos de Audio/vídeo para calquera usuario.</entry>
+  <entry key="696">Ten que agardar até que un moderador entre na sala.</entry>
+  <entry key="697">Cancelar</entry>
+  <entry key="698">Gardar</entry>
+  <entry key="699">Día</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Ano</entry>
+  <entry key="702">Cargar un ficheiro</entry>
+  <entry key="703">Engadir un ficheiro</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Lixo</entry>
+  <entry key="706">Meus ficheiros Files (Dispositivo personal)</entry>
+  <entry key="707">Ficheiros da sala (Dispositivo público)</entry>
+  <entry key="708">Engadir ficheiro</entry>
+  <entry key="709">Engadir cartafol</entry>
+  <entry key="710">Borrar cartafol</entry>
+  <entry key="711">Editar o nome</entry>
+  <entry key="712">Novo cartafol</entry>
+  <entry key="713">Ten a certeza de que desexa eliminar este elemento?</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Abrir o documento</entry>
+  <entry key="717">Mostrar todos os ficheiro (Vista en árbore)</entry>
+  <entry key="718">Pechar o documento</entry>
+  <entry key="719">Borrar o ficheiro</entry>
+  <entry key="720">Non ten permisos para escribir ou debujar no taboleiro. Debe ser moderador ou, alo menos, ter permisos de edición do taboleiro. Solicítello a un moderador.</entry>
+  <entry key="721">Propiedades do documento</entry>
+  <entry key="722">Iniciar Java</entry>
+  <entry key="723">Iniciar Flash</entry>
+  <entry key="724">Un usuario desexa compartir o seu escritorio. Quere visualizala?</entry>
+  <entry key="725">Actualmente está compartindo o seu escritorio. Para deixar de facelo, prema no botón Parar no cliente de compartición.</entry>
+  <entry key="726">Compartindo a sesión</entry>
+  <entry key="727">Xa está compartindo o seu escritorio!</entry>
+  <entry key="728">Visor de escritorio</entry>
+  <entry key="729">Parar a compartición</entry>
+  <entry key="730">Compartición de escritorio</entry>
+  <entry key="731">Pulse Iniciar para publicar o seu escritorio</entry>
+  <entry key="732">Iniciar a compartición</entry>
+  <entry key="733">Pausa na compartición</entry>
+  <entry key="734">Seleccione un área da pantalla:</entry>
+  <entry key="735">Cambiar a largura</entry>
+  <entry key="736">Rematou a sesión de compartición!</entry>
+  <entry key="737">Cambiar a altura</entry>
+  <entry key="738">Desprazamento-X</entry>
+  <entry key="739">Desprazamento-Y</entry>
+  <entry key="740">Largo:</entry>
+  <entry key="741">Alto:</entry>
+  <entry key="742">O servidor pechou a conexión</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar Java</entry>
+  <entry key="745">Se pecha completamente esta sesión, non será posíbel reiniciar o visor durante esta sesión.</entry>
+  <entry key="746">Confirme o peche da sesión do visor</entry>
+  <entry key="747">Compartir escritorio</entry>
+  <entry key="748">Gravar a sesión</entry>
+  <entry key="749">Co-navegación</entry>
+  <entry key="750">Umm... Firefox en windows non mostra a co-navegación con claridade. Por favor, utilice outro navegador ou peche esta funcionalidade.</entry>
+  <entry key="751">Anterior</entry>
+  <entry key="752">Seguinte</entry>
+  <entry key="753">Recargar</entry>
+  <entry key="754">Inicio</entry>
+  <entry key="755">Cargar</entry>
+  <entry key="756">Engadir este sitio ao seu perfil como sitio predeterminado.</entry>
+  <entry key="757">Probar a configuración</entry>
+  <entry key="758">Comprobe a configuración do seu micrófono e/ou cámara antes de entrar na sala. Para el grave durante algúns segundos e reprodúzao, deberá escoitar a súa voz e ver a súa imaxe.</entry>
+  <entry key="759">Non volver a mostrar esta proba</entry>
+  <entry key="760">Cancelar</entry>
+  <entry key="761">Iniciar unha conferencia</entry>
+  <entry key="762">Non volver a preguntar</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Pode continuar sen facer a comprobación se non desexa publicar a imaxe e/ou o son. Os participantes sen son ou sen vídeo poden en todo caso utilizar o taboleiro, compartir o seu escritorio ou enviar mensaxes utilizando a liña de conversas.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de niveis</entry>
+  <entry key="768">Prema en Iniciar</entry>
+  <entry key="769">Iniciar a conferencia</entry>
+  <entry key="770">Iniciar o evento</entry>
+  <entry key="771">Elixir a sala</entry>
+  <entry key="772">Probar a config.</entry>
+  <entry key="773">Iniciar a conferencia</entry>
+  <entry key="774">Instruccións «Conferencia»:</entry>
+  <entry key="775">Iniciar a gravación</entry>
+  <entry key="776">Non mostrar a proba de son /vídeo antes de entrar nunha conferencia</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">As salas públicas son accesíbeis para todos os usuarios.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">As salas privadas son accesíbeis só para os usuarios da mesma organización.</entry>
+  <entry key="781">As miñas salas</entry>
+  <entry key="782">As salas nesta sección son para uso persoal. Creanse utilizando o calendario e teñen unha data de inicio e de final. Só están listadas nesta sección durante o período de tempo en que teñen validez.</entry>
+  <entry key="783">Ten que ser moderador para poder facer isto.</entry>
+  <entry key="784">Solicitar a moderación</entry>
+  <entry key="785">Solicitar acceso ao taboleiro</entry>
+  <entry key="786">Solicitar acceso á cámara/micrófono</entry>
+  <entry key="787">A autenticación Hash desta sesión xa foi usada. Non pode facerse dúas veces.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SAÍR</entry>
+  <entry key="790">Ten a certeza de que desexa saír? Sería convinte que antes limpe os documentos cargados, o taboleiro e o historial de conversas.</entry>
+  <entry key="791">Saír da conferencia</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Elixa unha sala para a xuntanza</entry>
+  <entry key="794">Hai un evento sen gardar no calendario. Gardeo ou elimineo.</entry>
+  <entry key="795">Engada, polo menos, un participante!</entry>
+  <entry key="796">Ten a certeza de que desexa eliminar este evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Engadir un evento</entry>
+  <entry key="799">día</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descrición</entry>
+  <entry key="803">Asistentes</entry>
+  <entry key="804">{0}, a súa Plataforma Web de Videoconferencia. Tan só ten que segir as instruccións, prema no botón para iniciar unha conferencia inmediatamente ou vaia ao calendario para planificar unha conferencia para o futuro.</entry>
+  <entry key="805">Planificar</entry>
+  <entry key="806">Para planificar unha conferencia, engada un novo evento no calendario. Para cada evento crearase automaticamente unha sala. Vostede e o resto de asistentes recibirán un correo-e cunha ligazón á sala.&lt;br/&gt;&lt;br/&gt;Pode escoller entre diferentes tipos de salas con diferentes deseños e sistemas de moderación. Tamén pode escoller entre diferentes tipos de notificación de correo-e que se envíen en cada evento do calendario.</entry>
+  <entry key="807">Necesita axuda?</entry>
+  <entry key="808">Restrinxido</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Engadir</entry>
+  <entry key="811">Non hai ningún usuario seleccionado. Seleccione primero un ítem da lista e prema en Engadir.</entry>
+  <entry key="812">Engadir un asistente</entry>
+  <entry key="813">Gardar</entry>
+  <entry key="814">Borar</entry>
+  <entry key="815">Detalles do evento</entry>
+  <entry key="816">Moderadores predeterminados</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nome</entry>
+  <entry key="820">Correo-e</entry>
+  <entry key="821">Engadir novo moderador predeterminado</entry>
+  <entry key="822">É supermoderadorrator</entry>
+  <entry key="823">Se a sala está moderada, sexa quen sexa xa o moderador seguirá a selo. Se non desexa que sexa así, e quere que só determinado usuario sexa o moderador, utilice a opción de moderador predeterminado.</entry>
+  <entry key="824">Un supermoderador é sempre o moderador dunha sala cando entra nela. Ademáis, naide pode quitarlle a marca de moderación</entry>
+  <entry key="825">Aplicar a supermoderación ao usuario</entry>
+  <entry key="826">Eliminar a supermoderación ao usuario</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Se engade unha organización á sala, só os usuarios de dita organización terán acceso á mesma (isto só é así se a marca de Pública está configurada como falsa!)</entry>
+  <entry key="829">Moderación</entry>
+  <entry key="830">Limitacións</entry>
+  <entry key="831">Organización</entry>
+  <entry key="832">Ten certeza?</entry>
+  <entry key="833">Ten a certeza de que desexa borar este elemento? Ten que premer no botón Gardar para almacenar os cambios!</entry>
+  <entry key="834">Non hai ningún usuario seleccionado. Seleccióneo antes para engadilo!</entry>
+  <entry key="835">Engadir un novo moderaror predeterminado</entry>
+  <entry key="836">Ten a certeza de que desexa engadir unha marca de supermoderador a este usuario? Lembre que un supermoderador non só é o moderador dunha sala, senon que ademáis ningún outro moderador poderá borrar a marca de moderación. Necesita gardar o obxecto sala para almacenar estas configuracións!</entry>
+  <entry key="837">Ten a certeza de que desexa eliminar a marca de supermoderador a este usuario? Necesita gardar o obxecto sala para almacenar estas configuracións!</entry>
+  <entry key="838">Este usuario é supermoderador. Non pode quitarlle a marca de moderación a un supermoderador!</entry>
+  <entry key="839">Ten a certeza de que desexa borrar este ficheiro/cartafol?</entry>
+  <entry key="840">Borrar un ficheiro/cartafol?</entry>
+  <entry key="841">Dna.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propiedades</entry>
+  <entry key="844">Mostrar a posición do rato aos participantes</entry>
+  <entry key="845">Compartir o son co miniaplicativo SIP</entry>
+  <entry key="846">Compartir o son con SIP e o vídeo con Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Ver o escritorio</entry>
+  <entry key="849">O usuario</entry>
+  <entry key="850">desexa compartir o seu escritorio. Desexa visualizalo?</entry>
+  <entry key="851">Pechar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">A sesión foi pechada por quen compartia o escritorio!</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Nona compartición de escritorio</entry>
+  <entry key="856">Minimizar</entry>
+  <entry key="857">Maximizar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Liña temporal da gravación</entry>
+  <entry key="860">As miñas gravacións</entry>
+  <entry key="861">Gravacións públicas</entry>
+  <entry key="862">Información</entry>
+  <entry key="863">Nome</entry>
+  <entry key="864">Lonxitude</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">Descarga</entry>
+  <entry key="868">Principal - Vídeo</entry>
+  <entry key="869">Gravación</entry>
+  <entry key="870">Pode gravar e compartir o escritorio de vez. Para permitir que outros veaan o seu escritorio prema no botón Iniciar na parte superior. Para só gravar a sesión, é abondo que prema en Iniciar a grabación.</entry>
+  <entry key="871">Iniciar a gravación</entry>
+  <entry key="872">Parar a gravación</entry>
+  <entry key="873">Descargar o ficheiro FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Reproducir</entry>
+  <entry key="876">Parar</entry>
+  <entry key="877">O usuario ten o micrófono activado</entry>
+  <entry key="878">Parar a compartición</entry>
+  <entry key="879">Permitir as preguntas do usuario</entry>
+  <entry key="880">Desactive esta opción para evitar que calquera usuario o moleste nesta sala. Facendoo o boton para solicitar a moderación («Teño unha pregunta») non é visible.</entry>
+  <entry key="881">Permisos</entry>
+  <entry key="882">Descargar como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Só son</entry>
+  <entry key="887">Houbo algún erro mentres de procesaba a gravación.</entry>
+  <entry key="888">La grabación no está aínda preparada para ver. Tenteo de novo dentro dun par de minutos.</entry>
+  <entry key="889">Rexistro:</entry>
+  <entry key="890">Mensaxe do gravador</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">O miniaplicativo SIP non está preparado</entry>
+  <entry key="893">Axustes da conta SIP</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
new file mode 100644
index 0000000..47d0a99
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -0,0 +1,1860 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencia</entry>
+  <entry key="2">Találkozó</entry>
+  <entry key="3">Előadás</entry>
+  <entry key="4">Beállítások</entry>
+  <entry key="5">Beállítások</entry>
+  <entry key="6">Adminisztráció</entry>
+  <entry key="7">Állj</entry>
+  <entry key="8">Felvétel</entry>
+  <entry key="9">Nincs elérhető fájl</entry>
+  <entry key="10">Felvétel az előadónál</entry>
+  <entry key="11">Csatlakozott felhasználók:</entry>
+  <entry key="12">Konferencia indítása</entry>
+  <entry key="13">Nevem</entry>
+  <entry key="14">VideoKonferencia</entry>
+  <entry key="15">Fájl feltöltés</entry>
+  <entry key="16">Lista frissítése</entry>
+  <entry key="17">Filejaim</entry>
+  <entry key="18">új szavazás</entry>
+  <entry key="19">Új szavazás a konferencián.</entry>
+  <entry key="20">Kérdés:</entry>
+  <entry key="21">A szavazás típusa:</entry>
+  <entry key="22">Létrehoz</entry>
+  <entry key="23">Infó: Minden bejelentkezett felhasználó értesül az új szavazásról.</entry>
+  <entry key="24">Szavazás létrehozása</entry>
+  <entry key="25">Mégse</entry>
+  <entry key="26">Igen/Nem</entry>
+  <entry key="27">Szám 1-10</entry>
+  <entry key="28">Szavazás</entry>
+  <entry key="29">Előadónak kell lenned, hogy feltehess kérdést</entry>
+  <entry key="30">A szavazatot elfogadtuk.</entry>
+  <entry key="31">Erre a kérdésre már szavaztál.</entry>
+  <entry key="32">Szavazz !</entry>
+  <entry key="33">Válasz:</entry>
+  <entry key="34">Igen</entry>
+  <entry key="35">Nem</entry>
+  <entry key="36">Tudni akarja:</entry>
+  <entry key="37">Szavazás eredménye</entry>
+  <entry key="38">Kérdés:</entry>
+  <entry key="39">Eredmény:</entry>
+  <entry key="40">Válaszok:</entry>
+  <entry key="41">Nincs elindított szavazás.</entry>
+  <entry key="42">Szavazz!</entry>
+  <entry key="43">Találkozó (max. 4 férőőhely)</entry>
+  <entry key="44">Előadás (max. 50 férőhely)</entry>
+  <entry key="45">Típus</entry>
+  <entry key="46">Szabad helyek</entry>
+  <entry key="47">Foglalt helyek</entry>
+  <entry key="48">bevitel</entry>
+  <entry key="49">A előadó elhagyta a szobát.</entry>
+  <entry key="50">Rendszer információk</entry>
+  <entry key="51">Válassz eszközt</entry>
+  <entry key="52">Válassz webkamerát:</entry>
+  <entry key="53">Válassz mikrofont:</entry>
+  <entry key="54">Rendben</entry>
+  <entry key="55">Mégse</entry>
+  <entry key="56">Újra be kell jelentkezned.</entry>
+  <entry key="57">Beállítások módosítása.</entry>
+  <entry key="58">Téma:</entry>
+  <entry key="59">Nyelv:</entry>
+  <entry key="60">Rendben</entry>
+  <entry key="61">Mégse</entry>
+  <entry key="62">Tábla törlése</entry>
+  <entry key="63">Szeretnéd, hogy a tábla törölve legyen mielőtt új kép lesz hozzáadva?</entry>
+  <entry key="64">Ne kérdezd többször</entry>
+  <entry key="65">Nem</entry>
+  <entry key="66">Beállítások módosítása</entry>
+  <entry key="67">Megerősítés a tábla törlése előtt</entry>
+  <entry key="68">Felhasználói információ</entry>
+  <entry key="69">Rajzterület törlése</entry>
+  <entry key="70">Vissza</entry>
+  <entry key="71">Újra</entry>
+  <entry key="72">Válassz objektumot</entry>
+  <entry key="73">Szöveg</entry>
+  <entry key="74">Rajz</entry>
+  <entry key="75">Vonal</entry>
+  <entry key="76">Aláhúzás</entry>
+  <entry key="77">Négyszög</entry>
+  <entry key="78">Ellipszis</entry>
+  <entry key="79">Nyíl</entry>
+  <entry key="80">a kiválasztott elem törlése</entry>
+  <entry key="81">Jelentkezés előadónak</entry>
+  <entry key="82">beállít</entry>
+  <entry key="83">Mégse</entry>
+  <entry key="84">Előadóvá válni</entry>
+  <entry key="85">bezár</entry>
+  <entry key="86">dőlt</entry>
+  <entry key="87">félkövér</entry>
+  <entry key="88">VÁRAKOZIK</entry>
+  <entry key="89">A felhasználó előadónak jelentkezik:</entry>
+  <entry key="90">elfogad</entry>
+  <entry key="91">elutasít</entry>
+  <entry key="92">mégse</entry>
+  <entry key="93">Kérelem küldése felhasználóknak:</entry>
+  <entry key="94">Elfogadva</entry>
+  <entry key="95">Elutasítva</entry>
+  <entry key="96">Előadó változtatás</entry>
+  <entry key="97">Te nem moderálhatod ezt az előadást!</entry>
+  <entry key="98">Előadó:</entry>
+  <entry key="99">A terem tele van. Kérem próbálja később.</entry>
+  <entry key="100">Ellipszis</entry>
+  <entry key="101">bezár</entry>
+  <entry key="102">beviteli adathiba</entry>
+  <entry key="103">4 vagy több karakter; kis/nagybetű számít!</entry>
+  <entry key="104">a felhasználói jelszónak legalább 4 karakternek kell lennie</entry>
+  <entry key="105">A felhasználó már létezik</entry>
+  <entry key="106">Az e-mail cím már regisztrálva van</entry>
+  <entry key="107">Rendszerhiba, keresse fel a rendszergazdát.</entry>
+  <entry key="108">Bejelentkezés</entry>
+  <entry key="109">Felhasználó:</entry>
+  <entry key="110">Jelszó:</entry>
+  <entry key="111">Nyelv</entry>
+  <entry key="112">Bejelentkezés</entry>
+  <entry key="113">Bejelentkezni</entry>
+  <entry key="114">Felhasználó:</entry>
+  <entry key="115">Jelszó:</entry>
+  <entry key="116">Újra:</entry>
+  <entry key="117">Keresztnév:</entry>
+  <entry key="118">Családnév:</entry>
+  <entry key="119">E-mail:</entry>
+  <entry key="120">Ország:</entry>
+  <entry key="121">Regisztráció</entry>
+  <entry key="122">Mégse</entry>
+  <entry key="123">Regisztráció</entry>
+  <entry key="124">Nyitó oldal</entry>
+  <entry key="125">Felhasználók</entry>
+  <entry key="126">Csoportok</entry>
+  <entry key="127">Szervezet</entry>
+  <entry key="128">Előadás-szoba</entry>
+  <entry key="129">nyilvános</entry>
+  <entry key="130">Szervezet</entry>
+  <entry key="131">belépés</entry>
+  <entry key="132">Bejelentkezési név</entry>
+  <entry key="133">Jelszó</entry>
+  <entry key="134">Újra</entry>
+  <entry key="135">Keresztnév</entry>
+  <entry key="136">Családnév</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Születésnap</entry>
+  <entry key="139">Utca hsz.</entry>
+  <entry key="140">Ir.szám/Település</entry>
+  <entry key="141">Ország</entry>
+  <entry key="142">Megjegyzés</entry>
+  <entry key="143">Felhasználói adatok</entry>
+  <entry key="144">mentés</entry>
+  <entry key="145">Mentés</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Bejelentkezés</entry>
+  <entry key="148">Keresztnév</entry>
+  <entry key="149">Családnév</entry>
+  <entry key="150">következő mutatása</entry>
+  <entry key="151">előző mutatása</entry>
+  <entry key="152">bejegyzés törlése</entry>
+  <entry key="153">mégse</entry>
+  <entry key="154">törlés</entry>
+  <entry key="155">új bejegyzés</entry>
+  <entry key="156">bejegyzés frissítése</entry>
+  <entry key="157">bejegyzés törlése</entry>
+  <entry key="158">státusz</entry>
+  <entry key="159">tiltott</entry>
+  <entry key="160">engedélyezett</entry>
+  <entry key="161">Szervezetek</entry>
+  <entry key="162">naptár</entry>
+  <entry key="163">bezár</entry>
+  <entry key="164">Szervezet-ID</entry>
+  <entry key="165">Név</entry>
+  <entry key="166">Felhasználó</entry>
+  <entry key="167">Előadó</entry>
+  <entry key="168">Adminisztrátor</entry>
+  <entry key="169">felhasználó szint</entry>
+  <entry key="170">Szervezet</entry>
+  <entry key="171">név</entry>
+  <entry key="172">szervezet hozzáadása</entry>
+  <entry key="173">szervezet hozzáadása</entry>
+  <entry key="174">mégse</entry>
+  <entry key="175">hozzáad</entry>
+  <entry key="176">szervezet törlése</entry>
+  <entry key="177">felhasználó</entry>
+  <entry key="178">felhasználó hozzáadása</entry>
+  <entry key="179">felhasználó törlése</entry>
+  <entry key="180">felhasználó hozzáadása</entry>
+  <entry key="181">felhasználó keresése</entry>
+  <entry key="182">keres</entry>
+  <entry key="183">felhasználó</entry>
+  <entry key="184">Szervezet</entry>
+  <entry key="185">Belépés</entry>
+  <entry key="186">Konferenciatermek</entry>
+  <entry key="187">Konferenciatermek</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Név</entry>
+  <entry key="190">nyilvános</entry>
+  <entry key="191">Szervezetek</entry>
+  <entry key="192">Találkozószobák</entry>
+  <entry key="193">Név</entry>
+  <entry key="194">Típus</entry>
+  <entry key="195">Nyilvános</entry>
+  <entry key="196">Megjegyzés</entry>
+  <entry key="197">mentés</entry>
+  <entry key="198">betölt</entry>
+  <entry key="199">mentés mint</entry>
+  <entry key="200">Fájlnév</entry>
+  <entry key="201">fájlnév</entry>
+  <entry key="202">mégse</entry>
+  <entry key="203">mentés</entry>
+  <entry key="204">hiba</entry>
+  <entry key="205">betöltés</entry>
+  <entry key="206">objektum betöltve</entry>
+  <entry key="207">kliensek szinkronizálása, várakozó kliensek:</entry>
+  <entry key="208">Képinformációk betöltése</entry>
+  <entry key="209">kliensek szinkronizálása, várakozó kliensek:</entry>
+  <entry key="210">rajzterület törlése</entry>
+  <entry key="211">rajzterület törlése, a tábla adatai elvesznek</entry>
+  <entry key="212">Megerősítés mielőtt a fájlt betöltené</entry>
+  <entry key="213">Meghívó küldése</entry>
+  <entry key="214">Meghívó küldése</entry>
+  <entry key="215">Tárgy</entry>
+  <entry key="216">Címzett</entry>
+  <entry key="217">Üzenet</entry>
+  <entry key="218">Elküld</entry>
+  <entry key="219">mégse</entry>
+  <entry key="220">elküld</entry>
+  <entry key="221">Felhasználói adat</entry>
+  <entry key="222">A beceneved ehhez a konferenciához</entry>
+  <entry key="223">Becenév</entry>
+  <entry key="224">Keresztnév</entry>
+  <entry key="225">Családnév</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Nyelv</entry>
+  <entry key="228">bevitel</entry>
+  <entry key="229">Betöltés</entry>
+  <entry key="230">Adatok betöltése, kérlek várj!</entry>
+  <entry key="231">Rossz jelszó</entry>
+  <entry key="232">Adj meg két megegyező legalább 6 karakter hosszú jelszót</entry>
+  <entry key="233">Hibás e-mail</entry>
+  <entry key="234">Hibás e-mail címet adtál meg</entry>
+  <entry key="235">A regisztráció megtörtént</entry>
+  <entry key="236">Az fiókod elkészült. Beléphetsz.</entry>
+  <entry key="237">A képernyődet nem oszthatod meg most. Valaki más már megosztotta az övét.</entry>
+  <entry key="238">Megosztás megtiltva</entry>
+  <entry key="239">Képernyőmegosztás</entry>
+  <entry key="240">Hibás sávszélesség: Nem lehetett szinkronizálni a képenyődet. El lesznak dobva képkockák. Ha sokszor jelenik meg ez a figyelmeztetés, kérd meg a előadót, hogy a minőséget vegye vissza.</entry>
+  <entry key="241">Képernyő:</entry>
+  <entry key="242">Rajz</entry>
+  <entry key="243">Dokumentum</entry>
+  <entry key="244">Csevej</entry>
+  <entry key="245">Fájlok</entry>
+  <entry key="246">Tagok</entry>
+  <entry key="247">Eredeti dokumentum letöltése</entry>
+  <entry key="248">pdf letöltése</entry>
+  <entry key="249">Bemutató betöltése a táblára</entry>
+  <entry key="250">Beállítások</entry>
+  <entry key="251">Objektum mozgatása</entry>
+  <entry key="252">Objektum átméretezése</entry>
+  <entry key="253">%</entry>
+  <entry key="254">-</entry>
+  <entry key="255">Ugrás az első oldalra</entry>
+  <entry key="256">Ugrás az előző oldalra</entry>
+  <entry key="257">Ugrás a következő oldalra</entry>
+  <entry key="258">Ugrás az utolsó oldalra</entry>
+  <entry key="259">Kicsinyít --</entry>
+  <entry key="260">Nagyít ++</entry>
+  <entry key="261">Úr</entry>
+  <entry key="262">Hölgy</entry>
+  <entry key="263">Beállítás</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kulcs</entry>
+  <entry key="266">Beállítás</entry>
+  <entry key="267">Kulcs</entry>
+  <entry key="268">utolsó módosítás</entry>
+  <entry key="269">módosítva</entry>
+  <entry key="270">megjegyzés</entry>
+  <entry key="271">Érték</entry>
+  <entry key="272">-</entry>
+  <entry key="273">Felhasználók</entry>
+  <entry key="274">felhasználó törlése a szervezetből</entry>
+  <entry key="275">töröl</entry>
+  <entry key="276">Ez a felhasználó már tagja a szervezetnek.</entry>
+  <entry key="277">Hírek</entry>
+  <entry key="278">Gyorslinkek</entry>
+  <entry key="279">Konferenciára megyek</entry>
+  <entry key="280">Előadásra megyek</entry>
+  <entry key="281">Segítség</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Hibabejel.!</entry>
+  <entry key="285">tovább</entry>
+  <entry key="286">Projekt weboldala (http://openmeetings.apache.org)</entry>
+  <entry key="287">Felhasználói levelezőlista (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Bejelentkezés megjegyzése</entry>
+  <entry key="289">Tartalom</entry>
+  <entry key="290">Kezdőoldalam</entry>
+  <entry key="291">Találkozóim</entry>
+  <entry key="292">Eseményeim</entry>
+  <entry key="293">Nyilvános találkozók</entry>
+  <entry key="294">Zártkörű találkozók</entry>
+  <entry key="295">Nyilvános előadások</entry>
+  <entry key="296">Zártkörű előadások</entry>
+  <entry key="297">Nyilvános tartalmak</entry>
+  <entry key="298">Zártkörű tartalmak</entry>
+  <entry key="299">Személyes tartalmak</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderálás</entry>
+  <entry key="302">Jelentkezés előadónak</entry>
+  <entry key="303">Szavazás</entry>
+  <entry key="304">Fájl választás</entry>
+  <entry key="305">Beállítások</entry>
+  <entry key="306">Kamera és mikrofon beállítások</entry>
+  <entry key="307">Tábla beállítások</entry>
+  <entry key="308">Kilép</entry>
+  <entry key="309">Vissza a szobákhoz</entry>
+  <entry key="310">Kilépés</entry>
+  <entry key="311">Elfelejtetted a jelszavad?</entry>
+  <entry key="312">Jelszó törlése</entry>
+  <entry key="313">E-mail alapján</entry>
+  <entry key="314">Bejelentkezés alapján</entry>
+  <entry key="315">Az e-mail címed</entry>
+  <entry key="316">A bejelentkező neved</entry>
+  <entry key="317">Levél küldése (with reset link)</entry>
+  <entry key="318">Nem található az e-mail cím. Ellenőrizd, hogy ugyanazt az e-mail címet adtad meg amit a felhasználó létrehozásához használtál.</entry>
+  <entry key="319">Kérlek add meg az e-mail címet vagy felhasználói nevet.</entry>
+  <entry key="320">Nincs felhasználó ehhez a névhez.</entry>
+  <entry key="321">A levél, amit küldtünk neked, tartalmaz egy speciális linket, ellenőrizd a postafiókodat. Ha még nem kaptad meg a levelet, állítsd be a spamszűrődet és küldd újra a megerősítő e-mail-t.</entry>
+  <entry key="322">Hiba</entry>
+  <entry key="323">Üzenet</entry>
+  <entry key="324">Rossz Hash. A felhasználható nem található.</entry>
+  <entry key="325">Jelszó törlése</entry>
+  <entry key="326">Bejelentkező név</entry>
+  <entry key="327">Jelszóváltás</entry>
+  <entry key="328">Új jelszó</entry>
+  <entry key="329">Jelszó újra</entry>
+  <entry key="330">A begépelt jelszavak nem egyeznek meg.</entry>
+  <entry key="331">4 vagy több karakter; kis/nagybetű számít!</entry>
+  <entry key="332">Jelszó beállítva. Bejelentkezhetsz.</entry>
+  <entry key="333">Rendben</entry>
+  <entry key="334">Ismeretlen hiba. Írd meg a fejlesztőknek.</entry>
+  <entry key="335">Felhasználónév nem található</entry>
+  <entry key="336">Hibás jelszó</entry>
+  <entry key="337">Sikeres kijelentkezés</entry>
+  <entry key="338">Regisztráció letiltva.</entry>
+  <entry key="339">Hibás E-mail</entry>
+  <entry key="340">létező fájlnév, válassz mást</entry>
+  <entry key="341">a fájlnév túl rövid</entry>
+  <entry key="342">Cím nem menthető</entry>
+  <entry key="343">Felhasználó hozzáadva de hozzá kell rendelni Szervezethez, különben nem fog tudni bejelentkezni.</entry>
+  <entry key="344">Új bejegyzés</entry>
+  <entry key="345">Nincs ilyen mező azonosító.</entry>
+  <entry key="346">Nincs cimke ehhez a mezőhöz.</entry>
+  <entry key="347">Adminisztrátori jog szükséges</entry>
+  <entry key="348">Nyelv-szerkesztő</entry>
+  <entry key="349">Nyelv</entry>
+  <entry key="350">Cimke-ID</entry>
+  <entry key="351">Cimke-név</entry>
+  <entry key="352">Érték</entry>
+  <entry key="353">Mezőértékek</entry>
+  <entry key="354">Cimkenév</entry>
+  <entry key="355">Cimkeérték</entry>
+  <entry key="356">Cimke-ID</entry>
+  <entry key="357">Csak a cimke értékét törölheted és nem a mezőt! A mezőt nem törölheted, mert más nyelvben szükséges lehet.</entry>
+  <entry key="358">Hibás cimke-ID. A FieldLanguagesvalues_Id nem található az adatbázisban.</entry>
+  <entry key="359">Ez a mező nem törölhető. Csak a cimke értékét törölheted. Nincs betöltött cimke, vagy nincs kiválasztva vagy nincs definiálva ehhez a nyelvhez.</entry>
+  <entry key="360">exportálás</entry>
+  <entry key="361">Ki kell jelentkezned, hogy lásd a változásokat.</entry>
+  <entry key="362">Új nyelv hozzáadása</entry>
+  <entry key="363">Nyelv törlése</entry>
+  <entry key="364">Új nyelv hozzáadása</entry>
+  <entry key="365">Név</entry>
+  <entry key="366">nyelv hozzáadása</entry>
+  <entry key="367">Mentés</entry>
+  <entry key="368">ugrás az elsőre</entry>
+  <entry key="369">ugrás az előzőre</entry>
+  <entry key="370">ugrás a következőre</entry>
+  <entry key="371">ugrás az utolsóra</entry>
+  <entry key="372">a felhasználó beszél (Kattints ide a mikrofonja némításhoz, bekapcsoláshoz)</entry>
+  <entry key="373">hang ki/bekapcsolása</entry>
+  <entry key="374">Rendszer</entry>
+  <entry key="375">Beállításaid</entry>
+  <entry key="376">Üdv,</entry>
+  <entry key="377">Személyes adatok szerkesztése</entry>
+  <entry key="378">Új üzenetek:</entry>
+  <entry key="379">Új kép feltöltése</entry>
+  <entry key="380">Felh.adatok - mentés</entry>
+  <entry key="381">Minden szervezetnek léteznie kell!</entry>
+  <entry key="382">exportálás indítása</entry>
+  <entry key="383">Szervezetek szerint</entry>
+  <entry key="384">exportálás indítása</entry>
+  <entry key="385">Felh.adatok - betöltés</entry>
+  <entry key="386">válassz users.xml -t</entry>
+  <entry key="387">betöltés</entry>
+  <entry key="388">XML-be mentés - Ezek a fájlok felhasználhatók: - A projektnek felajánlható - Más rendszerbe betölthető - Mentés - Személyre szabható - Betehető a language könyvtárba telepítéshez</entry>
+  <entry key="389">Válassz ki egy betöltendő nyelvi fájlt. Válaszd ki a kívánt nyelvet a legördülő menüből! Mindegy, hogy a fájlnak mi a neve, a kiválasztott nyelvhez lesz mentve!</entry>
+  <entry key="390">betöltés - válassz fájlt</entry>
+  <entry key="391">Mentés mint</entry>
+  <entry key="392">Név:</entry>
+  <entry key="393">Megjegyzés:</entry>
+  <entry key="394">mentés</entry>
+  <entry key="395">Felvételek</entry>
+  <entry key="396">Felvételek megtekintése</entry>
+  <entry key="397">Nyilvános és zártkörű szobák felvételei</entry>
+  <entry key="398">Felhasználók :</entry>
+  <entry key="399">Csatlakozott:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Felhasználók ebben a szobában:</entry>
+  <entry key="402">frissítés</entry>
+  <entry key="403">A szoba megtelt. Próbálkozz pár perc múlva.</entry>
+  <entry key="404">kattints a szobára az információkér</entry>
+  <entry key="405">Csevegés a felhasználókkal a szobában:</entry>
+  <entry key="406">Szoba:</entry>
+  <entry key="407">Felhasználók a szobában:</entry>
+  <entry key="408">innentől:</entry>
+  <entry key="409">felvétel lejátszása</entry>
+  <entry key="410">Hossz:</entry>
+  <entry key="411">Dátum:</entry>
+  <entry key="412">Felvétel üzemmód! Nem változtatható meg egy érték sem, mert ez egy felvett fájl!</entry>
+  <entry key="413">A felvétel lejátszása</entry>
+  <entry key="414">Lejátszás / Megállítás</entry>
+  <entry key="415">Felvétel indítása</entry>
+  <entry key="416">Felvétel megállítása</entry>
+  <entry key="417">Felvétel:</entry>
+  <entry key="418">Már valaki felvételt készít:</entry>
+  <entry key="419">Felvétel! Felhasználó:</entry>
+  <entry key="420">mégse</entry>
+  <entry key="421">A felvétel meg lesz szakítva mentés nélkül.</entry>
+  <entry key="422">újraindít</entry>
+  <entry key="423">Zárd be az ablakot és indítsd újra a felvételt.</entry>
+  <entry key="424">Vonalszin változtatás</entry>
+  <entry key="425">Szin választás</entry>
+  <entry key="426">Ki / Bekapcsolja a vonalszint</entry>
+  <entry key="427">Kitöltőszin változtatás</entry>
+  <entry key="428">Ki / Bekapcsolja a kitöltésszint</entry>
+  <entry key="429">Vonalvastagság változtatás</entry>
+  <entry key="430">bezár</entry>
+  <entry key="431">Betűméret változtatás</entry>
+  <entry key="432">Felvétel törlés</entry>
+  <entry key="433">Vendég</entry>
+  <entry key="434">Kitől:</entry>
+  <entry key="435">Név</entry>
+  <entry key="436">Szoba</entry>
+  <entry key="437">Dátum</entry>
+  <entry key="438">mégse</entry>
+  <entry key="439">felvétel</entry>
+  <entry key="440">Név</entry>
+  <entry key="441">Dátum</entry>
+  <entry key="442">Szerver-csevegési napló törlés</entry>
+  <entry key="443">Csevegés</entry>
+  <entry key="444">üzenet küldése</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Válassz engedélyezett eszközt</entry>
+  <entry key="448">Hang és kép</entry>
+  <entry key="449">Csak hang</entry>
+  <entry key="450">Csak kép</entry>
+  <entry key="451">Hang és kép nélkül (álló kép)</entry>
+  <entry key="452">Sem hang sem kép nem kerül megosztásra a gépedről, hanem a felhasználói adataidból a feltöltött kép. Használd ezt, ha gondjaid vannak a sávszélességgel vagy nagyon lassú az Interneted.</entry>
+  <entry key="453">h</entry>
+  <entry key="454">k</entry>
+  <entry key="455">sz</entry>
+  <entry key="456">cs</entry>
+  <entry key="457">p</entry>
+  <entry key="458">szo</entry>
+  <entry key="459">v</entry>
+  <entry key="460">hétfő</entry>
+  <entry key="461">kedd</entry>
+  <entry key="462">szerda</entry>
+  <entry key="463">csütörtök</entry>
+  <entry key="464">péntek</entry>
+  <entry key="465">szombat</entry>
+  <entry key="466">vasárnap</entry>
+  <entry key="467">hsz</entry>
+  <entry key="468">Hetek száma</entry>
+  <entry key="469">január</entry>
+  <entry key="470">február</entry>
+  <entry key="471">március</entry>
+  <entry key="472">április</entry>
+  <entry key="473">május</entry>
+  <entry key="474">június</entry>
+  <entry key="475">július</entry>
+  <entry key="476">augusztus</entry>
+  <entry key="477">szeptember</entry>
+  <entry key="478">október</entry>
+  <entry key="479">november</entry>
+  <entry key="480">december</entry>
+  <entry key="481">Naptár</entry>
+  <entry key="482">Résztvevők</entry>
+  <entry key="483">Nézet beállítások megtekintése</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Szél. | Magasság</entry>
+  <entry key="486">Video-Ablak</entry>
+  <entry key="487">Előadói-Ablak</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tábla-Ablak</entry>
+  <entry key="490">Engedélyezett</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Szél. | Magasság</entry>
+  <entry key="493">Fájlok,csevegés,résztvevők - Ablak</entry>
+  <entry key="494">Engedélyezett</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Szél. | Magasság</entry>
+  <entry key="497">Az előadó elhagyta a szobát. Jelenleg nincs előadó. Jelentkezhetsz előadónak vagy várhatsz.</entry>
+  <entry key="498">Nincs előadó a szobában, de vannak résztvevők. Jelentkezz előadónak vagy várj.</entry>
+  <entry key="499">{0} visszajelzés</entry>
+  <entry key="500">{0} - Meghívó</entry>
+  <entry key="501">Üzenet ettől a felhasználótól:</entry>
+  <entry key="502">Üzenet:</entry>
+  <entry key="503">Kattints erre a linkre a találkozókon való részvételhez:</entry>
+  <entry key="504">Kattints ide a szobába való belépéshez</entry>
+  <entry key="505">ha problémád adódik a linkkel akkor ezt másold a böngésző címsorába:</entry>
+  <entry key="506">{0} Regisztráció</entry>
+  <entry key="507">Felhasználói adataid:</entry>
+  <entry key="508">Bejel.név:</entry>
+  <entry key="509">Jelszó:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Csapat</entry>
+  <entry key="512">{0} Regisztráció</entry>
+  <entry key="513">{0} - Jelszó csere</entry>
+  <entry key="514">Kattints erre a linkre a jelszó cseréhez:</entry>
+  <entry key="515">Kattints ide az új jelszó megadásához</entry>
+  <entry key="516">ha problémád adódna a linkkel, kérlek másold át ezt a böngésződ címsorába:</entry>
+  <entry key="517">{0} Jelszó váltás</entry>
+  <entry key="518">Kérlek adj meg egy érvényes dátumot, például 24.12.2001 (nn.hh.éééé)</entry>
+  <entry key="519">Kérlek adj meg egy érvényes e-mail címet, például name@mail.com</entry>
+  <entry key="520">Kérlek adj meg egy számot, például 1.00</entry>
+  <entry key="521">Kérlek egész számoz adj meg, például 100</entry>
+  <entry key="522">Kérlek érvényes telefonszámot adj meg, például ++49 0123 123123</entry>
+  <entry key="523">Kérlek érvényes időpontot adj meg, például 12:23 (óó:pp)</entry>
+  <entry key="524">Jelszóval védve</entry>
+  <entry key="525">Jelszó</entry>
+  <entry key="526">Érvényességi periódus</entry>
+  <entry key="527">Végtelen</entry>
+  <entry key="528">Időszak</entry>
+  <entry key="529">Egyszer használható</entry>
+  <entry key="530">Ettől érvényes:</entry>
+  <entry key="531">Eddig érvényes:</entry>
+  <entry key="532">Meghívás OpenMeetingre</entry>
+  <entry key="533">Nincs meghívás ehhez a meghívó kódhoz.</entry>
+  <entry key="534">A meghívás már használva volt. Ez a típusú meghívás nem használható fel többször.</entry>
+  <entry key="535">A meghívó kód nem érvényes.</entry>
+  <entry key="536">Jelszó:</entry>
+  <entry key="537">Jelszó ellenőrzés</entry>
+  <entry key="538">Hibás jelszó!</entry>
+  <entry key="539">Böngésző</entry>
+  <entry key="540">Hang/kép szinkronizáció</entry>
+  <entry key="541">A bejelentkezés helyes volt, de session vagy nem aktív vagy nincs a szerveren tárolva. Újra be kell jelentkezned.</entry>
+  <entry key="542">Ez a SessionId nincs bejelentkezve, vagy nincsen adminisztrátori joga. A SOAP átjárónak adminisztrátori jogokkal kell egy felhasználó új felhasználó beágyazásához.</entry>
+  <entry key="543">Ehhez a Session-höz nincs Remoteuser-Data kapcsolat. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">A felvételkészítő egyenlőre béta állapotú!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-méret</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-méret</entry>
+  <entry key="549">w</entry>
+  <entry key="550">szélesség</entry>
+  <entry key="551">h</entry>
+  <entry key="552">magasság</entry>
+  <entry key="553">Áttetszőre váltás</entry>
+  <entry key="554">Böngésző megnyitása</entry>
+  <entry key="555">Bömgésző bezárása</entry>
+  <entry key="556">A kapcsolat megszakadt a szerverrel. Ellenőrizze az internet kapcsolatát, majd lépjen be újra az alkalmazásba.</entry>
+  <entry key="557">Mutató</entry>
+  <entry key="558">Szinkronizálás</entry>
+  <entry key="559">Szinkronizálás a látogatókkal, kérem várjon</entry>
+  <entry key="560">&lt;u&gt;Letöltés mint SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Letöltés mint PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Letöltés mint JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Letöltés mint PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Letöltés mint TIF&lt;/u&gt;</entry>
+  <entry key="565">Emlékeztető:</entry>
+  <entry key="566">Kategória:</entry>
+  <entry key="567">Ismétlés:</entry>
+  <entry key="568">nincs</entry>
+  <entry key="569">Hely:</entry>
+  <entry key="570">Indul</entry>
+  <entry key="571">Vége</entry>
+  <entry key="572">Cím:</entry>
+  <entry key="573">Leírás:</entry>
+  <entry key="574">Személyek meghívása</entry>
+  <entry key="575">Napi</entry>
+  <entry key="576">Havi</entry>
+  <entry key="577">Évi</entry>
+  <entry key="578">Találkozó vége miután a találkozó elindult!</entry>
+  <entry key="579">Adja meg a címet!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Jelölje be, ha jobbról-balra író nyelvet akar használni (fordított irányú írás)</entry>
+  <entry key="582">Vezérlőpult</entry>
+  <entry key="583">Megtekintheti a rögzített felvételeket, eseményeket</entry>
+  <entry key="584">Előadás - Indítson konferenciát 4 (től max 16) felhasználóval&lt;br/&gt; mindenkinek audio+video lehetőséggel</entry>
+  <entry key="585">Előadás - Indítson konferenciát 200 látogatóig&lt;br/&gt;A moderátornak audio+video lehetősége van</entry>
+  <entry key="586">Felhasználó hozzáadása, konferenciaszoba, szervezet &lt;br/&gt; + beállítások változatása</entry>
+  <entry key="587">Látogató belépett a konferenciába</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Belépés</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Dokumentum betöltés. Kérjük várjon ameddig az összes kliens szinkronizálódik.</entry>
+  <entry key="592">Feltöltés kész, konverzió folyamatban ...</entry>
+  <entry key="593">Feltöltés indítása</entry>
+  <entry key="594">Feltöltő és importáló ablak. Válassza ki a file-t a meghajtóról.</entry>
+  <entry key="595">Megszakít</entry>
+  <entry key="596">File választása</entry>
+  <entry key="597">Kapcsolatok</entry>
+  <entry key="598">Érték</entry>
+  <entry key="599">Stream azonosító</entry>
+  <entry key="600">Belépés</entry>
+  <entry key="601">Csatlakozott</entry>
+  <entry key="602">Konferencia szoba / Nézet</entry>
+  <entry key="603">User kitiltása</entry>
+  <entry key="604">User kitiltása</entry>
+  <entry key="605">Biztosan kitiltja a látogatót?&lt;br/&gt; Csak a jelenlegi konferenciából kerül kitiltásra. A látogató vissza tud jelentkezni.</entry>
+  <entry key="606">Az Adminisztrátor,Moderátor kitiltotta a teremből.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">A látogató moderátor ebben a konferenciában.</entry>
+  <entry key="609">Látogatónak engedélyezi a táblára rajzolást.</entry>
+  <entry key="610">(Újra) Indítja az Audio/Video eszköz beállítását</entry>
+  <entry key="611">Ennek a látogatónak engedélyezi a táblára rajzolást.</entry>
+  <entry key="612">Visszaveszi a táblára rajzolás lehetőségét</entry>
+  <entry key="613">Látogatók</entry>
+  <entry key="614">Fileok</entry>
+  <entry key="615">Tábla</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ön több szervezetnek is tagja, válassza ki a megfelelőt.</entry>
+  <entry key="618">Ez a terem megtelt, próbálkozzon később</entry>
+  <entry key="619">Terem típusa</entry>
+  <entry key="620">Talákozó szoba</entry>
+  <entry key="621">Szerver idő</entry>
+  <entry key="622">{0} - Emlékeztető</entry>
+  <entry key="623">Üzenet a felhasználótól:</entry>
+  <entry key="624">Üzenet:</entry>
+  <entry key="625">Kattintson a linkre az előadásba való belépéshez:</entry>
+  <entry key="626">Kattintson ide az előadásba való belépéshez</entry>
+  <entry key="627">ha problémája adódik a link megnyitásával, másolja ki és illessze be a böngésző címsorába:</entry>
+  <entry key="628">keresés belül</entry>
+  <entry key="629">külső felhasználók</entry>
+  <entry key="630">Előnév</entry>
+  <entry key="631">Név</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Kilépés jóváhagyása</entry>
+  <entry key="634">Kijelentkezik most?</entry>
+  <entry key="635">Eszközök</entry>
+  <entry key="636">Demo Terem</entry>
+  <entry key="637">Demo Idő</entry>
+  <entry key="638">Előadás ideje</entry>
+  <entry key="639">Ez Demo terem. Ön autómatikusan kiléptetésre kerül:</entry>
+  <entry key="640">Moderálja</entry>
+  <entry key="641">Várnia kell egy moderátor belépésére. Moderátor lehet előadó, a terem létrehozó előadója, vagy a rendszeradminisztrátor.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Bejövő képernyő megosztás</entry>
+  <entry key="644">Egy új képernyőmegosztás érkezett (küldő):</entry>
+  <entry key="645">Meosztás indítása</entry>
+  <entry key="646">Új előadás hozzáadása</entry>
+  <entry key="647">Előadó terem</entry>
+  <entry key="648">Esemény</entry>
+  <entry key="649">Moderálás</entry>
+  <entry key="650">Látogató moderálása</entry>
+  <entry key="651">Terem moderálása</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Ennek a szervezetnek a modárátoraihoz adja a felhasználót?</entry>
+  <entry key="654">Válassza ki a szervezetet, mielőtt hozzáadja a felhasználót!</entry>
+  <entry key="655">Szervezet - Moderator</entry>
+  <entry key="656">Valóban törli a felhsználót ebből a szervezetből?</entry>
+  <entry key="657">Ez a felhasználó moderátor</entry>
+  <entry key="658">Ez a felhasználó nem moderátor</entry>
+  <entry key="659">Azt akarja, hogy ez a felhasználó ne legyen moderátor ebben a szervezetben?</entry>
+  <entry key="660">Hozzáad/töröl felhasználót vagy konferencia szobát a szervezethez?</entry>
+  <entry key="661">Valóban törli ezt a felvételt?</entry>
+  <entry key="662">Valóban törli ezt a felhasználót a szervezetből? Csak a szervezettel való kapcsolat törlődik, a felhasználó tényleges törlését az admnisztrátori felületen tudja elvégezni.</entry>
+  <entry key="663">Ön nem törölheti ezt a felhasználót!</entry>
+  <entry key="664">Ehhez a tevékenységhez Adminisztrátori jog szükséges!</entry>
+  <entry key="665">Nem tartozik Session ehhez az ID-hez.</entry>
+  <entry key="666">Ez Adminisztrátori, Moderátori fiók. Ezt csak Adminisztrátori panelen szerkesztheti.</entry>
+  <entry key="667">A regisztráció aktiválásához kattintson a linkre, vagy másolja ki és illessze a böngésző címsorába.</entry>
+  <entry key="668">Kattintson az E-Mail megerősítéshez</entry>
+  <entry key="669">Nincs felhasználó ezzel a Hash azonosítóval.</entry>
+  <entry key="670">A felhasználó már aktiválásra került!</entry>
+  <entry key="671">Sikeresen aktiválta a felhasználói fiókját!</entry>
+  <entry key="672">Belépés most</entry>
+  <entry key="673">Hozzáférése nem aktív. Először aktiválja a regisztrációkor kapott megerősítő e-mail segítségével.</entry>
+  <entry key="674">Regisztráció kérését fogadtuk. Küldtünk egy megerősítést kérő linket a megadott e-mail címére, kérjük keresse fel az e-mail fiókját, a regisztrációs kérést vissza kell igazolnia!</entry>
+  <entry key="675">Moderációs jogok visszavétele a látogatótól</entry>
+  <entry key="676">Moderációs jog adása a látogatónak</entry>
+  <entry key="677">Látogató</entry>
+  <entry key="678">Hozzáférés a táblához</entry>
+  <entry key="679">Moderátor</entry>
+  <entry key="680">Moderáció: Válasszon a listából és adjon jogot a táblához, moderációhoz, videóhoz...stb való hozzáféréshez.</entry>
+  <entry key="681">Ez a látogató már moderátor</entry>
+  <entry key="682">Ez Ön! Nem veheti el a moderációs jogot.</entry>
+  <entry key="683">Bekapcsolja az Audio / Video lehetőséget a látogatónak</entry>
+  <entry key="684">Kikapcsolja az Audio/Video lehetőséget a látogatónál</entry>
+  <entry key="685">Moderátori jogot kérek</entry>
+  <entry key="686">Hozzáférést kérek a táblához</entry>
+  <entry key="687">Audio/Video hozzáférést kérek</entry>
+  <entry key="688">Moderátori jogot kaptál</entry>
+  <entry key="689">Hozzáférést kaptál a táblához</entry>
+  <entry key="690">Audio/Video hozzáférést kaptál</entry>
+  <entry key="691">Üzenet a Moderátornak</entry>
+  <entry key="692">A látogató</entry>
+  <entry key="693">moderáció megadásához. Kattintson a névre és a megfelelő ikonra a moderáció hozzáadásához, visszavételéhez.</entry>
+  <entry key="694">tábla használatához. Kattintson a névre és a rajztábla ikonra a tábla használatának hozzáadásához, visszavételéhez.</entry>
+  <entry key="695">Audio/Video hozzáféréséhez. Kattintson a nevére és a Mikrofon/Kamera ikonra a hozzászólás engedélyezéséhez, visszavételéhez.</entry>
+  <entry key="696">Várjon amég a Moderátor belép a terembe.</entry>
+  <entry key="697">Mégsem</entry>
+  <entry key="698">Ment</entry>
+  <entry key="699">Nap</entry>
+  <entry key="700">Hónap</entry>
+  <entry key="701">Év</entry>
+  <entry key="702">File feltöltése</entry>
+  <entry key="703">Könyvtár létrehozása</entry>
+  <entry key="704">Frissít</entry>
+  <entry key="705">Kuka (húzza bele a kiválasztott elemet)</entry>
+  <entry key="706">Saját fileok (Home Drive)</entry>
+  <entry key="707">Terem fileok (Public Drive)</entry>
+  <entry key="708">File hozzáadása</entry>
+  <entry key="709">Könyvtár létrehozása</entry>
+  <entry key="710">Könyvtár törlése</entry>
+  <entry key="711">Név szerkesztése</entry>
+  <entry key="712">Új könyvtár</entry>
+  <entry key="713">Biztosan törli ezt az elemet?</entry>
+  <entry key="714">Keresés</entry>
+  <entry key="715">Keresés</entry>
+  <entry key="716">Dokumentum megnyitása</entry>
+  <entry key="717">Összes mutatása (Fa nézet)</entry>
+  <entry key="718">Dokumentum bezárása</entry>
+  <entry key="719">File törlése</entry>
+  <entry key="720">Nem rajzolhat a táblára. Moderátornak kell lennie, vagy kérjen a moderátortól hozáférést.</entry>
+  <entry key="721">Dokumentum tulajdonságai</entry>
+  <entry key="722">Kliens indítása (külső)</entry>
+  <entry key="723">Kliens indítása (HTTP)</entry>
+  <entry key="724">A látogató megosztotta a képernyőjét. Megtekinti?</entry>
+  <entry key="725">A képernyőd meg van osztva. A képernyőmegosztás leállításához kattintson a kliensen a Leállítás gombra.</entry>
+  <entry key="726">Megosztás</entry>
+  <entry key="727">A képernyő már meg van osztva!</entry>
+  <entry key="728">Képernyő nézete</entry>
+  <entry key="729">Kilépés</entry>
+  <entry key="730">Képernyő megosztó</entry>
+  <entry key="731">Kattintson a Start-ra a képernyő megosztásához</entry>
+  <entry key="732">Megosztás indítása</entry>
+  <entry key="733">Megosztás leállítása</entry>
+  <entry key="734">Válassza ki a megosztandó területet:</entry>
+  <entry key="735">Szélesség megadása</entry>
+  <entry key="736">A megosztás befejeződött!</entry>
+  <entry key="737">Magasság megosztása</entry>
+  <entry key="738">X-eltolás</entry>
+  <entry key="739">Y-eltolás</entry>
+  <entry key="740">Szélesség:</entry>
+  <entry key="741">Magasság:</entry>
+  <entry key="742">A kapcsolat lezárult a szerverrel</entry>
+  <entry key="743">Mégse</entry>
+  <entry key="744">Indítás kívülről</entry>
+  <entry key="745">Ha bezárja ezt a nézetet, nem fogja tudni újraindítani ebben a munkamenetben.</entry>
+  <entry key="746">Megerősíti az aktuális nézet leállítását</entry>
+  <entry key="747">Képernyő megosztása</entry>
+  <entry key="748">Munkamenet rögzítése</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Előző</entry>
+  <entry key="752">Következő</entry>
+  <entry key="753">Újratölt</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Betöltés</entry>
+  <entry key="756">Adja hozzá alapértelmezett weboldalaként a profiljában.</entry>
+  <entry key="757">Teszt beállítás</entry>
+  <entry key="758">Teztelje a kameráját/mikrofonját pár másodperces felvétellel, mielőtt belépne a konferencia terembe. Visszajátszuk a felvételt, hogy ellenőrizhesse a működést.</entry>
+  <entry key="759">Ne mutassa ezt többet</entry>
+  <entry key="760">Mégsem</entry>
+  <entry key="761">Belépés a konferenciába</entry>
+  <entry key="762">Ne figyelmeztessen többet</entry>
+  <entry key="763">Felvétel</entry>
+  <entry key="764">Lejátszás</entry>
+  <entry key="765">Beléphet kamerát/mikrofon nélkül is. Látogatóként ezek nélkül is használhatja a rajztáblát, megoszthatja képernyőjét, írhat a Chat-be.</entry>
+  <entry key="766">MNegállít</entry>
+  <entry key="767">Jelerősség mérő</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Belépés akonferenciába</entry>
+  <entry key="770">Esemény indul</entry>
+  <entry key="771">Konferencia szoba választása</entry>
+  <entry key="772">Beállítás ellenőrzése</entry>
+  <entry key="773">Konferencia indítása</entry>
+  <entry key="774">Hogyan indíthat konferenciát</entry>
+  <entry key="775">Felvétel indítása</entry>
+  <entry key="776">Ne mutassa az Audio / Video tesztet (Recording) mikor belép akonferenciába.</entry>
+  <entry key="777">Nyilvános termek</entry>
+  <entry key="778">Nyilvános termekhez minden felhasználó hozzáfér.</entry>
+  <entry key="779">Zárt termek</entry>
+  <entry key="780">Zárt termekhez csak a szervezet felhasználói férhetnek hozzá.</entry>
+  <entry key="781">Saját termek</entry>
+  <entry key="782">Ezen szekció termeit csak a létrehozó személy éri el (moderátorként). Bejegyezheti az eseménynaptárba és megadhat kezdeti/vége időpontokat. Itt csak az érvényességi ideig jelenik meg a listában.</entry>
+  <entry key="783">Ennek a moderátorának kell lenned ehhez.</entry>
+  <entry key="784">Moderáció megadása</entry>
+  <entry key="785">Tábla használat megadása</entry>
+  <entry key="786">Kamera/mikrofon használat megadása</entry>
+  <entry key="787">Ezt a munkamenetet már használ(ja/ta). Nem használhatja többször.</entry>
+  <entry key="788">Indítás</entry>
+  <entry key="789">Kilépés</entry>
+  <entry key="790">Valóban kilép? Törlődni fognak a feltöltött dokumentumok, rajztábla, chat tartalma.</entry>
+  <entry key="791">Kilépé s konferenciából</entry>
+  <entry key="792">Termek</entry>
+  <entry key="793">Válassza ki a termet az előadáshoz</entry>
+  <entry key="794">Az esemény nincs mentve a naptárba. Kérjük mentse most, vagy távolítsa el.</entry>
+  <entry key="795">Kérjük adjon legalább egy látogatót az előadásához !</entry>
+  <entry key="796">Biztosan törli ezt az eseményt?</entry>
+  <entry key="797">Figyelmeztetés</entry>
+  <entry key="798">Esemény hozzáadása</entry>
+  <entry key="799">Nap</entry>
+  <entry key="800">Hét</entry>
+  <entry key="801">Hónap</entry>
+  <entry key="802">Leírás</entry>
+  <entry key="803">Látogatók</entry>
+  <entry key="804">{0}, az Ön webkonferencia platformja. Kövesse az utasításokat és gombnyomásra nyithat egy konferenciát, vagy bejegyezhet a naptárba és beállíthat egy előadást előre.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">A konferencia beállításához adja hozzá az eseményt a naptárhoz.</entry>
+  <entry key="807">Segítségre van szüksége?</entry>
+  <entry key="808">Fenntartott</entry>
+  <entry key="809">Keresés</entry>
+  <entry key="810">Hozzáad</entry>
+  <entry key="811">Nincs felhasználó kiválasztva. Vállasszon elemet a listából és adja hozzá.</entry>
+  <entry key="812">Látogató hozzáadása</entry>
+  <entry key="813">Mentés</entry>
+  <entry key="814">Törlés</entry>
+  <entry key="815">Esemény részletei</entry>
+  <entry key="816">Alapértelmezett Moderátor</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Név</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Új alapértelmezett moderátor hozzáadása</entry>
+  <entry key="822">Super Moderator</entry>
+  <entry key="823">Moderált terem, ha a felhasználó moderátor, vagy adminisztrátor, automatikusan moderátora lesz a teremnek. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator mindíg moderátora a teremnek, a többi moderátor jogait Ő szabályozhatja</entry>
+  <entry key="825">Super Moderátorrá teszi a felhasználót</entry>
+  <entry key="826">Super Moderator visszavétele a felhasználótól</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Ha szervezeteket rendel a teremhez, csak a szervezet tagjai érhetik el a termet (Ez csak a "Nyilvános" típusú termeknél értelmezett)</entry>
+  <entry key="829">Moderáció</entry>
+  <entry key="830">Limitációk</entry>
+  <entry key="831">Szervezet</entry>
+  <entry key="832">Megerősíti?</entry>
+  <entry key="833">Valóban törli ezt az elemet? Kattintson a mentés gomba a változások végrehajtásához!</entry>
+  <entry key="834">TNincs felhasználó kiválasztva. Kérjük előbb válassza ki és adja hozzá!</entry>
+  <entry key="835">Új alapértelmezett Moderátor hozzáadása</entry>
+  <entry key="836">Super Moderátorr-á teszi ezt a felhasználót? A Super Moderator nem csak moderátora a teremnek, elveheti a moderátori jogot másoktól. A beállítások alkalmazásához mentse azokat!</entry>
+  <entry key="837">Elveszi a Super Moderátor jogot a felhasználótól? A beállítások alkalmazásához mentse azokat!</entry>
+  <entry key="838">Ez a felhazsnáló Super-Moderator. Nem veheti el a Super-Moderator jogot!</entry>
+  <entry key="839">Biztosan törli ezt a filet/könyvtárat?</entry>
+  <entry key="840">File/Könyvtár törlése?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Tulajdonságok</entry>
+  <entry key="844">Mutasd az egér pozíciót a nézőknek</entry>
+  <entry key="845">Audio megosztása SIP alkalmazáson</entry>
+  <entry key="846">Audio megosztása SIP-n és video flash alatt</entry>
+  <entry key="847">Teljes méret</entry>
+  <entry key="848">Képernyő nézete</entry>
+  <entry key="849">A felhasználó</entry>
+  <entry key="850">megosztotta a képernyőjét. Megnézi?</entry>
+  <entry key="851">Bezár</entry>
+  <entry key="852">Nagyító</entry>
+  <entry key="853">A munkamenetet a felhasználó lezárta!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Új képernyő megosztás</entry>
+  <entry key="856">Minimalizál</entry>
+  <entry key="857">Maximalizál</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Felvétel ideje</entry>
+  <entry key="860">Felvételeim</entry>
+  <entry key="861">Publikus felvételek</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Név</entry>
+  <entry key="864">Hossz</entry>
+  <entry key="865">Dátum</entry>
+  <entry key="866">By</entry>
+  <entry key="867">Lejátszás</entry>
+  <entry key="868">Videóm</entry>
+  <entry key="869">Felvétel</entry>
+  <entry key="870">Megoszthatja képernyőjét, rögzítheti az előadást. Hogy mások láthassák a képernyőjét, kattintson fent a megosztás gombra. Ha csak rögzíteni szeretné az előadást, kattintson a felvétel indítása gombra.</entry>
+  <entry key="871">Felvétel indítása</entry>
+  <entry key="872">Felvétel vége</entry>
+  <entry key="873">FLV-File letöltése</entry>
+  <entry key="874">Konferencia szoba</entry>
+  <entry key="875">Lejátszás</entry>
+  <entry key="876">Megállít</entry>
+  <entry key="877">A felhasználó mikrofonja aktív</entry>
+  <entry key="878">Megosztás leállítása</entry>
+  <entry key="879">Engedéylezi a felhasználók kérdését</entry>
+  <entry key="880">Kapcsolja ki, ha nem akarja, hogy kérdésekkel zavarják. A moderátor ilyenkor nem kapja a ("Kérdésem van") üzenetet.</entry>
+  <entry key="881">Rendben</entry>
+  <entry key="882">AVI-File letöltése</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Csak Audio</entry>
+  <entry key="887">Hiba történt a felvétel készítése közben.</entry>
+  <entry key="888">A felvétel még nem nézhewtő vissza. Kérjük próbálja ismét pár perc múlva.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Felvétel üzenet</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP alkalmazás nem áll készen</entry>
+  <entry key="893">SIP hozzáférés beállítása</entry>
+  <entry key="894">SIP beállítás a felhasználóknak. Kapcsolja be az SIP-t adminisztrátorként &gt; Beállítások (Key: enable_sip). Az SIP adat minden felhasználónak autómatikusan létrejön. Az újrageneráláshoz ellenőrizze "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-Felhasználó</entry>
+  <entry key="896">Sip-Jelszó</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">A bejelentkezés az SIP szerverre nem sikerült. Ellenőrizze az SIP hozzáférés adatait és az authentikációt az SIP szolgáltatójánál. Adminisztrátorként lépjen be és ellenőrizze a beállításokat. Felhasználók, Moderátorok nem módosíthatják a paramétereket.</entry>
+  <entry key="899">A bejelentkezés az SIP szerverre nem sikerült. Forduljon a szolgáltatóhoz!</entry>
+  <entry key="900">Bejelentkezés az SIP-Szerverre ...</entry>
+  <entry key="901">Bejelentkezés az SIP-Szerverre ...</entry>
+  <entry key="902">Log mutatása</entry>
+  <entry key="903">Log üzenet a rögzítő folyamattól</entry>
+  <entry key="904">SIP-Alkalmazás menedzsment</entry>
+  <entry key="905">Az SIP-Alkalmazás nem áll készem. Fogadja el az alkalmazást és próbálja újra!</entry>
+  <entry key="906">Moderációs lehetőséget kérek</entry>
+  <entry key="907">Bejegyzés változásainak mentése</entry>
+  <entry key="908">A bejegyzés megváltozotta. Menti a beállításokat? &lt;br/&gt;&lt;br/&gt;Minden látogató értesítést fog kapni e-mailben a változásokról (függ a figyelmeztetés típusától).</entry>
+  <entry key="909">Egyéb felvételetkhez való hozzáféréshez be kell jelentkeznie a {0} alkalmazásba.</entry>
+  <entry key="910">Felhasználó kiválasztotta ezt a videót</entry>
+  <entry key="911">Ezen a felületen elérhető felhasználók</entry>
+  <entry key="912">Moderátora vagy ennek az interjúnek. Döntsd el ki beszéljen ebben az interjúban, indítsd/állítsd meg a videó rögzítését.</entry>
+  <entry key="913">Felvétel indítása</entry>
+  <entry key="914">Felvétel megállítása</entry>
+  <entry key="915">A felvétel már folyamatban van.</entry>
+  <entry key="916">A felvétel megállításra került, vagy nem indítható most.</entry>
+  <entry key="917">Az interj felvétele sikeresen elindult!</entry>
+  <entry key="918">Mégsem</entry>
+  <entry key="919">A felvétel feldolgozása akár 5 perc is lehet 1 perces video esetén. A kiválasztott videó feldolgozása, kódolása:</entry>
+  <entry key="920">Írja be a jelszavát ismét, miután az SIP adatokat megadta</entry>
+  <entry key="921">Újra generált SIP adatok</entry>
+  <entry key="922">Nem helyezheti át ezt a filet/könyvtárat ebbe az alkönyvtárba!</entry>
+  <entry key="923">Privát meghajtó mérete</entry>
+  <entry key="924">Publikus meghajtó mérete</entry>
+  <entry key="925">Licenc beállítások</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Licenc ellenőrzése</entry>
+  <entry key="928">Terjedelem</entry>
+  <entry key="929">Lejárat dátuma</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Teljes idő</entry>
+  <entry key="932">A licence lejárt. Vásároljon idő hosszabbítást (Pay-per-minute) vagy feltöltést.</entry>
+  <entry key="933">Kattintson a vásárláshoz</entry>
+  <entry key="934">Rendelkezésre álló idő:</entry>
+  <entry key="935">Felhasználói licenc információk</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Bezár</entry>
+  <entry key="938">A licence lejárt. Vásároljon idő hosszabbítást (Pay-per-minute) vagy feltöltést.</entry>
+  <entry key="939">Licenc beállítások</entry>
+  <entry key="940">Vásároljon időhosszabbítást a konferenciához (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; vagy vásároljon feltöltést 3-12 hónapot.&lt;br/&gt;&lt;br/&gt;Küldjön meghívókat (direkt linkek a konferencia teremből) vagy készítsen webkonferenciákat a naptárral együtt a külső felhasználók csak előfizetéssel férhetnek hozzá!</entry>
+  <entry key="941">60 perc vásárlása 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">5 óra 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">3 hónap 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">6 hónap 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Perc alapú fizetés</entry>
+  <entry key="946">Feltöltés értékek</entry>
+  <entry key="947">Végtelen licencel rendelkezik</entry>
+  <entry key="948">Licence lejár:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Vásároljon új kreditet!</entry>
+  <entry key="951">Saját szervere van?</entry>
+  <entry key="952">Szeretné a szerverén az {0} alkalmazást telepíteni, integrálni a Moodle, SugarCRM, Weboldalalal, Internettel? Darabáras díj 500 Euro per telepítéstől!</entry>
+  <entry key="953">Vagy vegye fel a kapcsolatot</entry>
+  <entry key="954">Válaszra várok:</entry>
+  <entry key="955">Üzenete:</entry>
+  <entry key="956">Küldés</entry>
+  <entry key="957">Kattintson ide a kapcsolati és ár információk kéréséhez</entry>
+  <entry key="958">Kredit kártya adatok</entry>
+  <entry key="959">Vezetéknév</entry>
+  <entry key="960">Keresztnév</entry>
+  <entry key="961">Kredit kártya típusa</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Érvényességi idő</entry>
+  <entry key="968">Kártya ellenőrző száma (CVV)</entry>
+  <entry key="969">Fizetési cím</entry>
+  <entry key="970">Cím</entry>
+  <entry key="971"></entry>
+  <entry key="972">Város</entry>
+  <entry key="973">Ország</entry>
+  <entry key="974">Állam (Only US)</entry>
+  <entry key="975">Irányítószám</entry>
+  <entry key="976">Összeg</entry>
+  <entry key="977">Beküld</entry>
+  <entry key="978">1. lépés: {0} - Fizeti</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Kattintson a "Check out with Paypal" a fizetéshez.&lt;br/&gt; PayPal alkalmas VISA, MasterCard, Discover vagy American Express. &lt;br/&gt;Nem szükséges PayPal regisztrációval rendelkeznie. &lt;br/&gt;Németország területén direktben is fizethet (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Köszönjük, hogy az {0} vásárolta. &lt;br/&gt; &lt;br/&gt; A vásárlás lekönyvelésével aktivljuk az accountját.&lt;br/&gt; A számlát PDF-ként e-mailben kapja meg.&lt;br/&gt;A profiljában ellenőrizheti a tranzakció részleteit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Zárja be a böngészőt, majd térjen vissza az {0} alkalmazásba.</entry>
+  <entry key="982">Beküld és vásárol!</entry>
+  <entry key="983">Kattints a vásárláshoz!</entry>
+  <entry key="984">3. lépés: {0} Vásárlás: ellenőrzés és fizetése!</entry>
+  <entry key="985">Név</entry>
+  <entry key="986">Befizetését fogadtuk!</entry>
+  <entry key="987">Hello,</entry>
+  <entry key="988">Megkaptuk a befizetését. A profilját frissítettük. Nézze meg a kapott számlát. A számla és minden egyéb igazolás a profiljából letölthető.</entry>
+  <entry key="989">Köszönjük, hogy az {0} használja!</entry>
+  <entry key="990">Befizetését feldolgoztuk {0} -</entry>
+  <entry key="991">Fizetési és tranzakciós állapot</entry>
+  <entry key="992">Tranzakció azonosító</entry>
+  <entry key="993">Perc</entry>
+  <entry key="994">Hónap</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Állapot</entry>
+  <entry key="997">Számla</entry>
+  <entry key="998"></entry>
+  <entry key="999">Előfizetésének feltöltése szükséges, hogy meghívót küldhessen, vagy használja a naptárat. Az {0} alkalmazáshoz csak fizetéssel férhet hozzá akár perc alapon is. A konferenciához nincs hozzáférése 3. személynek, alakalmazásnak.</entry>
+  <entry key="1000">Ezt az e-mail címet másik felhazsnáló már használja.</entry>
+  <entry key="1001">SIP-Beállítások</entry>
+  <entry key="1002">A konferencia száma és PIN kódja automatikusan létrehozva az OpenXG RPC-Átjáróval</entry>
+  <entry key="1003">SIP Azonosító</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Törli az objektumot a jelenelgi lapról!</entry>
+  <entry key="1006">Csak a státuszbárba beírt URL-t küldi a résztvevőknek!</entry>
+  <entry key="1007">Csoport szobát csinál [Breakout session]</entry>
+  <entry key="1008">Válasszon felhazsnálókat a csoport szobához!</entry>
+  <entry key="1009">Válassza ki a felhasználókat és lépjen velük át a csoport-szobába ("Team Room"). A választott felhazsnálók üzenetet kapnak és automatikusan átlépnek a csoport szobába. A csoport szoba moderátora(i) automatikusan megegyeznek a jelen szoba moderátora(i)val.</entry>
+  <entry key="1010">Felhasználónév</entry>
+  <entry key="1011">Belépés</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Felhasználók az új csoportszobában:</entry>
+  <entry key="1014">Csoportszoba létrehozása</entry>
+  <entry key="1015">Mégsem</entry>
+  <entry key="1016">Válasszon legalább egy résztvevőt a csoportszobába!</entry>
+  <entry key="1017">Felhasználó csoporthoz adása</entry>
+  <entry key="1018">Felhazsnáló elvétele a csoporttól</entry>
+  <entry key="1019">A felhasználó csoportszoba-moderátor (ezt szabályozni csak a csoportszobából tudja)</entry>
+  <entry key="1020">Szoba típusa</entry>
+  <entry key="1021">Ha be van állítva a "Felhasználók átléptetése az új csoportszobába" minden kiválasztott felhasználó átléptetésre kerül automatiksan az új csoportszobába. Egyébként csak figyelmeztető üzenetet kapnak az átlépéshez. A csoport-moderátorok mindíg szabadon választhatnak a csoportszobák közül.</entry>
+  <entry key="1022">Csoport-szobák kezelése</entry>
+  <entry key="1023">Válasszon a csoportszobák közül, ha csoportszoba-moderátor. A bent lévő felhasználóknak tud üzenetet küldeni, pl. hamarosan belép a szobába. Le tudja zárni a szobát és a bejelentkezett látogatók kiléptetésre kerülnek a szobából</entry>
+  <entry key="1024">Felhasználók átléptetése az új csoportszobába</entry>
+  <entry key="1025">Név</entry>
+  <entry key="1026">Létrehozva</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Elérhető felhasználók</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Csoportszoba beállítása</entry>
+  <entry key="1032">2) Felhasználük hozzáadása</entry>
+  <entry key="1033">Csoportszoba neve</entry>
+  <entry key="1034">Csoportszoba</entry>
+  <entry key="1035">Szoba változtatása</entry>
+  <entry key="1036">Váltás erre a csoportszobára</entry>
+  <entry key="1037">Csoportszoba bezárása, résztvevők kiléptetése</entry>
+  <entry key="1038">Új csoportszoba</entry>
+  <entry key="1039">Új csoportszoba érhető el.</entry>
+  <entry key="1040">Váltás a csoportszobára</entry>
+  <entry key="1041">Csoportszoba tevékenység</entry>
+  <entry key="1042">Nyissa meg újra ezt az ablakot, a menüben az "Akciók" alól!</entry>
+  <entry key="1043">Üzenet küldése s csoport-moderátornak</entry>
+  <entry key="1044">Új csoportszoba</entry>
+  <entry key="1045">Új csoportszoba érhető el. Váltson át a szobára. A munkacsoportban a szoport-moderátorhoz forduljon segítségért. A csoportsuobáit elérheti a "Előadásaim" szekcióban.</entry>
+  <entry key="1046">Váltás a csoportszobára</entry>
+  <entry key="1047">Készítette:</entry>
+  <entry key="1048">Csoportszoba neve:</entry>
+  <entry key="1049">Az ablak nyitvamarad, hakilép a csoportszobából!</entry>
+  <entry key="1050">Felhasználók ebben a szobában</entry>
+  <entry key="1051">3) vags válasszon másik csoportot és lépjen be</entry>
+  <entry key="1052">Küldhet üzenetet a csoport moderátorának. Pl.: ha segítségre van szüksége a moderátortól, vagy nézzen körül a topic-okban.</entry>
+  <entry key="1053">Küldés</entry>
+  <entry key="1054">2) felhasználó meghívott a csoportszobába</entry>
+  <entry key="1055">Csoportszoba moderátora</entry>
+  <entry key="1056">Minden felhasználót a moderátor hívot meg.</entry>
+  <entry key="1057">Nem vagy csoportmoderátor, várni kell a belépésre!</entry>
+  <entry key="1058">Írja ide üzenetét</entry>
+  <entry key="1059">Segítséget kérek, problémám akadt a csoportszobával!</entry>
+  <entry key="1060">A felhassnáló válasza a csoportszobából.</entry>
+  <entry key="1061">Csoportszoba segítség kérés</entry>
+  <entry key="1062">Üzenet:</entry>
+  <entry key="1063">Tól/Től:</entry>
+  <entry key="1064">Nem vagy benne egyik csoportban sem. Kattints ide a csoportszobákhoz való hozzáféréshez.</entry>
+  <entry key="1065">Rendszer mentése. A mentés minden felhazsnálói adatot ment. A konfiguráció és a nyelvek nincsenek benne. Because those values are imported with the System Installer. A rendszer frissítéséhez előbb nemtse el a régi adatokat(1) installálja újra az adatbázist is a telepítővel (2) végül importálja be a mentett adatokat (3). Az importálást elsőként hajtsa végre és csak után aadjon új adatokat a rendszerhez.</entry>
+  <entry key="1066">Rendszer mentése</entry>
+  <entry key="1067">Engedélyezi a felhasználónak a képernyő megosztást/rögzítést</entry>
+  <entry key="1068">Tiltja a felhasználónak a képernyő megosztást/rögzítést</entry>
+  <entry key="1069">A felhasználó moderátor, válasszon másikat!</entry>
+  <entry key="1070">szeretne képernyőt megosztíni/rögzíteni.</entry>
+  <entry key="1071">Heozzáférésed van a képernyő megosztáshoz/rögzítéshez</entry>
+  <entry key="1072">Alkalmazza a képernyő megosztáshoz/rögzítéshez.</entry>
+  <entry key="1073">Engedélyezi/Tiltja a kpernyő megosztását/rögzítését.</entry>
+  <entry key="1074">Hang kikapcsolása</entry>
+  <entry key="1075">Hang bekapcsolása</entry>
+  <entry key="1076">Csak Audio szoba</entry>
+  <entry key="1077">Kapcsolja be az opciót és a látogatók csak audio eszközt használhatnak, video-t nem. Jó megoldás alacsony sávszélesség esetén.</entry>
+  <entry key="1078">Távvezérlés engedélyezése (képernyőmegosztás alatt)</entry>
+  <entry key="1079">Távvezérlés tiltása (képernyőmegosztás alatt)</entry>
+  <entry key="1080">Alkalmazza a távvezérléshez (képernyőmegosztás alatt)</entry>
+  <entry key="1081">Engedélyezted a távvezérlést (képernyőmegosztás alatt)</entry>
+  <entry key="1082">szeretné használni a távvezérlést.</entry>
+  <entry key="1083">A látogató moderátor, bármt tehet! [Távvezérlés Alkalmazás]</entry>
+  <entry key="1084">Engedi/Tiltja a távvezérlést (képernyőmegosztás alatt)</entry>
+  <entry key="1085">1) PC-dtől a távoli PC-re: Másold a szöveget a vágólapra (Ctrl+C), majd távoli PCre küldéshez kattints a távoli gép képernyőjére. Kattints ajobb gombal a szövegmezőn és válaszd a "Beillesztés" menüpontot.&lt;br/&gt;&lt;br/&gt;2) Távoli PC-ről a Te PC-dre: Jelöld ki a szöveget (kiemelés) és kattints a jobb gombbel, majd válaszd a "Kijelölt másolása" menöpontot. Kattints aj obb gombal a saját PC-den a szövegmezőn és válaszd a "Beillesztés" menüpontot.</entry>
+  <entry key="1086">Másol és beilleszt szöveget a helyi PC-ről a távoli PC-re, vagy fordítva.</entry>
+  <entry key="1087">Kijelölt másolása</entry>
+  <entry key="1088">Hogyan kell másolni és beilleszteni</entry>
+  <entry key="1089">Képernyőmegosztás minősége:</entry>
+  <entry key="1090">Nagyon jó minőség</entry>
+  <entry key="1091">Jü minőség</entry>
+  <entry key="1092">Közepes minőség</entry>
+  <entry key="1093">Alacsony minőség</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Nillentyűzet:</entry>
+  <entry key="1097">Előadás lezárása!</entry>
+  <entry key="1098">Ez az előadás lezárásra került, átirányítás.</entry>
+  <entry key="1099">Szoba lezárása</entry>
+  <entry key="1100">Kilépő URL</entry>
+  <entry key="1101">Konferencia szoba bezárás beállításai</entry>
+  <entry key="1102">Ha a konferencia lezárásra kerül, alátogatókat átirányítja a kilépő URL-re.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Név</entry>
+  <entry key="1106">Konfigurációs file</entry>
+  <entry key="1107">Ldap konfiguráció</entry>
+  <entry key="1108">Név</entry>
+  <entry key="1109">Engedélyezve</entry>
+  <entry key="1110">Hozzáadva</entry>
+  <entry key="1111">Hozzáadta</entry>
+  <entry key="1112">Frissítve</entry>
+  <entry key="1113">Frissítette</entry>
+  <entry key="1114">A konfigurációs file helye webapps/openmeetings/conf. Manuálisan töltse fel ebbe a könyvtárba. A beállításokat online bármikor megváltoztathatja.</entry>
+  <entry key="1115">Konfigurációs file neve</entry>
+  <entry key="1116">Ha negedélyezi a "Tartomány hozzáadása a felhasználó névhez" a "Tartomány" (domain) mező értéke hozzáadódik minden bejelentkezéshez mikor a felhasználó belép. Használja ezt, ha az LDAP bejelentezés támogatja a tartomány kezelést. Pl.: Felhasználó belép "hans", tartomány meghatározva mint "localhost.com", a belpést az LDAP ellenőrzi mint: hans@localhost.com</entry>
+  <entry key="1117">Tartomány hozzáadása a felhasználó névhez</entry>
+  <entry key="1118">Tartomány</entry>
+  <entry key="1119">Beszúr</entry>
+  <entry key="1120">Kijelölt szöveg másolása</entry>
+  <entry key="1121">Távoli vágólap tartalma</entry>
+  <entry key="1122">Távoli vágólapot mutat</entry>
+  <entry key="1123">Nem mutathatja mégegyszer</entry>
+  <entry key="1124">Másolása ide ...</entry>
+  <entry key="1125">Távoli vezérlés használata szükséges (vagy moderátor) hogy aszöveget másolhasson a képernyőre/képernyőről.</entry>
+  <entry key="1126">Alap beállítások szerkesztése ...</entry>
+  <entry key="1127">Ne mutassa a Távvezérlés info dobozt a másolás/beillesztés közben.</entry>
+  <entry key="1128">Mentés</entry>
+  <entry key="1129">Eltávolítás</entry>
+  <entry key="1130">Mégsem</entry>
+  <entry key="1131">Felhasználó meghívása a konferenciába</entry>
+  <entry key="1132">Válasszon konferencia szobát. A meghívott felhasználó üzenetet kap a Nevével és a belépési linkkel.</entry>
+  <entry key="1133">Kapcsolódva:</entry>
+  <entry key="1134">Belépés a konferencia szobába a meghívó küldés után</entry>
+  <entry key="1135">Meghívás</entry>
+  <entry key="1136">Üzenet</entry>
+  <entry key="1137">szeretne meghívni a konferencia szobába:</entry>
+  <entry key="1138">Meghívó üzenet</entry>
+  <entry key="1139">Meghívó küldése</entry>
+  <entry key="1140">&lt;b&gt;nem&lt;/b&gt; fogadta el a meghívást!</entry>
+  <entry key="1141">Elfogad</entry>
+  <entry key="1142">Visszautasít</entry>
+  <entry key="1143">Időzóna</entry>
+  <entry key="1144">Esemény részletei</entry>
+  <entry key="1145">Név</entry>
+  <entry key="1146">Leírás</entry>
+  <entry key="1147">Létrehozta</entry>
+  <entry key="1148">Időzóna üzenet</entry>
+  <entry key="1149">Ellenőrizze az "TimeZone Message" a profiljában, amit a felhasználók a belépéskor látni fognak.</entry>
+  <entry key="1150">Ellenőrizze az időzóna beállítását a profiljában.</entry>
+  <entry key="1151">új {0} konferencia:</entry>
+  <entry key="1152">Részletek:</entry>
+  <entry key="1153">Kezdődik:</entry>
+  <entry key="1154">Vége:</entry>
+  <entry key="1155">Változás {0} konferencia:</entry>
+  <entry key="1156">Szervezet:</entry>
+  <entry key="1157">Törölt {0} konferencia:</entry>
+  <entry key="1158">{0} konferencia emlékeztető:</entry>
+  <entry key="1159">Közösség beállításai</entry>
+  <entry key="1160">Mindenkinek mutassa a kapcsolati adatokat</entry>
+  <entry key="1161">Adjon hozzá érdeklődési köröket, vagy keresési adatokat a mezőhöz, hogy az érdeklődők rákereshessenek az előadására. Vesszővel válassza el a felsorolt elemeket (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">Ajánlásaim</entry>
+  <entry key="1163">Érdeklődésem</entry>
+  <entry key="1164">Név</entry>
+  <entry key="1165">Időzóna</entry>
+  <entry key="1166">Érdeklődési terület</entry>
+  <entry key="1167">Kapcsolati információ</entry>
+  <entry key="1168">Kapcsolati adatokat csak a személyes kontakt listámon láthatják</entry>
+  <entry key="1169">Ne mutassa a kapcsolati adataimat</entry>
+  <entry key="1170">Profilom</entry>
+  <entry key="1171">Beállítások szerkesztés</entry>
+  <entry key="1172">Felhasználók keresése</entry>
+  <entry key="1173">Profilom megtekintése, ahogyan mésok látják</entry>
+  <entry key="1174">Szerkeszd a beállításaidat, add hozzá az érdeklődési körödhöz</entry>
+  <entry key="1175">Keress felhasználókat és add hozzá a hálózatodhoz</entry>
+  <entry key="1176">Keresés</entry>
+  <entry key="1177">Felhasználói ajánlatok</entry>
+  <entry key="1178">Felhasználó nézi ezt</entry>
+  <entry key="1179">Szabad szöveg</entry>
+  <entry key="1180">Név</entry>
+  <entry key="1181">Időzóna</entry>
+  <entry key="1182">Ajánl</entry>
+  <entry key="1183">Keresés</entry>
+  <entry key="1184">Keresési eredmények</entry>
+  <entry key="1185">Akciók</entry>
+  <entry key="1186">Kontaktlistához ad</entry>
+  <entry key="1187">Üzenet küldése</entry>
+  <entry key="1188">Kapcsolatok és üzenetek</entry>
+  <entry key="1189">Függő kapcsolat</entry>
+  <entry key="1190">Elfogad</entry>
+  <entry key="1191">Visszautasít</entry>
+  <entry key="1192">Hello,</entry>
+  <entry key="1193">szeretne kapcsolatként hozzáadni téged.</entry>
+  <entry key="1194">Ellenőrizze a felkérést a {0} alkalmazásban, vagy kattintson a megfelelő linkre az Elfogadáshoz/Visszautasításhoz.</entry>
+  <entry key="1195">A felhasználó már a kontaktlistádon van, vagy kapott egy meghívást a kapcsolatilistádra, amire nem adott még választ.</entry>
+  <entry key="1196">Kapcsolataid</entry>
+  <entry key="1197">Kapcsolatok és üzenetek szerkesztése,&lt;br/&gt; függő kapcsolatok kezelése!</entry>
+  <entry key="1198">hagyd jóvá a kapcsolatod!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Chat napló Mutat / Másol</entry>
+  <entry key="1201">Chat napló</entry>
+  <entry key="1202">Küldő</entry>
+  <entry key="1203">Tárgy</entry>
+  <entry key="1204">Küld</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Üzenet</entry>
+  <entry key="1207">Új email</entry>
+  <entry key="1208">Kattintson az új üzenet írásához a kapcsolatai számára</entry>
+  <entry key="1209">Új üzenet írása</entry>
+  <entry key="1210">Címzett:</entry>
+  <entry key="1211">Tárgy:</entry>
+  <entry key="1212">Engedélyezi a tábla teljes méretre igazítását&lt;br/&gt;a dokumentumot minden felhasználó a saját felbontása szerint látja.</entry>
+  <entry key="1213">Felhasználó kitiltása</entry>
+  <entry key="1214">Saját magát nem tilthatja ki a teremből! A szoba elhagyásához kattintson a kilépésre, zárja be az ablakot, vagy a böngészőt!</entry>
+  <entry key="1215">Biztosan leválasztja ezt a felhasználót a konferenciáról?</entry>
+  <entry key="1216">Megerősítés ...</entry>
+  <entry key="1217">A Super-Moderátort nem tilthatja ki a konferenciából!</entry>
+  <entry key="1218">Konferencia szoba kapcsolat lista</entry>
+  <entry key="1219">Kezdődik</entry>
+  <entry key="1220">Befejeződik</entry>
+  <entry key="1221">Adhat kérdéseket a konferencia üzenetéhez és létrehozza a konferenciát. Az esemény bekerül minden látogató naptárába.</entry>
+  <entry key="1222">Bejövő</entry>
+  <entry key="1223">Küldött</entry>
+  <entry key="1224">Kuka</entry>
+  <entry key="1225">Ez Te vagy! Nem adhatod magad a kontakt listához.</entry>
+  <entry key="1226">Ez a felhasználó tiltva van!</entry>
+  <entry key="1227">Ez a felhasználó már el van fogadva!</entry>
+  <entry key="1228">A felhasználó kapcsolata érvénytelen!</entry>
+  <entry key="1229">Felhasználó hozzáadva a kontakt listához!</entry>
+  <entry key="1230">A felhasználó kapcsolata tiltva van és folyamatban van a kontakt listáról levétele!</entry>
+  <entry key="1231">Ezzel nincs kapcsolat!</entry>
+  <entry key="1232">Biztosan eltávolítja ezt a kapcsolatot?</entry>
+  <entry key="1233">Eltávolítás megerősítése</entry>
+  <entry key="1234">Kapcsolat törlése a listáról</entry>
+  <entry key="1235">Felhasználói profil</entry>
+  <entry key="1236">Motasd a profilját</entry>
+  <entry key="1237">Üzenet</entry>
+  <entry key="1238">Keresés</entry>
+  <entry key="1239">Mind kijelöl</entry>
+  <entry key="1240">Kijelölés törlése</entry>
+  <entry key="1241">Olvasatlanok kijelölése</entry>
+  <entry key="1242">Olvasottak kijelölése</entry>
+  <entry key="1243">Könyvtárba áthelyez ...</entry>
+  <entry key="1244">Új könyvtár hozzáadása ...</entry>
+  <entry key="1245">Törlés</entry>
+  <entry key="1246">A törölt üzenetek a "Kukába" kerülnek!</entry>
+  <entry key="1247">Olvasatlannak jelöl</entry>
+  <entry key="1248">Olvasottnak jelöl</entry>
+  <entry key="1249">Válasz</entry>
+  <entry key="1250">Válasz mindenkinek</entry>
+  <entry key="1251">Továbbít</entry>
+  <entry key="1252">Művelet ...</entry>
+  <entry key="1253">Privát üzenet küldése</entry>
+  <entry key="1254">Nincs kiválasztva!</entry>
+  <entry key="1255">Bejövőbe áthelyez</entry>
+  <entry key="1256">Törlés (végleges)</entry>
+  <entry key="1257">A művelet sikertelen!</entry>
+  <entry key="1258">Küönyvtár hozzáadása</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Könyvtár hozzáadása</entry>
+  <entry key="1261">Hozzáad</entry>
+  <entry key="1262">Könyvtár törlése</entry>
+  <entry key="1263">Nem törölheti ezt a konyvtárat, üzenetek vannak benne! Először törölje, vagy helyezze át az üzeneteket.</entry>
+  <entry key="1264">Név szerkesztése</entry>
+  <entry key="1265">Biztosan törli ezt a könyvtárat? Később nem vonható vissza.</entry>
+  <entry key="1266">A felkérésed elküldtük a felhasználónak. Amint megkapja üzeneted, elfogadja/visszautasítja a felkérésed. Csak az elfogadottak kerülnek a kontaktlistára!</entry>
+  <entry key="1267">Üzenet</entry>
+  <entry key="1268">A felhasználó nem osztotta meg a privát kapcsolati adatait.</entry>
+  <entry key="1269">A felhasználó csak a kpcsolataival osztotta meg a privát kapcsolati adatait.</entry>
+  <entry key="1270">Cím &amp; Telefon</entry>
+  <entry key="1271">A meghívód érvénytelen, a meghívó csak az alábbi időben érvényes:</entry>
+  <entry key="1272">Ez az esemény több felhasználó, több naptár bejegyzéshez is kapcsolódik. A változás mindegyiket érinti. Valóban frissíted a bejegyzést?</entry>
+  <entry key="1273">Frissítés megerősítése</entry>
+  <entry key="1274">Engedélyezem a kapcsolataimnak a naptárat (csak nézet)</entry>
+  <entry key="1275">Nem osztja meg a naptárat</entry>
+  <entry key="1276">Kapcsolatok naptára</entry>
+  <entry key="1277">Előbb vetesse fel magát a kapcsolatlistára, hogy megnézhesse ezt a naptárbejegyzést.</entry>
+  <entry key="1278">Nem menthet, törölhet olyan eseményt, amit nem Ön hozott létre!!</entry>
+  <entry key="1279">Mutasd a naptáraimat ismét!</entry>
+  <entry key="1280">Ez az esemény több felhasználó, több naptár bejegyzéshez is kapcsolódik. A változás mindegyiket érinti. Valóban törli a bejegyzést?</entry>
+  <entry key="1281">Művelet megerősítése</entry>
+  <entry key="1282">Belépés a szobába</entry>
+  <entry key="1283">Hpzzáférés a konferencia szobához</entry>
+  <entry key="1284">A konferencia szoba és az esemény tárolva lett a privát bejegyzésekhez.</entry>
+  <entry key="1285">Először le kell tárolnia az eseményt!</entry>
+  <entry key="1286">Ez a szoba nem elérhető. Az esemény a naptárból és a konferencia szoba el lett távolítva !</entry>
+  <entry key="1287">Válasszon megjelenő felhasználó nevet</entry>
+  <entry key="1288">Vezetéknév</entry>
+  <entry key="1289">Keresztnév</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Legalább 4 karakter szükséges! Esetleg a vezeték és keresztnév.</entry>
+  <entry key="1293">Érvényes e-mail címet adjon meg!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Belépés Facebook azonosítóval</entry>
+  <entry key="1296">Felhasználói</entry>
+  <entry key="1297">Facebook azonosítóval lépett be. A profilban adja meg az e-mail címét. Ha nem adja meg az email címét, nem tud üzeneteket fogadni a bejegyzésekről, konferenciákról, más felhasználóktól.</entry>
+  <entry key="1298">Üzenet</entry>
+  <entry key="1299">Ne mutasa újra a profil frissítési üzenetet</entry>
+  <entry key="1300">mtovábbi opciók megjelenítése ...</entry>
+  <entry key="1301">Új privát üzenet:</entry>
+  <entry key="1302">Kattintson ide a profil megtekintéséhez ...</entry>
+  <entry key="1303">Válasz</entry>
+  <entry key="1304">Szobák és Chat</entry>
+  <entry key="1305">Saját szobák</entry>
+  <entry key="1306">Konferencia szobáim (1-16 résztvevő)</entry>
+  <entry key="1307">Webinárium szobáim (1-120 résztvevő)</entry>
+  <entry key="1308">Tulajdonos Id</entry>
+  <entry key="1309">Adjameg a jelszót</entry>
+  <entry key="1310">Szükséges jogosultsági szint (felhasználó,vagy moderátor, vagy admnisztrátor)</entry>
+  <entry key="1311">Web-Service (Csak SOAP hozzáférés)</entry>
+  <entry key="1312">Közvetlen betöltés a táblába</entry>
+  <entry key="1313">Valóban eltávolítja ezt a táblát? A művelet nem fordítható vissza!</entry>
+  <entry key="1314">Betöltés a táblába</entry>
+  <entry key="1315">Ne felejtse el a felvételt indítani! Legalább egy látogató belépése szükséges a felvétel elindításához.</entry>
+  <entry key="1316">Felvétel indítása</entry>
+  <entry key="1317">Nyíl</entry>
+  <entry key="1318">Kör</entry>
+  <entry key="1319">Vonal</entry>
+  <entry key="1320">Négyszög</entry>
+  <entry key="1321">Háromszög</entry>
+  <entry key="1322">Szöveg</entry>
+  <entry key="1323">Ikonok</entry>
+  <entry key="1324">Szabadkézi rajz</entry>
+  <entry key="1325">Kiválaszt/Mozgat</entry>
+  <entry key="1326">Terület rajzolása</entry>
+  <entry key="1327">Kivág/Mozgat</entry>
+  <entry key="1328">Nagyató</entry>
+  <entry key="1329">Nyomtat</entry>
+  <entry key="1330">Visszavon</entry>
+  <entry key="1331">Kuka</entry>
+  <entry key="1332">Rács hozzáadása</entry>
+  <entry key="1333">File megosztása</entry>
+  <entry key="1334">Kijelölő négyzet</entry>
+  <entry key="1335">Ikon választása</entry>
+  <entry key="1336">Másol</entry>
+  <entry key="1337">Kivág</entry>
+  <entry key="1338">Beilleszt</entry>
+  <entry key="1339">Töröl</entry>
+  <entry key="1340">Biztosan törli a tábla tartalmát?</entry>
+  <entry key="1341">Töltse be a táblába közvetlenül</entry>
+  <entry key="1342">Látogatók</entry>
+  <entry key="1343">Látogatók kezelése</entry>
+  <entry key="1344">Bemutat</entry>
+  <entry key="1345">Távoli vezérlés</entry>
+  <entry key="1346">Kiad</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Látogató meghívása</entry>
+  <entry key="1349">E-mailben</entry>
+  <entry key="1350">Felhasználó moderátor</entry>
+  <entry key="1351">Felhasználó webkamerájának bekapcsolása</entry>
+  <entry key="1352">Terület kitöltés be</entry>
+  <entry key="1353">Terület kitöltés ki</entry>
+  <entry key="1354">Ugrás a rácsra</entry>
+  <entry key="1355">Felvétel engedélyezése</entry>
+  <entry key="1356">Várakozás a felvételre</entry>
+  <entry key="1357">Felső menü elrejtése</entry>
+  <entry key="1358">Videó lejátszása</entry>
+  <entry key="1359">Valóban eltávolítja ezt a tartalmat a lapról?</entry>
+  <entry key="1360">Elfogadja és alkalmazza a felhasználónak ezt</entry>
+  <entry key="1361">Tilt</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Aktivitások és műveletek</entry>
+  <entry key="1364">Tábla eltávolítása</entry>
+  <entry key="1365">Moderátornak kell lennie, vagy engedéllyel kell rendelkeznie a tábla művletekhez!</entry>
+  <entry key="1366">Nem engedélyezett</entry>
+  <entry key="1367">kilépett a szobából.</entry>
+  <entry key="1368">Matematikai ikonok</entry>
+  <entry key="1369">Kategorizálatlan</entry>
+  <entry key="1370">Szín stílus</entry>
+  <entry key="1371">Minőség</entry>
+  <entry key="1372">Tartomány</entry>
+  <entry key="1373">meglátogat</entry>
+  <entry key="1374">narancsvörös</entry>
+  <entry key="1375">középzöld</entry>
+  <entry key="1376">sötétkék</entry>
+  <entry key="1377">világoskék</entry>
+  <entry key="1378">aranyvörös</entry>
+  <entry key="1379">ezüstszürke</entry>
+  <entry key="1380">egyéni</entry>
+  <entry key="1381">jobb</entry>
+  <entry key="1382">feltölt</entry>
+  <entry key="1383">közepes</entry>
+  <entry key="1384">Összes mikrofont némít</entry>
+  <entry key="1385">Összes mikrofont visszakapcsol</entry>
+  <entry key="1386">Mások mikrofonjának némítása</entry>
+  <entry key="1387">A moderátor lenémította a mikrofonját, nem kapcsolhatja vissza!</entry>
+  <entry key="1388">Összes mikrofont némítja?</entry>
+  <entry key="1389">Biztosan mindent elnémít? A hallgatók nem fogják hallani!</entry>
+  <entry key="1390">Mikrofon helyileg némítja?</entry>
+  <entry key="1391">Biztosan némítja a mikrofonját? Csak a helyi képernyőn némítja. Nincs hatással a többi hallgatóra, ők hallhatják továbbra is. Csak a moderátor némíthatja le globálisan!</entry>
+  <entry key="1392">Mikrofont globálisan némítja?</entry>
+  <entry key="1393">Globálisan némítja ezt a látogatót? Nem fogják tovább hallani!</entry>
+  <entry key="1394">A hangod be van kapcsolva. Kattints ide, hogy jelezd a moderátornak, ha kapcsolja ki!</entry>
+  <entry key="1395">A hangod ki van kapcsolva. Kattints ide, hogy jelezd a moderátornak, ka kapcsolja be</entry>
+  <entry key="1396">szeretném, hogy a moderátor némítsa mindenknél a hangomat.</entry>
+  <entry key="1397">szeretném, hogy a moderátor kapcsolja vissza mindenkinél a hangomat.</entry>
+  <entry key="1398">a moderátor visszakapcsolta a mikrofonját.</entry>
+  <entry key="1399">a moderátor némította a mikrofonját.</entry>
+  <entry key="1400">Hangja visszakapcsolva. Kattintson ide, ha globálisan némítani akarja!</entry>
+  <entry key="1401">Hangja némítva. Kattintson ide, ha globálisan vissza akarja kapcsolni!</entry>
+  <entry key="1402">A felhasználót a moderátor globálisan némította. Ön nem kapcsolhatja vissza!</entry>
+  <entry key="1403">Hangját mindenkinél némítja</entry>
+  <entry key="1404">Hangját mindenkinél visszakapcsolja</entry>
+  <entry key="1405">Mikrofont némít</entry>
+  <entry key="1406">Mikrofont visszakapcsol</entry>
+  <entry key="1407">Hangot mindenkinél némítja</entry>
+  <entry key="1408">Hangot mindenkinél visszakapcsolja</entry>
+  <entry key="1409">Csak amoderátor tudja globálisan némítani/visszaadni a hangot! A mikrofonja némításához: Kattintson a mikrofon ikonra a panelján!</entry>
+  <entry key="1410">Szavazás neve</entry>
+  <entry key="1411">Te</entry>
+  <entry key="1412">Régebbi szavazások</entry>
+  <entry key="1413">aktív</entry>
+  <entry key="1414">Egyszerű diagramm</entry>
+  <entry key="1415">Oszlop diagramm</entry>
+  <entry key="1416">Adja meg e-mail címét</entry>
+  <entry key="1417">Új üzenet(ek)</entry>
+  <entry key="1418">Szavazás lezárása</entry>
+  <entry key="1419">Biztosan lezárja a szavazást? Nem lehet később szavazni rá.</entry>
+  <entry key="1420">Szavazás törlése</entry>
+  <entry key="1421">Biztosan törli ezt a szavazást? Az eredmények is törlésre kerülnek.</entry>
+  <entry key="1422">Nyelv ISO kódja</entry>
+  <entry key="1423">Engedi/Tiltja az audio hozzászólást.</entry>
+  <entry key="1424">Engedélyezi a felhasználónak az audio hozzászólást</entry>
+  <entry key="1425">Tiltja a felhasználónak az audio hozzászólást</entry>
+  <entry key="1426">hozzá szeretne szólni, hang eszköz engedélyt kér.</entry>
+  <entry key="1427">a moderátor hozzászólási engedélyt adott.</entry>
+  <entry key="1428">Hozzászólási engedélyt kérek.</entry>
+  <entry key="1429">Kamera felbontás</entry>
+  <entry key="1430">Sávszélességének (Feltöltési irány) megfelelően válassza meg a felbontás. Nagyobb felbontás, nagyobb sávszélességet igényel!</entry>
+  <entry key="1431">Nincs engedélye az egyéni Audio/Video kapcsolathoz. Kérjen engedélyt a moderátortól, vagy figyelmeztesse, hogy kapcsolja be a hozzáférését.</entry>
+  <entry key="1432">Egyéni audio hozzáférést kérek a hozzászóláshoz!</entry>
+  <entry key="1433">Egyéni audio/video kapcsolat velem (kattintson a panelen, vagy F12)</entry>
+  <entry key="1434">Mikrofon aktív!</entry>
+  <entry key="1435">Mikrofon némítva</entry>
+  <entry key="1436">Chat elrejtése</entry>
+  <entry key="1437">Aktivitások elrejtése</entry>
+  <entry key="1438">File böngésző elrejtése</entry>
+  <entry key="1439">Akciók menü elrejtése</entry>
+  <entry key="1440">Képernyő megosztás elrejtése</entry>
+  <entry key="1441">Tábla elrejtése</entry>
+  <entry key="1442">Mutassa a mikrofon jelet a videó panelen</entry>
+  <entry key="1443">Felület tulajdonságai</entry>
+  <entry key="1444">Új esemény</entry>
+  <entry key="1445">Az eseményhez tartozó link jelszóval védett, a jelszó az eseményhez tartozik, nem a konferencia szobához! Az értesítő az eseményhez kapcsolt kontaktoknak szól és kerül kiküldésre! Amikor megváltoztatja az eseményt, minden alkalommal kiküldésre kerülnek az új linkek új jelszóval. A linkek csak egyszer működnek, a régi jelszók érvénytelenek!</entry>
+  <entry key="1446">Részletek szerkesztése</entry>
+  <entry key="1447">Mutasd a SIP számot</entry>
+  <entry key="1448">Hívás</entry>
+  <entry key="1449">Mutasd a kapcsolataim eseményeit</entry>
+  <entry key="1450">Főoldal!</entry>
+  <entry key="1451">Előadásai térképe</entry>
+  <entry key="1452">Felvételek, interjúk megnézése</entry>
+  <entry key="1453">Válassza kis és indítson Web-konferenciát</entry>
+  <entry key="1454">Felhasználók kezelése</entry>
+  <entry key="1455">Kapcsolatok kezelése, látogatók leválasztása</entry>
+  <entry key="1456">Csoportok kezelése</entry>
+  <entry key="1457">Konferencia szobák kezelése</entry>
+  <entry key="1458">Rendszer beállításainak kezelése</entry>
+  <entry key="1459">Cimkék és szavak kezelése</entry>
+  <entry key="1460">LDAP és ADS konfigurációs beállítások</entry>
+  <entry key="1461">Rendszer biztonsági mentés Export/Import</entry>
+  <entry key="1462">Moderátornak kell lenned, hogy létrehozhass, feltölthess, módosíthass, táblához adhass filet/könyvtárat.</entry>
+  <entry key="1463">Szöveg szerkezstése</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publikáció</entry>
+  <entry key="1466">Publikálás indítása</entry>
+  <entry key="1467">Publikáció befejezése</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publikációs alkalmazás</entry>
+  <entry key="1470">Publikációs Id</entry>
+  <entry key="1471">Csökkentse a megosztási kép szélességét mielőtt odébb húzza.</entry>
+  <entry key="1472">Csökkentse a megosztási magasságot, mielőtt lejebb húzza</entry>
+  <entry key="1473">Csökkenti a megoszási képernyő X méretét mielőtt megpróbálja szélesíteni</entry>
+  <entry key="1474">Csökkenti a megoszási képernyő Y méretét mielőtt megpróbálja magasítani</entry>
+  <entry key="1475">Töltse fel a meosztási streamet külső alkalmazásba(3rd.) pl.: justin.tv</entry>
+  <entry key="1476">Indítsa el a képernyőmegosztást a publikáláshoz</entry>
+  <entry key="1477">Moderátornak kell lennie a felvétel indításához</entry>
+  <entry key="1478">YNincs jogosultsága, hogy egyéni audoi/video kapcsolatot állítson be a látogatókkal. Moderátornak kell lennie, vagy több egyéni kapcsolatának, hogy egyéni mikrofonokat kapcsolhasson be.</entry>
+  <entry key="1479">Új file feltöltése</entry>
+  <entry key="1480">Megosztási beállítások megnyitása</entry>
+  <entry key="1481">Moderátor alkalmazhatja</entry>
+  <entry key="1482">Jelezzen a moderátornak, hogy ossza meg a kameráját/mikrofonját</entry>
+  <entry key="1483">Visszacsatolást gyűjt azáltal, hogy létrehoz egy szavazást</entry>
+  <entry key="1484">A régebbi és jelen szavazatok alapján az eredmények</entry>
+  <entry key="1485">Válaszol, ha a szavazás ehhez a konferenciához tartozik</entry>
+  <entry key="1486">Kamera/Mikrofon beállításai</entry>
+  <entry key="1487">Kilép az előadásból</entry>
+  <entry key="1488">Külső személy hívása VoIP/SIP</entry>
+  <entry key="1489">Direkt belépési link küldése ehhez a szobához</entry>
+  <entry key="1490">Rajztábla beállításainak változtatása</entry>
+  <entry key="1491">Maximális feltöltési méret</entry>
+  <entry key="1492">Moderátort kéri, hogy ossza meg a tábládat</entry>
+  <entry key="1493">Privát chat nyitása</entry>
+  <entry key="1494">Mindenki</entry>
+  <entry key="1495">Vele nem kezdhet privát chatet.</entry>
+  <entry key="1496">Már privát shatban van ezzel a felhasználóval.</entry>
+  <entry key="1497">DTörli ezt a privát chatet?</entry>
+  <entry key="1498">Szerverek</entry>
+  <entry key="1499">Szerver látogatói a kluszterben</entry>
+  <entry key="1500">Szerver neve</entry>
+  <entry key="1501">Szerver címe</entry>
+  <entry key="1502">Szerver adatai</entry>
+  <entry key="1503">SMS Küldése</entry>
+  <entry key="1504">Közzététel. Felhasználó:</entry>
+  <entry key="1505">Időt és adatforgalmat takarít meg ha a parancssori admint használja a mentésekhez backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;lépjen be az OM telepített könyvtárába (pl.: /opt/red5)&lt;/li&gt; &lt;li&gt;állítsa meg az OM-et (cmd: ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (backup készítése az aktuális OM -ről)&lt;/li&gt; &lt;li&gt;töltse le az új OM-et&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (A működő OM verziót őrizze meg :))&lt;/li&gt; &lt;li&gt;Csomagolja ki az új OM-et /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' adja meg, ha nem az alapértelmezett DB hozzáférést használja )&lt;/li&gt; &lt;li&gt;OM indítása&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Közös termek minden felhasználó számára</entry>
+  <entry key="1507">Közös termek a csoport felhasználói számára</entry>
+  <entry key="1508">A felhasználó termei</entry>
+  <entry key="1509">Speciális találkzó szoba étrehozás/módosítás</entry>
+  <entry key="1510">Több cím megadása az alábbiak szerint: vezetéknév1 keresztnév1 &lt;email1&gt;,"vezetéknév2 keresztnév2" &lt;email2&gt;,'vezetéknév3 keresztnév3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Stream hangerő változtatása</entry>
+  <entry key="1512">Mikrofon hangerő változtatása</entry>
+  <entry key="1513">A chat moderált</entry>
+  <entry key="1514">Üzenet engedélyezése</entry>
+  <entry key="1515">Chat panel alapértelmezésben nyitva</entry>
+  <entry key="1516">Fileok panel alapbértelmezésben nyitva</entry>
+  <entry key="1517">Utolsó ping</entry>
+  <entry key="1518">Minden slave küldi a pinget a masternek 3 másodpercenként (konfigurálható). Utolsó slave kevess mint 1 perce érkezett, a mastar használja a slave-t.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">Felhasználó (SOAP-Access)</entry>
+  <entry key="1521">Jelszó</entry>
+  <entry key="1522">Webapp útvonala</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Aktív</entry>
+  <entry key="1526">URL készítése</entry>
+  <entry key="1527">Hálózat tesztelése</entry>
+  <entry key="1528">Automatiksan kiválasztja az interjú video ablakot</entry>
+  <entry key="1529">Aláhúzott</entry>
+  <entry key="1530">Betükészlet</entry>
+  <entry key="1531">Alkalmazott betükészlet</entry>
+  <entry key="1532">Betü szín</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Session statisztika mutat</entry>
+  <entry key="1535">Session részletei</entry>
+  <entry key="1536">Rendszer import</entry>
+  <entry key="1537">Feltöltött fileok és felvételek betöltése a mentásből</entry>
+  <entry key="1538">SIP átvitel engedélyezése a szobában</entry>
+  <entry key="1539">Egyéni hangkapcsolatot kezdeményez ezzel a felhasználóval?</entry>
+  <entry key="1540">Adjameg az időzónáját</entry>
+  <entry key="1541">csoportmunka (n:n) konferencia (1-25 látogatóval)</entry>
+  <entry key="1542">moderált (1:n) konferencia (1-150 látogatóval)</entry>
+  <entry key="1543">interjú (1:1 megbeszélés felvétellel)</entry>
+  <entry key="1544">Konfigurációs beállító kulcs már létezik, válasszon másikat, vagy szerkessze a meglévőt</entry>
+  <entry key="1545">Tartalom mentése, kérem várjon...</entry>
+  <entry key="1546">Üdvözöljük</entry>
+  <entry key="1547">Widgeten megjelenő felhasználói adatok és linkek</entry>
+  <entry key="1548">Widgetek</entry>
+  <entry key="1549">Rólunk</entry>
+  <entry key="1550">Név</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Betöltés ...</entry>
+  <entry key="1555">ma</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">ne küldjön értesítést</entry>
+  <entry key="1569">egyszerű e-mail</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Képek feltöltése/importálása a prezentációs területbe<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse a <strong>ImageMagick</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt 
+				<a target="_blank" href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+				<a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					Linux operációs rendszerben használja a beépített csomagkezelőt (apt-get it).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>PDF fileok feltöltése a prezentációs területbe<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse a  <strong>GhostScript</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					Linux operációs rendszerben használja a beépített csomagkezelőt (apt-get it).
+				</li>
+				<li>Telepítse a <strong>SWFTools</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt  <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					Több linux disztribúció csomagkezelőjében megtalálható <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					ajánlott verzió a <strong>SWFTools</strong> 0.9 egyéb verzió bugja miatt hibát okozhat a prezentációkban. 
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Dokumentumok importálása a prezentációs területrbe
+				.doc, .docx, .ppt, .pptx, ... stb (OpenOfice kompatibilis).<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse az <strong>OpenOffice / LibreOffice</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt  <a target="_blank"
+					href="http://www.openoffice.org/" rel="nofollow">http://www.openoffice.org/</a>
+					<a target="_blank"
+					href="http://www.libreoffice.org/" rel="nofollow">http://www.libreffice.org/</a>
+					LibreOffice program csomag használata esetén rendelje hozzá szimbólikus linkként az OpenOffice könyvtárat.
+					<br />
+					ln -s /opt/libreoffice /opt/openoffice 
+				</li>
+				<li><strong>OpenOffice-Service</strong> automatikusan indul és elérhető a
+					8100 porton. Bővebb információ itt <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Videó felvétele és importálása .avi, .flv, .mov and .mp4 formátumokban a prezentációs területbe<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse az <strong>FFMpeg</strong> programcsomagot. Használja az FFMPEG aktuális, friss verzióját.
+				 	Windows rendszerekhez kiadások itt <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux, OSX rendszerkhez
+					többféle lehetőség érhető el, keresse meg a megfelelőt az interneten. 
+					Szükséges a libmp3lame kóder engedélyezése/implementálása!
+				</li>
+				<li>Telepítse a <strong>SoX</strong> programot innen: <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					A SoX friss verzióit használja! SoX 12.xx nem/hibásan működik!
+				</li>
+			</ul>
+		</li>
+	</ol>
+	
+	<b><span style="font-size: 1.2em">Közösségi-támogatás:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Levelező lista</a></span>
+	<br />
+	<br />
+	<br />
+    <b> <span style="font-size: 1.4em">Néhány cég, akik üzleti támogatást nyújthatnak Apache OpenMeetings:</span></b>
+	<br />
+	<br />
+    
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Ajánlott környezeti beállítások<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Az {0} alapértelmezette a beépített {1} adatbázist használja. 
+			További lehetőségként használható a {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Felhasználói adatok</entry>
+	<entry key="install.wizard.params.step1.username">Felhasználónév</entry>
+	<entry key="install.wizard.params.step1.username.title">Adja meg a felhasználói nevét</entry>
+	<entry key="install.wizard.params.step1.password">Jelszó</entry>
+	<entry key="install.wizard.params.step1.password.title">Adja meg a jelszavát</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Adja meg az e-mail címét</entry>
+	<entry key="install.wizard.params.step1.tz">Időzóna kiválasztása</entry>
+	<entry key="install.wizard.params.step1.groupdata">Szervezeti egység (Domain)</entry>
+	<entry key="install.wizard.params.step1.group">Név (domain)</entry>
+	<entry key="install.wizard.params.step1.group.title">Adja meg a nevet (domain)</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Beállítások</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Előregisztráció engedélyezése (megjelenik a belépő panelen)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Regisztrációs e-mail küldése</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Regisztráció megerősítése e-mailben (megerősítő link küldése)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Alapértelmezett típusú konferencia szobák létrehozása</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Rendszer e-mail cím</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Rendszer e-mail megadása</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Szerver (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Szerver Port(alapértelmezett Smtp-Server Port 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Felhasználó név (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Adja meg a felhasználó nevet</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Felhasználó jelszó (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Adja meg a jelszót</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">TLS engedélyezése az authentikációhoz</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">A meghívó e-mail címének küldése és beállítása a válasz küldéshez (reply-to) fejlécben(inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Alapértelmezett nyelv</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Alapértelmezett betükészlet [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Konverterek</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> bővebben</entry>
+	<entry key="install.wizard.params.step3.installation">Telepítés</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Adja meg az SWFTools felbontását (dpi) amit a PDF2SWF konverziónál használ</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Paraméterként megadhatja a felbontást.
+		Alapértelmezett felbontás 100 dpi.
+	</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Minőség</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Adja meg a jpeg képek minőségi rátáját. 0 a gyengébb (kicsi), 100 a legjobb (nagy). (alapértelmezett:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Paraméterként megadhatja a 
+		a jpeg képek minőségét. 0 a gyengébb (kicsi),
+		100 a legjobb (nagy). (alapértelmezett:85).
+	</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools útvonala</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Adja meg az SWFTools elérési útvonalát C:/swftools (Windows) /usr/local/swftools (Linux) vagy hagyja üresen, ha elérhető a rendszerútvonalak közt</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Hagyja üresen, ha nem ismeri, vagy ha elérhető a rendszerútvonalon. 
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick útvonala</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Adja meg a ImageMagick elérési útvonalát, hagyja üresen, ha az ImageMagick elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG útvonala</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Adja meg az FFMPEG alérési útvonalát, hagyja üresen, ha az FFMPEG elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX útvonala</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Adja meg a SoX elérési útvonalát, hagyja üresen, ha a SoX elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD útvonala</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">A JOD könyvtár útvonala (http://code.google.com/p/jodconverter), a JOD könyvtárban szükséges a jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice útvonala a jodconverterhez</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Adja meg az OpenOffice/LibreOffice (optional) valós útvonalát, a OpenOffice/LibreOffice nem keresi automatikusan a jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.text">
+		Az OpenOffice/LibreOffice (optional) útvonalát a jodconverter nem találja autómatikusan, az abszolút elérési útvonal szükséges
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Titkosítás típusa</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Titkosító osztály</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Adja meg a titkosító osztály nevét (class). NE VÁLTOZTASSA, HA NEM BIZTOS BENNE!</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Az alapértelmezetten beállított kódolás megfelel a 
+		PHP-MD5 kódolónak, vagy BSD-Stílusú kódoláshoz használja a:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		további kódolási/titkosítási eljárásokról itt olvashat bővebben: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Egyedi titkosítási mechanizmus </a> Ha a későbbiekben módosítja ezt a beállítást,
+		az előzőleg létrehozott adatok elérhetetlenné válnak, ami működési hibát okozhat a régebbi munkamenetek elérésében 
+		(pl. jelszó, hash kezelés).
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Red5SIP Beállítása</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">SIP engedélyezése</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Red5SIP integráció engedélyezése</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP szoba prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Telefonszám prefixum beállítása a konferencia szobához</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP kiterjesztés leírása</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Leírás az Asterix konfigurálásához</entry>
+
+	<entry key="install.wizard.install.desc">Kattintson a "Befejezés" gombra a telepítés folytatásához</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Belépés az alkalmazásba</entry>
+	<entry key="install.wizard.congrats.port">Ha a Red5 szervert más porton, domainen, vagy más beállításokkal használja</entry>
+	<entry key="install.wizard.congrats.config">változtassa meg a kliens szükséges konfigurációit</entry>
+	<entry key="install.wizard.congrats.mail">Levelező lista</entry>
+	<entry key="install.wizard.congrats.commercial">Néhány cég, akik üzleti támogatást nyújthatnak Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml
new file mode 100644
index 0000000..87c9e6c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferensi</entry>
+  <entry key="2">Rapat</entry>
+  <entry key="3">Event</entry>
+  <entry key="4">Seting</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrasi</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Rekam</entry>
+  <entry key="9">File tidak tersedia</entry>
+  <entry key="10">Rekaman dr dosen</entry>
+  <entry key="11">Pengguna terkoneksi:</entry>
+  <entry key="12">Mulai Konferensi</entry>
+  <entry key="13">Nama Saya</entry>
+  <entry key="14">Video Konferensi</entry>
+  <entry key="15">Simpan File</entry>
+  <entry key="16">Panggil Ulang</entry>
+  <entry key="17">Ke File Utama</entry>
+  <entry key="18">Poling Baru</entry>
+  <entry key="19">Poling Baru untuk Konferensi.</entry>
+  <entry key="20">Pertanyaan:</entry>
+  <entry key="21">Model Poling:</entry>
+  <entry key="22">Buat</entry>
+  <entry key="23">Catatan: Setiap user terkoneksi akan menerima pesan dangan poling baru.</entry>
+  <entry key="24">Buat Poling</entry>
+  <entry key="25">Batal</entry>
+  <entry key="26">Ya/Tidak</entry>
+  <entry key="27">Angka dari 1-10</entry>
+  <entry key="28">Poling</entry>
+  <entry key="29">Hanya moderator yang bisa membuat pertanyaan</entry>
+  <entry key="30">Pilihan anda udah tercatat.</entry>
+  <entry key="31">Anda telah melakukan pilihan pada Poling ini.</entry>
+  <entry key="32">Pilih !</entry>
+  <entry key="33">Respon Anda:</entry>
+  <entry key="34">Ya</entry>
+  <entry key="35">Tidak</entry>
+  <entry key="36">Yang diinginkan:</entry>
+  <entry key="37">Hasil Poling</entry>
+  <entry key="38">Pertanyaan:</entry>
+  <entry key="39">Hasil:</entry>
+  <entry key="40">Jawaban:</entry>
+  <entry key="41">Belum ada poling yang dimulai.</entry>
+  <entry key="42">Pilih!</entry>
+  <entry key="43">Rapat (4 kursi maksimum)</entry>
+  <entry key="44">Konferensi (50 kursi maksimum)</entry>
+  <entry key="45">Tipe</entry>
+  <entry key="46">Kursi lainnya</entry>
+  <entry key="47">Sudah dipilih</entry>
+  <entry key="48">masuk</entry>
+  <entry key="49">Moderator meninggalkan rapat.</entry>
+  <entry key="50">Sistem informasi</entry>
+  <entry key="51">Pilih perangkat</entry>
+  <entry key="52">Pilih webcam:</entry>
+  <entry key="53">Pilih Mic:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">batal</entry>
+  <entry key="56">Anda harus konek kembali.</entry>
+  <entry key="57">Edit seting.</entry>
+  <entry key="58">Kursus:</entry>
+  <entry key="59">Bahasa:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">batal</entry>
+  <entry key="62">hapus whiteboard</entry>
+  <entry key="63">Anda ingin whitboard di bersihkan sebelum gambar baru ditambahkan?</entry>
+  <entry key="64">Jangan bertanya lagi</entry>
+  <entry key="65">Tidak</entry>
+  <entry key="66">Edit seting</entry>
+  <entry key="67">Diperlukan Konfirmasi sebelum membersihkan whiteboard.</entry>
+  <entry key="68">Info Pengguna</entry>
+  <entry key="69">bersihkan Area Gambar</entry>
+  <entry key="70">Batal</entry>
+  <entry key="71">Ulangi</entry>
+  <entry key="72">Pilih Objek</entry>
+  <entry key="73">Tulisan</entry>
+  <entry key="74">Gambar</entry>
+  <entry key="75">Gambar garis</entry>
+  <entry key="76">Gambar garis bawah</entry>
+  <entry key="77">Kotak</entry>
+  <entry key="78">Lonjong</entry>
+  <entry key="79">Panah</entry>
+  <entry key="80">Hapus item yg dipilih</entry>
+  <entry key="81">Tambahkan ke moderator</entry>
+  <entry key="82">Tambah</entry>
+  <entry key="83">batal</entry>
+  <entry key="84">Menjadi Moderator</entry>
+  <entry key="85">tutp</entry>
+  <entry key="86">cetak miring</entry>
+  <entry key="87">cetak tebal</entry>
+  <entry key="88">TUNGGU</entry>
+  <entry key="89">Peserta menginginkan masuk menjadi moderator:</entry>
+  <entry key="90">diterima</entry>
+  <entry key="91">ditolak</entry>
+  <entry key="92">batal</entry>
+  <entry key="93">Kirimkan permintaan ke beberapa peserta berikut</entry>
+  <entry key="94">Diterima</entry>
+  <entry key="95">Ditolak</entry>
+  <entry key="96">Ganti Moderator</entry>
+  <entry key="97">Anda bukan moderator dalam kursus ini!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Kelas penuh, coba lagi nanti.</entry>
+  <entry key="100">Bentuk Lonjong</entry>
+  <entry key="101">tutup</entry>
+  <entry key="102">entri data salah</entry>
+  <entry key="103">4 karakter atau lebih; hurup kapital semua!</entry>
+  <entry key="104">userpass harus lebih dari 4 karakter</entry>
+  <entry key="105">username sudah terpakai</entry>
+  <entry key="106">email sudah diregistrasi</entry>
+  <entry key="107">System error silahkan kontak Admin</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">User:</entry>
+  <entry key="110">Pass:</entry>
+  <entry key="111">Bahasa</entry>
+  <entry key="112">Masuk</entry>
+  <entry key="113">Mendaftar</entry>
+  <entry key="114">User:</entry>
+  <entry key="115">Pass:</entry>
+  <entry key="116">Ulangi Pass:</entry>
+  <entry key="117">Nama Depan:</entry>
+  <entry key="118">Nama Belakang:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Negara:</entry>
+  <entry key="121">Daftar</entry>
+  <entry key="122">Batal</entry>
+  <entry key="123">Bukan anggota?</entry>
+  <entry key="124">Halaman Utama</entry>
+  <entry key="125">User</entry>
+  <entry key="126">Group</entry>
+  <entry key="127">Organisasi</entry>
+  <entry key="128">Ruang-Rapat</entry>
+  <entry key="129">publik</entry>
+  <entry key="130">organisasi</entry>
+  <entry key="131">masuk</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Ulangi Password</entry>
+  <entry key="135">Nama Depan</entry>
+  <entry key="136">Nama Belakang</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Ulang tahun</entry>
+  <entry key="139">Jalan/No</entry>
+  <entry key="140">Kodepos/Kota</entry>
+  <entry key="141">Negara</entry>
+  <entry key="142">Informasi alamat</entry>
+  <entry key="143">Data User</entry>
+  <entry key="144">simpan</entry>
+  <entry key="145">Simpan</entry>
+  <entry key="146">ID USER</entry>
+  <entry key="147">login</entry>
+  <entry key="148">nama depan</entry>
+  <entry key="149">nama belakang</entry>
+  <entry key="150">selanjutnya</entry>
+  <entry key="151">sebelumnya</entry>
+  <entry key="152">hapus rekot</entry>
+  <entry key="153">batal</entry>
+  <entry key="154">hapus</entry>
+  <entry key="155">rekot baru</entry>
+  <entry key="156">panggil ulang</entry>
+  <entry key="157">hapus rekot</entry>
+  <entry key="158">status</entry>
+  <entry key="159">abaikan</entry>
+  <entry key="160">aktifkan</entry>
+  <entry key="161">organisasi</entry>
+  <entry key="162">kalender</entry>
+  <entry key="163">tutup</entry>
+  <entry key="164">ID Organisasi</entry>
+  <entry key="165">nama</entry>
+  <entry key="166">user</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">admin</entry>
+  <entry key="169">level user</entry>
+  <entry key="170">organisasi</entry>
+  <entry key="171">nama</entry>
+  <entry key="172">tambahkan organisasi</entry>
+  <entry key="173">tambahkan organisasi</entry>
+  <entry key="174">batal</entry>
+  <entry key="175">tambah</entry>
+  <entry key="176">hapus organisasi</entry>
+  <entry key="177">user</entry>
+  <entry key="178">tambah user</entry>
+  <entry key="179">hapus user</entry>
+  <entry key="180">tambah user</entry>
+  <entry key="181">cari user</entry>
+  <entry key="182">cari</entry>
+  <entry key="183">user</entry>
+  <entry key="184">organisasi</entry>
+  <entry key="185">masuk</entry>
+  <entry key="186">ruang konferensi</entry>
+  <entry key="187">Ruang Konferensi</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nama</entry>
+  <entry key="190">publik</entry>
+  <entry key="191">organisasi</entry>
+  <entry key="192">Ruang Rapat</entry>
+  <entry key="193">nama</entry>
+  <entry key="194">tipe</entry>
+  <entry key="195">publik</entry>
+  <entry key="196">komentar</entry>
+  <entry key="197">simpan</entry>
+  <entry key="198">panggil</entry>
+  <entry key="199">simpan sebagai</entry>
+  <entry key="200">nama file</entry>
+  <entry key="201">nama file</entry>
+  <entry key="202">batal</entry>
+  <entry key="203">simpan</entry>
+  <entry key="204">salah</entry>
+  <entry key="205">panggil</entry>
+  <entry key="206">objek terpanggil</entry>
+  <entry key="207">sinkronasi klien, harap menunggu:</entry>
+  <entry key="208">Panggil data gambar</entry>
+  <entry key="209">sinkronasi klien, harap menunggu:</entry>
+  <entry key="210">bersihkan area gambar</entry>
+  <entry key="211">area gambar di bersihkan, semua data akan hilang</entry>
+  <entry key="212">Konfirmasi sebelum panggil file</entry>
+  <entry key="213">Kirim undangan</entry>
+  <entry key="214">Kirim undangan</entry>
+  <entry key="215">Judul</entry>
+  <entry key="216">Penerima</entry>
+  <entry key="217">Pesan</entry>
+  <entry key="218">Kirim</entry>
+  <entry key="219">Batal</entry>
+  <entry key="220">batal</entry>
+  <entry key="221">Data User</entry>
+  <entry key="222">Nama panggilan anda untuk konferensi ini</entry>
+  <entry key="223">Panggilan</entry>
+  <entry key="224">nama depan</entry>
+  <entry key="225">nama belakang</entry>
+  <entry key="226">email</entry>
+  <entry key="227">bahasa</entry>
+  <entry key="228">masuk</entry>
+  <entry key="229">Panggil</entry>
+  <entry key="230">Data sedang dipanggil, tunggu!</entry>
+  <entry key="231">Password salah</entry>
+  <entry key="232">Silahkan masukan dua password yang sama, minimal 6 karakter</entry>
+  <entry key="233">Email salah</entry>
+  <entry key="234">Alamat email yang anda masukan salah</entry>
+  <entry key="235">Registrasi Komplet</entry>
+  <entry key="236">Akun anda udah dibuat, silahkan login sekarang.</entry>
+  <entry key="237">Anda tidak dapat melakukan sharing layar anda, seseorang sedang melakukannya.</entry>
+  <entry key="238">Tidak diperbolekan melakukan Sharing</entry>
+  <entry key="239">Sharing layar anda</entry>
+  <entry key="240">Bandwidth kurang: Anda tidak dapat melakukan sinkronasi. Jika peringatan ini terjadi terus menerus, silahkan meminta moderator untuk menurunkan tingkat kualitas.</entry>
+  <entry key="241">Layar dari:</entry>
+  <entry key="242">Gambar</entry>
+  <entry key="243">Dokumen</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">File</entry>
+  <entry key="246">Anggota</entry>
+  <entry key="247">Ambil dokumen asli</entry>
+  <entry key="248">Ambil dokumen pdf</entry>
+  <entry key="249">Panggil presentasi ke dalam whiteboard</entry>
+  <entry key="250">Konfigurasi</entry>
+  <entry key="251">Drag Objek ini</entry>
+  <entry key="252">Atur ulang Objek ini</entry>
+  <entry key="253">%</entry>
+  <entry key="254">dari</entry>
+  <entry key="255">Ke halaman utama</entry>
+  <entry key="256">Ke halaman sebelumnya</entry>
+  <entry key="257">Ke halaman selanjutnya</entry>
+  <entry key="258">Ke halaman terakhir</entry>
+  <entry key="259">Kecilkan --</entry>
+  <entry key="260">Besarkan ++</entry>
+  <entry key="261">Tuan.</entry>
+  <entry key="262">Nyonya.</entry>
+  <entry key="263">Konfigurasi</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kunci</entry>
+  <entry key="266">Konfigurasi</entry>
+  <entry key="267">Kunci</entry>
+  <entry key="268">update terakir</entry>
+  <entry key="269">diupdate oleh</entry>
+  <entry key="270">komentar</entry>
+  <entry key="271">kunci</entry>
+  <entry key="272">dari</entry>
+  <entry key="273">User</entry>
+  <entry key="274">hapus user dari organisasi</entry>
+  <entry key="275">hapus</entry>
+  <entry key="276">User ini udah teregistrasi dalam organisasi ini.</entry>
+  <entry key="277">Berita</entry>
+  <entry key="278">Jalan singkat</entry>
+  <entry key="279">ke Konferensi</entry>
+  <entry key="280">ke Auditorium</entry>
+  <entry key="281">Support dan Bantuan</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">laporkan bug!</entry>
+  <entry key="285">Selebihnya</entry>
+  <entry key="286">Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Ingat saya</entry>
+  <entry key="289">Konten</entry>
+  <entry key="290">Home Page saya</entry>
+  <entry key="291">Jadwal Rapat</entry>
+  <entry key="292">Jadwal Acara</entry>
+  <entry key="293">Rapat Umum</entry>
+  <entry key="294">Rapat Tertutup</entry>
+  <entry key="295">Acara Umum</entry>
+  <entry key="296">Acara Khusus</entry>
+  <entry key="297">Konten Publik</entry>
+  <entry key="298">Konten Khusus</entry>
+  <entry key="299">Konten Personal</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderasi</entry>
+  <entry key="302">Tambahkan ke moderasi</entry>
+  <entry key="303">Poling</entry>
+  <entry key="304">Pilih file</entry>
+  <entry key="305">Seting</entry>
+  <entry key="306">Seting Kamera dan Mic</entry>
+  <entry key="307">Seting Whiteboard</entry>
+  <entry key="308">Keluar</entry>
+  <entry key="309">Kembali ke ruangan</entry>
+  <entry key="310">Keluar</entry>
+  <entry key="311">Lupa password?</entry>
+  <entry key="312">Ubah password</entry>
+  <entry key="313">Lewat Email</entry>
+  <entry key="314">Lewat Login</entry>
+  <entry key="315">Email Anda</entry>
+  <entry key="316">Login Anda</entry>
+  <entry key="317">Kirim email dengan alamat ubah password</entry>
+  <entry key="318">Email tidak ditemukan. Pastikan email tersebut anda gunakan saat membuat akun.</entry>
+  <entry key="319">Silahkan masukan alamat email yang lain atau Username</entry>
+  <entry key="320">Tidak ada User terkoneksi dengan Username ini</entry>
+  <entry key="321">Email yang berisi informasi alamat baru telah dikirim ke email anda, silahkan cek email anda. Jika anda belum mendapatkan email, pastikan pada baigan seting spaming pada konfigurasi email anda dan kirimkan email lagi.</entry>
+  <entry key="322">Salah</entry>
+  <entry key="323">Pesan</entry>
+  <entry key="324">Hash tidak valid. User tidak ditemukan.</entry>
+  <entry key="325">Isi Ulang Password Anda</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">ubah Password</entry>
+  <entry key="328">Password baru</entry>
+  <entry key="329">Tulis lagi Password anda</entry>
+  <entry key="330">Pasword berbeda, silahkan ulangi lagi.</entry>
+  <entry key="331">4 karakter atau lebih, huruf kapital bermasalah!</entry>
+  <entry key="332">Password sudah di seting. Anda dapat login sekarang.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Kesalahan belum terlacak. Silahkan laporkan ke Team Servis.</entry>
+  <entry key="335">Username tidak ditemukan</entry>
+  <entry key="336">Password tidak valid</entry>
+  <entry key="337">Sukses keluar dari sistem</entry>
+  <entry key="338">Halaman depan registrasi dimatikan.</entry>
+  <entry key="339">EMail tidak valid</entry>
+  <entry key="340">Duplikasi nama file, silahkan menggunakan nama lain</entry>
+  <entry key="341">nama file terlalu pendek</entry>
+  <entry key="342">Alamat tidak dapat disimpan</entry>
+  <entry key="343">User telah ditambahkan tetapi anda harus memasukan kedalam salah satu organisasi, jika tidak akan mengakibatkan gagal login.</entry>
+  <entry key="344">Rekot baru</entry>
+  <entry key="345">Tidak ditemukan Kolom dengan ID kolom ini.</entry>
+  <entry key="346">Tidak ditemukan Label untuk kolom tersebut.</entry>
+  <entry key="347">Dibutuhkan Autorisasi sebagai Admin</entry>
+  <entry key="348">Editor Bahasa</entry>
+  <entry key="349">Bahasa</entry>
+  <entry key="350">ID Label</entry>
+  <entry key="351">Nama Label</entry>
+  <entry key="352">Nilai</entry>
+  <entry key="353">Nilai Kolom</entry>
+  <entry key="354">Nama Label</entry>
+  <entry key="355">Nilai Label</entry>
+  <entry key="356">ID Label</entry>
+  <entry key="357">Anda hanya bisa hapus label bukan kolom! Anda tidak dapat menghapus kolom, mungkin ada label didalam bahasa yang lain.</entry>
+  <entry key="358">ID Label tidak valid. Kolom FieldLanguagesvalues_Id tidak dapat ditemukan dalam database.</entry>
+  <entry key="359">Anda tidak dapat menghapus kolom ini. Anda hanya dapat menghapus label bukan kolom. Tidak ada label yang dipanggil sekarang, Mungkin belum dipiliah salah satu kolom atau tidak ada definisi label untuk kolom yang dimaksud pada pilihan bahasa ini.</entry>
+  <entry key="360">expor</entry>
+  <entry key="361">Anda harus keluar dahulu untuk melihat perubahan.</entry>
+  <entry key="362">Tambah pilihan bahasa</entry>
+  <entry key="363">hapus pilihan bahasa</entry>
+  <entry key="364">Tambah pilihan bahasa</entry>
+  <entry key="365">Nama</entry>
+  <entry key="366">Tambah pilihan bahasa</entry>
+  <entry key="367">Buat Arsip</entry>
+  <entry key="368">awal</entry>
+  <entry key="369">sebelumnya</entry>
+  <entry key="370">selanjutnya</entry>
+  <entry key="371">akhir</entry>
+  <entry key="372">user yang berbicara (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">mode suara nyala/mati</entry>
+  <entry key="374">Sistem</entry>
+  <entry key="375">Setingan Anda</entry>
+  <entry key="376">Hola,</entry>
+  <entry key="377">Edit profil anda</entry>
+  <entry key="378">Pesan baru:</entry>
+  <entry key="379">Kirim Gambar baru</entry>
+  <entry key="380">Expor - Data User</entry>
+  <entry key="381">Semua organisasi harus sudah tersedia!</entry>
+  <entry key="382">mulai expor</entry>
+  <entry key="383">Berdasarkan organisasi</entry>
+  <entry key="384">mulai expor</entry>
+  <entry key="385">Ambil - Data User</entry>
+  <entry key="386">Pilih users.xml</entry>
+  <entry key="387">ambil</entry>
+  <entry key="388">Expor dalam XML - File ini dapat di gunakan untuk : - Kontribusi kedalam project - Kirim ke sistem lain - Arsip - Opsi pilihan - Simpan ke dalam direktori bahasa - direktori untuk instalasi berikutnya</entry>
+  <entry key="389">Pilih file bahasa yang akan di ambil. Pilih bahasa yang benar dari form pilihan! Apapun nama filenya, yang dipilih yang akan diambil kedalam pilihan bahasa ini!</entry>
+  <entry key="390">Ambil - pilih file</entry>
+  <entry key="391">Simpan sebagai</entry>
+  <entry key="392">Nama:</entry>
+  <entry key="393">komentar:</entry>
+  <entry key="394">simpan</entry>
+  <entry key="395">Proses rekam</entry>
+  <entry key="396">Proses rekam Tampilan</entry>
+  <entry key="397">Proses rekam dari Ruangan umum atau khusus</entry>
+  <entry key="398">Users :</entry>
+  <entry key="399">Terkoneksi:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users dalam ruangan ini:</entry>
+  <entry key="402">panggil ulang</entry>
+  <entry key="403">Ruangan ini penuh, silahkan mencoba lagi dalam beberapa menit.</entry>
+  <entry key="404">Klik pada Judul ruangan untuk melihat detilnya</entry>
+  <entry key="405">Chat dengan user dalam ruangan ini:</entry>
+  <entry key="406">Ruangan:</entry>
+  <entry key="407">Users dalam ruangan ini::</entry>
+  <entry key="408">mulai sejak:</entry>
+  <entry key="409">Putar Rekaman</entry>
+  <entry key="410">Durasi:</entry>
+  <entry key="411">Tanggal:</entry>
+  <entry key="412">Modus Rekam! Anda tidak dapat melakukan perubahan. Ini adalah file hasil rekaman!</entry>
+  <entry key="413">Putar hasil rekam</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Mulai Rekam</entry>
+  <entry key="416">Stop Rekam</entry>
+  <entry key="417">Merekam:</entry>
+  <entry key="418">Seseorang sedang merekam sekarang :</entry>
+  <entry key="419">Sedang Rekam! Oleh:</entry>
+  <entry key="420">Batal</entry>
+  <entry key="421">Proses rekam dibatalkan dan tidak disimpan.</entry>
+  <entry key="422">lanjut</entry>
+  <entry key="423">Tutup jendela ini dan lanjut rekam</entry>
+  <entry key="424">Ubah warnagaris</entry>
+  <entry key="425">Pilih Warna</entry>
+  <entry key="426">Aktipkan / Matikan warnagaris</entry>
+  <entry key="427">Ubah isianwarna</entry>
+  <entry key="428">Aktipkan / Matikan isianwarna</entry>
+  <entry key="429">Ubah besaran garis</entry>
+  <entry key="430">tutup</entry>
+  <entry key="431">ubah ukuran huruf</entry>
+  <entry key="432">Hapus Rekaman</entry>
+  <entry key="433">Tamu</entry>
+  <entry key="434">Oleh:</entry>
+  <entry key="435">Nama</entry>
+  <entry key="436">Ruang</entry>
+  <entry key="437">Tanggal</entry>
+  <entry key="438">batal</entry>
+  <entry key="439">mulai</entry>
+  <entry key="440">Nama</entry>
+  <entry key="441">Tanggal</entry>
+  <entry key="442">Hapus Log chat di Server</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">kirim pesan</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Pilih Perangkat</entry>
+  <entry key="448">Audio dan Video</entry>
+  <entry key="449">Hanya Audio</entry>
+  <entry key="450">Hanya Video</entry>
+  <entry key="451">Tidak ada Audio/Video (gambar saja)</entry>
+  <entry key="452">Tidak ada Audio/Video dari PC anda, hanya akan menampilkan gambar anda dari profile. Kemungkinan anda mengalami gangguan koneksi internet atau koneksi internet anda lambat.</entry>
+  <entry key="453">Sn</entry>
+  <entry key="454">Sl</entry>
+  <entry key="455">Rb</entry>
+  <entry key="456">Km</entry>
+  <entry key="457">Jm</entry>
+  <entry key="458">Sb</entry>
+  <entry key="459">Mg</entry>
+  <entry key="460">Senin</entry>
+  <entry key="461">Selasa</entry>
+  <entry key="462">Rabu</entry>
+  <entry key="463">Kamis</entry>
+  <entry key="464">Jumat</entry>
+  <entry key="465">Sabtu</entry>
+  <entry key="466">Minggu</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Kelendar mingguan</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Pebruari</entry>
+  <entry key="471">Maret</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mei</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Agustus</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">Desember</entry>
+  <entry key="481">Kalendar</entry>
+  <entry key="482">Peserta</entry>
+  <entry key="483">Tampilkan Setingan Layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Lebar | Tinggi</entry>
+  <entry key="486">Jendela Video</entry>
+  <entry key="487">Jendela Moderation</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Jendela Whiteboard</entry>
+  <entry key="490">Fungsikan</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Lebar | Tinggi</entry>
+  <entry key="493">Jendela Files,Chat,Partizipants</entry>
+  <entry key="494">Fungsikan</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Lebar | Tinggi</entry>
+  <entry key="497">Moderator meninggalkan Ruang. Tidak ada moderator sekarang. Anda dapat menjadi moderator atau menunggu sebentar.</entry>
+  <entry key="498">Tidak ada moderator sekarang, tetapi ada beberapa peserta. Anda harus menjadi moderator atau tunggu.</entry>
+  <entry key="499">Komentar tentang {0}</entry>
+  <entry key="500">Undangan - {0}</entry>
+  <entry key="501">Pesan dari peserta:</entry>
+  <entry key="502">Pesan:</entry>
+  <entry key="503">Klik link berikut untuk bergabung dalam rapat :</entry>
+  <entry key="504">Klik disini untuk masuk ke rapat</entry>
+  <entry key="505">Jika anda mengalami kesulitan, silahkan copy dan paste link berikut ke browser :</entry>
+  <entry key="506">Daptar ke {0}</entry>
+  <entry key="507">Data anda:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">Tim - {0}</entry>
+  <entry key="512">Daftar ke {0}</entry>
+  <entry key="513">Seting ulang password -{0}</entry>
+  <entry key="514">Klik link berikut untuk menseting ulang password :</entry>
+  <entry key="515">Klik disini untuk isi password baru</entry>
+  <entry key="516">ika anda mengalami kesulitan dengan link, silahkan copy dan paste ke browser :</entry>
+  <entry key="517">Seting ulang password {0}</entry>
+  <entry key="518">Silahkan isi tanggal dengan benar, contoh 24-12-2001 (dd-mm-yyyy)</entry>
+  <entry key="519">Silahkan isi alamat email dengan benar, contoh nama@alamat.com</entry>
+  <entry key="520">Silahkan masukan angka pecahan, contoh 1,05</entry>
+  <entry key="521">Silahkan masukan angka, contoh 100</entry>
+  <entry key="522">Silahkan masukan nomor telepon, contoh +62 274 486883</entry>
+  <entry key="523">Silahkan masukan format jam, contoh 12:24 (hh:mm)</entry>
+  <entry key="524">Terproteksi dengan Password</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Periode Valid</entry>
+  <entry key="527">Terakhir</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Sekali waktu</entry>
+  <entry key="530">Valid dari :</entry>
+  <entry key="531">Valid sampai dengan:</entry>
+  <entry key="532">Undangan ke {0}</entry>
+  <entry key="533">Tidak ada Undangan untu Kode undangan ini!</entry>
+  <entry key="534">Undangan sudah terpakai, tidak bisa dipergunakan lagi.</entry>
+  <entry key="535">Kode - Undangan tidak valid.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Periksa Password</entry>
+  <entry key="538">Password salah!</entry>
+  <entry key="539">audio_video</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml
new file mode 100644
index 0000000..fda8c8e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferenza</entry>
+  <entry key="2">Riunione</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Impostazioni</entry>
+  <entry key="5">Utente</entry>
+  <entry key="6">Amministrazione</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Registra</entry>
+  <entry key="9">Nessun file disponibile</entry>
+  <entry key="10">Solo il docente</entry>
+  <entry key="11">Utenti connessi:</entry>
+  <entry key="12">Inizia una conferenza</entry>
+  <entry key="13">Il mio nome</entry>
+  <entry key="14">Video Conferenza</entry>
+  <entry key="15">Carica presentazione</entry>
+  <entry key="16">Aggiorna la lista</entry>
+  <entry key="17">All'archivio principale</entry>
+  <entry key="18">Nuovo sondaggio</entry>
+  <entry key="19">Un nuovo sondaggio per la conferenza.</entry>
+  <entry key="20">Domanda:</entry>
+  <entry key="21">Tipo di sondaggio:</entry>
+  <entry key="22">Crea</entry>
+  <entry key="23">Informazione: Ogni utente connesso riceve un messaggio con il nuovo sondaggio.</entry>
+  <entry key="24">Crea un sondaggio</entry>
+  <entry key="25">Cancella</entry>
+  <entry key="26">Si/No</entry>
+  <entry key="27">Numerico 1-10</entry>
+  <entry key="28">Sondaggio</entry>
+  <entry key="29">Devi essere moderatore per creare una domanda</entry>
+  <entry key="30">Il tuo voto è stato registrato.</entry>
+  <entry key="31">Hai già votato per questo sondaggio.</entry>
+  <entry key="32">Vota!</entry>
+  <entry key="33">La tua risposta:</entry>
+  <entry key="34">Si</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Rispondi alle domande:</entry>
+  <entry key="37">Risultati del sondaggio</entry>
+  <entry key="38">Domanda:</entry>
+  <entry key="39">risultati:</entry>
+  <entry key="40">Risposte:</entry>
+  <entry key="41">Nessun sondaggio è attivo.</entry>
+  <entry key="42">Vota!</entry>
+  <entry key="43">Riunione</entry>
+  <entry key="44">Auditorium (massimo 200 partecipanti)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Altri partecipanti</entry>
+  <entry key="47">Già scelto</entry>
+  <entry key="48">entra</entry>
+  <entry key="49">Il moderatore ha lasciato la riunione.</entry>
+  <entry key="50">Informazioni di sistema</entry>
+  <entry key="51">Scegli il dispositivo</entry>
+  <entry key="52">Scegli la webcam:</entry>
+  <entry key="53">Scegli il microfono:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">annulla</entry>
+  <entry key="56">Devi riconnetterti.</entry>
+  <entry key="57">Modifica le impostazioni.</entry>
+  <entry key="58">Corso:</entry>
+  <entry key="59">Lingua:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">annulla</entry>
+  <entry key="62">Cancella la lavagna</entry>
+  <entry key="63">Vuoi che la lavagna sia pulita prima di aggiungere una nuova immagine?</entry>
+  <entry key="64">Non chiedere ancora</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Modifica impostazioni</entry>
+  <entry key="67">Richiesta di conferma prima di pulire la lavagna.</entry>
+  <entry key="68">Informazioni sull'utente</entry>
+  <entry key="69">Pulisci la lavagna</entry>
+  <entry key="70">Annulla le modifiche</entry>
+  <entry key="71">Ripristina le modifiche</entry>
+  <entry key="72">Seleziona un'oggetto</entry>
+  <entry key="73">Testo</entry>
+  <entry key="74">Disegna</entry>
+  <entry key="75">Disegna una linea</entry>
+  <entry key="76">Evidenziatore</entry>
+  <entry key="77">Rettangolo</entry>
+  <entry key="78">Ellisse</entry>
+  <entry key="79">Freccia</entry>
+  <entry key="80">Cancella l'oggetto selezionato</entry>
+  <entry key="81">Sottoponi al moderatore</entry>
+  <entry key="82">applica</entry>
+  <entry key="83">cancella</entry>
+  <entry key="84">Diventa moderatore</entry>
+  <entry key="85">chiudi</entry>
+  <entry key="86">corsivo</entry>
+  <entry key="87">grassetto</entry>
+  <entry key="88">ATTENDERE</entry>
+  <entry key="89">Un utente vuole sottoporre al moderatore:</entry>
+  <entry key="90">accetta</entry>
+  <entry key="91">rifiuta</entry>
+  <entry key="92">cancella</entry>
+  <entry key="93">Invia la richiesta agli utenti seguenti</entry>
+  <entry key="94">Accettata</entry>
+  <entry key="95">Rifiutata</entry>
+  <entry key="96">Cambia moderatore</entry>
+  <entry key="97">Non sei il moderatore per questo corso!</entry>
+  <entry key="98">Moderatore:</entry>
+  <entry key="99">La stanza è piena. Spiacenti riprovare più tardi.</entry>
+  <entry key="100">Ellisse</entry>
+  <entry key="101">chiudi</entry>
+  <entry key="102">errori nei dati inseriti</entry>
+  <entry key="103">Il nome utente deve essere di almeno 4 caratteri</entry>
+  <entry key="104">la password deve essere di almeno 4 caratteri</entry>
+  <entry key="105">Il nome utente è già in uso</entry>
+  <entry key="106">L'indirizzo email è già stato usato</entry>
+  <entry key="107">Errore di sistema, contattare l'amministratore</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Nome utente:</entry>
+  <entry key="110">Password:</entry>
+  <entry key="111">Lingua</entry>
+  <entry key="112">Entra</entry>
+  <entry key="113">Iscriviti</entry>
+  <entry key="114">Nome utente:</entry>
+  <entry key="115">Password:</entry>
+  <entry key="116">Riscrivere:</entry>
+  <entry key="117">Nome:</entry>
+  <entry key="118">Cognome:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Stato:</entry>
+  <entry key="121">Registrati</entry>
+  <entry key="122">Annulla</entry>
+  <entry key="123">Registrati</entry>
+  <entry key="124">home</entry>
+  <entry key="125">Utenti</entry>
+  <entry key="126">Gruppi</entry>
+  <entry key="127">Organizzazioni</entry>
+  <entry key="128">Stanze delle conferenze</entry>
+  <entry key="129">pubblico</entry>
+  <entry key="130">organizzazione</entry>
+  <entry key="131">entra</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Riscrivere</entry>
+  <entry key="135">Nome</entry>
+  <entry key="136">Cognome</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Data di nascita</entry>
+  <entry key="139">Indirizzo/civico</entry>
+  <entry key="140">C.A.P/Città</entry>
+  <entry key="141">Stato</entry>
+  <entry key="142">Informazioni</entry>
+  <entry key="143">Dati utente</entry>
+  <entry key="144">salva</entry>
+  <entry key="145">salva</entry>
+  <entry key="146">ID-Utente</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">nome</entry>
+  <entry key="149">cognome</entry>
+  <entry key="150">mostra prossimo</entry>
+  <entry key="151">mostra precedente</entry>
+  <entry key="152">Elimina il record</entry>
+  <entry key="153">annulla</entry>
+  <entry key="154">elimina</entry>
+  <entry key="155">nuovo record</entry>
+  <entry key="156">aggiorna record</entry>
+  <entry key="157">elimina record</entry>
+  <entry key="158">stato</entry>
+  <entry key="159">disabilitato</entry>
+  <entry key="160">abilitato</entry>
+  <entry key="161">organizzazioni</entry>
+  <entry key="162">calendario</entry>
+  <entry key="163">chiudi</entry>
+  <entry key="164">ID-organizzazione</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">utente</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">amministratore</entry>
+  <entry key="169">livello utente</entry>
+  <entry key="170">organizzazione</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">aggiungi un'organizzazione</entry>
+  <entry key="173">aggiungi un'organizzazione</entry>
+  <entry key="174">annulla</entry>
+  <entry key="175">aggiungi</entry>
+  <entry key="176">rimuovi l'organizzazione</entry>
+  <entry key="177">utente</entry>
+  <entry key="178">aggiungi un'utente</entry>
+  <entry key="179">elimina l'utente</entry>
+  <entry key="180">aggiungi l'utente</entry>
+  <entry key="181">cerca un utente</entry>
+  <entry key="182">cerca</entry>
+  <entry key="183">utente</entry>
+  <entry key="184">organizzazione</entry>
+  <entry key="185">entra</entry>
+  <entry key="186">stanze delle conferenze</entry>
+  <entry key="187">stanze delle conferenze</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">pubblico</entry>
+  <entry key="191">organizzazioni</entry>
+  <entry key="192">stanze delle conferenze</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">pubblico</entry>
+  <entry key="196">commento</entry>
+  <entry key="197">salva</entry>
+  <entry key="198">carica</entry>
+  <entry key="199">salva con nome</entry>
+  <entry key="200">nome del file</entry>
+  <entry key="201">nome del file</entry>
+  <entry key="202">annulla</entry>
+  <entry key="203">salva</entry>
+  <entry key="204">errore</entry>
+  <entry key="205">caricamento</entry>
+  <entry key="206">oggetto caricato</entry>
+  <entry key="207">sincronizzazione con i client, attendere:</entry>
+  <entry key="208">Caricamento delle immagini</entry>
+  <entry key="209">sincronizzazione con i client, attendere:</entry>
+  <entry key="210">pulisci la lavagna</entry>
+  <entry key="211">pulisci la lavagna, tutte le informazioni su di essa saranno perse</entry>
+  <entry key="212">Conferma prima di caricare il file</entry>
+  <entry key="213">Invia un invito</entry>
+  <entry key="214">Invia un invito</entry>
+  <entry key="215">Soggetto</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Messaggio</entry>
+  <entry key="218">Invia</entry>
+  <entry key="219">annulla</entry>
+  <entry key="220">invia</entry>
+  <entry key="221">dati utente</entry>
+  <entry key="222">Il tuo appellativo per la conferenza</entry>
+  <entry key="223">appellativo</entry>
+  <entry key="224">nome</entry>
+  <entry key="225">cognome</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">lingua</entry>
+  <entry key="228">entra</entry>
+  <entry key="229">Caricamento</entry>
+  <entry key="230">Caricamento dati, attendere prego!</entry>
+  <entry key="231">Password sbagliata</entry>
+  <entry key="232">Inserisci due password identiche di minimo 6 caratteri</entry>
+  <entry key="233">Mail sbagliata</entry>
+  <entry key="234">Hai inserito una mail non valida</entry>
+  <entry key="235">Registrazione completata</entry>
+  <entry key="236">Il tuo profilo è stato creato correttamente. Puoi effettuare il login.</entry>
+  <entry key="237">Non è possibile condividere il tuo desktop in questo momento. Potrebbe essere in condivisione con qualcun'altro</entry>
+  <entry key="238">Condivisione non permessa</entry>
+  <entry key="239">Condivisione desktop</entry>
+  <entry key="240">larghezza di banda insufficiente: Non sei abilitato a sincronizzare le immagini. i Frames saranno lasciati. Se visualizzi questo messaggio chiedi al moderatore di abbassare la qualità.</entry>
+  <entry key="241">immagine di:</entry>
+  <entry key="242">Disegna</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Membri</entry>
+  <entry key="247">Scarica il documento originale</entry>
+  <entry key="248">Scarica il documento PDF</entry>
+  <entry key="249">Carica la presentazione sulla lavagna</entry>
+  <entry key="250">Configurazione</entry>
+  <entry key="251">Muovi quest'oggetto</entry>
+  <entry key="252">Ripristina quest'oggetto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">di</entry>
+  <entry key="255">Vai alla prima pagina</entry>
+  <entry key="256">Vai alla pagina precedente</entry>
+  <entry key="257">Vai alla prossima pagina</entry>
+  <entry key="258">Vai all'ultima pagina</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">sig.</entry>
+  <entry key="262">Sig.ra</entry>
+  <entry key="263">Configurazione</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chiave</entry>
+  <entry key="266">Configurazione</entry>
+  <entry key="267">Chiave</entry>
+  <entry key="268">Ultimo aggiornamento</entry>
+  <entry key="269">aggiornato da</entry>
+  <entry key="270">commenti</entry>
+  <entry key="271">chiave</entry>
+  <entry key="272">di</entry>
+  <entry key="273">Utenti</entry>
+  <entry key="274">Cancella l'utente dall'organizzazione</entry>
+  <entry key="275">cancella</entry>
+  <entry key="276">Questo utente è già membro di questa organizzazione.</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Link veloce</entry>
+  <entry key="279">Vai alla Riunione</entry>
+  <entry key="280">Vai all'Auditorium</entry>
+  <entry key="281">Aiuto e supporto</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Bug!</entry>
+  <entry key="285">Altre informazioni</entry>
+  <entry key="286">Sito web del progetto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Mailing List utenti (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Ricorda utente</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">Mia Home Page</entry>
+  <entry key="291">Mie conferenze fissate</entry>
+  <entry key="292">Miei eventi fissati</entry>
+  <entry key="293">Conferenze pubbliche</entry>
+  <entry key="294">Conferenze private</entry>
+  <entry key="295">Eventi pubblici</entry>
+  <entry key="296">Eventi privati</entry>
+  <entry key="297">Contenuti pubblici</entry>
+  <entry key="298">Contenuti privati</entry>
+  <entry key="299">Contenuti personali</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderatore</entry>
+  <entry key="302">Assegna moderatore</entry>
+  <entry key="303">Sondaggio</entry>
+  <entry key="304">Scegli un file</entry>
+  <entry key="305">Impostazioni</entry>
+  <entry key="306">Impostazioni Cam e Mic</entry>
+  <entry key="307">Impostazioni lavagna</entry>
+  <entry key="308">Esci</entry>
+  <entry key="309">Torna alle stanze</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Visualizzatore desktop</entry>
+  <entry key="312">Avvia visualizzatore desktop</entry>
+  <entry key="313">Video e Audio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Lavagna</entry>
+  <entry key="316">Moderatore</entry>
+  <entry key="317">Files</entry>
+  <entry key="318">Utenti</entry>
+  <entry key="319">Sondaggio</entry>
+  <entry key="320">Non ci sono utenti collegati con questo Username</entry>
+  <entry key="321">Una mail, contenente un link, è stata inviata al tuo indirizzo email, controlla la tua posta. Se non hai ricevuto la mail, controlla il tuo filtro di spam e richiedi nuovamente la mail di conferma.</entry>
+  <entry key="322">Errore</entry>
+  <entry key="323">Messaggio</entry>
+  <entry key="324">Hash non valida. Utente non trovato.</entry>
+  <entry key="325">Resetta la tua password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">cambia password</entry>
+  <entry key="328">nuova password</entry>
+  <entry key="329">ripeti la password</entry>
+  <entry key="330">Le password inserite non sono identiche.</entry>
+  <entry key="331">4 o più caratteri; sensibile alle maiuscole;</entry>
+  <entry key="332">Password impostata. Ora puoi collegarti.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Errore sconosciuto. Contatta il tuo amministratore.</entry>
+  <entry key="335">Username non trovato</entry>
+  <entry key="336">Password non valida</entry>
+  <entry key="337">Scollegamento effettuato</entry>
+  <entry key="338">Registrazioni disabilitate.</entry>
+  <entry key="339">EMail non valida</entry>
+  <entry key="340">nome del file duplicato, scegli un altro nome</entry>
+  <entry key="341">nome di file troppo corto</entry>
+  <entry key="342">Salvataggio di indirizzo non possibile</entry>
+  <entry key="343">Utente aggiunto, ma deve essere assegnato ad un'organizzazione, altrimenti non potrà collegarsi.</entry>
+  <entry key="344">Nuova registrazione</entry>
+  <entry key="345">Nessun testo trovato con questo ID.</entry>
+  <entry key="346">Nessun valore trovato per questo elemento.</entry>
+  <entry key="347">Permessi da amministratore richiesti</entry>
+  <entry key="348">Editor linguaggi</entry>
+  <entry key="349">Linguaggi</entry>
+  <entry key="350">Identificativo-ID</entry>
+  <entry key="351">Identificativo-Nome</entry>
+  <entry key="352">Valore</entry>
+  <entry key="353">Record</entry>
+  <entry key="354">Nome dell'identificativo</entry>
+  <entry key="355">Testo</entry>
+  <entry key="356">ID</entry>
+  <entry key="357">Puoi cancellare solo l'identificativo, non il record! Potrebbe essere utilizzato in altri linguaggi.</entry>
+  <entry key="358">ID non valido. l'identificativo del linguaggio non è presente nel database.</entry>
+  <entry key="359">Non puoi cancellare questo campo. Puoi solo cancellare il contenuto non il campo. Non ci sono dati contenuti caricati in questo momento, potrebbe non esser stato scelto un campo o non ci sono contenuti impostati per questo linguaggio.</entry>
+  <entry key="360">esporta</entry>
+  <entry key="361">Devi scollegarti per vedere i cambiamenti.</entry>
+  <entry key="362">Aggiungi un nuovo linguaggio</entry>
+  <entry key="363">cancella linguaggio</entry>
+  <entry key="364">Aggiungi nuovo linguaggio</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">aggiungi linguaggio</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">vai al primo</entry>
+  <entry key="369">vai al precedente</entry>
+  <entry key="370">vai al prossimo</entry>
+  <entry key="371">vai all'ultimo</entry>
+  <entry key="372">utente parla (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">suono on/off</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">I tuoi settaggi</entry>
+  <entry key="376">ciao,</entry>
+  <entry key="377">Modifica il profilo</entry>
+  <entry key="378">Nuovi messaggi:</entry>
+  <entry key="379">Carica nuove immagini</entry>
+  <entry key="380">Esporta dati utente</entry>
+  <entry key="381">Le organizzazioni devono esistere tutte!</entry>
+  <entry key="382">Inizia esportazione</entry>
+  <entry key="383">Per organizzazione</entry>
+  <entry key="384">inizia esportazione</entry>
+  <entry key="385">Dati utente - Importazione</entry>
+  <entry key="386">scegli users.xml</entry>
+  <entry key="387">importa</entry>
+  <entry key="388">esporta in XML - Questi file possono essere usati per: - Contribuire al progetto - Importare in altro sistema - Backup - Personalizzazione - Inserire nella directoy dei linguaggi della tua prossima installazione</entry>
+  <entry key="389">Scegli un file di linguaggio da importare. Scegli il giusto linguaggio dalla combobox! Non importa il nome del file, esso sarà importato in questo linguaggio!</entry>
+  <entry key="390">importazione - file scelto</entry>
+  <entry key="391">Salva come</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Commento:</entry>
+  <entry key="394">save</entry>
+  <entry key="395">Registra</entry>
+  <entry key="396">Visualizzatore delle registrazioni</entry>
+  <entry key="397">Registrazioni di stanze private e pubbliche</entry>
+  <entry key="398">Utenti:</entry>
+  <entry key="399">Accedi:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Utenti nella stanza:</entry>
+  <entry key="402">ricarica</entry>
+  <entry key="403">Questa stanza è piena. Riprova fra qualche minuto.</entry>
+  <entry key="404">premi su una stanza per avere dettagli</entry>
+  <entry key="405">Parla con gli utenti nella stanza:</entry>
+  <entry key="406">Stanza:</entry>
+  <entry key="407">Utenti in questa stanza:</entry>
+  <entry key="408">fino:</entry>
+  <entry key="409">vedi registrazione</entry>
+  <entry key="410">Durata:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Registrazione! Non puoi cambiare nessuna impostazione, è una registrazione!</entry>
+  <entry key="413">Vedi questa registrazione</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Avvia registrazione</entry>
+  <entry key="416">ferma registrazione</entry>
+  <entry key="417">Registrazione:</entry>
+  <entry key="418">C'e' già qualcuno che sta registrando in questo momento:</entry>
+  <entry key="419">Registrazione! dall'utente:</entry>
+  <entry key="420">cancella</entry>
+  <entry key="421">La registrazione sarà cancellata e non salvata.</entry>
+  <entry key="422">recupera</entry>
+  <entry key="423">Chiudi questa finestra e recupera registrazione</entry>
+  <entry key="424">cambia colore della linea</entry>
+  <entry key="425">Scegli colore</entry>
+  <entry key="426">Disabilita / Abilita il colore della linea</entry>
+  <entry key="427">cambia il colore di riempimento</entry>
+  <entry key="428">Disabilita / abilita riempimento colore</entry>
+  <entry key="429">Cambia spessore linea</entry>
+  <entry key="430">chiudi</entry>
+  <entry key="431">cambia grandezza carattere</entry>
+  <entry key="432">Cancella registrazione</entry>
+  <entry key="433">Ospite</entry>
+  <entry key="434">Da:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Stanza</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancella</entry>
+  <entry key="439">inizio</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Cancella i log della chat sul server</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">invia messaggio</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Scegli i devices da pubblicare</entry>
+  <entry key="448">Audio e Video</entry>
+  <entry key="449">solo Audio</entry>
+  <entry key="450">solo Video</entry>
+  <entry key="451">no Audio/Video (immagine statica)</entry>
+  <entry key="452">Nessun Audio/Video del tuo PC saranno pubblicati, al loro posto sarà visualizzata l'immagine del tuo profilo. Scegli questa impostazione se hai problemi di banda o velocità di Internet.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">GI</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lunedi</entry>
+  <entry key="461">Martedi</entry>
+  <entry key="462">Mercoledi</entry>
+  <entry key="463">Giovedi</entry>
+  <entry key="464">Venerdi</entry>
+  <entry key="465">Sabato</entry>
+  <entry key="466">Domenica</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendario settimane</entry>
+  <entry key="469">Gennaio</entry>
+  <entry key="470">Febbraio</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Aprile</entry>
+  <entry key="473">Maggio</entry>
+  <entry key="474">Giugno</entry>
+  <entry key="475">Luglio</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Settembre</entry>
+  <entry key="478">Ottobre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Dicembre</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Partecipanti</entry>
+  <entry key="483">Mostra i settaggi del layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Larghezza | Altezza</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderatore-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lavagna-Container</entry>
+  <entry key="490">Abilitato</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Larghezza | Altezza</entry>
+  <entry key="493">Files,Chat,Partecipanti - Container</entry>
+  <entry key="494">Abilitato</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Larghezza | Altezza</entry>
+  <entry key="497">Il moderatore ha lasciato la stanza. Nessuno è presente in questo momento. Tu puoi diventare moderatore o attendere.</entry>
+  <entry key="498">Non ci sono moderatori in questa stanza, ma ci sono dei partecipanti. Puoi diventare moderatore o attendere.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invito</entry>
+  <entry key="501">Messaggio dall'utente:</entry>
+  <entry key="502">Messaggio:</entry>
+  <entry key="503">Clicca questo link per partecipare alla conferenza:</entry>
+  <entry key="504">Clicca qui per entrare nella stanza</entry>
+  <entry key="505">se hai problemi con il link, per favore copia e incolla questo sul browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">I tuoi dati:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Accesso</entry>
+  <entry key="513">{0} - Re-imposta password</entry>
+  <entry key="514">Clicca su questo link per inserire una nuova password:</entry>
+  <entry key="515">Clicca qui per inserire una nuova password</entry>
+  <entry key="516">se hai problemi con il link, per favore copia e incolla questo sul browser:</entry>
+  <entry key="517">Reset della password di {0}</entry>
+  <entry key="518">inserisci una data valida, per esempio 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Inserisci un email valido, per esempio name@mail.com</entry>
+  <entry key="520">Inserisci un numero decimale, per esempio 1.00</entry>
+  <entry key="521">Inserisci un numero (Intero), per esempio 100</entry>
+  <entry key="522">Inserisci un numero di telefono valido, per esempio ++39 0461 123123</entry>
+  <entry key="523">Inserisci un orario valido, per esempio 12:23 (hh:mm)</entry>
+  <entry key="524">Protetto da password</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Periodo di validità</entry>
+  <entry key="527">Senza scadenza</entry>
+  <entry key="528">Periodo</entry>
+  <entry key="529">Una volta</entry>
+  <entry key="530">Valido da:</entry>
+  <entry key="531">Valido fino:</entry>
+  <entry key="532">Invito a {0}</entry>
+  <entry key="533">Nessun invito presente per questo codice.</entry>
+  <entry key="534">L'invito è già stato utilizzato. Questo tipo di invito non può essere riutilizzato.</entry>
+  <entry key="535">Il codice di invito non è valido.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Controlla password</entry>
+  <entry key="538">Password non valida!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Sincronizzazione Audio/video</entry>
+  <entry key="541">Accesso corretto, ma la sessione non è attiva o presente sul server. Sarà assegnato una nuova sessione e dovrà essere ripetuto l'accesso.</entry>
+  <entry key="542">La sessione non è collegata o non ha diritti di amministrazione. The SOAP Gateway necessita di un utente con diritti di amministrazione per creare un utente..</entry>
+  <entry key="543">La sessione non ha utenti remoti-dati connessi. Potrebbe esser stato chiamato il SOAP-Gateway prima di effettuare l'accesso all'applicazione o è stato utilizzato un id di sessione errato.</entry>
+  <entry key="544">La registrazione è in fase beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">larghezza</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altezza</entry>
+  <entry key="553">Cambia trasparenza</entry>
+  <entry key="554">Apri browser</entry>
+  <entry key="555">Chiudi browser</entry>
+  <entry key="556">La connessione al serve è stata persa. E' necessario ricollegarsi all'applicazione e/o controllare la rete.</entry>
+  <entry key="557">Puntatore</entry>
+  <entry key="558">Sincronizzazione</entry>
+  <entry key="559">Sincronizzazione utenti, attendere</entry>
+  <entry key="560">Scarica come SVG</entry>
+  <entry key="561">Scarica come PNG</entry>
+  <entry key="562">Scarica come JPG</entry>
+  <entry key="563">Scarica come PDF</entry>
+  <entry key="564">Scarica come TIF</entry>
+  <entry key="565">Promemoria:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Ripetizione:</entry>
+  <entry key="568">niente</entry>
+  <entry key="569">Località:</entry>
+  <entry key="570">Inizio</entry>
+  <entry key="571">Fine</entry>
+  <entry key="572">Titolo:</entry>
+  <entry key="573">Commento:</entry>
+  <entry key="574">Invita partecipanti</entry>
+  <entry key="575">Giornaliero</entry>
+  <entry key="576">Mensile</entry>
+  <entry key="577">Annuale</entry>
+  <entry key="578">La data di fine è dopo quella di inizio dell'appuntamento!</entry>
+  <entry key="579">Inserisci un titolo!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Attiva le la scrittura del tuo linguaggio va da destra a sinistra (inverte ordine parole)</entry>
+  <entry key="582">Cruscotto</entry>
+  <entry key="583">Guarda eventi e conferenze registrate</entry>
+  <entry key="584">Conferenza - Conferenze con 4 (fino a 16) utenti; tutti hanno accesso a audio e video</entry>
+  <entry key="585">Eventi - Conferenze fino a 200 utenti. Solo il moderatore ha audio e video</entry>
+  <entry key="586">Crea utenti, stanze, organizzazioni + cambia configurazione</entry>
+  <entry key="587">Utenti nella stanza ora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Caricamento documento. Aspettare finché i client sono sincronizzati.</entry>
+  <entry key="592">Caricamento completato, conversione del documento in corso ...</entry>
+  <entry key="593">Inizia caricamento</entry>
+  <entry key="594">Carica e importa il dialogo. Scegli un file dal disco.</entry>
+  <entry key="595">Annulla</entry>
+  <entry key="596">Scelta file</entry>
+  <entry key="597">Connessioni</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connesso da</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Caccia utente</entry>
+  <entry key="604">Caccia utente</entry>
+  <entry key="605">Sei sicuro di voler chiudere la connessione a questo client? Il client sarà solamente rimosso dalla stanza corrente. Il client potrà ricollegarsi.</entry>
+  <entry key="606">La tua sessione è stata chiusa da un amministratore o moderatore</entry>
+  <entry key="607">Telefono</entry>
+  <entry key="608">L'utente è il moderatore di questa stanza</entry>
+  <entry key="609">L'utente è abilitato a disegnare sulla lavagna</entry>
+  <entry key="610">(Ri) attiva Audio/Video o cambia le impostazioni</entry>
+  <entry key="611">Abilita questo utente a disegnare sulla lavagna</entry>
+  <entry key="612">Rimuovi possibilità di disegnare sulla lavagna</entry>
+  <entry key="613">Utenti</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Lavagna</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Il tuo account è assegnato a più organizzazioni. Per favore scegline una per questa sessione.</entry>
+  <entry key="618">Questa stanza è piena al momento. Per favore riprova più tardi.</entry>
+  <entry key="619">Tipo stanza</entry>
+  <entry key="620">Stanza appuntamenti</entry>
+  <entry key="621">Ora del server</entry>
+  <entry key="622">Agenda</entry>
+  <entry key="623">Messaggio dall'utente:</entry>
+  <entry key="624">Messaggio:</entry>
+  <entry key="625">Clicca questo link per partecipare alla videoconferenza:</entry>
+  <entry key="626">Clicca qui per entrare nella stanza</entry>
+  <entry key="627">se hai problemi con il link, copia e incolla sul browser il seguente link:</entry>
+  <entry key="628">ricerca interna</entry>
+  <entry key="629">utente esterno</entry>
+  <entry key="630">titolo</entry>
+  <entry key="631">nome</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Conferma uscita</entry>
+  <entry key="634">Sei sicuro di voler uscire?</entry>
+  <entry key="635">Azioni</entry>
+  <entry key="636">Stanza demo</entry>
+  <entry key="637">Orario demo</entry>
+  <entry key="638">Orario meeting</entry>
+  <entry key="639">Questa stanza è una stanza demo. Per disabilitare questo avviso è necessario attivare una conferenza privata per uso ristretto o attivare un server dedicato. Sarai automaticamente sconnesso in:</entry>
+  <entry key="640">moderata</entry>
+  <entry key="641">Perfavore attendi finchè un moderatore si collega alla stanza. Il moderatore può essere un insegnante, un amministratore o il creatore della stanza.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Condivisione schermo in ingresso</entry>
+  <entry key="644">C'è una nuova condivisione di schermo in ingresso dall'utente:</entry>
+  <entry key="645">Inizia condivisione</entry>
+  <entry key="646">Aggiungi nuovo meeting</entry>
+  <entry key="647">Stanza meeting</entry>
+  <entry key="648">Stanza eventi</entry>
+  <entry key="649">Moderazione</entry>
+  <entry key="650">Utenti moderatori</entry>
+  <entry key="651">Stanze moderate</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vuoi modificare questo utente a diventare moderatore dell'organizzazione?</entry>
+  <entry key="654">Perfavore scegli un organizzazione prima di aggiungere l'utente!</entry>
+  <entry key="655">Organizzazione - Moderatori</entry>
+  <entry key="656">Sei sicuro di cancellare questo utente dall'organizzazione?</entry>
+  <entry key="657">Questo utente è moderatore</entry>
+  <entry key="658">Questo utente non è moderatore</entry>
+  <entry key="659">Vuoi che questo utente non sia moderatore dell'organizzazione?</entry>
+  <entry key="660">Aggiungi o cancella utenti o stanze della tua organizzazione</entry>
+  <entry key="661">Sei sicuro di cancellare questo record?</entry>
+  <entry key="662">Sei sicuro di cancellare questo utente dall'organizzazione? Sarà cancellato il legame tra utente e organizzazione, per cancellare completamente l'utente devi collegarti al pannello di amministratore.</entry>
+  <entry key="663">Non puoi cancellare te stesso!</entry>
+  <entry key="664">Questo metodo ha bisogno di un account da amministratore per essere chiamato!</entry>
+  <entry key="665">Non ci sono sessioni collegate a questo ID.</entry>
+  <entry key="666">Questo utente è un amministratore o moderatore. Puoi editare questo account solo dal pannello di amministratore.</entry>
+  <entry key="667">Per completare la registrazione per favore clicca sul seguente link o copia l'url nel tuo browser.</entry>
+  <entry key="668">clicca per convalidare la tua e-mail</entry>
+  <entry key="669">Nessun utente è stato trovato per questo codice hash.</entry>
+  <entry key="670">Questo utente è già stato attivato!</entry>
+  <entry key="671">Hai attivato correttamente il tuo utente!</entry>
+  <entry key="672">Collegati ora</entry>
+  <entry key="673">Il tuo utente non è attivo. Per prima cosa clicca sul link presente nella mail ricevuta nel processo di registrazione</entry>
+  <entry key="674">Ti sei registrato correttamente. E' stata inviata una e-mail per la verifica dell'utente. Per favore controlla la tua posta in arrivo.</entry>
+  <entry key="675">Rimuovi il ruolo di moderatore da questo utente.</entry>
+  <entry key="676">Assegna i diritti di moderatore a questo utente.</entry>
+  <entry key="677">Utente</entry>
+  <entry key="678">Accesso alla lavagna virtuale</entry>
+  <entry key="679">Moderatore</entry>
+  <entry key="680">Moderazione: Per favore scegli dalla lista gli utenti a cui assegnare i diritti della lavagna virtuale, la moderazione o il video.</entry>
+  <entry key="681">Questo utente è già moderatore, ha automaticamente i diritti di disegno.</entry>
+  <entry key="682">Sei tu! Non puoi toglierti i diritti di amministratore.</entry>
+  <entry key="683">Abilita questo utente a pubblicare Video e Audio</entry>
+  <entry key="684">Rimuovi Audio e Video a questo utente</entry>
+  <entry key="685">Vorrei ricevere la moderazione di questa stanza.</entry>
+  <entry key="686">Vorrei disegnare sulla lavagna virtuale</entry>
+  <entry key="687">Vorrei condividere il mio Audio e Video</entry>
+  <entry key="688">Sei il moderatore della stanza</entry>
+  <entry key="689">Hai i diritti di disegnare sulla lavagna virtuale</entry>
+  <entry key="690">Sei abilitato a inviare il tuo Audio e Video</entry>
+  <entry key="691">Messaggio al moderatore</entry>
+  <entry key="692">L'utente</entry>
+  <entry key="693">vorrebbe diventare moderatore. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i moderatori.</entry>
+  <entry key="694">vorrebbe disegnare sulla lavagna virtuale. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i diritti di uso della lavagna virtuale.</entry>
+  <entry key="695">vorrebbe condividere i suoi Audio e Video. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i diritti di condivisione Audio e Video.</entry>
+  <entry key="696">Devi attendere fino a quando un moderatore entra nella stanza.</entry>
+  <entry key="697">Annulla</entry>
+  <entry key="698">Salva</entry>
+  <entry key="699">Giorno</entry>
+  <entry key="700">Mese</entry>
+  <entry key="701">Anno</entry>
+  <entry key="702">Carica File</entry>
+  <entry key="703">Aggiungi directory</entry>
+  <entry key="704">Aggiorna</entry>
+  <entry key="705">Cestino</entry>
+  <entry key="706">Miei File (Spazio privato)</entry>
+  <entry key="707">Files della stanza (Spazio pubblico)</entry>
+  <entry key="708">Aggiungi File</entry>
+  <entry key="709">Aggiungi directory</entry>
+  <entry key="710">Cancella directory</entry>
+  <entry key="711">Modifica nome</entry>
+  <entry key="712">Nuova directory</entry>
+  <entry key="713">Sei sicuro di voler cancellare questo elemento?</entry>
+  <entry key="714">Ricerca</entry>
+  <entry key="715">Ricerca</entry>
+  <entry key="716">Apri documento</entry>
+  <entry key="717">Mostra tutti i file (Visualizzazione ad albero)</entry>
+  <entry key="718">Chiudi documento</entry>
+  <entry key="719">Cancella file</entry>
+  <entry key="720">Non sei autorizzato a disegnare sulla lavagna. Devi diventare moderatore o almeno ricevere i diritti per lavorare sulla lavagna. Chiedi al moderatore l'assegnazione di questi diritti.</entry>
+  <entry key="721">Proprietà documento</entry>
+  <entry key="722">Avvia Client (external)</entry>
+  <entry key="723">Avvia Client (HTTP)</entry>
+  <entry key="724">Un utente vuol condividere il suo schermo. Vuoi vederlo?</entry>
+  <entry key="725">Ora stai condividendo il tuo desktop. Per interrompere la sessione di condivisione, premi sul bottone di Stop nella finestra di condivisione.</entry>
+  <entry key="726">Condivisi sessione</entry>
+  <entry key="727">Stai già condividendo il tuo desktop!</entry>
+  <entry key="728">Visualizzatore Desktop</entry>
+  <entry key="729">Esci</entry>
+  <entry key="730">Condividi Desktop</entry>
+  <entry key="731">Clicca avvia per pubblicare il tuo video</entry>
+  <entry key="732">Avvia condivisione</entry>
+  <entry key="733">Ferma condivisione</entry>
+  <entry key="734">Scegli l'area del tuo schermo:</entry>
+  <entry key="735">Cambia larghezza</entry>
+  <entry key="736">La condivisione ha finito la sessione!</entry>
+  <entry key="737">Cambia altezza</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Larghezza:</entry>
+  <entry key="741">Altezza:</entry>
+  <entry key="742">Connessione chiusa dal Server!</entry>
+  <entry key="743">Annulla</entry>
+  <entry key="744">Avvia External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Condividi schermo</entry>
+  <entry key="748">Registra sessione</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Precedente</entry>
+  <entry key="752">Avanti</entry>
+  <entry key="753">Ricarica</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Carica</entry>
+  <entry key="756">Imposta questo sito come default nel tuo profilo.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Verifica le impostazioni del tuo microfono e della tua cam prima di entrare nella stanza, registrando qualche secondo. Potrai poi rivedere la registrazione per verificare l'audio e il video.</entry>
+  <entry key="759">Non mostrare più questo test</entry>
+  <entry key="760">Annulla</entry>
+  <entry key="761">Avvia conferenza</entry>
+  <entry key="762">Non richiedere ancora</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Puoi procedere senza verificare se hai intenzione di non condividere la tua voce e video. I partecipanti senza audio e video possono ugualmente utilizzare la lavagna, condividere il proprio desktop o scrivere messaggi in chat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Premi Avvia</entry>
+  <entry key="769">Avvia conferenza</entry>
+  <entry key="770">Avvia evento</entry>
+  <entry key="771">Scegli la stanza</entry>
+  <entry key="772">Verifica impostazioni</entry>
+  <entry key="773">Avvia conferenza</entry>
+  <entry key="774">Come fare una videoconferenza:</entry>
+  <entry key="775">Avvia registrazione</entry>
+  <entry key="776">Non mostrate il test Audio/Video (registrazione) prima di entrare in una conferenza</entry>
+  <entry key="777">Stanze pubbliche</entry>
+  <entry key="778">Le stanze pubbliche sono accessibili da tutti gli utenti</entry>
+  <entry key="779">Stanze private</entry>
+  <entry key="780">Le stanze private sono accessibili solo dagli utenti della rispettiva organizzazione.</entry>
+  <entry key="781">Mie stanze</entry>
+  <entry key="782">Le stanze di questa sezione sono create per usi personali. Sono create attraverso il calendario e hanno una data di inizio e di fine. Sono visibili in questa sezione solo per la durata della loro validit√†.</entry>
+  <entry key="783">Devi essere moderatore per fare questa azione.</entry>
+  <entry key="784">Assegna moderatore</entry>
+  <entry key="785">Assegna accesso alla lavagna</entry>
+  <entry key="786">Assegna accesso a cam/microfono</entry>
+  <entry key="787">Questa hash di sessione √® gi√† in uso. Non puoi accedere contemporaneamente.</entry>
+  <entry key="788">INIZIO</entry>
+  <entry key="789">ESCI</entry>
+  <entry key="790">Sei sicuro di voler uscire? Potresti dover pulire i documenti caricati, la lavagna e la chat</entry>
+  <entry key="791">Esci conferenza</entry>
+  <entry key="792">Stanze</entry>
+  <entry key="793">Scegli la stanza per un meeting</entry>
+  <entry key="794">E' presente un evento non salvato nel calendario. Per favore salvalo o cancellalo.</entry>
+  <entry key="795">Si prega di aggiungere almeno un partecipante per la riunione!</entry>
+  <entry key="796">Sei sicuro di voler cancellare questo evento?</entry>
+  <entry key="797">Attenzione</entry>
+  <entry key="798">Aggiungi evento</entry>
+  <entry key="799">giorno</entry>
+  <entry key="800">settimana</entry>
+  <entry key="801">mese</entry>
+  <entry key="802">Descrizione</entry>
+  <entry key="803">Partecipanti</entry>
+  <entry key="804">{0}, la tua piattaforma di videoconferenza. Segui le istruzioni premendo il tasto inizio per cominciare subito una videoconferenza, o vai al calendario e pianifica una conferenza per il futuro.</entry>
+  <entry key="805">Pianifica una conferenza</entry>
+  <entry key="806">Per pianificare una conferenza tu puoi aggiungere un evento nel calendario. Per ogni evento sar√† creata un apposita stanza. Tu e tutti gli invitati riceverete una mail con un link per accedere alla stanza.&lt;br/&gt;&lt;br/&gt;Puoi scegliere tra diverse tipologie di stanze con differenti tipologie di layout e mdoerazione. Puoi anche scegliere tra diversi tipi di notifica via email che avvisano dell'evento in calendario.</entry>
+  <entry key="807">Serve aiuto?</entry>
+  <entry key="808">Ristretto</entry>
+  <entry key="809">Cerca</entry>
+  <entry key="810">Aggiungi</entry>
+  <entry key="811">Non ci sono utenti selezionati. Si prega di scegliere un elemento dalla lista e poi premere aggiungi.</entry>
+  <entry key="812">Aggiungi partecipanti</entry>
+  <entry key="813">Salva</entry>
+  <entry key="814">Cancella</entry>
+  <entry key="815">Dettagli evento</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
new file mode 100644
index 0000000..54d2b2f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">会議室</entry>
+  <entry key="2">会議</entry>
+  <entry key="3">講演</entry>
+  <entry key="4">設定</entry>
+  <entry key="5">ユーザー</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">録画</entry>
+  <entry key="9">利用可能なファイルがありません</entry>
+  <entry key="10">講師による録画</entry>
+  <entry key="11">接続済みユーザー:</entry>
+  <entry key="12">会議開始</entry>
+  <entry key="13">名前</entry>
+  <entry key="14">ビデオ会議</entry>
+  <entry key="15">アップロード</entry>
+  <entry key="16">ファイルリスト表示更新</entry>
+  <entry key="17">ファイルリストへ</entry>
+  <entry key="18">新規投票</entry>
+  <entry key="19">新規投票</entry>
+  <entry key="20">質問:</entry>
+  <entry key="21">投票タイプ:</entry>
+  <entry key="22">作成</entry>
+  <entry key="23">ヒント: 接続中の全参加者に対して、投票を促すメッセージを送信します</entry>
+  <entry key="24">投票の作成</entry>
+  <entry key="25">キャンセル</entry>
+  <entry key="26">はい/いいえ</entry>
+  <entry key="27">1～10の数字</entry>
+  <entry key="28">投票</entry>
+  <entry key="29">質問を作成するには司会者になる必要があります</entry>
+  <entry key="30">投票が登録されました</entry>
+  <entry key="31">投票済みです</entry>
+  <entry key="32">投票する</entry>
+  <entry key="33">あなたの回答:</entry>
+  <entry key="34">はい</entry>
+  <entry key="35">いいえ</entry>
+  <entry key="36">質問内容:</entry>
+  <entry key="37">投票結果閲覧</entry>
+  <entry key="38">質問:</entry>
+  <entry key="39">結果:</entry>
+  <entry key="40">回答:</entry>
+  <entry key="41">開始されている投票はありません</entry>
+  <entry key="42">投票</entry>
+  <entry key="43">ミーティング</entry>
+  <entry key="44">会議</entry>
+  <entry key="45">タイプ</entry>
+  <entry key="46">他の席</entry>
+  <entry key="47">既に選択されています</entry>
+  <entry key="48">入室</entry>
+  <entry key="49">司会者が退室しました</entry>
+  <entry key="50">システム情報</entry>
+  <entry key="51">デバイス選択</entry>
+  <entry key="52">Webカメラ:</entry>
+  <entry key="53">マイク:</entry>
+  <entry key="54">はい</entry>
+  <entry key="55">キャンセル</entry>
+  <entry key="56">再接続が必要です。</entry>
+  <entry key="57">デバイス設定の編集</entry>
+  <entry key="58">コース:</entry>
+  <entry key="59">言語:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">キャンセル</entry>
+  <entry key="62">ホワイトボードのクリア</entry>
+  <entry key="63">ホワイトボードをクリア</entry>
+  <entry key="64">次回から入力を省略</entry>
+  <entry key="65">いいえ</entry>
+  <entry key="66">設定の編集</entry>
+  <entry key="67">ホワイトボードをクリアする前に確認を要求</entry>
+  <entry key="68">ユーザー情報</entry>
+  <entry key="69">描画領域のクリア</entry>
+  <entry key="70">取り消し</entry>
+  <entry key="71">繰り返し</entry>
+  <entry key="72">オブジェクト選択</entry>
+  <entry key="73">文字列</entry>
+  <entry key="74">自由線</entry>
+  <entry key="75">直線</entry>
+  <entry key="76">下線</entry>
+  <entry key="77">四角形</entry>
+  <entry key="78">楕円</entry>
+  <entry key="79">矢印</entry>
+  <entry key="80">削除</entry>
+  <entry key="81">司会者になる</entry>
+  <entry key="82">適用</entry>
+  <entry key="83">キャンセル</entry>
+  <entry key="84">司会者になる</entry>
+  <entry key="85">閉じる</entry>
+  <entry key="86">イタリック</entry>
+  <entry key="87">ボールド</entry>
+  <entry key="88">待機中</entry>
+  <entry key="89">司会者希望のユーザー:</entry>
+  <entry key="90">許可</entry>
+  <entry key="91">拒否</entry>
+  <entry key="92">キャンセル</entry>
+  <entry key="93">次のユーザーにリクエストを送信</entry>
+  <entry key="94">許可されました</entry>
+  <entry key="95">拒否されました</entry>
+  <entry key="96">司会者の変更</entry>
+  <entry key="97">あなたは司会者ではありません。</entry>
+  <entry key="98">司会者:</entry>
+  <entry key="99">この会議室は満室です。</entry>
+  <entry key="100">楕円</entry>
+  <entry key="101">閉じる</entry>
+  <entry key="102">入力データエラー</entry>
+  <entry key="103">ユーザー名は最低4文字以上必要です</entry>
+  <entry key="104">パスワードは最低4文字以上必要です</entry>
+  <entry key="105">そのユーザー名は既に使われています</entry>
+  <entry key="106">そのメールアドレスは既に登録されています</entry>
+  <entry key="107">システムエラー。管理者に連絡してください。</entry>
+  <entry key="108">ログイン</entry>
+  <entry key="109">ユーザー:</entry>
+  <entry key="110">パスワード:</entry>
+  <entry key="111">言語</entry>
+  <entry key="112">ログイン</entry>
+  <entry key="113">サインアップ</entry>
+  <entry key="114">ユーザー:</entry>
+  <entry key="115">パスワード:</entry>
+  <entry key="116">パスワード再入力:</entry>
+  <entry key="117">名:</entry>
+  <entry key="118">姓:</entry>
+  <entry key="119">メールアドレス:</entry>
+  <entry key="120">国名:</entry>
+  <entry key="121">登録</entry>
+  <entry key="122">キャンセル</entry>
+  <entry key="123">登録</entry>
+  <entry key="124">ホーム</entry>
+  <entry key="125">ユーザー管理</entry>
+  <entry key="126">グループ</entry>
+  <entry key="127">組織管理</entry>
+  <entry key="128">会議室一覧</entry>
+  <entry key="129">公開</entry>
+  <entry key="130">組織</entry>
+  <entry key="131">入室</entry>
+  <entry key="132">ログイン名</entry>
+  <entry key="133">パスワード</entry>
+  <entry key="134">パスワード再入力</entry>
+  <entry key="135">名</entry>
+  <entry key="136">姓</entry>
+  <entry key="137">メールアドレス</entry>
+  <entry key="138">誕生日</entry>
+  <entry key="139">市町村/番地</entry>
+  <entry key="140">郵便番号/都道府県</entry>
+  <entry key="141">国名</entry>
+  <entry key="142">その他情報</entry>
+  <entry key="143">ユーザープロフィール</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">ユーザーID</entry>
+  <entry key="147">ログイン名</entry>
+  <entry key="148">名</entry>
+  <entry key="149">姓</entry>
+  <entry key="150">次</entry>
+  <entry key="151">前</entry>
+  <entry key="152">削除</entry>
+  <entry key="153">キャンセル</entry>
+  <entry key="154">削除</entry>
+  <entry key="155">新規作成</entry>
+  <entry key="156">更新</entry>
+  <entry key="157">削除</entry>
+  <entry key="158">ステータス</entry>
+  <entry key="159">無効</entry>
+  <entry key="160">有効</entry>
+  <entry key="161">組織</entry>
+  <entry key="162">カレンダー</entry>
+  <entry key="163">閉じる</entry>
+  <entry key="164">組織-ID</entry>
+  <entry key="165">名前</entry>
+  <entry key="166">ユーザー</entry>
+  <entry key="167">司会者</entry>
+  <entry key="168">管理者</entry>
+  <entry key="169">ユーザーレベル</entry>
+  <entry key="170">組織</entry>
+  <entry key="171">名前</entry>
+  <entry key="172">組織の追加</entry>
+  <entry key="173">組織の追加</entry>
+  <entry key="174">キャンセル</entry>
+  <entry key="175">追加</entry>
+  <entry key="176">組織の削除</entry>
+  <entry key="177">ユーザー</entry>
+  <entry key="178">ユーザー追加</entry>
+  <entry key="179">ユーザー削除</entry>
+  <entry key="180">ユーザー追加</entry>
+  <entry key="181">ユーザー検索</entry>
+  <entry key="182">検索</entry>
+  <entry key="183">ユーザー</entry>
+  <entry key="184">組織</entry>
+  <entry key="185">入室</entry>
+  <entry key="186">会議室管理</entry>
+  <entry key="187">会議室</entry>
+  <entry key="188">id</entry>
+  <entry key="189">名前</entry>
+  <entry key="190">公開</entry>
+  <entry key="191">組織</entry>
+  <entry key="192">会議室</entry>
+  <entry key="193">名前</entry>
+  <entry key="194">タイプ</entry>
+  <entry key="195">公開</entry>
+  <entry key="196">コメント</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">ロード</entry>
+  <entry key="199">名前を付けて保存</entry>
+  <entry key="200">ファイル名</entry>
+  <entry key="201">ファイル名</entry>
+  <entry key="202">キャンセル</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">エラー</entry>
+  <entry key="205">ロード中</entry>
+  <entry key="206">オブジェクトがロードされました</entry>
+  <entry key="207">クライアント同期中、待機中のクライアント:</entry>
+  <entry key="208">イメージデータロード中</entry>
+  <entry key="209">クライアント同期中、待機中のクライアント:</entry>
+  <entry key="210">ホワイトボードクリア</entry>
+  <entry key="211">ホワイトボードの内容がクリアされます。</entry>
+  <entry key="212">ファイルロード前の確認</entry>
+  <entry key="213">招待メールを送信</entry>
+  <entry key="214">招待メールを送信</entry>
+  <entry key="215">件名</entry>
+  <entry key="216">相手</entry>
+  <entry key="217">メッセージ</entry>
+  <entry key="218">送信</entry>
+  <entry key="219">キャンセル</entry>
+  <entry key="220">発言</entry>
+  <entry key="221">ユーザーデータ</entry>
+  <entry key="222">この会議の別名</entry>
+  <entry key="223">別名</entry>
+  <entry key="224">名</entry>
+  <entry key="225">姓</entry>
+  <entry key="226">メールアドレス</entry>
+  <entry key="227">言語</entry>
+  <entry key="228">入室</entry>
+  <entry key="229">ロード中</entry>
+  <entry key="230">データロード中。お待ちください。</entry>
+  <entry key="231">パスワードが間違っています</entry>
+  <entry key="232">4文字以上の同一のパスワードを2回入力してください</entry>
+  <entry key="233">メールアドレスが間違っています</entry>
+  <entry key="234">メールアドレスが無効です</entry>
+  <entry key="235">登録完了</entry>
+  <entry key="236">アカウントが作成されました。ログイン可能です。</entry>
+  <entry key="237">ただいまデスクトップ共有ができません。誰かが既に共有しています。</entry>
+  <entry key="238">共有は許可されていません。</entry>
+  <entry key="239">画面の共有/録画</entry>
+  <entry key="240">帯域不良: 画面の同期ができません。フレームが落ちます。この警告が頻発する場合、品質を落とすように司会者に依頼してください。</entry>
+  <entry key="241">画面:</entry>
+  <entry key="242">ペイント</entry>
+  <entry key="243">ドキュメント</entry>
+  <entry key="244">チャット</entry>
+  <entry key="245">ファイル</entry>
+  <entry key="246">メンバー</entry>
+  <entry key="247">オリジナルドキュメントのダウンロード</entry>
+  <entry key="248">PDFドキュメントのダウンロード</entry>
+  <entry key="249">プレゼンテーションをホワイトボードにロード</entry>
+  <entry key="250">グローバル設定</entry>
+  <entry key="251">ドラッグ</entry>
+  <entry key="252">サイズ変更</entry>
+  <entry key="253">%</entry>
+  <entry key="254">/</entry>
+  <entry key="255">最初へ</entry>
+  <entry key="256">前へ</entry>
+  <entry key="257">次へ</entry>
+  <entry key="258">最後へ</entry>
+  <entry key="259">縮小</entry>
+  <entry key="260">拡大</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">グローバル設定</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">キー</entry>
+  <entry key="266">設定</entry>
+  <entry key="267">キー</entry>
+  <entry key="268">最終更新日</entry>
+  <entry key="269">更新者</entry>
+  <entry key="270">コメント</entry>
+  <entry key="271">キー値</entry>
+  <entry key="272">/</entry>
+  <entry key="273">ユーザー</entry>
+  <entry key="274">組織からユーザーを削除</entry>
+  <entry key="275">削除</entry>
+  <entry key="276">このユーザーは既にこの組織のメンバーです。</entry>
+  <entry key="277">ニュース</entry>
+  <entry key="278">リンク</entry>
+  <entry key="279">会議室リスト</entry>
+  <entry key="280">講演室リスト</entry>
+  <entry key="281">ヘルプ・サポート</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://mail-archives.apache.org/mod_mbox/openmeetings-user/</entry>
+  <entry key="284">バグ報告</entry>
+  <entry key="285">続き・・・</entry>
+  <entry key="286">プロジェクトWebサイト</entry>
+  <entry key="287">ユーザーメーリングリスト</entry>
+  <entry key="288">次回から入力を省略</entry>
+  <entry key="289">コンテンツ</entry>
+  <entry key="290">ダッシュボード</entry>
+  <entry key="291">カレンダー</entry>
+  <entry key="292">スケジュール済みイベント</entry>
+  <entry key="293">パブリック会議</entry>
+  <entry key="294">プライベート会議</entry>
+  <entry key="295">パブリックイベント</entry>
+  <entry key="296">プライベートイベント</entry>
+  <entry key="297">パブリックコンテンツ</entry>
+  <entry key="298">プライベートコンテンツ</entry>
+  <entry key="299">パーソナルコンテンツ</entry>
+  <entry key="300"></entry>
+  <entry key="301">司会者</entry>
+  <entry key="302">質問があります</entry>
+  <entry key="303">投票</entry>
+  <entry key="304">フィル選択</entry>
+  <entry key="305">設定</entry>
+  <entry key="306">カメラとマイクの設定</entry>
+  <entry key="307">ホワイトボード設定</entry>
+  <entry key="308">退室する</entry>
+  <entry key="309">会議室一覧に戻る</entry>
+  <entry key="310">ログアウト</entry>
+  <entry key="311">パスワードを忘れた</entry>
+  <entry key="312">パスワードのリセット</entry>
+  <entry key="313">メールでリセット</entry>
+  <entry key="314">ログインでリセット</entry>
+  <entry key="315">メールアドレス</entry>
+  <entry key="316">ログイン名</entry>
+  <entry key="317">パスワード・リセット用リンクを含むメールを送信する</entry>
+  <entry key="318">指定されたメール・アドレスが見つかりません。アカウント作成時に指定したメール・アドレスを指定してください。</entry>
+  <entry key="319">メール・アドレスまたはユーザー名を入力してください。</entry>
+  <entry key="320">このユーザー名で接続するユーザーはありません。</entry>
+  <entry key="321">専用リンクを含むメールをあなたのメール・アドレスに対して送信しました。メール受信箱をご確認ください。もし受信できない場合は、スパムとして除外されている可能性があります。その場合はスパム設定を見直し、再度、確認メールを送信してください。</entry>
+  <entry key="322">エラー</entry>
+  <entry key="323">メッセージ</entry>
+  <entry key="324">ハッシュ値が不正です。ユーザーが見つかりません。</entry>
+  <entry key="325">パスワードのリセット</entry>
+  <entry key="326">ログイン</entry>
+  <entry key="327">パスワード変更</entry>
+  <entry key="328">新しいパスワード</entry>
+  <entry key="329">パスワード再入力</entry>
+  <entry key="330">パスワードが合っていません。</entry>
+  <entry key="331">4文字以上必要です。大文字小文字の区別があります。</entry>
+  <entry key="332">パスワードが設定されました。ログイン可能です。</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">未知のエラーです。管理者に報告してください。</entry>
+  <entry key="335">ユーザー名が見つかりません。</entry>
+  <entry key="336">パスワードが無効です。</entry>
+  <entry key="337">ログアウト完了</entry>
+  <entry key="338">フロントエンド登録は無効です。</entry>
+  <entry key="339">無効なメールアドレスです。</entry>
+  <entry key="340">ファイル名が重複しています。別の名前にしてください。</entry>
+  <entry key="341">ファイル名が短すぎます。</entry>
+  <entry key="342">アドレスが保存できませんでした。</entry>
+  <entry key="343">ユーザーは追加されました。このユーザーは少なくとも一つの組織に所属させる必要があります。</entry>
+  <entry key="344">新規作成</entry>
+  <entry key="345">このフィールドIDのフィールドが見つかりません。</entry>
+  <entry key="346">このフィールドのラベルが見つかりません。</entry>
+  <entry key="347">管理者権限が必要です。</entry>
+  <entry key="348">言語エディタ</entry>
+  <entry key="349">言語</entry>
+  <entry key="350">ラベルID</entry>
+  <entry key="351">ラベル名</entry>
+  <entry key="352">値</entry>
+  <entry key="353">フィールド値</entry>
+  <entry key="354">ラベル名</entry>
+  <entry key="355">値</entry>
+  <entry key="356">ラベルID</entry>
+  <entry key="357">ラベルを削除しました。</entry>
+  <entry key="358">ラベルIDが無効です。</entry>
+  <entry key="359">このフィールドは削除不可です。</entry>
+  <entry key="360">エクスポート</entry>
+  <entry key="361">変更結果を反映するには再ログインが必要です。</entry>
+  <entry key="362">新しい言語の追加</entry>
+  <entry key="363">言語の削除</entry>
+  <entry key="364">新しい言語の追加</entry>
+  <entry key="365">名前</entry>
+  <entry key="366">言語の追加</entry>
+  <entry key="367">バックアップ</entry>
+  <entry key="368">最初へ</entry>
+  <entry key="369">前へ</entry>
+  <entry key="370">次へ</entry>
+  <entry key="371">最後へ</entry>
+  <entry key="372">ユーザーが話し中（マイク権の与奪をするにはここをクリック）</entry>
+  <entry key="373">音声オン/オフ</entry>
+  <entry key="374">システム</entry>
+  <entry key="375">設定</entry>
+  <entry key="376">ユーザー:</entry>
+  <entry key="377">プロフィール編集</entry>
+  <entry key="378">新しいメッセージ:</entry>
+  <entry key="379">画像アップロード</entry>
+  <entry key="380">ユーザーのエクスポート</entry>
+  <entry key="381">すべてのユーザーをエクスポートします。</entry>
+  <entry key="382">全ユーザーエクスポート</entry>
+  <entry key="383">ユーザーを組織ごとにエクスポートします:</entry>
+  <entry key="384">組織別ユーザーのエクスポート</entry>
+  <entry key="385">ユーザーのインポート</entry>
+  <entry key="386">インポートファイル(users.xml)の選択</entry>
+  <entry key="387">インポート</entry>
+  <entry key="388">XMLファイルにエクスポート 主な用途: - プロジェクトへのコントリビュート - 他のシステムへのインポート - バックアップ - カスタマイズ languagesディレクトリにコピーして、 再インストールした後に反映されます</entry>
+  <entry key="389">インポートする言語ファイルを選択してください。 ファイル名に関わらず選択したものがインポートされます。</entry>
+  <entry key="390">インポート - ファイル選択</entry>
+  <entry key="391">名前を付けて保存</entry>
+  <entry key="392">名前:</entry>
+  <entry key="393">コメント:</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">録画</entry>
+  <entry key="396">録画ファイル</entry>
+  <entry key="397">パブリック/プライベート会議室の録画ファイル</entry>
+  <entry key="398">入室者数:</entry>
+  <entry key="399">参加者数:</entry>
+  <entry key="400">会議室リスト</entry>
+  <entry key="401">会議室内のユーザー:</entry>
+  <entry key="402">更新</entry>
+  <entry key="403">この会議室は満員です。</entry>
+  <entry key="404">詳細表示</entry>
+  <entry key="405">会議室内のユーザーとチャット:</entry>
+  <entry key="406">会議室:</entry>
+  <entry key="407">会議室にいるユーザー:</entry>
+  <entry key="408">入室時刻:</entry>
+  <entry key="409">録画ファイルの再生</entry>
+  <entry key="410">長さ:</entry>
+  <entry key="411">日付:</entry>
+  <entry key="412">再生中です。画面上では何も変更できません。これは録画ファイルです。</entry>
+  <entry key="413">録画ファイルの再生</entry>
+  <entry key="414">再生 / 一時停止</entry>
+  <entry key="415">録画開始</entry>
+  <entry key="416">録画停止</entry>
+  <entry key="417">録画:</entry>
+  <entry key="418">現在、他の人が録画中です。</entry>
+  <entry key="419">録画中です。実行ユーザーは:</entry>
+  <entry key="420">キャンセル</entry>
+  <entry key="421">録画はキャンセルされ、保存されません。</entry>
+  <entry key="422">再開</entry>
+  <entry key="423">このウィンドウを閉じ、録画を再開します</entry>
+  <entry key="424">線の色</entry>
+  <entry key="425">色選択</entry>
+  <entry key="426">線の色変更の有効/無効</entry>
+  <entry key="427">塗りつぶし</entry>
+  <entry key="428">塗りつぶし色変更の有効/無効</entry>
+  <entry key="429">線の太さ</entry>
+  <entry key="430">閉じる</entry>
+  <entry key="431">フォントサイズ変更</entry>
+  <entry key="432">録画ファイルの削除</entry>
+  <entry key="433">ゲスト</entry>
+  <entry key="434">作成者:</entry>
+  <entry key="435">名前</entry>
+  <entry key="436">会議室</entry>
+  <entry key="437">日付</entry>
+  <entry key="438">キャンセル</entry>
+  <entry key="439">開始</entry>
+  <entry key="440">名前</entry>
+  <entry key="441">日付</entry>
+  <entry key="442">チャット記録の削除</entry>
+  <entry key="443">チャット</entry>
+  <entry key="444">メッセージ送信</entry>
+  <entry key="445">顔文字</entry>
+  <entry key="446">顔文字</entry>
+  <entry key="447">デバイスの選択</entry>
+  <entry key="448">音声/映像</entry>
+  <entry key="449">音声のみ</entry>
+  <entry key="450">映像のみ</entry>
+  <entry key="451">音声/映像なし(静止画像)</entry>
+  <entry key="452">このPCから音声も映像も送信されません。代わりにユーザープロフィールの画像が表示されます。 このオプションは、ネットワーク帯域に問題がある場合や、インターネット接続が著しく遅い場合に選択してください。</entry>
+  <entry key="453">月</entry>
+  <entry key="454">火</entry>
+  <entry key="455">水</entry>
+  <entry key="456">木</entry>
+  <entry key="457">金</entry>
+  <entry key="458">土</entry>
+  <entry key="459">日</entry>
+  <entry key="460">月曜</entry>
+  <entry key="461">火曜</entry>
+  <entry key="462">水曜</entry>
+  <entry key="463">木曜</entry>
+  <entry key="464">金曜</entry>
+  <entry key="465">土曜</entry>
+  <entry key="466">日曜</entry>
+  <entry key="467">週番</entry>
+  <entry key="468">週番号</entry>
+  <entry key="469">1月</entry>
+  <entry key="470">2月</entry>
+  <entry key="471">3月</entry>
+  <entry key="472">4月</entry>
+  <entry key="473">5月</entry>
+  <entry key="474">6月</entry>
+  <entry key="475">7月</entry>
+  <entry key="476">8月</entry>
+  <entry key="477">9月</entry>
+  <entry key="478">10月</entry>
+  <entry key="479">11月</entry>
+  <entry key="480">12月</entry>
+  <entry key="481">カレンダー</entry>
+  <entry key="482">定員</entry>
+  <entry key="483">レイアウト設定の表示</entry>
+  <entry key="484">横(x) | 縦(y)</entry>
+  <entry key="485">幅 | 高さ</entry>
+  <entry key="486">動画画面ブロック</entry>
+  <entry key="487">司会者ブロック</entry>
+  <entry key="488">X</entry>
+  <entry key="489">ホワイトボードブロック</entry>
+  <entry key="490">有効</entry>
+  <entry key="491">横(x) | 縦(y)</entry>
+  <entry key="492">幅 | 高さ</entry>
+  <entry key="493">チャット、ファイル、メンバーブロック</entry>
+  <entry key="494">有効</entry>
+  <entry key="495">横(x) | 縦(y)</entry>
+  <entry key="496">幅 | 高さ</entry>
+  <entry key="497">司会者は退室しましたので主催者が不在です。司会者になるか他の人が司会者になるのをお待ちください。</entry>
+  <entry key="498">この会議室には、参加者はいますが司会者がいません。司会者になるか他の人が司会者になるのをお待ちください。</entry>
+  <entry key="499">{0} フィードバック</entry>
+  <entry key="500">{0} - 会議参加依頼</entry>
+  <entry key="501">宛先ユーザー:</entry>
+  <entry key="502">メッセージ:</entry>
+  <entry key="503">会議に参加するには:</entry>
+  <entry key="504">会議室に入室するにはここをクリックしてください。</entry>
+  <entry key="505">リンクが動作しない場合、ブラウザに下記URLをコピー&amp;ペーストしてください。:</entry>
+  <entry key="506">{0} サインアップ</entry>
+  <entry key="507">あなたの情報:</entry>
+  <entry key="508">ログイン名:</entry>
+  <entry key="509">パスワード:</entry>
+  <entry key="510">メールアドレス:</entry>
+  <entry key="511">{0}-チーム</entry>
+  <entry key="512">{0} サインアップ</entry>
+  <entry key="513">{0} - パスワードリセット</entry>
+  <entry key="514">新しいパスワードを入力するにはこのリンクをクリックしてください:</entry>
+  <entry key="515">新しいパスワードを入力するにはここをクリックしてください。</entry>
+  <entry key="516">リンクが動作しない場合、ブラウザにコピー&amp;ペーストしてください。:</entry>
+  <entry key="517">{0} パスワードリセット</entry>
+  <entry key="518">正しいフォーマットで日付を入力してください。（例）24.12.2001 (日.月.年)</entry>
+  <entry key="519">正しいメールアドレスを入力してください。(例) name@mail.com</entry>
+  <entry key="520">実数を入力してください。(例) 1.00</entry>
+  <entry key="521">整数を入力してください。(例) 100</entry>
+  <entry key="522">正しい電話番号を入力してください。(例) ++81 0123 123123</entry>
+  <entry key="523">正しい時刻を入力してください。(例)12:23 (時:分)</entry>
+  <entry key="524">パスワード保護する</entry>
+  <entry key="525">パスワード</entry>
+  <entry key="526">利用期間</entry>
+  <entry key="527">エンドレス</entry>
+  <entry key="528">期間指定</entry>
+  <entry key="529">ワンタイム</entry>
+  <entry key="530">開始:</entry>
+  <entry key="531">終了:</entry>
+  <entry key="532">{0} 会議参加依頼</entry>
+  <entry key="533">この招待コードで利用可能な招待はありません。</entry>
+  <entry key="534">その招待はすでに使われています。このタイプの招待は再利用ができません。</entry>
+  <entry key="535">この招待コードは無効です。</entry>
+  <entry key="536">パスワード:</entry>
+  <entry key="537">パスワードチェック</entry>
+  <entry key="538">パスワードが間違っています。</entry>
+  <entry key="539">ブラウザ</entry>
+  <entry key="540">音声/ビデオの同期処理</entry>
+  <entry key="541">ログインには成功しましたが、セッションの取得に失敗しました。新しいセッションを取得するために再度ログインしてください。</entry>
+  <entry key="542">このセッションでは操作できません。SOAP Gatewayはアドミン権限が必要です。</entry>
+  <entry key="543">このセッションはもう有効ではありません。アプリケーションにアクセスする前にSOAP-Gatewayを呼び出したか、使っているセッションIDが正しくないようです。</entry>
+  <entry key="544">この機能はベータ版です</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x軸</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y軸</entry>
+  <entry key="549">w</entry>
+  <entry key="550">幅</entry>
+  <entry key="551">h</entry>
+  <entry key="552">高さ</entry>
+  <entry key="553">透過率変更</entry>
+  <entry key="554">ブラウザ開く</entry>
+  <entry key="555">ブラウザ閉じる</entry>
+  <entry key="556">サーバへの接続が切断されました。アプリケーションの再ロードを行うか、またはネットワーク接続を確認してください。</entry>
+  <entry key="557">ポインタ</entry>
+  <entry key="558">同期しています</entry>
+  <entry key="559">ユーザーを同期しています。しばらくお待ちください。</entry>
+  <entry key="560">&lt;u&gt;SVGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;PNGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;JPGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;PDFとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;TIFとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="565">リマインダ:</entry>
+  <entry key="566">カテゴリ:</entry>
+  <entry key="567">繰り返し:</entry>
+  <entry key="568">無し</entry>
+  <entry key="569">場所:</entry>
+  <entry key="570">開始</entry>
+  <entry key="571">終了</entry>
+  <entry key="572">タイトル:</entry>
+  <entry key="573">備考:</entry>
+  <entry key="574">参加者</entry>
+  <entry key="575">毎日</entry>
+  <entry key="576">毎月</entry>
+  <entry key="577">毎年</entry>
+  <entry key="578">開始時刻は終了時刻よりも前でなければなりません。</entry>
+  <entry key="579">タイトルを入力してください!</entry>
+  <entry key="580">右から左方向へ書く言語</entry>
+  <entry key="581">右から左方向へ書く言語の場合</entry>
+  <entry key="582">ダッシュボード</entry>
+  <entry key="583">録画済みのミーティング/イベントを視聴する</entry>
+  <entry key="584">ミーティング - 4名（最大16名）までの会議&lt;br/&gt;参加者全員が音声+ビデオを利用できます</entry>
+  <entry key="585">イベント - 最大200名までの会議&lt;br/&gt;司会者だけが音声/ビデオを利用できます</entry>
+  <entry key="586">ユーザー、会議室、組織を作成する&lt;br/&gt; + 構成を変更する</entry>
+  <entry key="587">この会議室に入室中のユーザー</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">ログイン</entry>
+  <entry key="590">D</entry>
+  <entry key="591">ドキュメントをロードしています。全クライアントの同期が完了するまでしばらくお待ちください。</entry>
+  <entry key="592">アップロード完了。ドキュメントを変換しています...</entry>
+  <entry key="593">アップロードを開始する</entry>
+  <entry key="594">アップロード/インポートを行います。ローカル・ディスク上のファイルを選択してください。</entry>
+  <entry key="595">キャンセル</entry>
+  <entry key="596">ファイルを選択する</entry>
+  <entry key="597">接続</entry>
+  <entry key="598">値</entry>
+  <entry key="599">ストリームID</entry>
+  <entry key="600">ログイン</entry>
+  <entry key="601">接続開始時刻</entry>
+  <entry key="602">会議室 / スコープ</entry>
+  <entry key="603">ユーザー追放</entry>
+  <entry key="604">ユーザーを追放</entry>
+  <entry key="605">本当にこのユーザーを追い出してよろしいですか?&lt;br/&gt; 追い出したとしても、ユーザーは単にこの会議室から追い出されるだけです。ユーザーは、再度ログインすることができます。</entry>
+  <entry key="606">管理者または司会者によって、セッションが切断されました。</entry>
+  <entry key="607">電話</entry>
+  <entry key="608">会議室の司会進行権限</entry>
+  <entry key="609">ホワイトボードの利用可否</entry>
+  <entry key="610">音声/ビデオを開始（再開）する、またはデバイス設定を変更する</entry>
+  <entry key="611">ホワイトボードの利用を許可する</entry>
+  <entry key="612">ホワイトボードの利用を禁止する</entry>
+  <entry key="613">ユーザー</entry>
+  <entry key="614">ファイル</entry>
+  <entry key="615">ホワイトボード</entry>
+  <entry key="616">チャット</entry>
+  <entry key="617">あなたのアカウントは複数の組織に所属しています。このセッションで使用する組織を選択してください。</entry>
+  <entry key="618">会議室は現在満室です。間を置いて再入室してください。</entry>
+  <entry key="619">会議室タイプ</entry>
+  <entry key="620">会議室</entry>
+  <entry key="621">サーバ時刻</entry>
+  <entry key="622">{0} - リマインダ</entry>
+  <entry key="623">メッセージ送信者:</entry>
+  <entry key="624">メッセージ:</entry>
+  <entry key="625">ミーティングに参加するには、このリンクをクリックしてください:</entry>
+  <entry key="626">入室するにはこのリンクをクリックしてください</entry>
+  <entry key="627">リンクが機能しない場合は、下記URLをブラウザにコピー・ペーストしてください:</entry>
+  <entry key="628">内部ユーザー検索</entry>
+  <entry key="629">外部ユーザー</entry>
+  <entry key="630">名</entry>
+  <entry key="631">姓</entry>
+  <entry key="632">メール・アドレス</entry>
+  <entry key="633">ログアウトの確認</entry>
+  <entry key="634">ログアウトしてよろしいですか?</entry>
+  <entry key="635">アクション</entry>
+  <entry key="636">デモ・ルーム</entry>
+  <entry key="637">デモ時間</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">この会議室は、デモ用です。この警告を非表示にするためには、個人使用向けにプライベート会議室を用意するか、新たにミーティング・サーバーを設置する必要があります。自動的に退室します:</entry>
+  <entry key="640">司会権保持者が仕切る</entry>
+  <entry key="641">司会者が入室するまでしばらくお待ちください。司会者は本会議室の管理者/作成者/講師になります。</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">新規画面共有</entry>
+  <entry key="644">新着の画面共有があります。送信者：</entry>
+  <entry key="645">共有を開始する</entry>
+  <entry key="646">新規ミーティングを追加する</entry>
+  <entry key="647">ミーティング・ルーム</entry>
+  <entry key="648">イベント・ルーム</entry>
+  <entry key="649">管理</entry>
+  <entry key="650">ユーザー管理</entry>
+  <entry key="651">会議室管理</entry>
+  <entry key="652">M</entry>
+  <entry key="653">このユーザーを所属組織の司会者に設定してよろしいですか？</entry>
+  <entry key="654">所属組織を指定してください。</entry>
+  <entry key="655">組織 - 司会者</entry>
+  <entry key="656">このユーザーを所属組織から除外してよろしいですか？</entry>
+  <entry key="657">このユーザーは司会者です</entry>
+  <entry key="658">このユーザーは司会者ではありません</entry>
+  <entry key="659">このユーザーを所属組織の司会者から除外してよろしいですか？</entry>
+  <entry key="660">所属組織内にユーザーまたは会議室を追加・削除する</entry>
+  <entry key="661">削除してよろしいですか？</entry>
+  <entry key="662">このユーザーをあなたの所属組織から除外してよろしいですか？この操作は、ユーザーを所属する組織から除外するだけです。このユーザーをシステムから削除するためには、管理者パネルにログインする必要があります。</entry>
+  <entry key="663">あなた自身を削除することはできません!</entry>
+  <entry key="664">管理者でなければ実行できません!</entry>
+  <entry key="665">このIDに紐付くセッションがありませんでした。</entry>
+  <entry key="666">このユーザーは管理者、または司会者アカウントです。このアカウントは、管理者パネル上でしか変更できません。</entry>
+  <entry key="667">登録を完了するためには、下記のリンクをクリックしてください。あるいは下記URLをブラウザにコピー・ペーストしてください。</entry>
+  <entry key="668">メールを確認するにはここをクリックしてください</entry>
+  <entry key="669">このハッシュは無効です</entry>
+  <entry key="670">ユーザーは既に有効化されています!</entry>
+  <entry key="671">アカウントの有効化が完了しました。</entry>
+  <entry key="672">ログインしてください</entry>
+  <entry key="673">アカウントが有効化されていません。アカウント登録時に受信したメール中のリンクをクリックしてアカウントを有効化してください。</entry>
+  <entry key="674">サインアップが完了しました。登録メールアドレスに対して確認コードを送付しましたので、メール受信箱をご確認ください。</entry>
+  <entry key="675">司会者権限を剥奪する</entry>
+  <entry key="676">司会者権限を付与する</entry>
+  <entry key="677">ユーザー</entry>
+  <entry key="678">ホワイトボード・アクセス</entry>
+  <entry key="679">司会者</entry>
+  <entry key="680">ホワイトボード使用権限、司会者権限、ビデオ共有権限を付与するユーザーを選択してください。</entry>
+  <entry key="681">このユーザーは既に司会者権限を有するため、ホワイトボード使用権限を有しています。</entry>
+  <entry key="682">自分自身から司会者権限を剥奪することはできません。</entry>
+  <entry key="683">ビデオ共有権限を付与する</entry>
+  <entry key="684">ビデオ共有権限を剥奪する</entry>
+  <entry key="685">質問があります</entry>
+  <entry key="686">ホワイトボードを使いたい</entry>
+  <entry key="687">ビデオ・音声を共有したい</entry>
+  <entry key="688">あなたは司会者です</entry>
+  <entry key="689">ホワイトボードの使用を許可されています</entry>
+  <entry key="690">ビデオ・音声の共有を許可されました</entry>
+  <entry key="691">司会者へメッセージを送信</entry>
+  <entry key="692"></entry>
+  <entry key="693">さんが、司会者(話者)権限を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使って司会者権限の与奪を行います。</entry>
+  <entry key="694">さんが、ホワイトボードの使用を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使ってホワイトボード使用権限の与奪を行います。</entry>
+  <entry key="695">さんが、ビデオ・音声の共有を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使ってビデオ共有権限の与奪を行います。</entry>
+  <entry key="696">司会者が入室するまでしばらくお待ちください。</entry>
+  <entry key="697">キャンセル</entry>
+  <entry key="698">保存</entry>
+  <entry key="699">日</entry>
+  <entry key="700">月</entry>
+  <entry key="701">年</entry>
+  <entry key="702">ファイルをアップロードする</entry>
+  <entry key="703">フォルダを追加する</entry>
+  <entry key="704">リフレッシュ</entry>
+  <entry key="705">ゴミ箱 (アイテムをここにドラッグ&amp;ドロップ)</entry>
+  <entry key="706">私のファイル (ホーム・ドライブ)</entry>
+  <entry key="707">会議室のファイル (パブリック・ドライブ)</entry>
+  <entry key="708">ファイルを追加する</entry>
+  <entry key="709">フォルダを追加する</entry>
+  <entry key="710">ファイル/フォルダを消去する</entry>
+  <entry key="711">名前を編集する</entry>
+  <entry key="712">新規フォルダ</entry>
+  <entry key="713">このアイテムを消去してよろしいですか?</entry>
+  <entry key="714">検索</entry>
+  <entry key="715">検索</entry>
+  <entry key="716">ドキュメントを開く</entry>
+  <entry key="717">全てのファイルを表示する (ツリー・ビュー)</entry>
+  <entry key="718">ドキュメントを閉じる</entry>
+  <entry key="719">ファイルを消去する</entry>
+  <entry key="720">ホワイトボードに対する書き込みが許可されていません。書き込みをするには、司会者になるか、書き込み権限を付与してもらう必要があります。司会者に権限付与を依頼してください。</entry>
+  <entry key="721">ドキュメント・プロパティ</entry>
+  <entry key="722">クライアントを開始 (外部プログラム使用)</entry>
+  <entry key="723">クライアントを開始 (HTTP)</entry>
+  <entry key="724">ユーザーがデスクトップ共有を提供しています。画面を閲覧しますか？</entry>
+  <entry key="725">現在、あなたのデスクトップは共有されています。デスクトップ共有を停止する際は、共有クライアント上の停止ボタンを押してください。</entry>
+  <entry key="726">セッション共有</entry>
+  <entry key="727">あなたのデスクトップは既に共有されています!</entry>
+  <entry key="728">デスクトップ・ビューア</entry>
+  <entry key="729">終了</entry>
+  <entry key="730">デスクトップ共有</entry>
+  <entry key="731">開始をクリックして画面を共有します</entry>
+  <entry key="732">共有を開始する</entry>
+  <entry key="733">共有を停止する</entry>
+  <entry key="734">共有する画面領域を選択してください:</entry>
+  <entry key="735">幅を変更する</entry>
+  <entry key="736">画面共有提供者がセッションを終了しました。</entry>
+  <entry key="737">高さを変更する</entry>
+  <entry key="738">X オフセット</entry>
+  <entry key="739">Y オフセット</entry>
+  <entry key="740">幅:</entry>
+  <entry key="741">高さ:</entry>
+  <entry key="742">サーバによって接続が切断されました。</entry>
+  <entry key="743">キャンセル</entry>
+  <entry key="744">外部ビューアを開始</entry>
+  <entry key="745">ビューアを完全に閉じてしまうと、本セッション中はビューアを再開することができません。</entry>
+  <entry key="746">ビューア終了確認</entry>
+  <entry key="747">画面を共有する</entry>
+  <entry key="748">録画する</entry>
+  <entry key="749">並行ブラウジング</entry>
+  <entry key="750">Windows版Firefoxでは並行ブラウジング機能をクリアに表示することができません。他のブラウザをご利用ください。</entry>
+  <entry key="751">前へ</entry>
+  <entry key="752">次へ</entry>
+  <entry key="753">リロード</entry>
+  <entry key="754">ホーム</entry>
+  <entry key="755">ロード</entry>
+  <entry key="756">このウェブサイトをあなたのデフォルト・ウェブサイトに設定する。</entry>
+  <entry key="757">設定のテスト</entry>
+  <entry key="758">入室する前に、マイクとカメラの設定を確認してください。まず録画・録音を数秒間実施してください。続いてそれを再生し、録画・録音状態が適正であることをご確認ください。</entry>
+  <entry key="759">以降このテスト画面を表示しない</entry>
+  <entry key="760">キャンセル</entry>
+  <entry key="761">会議を開始する</entry>
+  <entry key="762">以降表示しない</entry>
+  <entry key="763">録画</entry>
+  <entry key="764">再生</entry>
+  <entry key="765">音声・画像を送信する予定が無い場合はテストを省略することができます。音声・画像を利用しない参加者も、ホワイトボード、デスクトップ共有、チャットを利用することは可能です。</entry>
+  <entry key="766">停止</entry>
+  <entry key="767">レベル・メータ</entry>
+  <entry key="768">「開始」を押してください</entry>
+  <entry key="769">会議を開始する</entry>
+  <entry key="770">イベントを開始する</entry>
+  <entry key="771">会議室を選択する</entry>
+  <entry key="772">設定を確認する</entry>
+  <entry key="773">会議を開始する</entry>
+  <entry key="774">使用方法:</entry>
+  <entry key="775">録画/録音品質のテスト</entry>
+  <entry key="776">入室の際に音声/ビデオのテスト画面を表示しない</entry>
+  <entry key="777">パブリック会議室</entry>
+  <entry key="778">パブリック会議室はだれでもアクセスすることができます。</entry>
+  <entry key="779">プライベート会議室</entry>
+  <entry key="780">プライベート会議室は、同じ組織に所属する参加者のみ入室することができます。</entry>
+  <entry key="781">私の会議室</entry>
+  <entry key="782">このセクションの会議室は個人使用（または少人数使用）目的です。開始･終了時刻を指定して作成します。会議室が有効である期間、カレンダーに表示されます。</entry>
+  <entry key="783">司会者以外の方は実行できません。</entry>
+  <entry key="784">司会者権限を許可</entry>
+  <entry key="785">ホワイトボードへのアクセスを許可</entry>
+  <entry key="786">カメラ・マイクへのアクセスを許可</entry>
+  <entry key="787">このセッションは既に使用済です</entry>
+  <entry key="788">開始</entry>
+  <entry key="789">終了</entry>
+  <entry key="790">終了してよろしいですか? 終了しても、アップロード済みのドキュメント、ホワイトボード、チャット内容は消去されずに残ることにご注意ください。</entry>
+  <entry key="791">終了確認</entry>
+  <entry key="792">会議室</entry>
+  <entry key="793">会議室を選択してください。</entry>
+  <entry key="794">未保存のイベントがあります。保存するか、削除してください。</entry>
+  <entry key="795">最低一人以上の参加者を選択してください!</entry>
+  <entry key="796">このイベントを削除してよろしいですか?</entry>
+  <entry key="797">警告</entry>
+  <entry key="798">イベントを追加する</entry>
+  <entry key="799">日表示</entry>
+  <entry key="800">週表示</entry>
+  <entry key="801">月表示</entry>
+  <entry key="802">概要</entry>
+  <entry key="803">参加者</entry>
+  <entry key="804">{0} (オープン・ミーティングス) ウェブ会議プラットホーム</entry>
+  <entry key="805">会議を予約する</entry>
+  <entry key="806">イベントをカレンダーに追加して会議を設定します。イベントのそれぞれについて会議室が自動生成されます。</entry>
+  <entry key="807">お困りですか?</entry>
+  <entry key="808">大人数向け会議室</entry>
+  <entry key="809">検索</entry>
+  <entry key="810">追加</entry>
+  <entry key="811">ユーザーが選択されていません。一覧から選択して「追加」を押してください。</entry>
+  <entry key="812">参加者を追加</entry>
+  <entry key="813">保存</entry>
+  <entry key="814">削除</entry>
+  <entry key="815">イベント詳細</entry>
+  <entry key="816">デフォルト司会者</entry>
+  <entry key="817">特権</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">姓名</entry>
+  <entry key="820">Eメール</entry>
+  <entry key="821">デフォルト司会者を追加</entry>
+  <entry key="822">は特権司会者です</entry>
+  <entry key="823">この項目が選択されている場合、司会進行権保持者(または管理者)は入室によって自動的に司会者権限を与えられます。会議の際、特定のユーザーを司会者に指定したい場合は、この項目を選択しないでください。</entry>
+  <entry key="824">特別司会進行権保持者は、入室によって自動的に司会者権限を与えられます(他のユーザーがこのユーザーから司会者権限を奪い取ることはできません)。</entry>
+  <entry key="825">このユーザーに特別司会進行権を付与する</entry>
+  <entry key="826">このユーザーの特別司会進行権を剥奪する</entry>
+  <entry key="827">D</entry>
+  <entry key="828">組織を会議室に登録すると、登録された組織に所属するユーザーのみがその会議室に入室することができます。(「公開」が選択されていない場合(つまり非公開の場合)のみ適用)</entry>
+  <entry key="829">司会進行</entry>
+  <entry key="830">制限</entry>
+  <entry key="831">組織</entry>
+  <entry key="832">よろしいですか?</entry>
+  <entry key="833">選択された項目を削除してよろしいですか？変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="834">ユーザーが選択されていません。追加するユーザーを選択してください。</entry>
+  <entry key="835">司会者を追加する</entry>
+  <entry key="836">このユーザーに特別司会進行権を付与しますか？特別司会進行権保持者は、会議室の司会者になることができます(他のユーザーは特別司会進行権保持者から司会権限を奪い取ることはできません)。変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="837">このユーザーの特別司会進行権を剥奪しますか？変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="838">この参加者は、特別司会進行権を付与されています。あなたは、特別司会進行権保持者から当該権利を剥奪することはできません。</entry>
+  <entry key="839">このファイル/フォルダを削除してよろしいですか？</entry>
+  <entry key="840">ファイル/フォルダを削除しますか？</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">プロパティ</entry>
+  <entry key="844">ビューア上でマウス・ポインタを表示する</entry>
+  <entry key="845">SIPアプレットと音声を共有する</entry>
+  <entry key="846">SIPと音声を、Flashと画像を共有する</entry>
+  <entry key="847">画面サイズに合わせる</entry>
+  <entry key="848">デスクトップを表示する</entry>
+  <entry key="849">ユーザー「</entry>
+  <entry key="850">」さんがデスクトップ共有を要求してます。表示しますか?</entry>
+  <entry key="851">閉じる</entry>
+  <entry key="852">ズーム</entry>
+  <entry key="853">画面が共有ユーザーによって閉じられました!</entry>
+  <entry key="854">一時停止</entry>
+  <entry key="855">新規画面共有</entry>
+  <entry key="856">最小化</entry>
+  <entry key="857">最大化</entry>
+  <entry key="858">ビデオ</entry>
+  <entry key="859">タイムライン</entry>
+  <entry key="860">私の録画</entry>
+  <entry key="861">パブリック録画</entry>
+  <entry key="862">備考</entry>
+  <entry key="863">名称</entry>
+  <entry key="864">全長</entry>
+  <entry key="865">日時</entry>
+  <entry key="866">作成者</entry>
+  <entry key="867">再生</entry>
+  <entry key="868">メイン - ビデオ</entry>
+  <entry key="869">録画</entry>
+  <entry key="870">デスクトップの共有だけでなく録画もできます。デスクトップを公開するためには「共有を開始する」ボタンを押してください。録画をするためには「録画を開始する」をクリックしてください。</entry>
+  <entry key="871">録画を開始する</entry>
+  <entry key="872">録画を停止する</entry>
+  <entry key="873">FLV形式でダウンロードする</entry>
+  <entry key="874">会議室</entry>
+  <entry key="875">再生</entry>
+  <entry key="876">停止</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">共有を停止する</entry>
+  <entry key="879">質疑を許可する</entry>
+  <entry key="880">質疑を許可すると、「質問があります」ボタンが表示されます。</entry>
+  <entry key="881">権限</entry>
+  <entry key="882">AVI形式でダウンロードする</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw スクリーン・ビデオ</entry>
+  <entry key="886">音声のみ</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">録画視聴の準備がまだ整っていません。数分後に再実行してください。</entry>
+  <entry key="889">ログ:</entry>
+  <entry key="890">作成者メッセージ</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIPアプレットの準備が完了していません。</entry>
+  <entry key="893">SIP アカウント設定</entry>
+  <entry key="894">ユーザー毎にSIPを設定します。</entry>
+  <entry key="895">SIP ユーザー</entry>
+  <entry key="896">Sip パスワード</entry>
+  <entry key="897">Sip 認証ID</entry>
+  <entry key="898">SIPゲートウェイにログインできませんでした。SIPプロバイダの認証情報、および各ユーザーのSIPアカウント情報を確認してください。管理者でログインして、構成を確認してください。(一般ユーザーはブロックされます)</entry>
+  <entry key="899">SIPゲートウェイにログインできませんでした。サービス管理者にお問い合わせください。</entry>
+  <entry key="900">SIPゲートウェイにログインしています ...</entry>
+  <entry key="901">SIPゲートウェイにログインしています ...</entry>
+  <entry key="902">ログを表示する</entry>
+  <entry key="903">録画終了時の変換処理のログ</entry>
+  <entry key="904">SIP-アプレット・メッセージ</entry>
+  <entry key="905">SIPアプレットの準備が完了していません。アプレットを承認してOKボタンを押してください。</entry>
+  <entry key="906">司会者になる</entry>
+  <entry key="907">予定の変更を保存する</entry>
+  <entry key="908">予定が変更されました。変更を保存しますか？</entry>
+  <entry key="909">他の録画を見るためには、{0}にログインする必要があります。</entry>
+  <entry key="910">ビデオ表示するユーザーを選択</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">あなたはこのインタビューの司会者です。あなたは、話者を選択したり、録画・録音の開始・停止をすることができます。</entry>
+  <entry key="913">録画・録音を開始</entry>
+  <entry key="914">録画・録音を停止</entry>
+  <entry key="915">インタビュー録画は既に開始されています。</entry>
+  <entry key="916">インタビュー録画は既に停止しているか、まだ開始されていません。</entry>
+  <entry key="917">インタビュー録画は既に開始されています。!</entry>
+  <entry key="918">キャンセル</entry>
+  <entry key="919">インタビュー終了時の変換処理には、インタビュー１分あたり５分を要します。現在の処理の進捗は:</entry>
+  <entry key="920">SIPデータを生成するためには、パスワードを再入力してください</entry>
+  <entry key="921">SIPデータを再生成する</entry>
+  <entry key="922">このファイル/フォルダを、それ自身のサブフォルダに移動することはできません。</entry>
+  <entry key="923">ホーム・ドライブ使用量</entry>
+  <entry key="924">パブリック・ドライブ使用量</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">各ユーザーにライセンスを付与する際、使用期限を設定するか、最大使用量制限(分で指定)を設定することができます。</entry>
+  <entry key="927">ライセンスを検証する</entry>
+  <entry key="928">使い放題コース</entry>
+  <entry key="929">有効期限</entry>
+  <entry key="930">残り秒数</entry>
+  <entry key="931">合計時間</entry>
+  <entry key="932">ライセンスの有効期限が切れました。新たにライセンスを購入してください。(分単位ライセンス、または「使い放題コース」ライセンスがあります)</entry>
+  <entry key="933">購入する</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">ユーザー・ライセンス情報</entry>
+  <entry key="936">情報</entry>
+  <entry key="937">閉じる</entry>
+  <entry key="938">ライセンスの有効期限が切れました。新たにライセンスを購入してください。(分単位ライセンス、または「使い放題コース」ライセンスがあります)</entry>
+  <entry key="939">ライセンス設定</entry>
+  <entry key="940">分単位でウェブ会議の利用権を購入することが出来ます。&lt;br/&gt;&lt;br/&gt; または、3～12ヶ月の定額利用権を購入することが出来ます。&lt;br/&gt;&lt;br/&gt;招待状（会議室に直接入室可能なリンク）の送付、および外部の参加者をともなう、カレンダーからの会議室作成機能は、定額利用権でのみ提供されます。</entry>
+  <entry key="941">60分利用権 9.99€（分当り16セント）を購入</entry>
+  <entry key="942">5時間利用権 19.99€（分当り6セント）を購入</entry>
+  <entry key="943">3ヶ月利用権 29.99€（月当り9.99セント）を購入</entry>
+  <entry key="944">6ヶ月利用権 39.99€（月当り6.66セント）を購入</entry>
+  <entry key="945">分単位利用権</entry>
+  <entry key="946">定額利用権</entry>
+  <entry key="947">無制限ライセンス</entry>
+  <entry key="948">ライセンス有効期限：</entry>
+  <entry key="949">分単位利用権を購入済みです。残り：</entry>
+  <entry key="950">新しいライセンスを購入してください。</entry>
+  <entry key="951">専用ミーティング・サーバーをお考えですか？</entry>
+  <entry key="952">{0}のインストール、あるいはMoodle／SugraCRM、ウェブサイトやイントラネットとの統合をお考えなら、Prizingsへご相談を！インストール当り500ユーロから承ります。</entry>
+  <entry key="953">メッセージを送信</entry>
+  <entry key="954">返信先：</entry>
+  <entry key="955">メッセージ：</entry>
+  <entry key="956">送信</entry>
+  <entry key="957">Prizings コンタクト先はこちら。</entry>
+  <entry key="958">クレジットカード詳細</entry>
+  <entry key="959">名</entry>
+  <entry key="960">姓</entry>
+  <entry key="961">クレジットカードタイプ</entry>
+  <entry key="962">VISAカード</entry>
+  <entry key="963">マスターカード</entry>
+  <entry key="964">ディスカバーカード</entry>
+  <entry key="965">アメリカン・エクスプレス</entry>
+  <entry key="966">クレジットカード番号</entry>
+  <entry key="967">有効期限</entry>
+  <entry key="968">カード確認番号</entry>
+  <entry key="969">請求先</entry>
+  <entry key="970">住所</entry>
+  <entry key="971"></entry>
+  <entry key="972">市区町村</entry>
+  <entry key="973">国</entry>
+  <entry key="974">州 (米国のみ)</entry>
+  <entry key="975">郵便番号</entry>
+  <entry key="976">数量</entry>
+  <entry key="977">送信</entry>
+  <entry key="978">ステップ１： {0} - 支払いフォーム</entry>
+  <entry key="979">Eメール</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">送信して購入</entry>
+  <entry key="983">クリックして購入</entry>
+  <entry key="984">ステップ３：{0} 支払い - 内容をご確認ください</entry>
+  <entry key="985">お名前</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">{0}のご利用ありがとうございました!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">分</entry>
+  <entry key="994">月</entry>
+  <entry key="995">ユーロ</entry>
+  <entry key="996">状態</entry>
+  <entry key="997">納品書</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">このメール・アドレスは既に他のユーザーに使用されています。</entry>
+  <entry key="1001">SIP設定</entry>
+  <entry key="1002">会議番号、およびPINは、OpenXG RPCゲートウェイ経由で自動生成されます。</entry>
+  <entry key="1003">SIP番号</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">現在表示中のスライド内のオブジェクトだけを消去!</entry>
+  <entry key="1006">ステータス・バーに入力されたURLのみが参加者に送付されます!</entry>
+  <entry key="1007">チーム・ルームの作成 [Breakout session]</entry>
+  <entry key="1008">作成するチーム・ルームに所属させるユーザーを選択してください。</entry>
+  <entry key="1009">メンバーを指定して、新しい小会議室 (チーム・ルーム) に移動することができます。指定されたメンバーは、強制的にチーム・ルームに移動させられるか、あるいは、通知メッセージが送信されます。また、チーム・ルーム室長(管理者)には、加えて、管理下のチーム・ルーム一覧が表示され、室長は必要に応じて各チーム・ルームの応援に駆けつけることができます。</entry>
+  <entry key="1010">ユーザー名</entry>
+  <entry key="1011">ログイン</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">ユーザー一覧 チーム・ルーム:</entry>
+  <entry key="1014">チーム・ルームを作成する</entry>
+  <entry key="1015">キャンセル</entry>
+  <entry key="1016">最低ひとり以上のユーザーをチームに登録する必要があります。</entry>
+  <entry key="1017">ユーザーをチームに追加する</entry>
+  <entry key="1018">ユーザーをチームから削除する</entry>
+  <entry key="1019">ユーザーは、チーム・ルーム室長です。(室長は、チーム・ルームの管理者です。メンバーはいつでも室長をチーム・ルームに呼び出すことができます)</entry>
+  <entry key="1020">ルーム・タイプ</entry>
+  <entry key="1021">「メンバーを新規チーム・ルームに強制移動する」を選択した場合、選択されたメンバーはチーム・ルームに自動的に移動します。強制移動を選択しなかった場合、各メンバーには通知メッセージが送付されます。通知メッセージには、チーム・ルームに&lt;i&gt;移動することができる&lt;i&gt;ボタンがあり、それを押すことによってチーム・ルームに移動することができます。</entry>
+  <entry key="1022">チーム・ルーム管理</entry>
+  <entry key="1023">あなたは、あなたが管理するチーム・ルーム(あなたが室長のチーム・ルーム)の間を自由に行き来できます。管理下のチーム・メンバーは、あなたにいつでも応援要請メッセージを送信することができます。また、あなたは管理するチーム・ルームをいつでも閉鎖することもできます。</entry>
+  <entry key="1024">メンバーを新規チーム・ルームに強制移動する</entry>
+  <entry key="1025">チーム名</entry>
+  <entry key="1026">作成日時</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">追加するメンバー</entry>
+  <entry key="1030">メンバーを追加するには「＋」を、削除するには「－」を押してください!</entry>
+  <entry key="1031">1) チーム・ルームの設定</entry>
+  <entry key="1032">2) チーム・メンバーの追加</entry>
+  <entry key="1033">チーム・ルーム名</entry>
+  <entry key="1034">チーム・ルーム</entry>
+  <entry key="1035">会議室変更</entry>
+  <entry key="1036">このチーム・ルームに移動する</entry>
+  <entry key="1037">チーム・ルームを終了し、全メンバーをログアウトさせる</entry>
+  <entry key="1038">新規チーム・ルーム</entry>
+  <entry key="1039">新規チーム・ルームがあります。</entry>
+  <entry key="1040">チーム・ルームに移動</entry>
+  <entry key="1041">チーム・ルーム・アクション</entry>
+  <entry key="1042">再度このウィンドウを開く場合は、「アクション」から行ってください。</entry>
+  <entry key="1043">チーム・ルーム室長にメッセージを送信する</entry>
+  <entry key="1044">新規チーム・ルーム</entry>
+  <entry key="1045">新規チーム・ルームがあります。あなたは、そのチーム・ルームに入室することができます。チーム・ルームは、言わば「ワークショップ・グループ」のようなものです。あなたのチーム・ルームには、「私の会議室」からも入室できます。</entry>
+  <entry key="1046">チーム・ルームに移動</entry>
+  <entry key="1047">作成者:</entry>
+  <entry key="1048">チーム・ルーム名:</entry>
+  <entry key="1049">このウィンドウは、あなたの退室後も開いたままになります!</entry>
+  <entry key="1050">チーム・ルームのメンバー</entry>
+  <entry key="1051">3) あなたが移動することができる、チーム・ルーム</entry>
+  <entry key="1052">チーム・ルーム室長にメッセージを送信します。例えば、討論中の件で何か質問したいことができ、室長に応援を依頼したいときなど。</entry>
+  <entry key="1053">送信</entry>
+  <entry key="1054">2) このチーム・ルームに参加要請したメンバー</entry>
+  <entry key="1055">さんは、チーム・ルーム室長です。</entry>
+  <entry key="1056">参加要請したメンバー全員が揃いました。</entry>
+  <entry key="1057">チーム・ルーム室長がいません!</entry>
+  <entry key="1058">メッセージを入力してください。</entry>
+  <entry key="1059">私たちのチームが問題を抱えているので、応援をお願いします!</entry>
+  <entry key="1060">チームが、あなたの応援を要請しています。</entry>
+  <entry key="1061">チーム・ルームから応援要請</entry>
+  <entry key="1062">メッセージ:</entry>
+  <entry key="1063">送信者:</entry>
+  <entry key="1064">あなたは現在、どのチーム・ルームにも入室していませんが、過去に入室したことのあるチーム・ルームに入室することができます。</entry>
+  <entry key="1065">システムをバックアップします。バックアップには、ユーザーが生成した、あらゆるデータが含まれます。サーバ設定、および各言語ラベルはバックアップされません。システムをより新しいバージョンにアップデートする場合は、&lt;br&gt;(1)まずバックアップ・ファイルにエクスポートし、&lt;br&gt;(2)新規に作成したデータベース上にアプリケーションを再インストールし、&lt;br&gt;(3)バックアップ・ファイルをインポート、してください。バックアップ・ファイルのインポートは、新システム上で最初に行う必要があります。</entry>
+  <entry key="1066">システム･バックアップ</entry>
+  <entry key="1067">ユーザーに対し画面共有/録画を許可する</entry>
+  <entry key="1068">ユーザーに対し画面共有/録画を拒否する</entry>
+  <entry key="1069">このユーザーは司会者であるため全ての権限を与えられています!</entry>
+  <entry key="1070">さんが画面の共有/録画を要求しています。</entry>
+  <entry key="1071">あなたは画面の共有/録画をする権限を与えられています</entry>
+  <entry key="1072">画面の共有/録画を行う権限を適用する。</entry>
+  <entry key="1073">画面/録画の共有を行うことを許可/拒否する</entry>
+  <entry key="1074">サウンドをオフ</entry>
+  <entry key="1075">サウンドをオン</entry>
+  <entry key="1076">音声のみの会議室</entry>
+  <entry key="1077">このフラッグをオンにすると、ユーザーは会議室で音声のみ使用できるようになります(ビデオ無し)。これにより、ネットワーク帯域を節約することができます。</entry>
+  <entry key="1078">リモート制御を許可 (デスクトップ共有中)</entry>
+  <entry key="1079">リモート制御を拒否 (デスクトップ共有中)</entry>
+  <entry key="1080">リモート制御権限を適用する (デスクトップ共有中)</entry>
+  <entry key="1081">あなたは、リモート画面の制御を許可されています(デスクトップ共有時)</entry>
+  <entry key="1082">さんがリモート画面の制御権限を要求しています。</entry>
+  <entry key="1083">ユーザーは司会者です。司会者はすべてのアクションを行うことができます! [リモート・デスクトップ制御]</entry>
+  <entry key="1084">デスクトップ共有中のリモート・コントロールを許可/拒否する</entry>
+  <entry key="1085">1) あなたのPCからリモートPCへ: あなたのPCのクリップボードからリモートPC画面にテキストをコピーするには、画面をクリックし続いてテキスト上で右クリックしてメニューを表示して「挿入」を選択します。&lt;br/&gt;&lt;br/&gt;2) リモートPCからあなたのPCへ: リモートPCからあなたのPCのクリップボードにテキストをコピーするには、リモート画面上のテキスト上でテキストをハイライト選択し、リモート画面上で右クリックしてメニューを表示し「&lt;i&gt;ハイライトされたテキストをコピー&amp;lt;/i&gt;」を選択します。</entry>
+  <entry key="1086">あなたのPCとリモートPCの間で相互にテキストのコピー&amp;ペーストを行うには</entry>
+  <entry key="1087">ハイライトされたテキストをコピー</entry>
+  <entry key="1088">コピー&amp;ペースト手順</entry>
+  <entry key="1089">画面共有の品質:</entry>
+  <entry key="1090">超高品質</entry>
+  <entry key="1091">高品質</entry>
+  <entry key="1092">中品質</entry>
+  <entry key="1093">低品質</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">キーボード:</entry>
+  <entry key="1097">ウェビナーを閉じる</entry>
+  <entry key="1098">ウェビナーは既に終了しています。</entry>
+  <entry key="1099">会議室を閉鎖する</entry>
+  <entry key="1100">終了URL</entry>
+  <entry key="1101">閉鎖設定</entry>
+  <entry key="1102">会議室を閉鎖すると、ユーザーは終了URLにリダイレクトされます。</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">識別名</entry>
+  <entry key="1106">設定ファイル</entry>
+  <entry key="1107">LDAP設定</entry>
+  <entry key="1108">識別名</entry>
+  <entry key="1109">有効化</entry>
+  <entry key="1110">登録日時</entry>
+  <entry key="1111">登録者</entry>
+  <entry key="1112">更新日時</entry>
+  <entry key="1113">更新者</entry>
+  <entry key="1114">設定ファイルは、フォルダ 'webapps/openmeetings/conf' に置かれている必要があります。前もって手動アップロードしておいてください。設定ファイルに対する変更は逐次オンライン反映されます。</entry>
+  <entry key="1115">設定ファイル名</entry>
+  <entry key="1116">「ドメインをユーザー名に付加する」を選択すると、指定したドメインが、ログイン画面で指定したログイン名に自動的に付加されます。もしLDAPに、ドメイン名付きのログイン名が保存されている場合に利用してください。例: ログイン名「hans」、ドメイン名「localhost.com」の場合、「hans@localhost.com」でLDAP認証を行います。</entry>
+  <entry key="1117">ドメインをユーザー名に付加する</entry>
+  <entry key="1118">ドメイン</entry>
+  <entry key="1119">挿入</entry>
+  <entry key="1120">ハイライトされたテキストをコピー</entry>
+  <entry key="1121">リモートPCのクリップボード・テキスト</entry>
+  <entry key="1122">リモートPCのクリップボードを表示する</entry>
+  <entry key="1123">次回は表示しない</entry>
+  <entry key="1124">テキストをここにコピーする ...</entry>
+  <entry key="1125">リモート画面との間でコピー&amp;ペーストするためには、リモート制御(またはモデーレーション)権限が必要です。</entry>
+  <entry key="1126">デフォルト設定を編集する ...</entry>
+  <entry key="1127">リモート・コントロールでコピー&amp;ペーストについての情報ボックスを表示しない</entry>
+  <entry key="1128">保存</entry>
+  <entry key="1129">削除</entry>
+  <entry key="1130">キャンセル</entry>
+  <entry key="1131">ユーザーを会議室に招待する</entry>
+  <entry key="1132">会議室を選択してください。参加依頼を受けるユーザーには、あなたの名前、メッセージとともに会議室へのリンクが発行されます。</entry>
+  <entry key="1133">ログイン日時:</entry>
+  <entry key="1134">参加依頼の送信後に入室する</entry>
+  <entry key="1135">参加を依頼する</entry>
+  <entry key="1136">メッセージ</entry>
+  <entry key="1137">会議への参加を依頼されています。依頼者＝</entry>
+  <entry key="1138">参加依頼メッセージ</entry>
+  <entry key="1139">参加依頼を送信する</entry>
+  <entry key="1140">さんは、あなたからの参加依頼をdid &lt;b&gt;拒否&lt;/b&gt;しました!</entry>
+  <entry key="1141">承認</entry>
+  <entry key="1142">拒否</entry>
+  <entry key="1143">タイムゾーン</entry>
+  <entry key="1144">イベント詳細</entry>
+  <entry key="1145">名称</entry>
+  <entry key="1146">概要</entry>
+  <entry key="1147">作成者</entry>
+  <entry key="1148">タイムゾーン設定を勧奨</entry>
+  <entry key="1149">次回ログイン時にタイムゾーン設定を行うことを進めるメッセージを表示する場合にチェックを入れてください。</entry>
+  <entry key="1150">ユーザー・プロフィールのタイムゾーン設定を確認してください。</entry>
+  <entry key="1151">{0}会議が設定されました:</entry>
+  <entry key="1152">詳細:</entry>
+  <entry key="1153">開始時刻:</entry>
+  <entry key="1154">終了時刻:</entry>
+  <entry key="1155">{0}会議が更新されました:</entry>
+  <entry key="1156">主催者:</entry>
+  <entry key="1157">{0}会議がキャンセルされました:</entry>
+  <entry key="1158">{0}会議リマインダ:</entry>
+  <entry key="1159">コミュニティ設定</entry>
+  <entry key="1160">コンタクト・データを全員に公開する</entry>
+  <entry key="1161">あなたのお勧めや、興味あるものを指定します。これらはパートナーを検索する際に利用されます。複数項目を指定する場合は、各項目をコンマで区切って指定してください。(例: 医療サービス, 健康保険, ...)</entry>
+  <entry key="1162">私のお勧め</entry>
+  <entry key="1163">私の関心</entry>
+  <entry key="1164">姓名</entry>
+  <entry key="1165">タイムゾーン</entry>
+  <entry key="1166">興味・関心</entry>
+  <entry key="1167">コンタクト情報</entry>
+  <entry key="1168">コンタクト・データをコンタクトにのみ公開する</entry>
+  <entry key="1169">コンタクト・データを非公開にする</entry>
+  <entry key="1170">プロフィール</entry>
+  <entry key="1171">設定</entry>
+  <entry key="1172">ユーザー検索</entry>
+  <entry key="1173">他のユーザーが見るのと同じ表示形態であなたのプロフィールを表示します</entry>
+  <entry key="1174">プロフィールを設定します。関心事項を設定して他のユーザーが検索できるようにできます</entry>
+  <entry key="1175">ユーザーを検索して、あなたのネットワークを広げましょう</entry>
+  <entry key="1176">検索</entry>
+  <entry key="1177">お勧め</entry>
+  <entry key="1178">ユーザー名</entry>
+  <entry key="1179">検索テキスト</entry>
+  <entry key="1180">姓名</entry>
+  <entry key="1181">タイムゾーン</entry>
+  <entry key="1182">お勧め</entry>
+  <entry key="1183">関心</entry>
+  <entry key="1184">検索結果</entry>
+  <entry key="1185">アクション</entry>
+  <entry key="1186">コンタクトを追加する</entry>
+  <entry key="1187">メッセージを送信する</entry>
+  <entry key="1188">コンタクトとメッセージ</entry>
+  <entry key="1189">承認待ちコンタクト</entry>
+  <entry key="1190">承認</entry>
+  <entry key="1191">拒否</entry>
+  <entry key="1192">こちらは{0}です。</entry>
+  <entry key="1193">さんが、あたなをコンタクトに加えることを希望しています。</entry>
+  <entry key="1194">{0}のコンタクト要求を確認するか、承認/拒否のリンクのいずれかをクリックしてください。</entry>
+  <entry key="1195">このユーザーは既にコンタクト・リストに登録済みか、未回答のコンタクト追加要請メッセージを受信済みです。</entry>
+  <entry key="1196">コンタクト・リスト</entry>
+  <entry key="1197">コンタクトとメッセージを編集したり,&lt;br/&gt; 承認待ちコンタクトの処理を行います</entry>
+  <entry key="1198">さんが、あなたをコンタクトとして承認しました!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">チャット･ログを表示/コピーする</entry>
+  <entry key="1201">チャット・ログ</entry>
+  <entry key="1202">送信者</entry>
+  <entry key="1203">件名</entry>
+  <entry key="1204">送信</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">メッセージ</entry>
+  <entry key="1207">新規メール</entry>
+  <entry key="1208">コンタクトに送信するメッセージを新規に作成します</entry>
+  <entry key="1209">新規メッセージ</entry>
+  <entry key="1210">宛先:</entry>
+  <entry key="1211">件名:</entry>
+  <entry key="1212">各ユーザーの画面解像度に合うようにホワイトボードとドキュメントのサイズを変更する。</entry>
+  <entry key="1213">ユーザーを追い出す</entry>
+  <entry key="1214">あなた自身を会議室から追い出すことはできません! 退出する場合は、終了ボタンをクリックするかブラウザを閉じてください!</entry>
+  <entry key="1215">このユーザーを会議室から切断してよろしいですか?</entry>
+  <entry key="1216">アクションの確認 ...</entry>
+  <entry key="1217">特権司会者を会議室から追い出すことはできません!</entry>
+  <entry key="1218">会議室を予約する</entry>
+  <entry key="1219">開始</entry>
+  <entry key="1220">終了</entry>
+  <entry key="1221">ミーティングをスケジュールします。全てのミーティング参加予定者のカレンダーにイベントが追加されます。</entry>
+  <entry key="1222">受信箱</entry>
+  <entry key="1223">送信</entry>
+  <entry key="1224">ゴミ箱</entry>
+  <entry key="1225">あなた自身をコンタクトに加えることはできません。</entry>
+  <entry key="1226">ユーザーは既に拒否されています!</entry>
+  <entry key="1227">ユーザーは既に承認されています!</entry>
+  <entry key="1228">コンタクト・ハッシュが不正です!</entry>
+  <entry key="1229">コンタクト・リストに追加されました!</entry>
+  <entry key="1230">ユーザーは拒否されました。承認待ちリストからも削除されました。</entry>
+  <entry key="1231">該当するコンタクトがありません!</entry>
+  <entry key="1232">コンタクトを削除してよろしいですか?</entry>
+  <entry key="1233">コンタクト削除の確認</entry>
+  <entry key="1234">コンタクトを一覧から削除する</entry>
+  <entry key="1235">ユーザー・プロフィール</entry>
+  <entry key="1236">ユーザー・プロフィールを表示する</entry>
+  <entry key="1237">メッセージ</entry>
+  <entry key="1238">検索</entry>
+  <entry key="1239">全てを選択</entry>
+  <entry key="1240">選択を解除</entry>
+  <entry key="1241">未読を選択</entry>
+  <entry key="1242">既読を選択</entry>
+  <entry key="1243">フォルダに移動 ...</entry>
+  <entry key="1244">新規フォルダを追加 ...</entry>
+  <entry key="1245">削除</entry>
+  <entry key="1246">削除したメールは、ゴミ箱の中にまだ残されています!</entry>
+  <entry key="1247">未読にする</entry>
+  <entry key="1248">既読にする</entry>
+  <entry key="1249">回答</entry>
+  <entry key="1250">全員に回答</entry>
+  <entry key="1251">フォワード</entry>
+  <entry key="1252">アクション ...</entry>
+  <entry key="1253">プライベート・メッセージを送信する</entry>
+  <entry key="1254">選択がありません</entry>
+  <entry key="1255">受信箱に移動する</entry>
+  <entry key="1256">削除する (最終)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">新規フォルダ</entry>
+  <entry key="1259">フォルダを追加してメッセージを整理します</entry>
+  <entry key="1260">新規フォルダ</entry>
+  <entry key="1261">追加</entry>
+  <entry key="1262">フォルダを削除する</entry>
+  <entry key="1263">フォルダを削除できません。フォルダ内にメッセージが存在します! あらかじめメッセージを削除するか、他のフォルダに移動してください。</entry>
+  <entry key="1264">姓名を編集する</entry>
+  <entry key="1265">フォルダを削除してよろしいですか? 削除されたフォルダは復元できないことにご注意ください。</entry>
+  <entry key="1266">承認依頼が送信されました。承認されたユーザーのみがコンタクト・リストに追加されます。</entry>
+  <entry key="1267">メッセージ</entry>
+  <entry key="1268">ユーザーは個人コンタクト・データを共有していません。</entry>
+  <entry key="1269">ユーザーは個人コンタクト・データをコンタクトとのみ共有しています。</entry>
+  <entry key="1270">住所 &amp; 電話番号</entry>
+  <entry key="1271">参加依頼コードが無効です。参加依頼コードは一定期間のみ有効です。</entry>
+  <entry key="1272">このイベントは他のユーザーのカレンダーにリンクしています。イベントを更新すると、他のユーザーのカレンダーにも更新が反映されます。イベントを更新してよろしいですか?</entry>
+  <entry key="1273">更新の確認</entry>
+  <entry key="1274">コンタクトに私のカレンダーを公開する (書き込みはできません)</entry>
+  <entry key="1275">カレンダーを共有しない</entry>
+  <entry key="1276">コンタクトのカレンダー</entry>
+  <entry key="1277">コンタクトのカレンダーを見るためには、コンタクトの承認が必要です。</entry>
+  <entry key="1278">他のユーザーのカレンダーからイベントを削除/保存することはできません!</entry>
+  <entry key="1279">カレンダーを再表示する!</entry>
+  <entry key="1280">このイベントは他のユーザーのカレンダーにリンクしています。イベントを削除すると、他のユーザーのカレンダーからも削除されます。イベントを削除してよろしいですか?</entry>
+  <entry key="1281">アクションの確認</entry>
+  <entry key="1282">入室</entry>
+  <entry key="1283">会議室にアクセスする</entry>
+  <entry key="1284">プライベート・メッセージ付き会議室/イベントがあります。</entry>
+  <entry key="1285">あらかじめイベントを保存してください!</entry>
+  <entry key="1286">指定された会議室が見つかりません。イベントおよび会議室は既に削除されています!</entry>
+  <entry key="1287">ニックネームを選択してください</entry>
+  <entry key="1288">名</entry>
+  <entry key="1289">姓</entry>
+  <entry key="1290">Eメール</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">姓・名ともに4文字以上の長さが必要です。</entry>
+  <entry key="1293">Eメール・アドレスが無効です!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Facebookアカウントでログインする</entry>
+  <entry key="1296">登録日</entry>
+  <entry key="1297">Facebookアカウントでログインしました。プロフィールに適切なEメール・アドレスを設定してください。さもないと、参加依頼やプライベート・メッセージを受信することができません。</entry>
+  <entry key="1298">メッセージ</entry>
+  <entry key="1299">プロフィール更新についてのメッセージを今後表示しない</entry>
+  <entry key="1300">詳細表示オプション ...</entry>
+  <entry key="1301">新規プライベート・メッセージ:</entry>
+  <entry key="1302">メッセージ全体を見るにはここをクリックしてください ...</entry>
+  <entry key="1303">再生</entry>
+  <entry key="1304">会議室とチャット</entry>
+  <entry key="1305">私の会議室</entry>
+  <entry key="1306">私の会議室 (ユーザー数 1-16 向け)</entry>
+  <entry key="1307">ウェビナー (ユーザー数 1-120 向け)</entry>
+  <entry key="1308">会議室の管理者(室長)</entry>
+  <entry key="1309">パスワードを入力してください</entry>
+  <entry key="1310">ユーザー・レベル、司会者、または管理者権限を有するアカウントが必要です。</entry>
+  <entry key="1311">ウェブ・サービス (SOAPでのみ適用)</entry>
+  <entry key="1312">ホワイトボードに直接ロードする</entry>
+  <entry key="1313">ホワイトボードを削除してよろしいですか？ 注意：削除したホワイトボードは元に戻せません!!</entry>
+  <entry key="1314">ホワイトボードにロードする</entry>
+  <entry key="1315">録画する必要がある場合は、録画を開始してください。だれかが録画を開始しない限り、会議の録画はされません。</entry>
+  <entry key="1316">録画を開始</entry>
+  <entry key="1317">矢印</entry>
+  <entry key="1318">円</entry>
+  <entry key="1319">線</entry>
+  <entry key="1320">四角形</entry>
+  <entry key="1321">三角形</entry>
+  <entry key="1322">テキスト・注釈</entry>
+  <entry key="1323">クリップアート</entry>
+  <entry key="1324">フリーライン</entry>
+  <entry key="1325">選択・移動</entry>
+  <entry key="1326">図形描画</entry>
+  <entry key="1327">切り取り・移動</entry>
+  <entry key="1328">ズーム・イン/アウト</entry>
+  <entry key="1329">印刷</entry>
+  <entry key="1330">元に戻す</entry>
+  <entry key="1331">ゴミ箱</entry>
+  <entry key="1332">グリッド線を表示</entry>
+  <entry key="1333">ファイル共有</entry>
+  <entry key="1334">図形を選択</entry>
+  <entry key="1335">クリップアートを選択</entry>
+  <entry key="1336">コピー</entry>
+  <entry key="1337">切り取り</entry>
+  <entry key="1338">貼り付け</entry>
+  <entry key="1339">削除</entry>
+  <entry key="1340">ホワイトボードの内容を全て削除してよろしいですか？</entry>
+  <entry key="1341">ホワイトボードに直接ロードする</entry>
+  <entry key="1342">参加者</entry>
+  <entry key="1343">参加者マネージャ</entry>
+  <entry key="1344">在席</entry>
+  <entry key="1345">リモートコントロール</entry>
+  <entry key="1346">追い出す</entry>
+  <entry key="1347">チャット</entry>
+  <entry key="1348">参加者を招待する</entry>
+  <entry key="1349">メール使用</entry>
+  <entry key="1350">ユーザーは司会者です</entry>
+  <entry key="1351">ユーザーはウェブカメラをオンラインにしました</entry>
+  <entry key="1352">塗りつぶしを無効にする</entry>
+  <entry key="1353">塗りつぶしを有効にする</entry>
+  <entry key="1354">グリッドに位置を合わせる</entry>
+  <entry key="1355">録画を許可する</entry>
+  <entry key="1356">録画開始まで待機する</entry>
+  <entry key="1357">トップバーを隠す</entry>
+  <entry key="1358">録画を再生する</entry>
+  <entry key="1359">表示中のスライドの内容を削除してよろしいですか？</entry>
+  <entry key="1360">ユーザー権限を許可する</entry>
+  <entry key="1361">メッセージを拒否して削除する</entry>
+  <entry key="1362">私</entry>
+  <entry key="1363">アクティビティ/アクション</entry>
+  <entry key="1364">ホワイトボードを削除する</entry>
+  <entry key="1365">ホワイトボードを削除したり、書き込んだりするためには権限または許可が必要です。</entry>
+  <entry key="1366">許可されていません</entry>
+  <entry key="1367">さんは会議室から退室しました</entry>
+  <entry key="1368">数式アイコン</entry>
+  <entry key="1369">カテゴリ無し</entry>
+  <entry key="1370">カラー・スタイル</entry>
+  <entry key="1371">回線品質</entry>
+  <entry key="1372">ドメイン</entry>
+  <entry key="1373">プロジェクト</entry>
+  <entry key="1374">レッドオレンジ</entry>
+  <entry key="1375">海緑色</entry>
+  <entry key="1376">暗青灰色</entry>
+  <entry key="1377">青灰色</entry>
+  <entry key="1378">ゴールデンレッド</entry>
+  <entry key="1379">銀白色</entry>
+  <entry key="1380">ユーザー定義</entry>
+  <entry key="1381">最高</entry>
+  <entry key="1382">アップロード</entry>
+  <entry key="1383">中位</entry>
+  <entry key="1384">マイクを無効にする</entry>
+  <entry key="1385">マイクを有効にする</entry>
+  <entry key="1386">他の参加者のマイクを無効にして私のマイクだけを有効にする (F12)</entry>
+  <entry key="1387">あなたのマイクは、司会者によって無効化されています。あなた自身の手でマイクを有効化することはできません。</entry>
+  <entry key="1388">あなたのマイクを無効にしますか？</entry>
+  <entry key="1389">あなたのマイクを無効にしてよろしいですか？無効にすると、他の参加者はだれも、あなたの音声を聞くことができなくなります。</entry>
+  <entry key="1390">消音してよろしいですか？</entry>
+  <entry key="1391">この参加者のマイクからの音声を消音してよろしいですか？この操作は、あなたの端末上で消音するだけであって、他の参加者は指定のマイクからの音声を引き続き聞くことができます。司会者だけが、全参加者のマイクの有効化・無効化を行うことができます。</entry>
+  <entry key="1392">マイクを無効にしてよろしいですか？</entry>
+  <entry key="1393">この参加者のマイクを無効化してよろしいですか？他の参加者はだれも、この参加者の音声を聞くことができなくなります。</entry>
+  <entry key="1394">あなたのマイクは有効です。ここをクリックして、司会者にマイクの無効化を依頼することができます。</entry>
+  <entry key="1395">あなたのマイクは無効です。ここをクリックして、司会者にマイクの有効化を依頼することができます。</entry>
+  <entry key="1396">は、マイクの無効化を依頼します。</entry>
+  <entry key="1397">は、マイクの有効化を依頼します。</entry>
+  <entry key="1398">さんが、参加者のマイクの有効化を依頼しています。</entry>
+  <entry key="1399">さんが、参加者のマイクの無効化を依頼しています。</entry>
+  <entry key="1400">マイクを有効化する</entry>
+  <entry key="1401">マイクを無効化する</entry>
+  <entry key="1402">この参加者は、司会者によってマイクを無効にされています。あなたの手で有効化することはできません。</entry>
+  <entry key="1403">あなたのマイクを無効化します</entry>
+  <entry key="1404">あなたのマイクを有効化します</entry>
+  <entry key="1405">マイクを無効にする</entry>
+  <entry key="1406">マイクを有効にする</entry>
+  <entry key="1407">マイクを無効にする</entry>
+  <entry key="1408">マイクを有効にする</entry>
+  <entry key="1409">司会者だけが各参加者のマイクの有効・無効を設定できます。あなた自身のマイクを消音したい場合は、あなたのビデオ画面中のマイク・アイコンを使ってください。</entry>
+  <entry key="1410">投票名</entry>
+  <entry key="1411">あなた</entry>
+  <entry key="1412">過去の投票</entry>
+  <entry key="1413">実施中の投票</entry>
+  <entry key="1414">シンプル・チャート</entry>
+  <entry key="1415">パイ・チャート</entry>
+  <entry key="1416">メールアドレスを入力してください</entry>
+  <entry key="1417">新着メッセージ</entry>
+  <entry key="1418">投票を締め切る</entry>
+  <entry key="1419">投票を締め切ってよろしいですか？</entry>
+  <entry key="1420">投票を削除する</entry>
+  <entry key="1421">この投票を削除してよろしいですか？同時に投票結果も削除されます。</entry>
+  <entry key="1422">ISO言語コード</entry>
+  <entry key="1423">単独話者になることを許可・拒否する</entry>
+  <entry key="1424">単独話者になることを許可する</entry>
+  <entry key="1425">単独話者になることを拒否する</entry>
+  <entry key="1426">は、単独話者になることを希望します。</entry>
+  <entry key="1427">さんが、単独話者になることを希望しています。</entry>
+  <entry key="1428">単独話者になることを許可する。</entry>
+  <entry key="1429">カメラ解像度</entry>
+  <entry key="1430">解像度の変更はネットワーク帯域に影響します。高解像度のビデオ画像は、より多くのネットワーク帯域を必要とします。</entry>
+  <entry key="1431">あなたは、あなた自身を、あるいは他の参加者を単独話者にする権限を持っていません。司会者に権限を付与してもらうか、司会者に単独話者の指定を依頼してください。</entry>
+  <entry key="1432">私は、単独話者になることができる権限の付与を依頼します。</entry>
+  <entry key="1433">あなたは、自分自身の手で単独話者になることができます。単独話者になるには、ここをクリックしてください。(または、あなたのビデオ画面でクリック、あるいはF12押下でも可能です)</entry>
+  <entry key="1434">マイクは有効です!</entry>
+  <entry key="1435">マイクは消音（無効）です</entry>
+  <entry key="1436">チャットを隠す</entry>
+  <entry key="1437">アクティビティを隠す</entry>
+  <entry key="1438">ファイル・エクスプローラを隠す</entry>
+  <entry key="1439">アクション･メニューを隠す</entry>
+  <entry key="1440">画面共有を隠す</entry>
+  <entry key="1441">ホワイトボードを隠す</entry>
+  <entry key="1442">ビデオにマイク状態を表示する</entry>
+  <entry key="1443">レイアウト・オプション</entry>
+  <entry key="1444">新規イベント</entry>
+  <entry key="1445">カレンダー・イベントを保存時にパスワードを設定する場合、パスワードは、参加者に対して送付される会議室リンクに対して設定されます。会議室にパスワードが設定されるわけではありません。したがって、一つのイベントを、異なるパスワードで複数回保存したような場合、参加者は、異なるパスワードの会議室リンクを受け取ることになります。また、一旦送付されたリンクは、古いパスワードの会議室リンクであっても有効のまま残ります。</entry>
+  <entry key="1446">詳細を編集</entry>
+  <entry key="1447">SIPダイアラーを表示</entry>
+  <entry key="1448">発呼</entry>
+  <entry key="1449">コンタクトのカレンダー・イベントを表示する</entry>
+  <entry key="1450">あなたのホーム!</entry>
+  <entry key="1451">会議予定を作成する</entry>
+  <entry key="1452">録画を視聴する</entry>
+  <entry key="1453">ウェブ会議を選択・開始する</entry>
+  <entry key="1454">ユーザーと権限を管理する</entry>
+  <entry key="1455">接続を管理する／ユーザーを追い出す</entry>
+  <entry key="1456">ユーザー・グループを管理する</entry>
+  <entry key="1457">会議室を管理する</entry>
+  <entry key="1458">システム設定を管理する</entry>
+  <entry key="1459">画面上のラベルを管理する</entry>
+  <entry key="1460">LDAP/ADS構成を管理する</entry>
+  <entry key="1461">システム・バックアップをエクスポート／インポートする</entry>
+  <entry key="1462">ファイル／フォルダのアップロード／追加／削除／ロードを行うためには、司会者であるか、あるいはホワイトボード描画権限が必要です。</entry>
+  <entry key="1463">テキストを編集</entry>
+  <entry key="1464">教授</entry>
+  <entry key="1465">共有画面公開</entry>
+  <entry key="1466">共有画面を公開開始</entry>
+  <entry key="1467">共有画面を公開終了</entry>
+  <entry key="1468">ホスト</entry>
+  <entry key="1469">公開アプリ</entry>
+  <entry key="1470">公開ID</entry>
+  <entry key="1471">共有画面を左に移動するには、共有画面幅を縮小してください。</entry>
+  <entry key="1472">共有画面を下に移動するには、共有画面高を縮小してください。</entry>
+  <entry key="1473">共有画面の幅を拡大するためには、共有画面を左に移動してください。</entry>
+  <entry key="1474">共有画面の高さを拡大するためには、共有画面を上に移動してください。</entry>
+  <entry key="1475">外部プロバイダー向けストリーミングのための設定を行ってください。</entry>
+  <entry key="1476">画面を公開するには、画面共有を開始してください。</entry>
+  <entry key="1477">録画を開始するには、司会者権限が必要です。</entry>
+  <entry key="1478">単独話者権限がありません。司会者権限または単独話者権限が必要です。</entry>
+  <entry key="1479">ファイルをファイル・エクスプローラにアップロード</entry>
+  <entry key="1480">共有設定画面を開く</entry>
+  <entry key="1481">司会者による許可が必要</entry>
+  <entry key="1482">カメラ／マイクの共有を司会者に要求</entry>
+  <entry key="1483">投票によるフィードバック収集</entry>
+  <entry key="1484">投票結果のチャート表示</entry>
+  <entry key="1485">この会議室に投票にあれば投票する</entry>
+  <entry key="1486">カメラ／マイクを設定する</entry>
+  <entry key="1487">退室する</entry>
+  <entry key="1488">外部参加者をVoIP/SIP経由で招待する</entry>
+  <entry key="1489">この会議室へのリンクをEメールで送信する</entry>
+  <entry key="1490">ホワイトボードを設定する</entry>
+  <entry key="1491">最大アップロード・サイズ</entry>
+  <entry key="1492">ホワイトボードの共有を司会者に要求する</entry>
+  <entry key="1493">プライベート・チャットを開始する</entry>
+  <entry key="1494">すべて</entry>
+  <entry key="1495">自分自身とのプライベート・チャットを開始することは出来ません。</entry>
+  <entry key="1496">指定された参加者とのプライベート・チャットは既に開始されています。</entry>
+  <entry key="1497">このプライベート・チャットを削除してよろしいですか？</entry>
+  <entry key="1498">サーバー</entry>
+  <entry key="1499">クラスター参加済みサーバー</entry>
+  <entry key="1500">サーバー名</entry>
+  <entry key="1501">サーバー・アドレス</entry>
+  <entry key="1502">サーバー詳細</entry>
+  <entry key="1503">SMSを送信</entry>
+  <entry key="1504">公開中。ユーザー：</entry>
+  <entry key="1505">バックアップ／リストア／アップグレードを行なう際にコマンドライン・ツールを利用すると、時間とインターネット・トラフィックを節約することができます: &lt;ol&gt; &lt;li&gt;オープンミーティングスのインストール・ディレクトリに移動する (例：/opt/red5)&lt;/li&gt; &lt;li&gt;オープン・ミーティングスを停止する(例： ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (オープン・ミーティングスの現状バックアップを作成する)&lt;/li&gt; &lt;li&gt;オープン・ミーティングスの最新アーカイブをダウンロードする&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (必要に応じて、現環境を移動しておく)&lt;/li&gt; &lt;li&gt;/opt/red5 にダウンロードしたアーカイブを展開する&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip&lt;br/&gt; (デフォルトのデータベースを使用していない場合は './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass')&lt;/li&gt; &lt;li&gt;オープン・ミーティングスを起動する&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">全ユーザーに供用される会議室</entry>
+  <entry key="1507">現ユーザー・グループに供用される会議室</entry>
+  <entry key="1508">現ユーザーの会議室</entry>
+  <entry key="1509">イベント専用会議室を作成／編集する</entry>
+  <entry key="1510">複数のアドレスを書式に含めることができます: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">ストリーミング音量を調整する</entry>
+  <entry key="1512">マイク音量を調整する</entry>
+  <entry key="1513">チャットを制限</entry>
+  <entry key="1514">メッセージを許可</entry>
+  <entry key="1515">チャット画面をデフォルトで表示</entry>
+  <entry key="1516">ファイル画面をデフォルトで表示</entry>
+  <entry key="1517">最終ピング</entry>
+  <entry key="1518">全スレーブは3秒毎(設定可)にピング信号を送信します。マスターがスレーブを利用するためには、最終ピング値は1分未満である必要があります。</entry>
+  <entry key="1519">HTTP ポート</entry>
+  <entry key="1520">ユーザー(SOAP経由)</entry>
+  <entry key="1521">パスワード</entry>
+  <entry key="1522">ウェブ・アプリ・パス</entry>
+  <entry key="1523">プロトコル</entry>
+  <entry key="1524">ピング実行中</entry>
+  <entry key="1525">アクティブ</entry>
+  <entry key="1526">URLを生成</entry>
+  <entry key="1527">ネットワーク・テスト</entry>
+  <entry key="1528">インタビュー用ビデオ・カメラを自動選択</entry>
+  <entry key="1529">下線</entry>
+  <entry key="1530">フォント・スタイル</entry>
+  <entry key="1531">フォント・スタイルを許可</entry>
+  <entry key="1532">フォント色</entry>
+  <entry key="1533">ハイパーリンク</entry>
+  <entry key="1534">セッション統計を表示</entry>
+  <entry key="1535">セッション詳細</entry>
+  <entry key="1536">システム・インポート</entry>
+  <entry key="1537">バックアップにアップロード済みファイルと録音・録画を含める</entry>
+  <entry key="1538">会議室のSIPトランスポートを有効にする</entry>
+  <entry key="1539">このユーザーに単独話者権限を付与してよろしいですか？</entry>
+  <entry key="1540">タイムゾーンを指定してください</entry>
+  <entry key="1541">会議(ユーザー数:1〜25)</entry>
+  <entry key="1542">大人数向け会議(ユーザー数:1〜150)</entry>
+  <entry key="1543">インタビュー(1対1のミーティング；録画付き)</entry>
+  <entry key="1544">指定されたキーの構成は既に存在しています。別のキーを指定するか、既存の構成を編集してください。</entry>
+  <entry key="1545">保存中です。しばらくお待ちください。</entry>
+  <entry key="1546">ようこそ</entry>
+  <entry key="1547">ユーザー基本情報／サポート・リンク ウィジェット</entry>
+  <entry key="1548">ウィジェット</entry>
+  <entry key="1549">について</entry>
+  <entry key="1550">名称</entry>
+  <entry key="1551">バージョン</entry>
+  <entry key="1552">リビジョン</entry>
+  <entry key="1553">ビルド日時</entry>
+  <entry key="1554">ロード中 ...</entry>
+  <entry key="1555">今日</entry>
+  <entry key="1556">1月</entry>
+  <entry key="1557">2月</entry>
+  <entry key="1558">3月</entry>
+  <entry key="1559">4月</entry>
+  <entry key="1560">5月</entry>
+  <entry key="1561">6月</entry>
+  <entry key="1562">7月</entry>
+  <entry key="1563">8月</entry>
+  <entry key="1564">9月</entry>
+  <entry key="1565">10月</entry>
+  <entry key="1566">11月</entry>
+  <entry key="1567">12月</entry>
+  <entry key="1568">リマインダーを送信しない</entry>
+  <entry key="1569">Eメール</entry>
+  <entry key="1570">iCal Eメール</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">OAuth2設定</entry>
+  <entry key="1573">名前</entry>
+  <entry key="1574">有効</entry>
+  <entry key="1575">アイコンURL</entry>
+  <entry key="1576">クライアントID</entry>
+  <entry key="1577">クライアント秘密鍵</entry>
+  <entry key="1578">鍵のURL</entry>
+  <entry key="1579">リクエストトークンURL</entry>
+  <entry key="1580">リクエスト情報URL</entry>
+  <entry key="1581">OAuth2設定</entry>
+  <entry key="1582">ログイン名</entry>
+  <entry key="1583">Email</entry>
+  <entry key="1584">姓</entry>
+  <entry key="1585">名</entry>
+  <entry key="1586">トークン属性値</entry>
+  <entry key="1587">リダイレクトURI</entry>
+  <entry key="1588">Emailアドレスを入力します: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">通信切断時の処理</entry>
+  <entry key="1590">表示</entry>
+  <entry key="1591">アカウントが作成されました。メールを送信しましたのでご確認ください。すぐにログインできます。</entry>
+  <entry key="1592">終了日をご確認ください</entry>
+  <entry key="1593">終了値</entry>
+  <entry key="1594">変換メッセージ</entry>
+  <entry key="1595">録音データがみつかりません</entry>
+  <entry key="1596">ホワイトボード追加</entry>
+  <entry key="1597">Emailアドレスを入力: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">セキュリティ</entry>
+  <entry key="1599">この会議室へは入れません</entry>
+  <entry key="1600">再録音開始</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
new file mode 100644
index 0000000..84c13a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">회의</entry>
+  <entry key="2">모임</entry>
+  <entry key="3">교실</entry>
+  <entry key="4">세딩</entry>
+  <entry key="5">유저</entry>
+  <entry key="6">관리</entry>
+  <entry key="7">정지</entry>
+  <entry key="8">기록</entry>
+  <entry key="9">유효한 파일 없음</entry>
+  <entry key="10">교사 기록</entry>
+  <entry key="11">연결된 유저:</entry>
+  <entry key="12">회의 시작</entry>
+  <entry key="13">본인 이름</entry>
+  <entry key="14">비데오 회의</entry>
+  <entry key="15">가지고온 기획안</entry>
+  <entry key="16">새로운 목록</entry>
+  <entry key="17">메인파일에</entry>
+  <entry key="18">새 선거</entry>
+  <entry key="19">새 선거의장</entry>
+  <entry key="20">질문:</entry>
+  <entry key="21">선거 종류:</entry>
+  <entry key="22">창안하다</entry>
+  <entry key="23">Info: Each connected user receives a message with the new poll.</entry>
+  <entry key="24">선거를 만드셨습니다.</entry>
+  <entry key="25">무효</entry>
+  <entry key="26">네/아니오</entry>
+  <entry key="27">숫자 1-10</entry>
+  <entry key="28">투표</entry>
+  <entry key="29">질문을 만들기 위해서 의장이 되어야합니다.</entry>
+  <entry key="30">당신의 투표가 등록 되었습니다.</entry>
+  <entry key="31">이번 선거에 벌써 투표하셨습니다.</entry>
+  <entry key="32">투표 !</entry>
+  <entry key="33">당신의 응답:</entry>
+  <entry key="34">네</entry>
+  <entry key="35">아니오</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">선거 결과:</entry>
+  <entry key="38">질문:</entry>
+  <entry key="39">결과:</entry>
+  <entry key="40">대답:</entry>
+  <entry key="41">시작된 선거가 없습니다.</entry>
+  <entry key="42">선거!</entry>
+  <entry key="43">미딩 (최고 4 자리까지)</entry>
+  <entry key="44">회의 (최고 50 자리까지)</entry>
+  <entry key="45">종류</entry>
+  <entry key="46">다른 자리</entry>
+  <entry key="47">이미 선택 하셨습니다.</entry>
+  <entry key="48">들어가다.</entry>
+  <entry key="49">의장이 미딩에서 나가셨습니다</entry>
+  <entry key="50">시스템 설명</entry>
+  <entry key="51">디바이스를 선택하십시요.</entry>
+  <entry key="52">웹카메라를 선택해 주십시요:</entry>
+  <entry key="53">마이크를 선택해 주십시요:</entry>
+  <entry key="54">네</entry>
+  <entry key="55">무효</entry>
+  <entry key="56">다시 연결이 필요했습니다.</entry>
+  <entry key="57">셋업 편집</entry>
+  <entry key="58">진행:</entry>
+  <entry key="59">언어:</entry>
+  <entry key="60">네</entry>
+  <entry key="61">무효</entry>
+  <entry key="62">칠판 지우기</entry>
+  <entry key="63">새로운 그림을 넣기전에 칠판을 지우길 원하십니까?</entry>
+  <entry key="64">다시 질문을 해주시마십시요</entry>
+  <entry key="65">아니오</entry>
+  <entry key="66">셋업 편집2</entry>
+  <entry key="67">칠판지우시전 확인 요청.</entry>
+  <entry key="68">유저 정보</entry>
+  <entry key="69">그리는 자리 지움</entry>
+  <entry key="70">원래대로 돌려놓다.</entry>
+  <entry key="71">다시하다</entry>
+  <entry key="72">물건을 선택해주십시요.</entry>
+  <entry key="73">원문</entry>
+  <entry key="74">페인트</entry>
+  <entry key="75">선 긋기</entry>
+  <entry key="76">밑줄 긋기</entry>
+  <entry key="77">직사각형</entry>
+  <entry key="78">타원형</entry>
+  <entry key="79">화살표</entry>
+  <entry key="80">선택한 항목 삭제</entry>
+  <entry key="81">알맞게 신청하십시요.</entry>
+  <entry key="82">신청하다.</entry>
+  <entry key="83">삭제</entry>
+  <entry key="84">사회자가 돼다</entry>
+  <entry key="85">닫다</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">굵은 체</entry>
+  <entry key="88">기다림</entry>
+  <entry key="89">유저가 사회자 신청을 원합니다:</entry>
+  <entry key="90">받아들이다.</entry>
+  <entry key="91">거부하다.</entry>
+  <entry key="92">삭제</entry>
+  <entry key="93">밑의 유져들에가 요청을 보냄</entry>
+  <entry key="94">확임이 됩습니다.</entry>
+  <entry key="95">거부가됩습니다.</entry>
+  <entry key="96">사회자로 바끰</entry>
+  <entry key="97">You are not moderating this course!</entry>
+  <entry key="98">사회자:</entry>
+  <entry key="99">이방 정원은 꽉 찾습니다. 죄송합니다. 다음에 오십시요.</entry>
+  <entry key="100">타원</entry>
+  <entry key="101">닫다</entry>
+  <entry key="102">데이다 오류 입력</entry>
+  <entry key="103">유저 이름은 최소 4 문자가 돼어야합니다.</entry>
+  <entry key="104">유저 비밀번호는 최소 4 문자가 돼여야합니다.</entry>
+  <entry key="105">똑같은 유저이름이 존재합니다.</entry>
+  <entry key="106">똑같은 이메일 주소가 이미 등록돼어 있습니다.</entry>
+  <entry key="107">시스템 오류가 생겼습니다. 시스템 관리자에 연락주십시요.</entry>
+  <entry key="108">로긴</entry>
+  <entry key="109">유저:</entry>
+  <entry key="110">패스:</entry>
+  <entry key="111">언어</entry>
+  <entry key="112">로긴</entry>
+  <entry key="113">등록</entry>
+  <entry key="114">유저:</entry>
+  <entry key="115">패스:</entry>
+  <entry key="116">다시타임:</entry>
+  <entry key="117">이름:</entry>
+  <entry key="118">성:</entry>
+  <entry key="119">주소:</entry>
+  <entry key="120">나라:</entry>
+  <entry key="121">등록</entry>
+  <entry key="122">취소</entry>
+  <entry key="123">등록</entry>
+  <entry key="124">집</entry>
+  <entry key="125">유저</entry>
+  <entry key="126">다체</entry>
+  <entry key="127">조직</entry>
+  <entry key="128">회의실</entry>
+  <entry key="129">공공장소</entry>
+  <entry key="130">조직</entry>
+  <entry key="131">들어가다</entry>
+  <entry key="132">로긴</entry>
+  <entry key="133">비밀번호</entry>
+  <entry key="134">다시 타이프 치다.</entry>
+  <entry key="135">이름</entry>
+  <entry key="136">성</entry>
+  <entry key="137">주소</entry>
+  <entry key="138">생일</entry>
+  <entry key="139">길이름/번호</entry>
+  <entry key="140">우편번호/동네</entry>
+  <entry key="141">나라</entry>
+  <entry key="142">주소 인호</entry>
+  <entry key="143">유져데이다</entry>
+  <entry key="144">저장</entry>
+  <entry key="145">저장</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">로긴</entry>
+  <entry key="148">이름</entry>
+  <entry key="149">성</entry>
+  <entry key="150">다음으로 보여주다</entry>
+  <entry key="151">먼저 보여줌.</entry>
+  <entry key="152">기록을 지우다.</entry>
+  <entry key="153">삭제</entry>
+  <entry key="154">삭제</entry>
+  <entry key="155">새로운 기록</entry>
+  <entry key="156">기록을 다시 재생하다</entry>
+  <entry key="157">기록을 지우다</entry>
+  <entry key="158">상태</entry>
+  <entry key="159">무력하게 하다</entry>
+  <entry key="160">권한을 주다</entry>
+  <entry key="161">조직</entry>
+  <entry key="162">달력</entry>
+  <entry key="163">닫다</entry>
+  <entry key="164">조직 번호</entry>
+  <entry key="165">이름</entry>
+  <entry key="166">유저</entry>
+  <entry key="167">바끰</entry>
+  <entry key="168">관리자</entry>
+  <entry key="169">유저높이</entry>
+  <entry key="170">조직</entry>
+  <entry key="171">이름</entry>
+  <entry key="172">조직 추가</entry>
+  <entry key="173">조직 추가</entry>
+  <entry key="174">삭제</entry>
+  <entry key="175">추가하다</entry>
+  <entry key="176">조직 추가</entry>
+  <entry key="177">유저</entry>
+  <entry key="178">유저추가</entry>
+  <entry key="179">유저 지우기</entry>
+  <entry key="180">유저 추가</entry>
+  <entry key="181">유저 찾기</entry>
+  <entry key="182">찾기</entry>
+  <entry key="183">유저</entry>
+  <entry key="184">조직</entry>
+  <entry key="185">입력</entry>
+  <entry key="186">회의실</entry>
+  <entry key="187">회의실</entry>
+  <entry key="188">아이디</entry>
+  <entry key="189">이름</entry>
+  <entry key="190">공공장소</entry>
+  <entry key="191">조직</entry>
+  <entry key="192">회의실</entry>
+  <entry key="193">이름</entry>
+  <entry key="194">종류</entry>
+  <entry key="195">공공장소</entry>
+  <entry key="196">의견</entry>
+  <entry key="197">저장</entry>
+  <entry key="198">입력</entry>
+  <entry key="199">..와 같이 저장 하다</entry>
+  <entry key="200">파일이름</entry>
+  <entry key="201">파일이름</entry>
+  <entry key="202">삭제</entry>
+  <entry key="203">저장</entry>
+  <entry key="204">오류</entry>
+  <entry key="205">장전</entry>
+  <entry key="206">물체 장전</entry>
+  <entry key="207">snychronizing clients, clients to wait:</entry>
+  <entry key="208">이미지데이다 로딩</entry>
+  <entry key="209">snychronizing clients, clients to wait:</entry>
+  <entry key="210">그리는 곳 지우기</entry>
+  <entry key="211">그리는 곳 지우기 칠판위에 모든 데이다가 없어집니다.</entry>
+  <entry key="212">파일이 로딩돼기전에 확인해주십시요.</entry>
+  <entry key="213">초대장을 보내다.</entry>
+  <entry key="214">초대장을 보내다.</entry>
+  <entry key="215">주제</entry>
+  <entry key="216">수령인</entry>
+  <entry key="217">메세지</entry>
+  <entry key="218">보내기</entry>
+  <entry key="219">삭제</entry>
+  <entry key="220">보내기</entry>
+  <entry key="221">유저데이다</entry>
+  <entry key="222">이번 회의의 니크네임</entry>
+  <entry key="223">nick</entry>
+  <entry key="224">이름</entry>
+  <entry key="225">성</entry>
+  <entry key="226">이메일</entry>
+  <entry key="227">언어</entry>
+  <entry key="228">입력</entry>
+  <entry key="229">로딩</entry>
+  <entry key="230">데이다로딩, 기다려주십시요!</entry>
+  <entry key="231">잘못된 패스워드</entry>
+  <entry key="232">최소 4 개 문자로된 두개의 똑같은 패스워드를 입력시켜주십시요</entry>
+  <entry key="233">다른 메일</entry>
+  <entry key="234">잘못된 이멜주소를 입력하였습니다.</entry>
+  <entry key="235">등록이 됬습니다.</entry>
+  <entry key="236">당신의 어카운트가 생겼습니다. 지금 로긴이돼어 있습니다.</entry>
+  <entry key="237">당신의 스크린을 지금 공유할수 없습니다. 다른사람이 이미 스크린을 공유하고 있습니다.</entry>
+  <entry key="238">공유금지</entry>
+  <entry key="239">당신의 스크린을 공유하다.</entry>
+  <entry key="240">Bad Bandwidth: You have not been able to syncronize the Screen. Frames will be dropped. If this Warning is shown often you could ask the moderator to reduce the Quality.</entry>
+  <entry key="241">Screen of:</entry>
+  <entry key="242">Paint</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Members</entry>
+  <entry key="247">Download original document</entry>
+  <entry key="248">Download pdf document</entry>
+  <entry key="249">Load Presentation to whiteboard</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Drag this Object</entry>
+  <entry key="252">Resize this Object</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Go to first Page</entry>
+  <entry key="256">Go to previous Page</entry>
+  <entry key="257">Go to next Page</entry>
+  <entry key="258">Go to last Page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Key</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Key</entry>
+  <entry key="268">last update</entry>
+  <entry key="269">updatedby</entry>
+  <entry key="270">comment</entry>
+  <entry key="271">key</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Users</entry>
+  <entry key="274">delete user from organisation</entry>
+  <entry key="275">delete</entry>
+  <entry key="276">This user is already member of this organisation.</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">Goto Conference</entry>
+  <entry key="280">Goto Auditorium</entry>
+  <entry key="281">Help and Support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Report a bug!</entry>
+  <entry key="285">more</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember Login</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">My Home Page</entry>
+  <entry key="291">My Scheduled Meetings</entry>
+  <entry key="292">My Scheduled Events</entry>
+  <entry key="293">Public Meetings</entry>
+  <entry key="294">Private Meetings</entry>
+  <entry key="295">Public Events</entry>
+  <entry key="296">Private Events</entry>
+  <entry key="297">Public Content</entry>
+  <entry key="298">Private Content</entry>
+  <entry key="299">Personal Content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">Apply for Moderation</entry>
+  <entry key="303">Polls</entry>
+  <entry key="304">Choose a file</entry>
+  <entry key="305">Settings</entry>
+  <entry key="306">Cam and Mic Settings</entry>
+  <entry key="307">Whiteboard Settings</entry>
+  <entry key="308">Exit</entry>
+  <entry key="309">Back to Rooms</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Desktop Viewer</entry>
+  <entry key="312">start Desktop Viewer</entry>
+  <entry key="313">Video and Audio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Whiteboard</entry>
+  <entry key="316">Moderation</entry>
+  <entry key="317">Files</entry>
+  <entry key="318">Users</entry>
+  <entry key="319">Polls</entry>
+  <entry key="320">There is no User connected to this Username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address, please check your mailbox. If you still have not received a email, please adjust your email spam settings and resend confirmation email.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">Invalid Hash. No User found.</entry>
+  <entry key="325">Reset Your Password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">change Password</entry>
+  <entry key="328">new Password</entry>
+  <entry key="329">re-enter Password</entry>
+  <entry key="330">The Passwords you entered weren't identical.</entry>
+  <entry key="331">4 or more characters; capitalization matters!</entry>
+  <entry key="332">Password set. You can login now.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unkown Error. Please report this to your Service-Team.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">Invalid Password</entry>
+  <entry key="337">Successfully Logged out</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">Invalid EMail</entry>
+  <entry key="340">duplicate filename, please choose another filename</entry>
+  <entry key="341">filename too short</entry>
+  <entry key="342">Could not save Address</entry>
+  <entry key="343">User added but you need to assign this User to an Organisation, otherwise he won't be able to sign-in.</entry>
+  <entry key="344">New Record</entry>
+  <entry key="345">No Field found with this FieldId.</entry>
+  <entry key="346">No Label found for that Field.</entry>
+  <entry key="347">Admin Authorization required</entry>
+  <entry key="348">Language-Editor</entry>
+  <entry key="349">Language</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">You did only delete the Label NOT the Field! You cannot delete the Field, it may has Labels in other Languages.</entry>
+  <entry key="358">Invalid Labelid. The FieldLanguagesvalues_Id cannot be found in the database.</entry>
+  <entry key="359">You cannot delete this Field. You can only delete Labels NOT Fields. There is no Label loaded at the moment, wether it is not selected any Field or there is no Label for this Language for that Field defined.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">You need to logout to see any changes.</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">goto first</entry>
+  <entry key="369">goto previous</entry>
+  <entry key="370">goto next</entry>
+  <entry key="371">goto last</entry>
+  <entry key="372">user speaks (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">turn sound on/off</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Your Settings</entry>
+  <entry key="376">hi,</entry>
+  <entry key="377">Edit your profile</entry>
+  <entry key="378">New Messages:</entry>
+  <entry key="379">Upload new Image</entry>
+  <entry key="380">Userdata - Export</entry>
+  <entry key="381">All organisations must be already existing!</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">By organisation</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">Userdata - Import</entry>
+  <entry key="386">choose users.xml</entry>
+  <entry key="387">import</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">import - choose file</entry>
+  <entry key="391">Save as</entry>
+  <entry key="392">Name:</entry>
+  <entry key="393">Comment:</entry>
+  <entry key="394">save</entry>
+  <entry key="395">Recordings</entry>
+  <entry key="396">Recordings Viewer</entry>
+  <entry key="397">Recordings of public and private Rooms</entry>
+  <entry key="398">Users :</entry>
+  <entry key="399">Joined:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users in this Room:</entry>
+  <entry key="402">refresh</entry>
+  <entry key="403">This Room is Full. Try again in a few minutes.</entry>
+  <entry key="404">click on a room to get details</entry>
+  <entry key="405">Chat with the users in this Room:</entry>
+  <entry key="406">Room:</entry>
+  <entry key="407">Users in this room:</entry>
+  <entry key="408">since:</entry>
+  <entry key="409">play recording</entry>
+  <entry key="410">Length:</entry>
+  <entry key="411">Date:</entry>
+  <entry key="412">Recorder Mode! You cannot change any values, this is a recorded File!</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Start recording</entry>
+  <entry key="416">stop recording</entry>
+  <entry key="417">Recording:</entry>
+  <entry key="418">There is already somebody recording at the moment:</entry>
+  <entry key="419">Recording! By User:</entry>
+  <entry key="420">cancel</entry>
+  <entry key="421">Recording will be canceled and not saved.</entry>
+  <entry key="422">resume</entry>
+  <entry key="423">Close this window and resume recording</entry>
+  <entry key="424">change Linecolor</entry>
+  <entry key="425">Choose Color</entry>
+  <entry key="426">Disable / Enable Linecolor</entry>
+  <entry key="427">change Fillcolor</entry>
+  <entry key="428">Disable / Enable Fillcolor</entry>
+  <entry key="429">Change Linewidth</entry>
+  <entry key="430">close</entry>
+  <entry key="431">change Fontsize</entry>
+  <entry key="432">Delete Recording</entry>
+  <entry key="433">Guest</entry>
+  <entry key="434">By:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Room</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">cancel</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Delete Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">send message</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">Audio and Video</entry>
+  <entry key="449">Audio only</entry>
+  <entry key="450">Video only</entry>
+  <entry key="451">no Audio/Video (static Image)</entry>
+  <entry key="452">No Audio/Video from your PC will be published, instead of that a picture from your profile will be shown. Choose these settings if you have problems with your bandwidth or a very slow Internet connection.</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Monday</entry>
+  <entry key="461">Tuesday</entry>
+  <entry key="462">Wednesday</entry>
+  <entry key="463">Thursday</entry>
+  <entry key="464">Friday</entry>
+  <entry key="465">Saturday</entry>
+  <entry key="466">Sunday</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendar week</entry>
+  <entry key="469">January</entry>
+  <entry key="470">February</entry>
+  <entry key="471">March</entry>
+  <entry key="472">April</entry>
+  <entry key="473">May</entry>
+  <entry key="474">June</entry>
+  <entry key="475">July</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">October</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Calendar</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Show Layout Settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | Height</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderation-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">Enabled</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | Height</entry>
+  <entry key="493">Files,Chat,Partizipants - Container</entry>
+  <entry key="494">Enabled</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Width | Height</entry>
+  <entry key="497">The Moderator has left the Room. No one is presenting at the Moment. You could apply for Moderation or wait.</entry>
+  <entry key="498">There is no Moderator in this Room, but there are some Participants. You have to apply for Moderation or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message from User:</entry>
+  <entry key="502">Message:</entry>
+  <entry key="503">Click this link to participate in the Meetings:</entry>
+  <entry key="504">Click here to enter room</entry>
+  <entry key="505">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Your userdata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password:</entry>
+  <entry key="515">Click here to enter a new Password</entry>
+  <entry key="516">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">Please enter a valid Date, for example 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Please enter a valid EMail, for example name@mail.com</entry>
+  <entry key="520">Please enter a Float-Number, for example 1.00</entry>
+  <entry key="521">Please enter a Number (Integer), for example 100</entry>
+  <entry key="522">Please enter a valid Phone number, for example ++49 0123 123123</entry>
+  <entry key="523">Please enter a valid time, for example 12:23 (hh:mm)</entry>
+  <entry key="524">Passwort protected</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Validity period</entry>
+  <entry key="527">Endless</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">One-Time</entry>
+  <entry key="530">Valid From:</entry>
+  <entry key="531">Valid to:</entry>
+  <entry key="532">Invitation To {0}</entry>
+  <entry key="533">Not Invitation availible for this Invitation-Code</entry>
+  <entry key="534">The Invitation was already used. This type of Invitation cannot be re-used.</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Check Password</entry>
+  <entry key="538">Invalid Password!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
new file mode 100644
index 0000000..8617cb6
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Overleg</entry>
+  <entry key="2">Afspraak</entry>
+  <entry key="3">Evenementen</entry>
+  <entry key="4">Instellingen</entry>
+  <entry key="5">Profiel</entry>
+  <entry key="6">Beheer</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Opnemen</entry>
+  <entry key="9">Geen bestand beschikbaar</entry>
+  <entry key="10">Opnamen door Presentator</entry>
+  <entry key="11">Aanwezige gebruikers:</entry>
+  <entry key="12">Start een overleg</entry>
+  <entry key="13">Mijn Naam</entry>
+  <entry key="14">Video Overleg</entry>
+  <entry key="15">Bestand Importeren</entry>
+  <entry key="16">Lijst vernieuwen</entry>
+  <entry key="17">Naar hoofd bestand</entry>
+  <entry key="18">nieuwe stembus</entry>
+  <entry key="19">Een nieuwe stembus.</entry>
+  <entry key="20">Vraag:</entry>
+  <entry key="21">Soort stembus:</entry>
+  <entry key="22">Aanmaken</entry>
+  <entry key="23">Informatie: Iedere gebruiker krijgt een bericht over de stembus.</entry>
+  <entry key="24">Stembus aanmaken</entry>
+  <entry key="25">Annuleren</entry>
+  <entry key="26">Ja/Nee</entry>
+  <entry key="27">Getal 1-10</entry>
+  <entry key="28">Stembus</entry>
+  <entry key="29">Je moet een organisator zijn om een vraag aan te maken</entry>
+  <entry key="30">Jouw stem is geregistreerd.</entry>
+  <entry key="31">Je hebt al gestemd op deze stembus.</entry>
+  <entry key="32">Stem!</entry>
+  <entry key="33">Jouw Antwoord:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nee</entry>
+  <entry key="36">Wil weten:</entry>
+  <entry key="37">Stembus resultaat</entry>
+  <entry key="38">Vraag:</entry>
+  <entry key="39">Resultaat:</entry>
+  <entry key="40">Antwoorden:</entry>
+  <entry key="41">Er is geen stembus.</entry>
+  <entry key="42">Stem!</entry>
+  <entry key="43">Overleg (max 4 plekken)</entry>
+  <entry key="44">Overleg (max 50 plekken)</entry>
+  <entry key="45">Soort</entry>
+  <entry key="46">Andere plekken</entry>
+  <entry key="47">Reeds gekozen</entry>
+  <entry key="48">deelnemen</entry>
+  <entry key="49">De organisator heeft het overleg verlaten.</entry>
+  <entry key="50">Systeem informatie</entry>
+  <entry key="51">Gekozen apparaat</entry>
+  <entry key="52">Gekozen webcam:</entry>
+  <entry key="53">Gekozen microfoon:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Annuleren</entry>
+  <entry key="56">Je moet opnieuw verbinding maken.</entry>
+  <entry key="57">Wijzig instellingen.</entry>
+  <entry key="58">Cursus:</entry>
+  <entry key="59">Taal:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Annuleren</entry>
+  <entry key="62">Tekenbord schoonmaken</entry>
+  <entry key="63">Wil je dat het tekenbord schoon wordt gemaakt bij het toevoegen van een nieuw plaatje?</entry>
+  <entry key="64">Niet weer vragen</entry>
+  <entry key="65">Nee</entry>
+  <entry key="66">Wijzig instellingen</entry>
+  <entry key="67">Bevestiging vragen voor het schoonmaken van het tekenbord.</entry>
+  <entry key="68">Gebruikers Informatie</entry>
+  <entry key="69">Tekenbord schoonmaken</entry>
+  <entry key="70">Ongedaan maken</entry>
+  <entry key="71">Opnieuw maken</entry>
+  <entry key="72">Selecteer een object</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Verf</entry>
+  <entry key="75">Lijn Trekken</entry>
+  <entry key="76">Onderstrepen</entry>
+  <entry key="77">Rechthoek</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Pijl</entry>
+  <entry key="80">Verwijder het geselecteerde object</entry>
+  <entry key="81">Toepassen voor aanpassing</entry>
+  <entry key="82">Toepassen</entry>
+  <entry key="83">Annuleren</entry>
+  <entry key="84">Organisator worden</entry>
+  <entry key="85">Afsluiten</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">bold</entry>
+  <entry key="88">WACHTEN</entry>
+  <entry key="89">Een gebruiker wil organisator worden, je kunt hem toegang geven tot het whiteboard of ook organisator maken. Gebruiker:</entry>
+  <entry key="90">Accepteren</entry>
+  <entry key="91">Afwijzen</entry>
+  <entry key="92">Annuleren</entry>
+  <entry key="93">Verstuur verzoek naar de volgende gebruikers</entry>
+  <entry key="94">Geaccepteerd</entry>
+  <entry key="95">Afgewezen</entry>
+  <entry key="96">Verander organisator</entry>
+  <entry key="97">Je bent geen organisator!</entry>
+  <entry key="98">Organisator:</entry>
+  <entry key="99">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Sluiten</entry>
+  <entry key="102">input data foutmelding</entry>
+  <entry key="103">Gebruikersnaam moet minimaal 4 karakters zijn en is hoofdletter gevoelig!</entry>
+  <entry key="104">Wachtwoord moet minimaal 4 karakters zijn</entry>
+  <entry key="105">Deze gebruikersnaam is al gebruikt</entry>
+  <entry key="106">Dit e-mail adres is al geregistreerd</entry>
+  <entry key="107">Systeem fout neem contact op met een Systeem beheerder</entry>
+  <entry key="108">Inloggen</entry>
+  <entry key="109">Inlognaam/E-mail</entry>
+  <entry key="110">Wachtwoord</entry>
+  <entry key="111">Taal</entry>
+  <entry key="112">Inloggen</entry>
+  <entry key="113">Inschrijven</entry>
+  <entry key="114">Inlognaam</entry>
+  <entry key="115">Wachtwoord</entry>
+  <entry key="116">Nogmaals</entry>
+  <entry key="117">Voornaam</entry>
+  <entry key="118">Achternaam</entry>
+  <entry key="119">E-mail</entry>
+  <entry key="120">Land</entry>
+  <entry key="121">Registreer</entry>
+  <entry key="122">Annuleren</entry>
+  <entry key="123">Geen lid?</entry>
+  <entry key="124">Start</entry>
+  <entry key="125">Gebruikers</entry>
+  <entry key="126">Groepen</entry>
+  <entry key="127">Organisaties</entry>
+  <entry key="128">Vergaderruimtes</entry>
+  <entry key="129">Openbaar</entry>
+  <entry key="130">Organisatie</entry>
+  <entry key="131">Deelnemen</entry>
+  <entry key="132">Inlognaam</entry>
+  <entry key="133">Wachtwoord</entry>
+  <entry key="134">Wachtwoord</entry>
+  <entry key="135">Voornaam</entry>
+  <entry key="136">Achternaam</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Geboortedatum</entry>
+  <entry key="139">Straat en nummer</entry>
+  <entry key="140">Postcode en Plaats</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Meer gegevens</entry>
+  <entry key="143">Gebruikersgegevens</entry>
+  <entry key="144">Opslaan</entry>
+  <entry key="145">Opslaan</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Loginnaam</entry>
+  <entry key="148">Voornaam</entry>
+  <entry key="149">Achternaam</entry>
+  <entry key="150">Volgende tonen</entry>
+  <entry key="151">Vorige tonen</entry>
+  <entry key="152">Verwijder</entry>
+  <entry key="153">Annuleren</entry>
+  <entry key="154">Verwijderen</entry>
+  <entry key="155">Toevoegen</entry>
+  <entry key="156">Vernieuwen</entry>
+  <entry key="157">Verwijderen</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Blokkeren</entry>
+  <entry key="160">Vrijgeven</entry>
+  <entry key="161">Organisatie(s)</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Sluiten</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Naam</entry>
+  <entry key="166">Gebruiker</entry>
+  <entry key="167">Organisator</entry>
+  <entry key="168">Beheerder</entry>
+  <entry key="169">Toegangsniveau</entry>
+  <entry key="170">Organisatie</entry>
+  <entry key="171">Naam</entry>
+  <entry key="172">Organisatie toevoegen</entry>
+  <entry key="173">Organisatie toevoegen</entry>
+  <entry key="174">Annuleren</entry>
+  <entry key="175">Toevoegen</entry>
+  <entry key="176">Verwijder organisatie</entry>
+  <entry key="177">Gebruiker</entry>
+  <entry key="178">Gebruiker toevoegen</entry>
+  <entry key="179">Gebruiker verwijderen</entry>
+  <entry key="180">Gebruiker aan organisatie toevoegen</entry>
+  <entry key="181">Zoek gebruiker</entry>
+  <entry key="182">Zoek</entry>
+  <entry key="183">Gebruiker</entry>
+  <entry key="184">Organisatie</entry>
+  <entry key="185">Deelnemen</entry>
+  <entry key="186">Kamers</entry>
+  <entry key="187">Kamer</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Naam</entry>
+  <entry key="190">Openbaar</entry>
+  <entry key="191">Organisaties</entry>
+  <entry key="192">Kamers</entry>
+  <entry key="193">Naam</entry>
+  <entry key="194">Soort</entry>
+  <entry key="195">Openbaar</entry>
+  <entry key="196">Toelichting</entry>
+  <entry key="197">Opslaan en exporteren</entry>
+  <entry key="198">laden</entry>
+  <entry key="199">Opslaan als</entry>
+  <entry key="200">Bestandsnaam</entry>
+  <entry key="201">bestandsnaam</entry>
+  <entry key="202">Annuleren</entry>
+  <entry key="203">Opslaan</entry>
+  <entry key="204">Foutmelding</entry>
+  <entry key="205">Laden</entry>
+  <entry key="206">Objecten geladen</entry>
+  <entry key="207">Wachten op synchronisatie van gebruikers:</entry>
+  <entry key="208">Laden van afbeelding</entry>
+  <entry key="209">Wachten op synchronisatie van gebruikers:</entry>
+  <entry key="210">Tekenbord Leegmaken</entry>
+  <entry key="211">Tekenbord leegmaken, gegevens op tekenbord gaan verloren</entry>
+  <entry key="212">Bevestiging voor het laden van een bestand</entry>
+  <entry key="213">Uitnodiging versturen</entry>
+  <entry key="214">Verstuur uitnodiging</entry>
+  <entry key="215">Onderwerp</entry>
+  <entry key="216">E-mail geadresseerde</entry>
+  <entry key="217">Bericht</entry>
+  <entry key="218">Verstuur</entry>
+  <entry key="219">annuleren</entry>
+  <entry key="220">Verstuur</entry>
+  <entry key="221">Gebruikersgegevens</entry>
+  <entry key="222">Je naam voor dit overleg</entry>
+  <entry key="223">Naam</entry>
+  <entry key="224">Voornaam</entry>
+  <entry key="225">Achternaam</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Taal</entry>
+  <entry key="228">deelnemen</entry>
+  <entry key="229">Laden</entry>
+  <entry key="230">Laden, even wachten aub!</entry>
+  <entry key="231">Verkeerde wachtwoord</entry>
+  <entry key="232">Please enter two identical passwords with at least 6 characters</entry>
+  <entry key="233">Foutmelding</entry>
+  <entry key="234">Dit is geen geldig E-mail adres</entry>
+  <entry key="235">Registratie Afgerond</entry>
+  <entry key="236">Je gebruikersaccount is nu aangemaakt. Je nu kunt inloggen.</entry>
+  <entry key="237">Je kunt je scherm op dit moment niet delen. Iemand anders is al een scherm aan het delen.</entry>
+  <entry key="238">Delen is verboden</entry>
+  <entry key="239">Delen van scherm</entry>
+  <entry key="240">Slechts netwerk: Synchronisatie van het scherm lukt niet. Als je deze melding vaker krijgt, kun je de beheerder vragen of hij de quality van beeld wil verminderen.</entry>
+  <entry key="241">Scherm van:</entry>
+  <entry key="242">Verf</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Bestanden</entry>
+  <entry key="246">Leden</entry>
+  <entry key="247">Orginele document downloaden</entry>
+  <entry key="248">PDF document downloaden</entry>
+  <entry key="249">Zet presentatie op tekenbord</entry>
+  <entry key="250">Instellingen</entry>
+  <entry key="251">Verplaats dit object</entry>
+  <entry key="252">Verander de grote</entry>
+  <entry key="253">%</entry>
+  <entry key="254">van</entry>
+  <entry key="255">Na naar de eerste pagina</entry>
+  <entry key="256">Ga naar de vorige pagina</entry>
+  <entry key="257">Na gaan de volgende pagina</entry>
+  <entry key="258">Ga naar de laatste pagina</entry>
+  <entry key="259">Uitzoomen</entry>
+  <entry key="260">Inzoomen</entry>
+  <entry key="261">Dhr.</entry>
+  <entry key="262">Mevr.</entry>
+  <entry key="263">Instellingen</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Instelling</entry>
+  <entry key="266">Instellingen</entry>
+  <entry key="267">Instelling</entry>
+  <entry key="268">Laatste update</entry>
+  <entry key="269">Bijwerkt door</entry>
+  <entry key="270">Toelichting</entry>
+  <entry key="271">Waarde</entry>
+  <entry key="272">van</entry>
+  <entry key="273">Gebruikers</entry>
+  <entry key="274">haal gebruiker uit organisatie</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Deze gebruiker zit al in deze organisatie.</entry>
+  <entry key="277">Nieuws</entry>
+  <entry key="278">Snelkoppelingen</entry>
+  <entry key="279">Ga naar overleg</entry>
+  <entry key="280">Ga luisteren</entry>
+  <entry key="281">Help en Hulp</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Meld probleem!</entry>
+  <entry key="285">meer</entry>
+  <entry key="286">Project Webside (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Inloggegevens onthouden</entry>
+  <entry key="289">Inhoud</entry>
+  <entry key="290">Mijn Start Pagina</entry>
+  <entry key="291">Mijn geplande overleggen</entry>
+  <entry key="292">Mijn geplande evenementen</entry>
+  <entry key="293">Openbare overleggen</entry>
+  <entry key="294">Prive overleggen</entry>
+  <entry key="295">Openbare evenementen</entry>
+  <entry key="296">Prive evenementen</entry>
+  <entry key="297">Openbare inhoud</entry>
+  <entry key="298">Prive inhoud</entry>
+  <entry key="299">Persoonlijke inhoud</entry>
+  <entry key="300"></entry>
+  <entry key="301">Nakijken</entry>
+  <entry key="302">Nalaten kijken</entry>
+  <entry key="303">Stembussen</entry>
+  <entry key="304">Kies een bestand</entry>
+  <entry key="305">Instellingen</entry>
+  <entry key="306">Beeld/Geluid instellingen</entry>
+  <entry key="307">Tekenbord instellingen</entry>
+  <entry key="308">Verlaten</entry>
+  <entry key="309">Terug naar kamers</entry>
+  <entry key="310">Uitloggen</entry>
+  <entry key="311">Wachtwoord vergeten?</entry>
+  <entry key="312">Wachtwoord opnieuw instellen</entry>
+  <entry key="313">Via E-mail</entry>
+  <entry key="314">Via inlognaam</entry>
+  <entry key="315">Je E-mail</entry>
+  <entry key="316">Je loginnaam</entry>
+  <entry key="317">Verstuur E-mail met een Link</entry>
+  <entry key="318">Dit E-mail adres is niet gevonden. Geeft E-mail adres waar ook het account mee gemaakt is.</entry>
+  <entry key="319">Geeft inlognaam of E-mail adres</entry>
+  <entry key="320">Er is geen gebruiker met deze inlognaam</entry>
+  <entry key="321">Een E-mail met een link is naar je toegestuurd, controller je Postvak-In. Als je dan nog steeds niets hebt ontvangen bekijk je E-mail spam instellingen.</entry>
+  <entry key="322">Foutmelding</entry>
+  <entry key="323">Bericht</entry>
+  <entry key="324">Er is geen gebruiker met deze gegevens.</entry>
+  <entry key="325">Wachtwoord opnieuw instellen</entry>
+  <entry key="326">Inlognaam</entry>
+  <entry key="327">Verander wachtwoord</entry>
+  <entry key="328">wachtwoord invoeren</entry>
+  <entry key="329">wachtwoord opnieuw invoeren</entry>
+  <entry key="330">De wachtwoorden zijn niet gelijk.</entry>
+  <entry key="331">Minimaal 4 karakters en hoofdlettergevoelig!</entry>
+  <entry key="332">Wachtwoord ingesteld. Je kunt nu inloggen.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Onbekende Foutmelding. Geef dit door aan de beheerder.</entry>
+  <entry key="335">Inlognaam niet gevonden</entry>
+  <entry key="336">Verkeerd wachtwoord</entry>
+  <entry key="337">U bent uitgelogd</entry>
+  <entry key="338">Registratie is uitgezet.</entry>
+  <entry key="339">Verkeerd E-mail adres</entry>
+  <entry key="340">een bestand met deze naam is al aanwezig, kies een andere naam</entry>
+  <entry key="341">bestandsnaam te kort</entry>
+  <entry key="342">Kan bestand niet opslaan</entry>
+  <entry key="343">Gebruiker toegevoegd. Account moet nog wel worden toegevoegd aan een organisatie.</entry>
+  <entry key="344">Nieuw item</entry>
+  <entry key="345">Geen veld gevonden met dit veld ID.</entry>
+  <entry key="346">Geen label gevonden voor dat veld.</entry>
+  <entry key="347">Beheer authorisatie is vereist.</entry>
+  <entry key="348">Taal Bewerker</entry>
+  <entry key="349">Taal</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label naam</entry>
+  <entry key="352">Label tekst</entry>
+  <entry key="353">Display tekst</entry>
+  <entry key="354">Label naam</entry>
+  <entry key="355">Label tekst</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Je hebt alleen het label verwijderd en niet het veld! Je kunt dit veld niet verwijderen omdat het gebruikt worden in andere talen.</entry>
+  <entry key="358">Onjuist Label-ID. De 'FieldLanguagesvalues_Id' kan niet worden gevonden in de database.</entry>
+  <entry key="359">Je kunt alleen labels verwijderen en geen velden.</entry>
+  <entry key="360">Exporteren</entry>
+  <entry key="361">Je moet opnieuw aanmelden om de veranderingen te zien.</entry>
+  <entry key="362">Nieuwe taal toevoegen</entry>
+  <entry key="363">Taal verwijderen</entry>
+  <entry key="364">Nieuwe taal toevoegen</entry>
+  <entry key="365">Naam</entry>
+  <entry key="366">Taal toevoegen</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ga naar het begin</entry>
+  <entry key="369">vorige</entry>
+  <entry key="370">volgende</entry>
+  <entry key="371">ga naar de laatste</entry>
+  <entry key="372">Gebruiker spreekt (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Geluid aan/uit</entry>
+  <entry key="374">Systeem</entry>
+  <entry key="375">Jouw instellingen</entry>
+  <entry key="376">Hallo,</entry>
+  <entry key="377">Profiel bijwerken</entry>
+  <entry key="378">Nieuw bericht:</entry>
+  <entry key="379">Pasfoto uploaden</entry>
+  <entry key="380">Gebruikersdata exporteren</entry>
+  <entry key="381">Om per organisatie een backup te maken, moeten organisatie aanwezig zijn.</entry>
+  <entry key="382">Backup</entry>
+  <entry key="383">Backup een organisatie</entry>
+  <entry key="384">Backup</entry>
+  <entry key="385">Gebruikersdata importeren</entry>
+  <entry key="386">Restore</entry>
+  <entry key="387">Importeren</entry>
+  <entry key="388">Exporteren naar XML - Deze bestanden kunnen gebruikt worden voor:&lt;br/&gt; - Bijdrage aan het project - Importeren in een ander systeem&lt;br/&gt; - Backup - Optimalisatie&lt;br/&gt; - Plaats het in de 'openmeeting/language' directory voor de volgende installatie</entry>
+  <entry key="389">Kies een taal bestand om te importeren. &lt;br/&gt;Opletten! Kies de juiste taal uit de selectie lijst! &lt;br/&gt;Het maakt niet uit wat de naam van het bestand is, &lt;br/&gt;het zal worden geimporteerd in deze taal!</entry>
+  <entry key="390">importeren - kies een bestand</entry>
+  <entry key="391">Opslaan als</entry>
+  <entry key="392">Naam:</entry>
+  <entry key="393">Toelichting:</entry>
+  <entry key="394">Opslaan</entry>
+  <entry key="395">Opnames</entry>
+  <entry key="396">Opnames bekijken</entry>
+  <entry key="397">Opnames van openbare en prive kamers</entry>
+  <entry key="398">Gebruikers:</entry>
+  <entry key="399">Aanwezig:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Active deelnemers:</entry>
+  <entry key="402">vernieuwen</entry>
+  <entry key="403">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="404">Klik op een kamer voor meer informatie</entry>
+  <entry key="405">Chat met deelnemers:</entry>
+  <entry key="406">Overleg:</entry>
+  <entry key="407">Active deelnemers:</entry>
+  <entry key="408">Vanaf:</entry>
+  <entry key="409">Bekijk opname</entry>
+  <entry key="410">Duur:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Opname bekijken! Je kunt niets wijzigen. Dit is een opgenomen overleg!</entry>
+  <entry key="413">Start deze opname</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Neem dit overleg op</entry>
+  <entry key="416">Stop opname</entry>
+  <entry key="417">Opname:</entry>
+  <entry key="418">Dit overleg wordt al opgenomen door een andere gebruiker!</entry>
+  <entry key="419">Opgenomen! Door gebruiker:</entry>
+  <entry key="420">Annuleren</entry>
+  <entry key="421">De opname wordt gestopt en wordt niet bewaard.</entry>
+  <entry key="422">hetvatten</entry>
+  <entry key="423">Sluit dit scherm en blijf opnemen</entry>
+  <entry key="424">Verander lijnkleur</entry>
+  <entry key="425">Kies een kleur</entry>
+  <entry key="426">Uizetten/Aanzetten lijnkleur</entry>
+  <entry key="427">Verander opvulkleur</entry>
+  <entry key="428">Uitzetten/Aanzetten opvulkleur</entry>
+  <entry key="429">Verander lijn dikte</entry>
+  <entry key="430">Afsluiten</entry>
+  <entry key="431">Verander lettertype</entry>
+  <entry key="432">Verwijder opname</entry>
+  <entry key="433">Gast</entry>
+  <entry key="434">Door:</entry>
+  <entry key="435">Naam</entry>
+  <entry key="436">Overleg</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Annuleren</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Naam</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Verwijder Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Verstuur bericht</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">Beeld en Geluid</entry>
+  <entry key="449">Alleen geluid</entry>
+  <entry key="450">Alleen beeld</entry>
+  <entry key="451">Geen beeld/geluid (pasfoto afbeelden)</entry>
+  <entry key="452">Als er netwerk problemen zijn, kies dan voor pasfoto afbeelden. Je profiel pasfoto wordt hiervoor gebruikt.</entry>
+  <entry key="453">Ma</entry>
+  <entry key="454">Di</entry>
+  <entry key="455">Wo</entry>
+  <entry key="456">Do</entry>
+  <entry key="457">Vr</entry>
+  <entry key="458">Za</entry>
+  <entry key="459">Zo</entry>
+  <entry key="460">Maandag</entry>
+  <entry key="461">Dinsdag</entry>
+  <entry key="462">Woensdag</entry>
+  <entry key="463">Donderdag</entry>
+  <entry key="464">Vrijdag</entry>
+  <entry key="465">Zaterdag</entry>
+  <entry key="466">Zondag</entry>
+  <entry key="467">WK</entry>
+  <entry key="468">Kalender Week</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Februari</entry>
+  <entry key="471">Maart</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mei</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Augustus</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Aantal Deelnemers</entry>
+  <entry key="483">Toon opmaak instellingen</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Breedte | Hoogte</entry>
+  <entry key="486">Beeld-Container</entry>
+  <entry key="487">Organisator-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tekenbord-Container</entry>
+  <entry key="490">Aanzetten</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Breedte | Hoogte</entry>
+  <entry key="493">Bestanden, chat en deelnemers - Container</entry>
+  <entry key="494">Aanzetten</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Breedte | Hoogte</entry>
+  <entry key="497">De organisator heeft het overleg verlaten. Niemand is aan het presenteren. Je kunt organisator worden of wachten.</entry>
+  <entry key="498">Er zijn deelnemers maar nog geen organisator. Je kunt Organisator worden of wachten.</entry>
+  <entry key="499">Terugkoppeling {0}</entry>
+  <entry key="500">{0} - Uitnodiging</entry>
+  <entry key="501">Bericht van gebruiker:</entry>
+  <entry key="502">Bericht:</entry>
+  <entry key="503">Klik op deze link om deel te nemen aan dit overleg:</entry>
+  <entry key="504">Klik hier om deel te nemen aan dit overleg</entry>
+  <entry key="505">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="506">{0} registeren</entry>
+  <entry key="507">Je gebruikersgegevens:</entry>
+  <entry key="508">Inlognaam:</entry>
+  <entry key="509">Wachtwoord:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Registeren</entry>
+  <entry key="513">{0} - Wachtwoord Reset</entry>
+  <entry key="514">Klik op deze link voor een nieuw wachtwoord:</entry>
+  <entry key="515">Klik hier voor een nieuw wachtwoord</entry>
+  <entry key="516">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="517">{0} wachtwoord reset</entry>
+  <entry key="518">Geef een juiste datum (dd.mm.yyyy)</entry>
+  <entry key="519">Geef een juist E-mail adres (voorbeeld naam@domein.nl)</entry>
+  <entry key="520">Geef een Float-Number (voorbeeld 1.00)</entry>
+  <entry key="521">Geef een Integer (voorbeeld 100)</entry>
+  <entry key="522">Geef een juist telefoonnummer (voorbeeld +31 0123 456789</entry>
+  <entry key="523">Geef een juiste tijd (hh:mm)</entry>
+  <entry key="524">Beveiligd door wachtwoord</entry>
+  <entry key="525">Wachtwoord</entry>
+  <entry key="526">Geldigheidsduur</entry>
+  <entry key="527">Altijd</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Eenmalig</entry>
+  <entry key="530">Geldig van:</entry>
+  <entry key="531">Geldig tot:</entry>
+  <entry key="532">Uitnodiging van {0}</entry>
+  <entry key="533">Geen uitnodiging beschikbaar met deze code</entry>
+  <entry key="534">Deze is uitnodiging is eenmalig en al eens gebruikt.</entry>
+  <entry key="535">Deze uitnodigingscode is onjuist.</entry>
+  <entry key="536">Wachtwoord:</entry>
+  <entry key="537">Controleer wachtwoord</entry>
+  <entry key="538">Verkeerd wachtwoord!</entry>
+  <entry key="539">Beeld_Geluid</entry>
+  <entry key="540">Synchronisatie van beeld en geluid</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">De recorder functie is Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-as</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-as</entry>
+  <entry key="549">b</entry>
+  <entry key="550">breedte</entry>
+  <entry key="551">h</entry>
+  <entry key="552">hoogte</entry>
+  <entry key="553">Verander doorzichtigheid</entry>
+  <entry key="554">Open browser</entry>
+  <entry key="555">Sluit browser</entry>
+  <entry key="556">De is geen verbinding met de server meer. Start de applicatie opnieuw of controleer je netwerk verbinding.</entry>
+  <entry key="557">Aanwijzer</entry>
+  <entry key="558">Synchronisatie</entry>
+  <entry key="559">Aan het synchroniseren. Even geduld aub</entry>
+  <entry key="560">&lt;u&gt;Opslaan als SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Opslaan als PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Opslaan als JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Opslaan als PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Opslaan als TIF&lt;/u&gt;</entry>
+  <entry key="565">Herinnering:</entry>
+  <entry key="566">Categorie:</entry>
+  <entry key="567">Herhaling:</entry>
+  <entry key="568">Geen</entry>
+  <entry key="569">Lokatie:</entry>
+  <entry key="570">Begin</entry>
+  <entry key="571">Einde</entry>
+  <entry key="572">Onderwerp:</entry>
+  <entry key="573">Toelichting:</entry>
+  <entry key="574">Gebruikers uitnodigen</entry>
+  <entry key="575">Dagelijks</entry>
+  <entry key="576">Maandelijks</entry>
+  <entry key="577">Jaarlijks</entry>
+  <entry key="578">Opmerking: Het einde van het overleg moet altijd later zijn dan het begin!</entry>
+  <entry key="579">Geef een onderwerp!</entry>
+  <entry key="580">RnL</entry>
+  <entry key="581">Zet deze functie aan als je taal van Rechts naar Links wordt geschreven</entry>
+  <entry key="582">Instrumentenbord</entry>
+  <entry key="583">Bekijk opgenomen overleg of evenement</entry>
+  <entry key="584">Overleg - Organiseer een overleg met 4 tot 16 personen.&lt;br/&gt;Iedereen heeft mogelijkheid tot beeld en geluid.</entry>
+  <entry key="585">Evenement - Organiseer een overleg met maximaal 200 personen.&lt;br/&gt;Alleen de organisator heeft beeld en geluid.</entry>
+  <entry key="586">Beheer gebruikers, kamers, organisaties&lt;br/&gt; of verander de instellingen</entry>
+  <entry key="587">Active deelnemers</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inlognaam</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Document aan het laden. Even wachten tot alle gebruikers zijn gesynchroniseerd.</entry>
+  <entry key="592">Importeren gelukt, nu aan het converteren...</entry>
+  <entry key="593">Begin importeren</entry>
+  <entry key="594">Importeer scherm. Zoek en selecteer een bestand.</entry>
+  <entry key="595">Annuleren</entry>
+  <entry key="596">Selecteer bestand</entry>
+  <entry key="597">Active sessies</entry>
+  <entry key="598">Waarde</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Inlognaam</entry>
+  <entry key="601">Verbonden sinds</entry>
+  <entry key="602">Kamer / bereik</entry>
+  <entry key="603">Uitloggen</entry>
+  <entry key="604">Uitloggen</entry>
+  <entry key="605">Weet je zeker dat je deze gebruiker wilt uitloggen?&lt;br/&gt;De gebruiker zal uit dit overleg worden gehaald. De gebruiker kan wel weer opnieuw deelnemen.</entry>
+  <entry key="606">Je bent door een organisator of beheerder uit het overleg gehaald.</entry>
+  <entry key="607">Telefoon</entry>
+  <entry key="608">Gebruiker is organisator in dit overleg</entry>
+  <entry key="609">Gebruiker mag tekenen op het tekenbord</entry>
+  <entry key="610">(Her) Start beeld/geluid of verander instellingen</entry>
+  <entry key="611">Geef gebruiker toestemming om op het tekenbord te tekenen</entry>
+  <entry key="612">Ontneem gebruiker toestemming om op het tekenbord te tekenen</entry>
+  <entry key="613">Gebruikers</entry>
+  <entry key="614">Bestanden</entry>
+  <entry key="615">Tekenbord</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Jouw account heeft meerdere organsiaties toegewezen gekregen. Selecteer een organisatie voor dit overleg.</entry>
+  <entry key="618">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="619">Kamer soort</entry>
+  <entry key="620">Afspraak kamer</entry>
+  <entry key="621">Server tijd</entry>
+  <entry key="622">{0} - herinnering</entry>
+  <entry key="623">Bericht van:</entry>
+  <entry key="624">Bericht:</entry>
+  <entry key="625">Klik op deze link om deel te nemen aan dit overleg:</entry>
+  <entry key="626">Klik om deel te nemen aan dit overleg</entry>
+  <entry key="627">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="628">Zoek intern</entry>
+  <entry key="629">Externe toevoegen</entry>
+  <entry key="630">Voornaam</entry>
+  <entry key="631">Achternaam</entry>
+  <entry key="632">E-mail adres</entry>
+  <entry key="633">Uitloggen bevestigen</entry>
+  <entry key="634">Weet je zeker dat je wilt uitloggen?</entry>
+  <entry key="635">Acties</entry>
+  <entry key="636">Demo kamer</entry>
+  <entry key="637">Demo tijd (sec)</entry>
+  <entry key="638">Overleg tijd</entry>
+  <entry key="639">Dit is een demonstratie kamer. Je wordt automatisch uitlogd in :</entry>
+  <entry key="640">Toezichthouder</entry>
+  <entry key="641">De organisator, beheerder of planner van dit overleg is nog niet aanwezig. Even wachten aub.</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Scherm delen</entry>
+  <entry key="644">Er wordt een scherm gedeelte door gebruiker:</entry>
+  <entry key="645">Start met delen</entry>
+  <entry key="646">Nieuw overleg toevoegen</entry>
+  <entry key="647">Kamers</entry>
+  <entry key="648">Evenement kamer</entry>
+  <entry key="649">Organisator</entry>
+  <entry key="650">Beheer de gebruikers</entry>
+  <entry key="651">Beheer de kamers</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Wil je deze gebruiker organisator maken van deze organisatie?</entry>
+  <entry key="654">Je kunt pas een gebruiker toevoegen als je een organisatie hebt gekozen!</entry>
+  <entry key="655">Organisatie - organisatoren</entry>
+  <entry key="656">Wil je deze gebruiker echt uit deze organisatie halen?</entry>
+  <entry key="657">Deze gebruiker is organisator</entry>
+  <entry key="658">Deze gebruiker is geen organisator</entry>
+  <entry key="659">Deze gebruiker geen organisator?</entry>
+  <entry key="660">Toevoegen of verwijderen van gebruikers of kamers in je organisatie</entry>
+  <entry key="661">Wil je dit item echt verwijderen?</entry>
+  <entry key="662">Wil je deze gebruiker echt uit je organisatie verwijderen? Het gebruikersaccount blijft wel bestaan.</entry>
+  <entry key="663">Je kunt je eigen gebruikersaccount niet verwijderen!</entry>
+  <entry key="664">Dit kan alleen een beheerder doen!</entry>
+  <entry key="665">Er zijn geen sessie gekoppeld aan dit ID.</entry>
+  <entry key="666">Dit is een beheeraccount. Je kunt dit account bewerken in het beheer Beheer/Gebruikers gedeelte.</entry>
+  <entry key="667">Klik op de link om de registratie af te ronden. Mocht dit niet lukken, kopieer en plak deze in een internet browser.</entry>
+  <entry key="668">Klik om je E-mail adres te controleren</entry>
+  <entry key="669">Er is geen gebruiker met deze gegevens.</entry>
+  <entry key="670">Deze gebruiker is al actief!</entry>
+  <entry key="671">Het account is succesvol geactiveerd!</entry>
+  <entry key="672">Nu inloggen</entry>
+  <entry key="673">Het account is nog niet actief. Gebruik eerste de link in de E-mail die je hebt gekregen tijdens de registratie.</entry>
+  <entry key="674">In inschrijven is nu volledig. Er is een E-mail gestuurd met een verificatie link. Controlleer je Postvak-In.</entry>
+  <entry key="675">Verwijder organisator rol van gebruiker</entry>
+  <entry key="676">Geef organisator rol aan deze gebruiker</entry>
+  <entry key="677">Gebruiker</entry>
+  <entry key="678">Toegang tot tekenbord</entry>
+  <entry key="679">Organisator</entry>
+  <entry key="680">Moderation: Selecteer een gebruiker om deze tekenbord en/of organisator toegang te geven.</entry>
+  <entry key="681">Deze gebruiker is al organisator en heeft dus toegang tot het tekenbord.</entry>
+  <entry key="682">Dit ben je zelf! Je kunt jezelf geen organisator rechten ontnemen.</entry>
+  <entry key="683">Geef deze gebruiker beeld en geluid</entry>
+  <entry key="684">Ontneem deze gebruiker beeld en geluid</entry>
+  <entry key="685">Ik zou graag organisator van dit overleg worden</entry>
+  <entry key="686">Ik zou graag willen tekenen op het tekenbord</entry>
+  <entry key="687">Ik zou graag mijn beeld en geluid delen</entry>
+  <entry key="688">Je bent organisator van deze kamer</entry>
+  <entry key="689">Je mag tekenen op het tekenbord</entry>
+  <entry key="690">Je mag je beeld en geluid delen</entry>
+  <entry key="691">Bericht van de organisator</entry>
+  <entry key="692">De gebruiker</entry>
+  <entry key="693">wil graag organisator worden. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="694">wil graag tekenen op het tekenbord. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="695">wil graag beeld en geluid delen. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="696">Je moet wachten totdat de organisator er is.</entry>
+  <entry key="697">Annuleren</entry>
+  <entry key="698">Opslaan</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Maand</entry>
+  <entry key="701">Jaar</entry>
+  <entry key="702">Bestand uploaden</entry>
+  <entry key="703">Directory toevoegen</entry>
+  <entry key="704">Vernieuwen</entry>
+  <entry key="705">Vuilnisbak</entry>
+  <entry key="706">Mijn bestanden</entry>
+  <entry key="707">Bestanden in de kamer</entry>
+  <entry key="708">Bestand toevoegen</entry>
+  <entry key="709">Directory toevoegen</entry>
+  <entry key="710">Directory verwijderen</entry>
+  <entry key="711">Naam wijzigen</entry>
+  <entry key="712">Nieuwe directory</entry>
+  <entry key="713">Weet je zeker dat je dit wilt verwijderen?</entry>
+  <entry key="714">Zoek</entry>
+  <entry key="715">Zoek</entry>
+  <entry key="716">Open document</entry>
+  <entry key="717">Toon alle bestanden (Tree View)</entry>
+  <entry key="718">Sluit Document</entry>
+  <entry key="719">Verwijder bestand</entry>
+  <entry key="720">Je mag niet tekenen op het tekenbord. Je dient organisator te zijn of toestemming hiervoor te krijgen. Je kunt de organisator vragen voor toestemming.</entry>
+  <entry key="721">Document eigenschappen</entry>
+  <entry key="722">Start Java</entry>
+  <entry key="723">Start Flash</entry>
+  <entry key="724">Een gebruiker wil een scherm met je delen. Wil je deze zien?</entry>
+  <entry key="725">Op dit momenn deel je een scherm. Klik op de Stop knop om dit te beeidingen.</entry>
+  <entry key="726">Gegevens delen</entry>
+  <entry key="727">Je scherm wordt al getoond aan andere gebruikers!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Stop Delen</entry>
+  <entry key="730">Scherm deler</entry>
+  <entry key="731">Klik op Start om je scherm te delen</entry>
+  <entry key="732">Start delen</entry>
+  <entry key="733">Pause delen</entry>
+  <entry key="734">Selecteer het gebied op je scherm:</entry>
+  <entry key="735">Breedte veranderen</entry>
+  <entry key="736">Het scherm delen is beindigd!</entry>
+  <entry key="737">Hoogte veranderen</entry>
+  <entry key="738">X-afstand</entry>
+  <entry key="739">Y-afstand</entry>
+  <entry key="740">Breedte:</entry>
+  <entry key="741">Hoogte:</entry>
+  <entry key="742">Verbinding is beindigd door de server</entry>
+  <entry key="743">Annuleren</entry>
+  <entry key="744">Start Java</entry>
+  <entry key="745">Als je deze sessie volledig beindigd, kun je hem niet opnieuw bekijken.</entry>
+  <entry key="746">Bevestiging van het sluiten van deze sessie</entry>
+  <entry key="747">Deel scherm</entry>
+  <entry key="748">Neem sessie op</entry>
+  <entry key="749">Samen browsen</entry>
+  <entry key="750">Firefox op Windows geeft soms problemen met samen browsen.</entry>
+  <entry key="751">Vorige</entry>
+  <entry key="752">Volgende</entry>
+  <entry key="753">Opnieuw laden</entry>
+  <entry key="754">Begin</entry>
+  <entry key="755">Laden</entry>
+  <entry key="756">Maak deze website je default website.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Test beeld en geluid voordat je aan een overleg begint.</entry>
+  <entry key="759">Laat deze test niet weer zien</entry>
+  <entry key="760">Annuleren</entry>
+  <entry key="761">Start Overleg</entry>
+  <entry key="762">Niet opnieuw vragen</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Wil je doorgaan zonder test? Je bent dan nog steeds in staan om te chatten en te teken op het tekenbord.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau meter</entry>
+  <entry key="768">Kies Begin</entry>
+  <entry key="769">Begin direct een overleg</entry>
+  <entry key="770">Begin evenement</entry>
+  <entry key="771">Kies Kamer</entry>
+  <entry key="772">Wijzig Instellingen</entry>
+  <entry key="773">Begin Overleg</entry>
+  <entry key="774">Start wizard:</entry>
+  <entry key="775">Start Opname</entry>
+  <entry key="776">Beeld en geluid iedere keer testen</entry>
+  <entry key="777">Openbare kamers</entry>
+  <entry key="778">Openbare kamers zijn toegankelijk voor alle gebruikers!</entry>
+  <entry key="779">Prive kamers</entry>
+  <entry key="780">Prive kamers zijn alleen toegankelijk voor gebruikers van dezelfde organisatie.</entry>
+  <entry key="781">Mijn kamers</entry>
+  <entry key="782">Deze kamers zijn voor persoonlijk gebruik en aangemaakt middels de kalender. Ze hebben een start en eind datum. Ze staan hier zolang ze nog geldig zijn.</entry>
+  <entry key="783">Je dient organisator te zijn om dit te doen.</entry>
+  <entry key="784">Toegang aanvragen</entry>
+  <entry key="785">Toegang aanvragen</entry>
+  <entry key="786">Vragen voor beeld en geluid deelname</entry>
+  <entry key="787">Deze sessie is al gebruikt en kun je niet nogmaals gebruiken.</entry>
+  <entry key="788">BEGIN</entry>
+  <entry key="789">EINDE</entry>
+  <entry key="790">Wil je dit overleg echt verlaten? Het is raadzaam bestanden, tekenbord en chat historie op te schonen!</entry>
+  <entry key="791">Verlaat overleg</entry>
+  <entry key="792">Kamers</entry>
+  <entry key="793">Kies een kamer voor een overleg</entry>
+  <entry key="794">Er is een niet opgeslagen evenement in de kalender. Bewaar of verwijder deze.</entry>
+  <entry key="795">Je dient minimaal 1 persooon uit te nodigen!</entry>
+  <entry key="796">Weet je zeker of je dit evenement wilt verwijderen?</entry>
+  <entry key="797">Waarschuwing</entry>
+  <entry key="798">Evenement toevoegen</entry>
+  <entry key="799">dag</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">maand</entry>
+  <entry key="802">Omschrijving</entry>
+  <entry key="803">Deelnemers</entry>
+  <entry key="804">Kies voor BEGIN om meteen een overleg te starten of ga naar de kalendar om iets te plannen.</entry>
+  <entry key="805">Plan een overleg</entry>
+  <entry key="806">Om een overleg te plannen, dien je een evenement aan de kalender toe te voegen. Voor ieder evenement zal automatisch een kamer aangemaakt worden. Iedere deelnemer zal E-mail ontvangen met een link naar de kamer.&lt;br/&gt;&lt;br/&gt;Er is keuze in verschillende soorten kamers. Tevens kan iedere kamer een eigen layout krijgen.</entry>
+  <entry key="807">Hulp nodig?</entry>
+  <entry key="808">Beperkt</entry>
+  <entry key="809">Zoek</entry>
+  <entry key="810">Toevoegen</entry>
+  <entry key="811">Er is geen gebruiker geselecteerd. Kies eerst een item en klik dan op toevoegen.</entry>
+  <entry key="812">Nieuwe deelnemer</entry>
+  <entry key="813">Opslaan</entry>
+  <entry key="814">Verwijderen</entry>
+  <entry key="815">Evenement details</entry>
+  <entry key="816">Standaard organisators</entry>
+  <entry key="817">Hoofd</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Naam</entry>
+  <entry key="820">E-mail adres</entry>
+  <entry key="821">Nieuwe standaard organisator toevoegen</entry>
+  <entry key="822">Is hoofd-organisator</entry>
+  <entry key="823">Als de kamer voorzien is van organisatoren, worden gebruikers met deze rol automatisch organisator als ze het overleg betreden. Als je dit niet wilt, stel dan een standaard organisator in.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Geef hoofd-organisator rol</entry>
+  <entry key="826">Ontneem hoofd-organisator rol</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Als je een organisatie toevoegd aan een kamer, kunnen alleen gebruikers van die organisatie de kamer betreden (letop: dat de kamer niet openbaar is!)</entry>
+  <entry key="829">Organisatoren</entry>
+  <entry key="830">Conditie</entry>
+  <entry key="831">Organisatie</entry>
+  <entry key="832">Weet je het zeker?</entry>
+  <entry key="833">Weet je zeker dat je dit object wilt verwijderen? Kies voor opslaan om dit te bewaren!</entry>
+  <entry key="834">Er is geen gebruiker geselecteerd!</entry>
+  <entry key="835">Nieuwe standaard organisator toevoegen</entry>
+  <entry key="836">Wil je deze gebruiker hoofd-organisator maken? Een hoofd-organisator is organisator en niemand kan deze organisator rol terugdraaienn. Kies voor opslaan om dit te bewaren!</entry>
+  <entry key="837">Wil je de rol hoofd-organisator weghalen voor de gebruiker? Kies kamer opslaan om dit door te voeren!</entry>
+  <entry key="838">Dit een een hoofd-organisator. Je kunt een organisator rol niet verwijderen van een hoofd-organisator!</entry>
+  <entry key="839">Weet je zeker dat dit bestand/directory verwijder kan worden?</entry>
+  <entry key="840">Verwijder bestand/directory?</entry>
+  <entry key="841">Mevrouw</entry>
+  <entry key="842">Meneer</entry>
+  <entry key="843">Eigenschappen</entry>
+  <entry key="844">Toon muis positie aan kijkers</entry>
+  <entry key="845">Deel geluid middels SIP</entry>
+  <entry key="846">Deel geluid middels SIP en beeld via flash</entry>
+  <entry key="847">Beeldvullend</entry>
+  <entry key="848">Toon scherm</entry>
+  <entry key="849">De gebruiker</entry>
+  <entry key="850">wil zijn scherm delen, wil je dit zien?</entry>
+  <entry key="851">Sluiten</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Deze sessie is beindigd door de gebruiker die aan het delen was!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Opnieuw scherm delen</entry>
+  <entry key="856">Minimaliseren</entry>
+  <entry key="857">Maximaliseren</entry>
+  <entry key="858">Beeld</entry>
+  <entry key="859">Opname tijdlijn</entry>
+  <entry key="860">Mijn opnames</entry>
+  <entry key="861">Openbare opnames</entry>
+  <entry key="862">Informatie</entry>
+  <entry key="863">Naam</entry>
+  <entry key="864">Lengte</entry>
+  <entry key="865">Datum</entry>
+  <entry key="866">Door</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Hoofd - Beeld</entry>
+  <entry key="869">Opnemen</entry>
+  <entry key="870">Opnemen en scherm delen kan op hetzelfde moment. Om je scherm te delen, kies voor scherm delen.</entry>
+  <entry key="871">Begin opnemen</entry>
+  <entry key="872">Stop opnemen</entry>
+  <entry key="873">Download FLV-bestand</entry>
+  <entry key="874">Kamer</entry>
+  <entry key="875">Afspelen</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Gebruiker heeft de microfoon aan</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
new file mode 100644
index 0000000..2cf8149
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencja</entry>
+  <entry key="2">Spotkania</entry>
+  <entry key="3">Wykłady</entry>
+  <entry key="4">Ustawienia</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administracja</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Nagrywanie</entry>
+  <entry key="9">Brak pliku</entry>
+  <entry key="10">Nagrywanie przez wykładowcę</entry>
+  <entry key="11">Podłaczeni użytkownicy:</entry>
+  <entry key="12">Rozpocznij konferencję</entry>
+  <entry key="13">Moje imię</entry>
+  <entry key="14">Wideokonferencja</entry>
+  <entry key="15">Przesłanie pliku</entry>
+  <entry key="16">Odświeżenie listy</entry>
+  <entry key="17">Do pliku głównego</entry>
+  <entry key="18">nowe głosowanie</entry>
+  <entry key="19">Nowe głosowanie.</entry>
+  <entry key="20">Pytanie:</entry>
+  <entry key="21">Rodzaj głosowania:</entry>
+  <entry key="22">Utwórz</entry>
+  <entry key="23">Uwaga: Każdy połączony użytkownik otrzyma wiadomość z nowym głosowaniem.</entry>
+  <entry key="24">Utwórz głosowanie.</entry>
+  <entry key="25">Anuluj</entry>
+  <entry key="26">Tak/Nie</entry>
+  <entry key="27">Liczba 1-10</entry>
+  <entry key="28">Głosowanie</entry>
+  <entry key="29">Musisz być moderatorem aby utworzyć pytanie</entry>
+  <entry key="30">Twój głos został zarejestrowany.</entry>
+  <entry key="31">Już głosowałeś w tym głosowaniu..</entry>
+  <entry key="32">Głosuj !</entry>
+  <entry key="33">Twoja odpowiedź:</entry>
+  <entry key="34">Tak</entry>
+  <entry key="35">Nie</entry>
+  <entry key="36">chciał(a)by wiedzieć:</entry>
+  <entry key="37">Wyniki głosowania</entry>
+  <entry key="38">Pytanie:</entry>
+  <entry key="39">Wyniki:</entry>
+  <entry key="40">Odpowiedzi:</entry>
+  <entry key="41">Nie rozpoczęto żadnego głosowania.</entry>
+  <entry key="42">Głosuj !</entry>
+  <entry key="43">Spotkanie (maks. 4 miejsca)</entry>
+  <entry key="44">Konferencja (maks. 50 miejsc)</entry>
+  <entry key="45">Rodzaj</entry>
+  <entry key="46">Pozostałe miejsca</entry>
+  <entry key="47">Już wybrano</entry>
+  <entry key="48">wejdź</entry>
+  <entry key="49">Moderator wyszedł ze spotkania.</entry>
+  <entry key="50">Informacja systemowa</entry>
+  <entry key="51">Wybierz urządzenie</entry>
+  <entry key="52">Wybierz kamerę:</entry>
+  <entry key="53">Wybierz mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">anuluj</entry>
+  <entry key="56">Połącz się powtórnie.</entry>
+  <entry key="57">Edytuj ustawienia.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Język:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">anuluj</entry>
+  <entry key="62">Wyczyść tablicę</entry>
+  <entry key="63">Czy chcesz wyczyściń tablicę przed dodaniem nowego obrazka?</entry>
+  <entry key="64">Nie pytaj więcej</entry>
+  <entry key="65">nie</entry>
+  <entry key="66">Edytuj ustawienia</entry>
+  <entry key="67">Proszę potwierdziś zmazanie tablicy.</entry>
+  <entry key="68">Informacje o użytkowniku</entry>
+  <entry key="69">Wyczyść obszar rysowania</entry>
+  <entry key="70">Cofnij</entry>
+  <entry key="71">Powrtórz</entry>
+  <entry key="72">Wskaż obiekt</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Malowanie</entry>
+  <entry key="75">Rysuj linię</entry>
+  <entry key="76">Podkreśl</entry>
+  <entry key="77">Prostokąt</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Strzałka</entry>
+  <entry key="80">Skasuj wskazany obiekt</entry>
+  <entry key="81">Złóż wniosek o moderację</entry>
+  <entry key="82">złóż</entry>
+  <entry key="83">anuluj</entry>
+  <entry key="84">Zostań moderatorem</entry>
+  <entry key="85">zamknij</entry>
+  <entry key="86">kursywa</entry>
+  <entry key="87">pogrubiony</entry>
+  <entry key="88">CZEKAM</entry>
+  <entry key="89">Użytkownik prosi o prawa moderatora. Możesz nadać mu tylko dostęp do tablicy, albo pełne prawa moderatorskie. Użytkownik:</entry>
+  <entry key="90">akceptuj</entry>
+  <entry key="91">odrzuć</entry>
+  <entry key="92">anuluj</entry>
+  <entry key="93">Wysyłam prośbę do następujących użytkowników:</entry>
+  <entry key="94">Przyjęte</entry>
+  <entry key="95">Odrzucone</entry>
+  <entry key="96">Zmień moderatora</entry>
+  <entry key="97">Nie jesteś tutaj moderatorem!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Ten pokój jest pełny. Zajrzyj później.</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">zamknij</entry>
+  <entry key="102">błąd w danych wejściowych</entry>
+  <entry key="103">4 lub więcej znaków; duże i małe litery mają znaczenie!</entry>
+  <entry key="104">Hasło musi składać się przynajmniej z 4 znaków</entry>
+  <entry key="105">Ta nazwa użytkownika jest już zajęta</entry>
+  <entry key="106">Ten adres e-mail jest już zarejestrowany</entry>
+  <entry key="107">Błąd systemu. Skontaktuj się z administratorem.</entry>
+  <entry key="108">Logowanie</entry>
+  <entry key="109">Użytkownik:</entry>
+  <entry key="110">Hasło:</entry>
+  <entry key="111">Język</entry>
+  <entry key="112">Zapisz się</entry>
+  <entry key="113">Zapisz się</entry>
+  <entry key="114">Użytkownik:</entry>
+  <entry key="115">Hasło:</entry>
+  <entry key="116">Powtórz:</entry>
+  <entry key="117">Imię:</entry>
+  <entry key="118">Nazwisko:</entry>
+  <entry key="119">e-mail:</entry>
+  <entry key="120">Kraj:</entry>
+  <entry key="121">Zarejestruj</entry>
+  <entry key="122">Anuluj</entry>
+  <entry key="123">Nie zapisałeś się jeszcze?</entry>
+  <entry key="124">Strona startowa</entry>
+  <entry key="125">Użytkownicy</entry>
+  <entry key="126">Grupy</entry>
+  <entry key="127">Organizacje</entry>
+  <entry key="128">Pokoje spotkań</entry>
+  <entry key="129">publiczne</entry>
+  <entry key="130">Organizacja</entry>
+  <entry key="131">Wejdź</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Hasło</entry>
+  <entry key="134">Powtórz</entry>
+  <entry key="135">Imię</entry>
+  <entry key="136">Nazwisko</entry>
+  <entry key="137">e-mail</entry>
+  <entry key="138">Urodziny</entry>
+  <entry key="139">Ulica/Numer</entry>
+  <entry key="140">Kod/Miasto</entry>
+  <entry key="141">Kraj</entry>
+  <entry key="142">Informacje adesowe</entry>
+  <entry key="143">Dane użytkownika</entry>
+  <entry key="144">Zapisz</entry>
+  <entry key="145">Zapisz</entry>
+  <entry key="146">ID-użytkownika</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Imię</entry>
+  <entry key="149">Nazwisko</entry>
+  <entry key="150">Pokaż następny</entry>
+  <entry key="151">Pokaż poprzedni</entry>
+  <entry key="152">Skasuj wpis</entry>
+  <entry key="153">Anuluj</entry>
+  <entry key="154">Skasuj</entry>
+  <entry key="155">Nowy wpis</entry>
+  <entry key="156">Odświerz wpis</entry>
+  <entry key="157">Skasuj wpis</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">zablokowany</entry>
+  <entry key="160">odblokowany</entry>
+  <entry key="161">Organizacje</entry>
+  <entry key="162">Kalendarz</entry>
+  <entry key="163">zamknij</entry>
+  <entry key="164">ID-organizacji</entry>
+  <entry key="165">Nazwa</entry>
+  <entry key="166">Użytkownik</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Administrator</entry>
+  <entry key="169">Prawa użytkownika</entry>
+  <entry key="170">Organizacja</entry>
+  <entry key="171">nazwa</entry>
+  <entry key="172">Dodaj organizację</entry>
+  <entry key="173">Dodaj organizację</entry>
+  <entry key="174">Anuluj</entry>
+  <entry key="175">Dodaj</entry>
+  <entry key="176">skasuj organizację</entry>
+  <entry key="177">Użytkownik</entry>
+  <entry key="178">dodaj użytkownika</entry>
+  <entry key="179">skasuj użytkownika</entry>
+  <entry key="180">Dodaj uzytkownika do organizacji</entry>
+  <entry key="181">Wyszukaj użytkownika</entry>
+  <entry key="182">Wyszukaj</entry>
+  <entry key="183">Użytkownik</entry>
+  <entry key="184">Organizacja</entry>
+  <entry key="185">Wprowadź</entry>
+  <entry key="186">Pokoje konferencyjne</entry>
+  <entry key="187">Pokoje konferencyjne</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nazwa</entry>
+  <entry key="190">publiczny</entry>
+  <entry key="191">Organizacje</entry>
+  <entry key="192">Pokoje spotkań</entry>
+  <entry key="193">Nazwa</entry>
+  <entry key="194">Rodzaj</entry>
+  <entry key="195">Publiczny</entry>
+  <entry key="196">Komentarz</entry>
+  <entry key="197">zapisz i eksportuj</entry>
+  <entry key="198">wczytaj</entry>
+  <entry key="199">zapisz jako</entry>
+  <entry key="200">Nazwa pliku</entry>
+  <entry key="201">nazwa pliku</entry>
+  <entry key="202">anuluj</entry>
+  <entry key="203">zapisz</entry>
+  <entry key="204">Błąd</entry>
+  <entry key="205">wczytuję</entry>
+  <entry key="206">wczytane obiekty</entry>
+  <entry key="207">synchronizuję klientów; klienci oczekujący:</entry>
+  <entry key="208">Wczytuję obrazek</entry>
+  <entry key="209">synchronizuję klientów; klienci oczekujący:</entry>
+  <entry key="210">wyczyść obszar rysowania</entry>
+  <entry key="211">wyczyść obszar rysowania - znikną wszystkie informacje z tablicy</entry>
+  <entry key="212">Potwierdź zanim wczytam plik</entry>
+  <entry key="213">Wyślij zaproszenie</entry>
+  <entry key="214">Wyślij zaproszenie</entry>
+  <entry key="215">Temat</entry>
+  <entry key="216">Do</entry>
+  <entry key="217">Treść zaproszenia</entry>
+  <entry key="218">Wyślij</entry>
+  <entry key="219">anuluj</entry>
+  <entry key="220">wyślij</entry>
+  <entry key="221">Dane użytkownika</entry>
+  <entry key="222">Twój pseudonim na potrzeby tej konferencji</entry>
+  <entry key="223">Pseudonim</entry>
+  <entry key="224">Imię</entry>
+  <entry key="225">Nazwisko</entry>
+  <entry key="226">e-mail</entry>
+  <entry key="227">Język</entry>
+  <entry key="228">wejdź</entry>
+  <entry key="229">Wczytuję</entry>
+  <entry key="230">Wczytywanie danych, proszę czekać!</entry>
+  <entry key="231">Niepoprawne haslo</entry>
+  <entry key="232">Proszę wprowadzić dwa identyczne hasła o długości przynajmniej 6 znaków.</entry>
+  <entry key="233">Niepoprawny e-mail</entry>
+  <entry key="234">Wprowadziłe(a)ś niepoprawny adres e-mail</entry>
+  <entry key="235">Rejestracja zakończona</entry>
+  <entry key="236">Konto utworzone. Możesz się zalogować.</entry>
+  <entry key="237">Nie możesz teraz pokazać swojego ekranu. Ktoś inny pokazuje teraz swój ekran.</entry>
+  <entry key="238">Pokazywanie ekranu nie jest teraz dopuszczalne</entry>
+  <entry key="239">Pokaż swój ekran</entry>
+  <entry key="240">Zbyt niska przepustowość łącza: synchronizacja nie powiodła się. Pominięto kilka ramek. Jeśli ten komunikat powtarza się często poproś moderatora o obniżenie jakości transmisji.</entry>
+  <entry key="241">Ekran użytkownika:</entry>
+  <entry key="242">Obraz</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Czat</entry>
+  <entry key="245">Pliki</entry>
+  <entry key="246">Uczestnicy</entry>
+  <entry key="247">Pobierz oryginalny dokument</entry>
+  <entry key="248">Pobierz dokument jako PDF</entry>
+  <entry key="249">Pokaż prezentację na tablicy</entry>
+  <entry key="250">Konfiguracja</entry>
+  <entry key="251">Przesuń obiekt</entry>
+  <entry key="252">Skaluj obiekt</entry>
+  <entry key="253">%</entry>
+  <entry key="254">z</entry>
+  <entry key="255">Przejdź do pierwszej strony</entry>
+  <entry key="256">Przejdź do poprzedniej strony</entry>
+  <entry key="257">Przejdź do następnej strony</entry>
+  <entry key="258">Przejdź do ostatniej strony</entry>
+  <entry key="259">Zmniejsz</entry>
+  <entry key="260">Powiększ</entry>
+  <entry key="261">Pan</entry>
+  <entry key="262">Pani</entry>
+  <entry key="263">Konfiguracja</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Klucz</entry>
+  <entry key="266">Konfiguracja</entry>
+  <entry key="267">Klucz</entry>
+  <entry key="268">ostatnio aktualizowane</entry>
+  <entry key="269">aktualizowane przez</entry>
+  <entry key="270">komentarz</entry>
+  <entry key="271">Wartość</entry>
+  <entry key="272">z</entry>
+  <entry key="273">Użytkownicy</entry>
+  <entry key="274">usuń użytkownika z organizacji</entry>
+  <entry key="275">Sk.</entry>
+  <entry key="276">Użytkownik już należy to tej organizacji.</entry>
+  <entry key="277">Wiadomości</entry>
+  <entry key="278">Łącza</entry>
+  <entry key="279">Przejdź do konferencji</entry>
+  <entry key="280">Przejdź do sali wykładowej</entry>
+  <entry key="281">Pomoc i wsparcie</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Zgłoś błąd!</entry>
+  <entry key="285">więcej</entry>
+  <entry key="286">Witryna projektu (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista mailingowa użytkowników (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Zapamiętaj login i hasło</entry>
+  <entry key="289">Zawartość</entry>
+  <entry key="290">Moja strona startowa</entry>
+  <entry key="291">Moje zaplanowane spotkania</entry>
+  <entry key="292">Moje zaplanowane wykłady</entry>
+  <entry key="293">Publiczne spotkania</entry>
+  <entry key="294">Prywatne spotkania</entry>
+  <entry key="295">Publiczne wykłady</entry>
+  <entry key="296">Prywatne wykłady</entry>
+  <entry key="297">Public Content</entry>
+  <entry key="298">Prywatna zawartość</entry>
+  <entry key="299">Osobista zawartość</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderacja</entry>
+  <entry key="302">Poproś o moderację</entry>
+  <entry key="303">Głosowania</entry>
+  <entry key="304">Wybierz plik</entry>
+  <entry key="305">Ustawienia</entry>
+  <entry key="306">Ustawienia kamery</entry>
+  <entry key="307">Ustawienia tablicy</entry>
+  <entry key="308">Wyjście</entry>
+  <entry key="309">Wróć do listy pokojów</entry>
+  <entry key="310">Wyloguj</entry>
+  <entry key="311">Zapomniałe(a)ś hasła?</entry>
+  <entry key="312">Ustaw nowe hasło</entry>
+  <entry key="313">Według maila</entry>
+  <entry key="314">Według loginu</entry>
+  <entry key="315">Twój adres e-mail</entry>
+  <entry key="316">Twój login</entry>
+  <entry key="317">Wyślij e-mail z prośbą o potwierdzenie zmiany hasła</entry>
+  <entry key="318">Nie znaleziono adresu. Upewnij się, że wpisałe(a)ś ten sam adres, jaki podałe(a)ś przy zakładaniu konta.</entry>
+  <entry key="319">Proszę podać e-mail lub nazwę użytkownika.</entry>
+  <entry key="320">Nie ma użytkownika o takiej nazwie</entry>
+  <entry key="321">E-mail zawierający specjalne łącze (link) został wysłany na twój adres. Sprawdź swoją pocztę. Jeśli nie otrzymałe(a)ś listu, sprawdź/zmień ustawienia antyspamowe swojej skrzynki i ponownie wygeneruj mail potwierdzający zmianę hasła.</entry>
+  <entry key="322">Informacja</entry>
+  <entry key="323">Błąd</entry>
+  <entry key="324">Niepoprawny kod. Nie ma takiego użytkownika.</entry>
+  <entry key="325">Ustaw nowe hasło.</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">zmień hasło</entry>
+  <entry key="328">nowe hasło</entry>
+  <entry key="329">powtórz hasło</entry>
+  <entry key="330">Hasła, które wpisałe(a)ś nie były identyczne.</entry>
+  <entry key="331">4 lub więcej znaków; małe i duże litery mają znaczenie!</entry>
+  <entry key="332">Hasło ustawione. Możesz się zalogować.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Nieznany błąd. Proszę poinformować administratora.</entry>
+  <entry key="335">Nie ma takiego użytkownika</entry>
+  <entry key="336">Niepoprawne hasło</entry>
+  <entry key="337">Poprawnie wylogowano.</entry>
+  <entry key="338">Samodzielna rejestracja nie jest możliwa.</entry>
+  <entry key="339">Niepoprawny e-mail</entry>
+  <entry key="340">plik o tej nazwie istnieje, proszę wybrac inną nazwę pliku</entry>
+  <entry key="341">nazwa pliku za krótka</entry>
+  <entry key="342">Nie mogłem zapisać adresu</entry>
+  <entry key="343">Dodano użytkownika, ale należy go przypisać do organizacji, bo w innym przypadku nie będzie mógł się zalogować.</entry>
+  <entry key="344">Nowy wpis</entry>
+  <entry key="345">Nie ma pola o takim identyfikatorze.</entry>
+  <entry key="346">To pole nie ma etykiety.</entry>
+  <entry key="347">Potrzebne zezwolenie administratora</entry>
+  <entry key="348">Edytor języka</entry>
+  <entry key="349">Język</entry>
+  <entry key="350">ID-etykiety</entry>
+  <entry key="351">Nazwa etykiety</entry>
+  <entry key="352">Wartość</entry>
+  <entry key="353">Wartości pola</entry>
+  <entry key="354">Nazwa etykiety</entry>
+  <entry key="355">Wartość etykiety</entry>
+  <entry key="356">ID-etykiety</entry>
+  <entry key="357">Skasowałeś tylko etykietę, a nie pole! Nie możesz skasować pola, może mieć etykiety w innych językach.</entry>
+  <entry key="358">Niepoprawne ID etykiety. FieldLanguagesvalues_Id nie zostało znalezione w bazie.</entry>
+  <entry key="359">Nie można skasować tego pola. Można kasować tylko etykiety, a nie pola. Obecnie brak etykiety. Albo nie wskazano żadnego pola, albo to pole nie ma etykiety w języku, któty edytujesz.</entry>
+  <entry key="360">eksport</entry>
+  <entry key="361">Musisz się przelogować, aby zobaczyć zmiany.</entry>
+  <entry key="362">Dodaj nowy język</entry>
+  <entry key="363">skasuj język</entry>
+  <entry key="364">Dodaj nowy język</entry>
+  <entry key="365">Nazwa</entry>
+  <entry key="366">dodaj język</entry>
+  <entry key="367">Kopia zapasowa</entry>
+  <entry key="368">pierwszy</entry>
+  <entry key="369">poprzedni</entry>
+  <entry key="370">następny</entry>
+  <entry key="371">ostatni</entry>
+  <entry key="372">użytkownik mówi (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">włącz/wyłącz dźwięk</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Twoje ustawienia</entry>
+  <entry key="376">cześć,</entry>
+  <entry key="377">Edytuj swój profil</entry>
+  <entry key="378">Nowe wiadomości:</entry>
+  <entry key="379">Prześlij nowy obrazek</entry>
+  <entry key="380">Dane użytkowników - eksport</entry>
+  <entry key="381">Wszystkie organizacje muszą już istnieć!</entry>
+  <entry key="382">rozpocznij eksport</entry>
+  <entry key="383">wg organizacji</entry>
+  <entry key="384">rozpocznij eksport</entry>
+  <entry key="385">Dane użytkowników - import</entry>
+  <entry key="386">wskaż users.xml</entry>
+  <entry key="387">importuj</entry>
+  <entry key="388">Eksport do XML-a. Te pliki mogą być użyte:&lt;br/&gt; - jako twój wkład do projektu - do zaimportowania do innego systemu&lt;br/&gt; - jako kopia zapasowa - do dostosowania komunikatów do swoich potrzeb&lt;br/&gt; - do umieszczenia w katalogu z plikami językowymi przed kolejną instalacją</entry>
+  <entry key="389">Wskaż plik językowy do zaimportowania. &lt;br/&gt;Wybierz język z listy! &lt;br/&gt;Nie ważne jaka jest nazwa pliku, &lt;br/ &gt;zostanie on zaimportowany do tego języka!</entry>
+  <entry key="390">import - wskaż plik</entry>
+  <entry key="391">Zapisz jako</entry>
+  <entry key="392">Nazwa:</entry>
+  <entry key="393">Komentarz:</entry>
+  <entry key="394">zapisz</entry>
+  <entry key="395">Nagrania</entry>
+  <entry key="396">Przeglądarka nagrań</entry>
+  <entry key="397">Nagrania z pokojów publicznych i prywatnych</entry>
+  <entry key="398">Użytkownicy:</entry>
+  <entry key="399">Dołączyli:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Użytkownicy w tym pokoju:</entry>
+  <entry key="402">odśwież</entry>
+  <entry key="403">Pokój jest pełny. Zajrzyj za parę minut.</entry>
+  <entry key="404">kliknij na pokój, aby zobaczyć szczegóły</entry>
+  <entry key="405">Czatuj z użytkownikami tego pokoju:</entry>
+  <entry key="406">Pokój:</entry>
+  <entry key="407">Użytkownicy w tym pokoju:</entry>
+  <entry key="408">od:</entry>
+  <entry key="409">odtwórz nagranie</entry>
+  <entry key="410">Długość:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Nie możesz tu nic zmieniać. To jest nagranie!</entry>
+  <entry key="413">Odtwarzaj to nagranie</entry>
+  <entry key="414">Odtwarzaj / Pauza</entry>
+  <entry key="415">Rozpocznij nagrywanie</entry>
+  <entry key="416">zakończ nagrywanie</entry>
+  <entry key="417">Nagrywanie:</entry>
+  <entry key="418">Już ktoś to w tej chwili nagrywa:</entry>
+  <entry key="419">Nagrywane przez użytkownika:</entry>
+  <entry key="420">anuluj</entry>
+  <entry key="421">Nagrywanie zostanie anulowane i nie będzie zapisane.</entry>
+  <entry key="422">kontynuuj</entry>
+  <entry key="423">Zamknij to okno i powróć do nagrywania</entry>
+  <entry key="424">zmień kolor linii</entry>
+  <entry key="425">Wybierz kolor</entry>
+  <entry key="426">Wyłącz / Włącz kolor linii</entry>
+  <entry key="427">zmień kolor wypełnienia</entry>
+  <entry key="428">Wyłącz / Włącz kolor wypełnienia</entry>
+  <entry key="429">Zmień grubość linii</entry>
+  <entry key="430">zamknij</entry>
+  <entry key="431">zmień rozmiar czcionki</entry>
+  <entry key="432">Skasuj nagranie</entry>
+  <entry key="433">Gość</entry>
+  <entry key="434">Przez:</entry>
+  <entry key="435">Nazwa</entry>
+  <entry key="436">Pokój</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">anuluj</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nazwa</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Skasuj transkrypt czatu</entry>
+  <entry key="443">Czat</entry>
+  <entry key="444">wyślij wiadomość</entry>
+  <entry key="445">Emotikony</entry>
+  <entry key="446">Emotikony</entry>
+  <entry key="447">Wybierz udostępniane urządzenia</entry>
+  <entry key="448">Dźwięk and Wideo</entry>
+  <entry key="449">Tylko dźwięk</entry>
+  <entry key="450">Tylko obraz</entry>
+  <entry key="451">bez transmisji Audio/Wideo (statyczny obrazek)</entry>
+  <entry key="452">Nie będzie transmisji audio/wideo z twojego komputera. Zamiast tego zostanie pokazany obrazek (awatar) z twojego profilu. Wybierz te ustawienia, jeśli masz problemy z przepustowością lub bardzo wolne łącze internetowe.</entry>
+  <entry key="453">PO</entry>
+  <entry key="454">WT</entry>
+  <entry key="455">ŚR</entry>
+  <entry key="456">CZ</entry>
+  <entry key="457">PT</entry>
+  <entry key="458">SO</entry>
+  <entry key="459">ND</entry>
+  <entry key="460">Poniedziałek</entry>
+  <entry key="461">Wtorek</entry>
+  <entry key="462">Środa</entry>
+  <entry key="463">Czwartek</entry>
+  <entry key="464">Piątek</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Niedziela</entry>
+  <entry key="467">TY</entry>
+  <entry key="468">Tydzień kalendarzowy</entry>
+  <entry key="469">Styczeń</entry>
+  <entry key="470">Luty</entry>
+  <entry key="471">Marzec</entry>
+  <entry key="472">Kwiecień</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Czerwiec</entry>
+  <entry key="475">Lipiec</entry>
+  <entry key="476">Sierpień</entry>
+  <entry key="477">Wrzesień</entry>
+  <entry key="478">Październik</entry>
+  <entry key="479">Listopad</entry>
+  <entry key="480">Grudzień</entry>
+  <entry key="481">Kalendarz</entry>
+  <entry key="482">Uczetnicy</entry>
+  <entry key="483">Pokaż ustawienia wyglądu</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Szerokość | Wysokość</entry>
+  <entry key="486">Kontener wideo</entry>
+  <entry key="487">Kontener moderacji</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Kontener tablicy</entry>
+  <entry key="490">Włączony</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Szerokość | Wysokość</entry>
+  <entry key="493">Kontener plików, czatu, uczestników</entry>
+  <entry key="494">Włączony</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Szerokość | Wysokość</entry>
+  <entry key="497">Moderator wyszedł z pokoju. Nikt obecnie nie przeprowadza prezentacji. Możesz wystąpić z wnioskiem o zostanie moderatorem, albo poczekać.</entry>
+  <entry key="498">W pokoju nie ma moderatora, ale są uczestnicy. Możesz wystąpić z wnioskiem o zostanie moderatorem, albo poczekać.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Zaproszenie</entry>
+  <entry key="501">Wiadomość od użytkownika:</entry>
+  <entry key="502">Wiadomość:</entry>
+  <entry key="503">Kliknij na link, aby wziąć udział w spotkaniu:</entry>
+  <entry key="504">Kliknij tu, any wejść do pokoju</entry>
+  <entry key="505">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="506">{0} Zapisy</entry>
+  <entry key="507">Twoje dane użytkownika:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Hasło:</entry>
+  <entry key="510">e-mail:</entry>
+  <entry key="511">Zespół {0}</entry>
+  <entry key="512">{0} Zapisy</entry>
+  <entry key="513">{0} - zmiana hasła</entry>
+  <entry key="514">Kliknij na ten link, aby wprowadzić nowe hasło:</entry>
+  <entry key="515">Kliknij tutaj, aby wprowadzić nowe hasło</entry>
+  <entry key="516">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="517">{0} Zmiana hasła</entry>
+  <entry key="518">Proszę wprowadzić poprawną datę, np. 24.12.2001 (dd.mm.rrrr)</entry>
+  <entry key="519">Proszę wprowadzić poprawny adres e-mail, np. name@mail.com</entry>
+  <entry key="520">Proszę wpisać liczbę dziesiętną, np. 1.00</entry>
+  <entry key="521">Proszę wpisać liczbę całkowitą, np. 100</entry>
+  <entry key="522">Proszę wpisać poprawny numer telefonu, np. +48 12 1234567</entry>
+  <entry key="523">Proszę wpisać poprawny czas, np. 12:23 (gg:mm)</entry>
+  <entry key="524">Zabezpieczone hasłem</entry>
+  <entry key="525">Hasło</entry>
+  <entry key="526">Okres ważności</entry>
+  <entry key="527">Nieskończony</entry>
+  <entry key="528">Okres</entry>
+  <entry key="529">Jednorazowe</entry>
+  <entry key="530">Ważne od:</entry>
+  <entry key="531">Ważne do:</entry>
+  <entry key="532">Zaproszenie do {0}</entry>
+  <entry key="533">Nie ma zaproszenia z takim kodem</entry>
+  <entry key="534">To zaproszenie było już uzyte. Ten rodzaj zaproszenia nie może być wykorzystany powtórnie.</entry>
+  <entry key="535">Ten kod zaproszenia jest nieważny.</entry>
+  <entry key="536">Hasło:</entry>
+  <entry key="537">Sprawdź hasło</entry>
+  <entry key="538">Niepoprawne hasło!</entry>
+  <entry key="539">Audio_Wideo</entry>
+  <entry key="540">Synchronizuj Audio/Wideo</entry>
+  <entry key="541">Zalogowanie było poprawne, ale podana sesja nie jest aktywna lub przechowywana na serwerze. Musisz otrzymać nowy identyfikator sesji i potórzyć logowanie.</entry>
+  <entry key="542">Ten identyfikator sesji nie jest zalogowany, albo nie ma uprawnień administratorskich. Brama SOAP wymaga użytkownika o uprawnieniach administratora do zamieszczania nowych użytkowników.</entry>
+  <entry key="543">Ta sesja nie ma przyłaczonych danych użytkownika. Albo nie wuwołałeś poprawnie bramy SOAP przed dostępem do aplikacji, albo używasz niewłaściwego identyfikatora sesji.</entry>
+  <entry key="544">Nagrywanie jest obecnie w fazie BETA testów!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">oś-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">oś-y</entry>
+  <entry key="549">s</entry>
+  <entry key="550">szerokość</entry>
+  <entry key="551">w</entry>
+  <entry key="552">wysokość</entry>
+  <entry key="553">Zmień przezroczystość</entry>
+  <entry key="554">Otwórz przeglądarkę</entry>
+  <entry key="555">Zamknij przeglądarkę</entry>
+  <entry key="556">Utracono połączenie z serwerem. Przeładuj aplikację lub sprawdź swoje połaczenie sieciowe.</entry>
+  <entry key="557">Wskaźnik</entry>
+  <entry key="558">Synchronizuję</entry>
+  <entry key="559">Synchronizuję użytkowników, proszę czekać</entry>
+  <entry key="560">&lt;u&gt;Pobierz jako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Pobierz jako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Pobierz jako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Pobierz jako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Pobierz jako TIF&lt;/u&gt;</entry>
+  <entry key="565">Typ zaproszenia:</entry>
+  <entry key="566">Kategoria:</entry>
+  <entry key="567">Powtarzanie:</entry>
+  <entry key="568">brak</entry>
+  <entry key="569">lokalizacja:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Koniec</entry>
+  <entry key="572">Tytuł:</entry>
+  <entry key="573">Komentarz:</entry>
+  <entry key="574">Zaproś ludzi</entry>
+  <entry key="575">Codziennie</entry>
+  <entry key="576">Co miesiąc</entry>
+  <entry key="577">Co roku</entry>
+  <entry key="578">Koniec okresu jest przed jego początkiem!</entry>
+  <entry key="579">Proszę podać tytuł!</entry>
+  <entry key="580">PDL</entry>
+  <entry key="581">Włącz to, jeśli piszesz od prawej do lewej</entry>
+  <entry key="582">Tablica rozdzielcza</entry>
+  <entry key="583">Oglądaj nagrane spotkavia i wykłady</entry>
+  <entry key="584">Spotkanie - konferencja z 4 (do 16) użytkownikami&lt;br/ &gt;każdy ma możliwość nadawania audio/wideo</entry>
+  <entry key="585">Wykład - konferencja do 200 uczestników&lt;br/&gt;Tylko moderator może nadawać audio/wideo</entry>
+  <entry key="586">Utwórz użytkowników, pokoje, organizacje&lt;br/&gt; + zmień konfigurację</entry>
+  <entry key="587">Użytkownicy w tym pokoju</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Wczytuję dokument. Proszę czekać na zsynchronizowanie stacji klienckich.</entry>
+  <entry key="592">Przesyłanie zakończone, przeprowadzam konwersję dokumentu ...</entry>
+  <entry key="593">Zacznij przesyłanie</entry>
+  <entry key="594">Przesyłanie i import. Proszę wybrać plik z dysku.</entry>
+  <entry key="595">Anuluj</entry>
+  <entry key="596">Wybierz plik</entry>
+  <entry key="597">Połączenia</entry>
+  <entry key="598">Wartość</entry>
+  <entry key="599">ID strumienia</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Połączony od</entry>
+  <entry key="602">Pokój / zakres</entry>
+  <entry key="603">Wyrzuć użytkownika</entry>
+  <entry key="604">Wyrzuć użytkownika</entry>
+  <entry key="605">Czy chcesz wyrzucić (rozłączyć) połączenie tego użytkownika? &lt;br/&gt; Wyrzucisz użytkownika z pokoju, ale może on się powtórnie zalogować.</entry>
+  <entry key="606">Połączenie przerwane przez administratora lub moderatora.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Użytkownik jest moderatorem tego pokoju</entry>
+  <entry key="609">Użytkownik ma prawo do rysowania na tablicy</entry>
+  <entry key="610">(Re)startuj Audio/Wideo zmień ustawienia urządzeń</entry>
+  <entry key="611">Pozwól temu użytkownikowi rysować na tablicy</entry>
+  <entry key="612">Zabierz temu użytkownikowi prawo do rysowania na tablicy</entry>
+  <entry key="613">Użytkownicy</entry>
+  <entry key="614">Pliki</entry>
+  <entry key="615">Tablica</entry>
+  <entry key="616">Czat</entry>
+  <entry key="617">Twoje konto jest przypisane do kilku organizacji. Proszę wybrać jedną z nich na potrzeby bieżącej sesji.</entry>
+  <entry key="618">Ten pokój jest chwilowo pełny. Zajrzyj później.</entry>
+  <entry key="619">Rodzaj pokoju</entry>
+  <entry key="620">Pokój spotkań</entry>
+  <entry key="621">Czas serwera</entry>
+  <entry key="622">{0} - przypomnienie</entry>
+  <entry key="623">Wiadomość od użytkownika:</entry>
+  <entry key="624">Wiadomość:</entry>
+  <entry key="625">Kliknij na ten link, aby wziąć udział w spotkaniu:</entry>
+  <entry key="626">Kliknij tutaj, aby wejść do pokoju</entry>
+  <entry key="627">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="628">wyszukiwanie wewnętrzne</entry>
+  <entry key="629">zewnętrzni użytkownicy</entry>
+  <entry key="630">pre-nazwa</entry>
+  <entry key="631">nazwa</entry>
+  <entry key="632">e-mail</entry>
+  <entry key="633">potwierdź wylogowanie</entry>
+  <entry key="634">Wylogowanie. Jesteś pewien?</entry>
+  <entry key="635">Działania</entry>
+  <entry key="636">Pokój demo</entry>
+  <entry key="637">Czas demonstracji</entry>
+  <entry key="638">Zegar spotkania</entry>
+  <entry key="639">Ten pokój jest pokojem demo. Aby wyłączyć to ostrzeżenie utwórz prywatny pokój spotkań, dla własnego użytku, albo postaw własny serwer. Zostaniesz wylogowany automatycznie za:</entry>
+  <entry key="640">Moderowany</entry>
+  <entry key="641">Poczekaj, aż moderator wejdzie do pokoju. Moderatorem może być wykładowca, administrator lub twórca tego pokoju.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Pojawia się udostępniony ekran</entry>
+  <entry key="644">Pojawia się nowy ekran udostępniony przez:</entry>
+  <entry key="645">Rozpocznij udostępnianie</entry>
+  <entry key="646">Dodaj nowe spotkanie</entry>
+  <entry key="647">Pokój spotkań</entry>
+  <entry key="648">Sala wykładowa</entry>
+  <entry key="649">Moderacja</entry>
+  <entry key="650">Moderuj użytkowników</entry>
+  <entry key="651">Moderuj pokoje</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Czy chcesz aby użytkownik został moderatorem tej organizacji?</entry>
+  <entry key="654">Proszę wskazać organizację, zanim spróbujesz przypisać do niej użytkownika!</entry>
+  <entry key="655">Organizacja - Moderator</entry>
+  <entry key="656">Czy rzeczywiście chcesz usunąć użytkownika z organizacji?</entry>
+  <entry key="657">Ten użytkownik jest moderatorem</entry>
+  <entry key="658">Ten użytkownik nie jest moderatorem</entry>
+  <entry key="659">Czy chcesz aby użytkownik nie był moderatorem tej organizacji?</entry>
+  <entry key="660">Dodawaj i kasuj użytkowników i pokoje w swojej organizacji</entry>
+  <entry key="661">Czy rzeczywiście chcesz skasować ten wpis?</entry>
+  <entry key="662">Czy rzeczywiście chcesz usunąć użytkownika z organizacji? Usuniesz tylko powiązanie użytkownika z tą organizacją. Aby rzeczywiście usunąć samego użytkownika, musisz zalogować się do panelu administratorskiego.</entry>
+  <entry key="663">Nie możesz usunąć samego siebie!</entry>
+  <entry key="664">Ta metoda wymaga użycia konta administratorskiego!</entry>
+  <entry key="665">Nie ma sesji powiązanym z tym ID.</entry>
+  <entry key="666">To jest konto administratora lub moderatora. Możesz etdytować to konto tylko poprzez panel administracyjny.</entry>
+  <entry key="667">Aby dokończyć rejestrację proszę kliknąć na link, albo skopiować URL do paska adresu w przeglądarce internetowej.</entry>
+  <entry key="668">Kliknij tu, aby potwierdzić e-mail</entry>
+  <entry key="669">Nie znaleziono użytkownika dla tego kodu.</entry>
+  <entry key="670">Ten użytkownik już jest zaktywowany!</entry>
+  <entry key="671">Poprawnie aktywowałe(a)ś swoje konto!</entry>
+  <entry key="672">Zaloguj się</entry>
+  <entry key="673">Twoje konto nie zostało aktywowane. Najpierw musisz kliknąć na link w e-mailu, który otrzymałeś podczas rejestracji.</entry>
+  <entry key="674">Poprawnie się zapisałe(a)ś. Wysłaliśmy Ci e-mail z kodem potwierdzającym. Proszę sprawdź swoją skrzynkę.</entry>
+  <entry key="675">Zabierz prawa moderatora temu użytkownikowi</entry>
+  <entry key="676">Nadaj prawa moderatora temu użytkownikowi</entry>
+  <entry key="677">Użytkownik</entry>
+  <entry key="678">Dostęp do tablicy</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderacja: Proszę wybrać użytkownika z listy, aby nadać mu prawa dostępu do tablicy, moderacji lub przesyłania wideo.</entry>
+  <entry key="681">Ten użytkownik jest już moderatorem, więc automatycznie ma prawa do rysowania na tablicy.</entry>
+  <entry key="682">To ty! Nie możesz odebrać praw moderatora samemu sobie.</entry>
+  <entry key="683">Zezwól użytkownikowi przesyłać jego głos i obraz wideo</entry>
+  <entry key="684">Usuń głos i wideo tego użytkownika</entry>
+  <entry key="685">Chciał(a)bym otrzymać prawa moderatora tego pokoju</entry>
+  <entry key="686">Chciał(a)bym otrzymać prawo do rysowania na tablicy</entry>
+  <entry key="687">Cciał(a)bym przesyłać głos i obraz wideo</entry>
+  <entry key="688">Jesteś moderatorem tego pokoju</entry>
+  <entry key="689">Masz prawo rysować na tablicy</entry>
+  <entry key="690">Możesz transmitować dźwięk i obraz wideo</entry>
+  <entry key="691">Wiadomość dla moderatora</entry>
+  <entry key="692">Użytkownik</entry>
+  <entry key="693">chciałby otrzymać prawa moderatorskie. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo moderacji.</entry>
+  <entry key="694">rysować na tablicy. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo do rysowania na tablicy.</entry>
+  <entry key="695">chciałby transmitować swój głos i obraz wideo. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo do transmitowania głosu i obrazu wideo.</entry>
+  <entry key="696">Musisz poczekać, aż moderator wejdzie do pokoju.</entry>
+  <entry key="697">Anuluj</entry>
+  <entry key="698">Zapisz</entry>
+  <entry key="699">Dzień</entry>
+  <entry key="700">Miesiąc</entry>
+  <entry key="701">Rok</entry>
+  <entry key="702">Prześlij plik</entry>
+  <entry key="703">Nowy filder</entry>
+  <entry key="704">Odśwież</entry>
+  <entry key="705">Śmietnik</entry>
+  <entry key="706">Moje pliki</entry>
+  <entry key="707">Pliki publiczne (dla pokoju)</entry>
+  <entry key="708">Nowy plik</entry>
+  <entry key="709">Nowy folder</entry>
+  <entry key="710">Skasuj folder</entry>
+  <entry key="711">Zmień nazwę</entry>
+  <entry key="712">Nowy folder</entry>
+  <entry key="713">Jesteś pewien, że chcesz to skasować?</entry>
+  <entry key="714">Szukaj</entry>
+  <entry key="715">Szukaj</entry>
+  <entry key="716">Otwórz dokument</entry>
+  <entry key="717">Pokarz pliki (widok drzewa)</entry>
+  <entry key="718">Zamknij dokument</entry>
+  <entry key="719">Skasuj plik</entry>
+  <entry key="720">Testy</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
new file mode 100644
index 0000000..06f4233
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferência</entry>
+  <entry key="2">Reunião</entry>
+  <entry key="3">Auditório</entry>
+  <entry key="4">Configurações</entry>
+  <entry key="5">Usuário</entry>
+  <entry key="6">Administração</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Nenhum arquivo disponível</entry>
+  <entry key="10">Admissão disponível apenas para professores</entry>
+  <entry key="11">Usuários conectados:</entry>
+  <entry key="12">Iniciar uma conferência</entry>
+  <entry key="13">Meu nome:</entry>
+  <entry key="14">VideoConferência</entry>
+  <entry key="15">Importar apresentação</entry>
+  <entry key="16">Atualizar lista</entry>
+  <entry key="17">Zum Hauptverzeichnis</entry>
+  <entry key="18">nova enquete</entry>
+  <entry key="19">Uma nova enquete para conferência.</entry>
+  <entry key="20">Pergunta:</entry>
+  <entry key="21">Tipo de enquete:</entry>
+  <entry key="22">Criar</entry>
+  <entry key="23">Info: Cada usuário conectado recebe uma menssagem com a nova enquete.</entry>
+  <entry key="24">Criar uma enquete</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sim/Não</entry>
+  <entry key="27">Numérico 1-10</entry>
+  <entry key="28">Enquete</entry>
+  <entry key="29">Eles podem ser moderadores/professores nessa área de enquetes</entry>
+  <entry key="30">Seu voto foi registrado.</entry>
+  <entry key="31">Você já votou nessa enquete.</entry>
+  <entry key="32">Votar !</entry>
+  <entry key="33">Sua resposta:</entry>
+  <entry key="34">Sim</entry>
+  <entry key="35">Não</entry>
+  <entry key="36">Quer saber:</entry>
+  <entry key="37">Resultados da enquete</entry>
+  <entry key="38">Pergunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Nenhuma enquete foi iniciada.</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunião (máximo 4 assentos)</entry>
+  <entry key="44">Conference (máximo 50 assentos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros assentos</entry>
+  <entry key="47">Já escolhido</entry>
+  <entry key="48">entrar</entry>
+  <entry key="49">O moderaror saiu da reunião.</entry>
+  <entry key="50">Informações do sistema</entry>
+  <entry key="51">Escolher dispositívo</entry>
+  <entry key="52">Escolher webcam:</entry>
+  <entry key="53">Escolher microfone:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">cancelar</entry>
+  <entry key="56">Você precisa reconectar.</entry>
+  <entry key="57">Editar configurações.</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">cancelar</entry>
+  <entry key="62">Limpar a lousa.</entry>
+  <entry key="63">Você quer que a lousa seja apagada antes que uma figura seja adicionada ?</entry>
+  <entry key="64">Não perguntar de novo.</entry>
+  <entry key="65">Não</entry>
+  <entry key="66">Editar configurações</entry>
+  <entry key="67">Confirmação de requisição antes de limpar a lousa.</entry>
+  <entry key="68">Informações do usuário</entry>
+  <entry key="69">Limpar área de desenho</entry>
+  <entry key="70">Desfazer</entry>
+  <entry key="71">Refazer</entry>
+  <entry key="72">Selecionar um objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintura</entry>
+  <entry key="75">Desenhar linha</entry>
+  <entry key="76">Desenhar sublinha</entry>
+  <entry key="77">Retângulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Seta</entry>
+  <entry key="80">excluir ítem selecionado</entry>
+  <entry key="81">Aplicar para moderação</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">fechar</entry>
+  <entry key="84">Tornar-se moderador</entry>
+  <entry key="85">fechar</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">negrito</entry>
+  <entry key="88">AGUARDANDO</entry>
+  <entry key="89">Um usuário quer se tornar moderador:</entry>
+  <entry key="90">aceitar</entry>
+  <entry key="91">rejeitar</entry>
+  <entry key="92">cancelar</entry>
+  <entry key="93">Enviando requisição para os seguintes usuários</entry>
+  <entry key="94">Aceito</entry>
+  <entry key="95">Rejeitado</entry>
+  <entry key="96">Mudar moderador</entry>
+  <entry key="97">Você não está moderando este curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">A sala está lotada. Por favor tente novamente mais tarde.</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">fechar</entry>
+  <entry key="102">erro na entrada de dados</entry>
+  <entry key="103">nome do usuårio deve ter no mínimo 4 letras</entry>
+  <entry key="104">senha deve ter no mínimo 4 letras</entry>
+  <entry key="105">Nome de usuário já existente</entry>
+  <entry key="106">O email já foi registrado.</entry>
+  <entry key="107">Erro no sistema, por favor, contacte os administradores.</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Usuário:</entry>
+  <entry key="110">Senha:</entry>
+  <entry key="111">idioma</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Sign Up</entry>
+  <entry key="114">Usuário:</entry>
+  <entry key="115">Senha:</entry>
+  <entry key="116">Re-digite:</entry>
+  <entry key="117">Primeiro nome:</entry>
+  <entry key="118">Último nome:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar</entry>
+  <entry key="122">cancelar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">home</entry>
+  <entry key="125">Usuários</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizações</entry>
+  <entry key="128">Salas de Conferência</entry>
+  <entry key="129">público</entry>
+  <entry key="130">organização</entry>
+  <entry key="131">entrar</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Senha</entry>
+  <entry key="134">Re-digite</entry>
+  <entry key="135">Primeiro nome</entry>
+  <entry key="136">Último nome</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Aniversário</entry>
+  <entry key="139">Rua/No</entry>
+  <entry key="140">CEP/Cidade</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Endereço</entry>
+  <entry key="143">Dados do usuário</entry>
+  <entry key="144">salvar</entry>
+  <entry key="145">Salvar</entry>
+  <entry key="146">ID DO USUÁRIO</entry>
+  <entry key="147">login</entry>
+  <entry key="148">primeiro nome</entry>
+  <entry key="149">último nome</entry>
+  <entry key="150">mostrar próximo</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">excluir registro</entry>
+  <entry key="153">cancelar</entry>
+  <entry key="154">excluir</entry>
+  <entry key="155">novo registro</entry>
+  <entry key="156">atualizar registro</entry>
+  <entry key="157">excluir registro</entry>
+  <entry key="158">status</entry>
+  <entry key="159">desabilitado</entry>
+  <entry key="160">habilitado</entry>
+  <entry key="161">organizações</entry>
+  <entry key="162">calendário</entry>
+  <entry key="163">fechar</entry>
+  <entry key="164">ID da Organização</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">usuário</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">admin</entry>
+  <entry key="169">nível do usuário</entry>
+  <entry key="170">organização</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">adicionar organização</entry>
+  <entry key="173">adicionar organização</entry>
+  <entry key="174">cancelar</entry>
+  <entry key="175">adicionar</entry>
+  <entry key="176">remover organização</entry>
+  <entry key="177">usuário</entry>
+  <entry key="178">adicionar usuário</entry>
+  <entry key="179">excluir usuário</entry>
+  <entry key="180">adicionar usuário</entry>
+  <entry key="181">procurar usuário</entry>
+  <entry key="182">procurar</entry>
+  <entry key="183">usuário</entry>
+  <entry key="184">organização</entry>
+  <entry key="185">entrar</entry>
+  <entry key="186">salas de conferência</entry>
+  <entry key="187">Salas de conferência</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">público</entry>
+  <entry key="191">organizações</entry>
+  <entry key="192">Salas de conferência</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">público</entry>
+  <entry key="196">comentário</entry>
+  <entry key="197">salvar</entry>
+  <entry key="198">abrir</entry>
+  <entry key="199">salvar como</entry>
+  <entry key="200">nome do arquivo</entry>
+  <entry key="201">nome do arquivo</entry>
+  <entry key="202">cancelar</entry>
+  <entry key="203">salvar</entry>
+  <entry key="204">erro</entry>
+  <entry key="205">carregando</entry>
+  <entry key="206">objetos carregados</entry>
+  <entry key="207">sincronizando clientes, clientes a esperar:</entry>
+  <entry key="208">Carregando imagem</entry>
+  <entry key="209">sincronizando clientes, clientes a esperar:</entry>
+  <entry key="210">limpar área de desenho</entry>
+  <entry key="211">limpar área de desenho, todos os dados da lousa serão perdidos</entry>
+  <entry key="212">Confirme antes de carregar o arquivo</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Assunto</entry>
+  <entry key="216">Destinatário</entry>
+  <entry key="217">Mensagem</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dados do usuário</entry>
+  <entry key="222">Seu apelido para essa conferência</entry>
+  <entry key="223">apelido</entry>
+  <entry key="224">primeiro nome</entry>
+  <entry key="225">último nome</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Carregando</entry>
+  <entry key="230">Carregando dados, por favor aguarde!</entry>
+  <entry key="231">Senha Incorreta</entry>
+  <entry key="232">Por favor digite dois passwords idênticos com pelo menos 6 caracteres</entry>
+  <entry key="233">Email Incorreto</entry>
+  <entry key="234">Voê digitou um endereço de email inválido.</entry>
+  <entry key="235">Cadastro completo</entry>
+  <entry key="236">Sua conta foi criada. Você pode fazer o login agora.</entry>
+  <entry key="237">Você não pode compartilhar sua tela agora. Alguem já compartilhou a tela.</entry>
+  <entry key="238">Compartilhamento perdido</entry>
+  <entry key="239">Compartilhe sua tela</entry>
+  <entry key="240">Falha na transmissão: Você não está apto a sincronizar a tela. Frames serão perdidos. Caso esse aviso tenha sido mostrado cedo você pode pedir ao moderador para reduzir a qualidade.</entry>
+  <entry key="241">Tela de:</entry>
+  <entry key="242">Desenhar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Arquivos</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Download do documeto original</entry>
+  <entry key="248">Download do pdf</entry>
+  <entry key="249">Carregar apresentação no quadro</entry>
+  <entry key="250">Configuração</entry>
+  <entry key="251">Arrastar esse objeto</entry>
+  <entry key="252">Redimensionar esse objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir para primeira página</entry>
+  <entry key="256">Ir para página anterior</entry>
+  <entry key="257">Ir para a próxima página</entry>
+  <entry key="258">Ir para a última página</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuração</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuração</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última atualização</entry>
+  <entry key="269">atualizado por</entry>
+  <entry key="270">comentário</entry>
+  <entry key="271">chave</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuários</entry>
+  <entry key="274">excluir usuário da compania</entry>
+  <entry key="275">excluir</entry>
+  <entry key="276">Este usuário já é membro desta companhia.</entry>
+  <entry key="277">Notícias</entry>
+  <entry key="278">Links Rápidos</entry>
+  <entry key="279">Ir para conferência</entry>
+  <entry key="280">Ir para auditório</entry>
+  <entry key="281">Ajuda e suporte</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Reportar um bug!</entry>
+  <entry key="285">mais</entry>
+  <entry key="286">Website do projeto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de emails (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Relembrar Login</entry>
+  <entry key="289">Conteúdo</entry>
+  <entry key="290">Minha Home Page</entry>
+  <entry key="291">My Reuniões Agendadas</entry>
+  <entry key="292">My Eventos Agendados</entry>
+  <entry key="293">Reuniões Públicas</entry>
+  <entry key="294">Reuniões Privadas</entry>
+  <entry key="295">Eventos Públicos</entry>
+  <entry key="296">Eventos Privados</entry>
+  <entry key="297">Conteúdo Público</entry>
+  <entry key="298">Conteúdo Privado</entry>
+  <entry key="299">Conteúdo Pessoal</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderação</entry>
+  <entry key="302">Aplicar para Moderação</entry>
+  <entry key="303">Conjuntos</entry>
+  <entry key="304">Escolha um arquivo</entry>
+  <entry key="305">Configurações</entry>
+  <entry key="306">Configurações de Cam e Mic</entry>
+  <entry key="307">Configurações da lousa</entry>
+  <entry key="308">Sair</entry>
+  <entry key="309">Voltar para salas</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Visão Desktop</entry>
+  <entry key="312">iniciar visão Desktop</entry>
+  <entry key="313">Vídeo e Áudio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Lousa</entry>
+  <entry key="316">Moderação</entry>
+  <entry key="317">Arquivos</entry>
+  <entry key="318">Usuários</entry>
+  <entry key="319">Conjuntos</entry>
+  <entry key="320">Não existe usuário conectado a este nome</entry>
+  <entry key="321">Um email contendo um link foi enviado a seu endereço de email, por favor confira sua caixa postal. Se você ainda não tiver recebido um email, por favor ajuste as configurações de spam e remande a confirmação de email.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensagem</entry>
+  <entry key="324">Hash inválido. Nenhum usuáio encontrado.</entry>
+  <entry key="325">Reset sua senha</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">alterar senha</entry>
+  <entry key="328">nova senha</entry>
+  <entry key="329">redigite a senha</entry>
+  <entry key="330">As senhas que você digitou não são iguais.</entry>
+  <entry key="331">4 ou mais caracteres; maiúsculas e minúsculas são diferentes!</entry>
+  <entry key="332">Senha configurada. Você pode se logar agora.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erro desconhecido. Por favor informe isso ao Service-Team.</entry>
+  <entry key="335">Username não encontrado</entry>
+  <entry key="336">Senha inválida</entry>
+  <entry key="337">Desconectado com sucesso</entry>
+  <entry key="338">Cadastro do frontend desabilitado.</entry>
+  <entry key="339">EMail inválido</entry>
+  <entry key="340">nome de arquivo duplicado, por favor escolha outro nome</entry>
+  <entry key="341">nome de arquivo muito curto</entry>
+  <entry key="342">Não foi possível salvar o endereço</entry>
+  <entry key="343">Usuário adicionado mas você precisa associar esse usuário a uma organização, se não ele não estará apto a se associar.</entry>
+  <entry key="344">Novo Registro</entry>
+  <entry key="345">Nenhum campo encontrado com esse id.</entry>
+  <entry key="346">Nenhum Label encontrado para este campo.</entry>
+  <entry key="347">Necessário perfil de administrador</entry>
+  <entry key="348">Editor de idiomas</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Nome</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Você apenas deletou o Label NÂO o Field! Você não pode deletar esse Field, podem existir Labels em outros idiomas.</entry>
+  <entry key="358">Labelid inválido. O FieldLanguagesvalues_Id não pode ser encontrado na base de dados.</entry>
+  <entry key="359">Você não pode deletar esse Field. Você pode apenas deletar Labels NÂO Fields. Não existe Label carregado no momento, se nenhum Field for selecionado ou não existir Label para esse idioma para esse Field definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Você precisa fazer login novamente para ver as mudanças.</entry>
+  <entry key="362">Adicionar novo idioma</entry>
+  <entry key="363">excluir idioma</entry>
+  <entry key="364">Adicionar novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">adicionar idioma</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ir ao primeiro</entry>
+  <entry key="369">ir ao anterior</entry>
+  <entry key="370">ir ao próximo</entry>
+  <entry key="371">ir ao último</entry>
+  <entry key="372">palestras do usuário (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">desligar/ligar som</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Suas configurações</entry>
+  <entry key="376">olá,</entry>
+  <entry key="377">Editar seu perfil</entry>
+  <entry key="378">Novas Mensagens:</entry>
+  <entry key="379">Upload de nova imagem</entry>
+  <entry key="380">Dados do Usuário - Exportar</entry>
+  <entry key="381">Todas as organizações já devem existir!</entry>
+  <entry key="382">começar a exportar</entry>
+  <entry key="383">Por organização</entry>
+  <entry key="384">começar a exportar</entry>
+  <entry key="385">Dados do Usuário - Importar</entry>
+  <entry key="386">escolha users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar para XML - Esses arquivos podem ser usados para: - Contribua com o projeto - Importe em outro sistema - Backup - Customização - Coloque no diretório de idiomas para sua próxima instalação</entry>
+  <entry key="389">Escolha um arquivo de idioma para importar. Escolha o idioma correto no Combobox! Não importa o nome do arquivo, ele será importado nesse idioma!</entry>
+  <entry key="390">importar - escolha o arquivo</entry>
+  <entry key="391">Salvar como</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentário:</entry>
+  <entry key="394">salvar</entry>
+  <entry key="395">Gravações</entry>
+  <entry key="396">Vizualizador de Gravações</entry>
+  <entry key="397">Gravações de salas públicas e privadas</entry>
+  <entry key="398">Usuários :</entry>
+  <entry key="399">Entrou:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuários nessa sala:</entry>
+  <entry key="402">atualizar</entry>
+  <entry key="403">Essa sala está cheia. Tente novamente em alguns instântes.</entry>
+  <entry key="404">clique em uma sala para ver os detalhes</entry>
+  <entry key="405">Chat com os usuários dessa sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuários nessa sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">mostrar a gravação</entry>
+  <entry key="410">Tamanho:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo Gravação! Você não pode mudar nenhum valor, este é um arquivo gravado!</entry>
+  <entry key="413">Mostrar essa gravação</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Começar gravação</entry>
+  <entry key="416">parar gravação</entry>
+  <entry key="417">Gravação:</entry>
+  <entry key="418">Já existe alguém gravando nesse momento:</entry>
+  <entry key="419">Gravando! Pelo usuário:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">Gravação será cancelada e não será salva.</entry>
+  <entry key="422">continuar</entry>
+  <entry key="423">Fechar essa janela e continuar a gravação.</entry>
+  <entry key="424">mudar cor da linha</entry>
+  <entry key="425">Mudar Cor</entry>
+  <entry key="426">Disabilitar / Habilitar cor da linha</entry>
+  <entry key="427">mudar Fillcolor</entry>
+  <entry key="428">Disabilitar / Habilitar Fillcolor</entry>
+  <entry key="429">Mudar tamanho da linha</entry>
+  <entry key="430">fechar</entry>
+  <entry key="431">mudar tamanho da fonte</entry>
+  <entry key="432">Deletar Gravação</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Deletar Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">enviar mensagem</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Escolher adaptadores publicados</entry>
+  <entry key="448">Áudio e Vídeo</entry>
+  <entry key="449">Áudio somente</entry>
+  <entry key="450">Vídeo somente</entry>
+  <entry key="451">sem Áudio/Vídeo (Image estática)</entry>
+  <entry key="452">Nenhum Áudio/Vídeo do seu PC será publicado, ao invés disso uma figura do seu perfil será mostrada. Escolha essas configurações se você tem problemas com sua conexão ou uma conexão de Internet lenta.</entry>
+  <entry key="453">SEG</entry>
+  <entry key="454">TER</entry>
+  <entry key="455">QUA</entry>
+  <entry key="456">QUI</entry>
+  <entry key="457">SEX</entry>
+  <entry key="458">SAB</entry>
+  <entry key="459">DOM</entry>
+  <entry key="460">Segunda</entry>
+  <entry key="461">Terça</entry>
+  <entry key="462">Quarta</entry>
+  <entry key="463">Quinta</entry>
+  <entry key="464">Sexta</entry>
+  <entry key="465">Sabado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendário da semana</entry>
+  <entry key="469">Janeiro</entry>
+  <entry key="470">Fevereiro</entry>
+  <entry key="471">Março</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Junho</entry>
+  <entry key="475">Julho</entry>
+  <entry key="476">Augosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Dezembro</entry>
+  <entry key="481">Calendário</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar configurações de layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largura | Altura</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderação-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lousa-Container</entry>
+  <entry key="490">Habilitado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largura | Altura</entry>
+  <entry key="493">Arquivos,Chat,Participantes - Container</entry>
+  <entry key="494">Habilitado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largura | Altura</entry>
+  <entry key="497">O moderador saiu da sala. Nenhum está presente no momento. Você pode se candidatar para moderação ou esperar.</entry>
+  <entry key="498">Não existe nenhum moderador nessa sala, mas existem alguns participantes. Você deve se candidatar a moderação ou esperar.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensagem do Usuário:</entry>
+  <entry key="502">Mensagem:</entry>
+  <entry key="503">Click neste link para participar das reuniões:</entry>
+  <entry key="504">Click aqui para entrar na sala</entry>
+  <entry key="505">se você tem problemas com o link, por favor copie e cole isso no seu browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Seus dados:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Senha:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Clique neste link para criar uma nova senha:</entry>
+  <entry key="515">Click aqui para criar umanova senha</entry>
+  <entry key="516">se você tiver problemas com o link, por favor copie e cole isso em seu browser:</entry>
+  <entry key="517">{0} Senha Reset</entry>
+  <entry key="518">Por favor informe uma data válida, por exemplo 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Por favor informe um email válido, por exemplo name@mail.com</entry>
+  <entry key="520">Por favor informe um número de ponto flutuante, por exemplo 1.00</entry>
+  <entry key="521">Por favor informe um número (Inteiro), por exemplo 100</entry>
+  <entry key="522">Por favor informe um número de telefone válido, por exemplo ++49 1234 1234</entry>
+  <entry key="523">Por favor informe um horário válido, por exemplo 12:23 (hh:mm)</entry>
+  <entry key="524">Senha protegida</entry>
+  <entry key="525">Senha</entry>
+  <entry key="526">Período de validade</entry>
+  <entry key="527">Final</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Uma vez</entry>
+  <entry key="530">Valido de:</entry>
+  <entry key="531">Valido até:</entry>
+  <entry key="532">Convite para o {0}</entry>
+  <entry key="533">Nenhum convite disponível para esse código</entry>
+  <entry key="534">O convite já foi utilizado. Esse tipo de convite não pode ser reutilizado.</entry>
+  <entry key="535">Esse código de convite não é válido.</entry>
+  <entry key="536">Senha:</entry>
+  <entry key="537">Verificar senha</entry>
+  <entry key="538">Senha Inválida!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
new file mode 100644
index 0000000..7ddb7a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferência</entry>
+  <entry key="2">Reunião</entry>
+  <entry key="3">Auditório</entry>
+  <entry key="4">Configurações</entry>
+  <entry key="5">Usuário</entry>
+  <entry key="6">Administração</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Nenhum arquivo disponível</entry>
+  <entry key="10">Admissão disponível apenas para professores</entry>
+  <entry key="11">Usuários conectados:</entry>
+  <entry key="12">Iniciar uma conferência</entry>
+  <entry key="13">Meu nome:</entry>
+  <entry key="14">VideoConferência</entry>
+  <entry key="15">Importar apresentação</entry>
+  <entry key="16">Atualizar lista</entry>
+  <entry key="17">Voltar ao índice principal</entry>
+  <entry key="18">nova enquete</entry>
+  <entry key="19">Uma nova enquete para conferência.</entry>
+  <entry key="20">Pergunta:</entry>
+  <entry key="21">Tipo de enquete:</entry>
+  <entry key="22">Criar</entry>
+  <entry key="23">Info: Cada usuário conectado recebe uma menssagem com a nova enquete.</entry>
+  <entry key="24">Criar uma enquete</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sim/Não</entry>
+  <entry key="27">Numérico 1-10</entry>
+  <entry key="28">Enquete</entry>
+  <entry key="29">Eles podem ser moderadores/professores nessa área de enquetes</entry>
+  <entry key="30">Seu voto foi registrado.</entry>
+  <entry key="31">Você já votou nessa enquete.</entry>
+  <entry key="32">Votar !</entry>
+  <entry key="33">Sua resposta:</entry>
+  <entry key="34">Sim</entry>
+  <entry key="35">Não</entry>
+  <entry key="36">Quer saber:</entry>
+  <entry key="37">Resultados da enquete</entry>
+  <entry key="38">Pergunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Nenhuma enquete foi iniciada.</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunião (todos se vêem)</entry>
+  <entry key="44">Conference (um ou mais falam para milhares)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros participantes</entry>
+  <entry key="47">Já escolhido</entry>
+  <entry key="48">entrar</entry>
+  <entry key="49">O moderaror saiu da reunião.</entry>
+  <entry key="50">Informações do sistema</entry>
+  <entry key="51">Escolher dispositivo</entry>
+  <entry key="52">Escolher webcam:</entry>
+  <entry key="53">Escolher microfone:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Você precisa reconectar.</entry>
+  <entry key="57">Editar configurações.</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Limpar a lousa.</entry>
+  <entry key="63">Você quer que a lousa seja apagada antes que uma figura seja adicionada ?</entry>
+  <entry key="64">Não perguntar de novo.</entry>
+  <entry key="65">Não</entry>
+  <entry key="66">Editar configurações</entry>
+  <entry key="67">Confirmação de requisição antes de limpar a lousa.</entry>
+  <entry key="68">Informações do usuário</entry>
+  <entry key="69">Limpar a lousa</entry>
+  <entry key="70">Desfazer</entry>
+  <entry key="71">Refazer</entry>
+  <entry key="72">Selecionar um objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintura</entry>
+  <entry key="75">Desenhar linha</entry>
+  <entry key="76">Desenhar sublinha</entry>
+  <entry key="77">Retângulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Seta</entry>
+  <entry key="80">excluir ítem selecionado</entry>
+  <entry key="81">Aplicar para moderação</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">fechar</entry>
+  <entry key="84">Tornar-se moderador</entry>
+  <entry key="85">fechar</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">negrito</entry>
+  <entry key="88">AGUARDANDO</entry>
+  <entry key="89">Um usuário quer se tornar moderador:</entry>
+  <entry key="90">aceitar</entry>
+  <entry key="91">rejeitar</entry>
+  <entry key="92">cancelar</entry>
+  <entry key="93">Enviando requisição para os seguintes usuários</entry>
+  <entry key="94">Aceito</entry>
+  <entry key="95">Rejeitado</entry>
+  <entry key="96">Mudar moderador</entry>
+  <entry key="97">Você não está moderando este curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">A sala está cheia. Por favor tente novamente mais tarde.</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">fechar</entry>
+  <entry key="102">erro na entrada de dados</entry>
+  <entry key="103">Nome do usuário deve ter no mínimo 4 letras</entry>
+  <entry key="104">senha deve ter no mínimo 4 letras</entry>
+  <entry key="105">Nome de usuário já existente</entry>
+  <entry key="106">O email já foi registrado.</entry>
+  <entry key="107">Erro no sistema, por favor, contacte os administradores.</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Usuário:</entry>
+  <entry key="110">Senha:</entry>
+  <entry key="111">idioma</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Inscreva-se</entry>
+  <entry key="114">Usuário:</entry>
+  <entry key="115">Senha:</entry>
+  <entry key="116">Re-digite:</entry>
+  <entry key="117">Primeiro nome:</entry>
+  <entry key="118">Último nome:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar</entry>
+  <entry key="122">cancelar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">Início</entry>
+  <entry key="125">Usuários</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizações</entry>
+  <entry key="128">Salas de Conferência</entry>
+  <entry key="129">público</entry>
+  <entry key="130">organização</entry>
+  <entry key="131">entrar</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Senha</entry>
+  <entry key="134">Re-digite</entry>
+  <entry key="135">Primeiro nome</entry>
+  <entry key="136">Último nome</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Aniversário</entry>
+  <entry key="139">Rua/Nro.</entry>
+  <entry key="140">CEP/Cidade</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Endereço</entry>
+  <entry key="143">Dados do usuário</entry>
+  <entry key="144">salvar</entry>
+  <entry key="145">Salvar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">login</entry>
+  <entry key="148">primeiro nome</entry>
+  <entry key="149">Ùltimo nome</entry>
+  <entry key="150">Mostrar próximo</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">excluir registro</entry>
+  <entry key="153">cancelar</entry>
+  <entry key="154">excluir</entry>
+  <entry key="155">novo registro</entry>
+  <entry key="156">atualizar registro</entry>
+  <entry key="157">excluir registro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">Desabilitado</entry>
+  <entry key="160">Habilitado</entry>
+  <entry key="161">organizações</entry>
+  <entry key="162">CALENDÁRIO</entry>
+  <entry key="163">fechar</entry>
+  <entry key="164">ID da Organização</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">usuário</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Nível do usuário</entry>
+  <entry key="170">organização</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">Adicionar organização</entry>
+  <entry key="173">Adicionar organização</entry>
+  <entry key="174">cancelar</entry>
+  <entry key="175">adicionar</entry>
+  <entry key="176">Remover organização</entry>
+  <entry key="177">usuário</entry>
+  <entry key="178">adicionar usuário</entry>
+  <entry key="179">excluir usuário</entry>
+  <entry key="180">adicionar usuário</entry>
+  <entry key="181">procurar usuário</entry>
+  <entry key="182">procurar</entry>
+  <entry key="183">usuário</entry>
+  <entry key="184">organização</entry>
+  <entry key="185">entrar</entry>
+  <entry key="186">Salas de Conferência</entry>
+  <entry key="187">Salas de conferência</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">público</entry>
+  <entry key="191">organizações</entry>
+  <entry key="192">Salas de conferência</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">público</entry>
+  <entry key="196">comentário</entry>
+  <entry key="197">salvar</entry>
+  <entry key="198">abrir</entry>
+  <entry key="199">salvar como</entry>
+  <entry key="200">nome do arquivo</entry>
+  <entry key="201">nome do arquivo</entry>
+  <entry key="202">cancelar</entry>
+  <entry key="203">salvar</entry>
+  <entry key="204">erro</entry>
+  <entry key="205">carregando</entry>
+  <entry key="206">objetos carregados</entry>
+  <entry key="207">sincronizando clientes... aguarde:</entry>
+  <entry key="208">Carregando imagem</entry>
+  <entry key="209">sincronizando clientes... aguarde:</entry>
+  <entry key="210">limpar área de desenho</entry>
+  <entry key="211">limpar área de desenho, todos os dados da lousa serão perdidos</entry>
+  <entry key="212">Confirme antes de carregar o arquivo</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Assunto</entry>
+  <entry key="216">Destinatário</entry>
+  <entry key="217">Mensagem</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dados do usuário</entry>
+  <entry key="222">Seu apelido para essa conferência</entry>
+  <entry key="223">apelido</entry>
+  <entry key="224">primeiro nome</entry>
+  <entry key="225">último nome</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Carregando</entry>
+  <entry key="230">Carregando dados, por favor aguarde!</entry>
+  <entry key="231">Senha Incorreta</entry>
+  <entry key="232">Por favor digite duas senhas iguais com pelo menos 6 caracteres</entry>
+  <entry key="233">Email Incorreto</entry>
+  <entry key="234">Voê digitou um endereço de email inválido.</entry>
+  <entry key="235">Usuário registrado com sucesso</entry>
+  <entry key="236">Sua conta foi criada. Você pode fazer o login agora.</entry>
+  <entry key="237">Você não pode compartilhar sua tela agora. Alguem já compartilhou a tela.</entry>
+  <entry key="238">Compartilhamento perdido</entry>
+  <entry key="239">Compartilhe sua tela</entry>
+  <entry key="240">Falha na transmissão: Você não está apto a sincronizar a tela. Quadros serão perdidos. Caso esse aviso tenha sido mostrado cedo você pode pedir ao moderador para reduzir a qualidade.</entry>
+  <entry key="241">Tela de:</entry>
+  <entry key="242">Desenhar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Conversar</entry>
+  <entry key="245">Arquivos</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Download do documeto original</entry>
+  <entry key="248">Download do pdf</entry>
+  <entry key="249">Carregar apresentação no quadro</entry>
+  <entry key="250">Configuração</entry>
+  <entry key="251">Arrastar esse objeto</entry>
+  <entry key="252">Redimensionar esse objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir para primeira página</entry>
+  <entry key="256">Ir para página anterior</entry>
+  <entry key="257">Ir para a próxima página</entry>
+  <entry key="258">Ir para a última página</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuração</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuração</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última atualização</entry>
+  <entry key="269">atualizado por</entry>
+  <entry key="270">comentário</entry>
+  <entry key="271">chave</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuários</entry>
+  <entry key="274">excluir usuário da Organização</entry>
+  <entry key="275">excluir</entry>
+  <entry key="276">Este usuário já é membro desta organização.</entry>
+  <entry key="277">Notícias</entry>
+  <entry key="278">Links Rápidos</entry>
+  <entry key="279">Ir para conferência</entry>
+  <entry key="280">Ir para auditório</entry>
+  <entry key="281">Ajuda e suporte</entry>
+  <entry key="282">http://www.tvqweb.com.br</entry>
+  <entry key="283">http://www.tvqweb.com.br</entry>
+  <entry key="284">Suporte</entry>
+  <entry key="285">mais</entry>
+  <entry key="286">http://www.tvqweb.com.br</entry>
+  <entry key="287">http://www.tvqweb.com.br</entry>
+  <entry key="288">Relembrar Login</entry>
+  <entry key="289">Conteúdo</entry>
+  <entry key="290">Minha Home Page</entry>
+  <entry key="291">Calendário</entry>
+  <entry key="292">Eventos Agendados</entry>
+  <entry key="293">Reuniões Públicas</entry>
+  <entry key="294">Reuniões Privadas</entry>
+  <entry key="295">Eventos Públicos</entry>
+  <entry key="296">Eventos Privados</entry>
+  <entry key="297">Conteúdo Público</entry>
+  <entry key="298">Conteúdo Privado</entry>
+  <entry key="299">Conteúdo Pessoal</entry>
+  <entry key="300">Conteúdo</entry>
+  <entry key="301">Moderação</entry>
+  <entry key="302">Aplicar para Moderação</entry>
+  <entry key="303">Conjuntos</entry>
+  <entry key="304">Escolha um arquivo</entry>
+  <entry key="305">Configurações</entry>
+  <entry key="306">Configurações de Cam e Mic</entry>
+  <entry key="307">Configurações da lousa</entry>
+  <entry key="308">Sair</entry>
+  <entry key="309">Voltar para salas</entry>
+  <entry key="310">Sair</entry>
+  <entry key="311">Esqueceu sua senha?</entry>
+  <entry key="312">Redefinir a senha</entry>
+  <entry key="313">Usando o endereço de e-mail</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Seu email</entry>
+  <entry key="316">Seu login</entry>
+  <entry key="317">Enviar e-mail com um link para redefinição</entry>
+  <entry key="318">Nenhum endereço de e-mail foi encontrado. Verifique se você digitou o endereço de email que você usou para criar sua conta.</entry>
+  <entry key="319">Por favor, indique um endereço de e-mail ou um nome de usuário</entry>
+  <entry key="320">Não existe usuário conectado com este nome</entry>
+  <entry key="321">Um email contendo um link foi enviado a seu endereço de email, por favor confira sua caixa postal. Se você ainda não tiver recebido um email, por favor ajuste as configurações de spam e re-envie a confirmação de email.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensagem</entry>
+  <entry key="324">Hash inválido. Nenhum usuário encontrado.</entry>
+  <entry key="325">Redefina sua senha</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">alterar senha</entry>
+  <entry key="328">nova senha</entry>
+  <entry key="329">redigite a senha</entry>
+  <entry key="330">As senhas que você digitou não são iguais.</entry>
+  <entry key="331">4 ou mais caracteres; maiúsculas e minúsculas são diferentes!</entry>
+  <entry key="332">Senha configurada. Você pode acessar agora.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erro desconhecido. Por favor informe isso ao Administrador.</entry>
+  <entry key="335">Username não encontrado</entry>
+  <entry key="336">Senha inválida</entry>
+  <entry key="337">Desconectado com sucesso</entry>
+  <entry key="338">Cadastro do frontend desabilitado.</entry>
+  <entry key="339">Email inválido</entry>
+  <entry key="340">nome de arquivo duplicado, por favor escolha outro nome</entry>
+  <entry key="341">nome de arquivo muito curto</entry>
+  <entry key="342">Não foi possível salvar o endereço</entry>
+  <entry key="343">Usuário adicionado mas você precisa associar esse usuário a uma organização, se não ele não estará apto a se associar.</entry>
+  <entry key="344">Novo Registro</entry>
+  <entry key="345">Nenhum campo encontrado com esse id.</entry>
+  <entry key="346">Nenhum valor encontrado para este campo.</entry>
+  <entry key="347">Necessário perfil de administrador</entry>
+  <entry key="348">Editor de idiomas</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Campo-ID</entry>
+  <entry key="351">Campo-Nome</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valores dos campos</entry>
+  <entry key="354">Nome do campo</entry>
+  <entry key="355">Valor do campo</entry>
+  <entry key="356">ID</entry>
+  <entry key="357">Você apenas deletou o campo NÂO o Field! Você não pode excluir esse Field, podem existir campo em outros idiomas.</entry>
+  <entry key="358">campoid inválido. O FieldLanguagesvalues_Id não pode ser encontrado na base de dados.</entry>
+  <entry key="359">Você não pode excluir esse Field. Você pode apenas excluir Labels NÂO Fields. Não existe Label carregado no momento, se nenhum Field for selecionado ou não existir Label para esse idioma para esse Field definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Você precisa fazer login novamente para visualizar as mudanças.</entry>
+  <entry key="362">Adicionar novo idioma</entry>
+  <entry key="363">excluir idioma</entry>
+  <entry key="364">Adicionar novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">adicionar idioma</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ir para o primeiro</entry>
+  <entry key="369">ir para o anterior</entry>
+  <entry key="370">ir para o próximo</entry>
+  <entry key="371">ir para o último</entry>
+  <entry key="372">palestras do usuário</entry>
+  <entry key="373">desligar/ligar som</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Suas configurações</entry>
+  <entry key="376">Olá,</entry>
+  <entry key="377">Editar meu perfil</entry>
+  <entry key="378">Novas Mensagens:</entry>
+  <entry key="379">Nova imagem</entry>
+  <entry key="380">Dados do Usuário - Exportar</entry>
+  <entry key="381">Todas as organizações já devem existir!</entry>
+  <entry key="382">começar a exportar</entry>
+  <entry key="383">Por organização</entry>
+  <entry key="384">começar a exportar</entry>
+  <entry key="385">Dados do Usuário - Importar</entry>
+  <entry key="386">escolha users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar para XML - Esses arquivos podem ser usados para: - Contribua com o projeto - Importe em outro sistema - Backup - Customização - Coloque no diretório de idiomas para sua próxima instalação</entry>
+  <entry key="389">Escolha um arquivo de idioma para importar. Escolha o idioma correto no Combobox! Não importa o nome do arquivo, ele será importado nesse idioma!</entry>
+  <entry key="390">importar - escolha o arquivo</entry>
+  <entry key="391">Salvar como</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentário:</entry>
+  <entry key="394">salvar</entry>
+  <entry key="395">Gravações</entry>
+  <entry key="396">Vizualizador de Gravações</entry>
+  <entry key="397">Gravações de salas públicas e privadas</entry>
+  <entry key="398">Usuários :</entry>
+  <entry key="399">Entrou:</entry>
+  <entry key="400">Entrou:</entry>
+  <entry key="401">Usuários nessa sala:</entry>
+  <entry key="402">atualizar</entry>
+  <entry key="403">Essa sala está cheia. Tente novamente em alguns instântes.</entry>
+  <entry key="404">clique em uma sala para ver os detalhes</entry>
+  <entry key="405">Chat com os usuários dessa sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuários nessa sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">mostrar a gravação</entry>
+  <entry key="410">Tamanho:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo Gravação! Você não pode mudar nenhum valor, este é um arquivo gravado!</entry>
+  <entry key="413">Mostrar essa gravação</entry>
+  <entry key="414">Reproduzir / Parar</entry>
+  <entry key="415">Começar gravação</entry>
+  <entry key="416">parar gravação</entry>
+  <entry key="417">Gravação:</entry>
+  <entry key="418">Já existe alguém gravando nesse momento:</entry>
+  <entry key="419">Gravando! Pelo usuário:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">Gravação será cancelada e não será salva.</entry>
+  <entry key="422">continuar</entry>
+  <entry key="423">Fechar essa janela e continuar a gravação.</entry>
+  <entry key="424">mudar cor da linha</entry>
+  <entry key="425">Mudar Cor</entry>
+  <entry key="426">Disabilitar / Habilitar cor da linha</entry>
+  <entry key="427">mudar Fillcolor</entry>
+  <entry key="428">Disabilitar / Habilitar Fillcolor</entry>
+  <entry key="429">Mudar tamanho da linha</entry>
+  <entry key="430">fechar</entry>
+  <entry key="431">mudar tamanho da fonte</entry>
+  <entry key="432">excluir Gravação</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">excluir Server-Chatlog</entry>
+  <entry key="443">Bate-papo</entry>
+  <entry key="444">enviar mensagem</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Escolher adaptadores publicados</entry>
+  <entry key="448">Áudio e Vídeo</entry>
+  <entry key="449">Áudio somente</entry>
+  <entry key="450">Vídeo somente</entry>
+  <entry key="451">sem Áudio/Vídeo (Image estática)</entry>
+  <entry key="452">Nenhum Áudio/Vídeo do seu PC será publicado, ao invés disso uma figura do seu perfil será mostrada. Escolha essas configurações se você tem problemas com sua conexão ou uma conexão de Internet lenta.</entry>
+  <entry key="453">SEG</entry>
+  <entry key="454">TER</entry>
+  <entry key="455">QUA</entry>
+  <entry key="456">QUI</entry>
+  <entry key="457">SEX</entry>
+  <entry key="458">SAB</entry>
+  <entry key="459">DOM</entry>
+  <entry key="460">Segunda</entry>
+  <entry key="461">Terça</entry>
+  <entry key="462">Quarta</entry>
+  <entry key="463">Quinta</entry>
+  <entry key="464">Sexta</entry>
+  <entry key="465">Sabado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendário da semana</entry>
+  <entry key="469">Janeiro</entry>
+  <entry key="470">Fevereiro</entry>
+  <entry key="471">Março</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Junho</entry>
+  <entry key="475">Julho</entry>
+  <entry key="476">Augosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Dezembro</entry>
+  <entry key="481">Calendário</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar configurações de layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largura | Altura</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderação-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lousa-Container</entry>
+  <entry key="490">Habilitado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largura | Altura</entry>
+  <entry key="493">Arquivos,Chat,Participantes - Container</entry>
+  <entry key="494">Habilitado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largura | Altura</entry>
+  <entry key="497">O moderador saiu da sala. Nenhum está presente no momento. Você pode se candidatar para moderação ou esperar.</entry>
+  <entry key="498">Não existe nenhum moderador nessa sala, mas existem alguns participantes. Você pode se candidatar a moderação ou esperar.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensagem do Usuário:</entry>
+  <entry key="502">Mensagem:</entry>
+  <entry key="503">Click neste link para participar das reuniões:</entry>
+  <entry key="504">Clique aqui para entrar na sala</entry>
+  <entry key="505">se você tiver problemas com o link, por favor copie e cole isso no seu browser:</entry>
+  <entry key="506">{0} Inscrição</entry>
+  <entry key="507">Seus dados:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Senha:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">TVQWEB - Equipe</entry>
+  <entry key="512">TVQWEB - Inscrição</entry>
+  <entry key="513">TVQWEB - Redefinição de Senha</entry>
+  <entry key="514">Clique neste link para criar uma nova senha:</entry>
+  <entry key="515">Click aqui para criar umanova senha</entry>
+  <entry key="516">se você tiver problemas com o link, por favor copie e cole isso em seu browser:</entry>
+  <entry key="517">TVQWEB - Redefinição de Senha</entry>
+  <entry key="518">Por favor informe uma data válida, por exemplo 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Por favor informe um email válido, por exemplo nome@mail.com</entry>
+  <entry key="520">Por favor informe um número de ponto flutuante, por exemplo 1.00</entry>
+  <entry key="521">Por favor informe um número (Inteiro), por exemplo 100</entry>
+  <entry key="522">Por favor informe um número de telefone válido, por exemplo ++49 1234 1234</entry>
+  <entry key="523">Por favor informe um horário válido, por exemplo 12:23 (hh:mm)</entry>
+  <entry key="524">Proteger com senha</entry>
+  <entry key="525">Senha</entry>
+  <entry key="526">Período de validade</entry>
+  <entry key="527">Final</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Uma vez</entry>
+  <entry key="530">Valido de:</entry>
+  <entry key="531">Valido até:</entry>
+  <entry key="532">Convite para reunião instantânea no TVQWEB</entry>
+  <entry key="533">Nenhum convite disponível para esse código</entry>
+  <entry key="534">O convite já foi utilizado. Esse tipo de convite não pode ser reutilizado.</entry>
+  <entry key="535">Esse código de convite não é válido.</entry>
+  <entry key="536">Senha:</entry>
+  <entry key="537">Verificar senha</entry>
+  <entry key="538">Senha Inválida!</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar Audio/Video</entry>
+  <entry key="541">Seu login estava correto, porém sua sessão expirou ou não está ativa no servidor. Por favor faça login novamente.</entry>
+  <entry key="542">O SessionID não está logado ou não tem privilégios de admin. O SOAP Gateway precisa de um usuário com privilégios de administrador para criar novos usuários.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">O gravador atualmente é Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">largura</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Alterar transparência</entry>
+  <entry key="554">Abrir Navegador</entry>
+  <entry key="555">Fechar o Navegador</entry>
+  <entry key="556">A conexão com o servidor foi perdida. Você precisa reiniciar a aplicação e/ou verificar sua conexão com a internet.</entry>
+  <entry key="557">Ponteiro</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando usuários, aguarde.</entry>
+  <entry key="560">&lt;u&gt;Download como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download como TIF&lt;/u&gt;</entry>
+  <entry key="565">Lembrete:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Repetição:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Localização:</entry>
+  <entry key="570">Inicio</entry>
+  <entry key="571">Fim</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentário:</entry>
+  <entry key="574">Convidar pessoas</entry>
+  <entry key="575">Diário</entry>
+  <entry key="576">Mensal</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">O fim do encontro marcado é antes do início!</entry>
+  <entry key="579">Por favor, insira um título!</entry>
+  <entry key="580">Escrever da direita para a esquerda</entry>
+  <entry key="581">Ative isso se você escrever em uma linguagem de esquerda para a direita</entry>
+  <entry key="582">Painel</entry>
+  <entry key="583">Assista reuniões ou eventos gravados</entry>
+  <entry key="584">Meeting - Faça uma conferência com vários usuários&lt;br/&gt;Todos terão acesso a áudio e vídeo</entry>
+  <entry key="585">Evento - Faça uma conferência com milhares de participantes&lt;br/&gt;Somente o Moderador terá acesso ao áudio e vídeo</entry>
+  <entry key="586">Criar usuários, salas, organizações&lt;br/&gt; acesso as configurações</entry>
+  <entry key="587">Usuários nessa sala agora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Carregando Documento. Por favor aguarde enquanto todos os clientes são sincronizados.</entry>
+  <entry key="592">Upload completo, convertendo documento...</entry>
+  <entry key="593">Inicia Upload</entry>
+  <entry key="594">Upload e Importação. Por favor, selecione um arquivo do seu disco.</entry>
+  <entry key="595">Cancela</entry>
+  <entry key="596">Seleciona arquivo</entry>
+  <entry key="597">Conexões</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Escopo</entry>
+  <entry key="603">Desconectar usuário</entry>
+  <entry key="604">Desconectar usuário</entry>
+  <entry key="605">Tem certeza que deseja desconectar esse cliente dessa conexão?&lt;br/&gt; Isso somente remove o cliente da sala atual. O cliente pode reconectar-se novamente.</entry>
+  <entry key="606">Sua sessão foi terminada por um Administrador ou Moderador.</entry>
+  <entry key="607">Telefone</entry>
+  <entry key="608">O usuário é o moderador desta sala</entry>
+  <entry key="609">O usuário está autorizado a desenhar na lousa</entry>
+  <entry key="610">(Re) Inicie áudio/vídeo ou modifique as configurações de dispositivos</entry>
+  <entry key="611">Permitir que esse usuário a desenhar na lousa</entry>
+  <entry key="612">Remover a capacidade de desenhar na lousa</entry>
+  <entry key="613">Usuários</entry>
+  <entry key="614">Arquivos</entry>
+  <entry key="615">Lousa</entry>
+  <entry key="616">Bate-papo</entry>
+  <entry key="617">Sua conta está associada a várias organizações. Por favor escolha uma para essa sessão.</entry>
+  <entry key="618">Esta sala está cheia nesse momento. Por favor tente mais tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Sala designada</entry>
+  <entry key="621">Hora do servidor</entry>
+  <entry key="622">TVQWEB - Lembrete</entry>
+  <entry key="623">Mensagem do usuário:</entry>
+  <entry key="624">Mensagem:</entry>
+  <entry key="625">Click nesse link para participar nas reuniões:</entry>
+  <entry key="626">Click aqui para entrar na sala</entry>
+  <entry key="627">se você estiver com problemas nesse link, copie e cole este endereço em seu navegador:</entry>
+  <entry key="628">busca interna</entry>
+  <entry key="629">usuários externos</entry>
+  <entry key="630">Nome</entry>
+  <entry key="631">Sobrenome</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar Saida</entry>
+  <entry key="634">Tem certeza que quer fazer logout?</entry>
+  <entry key="635">Ações</entry>
+  <entry key="636">Sala Demo</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Tempo de Reunião</entry>
+  <entry key="639">Está é uma sala de demonstração. Para desligar esse aviso você deve entrar em reunião privada,ou configurar um servidor próprio. Você será desconectado em:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, aguarde até que o moderador tenha entrado na sala. O moderador pode ser um Professor, Admin ou o criador dessa sala.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Entrada do compartilhamento de tela</entry>
+  <entry key="644">Há um novo compartilhamento de tela do usuário:</entry>
+  <entry key="645">Inicia compartilhamento</entry>
+  <entry key="646">Adiciona nova reunião</entry>
+  <entry key="647">Sala de Reunião</entry>
+  <entry key="648">Sala de Evento</entry>
+  <entry key="649">Moderação</entry>
+  <entry key="650">Moderar usuários</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Você quer alterar esse usuário para se tornar um moderador dessa organização?</entry>
+  <entry key="654">Por favor, escolha uma organização antes de tentar adicionar um usuário para ele!</entry>
+  <entry key="655">Organização - Moderador</entry>
+  <entry key="656">Tem certeza que deseha excluir esse usuário dessa organização?</entry>
+  <entry key="657">Este usuário é o moderador</entry>
+  <entry key="658">Este usuário não é o moderador</entry>
+  <entry key="659">Você deseja que esse usuário não seja moderador dessa organização?</entry>
+  <entry key="660">Adiciona ou exlui usuários ou senhas dentro de usa organização</entry>
+  <entry key="661">Tem certeza que quer excluir esse registro?</entry>
+  <entry key="662">Tem certeza que quer excluir esse usuário da sua organização? Você irá excluir somente a conexão do usuário entre a organização. Para excluir o usuário do sistema, vá para o painel de administração.</entry>
+  <entry key="663">Você não pode excluir seu próprio usuário!</entry>
+  <entry key="664">Este método necessita de uma conta administrativa a ser invocada!</entry>
+  <entry key="665">Não existe uma sessão associada com esse ID.</entry>
+  <entry key="666">Está é uma conta de administrador ou moderador. Você pode editar esta conta no painel de administração.</entry>
+  <entry key="667">Para completar seu registro, clique no link ou cole a URL no seu navegador.</entry>
+  <entry key="668">Clique para verificar seu e-mail</entry>
+  <entry key="669">Nenhum usuário encontrado para esse Hash.</entry>
+  <entry key="670">Este usuário já está ativado!</entry>
+  <entry key="671">Você ativou com sucesso sua conta!</entry>
+  <entry key="672">Logar agora</entry>
+  <entry key="673">Sua conta não está ativa. Use o link fornecido que foi enviado para seu e-mail durante o processo de registro.</entry>
+  <entry key="674">Cadastro efetuado com sucesso. Enviaremos um e-mail com um código de verificação. Por favor, verifique seu e-mail.</entry>
+  <entry key="675">Remove regras de moderação para esse usuário</entry>
+  <entry key="676">Dá direitos de moderação para esse usuário</entry>
+  <entry key="677">Usuário</entry>
+  <entry key="678">Acesso a lousa</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderação: Escolha um usuário da lista para conceder acesso a lousa, moderação ou video.</entry>
+  <entry key="681">Esse usuário já é moderador, então ele tem já tem direitos de desenhar na lousa.</entry>
+  <entry key="682">Esse é você! Não é possível remover seu próprio direito de moderador.</entry>
+  <entry key="683">Permite esse usuário publicar seu Audio / Video</entry>
+  <entry key="684">Remove ádio/Vídeo desse usuário</entry>
+  <entry key="685">Eu tenho uma pergunta.</entry>
+  <entry key="686">Gostaria de desenhar na lousa</entry>
+  <entry key="687">Gostaria de compartilhar meu áudio/vídeo</entry>
+  <entry key="688">Você é o moderador dessa sala</entry>
+  <entry key="689">Você está autorizado a desenhar na lousa</entry>
+  <entry key="690">Você está autorizado a compartilhar seu áudio/vídeo</entry>
+  <entry key="691">Mensagem do moderador</entry>
+  <entry key="692">O usuário</entry>
+  <entry key="693">gostaria de fazer uma pergunta.</entry>
+  <entry key="694">gostaria de desenhar na lousa.</entry>
+  <entry key="695">gostaria de compartilhar meu áudio / vídeo</entry>
+  <entry key="696">Você tem que aguardar enquanto o moderador entra na sala.</entry>
+  <entry key="697">Cancela</entry>
+  <entry key="698">Salva</entry>
+  <entry key="699">Dia</entry>
+  <entry key="700">Mês</entry>
+  <entry key="701">Ano</entry>
+  <entry key="702">Upload de arquivo</entry>
+  <entry key="703">Adiciona pasta</entry>
+  <entry key="704">Atualiza</entry>
+  <entry key="705">Lixeira</entry>
+  <entry key="706">Meus Arquivos (Home Drive)</entry>
+  <entry key="707">Arquivos da sala (Public Drive)</entry>
+  <entry key="708">Adiciona arquivo</entry>
+  <entry key="709">Adiciona pasta</entry>
+  <entry key="710">Deleta pasta</entry>
+  <entry key="711">Edita Nome</entry>
+  <entry key="712">Nova pasta</entry>
+  <entry key="713">Tem certeza que quer excluir esse item?</entry>
+  <entry key="714">Busca</entry>
+  <entry key="715">Busca</entry>
+  <entry key="716">Abre documento</entry>
+  <entry key="717">Mostra todos os arquivos (Tree View)</entry>
+  <entry key="718">Fecha Documento</entry>
+  <entry key="719">Deleta arquivo</entry>
+  <entry key="720">Você não está autorizado a desenhar nada na lousa. Você precisa tornar-se moderador ou conseguir o direito. Você pode pedir esse direito a um moderador.</entry>
+  <entry key="721">Propriedade do documento</entry>
+  <entry key="722">Inicia cliente (external)</entry>
+  <entry key="723">Inicia cliente (HTTP)</entry>
+  <entry key="724">Um usuário deseja compartilhar sua tela. Quer ver isso?</entry>
+  <entry key="725">Você está compartilhando seu desktop. Para parar, pressione o botão Stop no cliente de compartilhamento.</entry>
+  <entry key="726">Compartilhar sessão</entry>
+  <entry key="727">Você já está compartilhando seu desktop!</entry>
+  <entry key="728">Visualisador de Desktop</entry>
+  <entry key="729">Sai</entry>
+  <entry key="730">Compartilhador de Desktop</entry>
+  <entry key="731">Clique em iniciar para publicar sua tela</entry>
+  <entry key="732">Inicia compartilhamento</entry>
+  <entry key="733">Para compartilhamento</entry>
+  <entry key="734">Seleciona a área de sua tela:</entry>
+  <entry key="735">Troca largura</entry>
+  <entry key="736">O compartilhamento foi finalizado nessa sessão!</entry>
+  <entry key="737">Troca largura</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Largura:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">A conexão foi terminada pelo servidor</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar externo</entry>
+  <entry key="745">Se você fechar essa sessão completamente, você não será capaz de reiniciar o visualizador para essa sessão.</entry>
+  <entry key="746">Confirme o fechamento do visualizador de sessão</entry>
+  <entry key="747">Compartilha Tela</entry>
+  <entry key="748">Grava sessão</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Melhor visualizado no Internet Explorer.</entry>
+  <entry key="751">Anterior</entry>
+  <entry key="752">Próximo</entry>
+  <entry key="753">Recarregar</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Carrega</entry>
+  <entry key="756">Adiciona esse site como site padrão do seu perfil.</entry>
+  <entry key="757">Teste as conf.</entry>
+  <entry key="758">Verifique se o microfone e a camera antes de entrar em uma sala .</entry>
+  <entry key="759">Não mostre esse teste novamente</entry>
+  <entry key="760">Cancela</entry>
+  <entry key="761">Iniciar conferência</entry>
+  <entry key="762">Não pergunte novamente</entry>
+  <entry key="763">GRAVA</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Você pode continuar sem o teste, se você não pretente publicar sua imagem ou voz. Participantes sem audio e video podem usar a lousa, compartilhar o desktop ou usar o chat.</entry>
+  <entry key="766">PARAR</entry>
+  <entry key="767">Intensidade</entry>
+  <entry key="768">Pressione inicia</entry>
+  <entry key="769">Inicia Conferencia</entry>
+  <entry key="770">Iniciar Evento</entry>
+  <entry key="771">Selecione a sala</entry>
+  <entry key="772">Verifique a configuração</entry>
+  <entry key="773">Inicie a Conferência</entry>
+  <entry key="774">Passos para a conferência:</entry>
+  <entry key="775">Iniciar Gravação</entry>
+  <entry key="776">Não mostrar Áudio/Vídeo teste (gravação) antes de entrar em uma conferência</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">Salas públicas são acessiveis por todos os usuários.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">Salas privadas são acessiveis somente por usuários da mesma organização.</entry>
+  <entry key="781">Minha sala</entry>
+  <entry key="782">Salas criadas nessa seção são de uso pessoal. Elas são criadas através do calendário e tem um início e uma data final. Elas só estão listadas nesta seção durante sua validade.</entry>
+  <entry key="783">Você tem que ser o moderador para fazer isso.</entry>
+  <entry key="784">Pedir moderação</entry>
+  <entry key="785">Pedir acesso para a lousa</entry>
+  <entry key="786">Pedir acesso para camera/microfone</entry>
+  <entry key="787">Esse hash já foi usado. Você não pode utiliza-lo duas vezes.</entry>
+  <entry key="788">INICIA</entry>
+  <entry key="789">SAIR</entry>
+  <entry key="790">Tem certeza que quer sair? Você deve limpar os documentos, lousa, e histórico do chat.</entry>
+  <entry key="791">Deixar a conferência</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Escolha uma sala para a reunião</entry>
+  <entry key="794">Existe um evento não salvo no calendário. Por favor salve ou exclua.</entry>
+  <entry key="795">Por favor, adicionar pelo menos um participante para a reunião!</entry>
+  <entry key="796">Tem certeza que quer excluir esse evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Adiciona evento</entry>
+  <entry key="799">dia</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mês</entry>
+  <entry key="802">Descrição</entry>
+  <entry key="803">Participantes</entry>
+  <entry key="804">{0}, sua plataforma de conferência web. Você pode seguir os passos 1-2-3 para entrar em uma sala de conferência diretamente ou selecione a opcão calendário para planejar uma reunião.</entry>
+  <entry key="805">Planejar Reunião</entry>
+  <entry key="806">Para configurar uma conferência você pode adicionar um novo evento ao calendário</entry>
+  <entry key="807">Precisa de ajuda?</entry>
+  <entry key="808">Restrito</entry>
+  <entry key="809">busca</entry>
+  <entry key="810">Adiciona</entry>
+  <entry key="811">Não há nenhum usuário selecionado, Por favor selecione um item da lista, e depois clique em adicionar.</entry>
+  <entry key="812">Adicionar Participante</entry>
+  <entry key="813">Salva</entry>
+  <entry key="814">Exclui</entry>
+  <entry key="815">Detalhes do evento</entry>
+  <entry key="816">Moderadores padrão</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nome</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Adiciona o moderador padrão</entry>
+  <entry key="822">É um Super Moderator</entry>
+  <entry key="823">Se a sala é moderada, usuários com permissão de Moderador ou Administrador são automaticamente Moderadores quando entram na sala. Se você não quer espeficificar e só deseja que um determinado usuário torne-se moderador use a opção Moderador Padrão.</entry>
+  <entry key="824">Um Super Moderador é sempre um Moderador quando entra na sala, e ninguem pode remover seu privilégio de moderação.</entry>
+  <entry key="825">Aplica Super-Moderação para o usuário</entry>
+  <entry key="826">Remove Super-Moderação do usuário</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Se você adicionar uma Organização para a sala apenas usuários dessa organização têm acesso a ela (esta opção só é válido se a opção Público não estiver selecionada!)</entry>
+  <entry key="829">Moderação</entry>
+  <entry key="830">Limitações</entry>
+  <entry key="831">Organização</entry>
+  <entry key="832">Tem certeza?</entry>
+  <entry key="833">Tem certeza que quer excluir esse item? Você precisa pressionar o botao Salvar para fazer as mudanças!</entry>
+  <entry key="834">Nenhum usuário selecionado. Por favor selecione um depois adicione isso!</entry>
+  <entry key="835">Adiciona um novo moderador padrão</entry>
+  <entry key="836">Quer adicionar a permissão de Super-moderador para esse usuário? Um super-moderador não é moderador somente da sala, e nenhum outro moderador pode remover a permissão de moderação dele. Você precisa salvar para que as configurações tenham efeito.</entry>
+  <entry key="837">Tem certeza que quer remover a permissão de Super-moderador para esse usuário? Você precisa salvar para que as configurações tenham efeito.</entry>
+  <entry key="838">É um Super-moderador. Você não pode remover a permissão de Moderação de um Super-moderador!</entry>
+  <entry key="839">Tem certeza que quer exclurir esse Arquivo/Diretório?</entry>
+  <entry key="840">Excluir Arquivo/Diretório?</entry>
+  <entry key="841">Sr.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Propriedades</entry>
+  <entry key="844">Mostra a posição do mouse para os espectadores</entry>
+  <entry key="845">Compartilhar Audio com o SIP Applet</entry>
+  <entry key="846">Compartilhar Áudio e Vídeo via SIP com Flash</entry>
+  <entry key="847">Ajuste</entry>
+  <entry key="848">Ver Tela</entry>
+  <entry key="849">O Usuário</entry>
+  <entry key="850">quer compartihar sua tela. Você quer ver?</entry>
+  <entry key="851">Fecha</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">A sessão foi fechada pelo usuário que compartilhava!</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Novo compartilhamento de tela</entry>
+  <entry key="856">Minimiza</entry>
+  <entry key="857">Maximiza</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Linha do tempo</entry>
+  <entry key="860">Minhas Gravações</entry>
+  <entry key="861">Gravações Públicas</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nome</entry>
+  <entry key="864">Duração</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Vídeo - Principal</entry>
+  <entry key="869">Gravando</entry>
+  <entry key="870">Você pode gravar e compartilhar a qualquer momento. Para que outros usuários consigam ver sua tela, clique no botão Iniciar no topo da tela. Para somente gravar, clique no botão Inicia Gravação.</entry>
+  <entry key="871">Inicia gravando</entry>
+  <entry key="872">Para a gravação</entry>
+  <entry key="873">Download o arquivo FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Parar</entry>
+  <entry key="877">O microfone do usuário está ligado</entry>
+  <entry key="878">Interromper o compartilhamento</entry>
+  <entry key="879">Permitir perguntas dos usuários</entry>
+  <entry key="880">Desligue isso para evitar que qualquer usuário perturbe você nessa sala. O botão para pedir a moderação ("Eu tenho uma pergunta") fica invisível.</entry>
+  <entry key="881">Direitos</entry>
+  <entry key="882">Download como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Somente Audio</entry>
+  <entry key="887">Os erros aconteceram no processo de gravação.</entry>
+  <entry key="888">A visualização da gravação ainda não está pronta. Por favor tente novamente em alguns minutos.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Gravador de mensagem</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">O Applet SIP não está pronto</entry>
+  <entry key="893">Configurações da conta SIP</entry>
+  <entry key="894">Definições SIP para cada usuário. Você pode ligar ou desligar o SIP via Administração &gt; Configuração (Chave: enable_sip). Os dados SIP para cada usuário deve ser criados automaticamente.</entry>
+  <entry key="895">Usuário do SIP</entry>
+  <entry key="896">Senha do SIP</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">O Login no Gateway SIP falhou. Você deve conferir seus dados de autenticação do seu provedor SIP. Como administrador, você ainda poderá fazer o login e verificar a configuração. Como usuário ou moderador, você será bloqueado a partir de qualquer iteração.</entry>
+  <entry key="899">O Login no Gateway SIP falhou, entre em contato com o suporte do serviço!</entry>
+  <entry key="900">Logando no SIP-Gateway ...</entry>
+  <entry key="901">Logando no SIP-Gateway ...</entry>
+  <entry key="902">Mostra Log</entry>
+  <entry key="903">Log de mensagem do processo de gravação</entry>
+  <entry key="904">Mensagem do Applet SIP</entry>
+  <entry key="905">O Applet SIP não está pronto. Aceite o applet e clique em ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">Para acessar outras gravações que você tem para fazer login no aplicativo {0}.</entry>
+  <entry key="910">Escolha o usuário para este vídeo</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">Você é um moderador nessa entrevista. Você pode decidir quem está falando nesta entrevista e pode iniciar / parar a gravação da Sessão.</entry>
+  <entry key="913">Iniciar gravação</entry>
+  <entry key="914">Parar gravação</entry>
+  <entry key="915">A gravação da entrevista já foi iniciada.</entry>
+  <entry key="916">A gravação está parada ou não foi iniciada ainda.</entry>
+  <entry key="917">A gravação desta entrevista já começou!</entry>
+  <entry key="918">Cancelar</entry>
+  <entry key="919">O processamento de uma entrevista demora 5 minutos por 1 minutos de entrevista. O progresso atual da transcodificacao da entrevista e processamento é a seguinte:</entry>
+  <entry key="920">Você tem que digitar sua senha novamente para criar automaticamente os dados SIP</entry>
+  <entry key="921">Re-generar SIP Data</entry>
+  <entry key="922">Você não pode mover o arquivo ou pasta em sua própria pasta!</entry>
+  <entry key="923">Tamanho da unidade</entry>
+  <entry key="924">Tamanho do HD público</entry>
+  <entry key="925">Propriedades da licença</entry>
+  <entry key="926">Você pode vincular o usuário a uma data de expiração ou a um número máximo de minutos, quando você ativar o licenciamento.</entry>
+  <entry key="927">Verifique licença</entry>
+  <entry key="928">Aquisição de volume</entry>
+  <entry key="929">Data de expiração</entry>
+  <entry key="930">Segundos restantes</entry>
+  <entry key="931">Tempo total</entry>
+  <entry key="932">Sua licença expirou. Você precisa comprar novos minutos (pagar por minuto) ou uma base fixa de consumo / volume.</entry>
+  <entry key="933">Clique e compre</entry>
+  <entry key="934">Tempo restante em sua conta</entry>
+  <entry key="935">Informações de Licença de Usuário</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Fechar</entry>
+  <entry key="938">Sua licença expirou. Você precisa comprar novos minutos (pagar por minuto) ou uma base fixa de consumo / volume.</entry>
+  <entry key="939">Propriedades da licença</entry>
+  <entry key="940">Você pode optar por comprar minutos para fazer videoconferências (pagar por minuto)&lt;br/&gt;&lt;br/&gt; Ou adquirir um plano de 3 a 12 meses&lt;br/&gt;&lt;br/&gt;Envio de convites (links diretos para salas de conferências) ou a criação de salas de conferências via o calendário com usuários externos só é permitido com uma base fixa de volume!</entry>
+  <entry key="941">Compre 60 minutos: R$...</entry>
+  <entry key="942">Compre 5 horas: R$...</entry>
+  <entry key="943">Compre 3 meses R$...</entry>
+  <entry key="944">Compre 6 meses R$...</entry>
+  <entry key="945">Pagar por minute</entry>
+  <entry key="946">Aquisição de volume</entry>
+  <entry key="947">Você tem licença ilimitada</entry>
+  <entry key="948">Sua licença expira em:</entry>
+  <entry key="949">Você adquiriu o plano por minuto e ainda tem:</entry>
+  <entry key="950">Compre mais créditos!</entry>
+  <entry key="951">Quer seu prórpio serviço personalizado de videoconferências?</entry>
+  <entry key="952">Você gostaria de ter o nome de seu aplicativo instalado em seu servidor ou integrado em seu Moodle, SugarCRM, site ou Intranet? Preços a partir de xxx reais por instalação!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Responder a:</entry>
+  <entry key="955">Mensagem:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Clique aqui para informações de condições e contato</entry>
+  <entry key="958">Detalhes do cartão de crédito</entry>
+  <entry key="959">Nome</entry>
+  <entry key="960">Sobrenome</entry>
+  <entry key="961">Tipo de Cartão</entry>
+  <entry key="962">Cartão VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Descobrir</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Número do Cartão</entry>
+  <entry key="967">Data de Validade</entry>
+  <entry key="968">Número de verificação do cartão</entry>
+  <entry key="969">Endereço de Cobrança</entry>
+  <entry key="970">Endereço</entry>
+  <entry key="971">Endereço</entry>
+  <entry key="972">Cidade</entry>
+  <entry key="973">País</entry>
+  <entry key="974">Estado (somente US)</entry>
+  <entry key="975">CEP</entry>
+  <entry key="976">Quantidade</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Passo 1: {0} - Forma de Pagamento</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Clique"Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Obrigado por comprar o {0}. &lt;br/&gt; Tão logo recebermos o pagamento sua conta será atualizada. &lt;br/&gt; Você receberá um email com a sua factura em formato PDF. &lt;br/&gt; Você também pode verificar as transações atuais e passadas em seu configurações do perfil. &lt;br/&gt; &lt;br/&gt; Você pode fechar esta janela do navegador / guia agora e voltar para {0}.</entry>
+  <entry key="982">Confirme e compre!</entry>
+  <entry key="983">Clique e compre!</entry>
+  <entry key="984">Passo 3: Pagamento {0} - Confira a ordem e compre!</entry>
+  <entry key="985">Nome</entry>
+  <entry key="986">Pagamento recebido!</entry>
+  <entry key="987">Olá,</entry>
+  <entry key="988">Nós recebemos o seu pagamento. Seu perfil de usuário está atualizado agora. Veja anexo a sua fatura. As Notas Fiscais Futura e passada também podem ser baixadas em seu perfil de usuário.</entry>
+  <entry key="989">Obrigado por utilizar o {0}!</entry>
+  <entry key="990">{0} Pagamento Recebido -</entry>
+  <entry key="991">Estado de pagamento e transações</entry>
+  <entry key="992">Código de transação</entry>
+  <entry key="993">Minutos</entry>
+  <entry key="994">Meses</entry>
+  <entry key="995">R$</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Fatura</entry>
+  <entry key="998">Fatura</entry>
+  <entry key="999">Você necessita pagar uma taxa para ser capaz de enviar convites ou criar encontros através do calendário. Com pagamento por minuto só é possível para você acessar o {0}. Você não pode permitir a terceiros o acesso a uma reunião.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Configurações</entry>
+  <entry key="1002">O número de conferência e PIN é criado automaticamente através do OpenXG RPC-Gateway</entry>
+  <entry key="1003">Número SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Limpar objetos desenhados na lousa!</entry>
+  <entry key="1006">Somente a URL digitada na barra de status é enviada para os participantes!</entry>
+  <entry key="1007">Faça salas de equipe [Breakout session]</entry>
+  <entry key="1008">Escolha usuários para a sala de equipe</entry>
+  <entry key="1009">Você pode escolher usuários aqui e criar uma nova sala de conferência ("Equipe da Sala") para eles. Os usuários escolhidos irão automaticamente para a nova equipe da sala ou recebem uma notificação. Equipe da sala-Moderadores recebem ainda uma lista de salas atuais, para que possam mudar de sala, se houver a necessidade de um moderador.</entry>
+  <entry key="1010">Usuário</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012">Login</entry>
+  <entry key="1013">Usuários para a nova sala de equipe:</entry>
+  <entry key="1014">Criar equipe da sala</entry>
+  <entry key="1015">Cancelar</entry>
+  <entry key="1016">Escolha pelo menos um usuário para a equipe da sala!</entry>
+  <entry key="1017">Adicionar usuário a equipe</entry>
+  <entry key="1018">Remover usuário da sala de equipe</entry>
+  <entry key="1019">Usuário é moderador. Ele pode gerenciar outros usuários</entry>
+  <entry key="1020">Tipo de sala</entry>
+  <entry key="1021">Se você ticar "Forçar usuario a mudar para nova Sala" todos os usuários escolhidos irão automaticamente para a recém-criada sala. Caso contrário, receberão uma notificação que eles &lt;i&gt;podem&lt;/ i&gt; mudar para a nova sala. Equipe de Moderadores sempre tem a livre escolha para gerir as Salas e alternar entre elas.</entry>
+  <entry key="1022">Gerencias salas de equipe</entry>
+  <entry key="1023">Você pode alternar entre aqui todas as salas de equipe que são atribuídas como moderador de sala de equipe. Usuários dentro da sala de equipe, você podem lhe enviar uma mensagem, por exemplo, pedindo para vir para a sua sala de reunião e ajudá-los. Você também pode encerrar a sala de equipe e todos os usuários serão desconectados.</entry>
+  <entry key="1024">Forçar usuário a mudar para nova sala</entry>
+  <entry key="1025">Nome</entry>
+  <entry key="1026">Criado por</entry>
+  <entry key="1027">Criado por</entry>
+  <entry key="1028">Criado por</entry>
+  <entry key="1029">Usuários disponíveis</entry>
+  <entry key="1030">Adicionar um usuário com o "-" da esquerda ou removê-lo com o "+" da direita!</entry>
+  <entry key="1031">1) Configurações de salas de equipe</entry>
+  <entry key="1032">2) Adicionar usuários à sala de equipe</entry>
+  <entry key="1033">Nome da sala de equipe</entry>
+  <entry key="1034">Sala de equipe</entry>
+  <entry key="1035">Mudar para a sala</entry>
+  <entry key="1036">Mudar para essa sala de equipe</entry>
+  <entry key="1037">Encerrar sala de equipe e desconectar todos os usuários!</entry>
+  <entry key="1038">Nova sala de equipe</entry>
+  <entry key="1039">Há uma nova sala de equipe disponível para você!</entry>
+  <entry key="1040">Mudar para uma sala de equipe</entry>
+  <entry key="1041">Ações da sala de equipe</entry>
+  <entry key="1042">Você pode reabrir esta janela através do menu principal &gt;&gt;&gt; ações</entry>
+  <entry key="1043">Enviar mensagem ao moderador da sala de equipe</entry>
+  <entry key="1044">Nova sala de equipe</entry>
+  <entry key="1045">Há uma nova sala de equipe deisponível.Você pode mudar para essa sala. Salas de euipe são como grupos de trabalho com possibilidades de pedir ajuda ao moderador. Suas salas de equipe também estão disponíveis na seção "minhas reuniões".</entry>
+  <entry key="1046">Mudar para a sala de equipe</entry>
+  <entry key="1047">Criada por:</entry>
+  <entry key="1048">Nome da sala de equipe</entry>
+  <entry key="1049">Esta janela permanecerá aberta mesmo que você deixe a sala!</entry>
+  <entry key="1050">Usuários para esta sala de equipe</entry>
+  <entry key="1051">3) Outras sala de equipe para as quais você pode se mudar:</entry>
+  <entry key="1052">Deixe uma mensagem para o moderador da sala de equipe.</entry>
+  <entry key="1053">Enviar</entry>
+  <entry key="1054">2) Usuário convidados para esta sala de equipe</entry>
+  <entry key="1055">É moderador da sala de equipe</entry>
+  <entry key="1056">Estes são todos os usuários que o moderador convidou para a sala de equipe</entry>
+  <entry key="1057">Não há moderador da equipe logado no momento!</entry>
+  <entry key="1058">Por favor insira uma mensagem</entry>
+  <entry key="1059">Por favor, nos ajude!</entry>
+  <entry key="1060">Um usuário de uma sala de equipe precisa de sua ajuda!</entry>
+  <entry key="1061">Equipe da sala solicita ajuda</entry>
+  <entry key="1062">Mensagem:</entry>
+  <entry key="1063">De:</entry>
+  <entry key="1064">Você não está atualmente em qualquer equipe da sala. Mas você pode mudar aqui para todas as salas as quais você tem acesso.</entry>
+  <entry key="1065">Faça o backup do sistema. O backup inclui todos os dados de usuários. A configuração não está incluído, bem como as etiquetas de idiomas. Porque esses valores são importados com o instalador de sistema. Para atualizar seu sistema, exportar seu antigo sistema (1) re-instalar em um novo banco de dados um novo pacote (2) e importar o arquivo de backup novamente (3). O backup deve ser importado antes de gerar os dados no sistema recém-instalado.</entry>
+  <entry key="1066">Backup do sistema</entry>
+  <entry key="1067">Permitir ao usuário Compartilhar/Gravar a tela</entry>
+  <entry key="1068">Negar ao usuário compartilhar tela/Gravar</entry>
+  <entry key="1069">Usuário é Moderador, ele pode fazer qualquer coisa!</entry>
+  <entry key="1070">gostaria de compartilhar/gravar a tela.</entry>
+  <entry key="1071">Você está autorizado a compartilhar/gravar a tela</entry>
+  <entry key="1072">Aplicar para direito de compartilhar/gravar a tela</entry>
+  <entry key="1073">Permitir/Negar direito de compartilhar/gravar tela</entry>
+  <entry key="1074">Desligar o som</entry>
+  <entry key="1075">Ligar o som</entry>
+  <entry key="1076">Sala só com áudio</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Permitir controle remoto (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1079">Negar Controle Remoto (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">Você está autorizado a controlar remotamente a tela (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1082">gostaria de controlar remotamente a tela.</entry>
+  <entry key="1083">Usuário é Moderador, ele pode fazer qualquer coisa! [Remote Desktop Control]</entry>
+  <entry key="1084">Permitir/Negar direito de acesso de controlar remotamente a tela (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1085">1) Seu PC para o PC remoto: Para copiar e colar texto de sua área de transferência para a tela controlada remotamente, clique na tela, clique com o botão direito no campo de texto e escolha "insert" do menu.&lt;br/&gt;&lt;br/&gt;2) Do PC remoto para seu PC: Para copiar texto do PC remoto para o seu, destaque (clique e arraste sobre as palavras) o texto com o mouse na tela remota, clique com o botão direito e escolha a opção &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copiar e colar texto do seu PC para o PC remoto e vice versa.</entry>
+  <entry key="1087">Copiar o texto realçado</entry>
+  <entry key="1088">Como copiar e colar</entry>
+  <entry key="1089">Qualidade do compartilhamento de tela:</entry>
+  <entry key="1090">Qualidade muito alta</entry>
+  <entry key="1091">Qualidade alta</entry>
+  <entry key="1092">Qualidade média</entry>
+  <entry key="1093">Qualidade baixa</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Teclado:</entry>
+  <entry key="1097">Feche conferência!</entry>
+  <entry key="1098">a conferência terminou. Você será direcionado para assuntos interessantes em</entry>
+  <entry key="1099">Fechar a sala</entry>
+  <entry key="1100">Fechar endereço eletrônico</entry>
+  <entry key="1101">Configurações de terminação da sala</entry>
+  <entry key="1102">Se a sala estiver encerrada, usuários serão redirecionados para o endereço eletrônico</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nome</entry>
+  <entry key="1106">Arquivo de configuração</entry>
+  <entry key="1107">Configuração LDAP</entry>
+  <entry key="1108">Nome</entry>
+  <entry key="1109">Habilitado</entry>
+  <entry key="1110">Inserido</entry>
+  <entry key="1111">Inserido por</entry>
+  <entry key="1112">Atualizado</entry>
+  <entry key="1113">Atualizado por</entry>
+  <entry key="1114">Os arquivos de configuração estão na pasta webapps/openmeetings/conf. Você precisa carregar manualmente os arquivos para esta pasta. As alterações no arquivo de configuração estarão imediatamente online.</entry>
+  <entry key="1115">Nome de arquivo de configuração</entry>
+  <entry key="1116">Se você escolheu "Adicionar domínio para nome de usuário" o valor no campo "domínio" é adicionado para cada login que o usuário digitar no box de login. Isso é útil se o login no LDAP é salvo incluindo o nome do domínio. Exemplo: Usuário entra com "Maria" especificado como "localhost.com". O login que é verificado em relação ao LDAP é maria@localhost.com</entry>
+  <entry key="1117">Adicionar Domínio ao usuário</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Inserir</entry>
+  <entry key="1120">Copiar o texto realçado</entry>
+  <entry key="1121">Texto da área de transferência remota</entry>
+  <entry key="1122">Mostrar área de transferência remota</entry>
+  <entry key="1123">Não mostrar novamente</entry>
+  <entry key="1124">Copiar o texto aqui ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Editar configurações padrão ...</entry>
+  <entry key="1127">Não mostrar caixa de informação no controle remoto sobre Copiar e Colar</entry>
+  <entry key="1128">Salvar</entry>
+  <entry key="1129">Remover</entry>
+  <entry key="1130">Cancelar</entry>
+  <entry key="1131">Convidar usuário a sala de conferência</entry>
+  <entry key="1132">Escolha uma sala de conferência. O usuário convidado irá receber uma mensagem com seu nome e um link para a sala.</entry>
+  <entry key="1133">Conectado desde:</entry>
+  <entry key="1134">Entre na sala após o envio de convite</entry>
+  <entry key="1135">Convidar</entry>
+  <entry key="1136">Mensagem</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Mensagem convite</entry>
+  <entry key="1139">Enviar convite</entry>
+  <entry key="1140">&lt;b&gt;não&lt;/b&gt; aceitou seu convite!</entry>
+  <entry key="1141">Aceitar</entry>
+  <entry key="1142">Aceitar</entry>
+  <entry key="1143">Fuso horário</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Descrição</entry>
+  <entry key="1147">Criado por</entry>
+  <entry key="1148">Mensagem Fuso Horário</entry>
+  <entry key="1149">Marque a opção "Mensagem do Fuso Horário" para apresentar aos usuários uma mensagem na próxima vez entrarem para atualizar o perfil.</entry>
+  <entry key="1150">Por favor, verifique o fuso horário no seu perfil de usuário.</entry>
+  <entry key="1151">Nova conferência {0}</entry>
+  <entry key="1152">Detalhes:</entry>
+  <entry key="1153">Inicio:</entry>
+  <entry key="1154">Fim:</entry>
+  <entry key="1155">Conferência {0} Modificada:</entry>
+  <entry key="1156">Organizador:</entry>
+  <entry key="1157">Conferência {0} Cancelada:</entry>
+  <entry key="1158">{0} Lenbrete de conferência:</entry>
+  <entry key="1159">Definições comunitárias</entry>
+  <entry key="1160">Mostrar dados de contato para todos.</entry>
+  <entry key="1161">Adicionar campos de interesse que você tem a oferecer ou que você está procurando, para encontrar parceiros interessantes para uma conferência. Vírgula separa os termos (por exemplo: serviço médico, garantia de saúde, ...)</entry>
+  <entry key="1162">Minhas ofertas</entry>
+  <entry key="1163">Meus interesses</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Fuso horário</entry>
+  <entry key="1166">Áreas de interesse</entry>
+  <entry key="1167">Informações para contato</entry>
+  <entry key="1168">Mostrar dados de contato apenas para os contatos</entry>
+  <entry key="1169">Não mostrar dados de contato</entry>
+  <entry key="1170">Meu Perfil</entry>
+  <entry key="1171">Editar configurações</entry>
+  <entry key="1172">Pesquisar usuários</entry>
+  <entry key="1173">Veja o seu perfil como outro o vêem</entry>
+  <entry key="1174">Edite suas configurações, adicionar os seus interesses para ser encontrado</entry>
+  <entry key="1175">Pesquisar outros usuários e ampliar sua rede</entry>
+  <entry key="1176">Pesquisar</entry>
+  <entry key="1177">Usuário oferece</entry>
+  <entry key="1178">Usuário procura</entry>
+  <entry key="1179">Texto livre</entry>
+  <entry key="1180">Nome</entry>
+  <entry key="1181">Fuso Horário</entry>
+  <entry key="1182">Oferece</entry>
+  <entry key="1183">Busca</entry>
+  <entry key="1184">Resultado da pesquisa</entry>
+  <entry key="1185">Ações</entry>
+  <entry key="1186">Adicionar aos contatos</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contatos e Mensagens</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Aceitar</entry>
+  <entry key="1191">Negar</entry>
+  <entry key="1192">Olá,</entry>
+  <entry key="1193">gostaria de adicioná-lo como contato.</entry>
+  <entry key="1194">Verifique os seus pedidos de contacto em {0} ou clique sobre os links para aceitar ou negar o pedido</entry>
+  <entry key="1195">Este usuário já está em sua lista de contatos ou recebeu um convite para sua lista de contatos que não foi respondida ainda.</entry>
+  <entry key="1196">Sua lista de contatos</entry>
+  <entry key="1197">Edite seu contato e mensagens, &lt;br/&gt; gerencie seus contatos pendentes!</entry>
+  <entry key="1198">confirmou você como contato!</entry>
+  <entry key="1199">Informação de chat</entry>
+  <entry key="1200">Mostrar / Copiar log do chat</entry>
+  <entry key="1201">Log do chat</entry>
+  <entry key="1202">De</entry>
+  <entry key="1203">Assunto</entry>
+  <entry key="1204">Enviar</entry>
+  <entry key="1205">Enviar</entry>
+  <entry key="1206">Menssagens</entry>
+  <entry key="1207">Novo email</entry>
+  <entry key="1208">Clique para escrever uma nova mensagem para quaquer um de seus contatos</entry>
+  <entry key="1209">Escrever nova mensagem</entry>
+  <entry key="1210">Para:</entry>
+  <entry key="1211">Assunto:</entry>
+  <entry key="1212">Ative ajuste e a lousa irá ampliar na tela inteira, então &lt;br/&gt; documentos estarão visíveis de acordo com a resolução da tela de cada participante.</entry>
+  <entry key="1213">Expulsar usuário</entry>
+  <entry key="1214">Você não pode expulsar a si mesmo da sala de conferência! Se você quiser sair da sala feche o navegador!</entry>
+  <entry key="1215">Você realmente deseja desconectar este usuário da sala de conferência?</entry>
+  <entry key="1216">Confirme ação ...</entry>
+  <entry key="1217">Você não pode expulsar um Super-Moderador de uma sala!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Iniciar</entry>
+  <entry key="1220">Fim</entry>
+  <entry key="1221">Adicionar uma solicitação de reunião opcional para a mensagem e criar uma sala de conferência. O evento é copiado no calendário de cada participante.</entry>
+  <entry key="1222">Caixa de Entrada</entry>
+  <entry key="1223">Enviado</entry>
+  <entry key="1224">Lixo</entry>
+  <entry key="1225">Este é você! Você não pode adicionar a si mesmo como contato.</entry>
+  <entry key="1226">O usuário já está negado!</entry>
+  <entry key="1227">O usuário já está aprovado!</entry>
+  <entry key="1228">Este hash de contato do usuário é inválido!</entry>
+  <entry key="1229">Usuário adicionado à lista de contatos!</entry>
+  <entry key="1230">Usuário negado como contato e removido da lista de contatos pendentes!</entry>
+  <entry key="1231">Não há esse contato!</entry>
+  <entry key="1232">Será que você realmente deseja remover o contato?</entry>
+  <entry key="1233">Confirmar remoção de contato</entry>
+  <entry key="1234">Deletar contato da lisa</entry>
+  <entry key="1235">Perfil de usuário</entry>
+  <entry key="1236">Mostrar o perfil do usuário</entry>
+  <entry key="1237">Mensagens</entry>
+  <entry key="1238">Pesquisar</entry>
+  <entry key="1239">Selecionar todos</entry>
+  <entry key="1240">Desmarcar</entry>
+  <entry key="1241">Selecionar não lidas</entry>
+  <entry key="1242">Selecione ler</entry>
+  <entry key="1243">Mover para pasta ...</entry>
+  <entry key="1244">Adicionar nova pasta ...</entry>
+  <entry key="1245">Excluir</entry>
+  <entry key="1246">e-mails deletados ainda permanecem na sua lixeira!</entry>
+  <entry key="1247">Marcar não lidas</entry>
+  <entry key="1248">Marcar lidas</entry>
+  <entry key="1249">Responder</entry>
+  <entry key="1250">Responder a todos</entry>
+  <entry key="1251">Para frente</entry>
+  <entry key="1252">Ações ...</entry>
+  <entry key="1253">Enviar mensagem privada</entry>
+  <entry key="1254">Nada selecionado!</entry>
+  <entry key="1255">Mover para Caixa de Entrada</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">Essa ação não pode ser desfeita!</entry>
+  <entry key="1258">Adicionar pasta</entry>
+  <entry key="1259">Adicionar pastas e organizar suas mensagens!</entry>
+  <entry key="1260">Adicionar pasta</entry>
+  <entry key="1261">Adicionar</entry>
+  <entry key="1262">excluir pasta</entry>
+  <entry key="1263">Você não pode excluir esta pasta, ainda existem nela! Excluir primeiro as mensagens ou movê-los para outra pasta.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Você realmente quer apagar esta pasta? Não há maneira de desfazer isso.</entry>
+  <entry key="1266">O seu pedido foi enviado para o usuário. O usuário receberá uma notificação para aceitar ou negar o seu pedido. Apenas os pedidos aceitos estão em sua lista de contatos, é claro!</entry>
+  <entry key="1267">Mensagem</entry>
+  <entry key="1268">O usuário não compartilha seus dados de contato pessoal.</entry>
+  <entry key="1269">O usuário não compartilha seus dados pessoais de contacto só para contatos.</entry>
+  <entry key="1270">Endereço &amp; Telefone</entry>
+  <entry key="1271">Seu código de convite não é válido, o código só é válido durante esta data e hora específicas:</entry>
+  <entry key="1272">Este evento está ligado a vários calendários de outros usuários. Sua alteração irá também atualizar o calendário deles. Será que você realmente gostaria de atualizar o evento?</entry>
+  <entry key="1273">Confirme atualização</entry>
+  <entry key="1274">Permitir que contato veja meu calendário (somente visualização)</entry>
+  <entry key="1275">Não compartilhe o calendário</entry>
+  <entry key="1276">Calendário de contatos</entry>
+  <entry key="1277">Seus contatos devem aprová-lo primeiro para poder ver seu calendário.</entry>
+  <entry key="1278">Você não pode armazenar ou excluir eventos de outros calendários. Somente do seu!</entry>
+  <entry key="1279">Mostrar o meu calendário de novo!</entry>
+  <entry key="1280">Este evento está ligado a vários calendários de outros usuários. Sua ação também irá apagar o evento do calendario deles. Será que você realmente deseja apagar o evento?</entry>
+  <entry key="1281">Confirme ação</entry>
+  <entry key="1282">Entre na sala</entry>
+  <entry key="1283">Acesse a sala de conferência</entry>
+  <entry key="1284">Há uma sala de conferências e evento reservados com esta mensagem privada.</entry>
+  <entry key="1285">Você precisa armazenar o evento primeiro!</entry>
+  <entry key="1286">Não há sala disponível. O evento no calendário para esta sala já foi apagado!</entry>
+  <entry key="1287">Escolha seu apelido</entry>
+  <entry key="1288">Primeiro nome</entry>
+  <entry key="1289">Último nome</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Tamanho mínimo 4 caracteres! Tanto Nome e Sobrenome</entry>
+  <entry key="1293">Por favor, entre com email válido!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Entrar com sua conta do Facebook</entry>
+  <entry key="1296">Membro desde</entry>
+  <entry key="1297">Você conectado com sua conta do Facebook. Você deve atualizar seu perfil com o e-mail correto. Caso contrário, você não receberá convites e mensagens privadas de outros usuários.</entry>
+  <entry key="1298">Mensagem</entry>
+  <entry key="1299">Não mostrar mensagem de atualização de perfil novamente</entry>
+  <entry key="1300">mais opções de tela ...</entry>
+  <entry key="1301">Nova mensagem privada:</entry>
+  <entry key="1302">Clique aqui para visitar o seu perfil para ver a mensagem completa ...</entry>
+  <entry key="1303">Responder</entry>
+  <entry key="1304">Salas e bate-papo</entry>
+  <entry key="1305">Minhas salas</entry>
+  <entry key="1306">Minha sala de conferência (de 1-16 usuários)</entry>
+  <entry key="1307">Minha sala de seminário (Webinar) (de 1-120 usuários)</entry>
+  <entry key="1308">ID do dono</entry>
+  <entry key="1309">Digite uma senha</entry>
+  <entry key="1310">Você precisa de uma conta com nível de Usuário, Moderador ou Admin</entry>
+  <entry key="1311">Web-Service (acesso apenas através via SOAP)</entry>
+  <entry key="1312">Carregar diretamente na lousa</entry>
+  <entry key="1313">Você realmente deseja remover esta lousa? Essa ação não pode ser desfeita!</entry>
+  <entry key="1314">Carregar para a lousa</entry>
+  <entry key="1315">Não se esqueça de "Iniciar gravação", se você quiser ter a reunião gravada.</entry>
+  <entry key="1316">Iniciar gravação</entry>
+  <entry key="1317">Seta</entry>
+  <entry key="1318">Circulo</entry>
+  <entry key="1319">Linha</entry>
+  <entry key="1320">Quadrado</entry>
+  <entry key="1321">Triangulo</entry>
+  <entry key="1322">Texto/Nota</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Desenho livre</entry>
+  <entry key="1325">Selecionar/Mover</entry>
+  <entry key="1326">Desenhar uma forma</entry>
+  <entry key="1327">Cortar/Mover</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Imprimir</entry>
+  <entry key="1330">Desfazer</entry>
+  <entry key="1331">Lixo</entry>
+  <entry key="1332">Adicionar Grade</entry>
+  <entry key="1333">Compartilhar Arquivo</entry>
+  <entry key="1334">Selecionar Forma</entry>
+  <entry key="1335">Selecionar Clipart</entry>
+  <entry key="1336">Copiar</entry>
+  <entry key="1337">Recortar</entry>
+  <entry key="1338">Colar</entry>
+  <entry key="1339">Excluir</entry>
+  <entry key="1340">Você realmente deseja excluir todo o conteúdo da lousa?</entry>
+  <entry key="1341">Carregar directamente para a lousa</entry>
+  <entry key="1342">Participantes</entry>
+  <entry key="1343">Gerente de participantes</entry>
+  <entry key="1344">Presente</entry>
+  <entry key="1345">Controle remoto</entry>
+  <entry key="1346">Ejetar</entry>
+  <entry key="1347">Bate-papo</entry>
+  <entry key="1348">Convidar Participantes</entry>
+  <entry key="1349">Por Email</entry>
+  <entry key="1350">É moderador</entry>
+  <entry key="1351">Webcam do usuário ligada</entry>
+  <entry key="1352">Desativar preenchimento de formulário</entry>
+  <entry key="1353">Ativar preenchimento de formulário</entry>
+  <entry key="1354">Ajustar ao grid</entry>
+  <entry key="1355">Permitir gravação</entry>
+  <entry key="1356">Espere para gravação</entry>
+  <entry key="1357">Ocultar barra superior</entry>
+  <entry key="1358">Reproduzir vídeo</entry>
+  <entry key="1359">Você realmente deseja excluir objetos desenhados na tela atual?</entry>
+  <entry key="1360">Aceitar e conceder direito de usuário</entry>
+  <entry key="1361">Negar</entry>
+  <entry key="1362">Eu</entry>
+  <entry key="1363">Atividades e ações</entry>
+  <entry key="1364">Remover a lousa</entry>
+  <entry key="1365">Você precisa da moderação ou o direito de desenhar no quadro branco para remover quadros!</entry>
+  <entry key="1366">Não é permitido</entry>
+  <entry key="1367">saiu da sala.</entry>
+  <entry key="1368">Ícones de Matemática</entry>
+  <entry key="1369">Nenhuma categoria</entry>
+  <entry key="1370">Cor-Estilo</entry>
+  <entry key="1371">Qualidade</entry>
+  <entry key="1372">Domínio</entry>
+  <entry key="1373">visitar</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">Verde mar médio</entry>
+  <entry key="1376">azul celeste</entry>
+  <entry key="1377">Azul escuro</entry>
+  <entry key="1378">Amarelo ouro</entry>
+  <entry key="1379">Prata</entry>
+  <entry key="1380">definicao do usuário</entry>
+  <entry key="1381">o melhor</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medio</entry>
+  <entry key="1384">Fechar o microfone</entry>
+  <entry key="1385">Ativar microfone globalmente</entry>
+  <entry key="1386">Microfone dos outros mudo</entry>
+  <entry key="1387">Você está globalmente silenciado pelo moderador. Você não pode reativar!</entry>
+  <entry key="1388">Silenciar o microfone totalmente?</entry>
+  <entry key="1389">Você realmente quer silenciar-se globalmente? Nenhum outro usuário vai ouvir você!</entry>
+  <entry key="1390">Silenciar microfone localmente?</entry>
+  <entry key="1391">Você realmente quer silenciar este microfone? Você só pode silenciá-lo localmente em sua tela. Não tem nenhum efeito para outros usuários. Apenas os moderadores podem desligá-lo globalmente!</entry>
+  <entry key="1392">Silenciar microfone globalmente?</entry>
+  <entry key="1393">Você realmente quer para silenciar este usuário globalmente? Nenhum outro usuário vai ouvi-lo mais!</entry>
+  <entry key="1394">Seu som está ligado. Clique aqui para enviar mensagem ao moderador para silenciar seu microfone (para toda sala de conferência)!</entry>
+  <entry key="1395">Seu som está desligado. Clique aqui para enviar mensagem ao moderador para ativar seu microfone (para todos na sala de conferência)!</entry>
+  <entry key="1396">gostaria que o moderador silenciasse meu microfone.</entry>
+  <entry key="1397">gostaria que o moderador habilitasse microfone globalmente.</entry>
+  <entry key="1398">gostaria que o moderador habilitasse o microfone dele/dela.</entry>
+  <entry key="1399">gostaria que o moderador desabilite o microfone dele/dela.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Microfone mudo. Clique aqui para ativar o microfone seu / dela!</entry>
+  <entry key="1402">Este usuário foi silenciado pelo moderador. Você não pode ativa-lo!</entry>
+  <entry key="1403">Silenciar o microfone</entry>
+  <entry key="1404">Ativar o microfone para toda a sala</entry>
+  <entry key="1405">Microfone mudo</entry>
+  <entry key="1406">Ativar microfone</entry>
+  <entry key="1407">Silenciar microfone</entry>
+  <entry key="1408">Ativar microfone para toda a sala</entry>
+  <entry key="1409">Somente moderadores podem silenciar ou ativar um usuário! Para silenciar o microfone próprio: Por favor, use o ícone de microfone na caixa de vídeo!</entry>
+  <entry key="1410">Nome da enquete</entry>
+  <entry key="1411">Você</entry>
+  <entry key="1412">Enquetes arquivadas</entry>
+  <entry key="1413">ativo</entry>
+  <entry key="1414">Gráfico simples</entry>
+  <entry key="1415">Gráfico de pizza</entry>
+  <entry key="1416">Por favor, indique e-mail</entry>
+  <entry key="1417">Nova(s) mensagem(s)</entry>
+  <entry key="1418">Encerrar enquete</entry>
+  <entry key="1419">Tem certeza que deseja encerrar esta enquete? Ninguém será capaz de votar após isto.</entry>
+  <entry key="1420">Excluir Enquete</entry>
+  <entry key="1421">Tem certeza de que deseja excluir esta enquete? Os resultados serão excluídos.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Permitir/Negar o direito de dar áudio exclusivo.</entry>
+  <entry key="1424">Permitir ao usuário dar áudio exclusivo</entry>
+  <entry key="1425">Negar usuário dar áudio exclusivo</entry>
+  <entry key="1426">gostaria de obter uma permissão para áudio exclusivo.</entry>
+  <entry key="1427">gostaria de obter permissão para áudio exclusivo.</entry>
+  <entry key="1428">dar permissão para áudio exclusivo.</entry>
+  <entry key="1429">Resolução da camera</entry>
+  <entry key="1430">Alterar a resolução afeta a largura de banda, foto maior precisa de mais largura de banda!</entry>
+  <entry key="1431">Você não tem permissão conceder audio exclusivo a si mesmo ou outras pessoas. Você precisa ter permissao do moderador ou pedir ao moderador para lhe dar áudio exclusivo.</entry>
+  <entry key="1432">Gostaria de obter o direito exclusivo para áudio</entry>
+  <entry key="1433">Dê áudio exclusivo para mim (em alternativa clique sobre o vídeo pod ou pressione F12)</entry>
+  <entry key="1434">Microfone está ligado!</entry>
+  <entry key="1435">Microfone está mudo</entry>
+  <entry key="1436">Ocultar bate-papo</entry>
+  <entry key="1437">Ocultar atividades</entry>
+  <entry key="1438">Ocultar o explorador de arquivos</entry>
+  <entry key="1439">Ocultar menu de ações</entry>
+  <entry key="1440">Ocultar o compartilhamento de tela</entry>
+  <entry key="1441">Ocultar a lousa</entry>
+  <entry key="1442">Mostrar status de microfone no vídeo</entry>
+  <entry key="1443">Opções de layout</entry>
+  <entry key="1444">Novo Evento</entry>
+  <entry key="1445">Protegido por senha são os links para a conferência que são enviados para os participants quando você salvar o calendário de eventos, e não a sala! Isso significa que se você salvar o evento várias vezes, mas com senhas diferentes, cada participent recebe um novo link que tem uma senha diferente. Mas os links antigos ainda funcionam uma vez enviados!</entry>
+  <entry key="1446">Editar detalhes</entry>
+  <entry key="1447">Mostrar discador SIP</entry>
+  <entry key="1448">Chamar</entry>
+  <entry key="1449">Mostrar eventos de calendário de contato</entry>
+  <entry key="1450">Página inicial!</entry>
+  <entry key="1451">Planeje suas reuniões</entry>
+  <entry key="1452">Assista a gravação e entrevistas</entry>
+  <entry key="1453">Escolha e inicie uma web-conferência</entry>
+  <entry key="1454">Gerencie usuários e direitos</entry>
+  <entry key="1455">Gerencie conexões e expulse usuários</entry>
+  <entry key="1456">Gerencie grupos de usuários</entry>
+  <entry key="1457">Gerenciar salas de conferência</entry>
+  <entry key="1458">Gerenciar as configurações do sistema</entry>
+  <entry key="1459">Gerenciar rótulos e redação</entry>
+  <entry key="1460">Gerenciar LDAP e configurações de ADS</entry>
+  <entry key="1461">Exportar/Importar Backups do Sistema</entry>
+  <entry key="1462">Você precisa ser um moderador ou ter direitos para "desenhar na lousa", adicionar, excluir ou carregar arquivos e pastas.</entry>
+  <entry key="1463">Editar texto</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publicar</entry>
+  <entry key="1466">Iniciar Publicação</entry>
+  <entry key="1467">Parar Publicação</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Contexto</entry>
+  <entry key="1470">Id da Publicação</entry>
+  <entry key="1471">Reduza a largura do compartilhamento de tela antes de tentar mover isto para esquerda</entry>
+  <entry key="1472">Reduzir a altura da tela compartilhada antes de tentar movê-lo para o fundo</entry>
+  <entry key="1473">Reduzir o x da tela compartilhada antes de tentar torná-la mais ampla</entry>
+  <entry key="1474">Reduzir o y da tela compartilhada antes de tentar torná-la maior</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Favor iniciar o compartilhamento de tela para publicar isto</entry>
+  <entry key="1477">É necessária permissão de moderador para iniciar a gravação</entry>
+  <entry key="1478">Você não tem permissão para habilitar áudio exclusiva para qualquer participante. Você precisa de direitos de moderação ou o direito exclusivo de áudio para habilitar qualquer microfone em modo exclusivo..</entry>
+  <entry key="1479">Carregar novo arquivo para a pasta de arquivos</entry>
+  <entry key="1480">Abra nova caixa de diálogo com as configurações de compartilhamento</entry>
+  <entry key="1481">Um moderador existente tem que aprovar isto</entry>
+  <entry key="1482">Pergunte moderador para compartilhar sua webcam/micro</entry>
+  <entry key="1483">Reúna comentários, criando uma enquete</entry>
+  <entry key="1484">Resultados da enquete corrente e passada como gráfico</entry>
+  <entry key="1485">Votar se houver uma enquete para esta sala de conferência</entry>
+  <entry key="1486">Editar configurações de câmara e microfone</entry>
+  <entry key="1487">Confirmar e sair da sala</entry>
+  <entry key="1488">Ligue para pessoas externas via VoIP/SIP</entry>
+  <entry key="1489">Envie um email com um link direto para esta sala</entry>
+  <entry key="1490">Alterar as configurações de sua lousa</entry>
+  <entry key="1491">Tamanho máximo de upload</entry>
+  <entry key="1492">Pergunte ao moderador para compartilhar sua lousa</entry>
+  <entry key="1493">Começar bate-papo particular / privado</entry>
+  <entry key="1494">Todos / tudo</entry>
+  <entry key="1495">Você não pode iniciar um bate-papo consigo mesmo!</entry>
+  <entry key="1496">Você já iniciou um bate-papo com este participante!</entry>
+  <entry key="1497">Você realmente quer apagar esse bate-papo?</entry>
+  <entry key="1498">Servidores</entry>
+  <entry key="1499">Servidores em cluster</entry>
+  <entry key="1500">Nome do servidor</entry>
+  <entry key="1501">Endereço do servidor</entry>
+  <entry key="1502">Detalhes do servidor</entry>
+  <entry key="1503">Enviar SMS</entry>
+  <entry key="1504">Publicando...usuário</entry>
+  <entry key="1505">Para ganhar tempo e economizar tráfego na internet você pode usar "command line admin" para backupear / restaurar / atualizar / upgrade:\n 1) Vá ao diretório instalador TVQWEB (por ex. /opt/red5) \n 2) pare o TVQWEB (por ex. ./red5-shutdown.sh)\n 3) ./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)\n 4) download archive with new OM\n 5) mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))\n 6) extract downloaded OM to the /opt/red5\n 7) ./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )\n 8) start OM\n</entry>
+  <entry key="1506">Salas comuns a todos os usuários</entry>
+  <entry key="1507">Salas comuns ao atual grupo de usuários</entry>
+  <entry key="1508">Salas do atual usuário</entry>
+  <entry key="1509">Crie / modifique sala especial de reunião</entry>
+  <entry key="1510">Você pode entrar com endereços múltiplos no formato : firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Ajuste volume da transmissão</entry>
+  <entry key="1512">Ajuste volume do microfone</entry>
+  <entry key="1513">É moderada por chat</entry>
+  <entry key="1514">Permite mensagens</entry>
+  <entry key="1515">Painel de bate-papo aberto por definição</entry>
+  <entry key="1516">Painel de arquivos aberto por definição</entry>
+  <entry key="1517">Último ping</entry>
+  <entry key="1518">Todo escravo envia um ping para o mestre a cada 3 segundos (configurável). O último ping do escravo precisa ser menor que 1 minuto para que o mestre use o escravo.</entry>
+  <entry key="1519">Porta HTTP</entry>
+  <entry key="1520">Usuário (SOAP-Access)</entry>
+  <entry key="1521">Senha</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocolo</entry>
+  <entry key="1524">Ping em andamento</entry>
+  <entry key="1525">Ativar</entry>
+  <entry key="1526">Gerar convite</entry>
+  <entry key="1527">Teste de conexão</entry>
+  <entry key="1528">Auto selecionar sala de entrevista</entry>
+  <entry key="1529">Sublinhar</entry>
+  <entry key="1530">Estilo da fonte</entry>
+  <entry key="1531">Permitir estilos de fonte</entry>
+  <entry key="1532">Cor da fonte</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Mostrar estatísticas de sessão</entry>
+  <entry key="1535">Detalhes da sessão</entry>
+  <entry key="1536">Importação de sistema</entry>
+  <entry key="1537">Incluir arquivos armazenados e gravações no backup</entry>
+  <entry key="1538">Permitir "SIP transport" na sala</entry>
+  <entry key="1539">Dar exclusividade de áudio a este usuário?</entry>
+  <entry key="1540">Por favor, especifique seu fuso horário / timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Salvando conteúdo. Por favor, aguarde!</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
new file mode 100644
index 0000000..ad0d144
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -0,0 +1,1885 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференция</entry>
+  <entry key="2">Совещания</entry>
+  <entry key="3">Лекции</entry>
+  <entry key="4">Установки</entry>
+  <entry key="5">Профиль</entry>
+  <entry key="6">Администрирование</entry>
+  <entry key="7">Пауза</entry>
+  <entry key="8">Запись</entry>
+  <entry key="9">Нет данных</entry>
+  <entry key="10">Функция записи только для лекторов</entry>
+  <entry key="11">Связанный пользователь:</entry>
+  <entry key="12">Начать конференцию</entry>
+  <entry key="13">Мое имя</entry>
+  <entry key="14">Видеоконференция</entry>
+  <entry key="15">Загрузить файл</entry>
+  <entry key="16">Заново загрузить список</entry>
+  <entry key="17">К списку документов</entry>
+  <entry key="18">Новый опрос</entry>
+  <entry key="19">Новый опрос для конференции</entry>
+  <entry key="20">Вопрос:</entry>
+  <entry key="21">Вид опроса:</entry>
+  <entry key="22">Создать</entry>
+  <entry key="23">Информация: каждый подключённый участник получает сообщение с новым опросом.</entry>
+  <entry key="24">Создать опрос</entry>
+  <entry key="25">Отменить</entry>
+  <entry key="26">Да/Нет</entry>
+  <entry key="27">Число 1 - 10</entry>
+  <entry key="28">Опрос</entry>
+  <entry key="29">Для создания опроса Вы должны быть модератором/лектором в этой комнате.</entry>
+  <entry key="30">Вы проголосовали.</entry>
+  <entry key="31">Вы уже проголосовали в данном опросе.</entry>
+  <entry key="32">Проголосовать!</entry>
+  <entry key="33">Ваш ответ:</entry>
+  <entry key="34">Да</entry>
+  <entry key="35">Нет</entry>
+  <entry key="36">хочу знать:</entry>
+  <entry key="37">Результаты опроса</entry>
+  <entry key="38">Вопрос:</entry>
+  <entry key="39">Ответы:</entry>
+  <entry key="40">Результат:</entry>
+  <entry key="41">В настоящее время опроса не существует.</entry>
+  <entry key="42">Проголосовать!</entry>
+  <entry key="43">Совещание (макс. 4 места)</entry>
+  <entry key="44">Конференция (макс. 50 мест)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Оставшиеся места</entry>
+  <entry key="47">Уже присвоено</entry>
+  <entry key="48">Вхождения</entry>
+  <entry key="49">Модератор/лектор этой комнаты покидает совещание.</entry>
+  <entry key="50">Системное сообщение</entry>
+  <entry key="51">Выбор устройства</entry>
+  <entry key="52">Выбрать камеру:</entry>
+  <entry key="53">Выбрать микрофон:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Отменить</entry>
+  <entry key="56">Чтобы активировать изменения, войдите заново</entry>
+  <entry key="57">Изменить установки</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Язык курса:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Отменить</entry>
+  <entry key="62">Очистить доску</entry>
+  <entry key="63">Очистить доску перед добавлением нового изображения</entry>
+  <entry key="64">Больше не спрашивать</entry>
+  <entry key="65">нет</entry>
+  <entry key="66">Редактировать установки</entry>
+  <entry key="67">Запросить подтверждение перед очисткой доски</entry>
+  <entry key="68">Информация о пользователе</entry>
+  <entry key="69">Очистить область рисования</entry>
+  <entry key="70">Отмена</entry>
+  <entry key="71">Восстановление</entry>
+  <entry key="72">Выбрать объект</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Рисование</entry>
+  <entry key="75">Провести линию</entry>
+  <entry key="76">Подчеркнуть</entry>
+  <entry key="77">Прямоугольник</entry>
+  <entry key="78">Эллипс</entry>
+  <entry key="79">Стрелка</entry>
+  <entry key="80">Удалить выбранный элемент</entry>
+  <entry key="81">Запрос функции модератора</entry>
+  <entry key="82">Запрос</entry>
+  <entry key="83">Отменить</entry>
+  <entry key="84">Запросить ф-ции модератора</entry>
+  <entry key="85">Закрыть</entry>
+  <entry key="86">Курсив</entry>
+  <entry key="87">Жирный шрифт</entry>
+  <entry key="88">Ожидание</entry>
+  <entry key="89">Участник желает запросить функцию модератора:</entry>
+  <entry key="90">Согласие</entry>
+  <entry key="91">Отклонение</entry>
+  <entry key="92">Отменить</entry>
+  <entry key="93">Отсылка запроса следующему участнику</entry>
+  <entry key="94">Выдано согласие</entry>
+  <entry key="95">Отклонено</entry>
+  <entry key="96">Замена модератора</entry>
+  <entry key="97">Вы не являетесь модератором данного курса!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">В этой комнате нет мест. Извините, попробуйте еще раз через некоторое время.</entry>
+  <entry key="100">Эллипс</entry>
+  <entry key="101">Закрыть</entry>
+  <entry key="102">Ошибка при вводе</entry>
+  <entry key="103">Имя пользователя должно состоять минимум из 4 знаков</entry>
+  <entry key="104">Пароль должен состоять минимум из 4 знаков</entry>
+  <entry key="105">Это имя пользователя уже занято</entry>
+  <entry key="106">Электронный адрес уже зарегистрирован</entry>
+  <entry key="107">Выдается ошибка, просьба связаться с административной группой</entry>
+  <entry key="108">Вход</entry>
+  <entry key="109">Пользователь:</entry>
+  <entry key="110">Пароль:</entry>
+  <entry key="111">Язык</entry>
+  <entry key="112">Войти</entry>
+  <entry key="113">Подписка</entry>
+  <entry key="114">Пользователь:</entry>
+  <entry key="115">Пароль:</entry>
+  <entry key="116">Повторить:</entry>
+  <entry key="117">Имя:</entry>
+  <entry key="118">Фамилия:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Страна:</entry>
+  <entry key="121">Регистрировать</entry>
+  <entry key="122">Отменить</entry>
+  <entry key="123">Регистрация</entry>
+  <entry key="124">На главную</entry>
+  <entry key="125">Пользователи</entry>
+  <entry key="126">Группы</entry>
+  <entry key="127">Организации</entry>
+  <entry key="128">Комнаты совещаний</entry>
+  <entry key="129">Публично</entry>
+  <entry key="130">Организация</entry>
+  <entry key="131">Вход</entry>
+  <entry key="132">Логин</entry>
+  <entry key="133">Пароль</entry>
+  <entry key="134">Повторить</entry>
+  <entry key="135">Имя</entry>
+  <entry key="136">Фамилия</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Дата рождения</entry>
+  <entry key="139">Улица/№ дома</entry>
+  <entry key="140">Индекс/город</entry>
+  <entry key="141">Страна</entry>
+  <entry key="142">Информация</entry>
+  <entry key="143">Данные пользователя</entry>
+  <entry key="144">Сохранить</entry>
+  <entry key="145">Процесс сохранения</entry>
+  <entry key="146">Идент. № пользователя</entry>
+  <entry key="147">Логин</entry>
+  <entry key="148">Имя</entry>
+  <entry key="149">Фамилия</entry>
+  <entry key="150">вперед</entry>
+  <entry key="151">назад</entry>
+  <entry key="152">Удалить запись</entry>
+  <entry key="153">Отменить</entry>
+  <entry key="154">Удалить</entry>
+  <entry key="155">Создать запись</entry>
+  <entry key="156">Заново загрузить запись</entry>
+  <entry key="157">Удалить запись</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">заблокировано</entry>
+  <entry key="160">активно</entry>
+  <entry key="161">Организации</entry>
+  <entry key="162">Календарь</entry>
+  <entry key="163">Закрыть</entry>
+  <entry key="164">Идент. № орг-ии</entry>
+  <entry key="165">Имя</entry>
+  <entry key="166">Пользователь</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Администратор</entry>
+  <entry key="169">Роль пользов-ля</entry>
+  <entry key="170">Организация</entry>
+  <entry key="171">Имя</entry>
+  <entry key="172">Добавить организацию</entry>
+  <entry key="173">Добавить организацию</entry>
+  <entry key="174">Отменить</entry>
+  <entry key="175">Добавить</entry>
+  <entry key="176">Удалить организацию</entry>
+  <entry key="177">Пользователь</entry>
+  <entry key="178">Добавить пользователя</entry>
+  <entry key="179">Удалить пользователя</entry>
+  <entry key="180">Добавить пользователя</entry>
+  <entry key="181">Поиск пользоват-я</entry>
+  <entry key="182">Искать</entry>
+  <entry key="183">Пользователь</entry>
+  <entry key="184">Организация</entry>
+  <entry key="185">Выбрать</entry>
+  <entry key="186">Комнаты совещаний</entry>
+  <entry key="187">Комнаты совещаний</entry>
+  <entry key="188">Идент. №</entry>
+  <entry key="189">Имя</entry>
+  <entry key="190">Публичная комната</entry>
+  <entry key="191">Организации</entry>
+  <entry key="192">Комнаты совещаний</entry>
+  <entry key="193">Имя</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">публично</entry>
+  <entry key="196">Комментарий</entry>
+  <entry key="197">Сохранить</entry>
+  <entry key="198">Открыть</entry>
+  <entry key="199">Сохранить как</entry>
+  <entry key="200">Имя файла</entry>
+  <entry key="201">Имя файла</entry>
+  <entry key="202">Отменить</entry>
+  <entry key="203">Сохранить</entry>
+  <entry key="204">Ошибка</entry>
+  <entry key="205">Загрузить</entry>
+  <entry key="206">Объект загружен</entry>
+  <entry key="207">Синхронизация клиентов. Оставшиеся клиенты:</entry>
+  <entry key="208">Загрузка графических данных</entry>
+  <entry key="209">Синхронизация клиентов. Оставшиеся клиенты:</entry>
+  <entry key="210">Очистить область рисования</entry>
+  <entry key="211">Очистить область рисования, при этом все изменения будут утеряны!</entry>
+  <entry key="212">Перед загрузкой файла запросить подтверждение</entry>
+  <entry key="213">Отправить приглашение</entry>
+  <entry key="214">Отправить приглашение</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Адрес получателя</entry>
+  <entry key="217">Сообщение</entry>
+  <entry key="218">Отправить</entry>
+  <entry key="219">Отменить</entry>
+  <entry key="220">Отправить</entry>
+  <entry key="221">Данные пользователя</entry>
+  <entry key="222">Ник для данной конференции</entry>
+  <entry key="223">Ник/псевдоним</entry>
+  <entry key="224">Имя</entry>
+  <entry key="225">Фамилия</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Язык</entry>
+  <entry key="228">Отправить</entry>
+  <entry key="229">Загружается...</entry>
+  <entry key="230">Даные загружаются, подождите!</entry>
+  <entry key="231">Неверный пароль</entry>
+  <entry key="232">Пожалуйста, введите два раза один и тот же пароль длиной не менее 6 символов</entry>
+  <entry key="233">Неверный E-Mail</entry>
+  <entry key="234">Вы ввели неверный E-Mail</entry>
+  <entry key="235">Регистрация завершена</entry>
+  <entry key="236">Ваш аккаунт создан. Теперь вы можете войти под своим именем.</entry>
+  <entry key="237">Сейчас вы не можете сделать ваш экран общим. Сейчас другой пользователь сделал свой экран общим.</entry>
+  <entry key="238">Запрещено делать ваш экран общим</entry>
+  <entry key="239">Сделать экран общим</entry>
+  <entry key="240">Неверная ширина канала: невозможно синхронизовать экран. Некоторые кадры будут пропущены. Если это сообщение появляется слишком часто, Вы можете попросить модератора ухудшить качество соединения.</entry>
+  <entry key="241">Экран пользователя:</entry>
+  <entry key="242">Рисование</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файл</entry>
+  <entry key="246">Юзеры</entry>
+  <entry key="247">Загрузить первоначальный документ</entry>
+  <entry key="248">Загрузить документ pdf</entry>
+  <entry key="249">Поместить документ на доску</entry>
+  <entry key="250">Конфигурация</entry>
+  <entry key="251">Перетащить этот объект</entry>
+  <entry key="252">Изменить размеры объекта</entry>
+  <entry key="253">%</entry>
+  <entry key="254">из</entry>
+  <entry key="255">На первую страницу</entry>
+  <entry key="256">На предыдущую страницу</entry>
+  <entry key="257">На следующую страницу</entry>
+  <entry key="258">На последнюю страницу</entry>
+  <entry key="259">Уменьшение</entry>
+  <entry key="260">Увеличение</entry>
+  <entry key="261">Г-н</entry>
+  <entry key="262">Г-жа</entry>
+  <entry key="263">Конфигурация</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Конфигурация</entry>
+  <entry key="267">Ключ:</entry>
+  <entry key="268">Дата обновления</entry>
+  <entry key="269">Обновлено:</entry>
+  <entry key="270">Описание:</entry>
+  <entry key="271">Значение:</entry>
+  <entry key="272">из</entry>
+  <entry key="273">Пользователи</entry>
+  <entry key="274">Удалить пользователя из организации</entry>
+  <entry key="275">Удалить</entry>
+  <entry key="276">Этот пользователь уже входит в эту организацию.</entry>
+  <entry key="277">Новости</entry>
+  <entry key="278">Быстрый переход</entry>
+  <entry key="279">Перейти к совещанию</entry>
+  <entry key="280">Перейти к лекции</entry>
+  <entry key="281">Помощь и поддержка</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Ошибка?</entry>
+  <entry key="285">еще</entry>
+  <entry key="286">Вебсайт проекта (http://openmeetings.apache.org)</entry>
+  <entry key="287">Список электронных адресов пользователей (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запомнить вход в систему</entry>
+  <entry key="289">Контент</entry>
+  <entry key="290">Моя домашняя страница</entry>
+  <entry key="291">Мои совещания</entry>
+  <entry key="292">Мои запланированные лекции</entry>
+  <entry key="293">Публичные совещания</entry>
+  <entry key="294">Личные совещания</entry>
+  <entry key="295">Публичные лекции</entry>
+  <entry key="296">Личные лекции</entry>
+  <entry key="297">Публичный контент</entry>
+  <entry key="298">Приватный контент</entry>
+  <entry key="299">Персональный контент</entry>
+  <entry key="300"></entry>
+  <entry key="301">Модерация</entry>
+  <entry key="302">Запросить ф-ции модера</entry>
+  <entry key="303">Опросы</entry>
+  <entry key="304">Выбор файла</entry>
+  <entry key="305">Установки</entry>
+  <entry key="306">Установки камеры и микрофона</entry>
+  <entry key="307">Установки доски</entry>
+  <entry key="308">Выход</entry>
+  <entry key="309">Выход (к комнатам)</entry>
+  <entry key="310">Выход</entry>
+  <entry key="311">Забыли пароль?</entry>
+  <entry key="312">Восстановление пароля</entry>
+  <entry key="313">По e-mail</entry>
+  <entry key="314">По имени пользователя</entry>
+  <entry key="315">Ваша почта</entry>
+  <entry key="316">Ваш логин</entry>
+  <entry key="317">Послать линк на e-mail</entry>
+  <entry key="318">Такой e-mail не найден. Убедитесь, что вы ввели верный e-mail</entry>
+  <entry key="319">Введите e-mail или имя пользователя</entry>
+  <entry key="320">Никто больше не подключился с таким именем пользователя</entry>
+  <entry key="321">Письмо, содержащее специальную ссылку, выслано на ваш e-mail, пожалуйста, проверьте ваш почтовый ящик. Если вы все еще не получили письмо, проверьте анти-спам фильтры и пошлите еще раз подтверждающее письмо.</entry>
+  <entry key="322">Информация</entry>
+  <entry key="323">Сообщение</entry>
+  <entry key="324">Неверный хэш. Пользователь не найден.</entry>
+  <entry key="325">Переустановить ваш пароль</entry>
+  <entry key="326">Логин</entry>
+  <entry key="327">изменить пароль</entry>
+  <entry key="328">новый пароль</entry>
+  <entry key="329">повторите пароль</entry>
+  <entry key="330">Вы ввели неидентичные пароли.</entry>
+  <entry key="331">4 или более знаков. Регистр имеет значение!</entry>
+  <entry key="332">Пароль установлен. Теперь можно логиниться.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Неизвестная ошибка. Пожалуйста, сообщите в вашу сервисную службу.</entry>
+  <entry key="335">Имя пользователя не найдено</entry>
+  <entry key="336">Неверный пароль</entry>
+  <entry key="337">Вы успешно вышли</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">Неверный e-mail</entry>
+  <entry key="340">неуникальное имя файла, выберите другое имя файла</entry>
+  <entry key="341">слишком короткое имя файла</entry>
+  <entry key="342">Не могу сохранить Адрес</entry>
+  <entry key="343">Пользователь добавлен, но нужно назначить этому пользователю организацию, иначе он не сможет войти.</entry>
+  <entry key="344">Новая запись</entry>
+  <entry key="345">Поле с таким ID не найдено.</entry>
+  <entry key="346">Метка для этого поля не найдена.</entry>
+  <entry key="347">Требуется авторизация администратора</entry>
+  <entry key="348">Редактор языков</entry>
+  <entry key="349">Язык</entry>
+  <entry key="350">ID метки</entry>
+  <entry key="351">Имя метки</entry>
+  <entry key="352">Значение</entry>
+  <entry key="353">Значения полей</entry>
+  <entry key="354">Имя метки</entry>
+  <entry key="355">Значение метки</entry>
+  <entry key="356">ID метки</entry>
+  <entry key="357">Вы можете лишь удалить метку, но не само поле! Нельзя удалить поле, у него могут быть метки на других языках.</entry>
+  <entry key="358">Неверный ID метки. Невозможно найти FieldLanguagesvalues_Id в базе данных.</entry>
+  <entry key="359">Нельзя удалить это поле! Можно лишь удалить метку, но не само поле Метка сейчас не загружена. Либо не выбрано ни одно поле, либо не определена метка на этом языке (для этого поля)</entry>
+  <entry key="360">Экспорт</entry>
+  <entry key="361">Вам нужно выйти, чтобы увидеть изменения.</entry>
+  <entry key="362">Добавить новый язык</entry>
+  <entry key="363">удалить язык</entry>
+  <entry key="364">Добавить новый язык</entry>
+  <entry key="365">Имя</entry>
+  <entry key="366">добавить язык</entry>
+  <entry key="367">Резервное копирование</entry>
+  <entry key="368">к первому</entry>
+  <entry key="369">к предыдущему</entry>
+  <entry key="370">к следующему</entry>
+  <entry key="371">к последнему</entry>
+  <entry key="372">Участник говорит (Нажимая здесь Вы предоставляете этому участнику эксклюзивный микрофон / выключая микрофоны остальных участников)</entry>
+  <entry key="373">Включить/выключить звук</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Ваши установки</entry>
+  <entry key="376">Привет,</entry>
+  <entry key="377">Ваш профиль</entry>
+  <entry key="378">Новые сообщения:</entry>
+  <entry key="379">Изображение</entry>
+  <entry key="380">Экспорт пользовательских данных</entry>
+  <entry key="381">Организации уже должны существовать!</entry>
+  <entry key="382">начать экспорт</entry>
+  <entry key="383">По организации</entry>
+  <entry key="384">начать экспорт</entry>
+  <entry key="385">Польз. данные - импорт</entry>
+  <entry key="386">выбрать users.xml</entry>
+  <entry key="387">Импорт</entry>
+  <entry key="388">Экспорт в XML - эти файлы можно использовать для: - Внесения в проект - Импорта в другую систему - Резервного копирования - Кастомизации - Помещения в директорию "language" при следующей инсталляции</entry>
+  <entry key="389">Выберите файл языка для импорта. Выберите язык в выпадающем списке. Неважно, какое имя у этого файла, он будет импортирован в этот язык!</entry>
+  <entry key="390">импорт - выберите файл</entry>
+  <entry key="391">Сохранить как</entry>
+  <entry key="392">Имя:</entry>
+  <entry key="393">Описание:</entry>
+  <entry key="394">сохранить</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Просмотр записей</entry>
+  <entry key="397">Записи публичных и приватных комнат</entry>
+  <entry key="398">Участники :</entry>
+  <entry key="399">Присоединившиеся:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Участники в этой комнате:</entry>
+  <entry key="402">обновить</entry>
+  <entry key="403">Эта комната полна. Попробуйте через несколько минут.</entry>
+  <entry key="404">Нажмите на комнату для деталей</entry>
+  <entry key="405">Чат с пользователями этой комнаты:</entry>
+  <entry key="406">Комната:</entry>
+  <entry key="407">Участники в этой комнате:</entry>
+  <entry key="408">с:</entry>
+  <entry key="409">проиграть записи</entry>
+  <entry key="410">Длина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим воспроизведения! Вы не можете менять параметры.</entry>
+  <entry key="413">Проиграть эту запись</entry>
+  <entry key="414">Играть / Пауза</entry>
+  <entry key="415">Начать запись</entry>
+  <entry key="416">остановить запись</entry>
+  <entry key="417">Запись:</entry>
+  <entry key="418">Кто-то уже записывает в данный момент:</entry>
+  <entry key="419">Идет запись! Участник:</entry>
+  <entry key="420">отмена</entry>
+  <entry key="421">Запись будет отменена и не будет записана.</entry>
+  <entry key="422">продолжить</entry>
+  <entry key="423">Закрыть окно и продолжить запись</entry>
+  <entry key="424">изменить цвет линий</entry>
+  <entry key="425">Выбор цвета</entry>
+  <entry key="426">Запретить/разрешить цвет линий</entry>
+  <entry key="427">изменить цвет заливки</entry>
+  <entry key="428">Запретить/разрешить заливки</entry>
+  <entry key="429">Изменить ширину линий</entry>
+  <entry key="430">закрыть</entry>
+  <entry key="431">изменить размер шрифта</entry>
+  <entry key="432">Удалить запись</entry>
+  <entry key="433">Гость</entry>
+  <entry key="434">По:</entry>
+  <entry key="435">Имя</entry>
+  <entry key="436">Комната</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">отменить</entry>
+  <entry key="439">старт</entry>
+  <entry key="440">Имя</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Удалить лог чата на сервере</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">послать сообщение</entry>
+  <entry key="445">Иконки эмоций</entry>
+  <entry key="446">Иконки эмоций</entry>
+  <entry key="447">Изменить публичные устройства</entry>
+  <entry key="448">Аудио и видео</entry>
+  <entry key="449">Только аудио</entry>
+  <entry key="450">Только видео</entry>
+  <entry key="451">без аудио и видео (статическое изобр.)</entry>
+  <entry key="452">Аудио/видео с вашего компьютера не будет опубликовано, опубликована будет только картинка из вашего профиля. Выберите эту установку, если вы испытываете проблемы с шириной канала или если у вас медленное соединение с Интернетом</entry>
+  <entry key="453">ПН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧТ</entry>
+  <entry key="457">ПТ</entry>
+  <entry key="458">СБ</entry>
+  <entry key="459">ВС</entry>
+  <entry key="460">Понедельник</entry>
+  <entry key="461">Вторник</entry>
+  <entry key="462">Среда</entry>
+  <entry key="463">Четверг</entry>
+  <entry key="464">Пятница</entry>
+  <entry key="465">Суббота</entry>
+  <entry key="466">Воскресенье</entry>
+  <entry key="467">КН</entry>
+  <entry key="468">Календарная неделя</entry>
+  <entry key="469">Январь</entry>
+  <entry key="470">Февраль</entry>
+  <entry key="471">Март</entry>
+  <entry key="472">Апрель</entry>
+  <entry key="473">Май</entry>
+  <entry key="474">Июнь</entry>
+  <entry key="475">Июль</entry>
+  <entry key="476">Август</entry>
+  <entry key="477">Сентябрь</entry>
+  <entry key="478">Октябрь</entry>
+  <entry key="479">Ноябрь</entry>
+  <entry key="480">Декабрь</entry>
+  <entry key="481">Календарь</entry>
+  <entry key="482">Участники</entry>
+  <entry key="483">Показать установки Layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Высота</entry>
+  <entry key="486">Видео-контейнер</entry>
+  <entry key="487">Модерация-контейнер</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Доска-контейнер</entry>
+  <entry key="490">Разрешено</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Высота</entry>
+  <entry key="493">файлы,чат,участники - контейнер</entry>
+  <entry key="494">Разрешено</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ширина | Высота</entry>
+  <entry key="497">Модератор покидает комнату. Сейчас нет модераторов. Вы можете запросить функции модератора, либо подождать.</entry>
+  <entry key="498">В этой комнате нет модератора, но есть участники. Вы можете запросить функции модератора или подождать</entry>
+  <entry key="499">Обратная связь {0}</entry>
+  <entry key="500">{0}: Приглашение</entry>
+  <entry key="501">Сообщение от участника:</entry>
+  <entry key="502">Текст сообщения:</entry>
+  <entry key="503">Для того, чтобы принять участие в совещании, нажмите на следую ссылку:</entry>
+  <entry key="504">Нажмите здесь для того, чтобы войти в комнату совещаний</entry>
+  <entry key="505">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="506">{0} регистрация</entry>
+  <entry key="507">Ваши пользовательские данные:</entry>
+  <entry key="508">Логин:</entry>
+  <entry key="509">Пароль:</entry>
+  <entry key="510">e-mail:</entry>
+  <entry key="511">{0}-Команда</entry>
+  <entry key="512">Регистрация в {0}</entry>
+  <entry key="513">{0}: Переустановить пароль</entry>
+  <entry key="514">Кликните на этот линк и введите новый пароль:</entry>
+  <entry key="515">Кликните здесь, и введите новый пароль</entry>
+  <entry key="516">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="517">Переустановка пароля {0}</entry>
+  <entry key="518">Пожалуйста, введите дату, например 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Пожалуйста, введите e-mail, например name@mail.com</entry>
+  <entry key="520">Пожалуйста, введите вещественное число, например 1.00</entry>
+  <entry key="521">Пожалуйста, введите целое число, например 100</entry>
+  <entry key="522">Пожалуйста, введите телефонный номер, например ++49 0123 123123</entry>
+  <entry key="523">Пожалуйста, введите время, например 12:23 (hh:mm)</entry>
+  <entry key="524">Защитить паролем</entry>
+  <entry key="525">Пароль</entry>
+  <entry key="526">Период действия</entry>
+  <entry key="527">Бесконечно</entry>
+  <entry key="528">Период</entry>
+  <entry key="529">Однократно</entry>
+  <entry key="530">Действует от:</entry>
+  <entry key="531">Действует до:</entry>
+  <entry key="532">Приглашение в {0}</entry>
+  <entry key="533">Для этого кода приглашения нет доступных приглашений</entry>
+  <entry key="534">Это приглашение уже использовано. Приглашение этого типа не может быть переиспользовано.</entry>
+  <entry key="535">Этот код приглашения недействителен.</entry>
+  <entry key="536">Пароль:</entry>
+  <entry key="537">Проверить пароль</entry>
+  <entry key="538">Неверный пароль!</entry>
+  <entry key="539">Браузер</entry>
+  <entry key="540">Синхронизовать аудио/видео</entry>
+  <entry key="541">Корректный логин, но эта сессия неактивна или не записана на сервере. Вам нужно получит новый ID сессии и перелогиниться</entry>
+  <entry key="542">SessionId не залогинен или не имеет прав администратора. Чтобы встраивать новых пользователей, SOAP Gateway'ю нужен пользователь с правами администратора.</entry>
+  <entry key="543">У этой сессии нет connected Remoteuser-Data. Либо вы не вызвали SOAP-Gateway перед доступом к приложению, либо используете неверный ID сессии.</entry>
+  <entry key="544">У этого рекордера - Beta-версия</entry>
+  <entry key="545">x</entry>
+  <entry key="546">ось x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">ось y</entry>
+  <entry key="549">w</entry>
+  <entry key="550">ширина</entry>
+  <entry key="551">h</entry>
+  <entry key="552">высота</entry>
+  <entry key="553">Изменить прозрачность</entry>
+  <entry key="554">Браузер открыть</entry>
+  <entry key="555">Браузер закрыть</entry>
+  <entry key="556">Потеряно соединение с сервером. Загрузите заново приложение, либо проверьте вашу сеть.</entry>
+  <entry key="557">Указатель</entry>
+  <entry key="558">Синхронизация</entry>
+  <entry key="559">Синхронизация участников, подождите</entry>
+  <entry key="560"></entry>
+  <entry key="561"></entry>
+  <entry key="562"></entry>
+  <entry key="563"></entry>
+  <entry key="564"></entry>
+  <entry key="565">Напоминатель:</entry>
+  <entry key="566">Категория:</entry>
+  <entry key="567">Повторение:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Место:</entry>
+  <entry key="570">Начало</entry>
+  <entry key="571">Конец</entry>
+  <entry key="572">Название</entry>
+  <entry key="573">Комментарий</entry>
+  <entry key="574">Приглашения</entry>
+  <entry key="575">Ежедневно</entry>
+  <entry key="576">Ежемесячно</entry>
+  <entry key="577">Ежегодно</entry>
+  <entry key="578">Конец совещания после начала совещания!</entry>
+  <entry key="579">Пожалуйста, вставьте заголовок!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Активируйте это, если на вашем языке пишут справа налево</entry>
+  <entry key="582">информационная панель</entry>
+  <entry key="583">Посмотреть записанные совещания и лекции</entry>
+  <entry key="584">Совещание - проведите конференцию с 4 участниками (число участников может доходить до 16)у каждого будет аудио/видео</entry>
+  <entry key="585">Лекция - проведите конференцию с участниками, число которых – до 200. Аудио/видео будет только у модератора</entry>
+  <entry key="586">Создание пользователей, комнат, организаций + изменить конфигурацию</entry>
+  <entry key="587">Сейчас участников в этой комнате</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Логин</entry>
+  <entry key="590">x</entry>
+  <entry key="591">Загрузка документа. Подождите, пока клиент синхронизируется.</entry>
+  <entry key="592">Загружено, конвертация документа</entry>
+  <entry key="593">Начать</entry>
+  <entry key="594">Импорт файла. Выберите файл на вашем компьютере.</entry>
+  <entry key="595">Отмена</entry>
+  <entry key="596">Выбрать файл</entry>
+  <entry key="597">Соединения</entry>
+  <entry key="598">Значение</entry>
+  <entry key="599">ID потока</entry>
+  <entry key="600">Логин</entry>
+  <entry key="601">Соединено с</entry>
+  <entry key="602">Комната/Кол-во</entry>
+  <entry key="603">Отключить</entry>
+  <entry key="604">Отключить</entry>
+  <entry key="605">Вы действительно хотите отключит этого клиента? Клиент может залогиниться вновь</entry>
+  <entry key="606">Ваша сессия завершена администратором или модератором.</entry>
+  <entry key="607">Телефон</entry>
+  <entry key="608">Этот пользователь - модератор в этой комнате</entry>
+  <entry key="609">Участнику разрешено рисовать на доске</entry>
+  <entry key="610">(Ре)старт аудио/видео или изменение установок устройства</entry>
+  <entry key="611">Разрешить этому участнику рисовать на доске</entry>
+  <entry key="612">Запретить рисовать на доске</entry>
+  <entry key="613">Участники</entry>
+  <entry key="614">Документы</entry>
+  <entry key="615">Доска</entry>
+  <entry key="616">Чат</entry>
+  <entry key="617">Вашей учетной записи соответствует несколько организаций. Пожалуйста, выберите одну организацию для данной сессии.</entry>
+  <entry key="618">Эта комната заполнена. Попробуйте попозже.</entry>
+  <entry key="619">Тип комнаты</entry>
+  <entry key="620">Комната назначений</entry>
+  <entry key="621">Время сервера</entry>
+  <entry key="622">{0}: Напоминание</entry>
+  <entry key="623">Сообщение от пользователя:</entry>
+  <entry key="624">Текст сообщения:</entry>
+  <entry key="625">Для того, чтобы принять участие в совещании, кликните на ссылку:</entry>
+  <entry key="626">Нажмите здесь для того, чтобы войти в комнату совещаний</entry>
+  <entry key="627">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="628">имеющиеся пользователи</entry>
+  <entry key="629">пригласить других</entry>
+  <entry key="630">Имя</entry>
+  <entry key="631">Фамилия</entry>
+  <entry key="632">e-mail</entry>
+  <entry key="633">Подтверждение выхода</entry>
+  <entry key="634">Вы уверены, что хотите выйти?</entry>
+  <entry key="635">Действия</entry>
+  <entry key="636">Демо комната</entry>
+  <entry key="637">Время демонстрации</entry>
+  <entry key="638">Таймер совещания</entry>
+  <entry key="639">Это - демо комната. Чтобы отключить это сообщение, либо создайте личную комнату, либо установите собственный сервер. Вы автоматически будете отключены от комнаты через:</entry>
+  <entry key="640">Модерируется</entry>
+  <entry key="641">Подождите, пока модератор зайдёт в комнату. Модератором может быть лектор, администратор, либо создатель этой комнаты.</entry>
+  <entry key="642">ОК</entry>
+  <entry key="643">Другой участник делает экран общим</entry>
+  <entry key="644">Участник делает экран общим:</entry>
+  <entry key="645">Сделать экран общим</entry>
+  <entry key="646">Добавить новое совещание</entry>
+  <entry key="647">Комната совещаний</entry>
+  <entry key="648">Комната лекций</entry>
+  <entry key="649">Модерация</entry>
+  <entry key="650">Модерировать участников</entry>
+  <entry key="651">Модерировать комнаты</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Хотите сделать этого пользователя модератором этой организации?</entry>
+  <entry key="654">Выберите организации перед тем, как добавлять в неё пользователей</entry>
+  <entry key="655">Модератор организации</entry>
+  <entry key="656">Вы действительно хотите удалить пользователя из этой организации</entry>
+  <entry key="657">Этот пользователь - модератор</entry>
+  <entry key="658">Этот пользователь - не модератор</entry>
+  <entry key="659">Хотите, чтобы пользователь не был модератором в этой организации?</entry>
+  <entry key="660">Добавление или удаление польз-ля/комнаты, относящихся к вашейорганизации</entry>
+  <entry key="661">Вы действительно хотите удалить эту запись?</entry>
+  <entry key="662">Вы действительно хотите удалить этого польз-ля из вашей организации? В этом случае вы лишь удалите пользователем из организации, а для полного удаления пользователя нужно зайти на панель администрирования.</entry>
+  <entry key="663">Вы не можете удалить себя</entry>
+  <entry key="664">Этот метод можно вызвать, только используя аккаунт администратора.</entry>
+  <entry key="665">Не было сессии, ассоциирующийся с этим ID.</entry>
+  <entry key="666">Это - аккаунт администратора или модератора. Вы можете редактировать его только через панель адмиинистрирования.</entry>
+  <entry key="667">Для завершения регистрации кликните на эту ссылку или скопируйте URL в окно браузера.</entry>
+  <entry key="668">Нажмите для проверки вашего e-mail.</entry>
+  <entry key="669">Для этого Хеша не найдено пользователей.</entry>
+  <entry key="670">Этот пользователь уже активирован!</entry>
+  <entry key="671">Вы успешно активировали ваш аккаунт</entry>
+  <entry key="672">Входите сейчас</entry>
+  <entry key="673">Ваш аккаунт не активирован. Сначала перейдите по ссылке, полученной в письме, которое вы получили при регистрации.</entry>
+  <entry key="674">Вы успешно зарегистрировались. Вам отправлено письмо с кодом проверки. Проверьте вашу почту.</entry>
+  <entry key="675">Снять роль модератора у этого пользователя</entry>
+  <entry key="676">Дать пользователю права модерации</entry>
+  <entry key="677">Пользователь</entry>
+  <entry key="678">Доступ к доске</entry>
+  <entry key="679">Модератор</entry>
+  <entry key="680">Модерация: Выберите поль-ля из списка для того, чтобы дать ему доступ к доске, модерации или видео.</entry>
+  <entry key="681">Этот пользователь уже модератор, поэтому он автоматически имеет право рисовать.</entry>
+  <entry key="682">Это вы! Вы не можете удалить права модерации у себя.</entry>
+  <entry key="683">Разрешить этому пользователю публиковать своё Аудио/Видео</entry>
+  <entry key="684">Удалить Аудио/Видео этого пользователя</entry>
+  <entry key="685">Я хочу получить права модерации в этой комнате</entry>
+  <entry key="686">Я хочу рисовать на доске</entry>
+  <entry key="687">Я хочу сделать моё Аудио/Видео общим</entry>
+  <entry key="688">Вы - модератор в этой комнате</entry>
+  <entry key="689">Вам разрешено рисовать на доске</entry>
+  <entry key="690">Вам разрешено сделать ваше Аудио/Видео общим</entry>
+  <entry key="691">Сообщение модератору</entry>
+  <entry key="692">Пользователь</entry>
+  <entry key="693">желает стать модератором. Для того, чтобы разрешить или запретить функцию модерации, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="694">желает рисовать на доске. Для того, чтобы разрешить или запретить рисовать на доске, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="695">желает сделать своё Аудио/Видео общим. Для того, чтобы разрешить или запретить участникам делать Аудио/Видео общим, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="696">Нужно подождать, пока модератор войдёт в комнату.</entry>
+  <entry key="697">Отменить</entry>
+  <entry key="698">Сохранить</entry>
+  <entry key="699">День</entry>
+  <entry key="700">Месяц</entry>
+  <entry key="701">Год</entry>
+  <entry key="702">Загрузить файл</entry>
+  <entry key="703">Добавить папку</entry>
+  <entry key="704">Обновить</entry>
+  <entry key="705">Корзина</entry>
+  <entry key="706">Мои файлы (Локальное устройство)</entry>
+  <entry key="707">Файлы из комнаты (Общее устройство)</entry>
+  <entry key="708">Добавить файл</entry>
+  <entry key="709">Добавить папку</entry>
+  <entry key="710">Удалить папку</entry>
+  <entry key="711">Редактировать имя</entry>
+  <entry key="712">Новая папка</entry>
+  <entry key="713">Вы уверены, что хотите удалить этот пункт?</entry>
+  <entry key="714">Поиск</entry>
+  <entry key="715">Поиск</entry>
+  <entry key="716">Открыть документ</entry>
+  <entry key="717">Показать все файлы (в виде дерева)</entry>
+  <entry key="718">Закрыть документ</entry>
+  <entry key="719">Удалить файл</entry>
+  <entry key="720">Вы не можете рисовать на доске. Вам нужно либо стать модератором, либо получить от модератора право на рисование. Вы можете попросить модератора предоставить вам такое право.</entry>
+  <entry key="721">Свойства документа</entry>
+  <entry key="722">Запустить клиент (внешний)</entry>
+  <entry key="723">Запустить клиент (HTTP)</entry>
+  <entry key="724">Пользователь хочет сделать свой экран общим. Хотите увидеть его экран?</entry>
+  <entry key="725">В данный момент вы публикуете ваш экран. Чтобы прекратить публикацию, нажмите кнопку "Stop" клиента</entry>
+  <entry key="726">Сессия публикации экрана</entry>
+  <entry key="727">Вы уже опубликовали ваш экран</entry>
+  <entry key="728">Просмотрщик рабочего стола</entry>
+  <entry key="729">Выйти</entry>
+  <entry key="730">Публикатор экрана</entry>
+  <entry key="731">Нажмите, чтобы открыть общий доступ к вашему экрану</entry>
+  <entry key="732">Открыть доступ</entry>
+  <entry key="733">Приостановить доступ</entry>
+  <entry key="734">Выберите область экрана</entry>
+  <entry key="735">Изменить ширину</entry>
+  <entry key="736">Участник закончил публиковать свой рабочий стол</entry>
+  <entry key="737">Изменить высоту</entry>
+  <entry key="738">Смещение X</entry>
+  <entry key="739">Смещение Y</entry>
+  <entry key="740">Ширина:</entry>
+  <entry key="741">Высота:</entry>
+  <entry key="742">Соединение завершено сервером</entry>
+  <entry key="743">Отмена</entry>
+  <entry key="744">Запустить внешний</entry>
+  <entry key="745">Полностью закрыв сессию, вы не сможете больше перезапустить просмотрщик для неё</entry>
+  <entry key="746">Подтвердите закрытие сессии просмотрщика</entry>
+  <entry key="747">Сделать экран общим</entry>
+  <entry key="748">Сессия записи</entry>
+  <entry key="749">Совместный просмотр</entry>
+  <entry key="750">К сожалению, Firefox на ОС Windows не поддерживает совместный просмотр. Используйте другой браузер.</entry>
+  <entry key="751">Предыдущая</entry>
+  <entry key="752">Следующая</entry>
+  <entry key="753">Перегрузить</entry>
+  <entry key="754">Домашняя страница</entry>
+  <entry key="755">Загрузить</entry>
+  <entry key="756">Добавить в ваш профиль эту веб-страницу как страницу по умолчанию</entry>
+  <entry key="757">Настройки теста</entry>
+  <entry key="758">Проверьте установки микрофона и камеры перед тем, как войти в комнату. Запишите 5-секундное тестовое видео. После записи можно проиграть видео и проверить качество картинки и звука.</entry>
+  <entry key="759">Больше не показывать этот текст</entry>
+  <entry key="760">Отмена</entry>
+  <entry key="761">К конференции</entry>
+  <entry key="762">Больше не спрашивать</entry>
+  <entry key="763">ЗАПИСЬ</entry>
+  <entry key="764">ПРОИГРАТЬ</entry>
+  <entry key="765">Можно продолжить без тестирования, если не планируете публиковать ваш голос и видео. Участники без аудио и видео могут использовать доску, публиковать свой экран, а также участвовать в чате.</entry>
+  <entry key="766">СТОП</entry>
+  <entry key="767">Уровень звука</entry>
+  <entry key="768">Старт</entry>
+  <entry key="769">Участвуйте в конференции</entry>
+  <entry key="770">Начните лекцию</entry>
+  <entry key="771">Выбор комнаты</entry>
+  <entry key="772">Настройки</entry>
+  <entry key="773">К конференции</entry>
+  <entry key="774">Как участвовать в конференции:</entry>
+  <entry key="775">Начать запись</entry>
+  <entry key="776">Не показывать окно проверки аудио/записи видео при входе в конференцию</entry>
+  <entry key="777">Публичные комнаты</entry>
+  <entry key="778">Публичными комнатами могут пользоваться все пользователи</entry>
+  <entry key="779">Приватные комнаты</entry>
+  <entry key="780">Приватными комнатами могут пользоваться только пользователи из той же организации</entry>
+  <entry key="781">Мои комнаты</entry>
+  <entry key="782">Комнаты этой секции - для персонального использования. Они созданы через календарь, у них есть начало и конец жизни. Эти комнаты перечислены здесь только то время, пока ими можно пользоваться.</entry>
+  <entry key="783">Для этого действия вы должны быть модератором</entry>
+  <entry key="784">Подать заявку на модерацию</entry>
+  <entry key="785">Подать заявку на доступ к доске</entry>
+  <entry key="786">Подать заявку на доступ к камере и микрофону</entry>
+  <entry key="787">Хеш-код этой сессии уже использован. Нельзя использовать его дважды.</entry>
+  <entry key="788">СТАРТ</entry>
+  <entry key="789">ВЫХОД</entry>
+  <entry key="790">Вы на самом деле хотите выйти? Возможно, вам нужно удалить загруженные документы, очистить доску и историю чата.</entry>
+  <entry key="791">Выйти из конференции</entry>
+  <entry key="792">Комнаты</entry>
+  <entry key="793">Выберите комнату для совещания</entry>
+  <entry key="794">В календаре есть несохранённые события. Сохраните их или удалите.</entry>
+  <entry key="795">Добавьте хотя бы одного участника в совещание</entry>
+  <entry key="796">Вы действительно хотите удалить это событие?</entry>
+  <entry key="797">Предупреждение</entry>
+  <entry key="798">Добавить событие</entry>
+  <entry key="799">День</entry>
+  <entry key="800">Неделя</entry>
+  <entry key="801">Месяц</entry>
+  <entry key="802">Описание</entry>
+  <entry key="803">Участники</entry>
+  <entry key="804">{0} - платформа ваших веб-конференций. Вы можете 1) следуя инструкциям, нажать кнопку "Старт" и участвовать в конференции или 2) перейти в календарь и назначить время.</entry>
+  <entry key="805">Запланировать</entry>
+  <entry key="806">Чтобы назначить конференцию, добавьте новое событие в календарь.</entry>
+  <entry key="807">Нужна помощь?</entry>
+  <entry key="808">Ограниченная</entry>
+  <entry key="809">Поиск</entry>
+  <entry key="810">Добавить</entry>
+  <entry key="811">Ни один пользователь не выбран. Выберите его из списка, а затем нажмите "Добавить".</entry>
+  <entry key="812">Добавить участника</entry>
+  <entry key="813">Сохранить</entry>
+  <entry key="814">Удалить</entry>
+  <entry key="815">Детали события</entry>
+  <entry key="816">Модератор по умолчанию</entry>
+  <entry key="817">Супер</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Имя</entry>
+  <entry key="820">e-mail</entry>
+  <entry key="821">Добавить нового модератора по умолчанию</entry>
+  <entry key="822">Является супермодератором</entry>
+  <entry key="823">Если комната модерируется, пользователь с правами модератора или администратора автоматически становится модератором при входе. Если вам это не нужно, а Вы лишь хотите, чтобы определённый польз-ль стал модератором, используйте опцию "модератор по умолчанию".</entry>
+  <entry key="824">Супермодератор всегда становится модератором при входе в комнату. У него нельзя снять флаг модерации.</entry>
+  <entry key="825">Сделать польз-ля супермодератором</entry>
+  <entry key="826">Снять флаг супермодерации с польз-ля</entry>
+  <entry key="827">x</entry>
+  <entry key="828">Если для комнаты вы добавите организацию, только пользователи этой организации будут иметь доступ к ней (действительно только если флаг isPublic не установлен)</entry>
+  <entry key="829">Модерация</entry>
+  <entry key="830">Ограничения</entry>
+  <entry key="831">Организация</entry>
+  <entry key="832">Вы уверены?</entry>
+  <entry key="833">Вы действительно хотите удалить запись?</entry>
+  <entry key="834">Пользователь не выбран. Пожалуйста, выберите пользователя</entry>
+  <entry key="835">Добавить модератора по умолчанию</entry>
+  <entry key="836">Хотите добавить флаг супермодератора этому пользователю? Чтобы сохранить это, сохраните объект комнаты.</entry>
+  <entry key="837">Вы действительно хотите удалить флаг супермодератора у пользователя? Чтобы сохранить это, сохраните объект комнаты.</entry>
+  <entry key="838">Этот польз-ль - супермодератор. Вы не можете удалить флаг модератора у него.</entry>
+  <entry key="839">Вы действительно хотите удалить этот файл/папку?</entry>
+  <entry key="840">Удалить этот файл/папку?</entry>
+  <entry key="841">Г-жа</entry>
+  <entry key="842">Д-р</entry>
+  <entry key="843">Свойства</entry>
+  <entry key="844">Показывать позицию мыши зрителям</entry>
+  <entry key="845">Совместно использовать аудио и SIP</entry>
+  <entry key="846">Совмистно использовать аудио с SIP и видео с флеш</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">Смотреть экран</entry>
+  <entry key="849">Пользователь</entry>
+  <entry key="850">хочет сделать экран общим. Хотите видеть его?</entry>
+  <entry key="851">Закрыть</entry>
+  <entry key="852">Масштаб</entry>
+  <entry key="853">Сессия была закрыта хозяином экрана!</entry>
+  <entry key="854">Пауза</entry>
+  <entry key="855">Новый общий экран</entry>
+  <entry key="856">Минимизировать</entry>
+  <entry key="857">Максимизировать</entry>
+  <entry key="858">Видео</entry>
+  <entry key="859">Сроки записи</entry>
+  <entry key="860">Мои записи</entry>
+  <entry key="861">Публичные записи</entry>
+  <entry key="862">Инфо</entry>
+  <entry key="863">Имя</entry>
+  <entry key="864">Длина</entry>
+  <entry key="865">Дата</entry>
+  <entry key="866">От</entry>
+  <entry key="867">ИГРАТЬ</entry>
+  <entry key="868">Главное - видео</entry>
+  <entry key="869">Запись</entry>
+  <entry key="870">Вы можете записывать и делать экран общим одновременно. Чтобы сделать экран общим, нажмите кнопку “Открыть доступ” сверху. Чтобы только записывать сессию, нажмите "Начать запись".</entry>
+  <entry key="871">Начать запись</entry>
+  <entry key="872">Остановить запись</entry>
+  <entry key="873">Загрузить файл FLV</entry>
+  <entry key="874">Комната</entry>
+  <entry key="875">Играть</entry>
+  <entry key="876">Стоп</entry>
+  <entry key="877">Микрофон польз-ля включен</entry>
+  <entry key="878">Закрыть доступ</entry>
+  <entry key="879">Разрешить вопросы</entry>
+  <entry key="880">Выключите, чтобы участники в комнате вам не мешали.</entry>
+  <entry key="881">Права</entry>
+  <entry key="882">Загрузить как AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Необработанное видео</entry>
+  <entry key="886">Только аудио</entry>
+  <entry key="887">При обработке записи возникли ошибки.</entry>
+  <entry key="888">Запись ещё не готова. Попробуйте снова через пару минут.</entry>
+  <entry key="889">Лог:</entry>
+  <entry key="890">Сообщение рекордера</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">Апплет SIP не готов</entry>
+  <entry key="893">Установки аккаунта SIP</entry>
+  <entry key="894">Установки SIP для каждого пользователя.</entry>
+  <entry key="895">Польз-ль SIP</entry>
+  <entry key="896">Пароль Sip</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Неправильный логин к шлюзу SIP. Проверьте данные ауфентикациивашего провайдера SIP и данные аккаунта SIP для каждого польз-ля. Администратор может сделать проверку через пункт меню Конфигурация. Пользователи и модераторы заблокированы от любых взаимодействий.</entry>
+  <entry key="899">Неправильный логин для шлюза SIP. Обратитесь в службу поддержки!</entry>
+  <entry key="900">Войти в шлюз SIP</entry>
+  <entry key="901">Войти в шлюз SIP</entry>
+  <entry key="902">Показать лог</entry>
+  <entry key="903">Лог процесса записи</entry>
+  <entry key="904">Сообщения апплета SIP</entry>
+  <entry key="905">Апплет SIP не готов. Примите апплет и нажмите ok!</entry>
+  <entry key="906">Стать модератором</entry>
+  <entry key="907">Сохранить изменения назначения</entry>
+  <entry key="908">Назначение было изменено. Сохранить изменения? Все участники получат мейл с изменённой датой и временем (в зависимости от типа нотификаций этого назначения).</entry>
+  <entry key="909">Для доступа к другим записям войдите в приложение {0}.</entry>
+  <entry key="910">Выберите пользователя для этого видео</entry>
+  <entry key="911">Доступные пользователи для этого Pod</entry>
+  <entry key="912">Вы модератор этого интервью. Вы можете решать, кому говорить, и можете начинать / останавливать запись</entry>
+  <entry key="913">Начать запись</entry>
+  <entry key="914">Остановить запись</entry>
+  <entry key="915">Запись интервью уже начата.</entry>
+  <entry key="916">Запись уже остановлена или ещё не начата.</entry>
+  <entry key="917">Запись этого интервью уже начата!</entry>
+  <entry key="918">Отменить</entry>
+  <entry key="919">Обработка интервью занимает 5 минут на каждую минуту интервью. Текущий прогресс обработки:</entry>
+  <entry key="920">Введите пароль снова, чтобы автоматически создать данные SIP</entry>
+  <entry key="921">Авто-генерация SIP</entry>
+  <entry key="922">Вы не можете переместить этот файл или папку в его собственную подпапку!</entry>
+  <entry key="923">Размер домашнего накопителя</entry>
+  <entry key="924">Размер публичного накопителя</entry>
+  <entry key="925">Лицензионные установки</entry>
+  <entry key="926">Вы можете либо назначить дату конца срока действия, либо макс. число минут срока действия лицензии.</entry>
+  <entry key="927">Проверить лицензию</entry>
+  <entry key="928">Единая ставка</entry>
+  <entry key="929">Дата конца срока действия</entry>
+  <entry key="930">Осталось секунд</entry>
+  <entry key="931">Общее время</entry>
+  <entry key="932">Ваша лицензия истекла. Вам нужно купить новые минуты либо заплатить по единой ставке.</entry>
+  <entry key="933">Нажмите и купите</entry>
+  <entry key="934">Оставшееся время вашего аккаунта:</entry>
+  <entry key="935">Информация о лицензии</entry>
+  <entry key="936">Информация</entry>
+  <entry key="937">Закрыть</entry>
+  <entry key="938">Ваша лицензия истекла. Вам необходимо купить новые минуты либо заплатить по единой ставке.</entry>
+  <entry key="939">Установки лицензии</entry>
+  <entry key="940">Вы можете купить минуты для того, чтобы проводить веб-конференции. Или заплатите по единой ставке за 3-12 месяцев.Посылка приглашений (прямые ссылки на комнаты) или создание конференций с внешними польз-лями через календарь возможны только в случае оплаты по единой ставке!</entry>
+  <entry key="941">Купить 60 минут за 9,99 евро (16 центов за минуту)</entry>
+  <entry key="942">Купить 5 часов за 19,99 евро (6 центов за минуту)</entry>
+  <entry key="943">Купить 3 месяца за 29,99 евро (9,99 евро за месяц)</entry>
+  <entry key="944">Купить 6 месяцев за 39,99 евро (6,66 евро за месяц)</entry>
+  <entry key="945">Платить поминутно</entry>
+  <entry key="946">Единая ставка</entry>
+  <entry key="947">У вас неограниченная лицензия</entry>
+  <entry key="948">Ваша лицензия истекает:</entry>
+  <entry key="949">Вы купили поминутную лицензию. У вас есть:</entry>
+  <entry key="950">Купите новый кредит</entry>
+  <entry key="951">Хотите свой собственный сервер?</entry>
+  <entry key="952">Вы хотите установить {0} на ваш сервер или интегрироваться с Moodle, SugarCRM, веб-сайтом или внутренней сетью? Цены начинаются с 500 евро за инстолляцию!</entry>
+  <entry key="953">или послать сообщение</entry>
+  <entry key="954">Ответить:</entry>
+  <entry key="955">Сообщение:</entry>
+  <entry key="956">Послать</entry>
+  <entry key="957">Нажмите здесь, чтобы получить контактную информацию и прайс-лист</entry>
+  <entry key="958">Кредитная карта</entry>
+  <entry key="959">Имя</entry>
+  <entry key="960">Фамилия</entry>
+  <entry key="961">Тип карты</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Номер карты</entry>
+  <entry key="967">Срок окончания действия</entry>
+  <entry key="968">Номер для верификации карты</entry>
+  <entry key="969">Платёжный адрес</entry>
+  <entry key="970">Адрес</entry>
+  <entry key="971"></entry>
+  <entry key="972">Город</entry>
+  <entry key="973">Страна</entry>
+  <entry key="974">Штат (Только US)</entry>
+  <entry key="975">Индекс</entry>
+  <entry key="976">Кол-во</entry>
+  <entry key="977">Послать</entry>
+  <entry key="978">Шаг 1: {0} - Платёжная форма</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Нажмите "Послать через PayPal" чтобы заплатить. Paypal принимает VISA, MasterCard, Discover или American Express. PaypAL не требует подписи.Граждене Германии могут также платить с дебетовой карты (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Спасибо за покупку {0}. Как только мы получим ваш платёж, ваш аккаунт будет изменён. Вы поллучите письмо с вашим счётом в формате PDF.Вы также можете проверять текущие и прошлые операции в вашем профайле.Сейчас вы можете закрыть ваше окно браузера и вернуться к {0}.</entry>
+  <entry key="982">Отправьте и купите!</entry>
+  <entry key="983">нажмите и купите!</entry>
+  <entry key="984">Шаг 3: Платёж за {0} - проверьте заявку и купите!</entry>
+  <entry key="985">Имя</entry>
+  <entry key="986">Платёж получен!</entry>
+  <entry key="987">Здравствуйте,</entry>
+  <entry key="988">Мы получили ваш платёж. Ваш профайл изменён. Смотрите прикреплённый счёт. Этот и все предыдущие счета могут также быть загружены в ваш профайл.</entry>
+  <entry key="989">Спасибо за использование {0}!</entry>
+  <entry key="990">Платёж получен {0} -</entry>
+  <entry key="991">Статус платежа и транзакции</entry>
+  <entry key="992">Хэш транзакций</entry>
+  <entry key="993">Минуты</entry>
+  <entry key="994">Месяцы</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Статус</entry>
+  <entry key="997">Счёт</entry>
+  <entry key="998"></entry>
+  <entry key="999">Для того, чтобы посылать приглашения или создавать митинги через календарь, Вы должны платить по единой ставке. Для поминутной тарификации возможен только доступп к {0}. Вы не можете разрешить сторонним участникам доступ к митингу.</entry>
+  <entry key="1000">Этот email уже используется другим пользователем.</entry>
+  <entry key="1001">Установки SIP</entry>
+  <entry key="1002">Номер конференции и PIN автоматически созданы через шлюз OpenXG RPC</entry>
+  <entry key="1003">Номер SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Очистить объекты только на текущем слайде!</entry>
+  <entry key="1006">Только введённый в строке состояния URL посылается участникам!</entry>
+  <entry key="1007">Сделать групповые комнаты [Breakout session]</entry>
+  <entry key="1008">Выберите пользователей для групповой комнаты!</entry>
+  <entry key="1009">Здесь вы можете выбрать пользователей и создать новую групповую комнату для конференций для них. Выбранные пользователи будут автоматически перемещены в новую комнату или получат сообщение. Модераторы получат список текущих комнат так, чтобы они могли переключаться на каждую комнату, если нужно.</entry>
+  <entry key="1010">Имя пользователя</entry>
+  <entry key="1011">Логин</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Пользователи в новой групповой комнате:</entry>
+  <entry key="1014">Создать групповую комнату</entry>
+  <entry key="1015">Отмена</entry>
+  <entry key="1016">Выберите хотя бы одного пользователя для комнаты!</entry>
+  <entry key="1017">Добавить пользователя в группу</entry>
+  <entry key="1018">Удалить пользователя из комнаты</entry>
+  <entry key="1019">Пользователь - модератор групповой комнаты (Он может управлять комнатами и пользователи комнаты могут просить его прийти)</entry>
+  <entry key="1020">Тип комнаты</entry>
+  <entry key="1021">Если вы выберете "Переключить пользователя на новую групповую комнату" все выбранные пользователи будут автоматически переключены на новую комнату. Иначе они получат нотификацию с кнопкой, которой они переключиться на новую комнату. Модераторы всегда имеют выбор в управлении комнатами и переключении между ними.</entry>
+  <entry key="1022">Управление групповыми комнатами</entry>
+  <entry key="1023">Вы можете переключаться между всеми групповыми комнатами, в которых вы модератор. Пользователи внутри комнаты могут посылать вам сообщения, например просить вас зайти в икомнату и помочь. Вы можете также прервать комнату, и все пользователи будут выведены оттуда.</entry>
+  <entry key="1024">Переместить пользователя в новую комнату</entry>
+  <entry key="1025">Имя</entry>
+  <entry key="1026">Создано</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Доступные пользователи</entry>
+  <entry key="1030">Добавьте польз-ля плюсом слева или удалите крестиком справа!</entry>
+  <entry key="1031">1) Установки групповой комнаты</entry>
+  <entry key="1032">2) Добавить пользователя в групповую комнату</entry>
+  <entry key="1033">Название групповой комнаты</entry>
+  <entry key="1034">Групповая комната</entry>
+  <entry key="1035">Изменить для комнаты</entry>
+  <entry key="1036">Переключиться на эту групповую комнату</entry>
+  <entry key="1037">Прервать групповую комнату и заставить всех пользователей выйти</entry>
+  <entry key="1038">Новая групповая комната</entry>
+  <entry key="1039">Есть новая групповая комната, доступная для вас.</entry>
+  <entry key="1040">Переключиться на групповую комнату</entry>
+  <entry key="1041">Действия групповой комнаты</entry>
+  <entry key="1042">Вы можете переоткрыть это окно через пункт Действия меню!</entry>
+  <entry key="1043">Послать сообщение модератору групповой комнаты</entry>
+  <entry key="1044">Новая групповая комната</entry>
+  <entry key="1045">Есть новая доступная групповая комната. Вы можете переключиться на неё. Групповые комнаты похожи на "рабочие" с дополнительной возможностью задавать вопросы модератору. Ваши комнаты также доступны в разделе "Мои Митинги".</entry>
+  <entry key="1046">Перейти в групповую комнату</entry>
+  <entry key="1047">Создано:</entry>
+  <entry key="1048">Название групповой комнаты:</entry>
+  <entry key="1049">Это окно останется открытым даже если вы выйдете из комнаты!</entry>
+  <entry key="1050">Польз-ли этой групповой комнаты</entry>
+  <entry key="1051">3) Другие групповые комнаты, к которым вы можете перейти</entry>
+  <entry key="1052">Послать сообщение модераторам групповой комнаты. Например, если вам нужна помощь в модерации или у вас есть вопрос по теме.</entry>
+  <entry key="1053">Послать</entry>
+  <entry key="1054">2) Пользователи, приглашённые в эту комнату</entry>
+  <entry key="1055">Модератор групповой комнаты</entry>
+  <entry key="1056">Это - люди, которых модератор пригласил в эту групповую комнату.</entry>
+  <entry key="1057">Сейчас в этой комнате нет залогиненных модераторов!</entry>
+  <entry key="1058">Пожалуйста, введите сообщение</entry>
+  <entry key="1059">Помогите, в нашей групповой комнате проблемы!</entry>
+  <entry key="1060">Пользователь из групповой уомнаты просит помощи.</entry>
+  <entry key="1061">Запрос групповой комнаты для помощи</entry>
+  <entry key="1062">Сообщение:</entry>
+  <entry key="1063">От:</entry>
+  <entry key="1064">Сейчас вы не находитесь ни в какой групповой комнате. Но можете преключиться на комнаты, к котоым имеете доступ, здесь.</entry>
+  <entry key="1065">Бэкап системы. Включает все данные, сгенерированные пользователем. Не включается конфигурация и метки языка, потому что они импортируются системным инстоллятором. Для апдейта, сэкспортируйте вашу старую систему (1) преустановите новые пакеты для новой базы данных (2) и симпортируйте файл бэкапа снова (3). Бэкап должен быть симпортирован перед генерацией данных в новой системе.</entry>
+  <entry key="1066">Системный бэкап</entry>
+  <entry key="1067">Позволить пользователю делать его экран/запись общим</entry>
+  <entry key="1068">Запретить пользователю делать его экран/запись общим</entry>
+  <entry key="1069">Пользователь-модератор, и может делать что угодно!</entry>
+  <entry key="1070">хотел бы сделать его экран/запись общим.</entry>
+  <entry key="1071">Вам разрешается оделать экран/запись общим</entry>
+  <entry key="1072">Применить права для общих экрана и записи.</entry>
+  <entry key="1073">Позволить или запретить делать экран или запись общими.</entry>
+  <entry key="1074">Выключить звук</entry>
+  <entry key="1075">Включить звук</entry>
+  <entry key="1076">Только с аудио</entry>
+  <entry key="1077">Установите этот флаг, и польз-ли будут иметь только звук опции без видео в комнате для конференций. Полезно для уменьшения нагрузки сети.</entry>
+  <entry key="1078">Позволить удалённый контроль (для общего экрана)</entry>
+  <entry key="1079">Запретить удалённый контроль (для общего экрана)</entry>
+  <entry key="1080">Применить к правам удалённого контроля (для общего экрана)</entry>
+  <entry key="1081">У вас нет прав на удалённый контроль (для общего экрана)</entry>
+  <entry key="1082">хочет удалённый контроль для общего экрана.</entry>
+  <entry key="1083">Пользователь - модератор он может делать всё</entry>
+  <entry key="1084">Позволить тлт запретить удалённый контроль (для общего экрана)</entry>
+  <entry key="1085">1) ваш PC удалённому PC: Чтобы скопировать и вставить текст из вашего буфера обмена в удалённый экран, нажмите на экран, потом кликните в текстовом поле и выберите "Вставить" из контекстного меню.2) С удалённого PC на ваш PC: Чтобы скопировать текст с удалённого PC в ваш буфер обмена, выделите текст на удалённом, кликните и выберите</entry>
+  <entry key="1086">Скопировать и вставить текст с вашего PC на удалённый PC и наоборот.</entry>
+  <entry key="1087">Скопировать выделенный текст</entry>
+  <entry key="1088">Как скопировать и вставить</entry>
+  <entry key="1089">Качество общего доступа:</entry>
+  <entry key="1090">Очень высокое качество</entry>
+  <entry key="1091">Высокое качество</entry>
+  <entry key="1092">Среднее качество</entry>
+  <entry key="1093">Низкое качество</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Клавиатура:</entry>
+  <entry key="1097">Закрыть вебинар!</entry>
+  <entry key="1098">Вебинар уже закрыт, вы будете перенаправлены в</entry>
+  <entry key="1099">Закрыть комнату</entry>
+  <entry key="1100">Переадресация</entry>
+  <entry key="1101">Установки выхода из комнаты</entry>
+  <entry key="1102">Если комната закрыта, пользователь будет переадресован на указанный URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Имя</entry>
+  <entry key="1106">Конфигурационный файл</entry>
+  <entry key="1107">Конфигурация Ldap</entry>
+  <entry key="1108">Название</entry>
+  <entry key="1109">Включено</entry>
+  <entry key="1110">Вставлено</entry>
+  <entry key="1111">Вставлено</entry>
+  <entry key="1112">Изменено</entry>
+  <entry key="1113">Изменено</entry>
+  <entry key="1114">Конфигурационные файлы в той же папке, что и webapps/openmeetings/conf. Загрузите файлы в папку вручную. Изменения конфиг-файлов происходят немедленно онлайн.</entry>
+  <entry key="1115">Имя конфиг-файла</entry>
+  <entry key="1116">Если вы включите "добавить домен к имени", значение поля "домен" добавится к каждому логину, который вводится при входе в систему. Это удобно, если логин в Ldap запоминается с доменным именем. Например: пользователь вводит "hans", домен установлен в "localhost.com", логин, который проверяется для Ldap будет: hans@localhost.com</entry>
+  <entry key="1117">Добавить домен к имени</entry>
+  <entry key="1118">Домен</entry>
+  <entry key="1119">Вставить</entry>
+  <entry key="1120">Скопировать выделенный текст</entry>
+  <entry key="1121">Удалть текст из буфера обмена</entry>
+  <entry key="1122">Показать удалённый буфер обмена</entry>
+  <entry key="1123">Не показывать снова</entry>
+  <entry key="1124">Скопировать текст здесь.</entry>
+  <entry key="1125">Вам нужны права для удалённого контроля (или модерация), чтобы скопировать и вставить текст в или из удалённого экрана.</entry>
+  <entry key="1126">Установки по умолчанию</entry>
+  <entry key="1127">Не показывать информацию о копировании и вставке в удалённом доступе</entry>
+  <entry key="1128">Сохранить</entry>
+  <entry key="1129">Удалить</entry>
+  <entry key="1130">Отменить</entry>
+  <entry key="1131">Пригласить польз-ля в комнату для конференций</entry>
+  <entry key="1132">Выбрать комнату для конференций. Приглашённый участник получит сообщение с вашим именем и ссылку на комнату.</entry>
+  <entry key="1133">Присоединён с:</entry>
+  <entry key="1134">Войдите в комнату после отправки приглашения</entry>
+  <entry key="1135">Пригласить</entry>
+  <entry key="1136">Сообщение</entry>
+  <entry key="1137">хотелось бы пригласить вас в комнату для конференций:</entry>
+  <entry key="1138">Приглашение</entry>
+  <entry key="1139">Послать приглашение</entry>
+  <entry key="1140">принял ваше приглашение!</entry>
+  <entry key="1141">Принять</entry>
+  <entry key="1142">Отказать</entry>
+  <entry key="1143">Таймзона</entry>
+  <entry key="1144">Детали события</entry>
+  <entry key="1145">Имя</entry>
+  <entry key="1146">Описание</entry>
+  <entry key="1147">Создано</entry>
+  <entry key="1148">Сообщение в ТЗ</entry>
+  <entry key="1149">Включите "Сообщение в таймзоне", чтобы попросить пользователя сменить свой профайл при след. логине.</entry>
+  <entry key="1150">пожалуйста проверьте таймзону в вашем профайле.</entry>
+  <entry key="1151">Новая конференция {0}:</entry>
+  <entry key="1152">Детали:</entry>
+  <entry key="1153">Старт:</entry>
+  <entry key="1154">Конец:</entry>
+  <entry key="1155">Изменённая конференция {0}:</entry>
+  <entry key="1156">Организатор:</entry>
+  <entry key="1157">Отменённая конференция {0}:</entry>
+  <entry key="1158">Напоминание конференции {0}:</entry>
+  <entry key="1159">Общие установки</entry>
+  <entry key="1160">Показывать контактные данные всем</entry>
+  <entry key="1161">Добавить поля ваших интересов или интересов ваших партнёров в конференцию. Запятая разделяет термины (например: медицинские услуги, забота о здоровье, ...)</entry>
+  <entry key="1162">Мои предложения</entry>
+  <entry key="1163">Мои интересы</entry>
+  <entry key="1164">Имя</entry>
+  <entry key="1165">Таймзона</entry>
+  <entry key="1166">Области интересов</entry>
+  <entry key="1167">Контактная информация</entry>
+  <entry key="1168">Показывать контактные данные только контактам</entry>
+  <entry key="1169">Не показывать контактные данные никому</entry>
+  <entry key="1170">Мой профайл</entry>
+  <entry key="1171">Редактировать установки</entry>
+  <entry key="1172">Искать пользователей</entry>
+  <entry key="1173">Посмотреть ваш профайл, как его видят другие</entry>
+  <entry key="1174">Редактировать ваши установки, добавить интересы для поиска</entry>
+  <entry key="1175">Искать других пользователей и расширить вашу сеть</entry>
+  <entry key="1176">Искать</entry>
+  <entry key="1177">Польз-ль предлагает</entry>
+  <entry key="1178">Польз-ль ищет</entry>
+  <entry key="1179">Свободный текст</entry>
+  <entry key="1180">Имя</entry>
+  <entry key="1181">Таймзона</entry>
+  <entry key="1182">Предложения</entry>
+  <entry key="1183">Поиски</entry>
+  <entry key="1184">Результаты поиска</entry>
+  <entry key="1185">Действия</entry>
+  <entry key="1186">Добавить в контакты</entry>
+  <entry key="1187">Послать сообщение</entry>
+  <entry key="1188">Контакты и сообщения</entry>
+  <entry key="1189">Ожидающие контакты</entry>
+  <entry key="1190">Принять</entry>
+  <entry key="1191">Запретить</entry>
+  <entry key="1192">Здравствуйте,</entry>
+  <entry key="1193">хочет добавить вас в список контактов.</entry>
+  <entry key="1194">Проверьте запросы вашего контакта в {0} или пойдите по этой ссылке, чтобы on принять или отклонить запрос</entry>
+  <entry key="1195">Этот пользователь уже в вашем списке контактов или получил приглашение добавиться в список, но не ответил.</entry>
+  <entry key="1196">Ваш список контактов</entry>
+  <entry key="1197">Редактируйте ваши контакты и сообщения, управляйте ожидающими контактами!</entry>
+  <entry key="1198">подтвердил вас как контакт!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Показать или скопировать лог</entry>
+  <entry key="1201">Лог чата</entry>
+  <entry key="1202">От</entry>
+  <entry key="1203">Тема</entry>
+  <entry key="1204">Послать</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Сообщения</entry>
+  <entry key="1207">Новый мейл</entry>
+  <entry key="1208">Нажмите, чтобы написать сообщение вашему контакту</entry>
+  <entry key="1209">Напишите новое сообщение</entry>
+  <entry key="1210">Кому:</entry>
+  <entry key="1211">Тема:</entry>
+  <entry key="1212">Включиите full fit и доска будет масштабироваться так, чтобы все документы становились видимыми в соответствии с разрешением экрана каждого участника.</entry>
+  <entry key="1213">Исключить участника</entry>
+  <entry key="1214">Вы не можете удалить сами себя из комнаты!Если вы хотите покинуть её, закройте окно браузера или используйте кнопку Выход!</entry>
+  <entry key="1215">Вы действительно хотите исключить этого участника из комнаты?</entry>
+  <entry key="1216">Подтвердите действие ...</entry>
+  <entry key="1217">Вы не можете исключить супер-модератора из комнаты!</entry>
+  <entry key="1218">Зарезервировать комнату</entry>
+  <entry key="1219">Старт</entry>
+  <entry key="1220">Конец</entry>
+  <entry key="1221">Добавьте дополнительный запрос для митинга и создайте комнату для конференций. Событие скопируется в календарь каждого участника.</entry>
+  <entry key="1222">Входящие</entry>
+  <entry key="1223">Посланные</entry>
+  <entry key="1224">Корзина</entry>
+  <entry key="1225">Это вы! Вы не можете добавить себя в свои контакты.</entry>
+  <entry key="1226">Пользователь уже отклонён!</entry>
+  <entry key="1227">Пользователь уже подтверждён!</entry>
+  <entry key="1228">Хеш контактов этого пользователя невалиден!</entry>
+  <entry key="1229">Пользователь добавлен в список контактов!</entry>
+  <entry key="1230">Пользователь отклонён как контакт и удалён из списка ожидающих!</entry>
+  <entry key="1231">Нет такого контакта!</entry>
+  <entry key="1232">Вы действительно хотите удалить этот контакт?</entry>
+  <entry key="1233">Подтвердите удаление контакта</entry>
+  <entry key="1234">Удалить контакт из списка</entry>
+  <entry key="1235">Профайл пользователя</entry>
+  <entry key="1236">Показать профайл пользователя</entry>
+  <entry key="1237">Сообщения</entry>
+  <entry key="1238">Поиск</entry>
+  <entry key="1239">Все</entry>
+  <entry key="1240">Никто</entry>
+  <entry key="1241">Непрочит.</entry>
+  <entry key="1242">Прочитанные</entry>
+  <entry key="1243">К папке ...</entry>
+  <entry key="1244">Новая папка ...</entry>
+  <entry key="1245">Удалить</entry>
+  <entry key="1246">Удалённый мейл всё ещё в корзине!</entry>
+  <entry key="1247">Непрочит.</entry>
+  <entry key="1248">Прочитанное</entry>
+  <entry key="1249">Ответить</entry>
+  <entry key="1250">Ответить всем</entry>
+  <entry key="1251">Переслать</entry>
+  <entry key="1252">Действия ...</entry>
+  <entry key="1253">Послать приватное сообщение</entry>
+  <entry key="1254">Ничего не выбрано!</entry>
+  <entry key="1255">Во входящие</entry>
+  <entry key="1256">Удалить (навсегда)</entry>
+  <entry key="1257">Действие не может быть отменено!</entry>
+  <entry key="1258">Новая папка</entry>
+  <entry key="1259">Добавить папки и упорядочить сообщения!</entry>
+  <entry key="1260">Добавить папку</entry>
+  <entry key="1261">Добавить</entry>
+  <entry key="1262">Удалить папку</entry>
+  <entry key="1263">Вы не можете удалить эту папку, там есть сообщения! Удалите их или переместите их в другую папку.</entry>
+  <entry key="1264">Редактировать имя</entry>
+  <entry key="1265">Вы действительно хотите удалить эту папку? Её нельзя восстановить.</entry>
+  <entry key="1266">Ваш запрос был послан пользователю. Пользователь получит нотификацию о подтверждении или отклонении. Только подтверждённые запросы могут быть в вашем списке контактов!</entry>
+  <entry key="1267">Сообщение</entry>
+  <entry key="1268">Пользователь не дал совместного доступа к его персональным данным.</entry>
+  <entry key="1269">Пользователь разрешил доступ к своим персональным данным только контактам.</entry>
+  <entry key="1270">Адрес и телефон</entry>
+  <entry key="1271">Код вашего приглашения невалиден, он действует только в определённый период времени.</entry>
+  <entry key="1272">Это событие связано с несколькими календарями других пользователей. Ваши изменения также изменят их календари. Выхотите изменить событие?</entry>
+  <entry key="1273">Подтвердите изменение</entry>
+  <entry key="1274">Позволить контакту видеть мой календарь (только просмотр)</entry>
+  <entry key="1275">Не давать доступа к календарю</entry>
+  <entry key="1276">Календарь контактов</entry>
+  <entry key="1277">Ваши контакты должны разрешить вам доступ, прежде чем вы сможете видеть их календари.</entry>
+  <entry key="1278">Вы не можете сохранить или удалить события из чужих календарей!</entry>
+  <entry key="1279">Показать мой календарь снова!</entry>
+  <entry key="1280">Это событие связано с календарями других пользователей. Ваши действия также удалят сообытие из этих календарей. Вы хотите удалить событие?</entry>
+  <entry key="1281">Подтвердите действие</entry>
+  <entry key="1282">Войти в комнату</entry>
+  <entry key="1283">Доступ к комнате</entry>
+  <entry key="1284">К этому приватному сообщению зарезервированы комната и событие.</entry>
+  <entry key="1285">Сперва соххраните событие!</entry>
+  <entry key="1286">Нет таких доступных комнат. Событиея в календаре и присоединённая комната уже удалены!</entry>
+  <entry key="1287">Выберите ваш ник</entry>
+  <entry key="1288">Имя</entry>
+  <entry key="1289">Фамилия</entry>
+  <entry key="1290">Мейл</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Мин. длина - 4 символа для имени и фамилии вместе!.</entry>
+  <entry key="1293">Введите валидный мейл</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Войти как Facebook аккаунт</entry>
+  <entry key="1296">Записан с</entry>
+  <entry key="1297">Вы зашли с аккаунта Facebook. Вам необходимо прописать правильный мейл в профайл, иначе вы не сможете получать приглашения и приватные сообщения.</entry>
+  <entry key="1298">Сообщение</entry>
+  <entry key="1299">Больше не показывать сообщение об изменении профайла</entry>
+  <entry key="1300">Ещё настройки дисплея ...</entry>
+  <entry key="1301">Новое приватное сообщение:</entry>
+  <entry key="1302">Нажмите сюда, чтобы перейти к профайлу и прочитать сообщение ...</entry>
+  <entry key="1303">Ответить</entry>
+  <entry key="1304">Комнаты и чаты</entry>
+  <entry key="1305">Мои комнаты</entry>
+  <entry key="1306">Моя комната для конференций(до 16 участников)</entry>
+  <entry key="1307">Моя комната для вебинаров (до 120 участников)</entry>
+  <entry key="1308">Id владельца</entry>
+  <entry key="1309">Введите пароль</entry>
+  <entry key="1310">Вам нужен аккаунт уровня пользователя, модератора или админа</entry>
+  <entry key="1311">Web-сервис (только через SOAP)</entry>
+  <entry key="1312">Напрямую загрузите на доску</entry>
+  <entry key="1313">Вы действительно хотите удалить эту доску? Это действие не может быть отменено!</entry>
+  <entry key="1314">Загрузить на доску</entry>
+  <entry key="1315">Не забудьте начать запись! 1 участник в комнате хочет начать её.</entry>
+  <entry key="1316">Начать запись</entry>
+  <entry key="1317">Стрелка</entry>
+  <entry key="1318">Круг</entry>
+  <entry key="1319">Линия</entry>
+  <entry key="1320">Квадрат</entry>
+  <entry key="1321">Треугольник</entry>
+  <entry key="1322">Текст</entry>
+  <entry key="1323">Фигуры</entry>
+  <entry key="1324">Рисовать</entry>
+  <entry key="1325">Выделить/Переместить</entry>
+  <entry key="1326">Рисовть форму</entry>
+  <entry key="1327">Вырезать или Переместить</entry>
+  <entry key="1328">Масштаб</entry>
+  <entry key="1329">Печать</entry>
+  <entry key="1330">Отмена</entry>
+  <entry key="1331">Корзина</entry>
+  <entry key="1332">Добавить решётку</entry>
+  <entry key="1333">Сделать файл общим</entry>
+  <entry key="1334">Выбрать форму</entry>
+  <entry key="1335">Выбрать фигуру</entry>
+  <entry key="1336">Скопировать</entry>
+  <entry key="1337">Вырезать</entry>
+  <entry key="1338">Вставить</entry>
+  <entry key="1339">Удалить</entry>
+  <entry key="1340">Вы действительно хотите удалить контент с доски?</entry>
+  <entry key="1341">Загрузить прямо на доску</entry>
+  <entry key="1342">Участники</entry>
+  <entry key="1343">Менеджер участников</entry>
+  <entry key="1344">Присутствуют</entry>
+  <entry key="1345">Удалённый контроль</entry>
+  <entry key="1346">Извлечь</entry>
+  <entry key="1347">Чат</entry>
+  <entry key="1348">Пригласить участников</entry>
+  <entry key="1349">По eMail</entry>
+  <entry key="1350">Пользователь - модератор</entry>
+  <entry key="1351">У пользователя включена камера</entry>
+  <entry key="1352">Деактивировать заполнение формы</entry>
+  <entry key="1353">Активировать заполнение формы</entry>
+  <entry key="1354">Привязять к решётке</entry>
+  <entry key="1355">Разрешить запись</entry>
+  <entry key="1356">Подождать запись</entry>
+  <entry key="1357">Скрыть панель инстр.</entry>
+  <entry key="1358">Играть видео</entry>
+  <entry key="1359">Вы действительно хотите удалить содержание текущего слайда?</entry>
+  <entry key="1360">Принять и назначить пользовательские права</entry>
+  <entry key="1361">Отклонить</entry>
+  <entry key="1362">Я</entry>
+  <entry key="1363">Активность и действия</entry>
+  <entry key="1364">Удалить доску</entry>
+  <entry key="1365">Вы должны быть модератором или иметь права на рисование на доске, чтобы удалить доску!</entry>
+  <entry key="1366">Не разрешено</entry>
+  <entry key="1367">покидает комнату.</entry>
+  <entry key="1368">Основные иконки</entry>
+  <entry key="1369">Без категории</entry>
+  <entry key="1370">Цвет-стиль</entry>
+  <entry key="1371">Качество</entry>
+  <entry key="1372">Домен</entry>
+  <entry key="1373">посетить</entry>
+  <entry key="1374">красно-оранжевый</entry>
+  <entry key="1375">цвет морской волны</entry>
+  <entry key="1376">Стальной</entry>
+  <entry key="1377">светлосероголубой</entry>
+  <entry key="1378">золотистый</entry>
+  <entry key="1379">серебряно-серый</entry>
+  <entry key="1380">пользовательский</entry>
+  <entry key="1381">лучший</entry>
+  <entry key="1382">загрузка</entry>
+  <entry key="1383">средний</entry>
+  <entry key="1384">Выключить микр. глобально</entry>
+  <entry key="1385">Включить микр. глобально</entry>
+  <entry key="1386">Дать слово</entry>
+  <entry key="1387">Микрофон был откл. модератором. Вы не можете вкл. микр. сами!</entry>
+  <entry key="1388">Выкл. микрофон глобально?</entry>
+  <entry key="1389">Вы действительно хотите отключит микрофон? Другие участники не смогут вас слышать!</entry>
+  <entry key="1390">Отключить микрофон локально?</entry>
+  <entry key="1391">Вы действительно хотите откл. этот микрофон? Этот микрофон можно отключить только на вашем компьютере. Данное действие не повлияет на то, как остальные участники будут слышать этого пользователя. Только модератор может отключить микрофон глобально!</entry>
+  <entry key="1392">Отключить микрофон глобально?</entry>
+  <entry key="1393">Вы действительно хотите отключить этого участника? Больше никто не будет слышать его!</entry>
+  <entry key="1394">Ваш звук включен. Нажмите сюда, чтобы послать модератору сообщение о выключении микрофона глобально (в заполненной комнате)!</entry>
+  <entry key="1395">Ваш звук выключен. Нажмите сюда, чтобы послать модератору сообщение о включении микрофона глобально (в заполненной комнате)!</entry>
+  <entry key="1396">хотел бы, чтобы модератор выключил мой микрофон глобально.</entry>
+  <entry key="1397">хотел бы, чтобы модератор включил мой микрофон глобально.</entry>
+  <entry key="1398">хочет, чтобы модератор включил его/её микрофон.</entry>
+  <entry key="1399">хочет, чтобы модератор выключил его/её микрофон.</entry>
+  <entry key="1400">Включенный микрофон. Нажмите, чтобы выключить его/её микрофон глобально.</entry>
+  <entry key="1401">Выключенный микрофон. Нажмите, чтобы включить его/её микрофон глобально!</entry>
+  <entry key="1402">Этот участник глобально выключен модератором. Вы не можете включить его!</entry>
+  <entry key="1403">Выключить ваш микрофон глобально</entry>
+  <entry key="1404">Включить ваш микрофон глобально</entry>
+  <entry key="1405">Выключить микрофон</entry>
+  <entry key="1406">Включить микрофон</entry>
+  <entry key="1407">Выключить микрофон глобально</entry>
+  <entry key="1408">Включить микрофон глобально</entry>
+  <entry key="1409">Только модераторы могут включать или выключать участников глобально! Чтобы выключить ваш микрофон, используйте иконку микрофона!</entry>
+  <entry key="1410">Название опроса</entry>
+  <entry key="1411">Вы</entry>
+  <entry key="1412">Заархивированные голосования</entry>
+  <entry key="1413">активные</entry>
+  <entry key="1414">Простая диаграмма</entry>
+  <entry key="1415">Круговая диаграмма</entry>
+  <entry key="1416">Введите е-мейл</entry>
+  <entry key="1417">Новые сообщения</entry>
+  <entry key="1418">Закрытый опрос</entry>
+  <entry key="1419">Уверены, что хотите закрыть опрос? Больше никто не сможет голосовать.</entry>
+  <entry key="1420">Удалить опрос</entry>
+  <entry key="1421">Хотите удалить этот опрос? Результаты тоже будут удалены.</entry>
+  <entry key="1422">Код ISO языка</entry>
+  <entry key="1423">Разрешить/запретить права на эксклюзивный звук.</entry>
+  <entry key="1424">Позволить участнику эксклюзивный звук</entry>
+  <entry key="1425">Запретить эксклюзивный звук для участника</entry>
+  <entry key="1426">хотел бы получить разрешение на эксклюзивный звук.</entry>
+  <entry key="1427">хочу, чтобы модератор разрешил мне эксклюзивный звук.</entry>
+  <entry key="1428">Разрешить эксклюзивный звук.</entry>
+  <entry key="1429">Разрешение камеры</entry>
+  <entry key="1430">Изменение разрешения влияет на пропускную способность сети, увеличенная картинка требует больше разрешения.</entry>
+  <entry key="1431">У вас нет прав разрешать себе или другим эксклюзивное аудио. Попросите у модератора эти права или пусть он разрешит вам эксклюзивный звук сам.</entry>
+  <entry key="1432">Я хотел бы получить разрешение на эксклюзивный звук.</entry>
+  <entry key="1433">Дать мне эксклюзивный звук (как альтернатива, кликните на ваш экран или нажмите F12)</entry>
+  <entry key="1434">Микрофон включён!</entry>
+  <entry key="1435">Микрофон выключен</entry>
+  <entry key="1436">Скрыть чат</entry>
+  <entry key="1437">Скрыть панель действий</entry>
+  <entry key="1438">Скрыть панель файлов</entry>
+  <entry key="1439">Скрыть меню действий</entry>
+  <entry key="1440">Скрыть общий экран</entry>
+  <entry key="1441">Скрыть доску</entry>
+  <entry key="1442">Показать статус микрофона в видео</entry>
+  <entry key="1443">Параметры расположения</entry>
+  <entry key="1444">Новое событие</entry>
+  <entry key="1445">Ссылки, защищённые паролем - это ссылки на комнаты, которые посылаются участникам при сохранении события в календаре, не в комнате! Это значит, что если вы сохраняете событие несколько раз с разными паролями, участники каждый раз получают новые ссылки с разными паролями. Но ссылки, посланные ранее, тоже работают!</entry>
+  <entry key="1446">Редактировать</entry>
+  <entry key="1447">Номеронабиратель SIP</entry>
+  <entry key="1448">Позвонить</entry>
+  <entry key="1449">Показать события календаря для контакта</entry>
+  <entry key="1450">Ваш дом!</entry>
+  <entry key="1451">Планировать митинги</entry>
+  <entry key="1452">Смотреть записи и интервью</entry>
+  <entry key="1453">Выбрать и начать конференцию</entry>
+  <entry key="1454">Управлять пользователями и правами</entry>
+  <entry key="1455">Управлять связями и исключать участников</entry>
+  <entry key="1456">Управлять группами пользователей</entry>
+  <entry key="1457">Управлять комнатами конференций</entry>
+  <entry key="1458">Управлять свойствами системы</entry>
+  <entry key="1459">Управлять метками и текстом</entry>
+  <entry key="1460">Конфигурировать LDAP и ADS</entry>
+  <entry key="1461">Экспорт/импорт системных бэкапов</entry>
+  <entry key="1462">Вам нужны права модератора или права на рисование на доске, загрузку, выгрузку, добавление и удаление файлов и папок.</entry>
+  <entry key="1463">Редактировать текст</entry>
+  <entry key="1464">Проф-р</entry>
+  <entry key="1465">Опубликовать</entry>
+  <entry key="1466">Начать публикацию</entry>
+  <entry key="1467">Остановить</entry>
+  <entry key="1468">Сервер публикации</entry>
+  <entry key="1469">Домен публикации</entry>
+  <entry key="1470">Имя публикации</entry>
+  <entry key="1471">Уменьшать ширину общего экрана при перемещении его влево</entry>
+  <entry key="1472">Уменьшать высоту общего экрана при перемещении его вниз</entry>
+  <entry key="1473">Уменьшать смещение x общего экрана при увеличении его ширины</entry>
+  <entry key="1474">Уменьшать смещение y общего экрана при увеличении его высоты</entry>
+  <entry key="1475">Настройки для трансляции видео конференции на другие сервисы:</entry>
+  <entry key="1476">Пожалуйста, сделайте экран общим для того, чтобы опубликовать его</entry>
+  <entry key="1477">Для того, чтобы начать запись, необходимо разрешение модератора</entry>
+  <entry key="1478">Вам необходимо разрешение на предоставление эксклюзивного аудио любому участнику, для этого вам необходимо быть модератором или иметь эксклюзивные права на вкл/выкл микрофонов.</entry>
+  <entry key="1479">Загрузить новый файл</entry>
+  <entry key="1480">Открыть настройки общего экрана в новом окне</entry>
+  <entry key="1481">Запросить подтверждение модератора</entry>
+  <entry key="1482">Запросить разрешение модератора на доступ к камере/микрофону</entry>
+  <entry key="1483">Получение обратной связи посредством опроса</entry>
+  <entry key="1484">Прошлые и текущие результаты опросов в виде графиков</entry>
+  <entry key="1485">Проголосовать, если существует опрос для этой комнаты</entry>
+  <entry key="1486">Изменить настройки камеры и микрофона</entry>
+  <entry key="1487">Подтвердить и покинуть комнату</entry>
+  <entry key="1488">Позвонить внешним участникам при помощи VoIP/SIP</entry>
+  <entry key="1489">Отправить приглашение с прямой ссылкой на эту комнату</entry>
+  <entry key="1490">Изменить настройки доски</entry>
+  <entry key="1491">Максимальный размер загружаемого файла</entry>
+  <entry key="1492">Запросить разрешение модератора на доступ к доске</entry>
+  <entry key="1493">Начать приватный чат</entry>
+  <entry key="1494">Все</entry>
+  <entry key="1495">Вы не можете начать приватный чат с собой.</entry>
+  <entry key="1496">Вы уже начали приватный чат с этим участником.</entry>
+  <entry key="1497">Вы действительно хотите удалить этот приватный чат?</entry>
+  <entry key="1498">Сервера</entry>
+  <entry key="1499">Сервера кластера</entry>
+  <entry key="1500">Имя Сервера</entry>
+  <entry key="1501">Адрес Сервера</entry>
+  <entry key="1502">Описание Сервера</entry>
+  <entry key="1503">СМС</entry>
+  <entry key="1504">Сообщение. Пользователю:</entry>
+  <entry key="1505">Что бы уменьшить время и интернет траффик вы можете воспользоватся командной строкой admin для копирования/восстановления/обновления: &lt;ol&gt; &lt;li&gt;войдите в установочную папку OM (например /opt/red5)&lt;/li&gt; &lt;li&gt;остановите OM (./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;выполняем ./admin.sh -b -file ~/today_om_backup.zip (создает резервную копию OM)&lt;/li&gt; &lt;li&gt;загрузите новый дистрибутив OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (перемещаем рабочую версию OM :))&lt;/li&gt; &lt;li&gt;распаковываем дистрибутив OM в папку /opt/red5&lt;/li&gt; &lt;li&gt;запускаем ./admin.sh -i -file ~/today_om_backup.zip (или './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' в случае когда база данных отличается от базы по умолчанию )&lt;/li&gt; &lt;li&gt;запускаем OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Общие комнаты для всех пользователей</entry>
+  <entry key="1507">Общие комнаты для текущей группы пользователей</entry>
+  <entry key="1508">Комнаты данного пользователя</entry>
+  <entry key="1509">Создать/редактировать комнату для этого события</entry>
+  <entry key="1510">Вы можете ввести несколько адресов в формате: Имя1 Фамилия1 &lt;адрес1&gt;,"Имя2 Фамилия2" &lt;адрес2&gt;,'Имя3 Фамилия3' &lt;адрес3&gt;, ...</entry>
+  <entry key="1511">Регулировать поток</entry>
+  <entry key="1512">Регулировать микрфон</entry>
+  <entry key="1513">Премодерируемый чат</entry>
+  <entry key="1514">Опубликовать сообщение</entry>
+  <entry key="1515">Открывать панель чата по умолчанию</entry>
+  <entry key="1516">Открывать панель файлов по умолчанию</entry>
+  <entry key="1517">Прошлый запрос</entry>
+  <entry key="1518">Каждый подчиненный сервер посылает запрос главному через 3 секунды (задается в конфигурации). Параметр lastPing дожен быть менше 1 минуты так, чтобы главный сервер использовал подчиненные сервера.</entry>
+  <entry key="1519">HTTP Порт</entry>
+  <entry key="1520">SOAP Админ</entry>
+  <entry key="1521">Пароль</entry>
+  <entry key="1522">Путь к приложению</entry>
+  <entry key="1523">Протокол</entry>
+  <entry key="1524">Исполняемый запрос</entry>
+  <entry key="1525">Активный</entry>
+  <entry key="1526">Сгенерировать URL</entry>
+  <entry key="1527">Тестирование сети</entry>
+  <entry key="1528">Автоматически определять видео окно</entry>
+  <entry key="1529">Подчёркнутый шрифт</entry>
+  <entry key="1530">Стиль шрифта</entry>
+  <entry key="1531">Разрешить использование стилей в чате</entry>
+  <entry key="1532">Цвет шрифта</entry>
+  <entry key="1533">Гиперссылка</entry>
+  <entry key="1534">Показать статистику сессии</entry>
+  <entry key="1535">Детализация сессии</entry>
+  <entry key="1536">Системный импорт</entry>
+  <entry key="1537">Включать загруженные файлы и записи в бэкап</entry>
+  <entry key="1538">Разрешить SIP транспорт в комнате</entry>
+  <entry key="1539">Вы действительно хотите дать слово этому участнику?</entry>
+  <entry key="1540">Укажите Ваш часовой пояс</entry>
+  <entry key="1541">конференц зал (1-25 участников)</entry>
+  <entry key="1542">ограниченная (1-150 участников)</entry>
+  <entry key="1543">интервью (1:1 встреча с записью)</entry>
+  <entry key="1544">Конфигурация с этим ключем уже существует, пожалуйста укажите другой ключ или измените существующий</entry>
+  <entry key="1545">Сохранение данных, подождите пожалуйста.</entry>
+  <entry key="1546">Добро пожаловать</entry>
+  <entry key="1547">Виджет, содержащий основную информацию о пользователе и ссылки на сайты поддержки</entry>
+  <entry key="1548">Виджеты</entry>
+  <entry key="1549">О программе</entry>
+  <entry key="1550">Наименование</entry>
+  <entry key="1551">Версия</entry>
+  <entry key="1552">Ревизия</entry>
+  <entry key="1553">Дата билда</entry>
+  <entry key="1554">Загрузка ...</entry>
+  <entry key="1555">сегодня</entry>
+  <entry key="1556">Янв</entry>
+  <entry key="1557">Фев</entry>
+  <entry key="1558">Март</entry>
+  <entry key="1559">Апр</entry>
+  <entry key="1560">Май</entry>
+  <entry key="1561">Июнь</entry>
+  <entry key="1562">Июль</entry>
+  <entry key="1563">Авг</entry>
+  <entry key="1564">Сен</entry>
+  <entry key="1565">Окт</entry>
+  <entry key="1566">Ноя</entry>
+  <entry key="1567">Дек</entry>
+  <entry key="1568">не посылать уведомление</entry>
+  <entry key="1569">обычный e-майл</entry>
+  <entry key="1570">iCal e-майл</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Конфигурировать OAuth2</entry>
+  <entry key="1573">Название</entry>
+  <entry key="1574">Активен</entry>
+  <entry key="1575">URL значка</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">URL запроса ключа</entry>
+  <entry key="1579">URL запроса токена</entry>
+  <entry key="1580">URL запроса данных</entry>
+  <entry key="1581">Настройка OAuth2</entry>
+  <entry key="1582">Имя пар-ра "логин"</entry>
+  <entry key="1583">Имя пар-ра "email"</entry>
+  <entry key="1584">Имя параметра "имя"</entry>
+  <entry key="1585">Имя пар-ра "фамилия"</entry>
+  <entry key="1586">Атрибуты запроса токена</entry>
+  <entry key="1587">Uri возврата</entry>
+  <entry key="1588">Вы можете ввести адрес в формате: Имя1 Фамилия1 &lt;адрес1&gt; или "Имя2 Фамилия2" &lt;адрес2&gt; или 'Имя3 Фамилия3' &lt;адрес3&gt; или адрес</entry>
+  <entry key="1589">Сообщить об отключении</entry>
+  <entry key="1590">Показать</entry>
+  <entry key="1591">Ваш аккаунт создан. Письмо с подтверждение было выслано. Теперь вы можете войти под своим именем.</entry>
+  <entry key="1592">Введенная дата начала раньше даты окончания.</entry>
+  <entry key="1593">Код выхода</entry>
+  <entry key="1594">Сообщения конвертации</entry>
+  <entry key="1595">Файл записи не найден</entry>
+  <entry key="1596">Добавить доску</entry>
+  <entry key="1597">Вы можете ввести адрес в формате: Имя1 Фамилия1 &lt;адрес1&gt; ИЛИ "Имя2 Фамилия2" &lt;адрес2&gt; ИЛИ 'Имя3 Фамилия3' &lt;адрес3&gt;</entry>
+  <entry key="1598">Безопасность</entry>
+  <entry key="1599">Доступ запрещён. У вас нет прав для входа в эту комнату.</entry>
+  <entry key="1600">Пересоздать</entry>
+  <entry key="1601">Подать заявку на доступ к микрофону</entry>
+  <entry key="1602">Запросить разрешение модератора на доступ к микрофону</entry>
+  <entry key="1603">желает сделать своё Аудио общим. Для того, чтобы разрешить или запретить участникам делать Аудио общим, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="1604">Разрешить этому пользователю публиковать своё Аудио</entry>
+  <entry key="1605">Удалить Аудио этого пользователя</entry>
+  <entry key="1606">Я хочу сделать моё Аудио общим</entry>
+  <entry key="1607">Вам разрешено сделать ваше Аудио общим</entry>
+	<entry key="install.wizard.install.header">Установка</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Для возможности
+				загрузки и импорта изображений на доску<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>ImageMagick</strong> на Ваш сервер, более
+					подробную информацию касающуюся установки можно посмотреть тут <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					Инструкцию по установке Вы можете найти здесь
+					<a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					однако в большинстве систем Линукс Вы можете установить его через Ваш 
+					менеджер пакетов (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Для возможности
+				импорта PDF файлов на доску<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>GhostScript</strong> на Ваш сервер, более подробную
+					информацию Вы можете посмотреть на сайте <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					Инструкции по установке Вы можете
+					найти здесь, однако в большинстве систем Линукс Вы можете установить его через Ваш 
+					менеджер пакетов (apt-get it).
+				</li>
+				<li>Установите <strong>SWFTools</strong> на Ваш сервер, более подробную информацию
+					можно найти на сайте <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					Некоторые дистрибутивы Линукс уже включают его
+					в свои менеджеры пакетов, посмотреть можно здесь <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					для установки рекомендуется <strong>SWFTools</strong> версии 0.9 так как 
+					предыдущая версия содержит баг который приводил к ошибке отображения размеров объекта 
+					на доске
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Для возможности
+				импорта файлов .doc, .docx, .ppt, .pptx, ... и прочих документов на
+				доску<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> запускается и прослушивает
+					порт 8100, подробности можно посмотреть здесь <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Для возможности
+				записи и импорта файлов .avi, .flv, .mov и .mp4 на доску<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>FFMpeg</strong>. Вы должны получить последнюю версию
+					FFMPEG! Для Windows Вы можете скачать программу с этого
+					сайта <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Пользователи Linux 
+					или OSx могут использовать одну из различных
+					Инструкций по установке из Сети. Вы должны установить libmp3lame!
+				</li>
+				<li>Установите <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_blank">http://sox.sourceforge.net/</a>.
+					Вы должны установить последнюю версию SoX! SoX 12.xx не будет
+					работать!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Если у Вас остались
+			вопросы или Вам требуется поддержка по установке или хостингу:</span></b>
+	
+	<br />
+	<br />
+	<b><span style="font-size: 1.2em">Поддержка сообщества:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Список рассылки</a></span>
+	<br />
+    <br />
+	<br />
+    <b> <span style="font-size: 1.4em">Это компании,
+        которые также оказывают коммерческую поддержку Apache OpenMeetings:</span></b>
+	<br />
+	<br />
+    
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Рекомендации
+			для настроек продукта<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			По умолчанию {0} использует интегрированную базу данных {1}. В 
+			продакшине Вы должны задуматься об использовании таких баз, как {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">Конфигурация базы данных</entry>
+	<entry key="install.wizard.db.step.dbtype">Выберите тип БД</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Укажите имя сервера БД</entry>
+	<entry key="install.wizard.db.step.port">Укажите порт БД</entry>
+	<entry key="install.wizard.db.step.dbname">Укажите имя базы данных</entry>
+	<entry key="install.wizard.db.step.user">Укажите пользователя БД</entry>
+	<entry key="install.wizard.db.step.pass">Укажите пароль БД</entry>
+	<entry key="install.wizard.db.step.check">Проверка</entry>
+	<entry key="install.wizard.db.step.errorprops">Невозможно взять конфигурацию</entry>
+	<entry key="install.wizard.db.step.nodriver">Невозможно загрузить требуемый драйвер БД, пожалуйста скачайте нужный архив jar, и перегрузите ОМ. Инструкции: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Ошибка проверки БД</entry>
+	<entry key="install.wizard.db.step.error.patch">Неожиданная ошибка при обновлении файла persistence.xml: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Проверка БД прошла успешно</entry>
+	<entry key="install.wizard.params.step1.userdata">Пользовательские данные</entry>
+	<entry key="install.wizard.params.step1.username">Логин</entry>
+	<entry key="install.wizard.params.step1.username.title">Введите логин пользователя</entry>
+	<entry key="install.wizard.params.step1.password">Пароль</entry>
+	<entry key="install.wizard.params.step1.password.title">Введите пароль</entry>
+	<entry key="install.wizard.params.step1.email">Электронная почта</entry>
+	<entry key="install.wizard.params.step1.email.title">Введите адрес электронной почты</entry>
+	<entry key="install.wizard.params.step1.tz">Часовой пояс пользователя</entry>
+	<entry key="install.wizard.params.step1.groupdata">Организация(Домен)</entry>
+	<entry key="install.wizard.params.step1.group">Наименование</entry>
+	<entry key="install.wizard.params.step1.group.title">Введите организацию по умолчанию</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Конфигурация</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Разрешить саморегистрацию (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Посылать сообщения новым пользователям (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Новые пользователи должны подтвердить свой Email (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">По умолчанию создать комнаты всех типов</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Электронная почта рассылки (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Введите адрес электронной почты с которой будет отправляться информация</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Сервер (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Введите адрес SMTP-Сервера</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Порт SMTP-сервера (по умолчению 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Введите порт SMTP-Сервера, обычно 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Пользователь (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Введите логин для электронной почты</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Пароль пользователя (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Введите пароль для электронной почты</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Включить проверку TLS на почтовом сервере</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Устанавливать адрес электронной
+					почты организатора, как адрес ответа на приглашения  (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Язык по умолчанию</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Шрифт для экспорта по умолчанию [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Конвертеры</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> смотрите также</entry>
+	<entry key="install.wizard.params.step3.installation">Установка</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools масштабирование</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Укажите разрешение (dpi), которое вы будите использовать для конвертации PDF в SWF</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">
+		DPI которое swftools будет использовать для конвертации PDF в SWF. По умолчанию 100 dpi.
+	</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Качество</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Укажите качество встроенного jpeg изображения. 0 плохое (маленькое), 100 высокое (большое). (по умолчанию:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">
+		Качество встроенного jpeg изображения. 0 плохое (маленькое),
+		100 высокое (большое). (по умолчанию:85)
+	</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Путь</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Укажите путь к swftools например C:/swftools (Windows) или или не заполняйте данное поле если путь к swftools задан в системных путях</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Вы можете проверить, настроен ли запуск swftools на Вашей системе
+		с помошью командной строки или shell или cmd-prompt набрав команду pdf2swf. Если будет показан
+		список опций оставьте это поле пустым, в противном случае вы должны
+		указать путь к pdf2swf на Вашей системе,
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Путь</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Укажите путь к ImageMagick, или не заполняйте данное поле если ImageMagick установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Путь</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Укажите путь к FFMPEG, или не заполняйте данное поле если FFMPEG установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Путь</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Укажите путь к SoX, или не заполняйте данное поле если SoX установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Путь</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Путь к библиотеке JOD (http://code.google.com/p/jodconverter), сконфигурируйте путь, указываюший на папку библиотеки JOD, которая содержит jodconverter-core-version.jar файл</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Путь для jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Путь к OpenOffice/LibreOffice (не обязательный) пожалуйста установите этот путь в случае когда jodconverter не в состоянии найти автоматически путь к  установленному OpenOffice/LibreOffice</entry>
+	<entry key="install.wizard.params.step3.officePath.text">
+		Путь к OpenOffice/LibreOffice (не обязательный) пожалуйста установите этот путь
+		в случае когда jodconverter не в состоянии найти
+		путь к установленному OpenOffice/LibreOffice
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Тип шифрования</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Класс шифрования</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Укажите имя класса для шифрования. НЕ ИЗМЕНЯЙТЕ УКАЗАННЫЙ КЛАСС ЕСЛИ ВЫ В ЭТОМ НЕ УВЕРЕНЫ</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Вы можете использовать заданный по умолчанию тип шифрования, который соответствует
+		функционалу PHP-MD5 или BSD-Style шифрованию, используя:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>.
+		Дополнительную информацию или описание создания собственного класса шифрования смотрите тут: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Пользовательский механизм шифрования</a> Вы можете изменить это
+		значение позже, НО созданные ранее Пользователи и Сессии могут быть
+		не доступны в дальнейшем
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Конфигурация red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Разрешить SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Разрешить интеграцию с red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">Префикс дла комнат SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Префикс для номеров телефонов для входа в комнаты</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">Окружение расширений SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Окружение расширений Asterisk</entry>
+
+	<entry key="install.wizard.install.desc">Пожалуйста нажмите кнопку "Закончить" для запуска установки!</entry>
+	<entry key="install.wizard.install.started">Пожалуйста подождите, идёт установка</entry>
+	<entry key="install.wizard.install.failed">Ошибка установки</entry>
+
+	<entry key="install.wizard.congrats.enter">Вход в приложение</entry>
+	<entry key="install.wizard.congrats.port">Если Ваш Red5-сервер запущен на другом порту или на другом домене</entry>
+	<entry key="install.wizard.congrats.config">измените конфигурацию клиента</entry>
+	<entry key="install.wizard.congrats.mail">Список рассылки</entry>
+	<entry key="install.wizard.congrats.commercial">Это компании,
+		которые так же оказывают коммерческую поддержку Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
new file mode 100644
index 0000000..87285da
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencia</entry>
+  <entry key="2">Stretnutie</entry>
+  <entry key="3">Podujatia</entry>
+  <entry key="4">Nastavenia</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrácia</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Nahrávanie</entry>
+  <entry key="9">Žiadny súbor nie je k dispozícií</entry>
+  <entry key="10">Nahrávanie</entry>
+  <entry key="11">Pripojení používatelia</entry>
+  <entry key="12">Začať konferenciu</entry>
+  <entry key="13">Moje meno</entry>
+  <entry key="14">Videokonferencia</entry>
+  <entry key="15">Nahrať súbor</entry>
+  <entry key="16">Načítať znovu zoznam</entry>
+  <entry key="17">K hlavnému súboru</entry>
+  <entry key="18">Nové hlasovanie</entry>
+  <entry key="19">Nové hlasovanie pre konferenciu</entry>
+  <entry key="20">Otázka</entry>
+  <entry key="21">Typ hlasovania</entry>
+  <entry key="22">Vytvoriť</entry>
+  <entry key="23">Všetci pripojení používatelia prijímajú správu s novým hlasovaním</entry>
+  <entry key="24">Vytvoriť hlasovanie</entry>
+  <entry key="25">Zrušiť</entry>
+  <entry key="26">Áno/Nie</entry>
+  <entry key="27">Čísla 1-10</entry>
+  <entry key="28">Hlasovanie</entry>
+  <entry key="29">Musíte byť moderátor pre vytvorenie otázky</entry>
+  <entry key="30">Váš hlas bol zaznamenaný</entry>
+  <entry key="31">V tomto prieskume ste už hlasovali</entry>
+  <entry key="32">Hlasovať</entry>
+  <entry key="33">Vaša odpoveď</entry>
+  <entry key="34">Áno</entry>
+  <entry key="35">Nie</entry>
+  <entry key="36">chce vedieť</entry>
+  <entry key="37">Výsledky hlasovania</entry>
+  <entry key="38">Otázka</entry>
+  <entry key="39">Výsledky</entry>
+  <entry key="40">Odpovede</entry>
+  <entry key="41">Žiadne hlasovanie nebolo vytvorené</entry>
+  <entry key="42">Hlasovať</entry>
+  <entry key="43">Stretnutie(max 6 miest)</entry>
+  <entry key="44">Konferencia(max 25 miest)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Ostatné miesta</entry>
+  <entry key="47">Už vybrané</entry>
+  <entry key="48">vstup</entry>
+  <entry key="49">Moderátor opustil stretnutie</entry>
+  <entry key="50">Systémové informácie</entry>
+  <entry key="51">Vybrať zariadenie</entry>
+  <entry key="52">Vybrať webkameru</entry>
+  <entry key="53">Vybrať mikrofón</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Zrušiť</entry>
+  <entry key="56">Musíte sa znovu pripojiť</entry>
+  <entry key="57">Upraviť nastavenia</entry>
+  <entry key="58">Kurz</entry>
+  <entry key="59">Jazyk</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Zrušiť</entry>
+  <entry key="62">Zmazať tabuľu</entry>
+  <entry key="63">Chcete zmazať tabuľu pred vložením nového obrázka?</entry>
+  <entry key="64">Nepýtať sa ma znova</entry>
+  <entry key="65">Nie</entry>
+  <entry key="66">Zmeniť nastavenia</entry>
+  <entry key="67">Potvrdiť žiadosť na zmazanie tabule</entry>
+  <entry key="68">Informácie o používateľovi</entry>
+  <entry key="69">Zmazať tabuľu</entry>
+  <entry key="70">Zrušiť</entry>
+  <entry key="71">Prerobiť</entry>
+  <entry key="72">Vybrať objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Farba</entry>
+  <entry key="75">Nakresliť čiaru</entry>
+  <entry key="76">Podčiarknuť</entry>
+  <entry key="77">Obdĺžnik</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Šípka</entry>
+  <entry key="80">Zmazať vybranú položku</entry>
+  <entry key="81">Požiadať o moderáciu</entry>
+  <entry key="82">Aplikovať</entry>
+  <entry key="83">Zrušiť</entry>
+  <entry key="84">Nemám otázku</entry>
+  <entry key="85">Zatvoriť</entry>
+  <entry key="86">ležatý</entry>
+  <entry key="87">hrubý</entry>
+  <entry key="88">ČAKÁM</entry>
+  <entry key="89">Používateľ požiadal o moderáciu. Môžte mu sprístupniť len prístup k tabuli, alebo plnú moderáciu. Používateľ:</entry>
+  <entry key="90">Prijať</entry>
+  <entry key="91">Odmietnuť</entry>
+  <entry key="92">Zrušiť</entry>
+  <entry key="93">Posielanie žiadosti nasledovným používateľom</entry>
+  <entry key="94">Potvrdené</entry>
+  <entry key="95">Odmietnuté</entry>
+  <entry key="96">Zmeniť moderátora</entry>
+  <entry key="97">Nie ste moderátorom</entry>
+  <entry key="98">Moderátor</entry>
+  <entry key="99">Táto miestnosť je už obsadená</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">Zatvoriť</entry>
+  <entry key="102">chyba vstupných údajov</entry>
+  <entry key="103">Rozlíšujte veľké a malé písmena a minimálne 4 znaky</entry>
+  <entry key="104">Heslo musí mať aspoň 4 znaky</entry>
+  <entry key="105">Používateľské meno už existuje</entry>
+  <entry key="106">Email už je zaregistrovaný</entry>
+  <entry key="107">Systémová chyba, kontaktujte administrátora</entry>
+  <entry key="108">Prihlásenie</entry>
+  <entry key="109">Meno a email</entry>
+  <entry key="110">Heslo</entry>
+  <entry key="111">Jazyk</entry>
+  <entry key="112">Prihlásiť sa</entry>
+  <entry key="113">Zaregistrovať sa</entry>
+  <entry key="114">Používateľské meno</entry>
+  <entry key="115">Heslo</entry>
+  <entry key="116">Znova heslo</entry>
+  <entry key="117">Meno</entry>
+  <entry key="118">Priezvisko</entry>
+  <entry key="119">Email</entry>
+  <entry key="120">Krajina</entry>
+  <entry key="121">Registrovať</entry>
+  <entry key="122">Zrušiť</entry>
+  <entry key="123">Nie ste členom?</entry>
+  <entry key="124">Domov</entry>
+  <entry key="125">Používatelia</entry>
+  <entry key="126">Skupiny</entry>
+  <entry key="127">Spoločnosti</entry>
+  <entry key="128">Miestnosti</entry>
+  <entry key="129">Verejnosť</entry>
+  <entry key="130">Spoločnosť</entry>
+  <entry key="131">Vstup</entry>
+  <entry key="132">Prihlásenie</entry>
+  <entry key="133">Heslo</entry>
+  <entry key="134">Znova heslo</entry>
+  <entry key="135">Titul/Meno</entry>
+  <entry key="136">Priezvisko</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Narodeniny</entry>
+  <entry key="139">Ulica/Číslo</entry>
+  <entry key="140">PSČ/Mesto</entry>
+  <entry key="141">Krajina</entry>
+  <entry key="142">Adresa</entry>
+  <entry key="143">Údaje používateľa</entry>
+  <entry key="144">Uložiť</entry>
+  <entry key="145">Uložiť</entry>
+  <entry key="146">ID používateľa</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Meno</entry>
+  <entry key="149">Priezvisko</entry>
+  <entry key="150">Ďalšie</entry>
+  <entry key="151">Predchádzajúce</entry>
+  <entry key="152">Zmazať nahrávku</entry>
+  <entry key="153">Zrušiť</entry>
+  <entry key="154">Zmazať</entry>
+  <entry key="155">Nové nahrávanie</entry>
+  <entry key="156">Obnoviť nahrávanie</entry>
+  <entry key="157">Zmazať nahrávku</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Zablokované</entry>
+  <entry key="160">Povolené</entry>
+  <entry key="161">Spoločnosti</entry>
+  <entry key="162">Kalendár</entry>
+  <entry key="163">Zatvoriť</entry>
+  <entry key="164">ID spoločnosti</entry>
+  <entry key="165">Meno</entry>
+  <entry key="166">Používateľ</entry>
+  <entry key="167">Moderátor</entry>
+  <entry key="168">Administrátor</entry>
+  <entry key="169">User level</entry>
+  <entry key="170">Spoločnosť</entry>
+  <entry key="171">Meno</entry>
+  <entry key="172">Pridať organizáciu</entry>
+  <entry key="173">Pridať organizáciu</entry>
+  <entry key="174">Zrušiť</entry>
+  <entry key="175">Pridať</entry>
+  <entry key="176">Odstrániť organizáciu</entry>
+  <entry key="177">Používateľ</entry>
+  <entry key="178">Pridať používateľa</entry>
+  <entry key="179">Zmazať používateľa</entry>
+  <entry key="180">Pridať používateľa do spoločnosti</entry>
+  <entry key="181">Hľadať používateľa</entry>
+  <entry key="182">Hľadať</entry>
+  <entry key="183">Používateľ</entry>
+  <entry key="184">Spoločnosť</entry>
+  <entry key="185">Zadať</entry>
+  <entry key="186">Miestnosť</entry>
+  <entry key="187">Miestnosti</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Meno</entry>
+  <entry key="190">Verejné</entry>
+  <entry key="191">Spoločnosti</entry>
+  <entry key="192">Miestnosti</entry>
+  <entry key="193">Meno</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Verejné</entry>
+  <entry key="196">Komentovať</entry>
+  <entry key="197">Uložiť a exportovať</entry>
+  <entry key="198">Nahrať</entry>
+  <entry key="199">Uložiť ako</entry>
+  <entry key="200">Meno súboru</entry>
+  <entry key="201">Meno súboru</entry>
+  <entry key="202">Zrušiť</entry>
+  <entry key="203">Uložiť</entry>
+  <entry key="204">Chyba</entry>
+  <entry key="205">Nahrávanie</entry>
+  <entry key="206">Objekty nahrávané</entry>
+  <entry key="207">Synchronizujem, prosím čakajte</entry>
+  <entry key="208">Nahrávanie súboru</entry>
+  <entry key="209">Synchronizujem, prosím čakajte</entry>
+  <entry key="210">Zmazať tabuľu</entry>
+  <entry key="211">Zmazať tabuľu, všetky objektu budú vymazané</entry>
+  <entry key="212">Potvrdiť pred nahratím súboru</entry>
+  <entry key="213">Zaslať pozvanie</entry>
+  <entry key="214">Zaslať pozvanie</entry>
+  <entry key="215">Predmet</entry>
+  <entry key="216">Príjemca</entry>
+  <entry key="217">Správa</entry>
+  <entry key="218">Poslať</entry>
+  <entry key="219">Zrušiť</entry>
+  <entry key="220">Poslať</entry>
+  <entry key="221">Informácie o používateľovi</entry>
+  <entry key="222">Vaša prezývka pre túto miestnosť</entry>
+  <entry key="223">Prezývka</entry>
+  <entry key="224">Meno</entry>
+  <entry key="225">Priezvisko</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Jazyk</entry>
+  <entry key="228">Zadať</entry>
+  <entry key="229">Nahrávanie</entry>
+  <entry key="230">Nahrávanie dát, prosím čakajte</entry>
+  <entry key="231">Nesprávne heslo</entry>
+  <entry key="232">Zadajte 2 rovnaké heslá</entry>
+  <entry key="233">Nesprávne heslo</entry>
+  <entry key="234">Zadali ste nesprávny email</entry>
+  <entry key="235">Registrácia kompletná</entry>
+  <entry key="236">Vaše konto bolo vytvorené. Môžte sa prihlásiť.</entry>
+  <entry key="237">Niekto už zdieľa svoju plochu</entry>
+  <entry key="238">Zdieľanie zakázané</entry>
+  <entry key="239">Zdieľať/nahrávať plochu</entry>
+  <entry key="240">Nemožné synchronizovať plochu. Požiadajte moderátora o zníženie kvality.</entry>
+  <entry key="241">Plocha:</entry>
+  <entry key="242">Kreslenie</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Súbory</entry>
+  <entry key="246">Členovia</entry>
+  <entry key="247">Stiahnuť pôvodný dokument</entry>
+  <entry key="248">Stiahnuť PDF dokument</entry>
+  <entry key="249">Nahrať prezentáciu na tabuľu</entry>
+  <entry key="250">Konfigurácia</entry>
+  <entry key="251">Ťahať tento objekt</entry>
+  <entry key="252">Zmeniť veľkosť objektu</entry>
+  <entry key="253">%</entry>
+  <entry key="254"></entry>
+  <entry key="255">Prvá strana</entry>
+  <entry key="256">Predchádzajúca strana</entry>
+  <entry key="257">Ďalšia strana</entry>
+  <entry key="258">Posledná strana</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Pán</entry>
+  <entry key="262">Pani</entry>
+  <entry key="263">Nastavenie</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kľúč</entry>
+  <entry key="266">Nastavenie</entry>
+  <entry key="267">Kľúč</entry>
+  <entry key="268">Posledná zmena</entry>
+  <entry key="269">Obnovené</entry>
+  <entry key="270">Komentovať</entry>
+  <entry key="271">Hodnota</entry>
+  <entry key="272"></entry>
+  <entry key="273">Použivatelia</entry>
+  <entry key="274">Zmazať používateľa zo spoločnosti</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Tento používateľ je už členom tejto spoločnosti</entry>
+  <entry key="277">Správy</entry>
+  <entry key="278">Rýchle odkazy</entry>
+  <entry key="279">Choď do miestnosti</entry>
+  <entry key="280">Choď do miestnosti</entry>
+  <entry key="281">Pomoc a podpora</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Nahlásiť chybu</entry>
+  <entry key="285">viac</entry>
+  <entry key="286">Stránka projektu (http://openmeetings.apache.org)</entry>
+  <entry key="287">Zoznam používateľov (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Zapamätať prihlásenie</entry>
+  <entry key="289">Obsah</entry>
+  <entry key="290">My home page</entry>
+  <entry key="291">My scheduled meetings</entry>
+  <entry key="292">My scheduled events</entry>
+  <entry key="293">Public meetings</entry>
+  <entry key="294">Private meetings</entry>
+  <entry key="295">Public events</entry>
+  <entry key="296">Private events</entry>
+  <entry key="297">Public content</entry>
+  <entry key="298">Private content</entry>
+  <entry key="299">Personal content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderácia</entry>
+  <entry key="302">Mám otázku</entry>
+  <entry key="303">Hlasovania</entry>
+  <entry key="304">Vybrať súbor</entry>
+  <entry key="305">Nastavenia</entry>
+  <entry key="306">Nastavenie mikrofónu a kamery</entry>
+  <entry key="307">Nastavenie tabuli</entry>
+  <entry key="308">Východ</entry>
+  <entry key="309">Späť k miestnostiam</entry>
+  <entry key="310">Odhlásiť</entry>
+  <entry key="311">Zabudli ste heslo?</entry>
+  <entry key="312">Resetovať heslo</entry>
+  <entry key="313">Using email address</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Váš email</entry>
+  <entry key="316">Vaše prihlásenie</entry>
+  <entry key="317">Poslať email s reštartovacím odkazom</entry>
+  <entry key="318">Žiadny takýto email neexistuje. Uistite sa, že ste zadali rovnaký email ako pri registrácií.</entry>
+  <entry key="319">Prosím zadajte email alebo používateľské meno</entry>
+  <entry key="320">There is no user connected to this username</entry>
+  <entry key="321">Email bol zaslaný</entry>
+  <entry key="322">Chyba</entry>
+  <entry key="323">Správa</entry>
+  <entry key="324">Používateľ sa nenašiel</entry>
+  <entry key="325">Resetovať vaše heslo</entry>
+  <entry key="326">Prihlásenie</entry>
+  <entry key="327">Zmeniť heslo</entry>
+  <entry key="328">Nové heslo</entry>
+  <entry key="329">Znova zadajte heslo</entry>
+  <entry key="330">Vami zadané heslo nie je identické</entry>
+  <entry key="331">Rozlišujte veľké/malé písmená a viac ako 4 znaky</entry>
+  <entry key="332">Heslo nastavené. Môžte sa prihlásiť.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Chyba. Kontaktujte administrátora.</entry>
+  <entry key="335">Používateľské meno sa nenašlo</entry>
+  <entry key="336">Nesprávne heslo</entry>
+  <entry key="337">Úspešne odhlásený</entry>
+  <entry key="338">Registrácia nemožná</entry>
+  <entry key="339">Chybný email</entry>
+  <entry key="340">Duplikátny názov súboru, prosí, zadajte iný</entry>
+  <entry key="341">Názov súboru príliš krátky</entry>
+  <entry key="342">Nemožno uložiť adresu</entry>
+  <entry key="343">Používateľ pridaný, ale je nutné priradiť ho k spoločnosti.</entry>
+  <entry key="344">Nový záznam</entry>
+  <entry key="345">No field found for the ID</entry>
+  <entry key="346">No label found</entry>
+  <entry key="347">Autorízácia administrátorom sa vyžaduje</entry>
+  <entry key="348">Jazykový editor</entry>
+  <entry key="349">Jazyk</entry>
+  <entry key="350">Label ID</entry>
+  <entry key="351">Label name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Field values</entry>
+  <entry key="354">Label name</entry>
+  <entry key="355">Label value</entry>
+  <entry key="356">Label ID</entry>
+  <entry key="357">You have deleted the label</entry>
+  <entry key="358">Invalid label ID</entry>
+  <entry key="359">Nemôžte zmazať toto pole</entry>
+  <entry key="360">Export</entry>
+  <entry key="361">Musíte sa odhlásiť pre uloženie zmien.</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">Delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">prvý</entry>
+  <entry key="369">predchádzajúci</entry>
+  <entry key="370">ďalší</entry>
+  <entry key="371">posledný</entry>
+  <entry key="372">používateľ hovorí (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">vypnúť/zapnúť zvuk</entry>
+  <entry key="374">Systém</entry>
+  <entry key="375">Vaše nastavenie</entry>
+  <entry key="376">Zdravím</entry>
+  <entry key="377">Upraviť profil</entry>
+  <entry key="378">Nová správa</entry>
+  <entry key="379">Nahrať nový obrázok</entry>
+  <entry key="380">Exportovať používateľove údaje</entry>
+  <entry key="381">All organisations must already exist</entry>
+  <entry key="382">Začať exportovať</entry>
+  <entry key="383">By organisation</entry>
+  <entry key="384">Start export</entry>
+  <entry key="385">Import user data</entry>
+  <entry key="386">Choose users.xml</entry>
+  <entry key="387">Importovať</entry>
+  <entry key="388">Exportovať do XML</entry>
+  <entry key="389">Vybrať jazyk dokumentu pre import</entry>
+  <entry key="390">Importovať</entry>
+  <entry key="391">Uložiť ako</entry>
+  <entry key="392">Meno</entry>
+  <entry key="393">Komentár</entry>
+  <entry key="394">Uložiť</entry>
+  <entry key="395">Nahrávky</entry>
+  <entry key="396">Prehliadač nahrávok</entry>
+  <entry key="397">Nahrávky verejných a súkromných miestností</entry>
+  <entry key="398">Používatelia</entry>
+  <entry key="399">Pripojený</entry>
+  <entry key="400"></entry>
+  <entry key="401">Používatelia v tejto miestnosti</entry>
+  <entry key="402">Obnoviť</entry>
+  <entry key="403">Miesta sú obsadené</entry>
+  <entry key="404">Kliknite na miestnosť pre informácie o miestnosti</entry>
+  <entry key="405">Chat s používateľmi v tejto miestnosti</entry>
+  <entry key="406">Miestnosť</entry>
+  <entry key="407">Používatelia v tejto miestnosti</entry>
+  <entry key="408">od</entry>
+  <entry key="409">Prehrať nahrávku</entry>
+  <entry key="410">Dĺžka</entry>
+  <entry key="411">Dátum</entry>
+  <entry key="412">Režim nahrávania</entry>
+  <entry key="413">Prehrať túto nahrávku</entry>
+  <entry key="414">Prehrať/Pauza</entry>
+  <entry key="415">Nahrať túto miestnosť</entry>
+  <entry key="416">Zastaviť nahrávanie</entry>
+  <entry key="417">Nahrávanie</entry>
+  <entry key="418">Niekto už nahráva túto miestnosť</entry>
+  <entry key="419">Nahrávanie. Používateľ:</entry>
+  <entry key="420">Zrušiť</entry>
+  <entry key="421">Nahrávanie bude zrušené a neuloží sa</entry>
+  <entry key="422">výsledok</entry>
+  <entry key="423">Zavrieť toto okno a zhrnúť nahrávanie</entry>
+  <entry key="424">Zmeniť farbu</entry>
+  <entry key="425">Vybrať farbu</entry>
+  <entry key="426">Znemožniť/umožniť farbu</entry>
+  <entry key="427">Zmeniť farbu výplne</entry>
+  <entry key="428">Znemožniť/umožniť farbu výplne</entry>
+  <entry key="429">Zmeniť širku</entry>
+  <entry key="430">Zatvoriť</entry>
+  <entry key="431">Zmeniť veľkosť písma</entry>
+  <entry key="432">Zmazať nahrávku</entry>
+  <entry key="433">Hosť</entry>
+  <entry key="434">:</entry>
+  <entry key="435">Meno</entry>
+  <entry key="436">Miestnosť</entry>
+  <entry key="437">Dátum</entry>
+  <entry key="438">Zrušiť</entry>
+  <entry key="439">Začať</entry>
+  <entry key="440">Meno</entry>
+  <entry key="441">Dátum</entry>
+  <entry key="442">Delete server chat log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Poslať správu</entry>
+  <entry key="445">Emotikony</entry>
+  <entry key="446">Emotikony</entry>
+  <entry key="447">Vybrať zariadenie</entry>
+  <entry key="448">Audio a video</entry>
+  <entry key="449">Iba audio</entry>
+  <entry key="450">Video iba</entry>
+  <entry key="451">Žiadne audio/video (obrázok)</entry>
+  <entry key="452">Žiadne audio/video z vášho počítača nie je publikované</entry>
+  <entry key="453">Po</entry>
+  <entry key="454">Ut</entry>
+  <entry key="455">Str</entry>
+  <entry key="456">Štv</entry>
+  <entry key="457">Pia</entry>
+  <entry key="458">So</entry>
+  <entry key="459">Ne</entry>
+  <entry key="460">Pondelok</entry>
+  <entry key="461">Utorok</entry>
+  <entry key="462">Streda</entry>
+  <entry key="463">Štvrtok</entry>
+  <entry key="464">Piatok</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Nedela</entry>
+  <entry key="467">KT</entry>
+  <entry key="468">Kalendár týždeň</entry>
+  <entry key="469">Január</entry>
+  <entry key="470">Február</entry>
+  <entry key="471">Marec</entry>
+  <entry key="472">Apríl</entry>
+  <entry key="473">Máj</entry>
+  <entry key="474">Jún</entry>
+  <entry key="475">Júl</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Október</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalendár</entry>
+  <entry key="482">Participujúci</entry>
+  <entry key="483">Zobraziť nastavenie rozloženia</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">šírka | výška</entry>
+  <entry key="486">Video kontajner</entry>
+  <entry key="487">Moderátorský kontajner</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tabuľový kontajner</entry>
+  <entry key="490">Povolený</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">šírka | výška</entry>
+  <entry key="493">Kontajner dokumentov, chatu a participantov</entry>
+  <entry key="494">Povolený</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">šírka | výška</entry>
+  <entry key="497">Moderátor opustil miestnosť. V tomto momente nikto neprezentuje.</entry>
+  <entry key="498">V tejto miestnosti nie je moderátor, ale sú tu participujúci. Musíte požiadať o moderáciu alebo počkať.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Pozvanie</entry>
+  <entry key="501">Správa od:</entry>
+  <entry key="502">Správa:</entry>
+  <entry key="503">Pre participáciu v tejto miestnosti kliknite na tento link:</entry>
+  <entry key="504">Kliknite sem pre vstup do miestnosti:</entry>
+  <entry key="505">Ak máte problém s odkazom, skopírujte ho do vášho prehliadača:</entry>
+  <entry key="506">{0} prihláseniep</entry>
+  <entry key="507">Your userdata</entry>
+  <entry key="508">prihlásenie</entry>
+  <entry key="509">Heslo</entry>
+  <entry key="510">Email</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} prihlásenie</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Kliknite na tento link pre zadanie nového hesla</entry>
+  <entry key="515">Kliknite sem pre zadanie nového hesla</entry>
+  <entry key="516">Ak máte problémy s týmto odkazom, skopírujte si ho priamo do vyhľadávača:</entry>
+  <entry key="517">Reset hesla</entry>
+  <entry key="518">Prosím zadajte správny dátum vo formáte 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Prosím zadajte správny email vo forme name@mail.com</entry>
+  <entry key="520">Prosím zadajte číslo, napríklad 1.00</entry>
+  <entry key="521">Prosím zadajte celé číslo, napríklad 100</entry>
+  <entry key="522">Prosím zadajte platné telefónne číslo, napríklad +49 0123 123123</entry>
+  <entry key="523">Prosím zadajte správny čas, napríklad 12:23 (hh:mm)</entry>
+  <entry key="524">Chránené heslom</entry>
+  <entry key="525">Heslo</entry>
+  <entry key="526">Validačná doba</entry>
+  <entry key="527">Nekonečné</entry>
+  <entry key="528">Obdobie</entry>
+  <entry key="529">Jednorázové</entry>
+  <entry key="530">Platné od</entry>
+  <entry key="531">Platné do</entry>
+  <entry key="532">Pozvanie do {0}</entry>
+  <entry key="533">Žiadna pozvánka pre tento kód neexistuje</entry>
+  <entry key="534">Toto pozvanie už bolo použité</entry>
+  <entry key="535">Pozývací kód je neplatný</entry>
+  <entry key="536">Heslo</entry>
+  <entry key="537">Skontrolovať heslo</entry>
+  <entry key="538">Neplatné heslo</entry>
+  <entry key="539">Audio/video</entry>
+  <entry key="540">Synchronizovať audio/video</entry>
+  <entry key="541">Prihlásenie je správne, ale stretnutie nie je aktívne</entry>
+  <entry key="542">ID miestnosti nie je prihlásené alebo nemá administrátorské práva. SOAP brána potrebuje používateľa s administrátorskými právami na vloženie nového používateľa.</entry>
+  <entry key="543">This Session has no remoteuser-data connected. You did not call the SOAP gateway before accessing the application or you are using a wrong session ID</entry>
+  <entry key="544">The recorder is currently beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">os x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">os y</entry>
+  <entry key="549">š</entry>
+  <entry key="550">šírka</entry>
+  <entry key="551">v</entry>
+  <entry key="552">výška</entry>
+  <entry key="553">Zmeniť priehľadnosť</entry>
+  <entry key="554">Otvoriť prehliadač</entry>
+  <entry key="555">Zatvoriť prehliadač</entry>
+  <entry key="556">Pripojenie na server zlyhalo</entry>
+  <entry key="557">Ukazovátko</entry>
+  <entry key="558">Synchronizovanie</entry>
+  <entry key="559">Synchronizovanie, prosím čakajte</entry>
+  <entry key="560">&lt;u&gt;Stiahnúť ako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Stiahnúť ako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Stiahnúť ako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Stiahnúť ako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Stiahnúť ako TIF&lt;/u&gt;</entry>
+  <entry key="565">Pripomienka</entry>
+  <entry key="566">Kategória</entry>
+  <entry key="567">Opakovanie</entry>
+  <entry key="568">žiadne</entry>
+  <entry key="569">Umiestnenie</entry>
+  <entry key="570">Začiatok</entry>
+  <entry key="571">Koniec</entry>
+  <entry key="572">Názov</entry>
+  <entry key="573">Komentár</entry>
+  <entry key="574">Pozvať ľudí</entry>
+  <entry key="575">Denne</entry>
+  <entry key="576">Mesačne</entry>
+  <entry key="577">Ročne</entry>
+  <entry key="578">Stretnutie končí až v čase neskoršom ako začalo</entry>
+  <entry key="579">Prosím vložte názov</entry>
+  <entry key="580">Zprava doľava</entry>
+  <entry key="581">Aktivovať ak píšete sprava doľava</entry>
+  <entry key="582">Tabuľa</entry>
+  <entry key="583">Pozerať nahrávky stretnutí</entry>
+  <entry key="584">Stretnutie - make a conference with between 4 and 16 users&lt;br/&gt;and everybody will have audio and video access</entry>
+  <entry key="585">Event - make a conference with up to 200 participents&lt;br/&gt;but only the moderator will have audio and video access</entry>
+  <entry key="586">Create users, rooms, organisations&lt;br/&gt; and change configuration</entry>
+  <entry key="587">Používatelia v tejto miestnosti</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Prihlásenie</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Nahrávam dokument. Počkajte pokiaľ všetci klienti nebudú zosynchronizovaní.</entry>
+  <entry key="592">Nahratie kompletné, konvertujem dokument</entry>
+  <entry key="593">Začať nahrávanie</entry>
+  <entry key="594">Nahrať a importovať dialóg. Prosím vyberte súbor.</entry>
+  <entry key="595">Zrušiť</entry>
+  <entry key="596">Vybrať súbor</entry>
+  <entry key="597">Pripojenia</entry>
+  <entry key="598">Hodnota</entry>
+  <entry key="599">Stream ID</entry>
+  <entry key="600">Prihlásenie</entry>
+  <entry key="601">Pripojený od</entry>
+  <entry key="602">Miestnosť / Oblasť</entry>
+  <entry key="603">Vyhodiť používateľa</entry>
+  <entry key="604">Vyhodiť používateľa</entry>
+  <entry key="605">Naozaj chcete vyhodiť tohto klienta z miestnosti?</entry>
+  <entry key="606">Vaše stretnutie bolo zavreté administrátorom alebo moderátorom.</entry>
+  <entry key="607">Telefón</entry>
+  <entry key="608">Používateľ je moderátorom tejto miestnosti</entry>
+  <entry key="609">Používateľ má právo kresliť na tabuľu</entry>
+  <entry key="610">(Re) štartovať audio/video alebo zmeniť nastavenia zaradenia</entry>
+  <entry key="611">Povoliť tomuto používateľovi kresliť na tabuľu</entry>
+  <entry key="612">Odobrať právo kresliť na tabuľu</entry>
+  <entry key="613">Používatelia</entry>
+  <entry key="614">Súbory</entry>
+  <entry key="615">Tabuľa</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Váš účet je priradený k viacerým spoločnostiam.Prosím vyberte si jednu pre túto miestnosť.</entry>
+  <entry key="618">Miestnosť je už obsadená</entry>
+  <entry key="619">Typ miestnosti</entry>
+  <entry key="620">Miestnosť</entry>
+  <entry key="621">Čas</entry>
+  <entry key="622">Clickjobfair - Pripomienka</entry>
+  <entry key="623">Správa od používateľa:</entry>
+  <entry key="624">Správa:</entry>
+  <entry key="625">Kliknite na tento odkaz pre účasť na konferencií:</entry>
+  <entry key="626">Kliknite tu pre vstup do miestnosti</entry>
+  <entry key="627">Ak máte problém s odkazom, prosím skopírujte ho priamo do prehliadača:</entry>
+  <entry key="628">Hladať vnútorne</entry>
+  <entry key="629">Pridať externý</entry>
+  <entry key="630">Meno</entry>
+  <entry key="631">Priezvisko</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Potvrdiť odhlásenie</entry>
+  <entry key="634">Chcete naozaj odísť?</entry>
+  <entry key="635">Akcia</entry>
+  <entry key="636">Demo miestnosť</entry>
+  <entry key="637">Demo čas</entry>
+  <entry key="638">Časovač stretnutia</entry>
+  <entry key="639">This room is a demo room. You will be automatically logged off in:</entry>
+  <entry key="640">Moderované</entry>
+  <entry key="641">Prosím počkajte na vstup moderátora do miestnosti</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Prichádzajúce zdieľanie plochy</entry>
+  <entry key="644">Prichádza nové zdieľanie plochy od tohto používateľa:</entry>
+  <entry key="645">Začať zdieľanie</entry>
+  <entry key="646">Pridať nové stretnutie</entry>
+  <entry key="647">Miestnosť</entry>
+  <entry key="648">Miestnosť</entry>
+  <entry key="649">Moderácia</entry>
+  <entry key="650">Moderovať používateľov</entry>
+  <entry key="651">Moderovať miestnosti</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Chcete aby sa tento používateľ stal moderátorom spoločnosti?</entry>
+  <entry key="654">Prosím zvoľte spoločnosť pred pridaním používateľa</entry>
+  <entry key="655">Spoločnosť - moderátor</entry>
+  <entry key="656">Chcete naozaj vymazať tohto používateľa zo spoločnosti?</entry>
+  <entry key="657">Tento používateľ je moderátor</entry>
+  <entry key="658">Tento používateľ nie je moderátor</entry>
+  <entry key="659">Chcete aby tento používateľ bol moderátorom tejto spoločnosti?</entry>
+  <entry key="660">Pridať alebo zmazať používateľov/miestnosti zo spoločnosti</entry>
+  <entry key="661">Chcete naozaj zmazať túto nahrávku?</entry>
+  <entry key="662">Chcete naozaj zmazať tohto používateľa z vašej spoločnosti?</entry>
+  <entry key="663">Nemôžte zmazať vlastného používateľa</entry>
+  <entry key="664">Táto metóda potrebuje administrátorský prístup</entry>
+  <entry key="665">Nie je žiadne stretnutie spojené s týmto ID</entry>
+  <entry key="666">Toto je administrátorsky/moderátorsky účet. Môžte zmeniť tento účet cez administračný panel.</entry>
+  <entry key="667">Pre dokončenie registrácie kliknite na nasledujúci odkaz</entry>
+  <entry key="668">Kliknite pre overenie vášho emailu</entry>
+  <entry key="669">Žiadny používateľ sa nenašiel pre tento hash</entry>
+  <entry key="670">Tento používateľ je už aktivovaný</entry>
+  <entry key="671">Úspešne ste aktivovali svoj účet</entry>
+  <entry key="672">Prihlásiť sa teraz</entry>
+  <entry key="673">Your account is not activated. Please use the link in the email you received during registration.</entry>
+  <entry key="674">You have successfully signed up. An email with a verification code will be sent to your mailbox.</entry>
+  <entry key="675">Odobrať moderovanie tomuto používateľovi</entry>
+  <entry key="676">Udeliť právo moderovať tomuto používateľovi</entry>
+  <entry key="677">Používateľ</entry>
+  <entry key="678">Prístup k tabuli</entry>
+  <entry key="679">Moderátor</entry>
+  <entry key="680">Prosím vyberte používateľa zo zoznamu pre udelenie práva moderovať/ mať prístup k tabuli alebo videa</entry>
+  <entry key="681">Tento používateľ už je moderátorom</entry>
+  <entry key="682">Nemôžte seba zbaviť práva moderovať</entry>
+  <entry key="683">Povoliť tomuto používateľovi publikovať audio/video</entry>
+  <entry key="684">Odobrať audio/video používateľovi</entry>
+  <entry key="685">Mám otázku</entry>
+  <entry key="686">Chcem kresliť na tabuľu</entry>
+  <entry key="687">Chcem zdieľať svoje audio/video</entry>
+  <entry key="688">Ste moderátorom tejto miestnoti</entry>
+  <entry key="689">Máte právo kresliť na tabuľu</entry>
+  <entry key="690">Máte právo zdieľať svoje audio/video</entry>
+  <entry key="691">Správa moderátorovi</entry>
+  <entry key="692">Používateľ</entry>
+  <entry key="693">sa chce spýtať otázku</entry>
+  <entry key="694">chce písať na tabuľu</entry>
+  <entry key="695">chce zdieľať svoje audio/video</entry>
+  <entry key="696">Musíte počkať pokiaľ moderátor vstúpi do miestnosti</entry>
+  <entry key="697">Zrušiť</entry>
+  <entry key="698">Uložiť</entry>
+  <entry key="699">Deň</entry>
+  <entry key="700">Mesiac</entry>
+  <entry key="701">Rok</entry>
+  <entry key="702">Nahrať súbor</entry>
+  <entry key="703">Pridať súbor</entry>
+  <entry key="704">Obnoviť</entry>
+  <entry key="705">Kôš</entry>
+  <entry key="706">Moje súbory</entry>
+  <entry key="707">Súbory v miestnosti(verejné)</entry>
+  <entry key="708">Pridať súbor</entry>
+  <entry key="709">Pridať zložku</entry>
+  <entry key="710">Zmazať zložku</entry>
+  <entry key="711">Zmeniť meno</entry>
+  <entry key="712">Nový priečinok</entry>
+  <entry key="713">Naozaj chcete zmazať túto položku?</entry>
+  <entry key="714">Hľadať</entry>
+  <entry key="715">Hľadať</entry>
+  <entry key="716">Otvoriť dokument</entry>
+  <entry key="717">Zobraziť všetky súbory</entry>
+  <entry key="718">Zatvoriť dokument</entry>
+  <entry key="719">Zmazať súbor</entry>
+  <entry key="720">Nemáte právo používať tabuľu</entry>
+  <entry key="721">Vlastnosti dokumentu</entry>
+  <entry key="722">Začať Java</entry>
+  <entry key="723">Začať Flash</entry>
+  <entry key="724">Používateľ chce zdieľať svoju plochu. Zobraziť?</entry>
+  <entry key="725">Práve zdieľate svoju plochu</entry>
+  <entry key="726">Zdieľanie</entry>
+  <entry key="727">Už zdieľate svoju plochu</entry>
+  <entry key="728">Prehliadač plochy</entry>
+  <entry key="729">Zastaviť zdieľanie</entry>
+  <entry key="730">Zdieľač plochy</entry>
+  <entry key="731">Kliknite Štart pre zdieľanie plochy</entry>
+  <entry key="732">Začať zdieľanie</entry>
+  <entry key="733">Pauza</entry>
+  <entry key="734">Vyberte plochu zdieľania:</entry>
+  <entry key="735">Zmeniť šírku</entry>
+  <entry key="736">Zdieľač ukončil stretnutie</entry>
+  <entry key="737">Zmeniť výšku</entry>
+  <entry key="738">X</entry>
+  <entry key="739">Y</entry>
+  <entry key="740">Šírka:</entry>
+  <entry key="741">Výška:</entry>
+  <entry key="742">Spojenie zavreté serverom</entry>
+  <entry key="743">Zrušiť</entry>
+  <entry key="744">Začať Java</entry>
+  <entry key="745">Ak zavriete toto stretnutie, nebudete môcť reštartovať prehliadač pre toto stretnutie</entry>
+  <entry key="746">Potvrdiť zavretie okna</entry>
+  <entry key="747">Zdieľať plochu</entry>
+  <entry key="748">nahrať stretnutie</entry>
+  <entry key="749">Spolu prehliadanie</entry>
+  <entry key="750">Prosím použite Internet Explorer pre Windows</entry>
+  <entry key="751">Predchádzajúce</entry>
+  <entry key="752">Ďalšie</entry>
+  <entry key="753">Obnoviť</entry>
+  <entry key="754">Domov</entry>
+  <entry key="755">Načítať</entry>
+  <entry key="756">Pridať túto stránku ako domovskú v mojom profile</entry>
+  <entry key="757">Testovať nastavenie</entry>
+  <entry key="758">Otestovať audio alebo video nastavenie pred vstupom do miestnosti môžte nahratím stretnutia na pár sekúnd. Môžte si potom prehrať nahrávku a skontrolovať svoje audio/video.</entry>
+  <entry key="759">Tento test nezobrazovať viac</entry>
+  <entry key="760">Zrušiť</entry>
+  <entry key="761">Začať stretnutie</entry>
+  <entry key="762">Nepýtať sa znova</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Môžte prejsť bez testovania ak neplánujete zverejniť svoje audio/video.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-meter</entry>
+  <entry key="768">Stlačte štart</entry>
+  <entry key="769">Začať konferenciu</entry>
+  <entry key="770">Začať konferenciu</entry>
+  <entry key="771">Vybrať miestnosť</entry>
+  <entry key="772">Skontrolovať nastavenie</entry>
+  <entry key="773">Začať konferenciu</entry>
+  <entry key="774">Ako konferencovať:</entry>
+  <entry key="775">Začať nahrávanie</entry>
+  <entry key="776">Nezobrazovať udio/video test pred vstupom do miestnosti</entry>
+  <entry key="777">Verejné miestnosti</entry>
+  <entry key="778">Verejné miestnosti sú prístupné pre všetkých používateľov</entry>
+  <entry key="779">Súkromné miestnosti</entry>
+  <entry key="780">Súkromné miestnosti sú prístupné len pr používateľov určitej spoločnosti.</entry>
+  <entry key="781">Moje miestnosti</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">Musíte byť moderátorom pre vykonanie tohto úkonu</entry>
+  <entry key="784">Požiadať o moderáciu</entry>
+  <entry key="785">Požiadať o prístup k tabuli</entry>
+  <entry key="786">Požiadať o audio/video prístup</entry>
+  <entry key="787">Hash tejto miestnosti už bol použitý</entry>
+  <entry key="788">ŠTART</entry>
+  <entry key="789">VÝCHOD</entry>
+  <entry key="790">Chcete naozaj odísť?</entry>
+  <entry key="791">Východ z konferencie</entry>
+  <entry key="792">Miestnosti</entry>
+  <entry key="793">Vybrať miestnosť pre stretnutie</entry>
+  <entry key="794">There is an unsaved event in the Calendar. Please save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting</entry>
+  <entry key="796">Do you really want to delete this event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">Clickjobfair, your web conferencing platform. You can either follow the 1-2-3 steps to enter a conference room directly or you choose the Calendar to set up a meeting.</entry>
+  <entry key="805">Plan a meeting</entry>
+  <entry key="806">To setup a conference you can add a new event in the calendar</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no user selected</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event details</entry>
+  <entry key="816">Default moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Add new default moderator</entry>
+  <entry key="822">Is super moderator</entry>
+  <entry key="823">If the room is moderated, any users with a moderator or administrator level access are automatically set to moderator when they enter the room</entry>
+  <entry key="824">A super moderator is always a moderator when they enter a room</entry>
+  <entry key="825">Make user a super moderator</entry>
+  <entry key="826">Remove super moderator from user</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an organisation to the room only users of that organisation have access to it</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Ste si istý?</entry>
+  <entry key="833">Naozaj chcete zmazať túto položku?</entry>
+  <entry key="834">Nie je žiadny používateľ označený</entry>
+  <entry key="835">Pridať nového moderátora</entry>
+  <entry key="836">Do you want to add the super moderation flag for this user?</entry>
+  <entry key="837">Do you want to remove the super moderation flag for this user? You need to save the room object to save these settings.</entry>
+  <entry key="838">This user is a super moderator. You cannot remove the moderation flag.</entry>
+  <entry key="839">Chcete naozaj vymazať?</entry>
+  <entry key="840">Vymazať?</entry>
+  <entry key="841">Pani</entry>
+  <entry key="842">Dr</entry>
+  <entry key="843">Vlastnosti</entry>
+  <entry key="844">Zobraziť pozíciu kurzora</entry>
+  <entry key="845">Zdieľať audio cez SIP applet</entry>
+  <entry key="846">Zdieľať audio cez SIP a video cez Flash</entry>
+  <entry key="847">Napasovanie</entry>
+  <entry key="848">Vidieť plochu</entry>
+  <entry key="849">Používateľ</entry>
+  <entry key="850">chce zdieľať svoju plochu. Zobraziť?</entry>
+  <entry key="851">Zavrieť</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Stretnutie bolo zavreté zdieľajúcim používateľom</entry>
+  <entry key="854">Pauza</entry>
+  <entry key="855">Nové zdieľanie plochy</entry>
+  <entry key="856">Minimalizovať</entry>
+  <entry key="857">Maximalizovať</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Nahrávacia časová os</entry>
+  <entry key="860">Moje nahrávky</entry>
+  <entry key="861">Verejné nahrávky</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Meno</entry>
+  <entry key="864">Dĺžka</entry>
+  <entry key="865">Dátum</entry>
+  <entry key="866"></entry>
+  <entry key="867">Stiahnuť</entry>
+  <entry key="868">Hlavné - video</entry>
+  <entry key="869">Nahrávanie</entry>
+  <entry key="870">Môžte zdieľať a nahrávať svoju plochu súčasne.</entry>
+  <entry key="871">Začať nahrávanie</entry>
+  <entry key="872">Ukončiť nahrávanie</entry>
+  <entry key="873">Stiahnuť FLV-súbor</entry>
+  <entry key="874">Miestnosť</entry>
+  <entry key="875">Prehrať</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Používateľ má zapnutý mikrofón</entry>
+  <entry key="878">Ukončiť zdieľanie</entry>
+  <entry key="879">Povoliť používateľovi otázky</entry>
+  <entry key="880">Vypnúť - aby vás používatelia nevyrušovali</entry>
+  <entry key="881">Práva</entry>
+  <entry key="882">Stiahnuť ako AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Základná videoplocha</entry>
+  <entry key="886">Audio iba</entry>
+  <entry key="887">Nastala chyba počas nahrávania</entry>
+  <entry key="888">Nahrávka nie je ešte hotová na prezeranie</entry>
+  <entry key="889">Zápis:</entry>
+  <entry key="890">Správa</entry>
+  <entry key="891">OK</entry>
+  <entry key="892">SIP applet nie je pripravený</entry>
+  <entry key="893">SIP nastavenia</entry>
+  <entry key="894">SIP nastavenia pre každého používateľa</entry>
+  <entry key="895">SIP používateľ</entry>
+  <entry key="896">SIP heslo</entry>
+  <entry key="897">SIP auth ID</entry>
+  <entry key="898">Prihlásenie do SIP brány zlyhalo</entry>
+  <entry key="899">Prihlásenie do SIP brány zlyhalo. Kontaktujte administrátora</entry>
+  <entry key="900">Pripájanie na SIP bránu...</entry>
+  <entry key="901">Pripájanie na SIP bránu...</entry>
+  <entry key="902">Show log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP applet správa</entry>
+  <entry key="905">SIP applet nie je pripravený. Potvrďte applet a kliknite OK</entry>
+  <entry key="906">Získať moderáciu</entry>
+  <entry key="907">Uložiť zmeny</entry>
+  <entry key="908">The appointment has been changed. Do you want to save these changes?</entry>
+  <entry key="909">Pre prístup k ostatným nahrávkam sa prihláste do {0} applikácie</entry>
+  <entry key="910">Vybrať používateľa pre toto video</entry>
+  <entry key="911">Používatelia k dispozícií</entry>
+  <entry key="912">Ste moderátorom rozhovoru. Vy rozhodujete kto môže hovoriť.</entry>
+  <entry key="913">Začať nahrávanie</entry>
+  <entry key="914">Ukončiť nahrávanie</entry>
+  <entry key="915">Nahrávanie rozhovoru už prebieha.</entry>
+  <entry key="916">Nahrávanie je zastavené alebo ešte nezačalo.</entry>
+  <entry key="917">Nahrávanie rozhovoru už prebieha!</entry>
+  <entry key="918">Zrušiť</entry>
+  <entry key="919">Spracovanie rozhovoru zaberie 5 minút za každú 1 min nahrávky. Súčasný status spracovania je:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">Nemôžte premiestniť súbor do jeho podsúboru!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Zmazať všetky objekty na tomto slide iba!</entry>
+  <entry key="1006">Iba adresa zadaná do statusového riadku sa zobrazuje účastníkom!</entry>
+  <entry key="1007">Spraviť tímové miestnosti</entry>
+  <entry key="1008">Vybrať používateľov pre tímové miestnosti!</entry>
+  <entry key="1009">Môžte vybrať používateľov tu a vytvoriť miestnosti pre nich. Vybraní používatelia budú automaticky preradení do nich.</entry>
+  <entry key="1010">Meno</entry>
+  <entry key="1011">Prihlásenie</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Používatelia pre novú tímovú miestnosť:</entry>
+  <entry key="1014">Vytvoriť tímovú miestnosť</entry>
+  <entry key="1015">Zrušiť</entry>
+  <entry key="1016">Vyberte aspoň 1 používateľa pre tímovú miestnosť!</entry>
+  <entry key="1017">Pridať používateľa pre tím</entry>
+  <entry key="1018">Odstrániť používateľa z tímovej miestnosti</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Typ miestnosti</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">This is a Team-Room, you can send the Team-Moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">1) Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Videá</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything! [Screen Sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose &lt;i&gt;Insert&lt;/i&gt; from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;u&gt;&lt;FONT color='#0000CC'&gt;&lt;A HREF="http://www.youtube.com/watch?v=Ukqa01O48uI" TARGET="_BLANK"&gt;watch the demo&lt;/A&gt;&lt;/FONT&gt;&lt;/u&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
new file mode 100644
index 0000000..3b5622a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferens</entry>
+  <entry key="2">Möte</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Inställningar</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stopp</entry>
+  <entry key="8">Spela in</entry>
+  <entry key="9">Ingen fil tillgänglig</entry>
+  <entry key="10">Inspelad av lärare</entry>
+  <entry key="11">Anslutna användare:</entry>
+  <entry key="12">Starta en konferens</entry>
+  <entry key="13">Mitt namn</entry>
+  <entry key="14">Videokonferens</entry>
+  <entry key="15">Importera Presentation</entry>
+  <entry key="16">Uppdatera lista</entry>
+  <entry key="17">Till huvudfil</entry>
+  <entry key="18">Ny omröstning</entry>
+  <entry key="19">En ny omröstning för konferensen.</entry>
+  <entry key="20">Fråga:</entry>
+  <entry key="21">Typ av omröstning:</entry>
+  <entry key="22">Skapa</entry>
+  <entry key="23">Info: Varje ansluten användare får ett meddelande med den nya röstningen.</entry>
+  <entry key="24">Skapa en omröstning</entry>
+  <entry key="25">Avbryt</entry>
+  <entry key="26">Ja/Nej</entry>
+  <entry key="27">Numerisk 1-10</entry>
+  <entry key="28">Röst</entry>
+  <entry key="29">Du måste vara Moderator för att skapa en omröstning</entry>
+  <entry key="30">Din röst är accepterad</entry>
+  <entry key="31">Du har redan röstat i denna omröstning.</entry>
+  <entry key="32">Rösta!</entry>
+  <entry key="33">Din respons:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nej</entry>
+  <entry key="36">vill veta:</entry>
+  <entry key="37">Röstningsresultat</entry>
+  <entry key="38">Fråga:</entry>
+  <entry key="39">Resultat:</entry>
+  <entry key="40">Svar:</entry>
+  <entry key="41">Inga nya omröstningar har påbörjats.</entry>
+  <entry key="42">Rösta!</entry>
+  <entry key="43">Möte (max 4 platser)</entry>
+  <entry key="44">Konferens (max 50 platser)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Andra platser</entry>
+  <entry key="47">Redan valt</entry>
+  <entry key="48">Stig in</entry>
+  <entry key="49">Moderatorn har lämnat mötet.</entry>
+  <entry key="50">Systeminformation</entry>
+  <entry key="51">Välj utrustning</entry>
+  <entry key="52">Välj webcam:</entry>
+  <entry key="53">Välj mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Avbryt</entry>
+  <entry key="56">Återanslut.</entry>
+  <entry key="57">Ändra setup.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Språk:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Avbryt</entry>
+  <entry key="62">Rensa skrivbordet</entry>
+  <entry key="63">Vill du att skrivbordet skall rensas innan du lägger till en ny bild?</entry>
+  <entry key="64">Fråga inte igen</entry>
+  <entry key="65">Nej</entry>
+  <entry key="66">Ändra setup</entry>
+  <entry key="67">Fråga innan skrivbordet töms?.</entry>
+  <entry key="68">Användarinfo</entry>
+  <entry key="69">Rensa ritområdet</entry>
+  <entry key="70">Ångra</entry>
+  <entry key="71">Redo</entry>
+  <entry key="72">Välj ett objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Måla</entry>
+  <entry key="75">Rita linje</entry>
+  <entry key="76">Rita understrykning</entry>
+  <entry key="77">Rektangel</entry>
+  <entry key="78">Ellips</entry>
+  <entry key="79">Pil</entry>
+  <entry key="80">radera valt objekt</entry>
+  <entry key="81">Lägg till för moderation</entry>
+  <entry key="82">Lägg till</entry>
+  <entry key="83">Avbryt</entry>
+  <entry key="84">Bli moderator</entry>
+  <entry key="85">Stäng</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">fet</entry>
+  <entry key="88">VÄNTAR</entry>
+  <entry key="89">En användare väntar för att bli moderator:</entry>
+  <entry key="90">Acceptera</entry>
+  <entry key="91">Neka</entry>
+  <entry key="92">Avbryt</entry>
+  <entry key="93">Skicka fråga till följande användare</entry>
+  <entry key="94">Accepterad</entry>
+  <entry key="95">Nekad</entry>
+  <entry key="96">Ändra moderator</entry>
+  <entry key="97">Du är inte moderator i denna kurs!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Rummet är fullt. Försök igen senare.</entry>
+  <entry key="100">Ellips</entry>
+  <entry key="101">Stäng</entry>
+  <entry key="102">Fel data angivet</entry>
+  <entry key="103">Användarnamnet måste innehålla minst 4 tecken</entry>
+  <entry key="104">Lösenordet måste innehålla minst 4 tecken</entry>
+  <entry key="105">Användarnamnet är redan använt</entry>
+  <entry key="106">Denna epost är redan använd</entry>
+  <entry key="107">Systemfel, kontakta systemadmin</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Användare:</entry>
+  <entry key="110">Lösen:</entry>
+  <entry key="111">Språk</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Registrera</entry>
+  <entry key="114">Användare:</entry>
+  <entry key="115">Lösen:</entry>
+  <entry key="116">Lösen igen:</entry>
+  <entry key="117">Förnamn:</entry>
+  <entry key="118">Efternamn:</entry>
+  <entry key="119">E-post:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrera</entry>
+  <entry key="122">Avbryt</entry>
+  <entry key="123">Registrera</entry>
+  <entry key="124">Hem</entry>
+  <entry key="125">Användare</entry>
+  <entry key="126">Grupper</entry>
+  <entry key="127">Organisationer</entry>
+  <entry key="128">Konferensrum</entry>
+  <entry key="129">Publik</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Stig in</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Lösenord</entry>
+  <entry key="134">Lösenord igen</entry>
+  <entry key="135">Förnamn</entry>
+  <entry key="136">Efternamn</entry>
+  <entry key="137">E-post</entry>
+  <entry key="138">Födelseår</entry>
+  <entry key="139">Gata/nr</entry>
+  <entry key="140">Pnr/Stad</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adress-Info</entry>
+  <entry key="143">Användardata</entry>
+  <entry key="144">Spara</entry>
+  <entry key="145">Spara</entry>
+  <entry key="146">Användar-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Förnamn</entry>
+  <entry key="149">Efternamn</entry>
+  <entry key="150">Visa nästa</entry>
+  <entry key="151">Visa föregående</entry>
+  <entry key="152">Radera innehåll</entry>
+  <entry key="153">Avbryt</entry>
+  <entry key="154">Radera</entry>
+  <entry key="155">Nytt innehåll</entry>
+  <entry key="156">Uppdatera innehåll</entry>
+  <entry key="157">Radera innehåll</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Ej tillgänglig</entry>
+  <entry key="160">Tillgänglig</entry>
+  <entry key="161">Organisation</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Stäng</entry>
+  <entry key="164">Organisation-ID</entry>
+  <entry key="165">Namn</entry>
+  <entry key="166">Användare</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Användarnivå</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Namn</entry>
+  <entry key="172">Lägg till organisation</entry>
+  <entry key="173">Lägg till organisation</entry>
+  <entry key="174">Avbryt</entry>
+  <entry key="175">Lägg till</entry>
+  <entry key="176">Ta bort organisation</entry>
+  <entry key="177">Användare</entry>
+  <entry key="178">Lägg till användare</entry>
+  <entry key="179">Radera användare</entry>
+  <entry key="180">Lägg till användare</entry>
+  <entry key="181">Sök användare</entry>
+  <entry key="182">sök</entry>
+  <entry key="183">Användare</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Stig in</entry>
+  <entry key="186">Konferensrum</entry>
+  <entry key="187">Konferensrum</entry>
+  <entry key="188">Id</entry>
+  <entry key="189">Namn</entry>
+  <entry key="190">Publik</entry>
+  <entry key="191">Organisationer</entry>
+  <entry key="192">Konferensrum</entry>
+  <entry key="193">Namn</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Publik</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Spara</entry>
+  <entry key="198">Ladda</entry>
+  <entry key="199">Spara som</entry>
+  <entry key="200">Filnamn</entry>
+  <entry key="201">Filnamn</entry>
+  <entry key="202">Avbryt</entry>
+  <entry key="203">Spara</entry>
+  <entry key="204">Bearbetar</entry>
+  <entry key="205">Laddar</entry>
+  <entry key="206">Objekt laddade</entry>
+  <entry key="207">Synkroniserar, vänta:</entry>
+  <entry key="208">Laddar bilddata</entry>
+  <entry key="209">Synkroniserar, vänta:</entry>
+  <entry key="210">Rensa ritutrymmet</entry>
+  <entry key="211">Rensa ritutrymmet, all data kommer att förloras</entry>
+  <entry key="212">Fråga innan inladdning av fil</entry>
+  <entry key="213">Skicka inbjudan</entry>
+  <entry key="214">Skicka inbjudan</entry>
+  <entry key="215">Ämne</entry>
+  <entry key="216">Mottagare</entry>
+  <entry key="217">Meddelande</entry>
+  <entry key="218">Skicka</entry>
+  <entry key="219">Avbryt</entry>
+  <entry key="220">Skicka</entry>
+  <entry key="221">Användardata</entry>
+  <entry key="222">Ditt alias i denna konferens</entry>
+  <entry key="223">Alias</entry>
+  <entry key="224">Förnamn</entry>
+  <entry key="225">Efternamn</entry>
+  <entry key="226">E-post</entry>
+  <entry key="227">Språk</entry>
+  <entry key="228">Stig in</entry>
+  <entry key="229">Laddar</entry>
+  <entry key="230">Laddar data, vänta!</entry>
+  <entry key="231">Fel lösenord</entry>
+  <entry key="232">2 identiska lösenord med minst 6 tecken, tack!</entry>
+  <entry key="233">Fel e-postadress</entry>
+  <entry key="234">Du har angett en ogiltig e-postadress</entry>
+  <entry key="235">Registrering klar</entry>
+  <entry key="236">Ditt konto är skapat. Du kan logga in.</entry>
+  <entry key="237">Du kan inte dela din skärm just nu. Någon annan delar sin skärm.</entry>
+  <entry key="238">Delning förbjuden</entry>
+  <entry key="239">Dela skärm</entry>
+  <entry key="240">Dålig bandbredd: Du kan inte synkronisera skärmen. Du kommer att tappa frames. Om denna varning visas ofta kan du be din moderator att sänka kvaliteten.</entry>
+  <entry key="241">Skärm av:</entry>
+  <entry key="242">Måla</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Filer</entry>
+  <entry key="246">Medlemmar</entry>
+  <entry key="247">Ladda ner originaldokument</entry>
+  <entry key="248">Ladda ner PDF-dokument</entry>
+  <entry key="249">Ladda presentationen till whiteboard</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Dra det här objektet</entry>
+  <entry key="252">Ändra storleken på det här objektet</entry>
+  <entry key="253">%</entry>
+  <entry key="254">av</entry>
+  <entry key="255">Gå till första sidan</entry>
+  <entry key="256">Gå till föregående sida</entry>
+  <entry key="257">Gå till nästa sida</entry>
+  <entry key="258">Gå till sista sidan</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herr</entry>
+  <entry key="262">Fröken</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Nyckel</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Nyckel</entry>
+  <entry key="268">senast uppdaterat</entry>
+  <entry key="269">uppdaterat av</entry>
+  <entry key="270">kommentar</entry>
+  <entry key="271">nyckel</entry>
+  <entry key="272">av</entry>
+  <entry key="273">Användare</entry>
+  <entry key="274">radera användare från organisationen</entry>
+  <entry key="275">radera</entry>
+  <entry key="276">Den här användaren är redan medlem av den här organisationen.</entry>
+  <entry key="277">Nyheter</entry>
+  <entry key="278">Snabblänkar</entry>
+  <entry key="279">Gå till Konferens</entry>
+  <entry key="280">Gå till Auditorium</entry>
+  <entry key="281">Hjälp och Support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Buggrapport</entry>
+  <entry key="285">mera</entry>
+  <entry key="286">Projektets Webbsida (http://openmeetings.apache.org)</entry>
+  <entry key="287">Epostlista För Användare (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Kom Ihåg Inloggning</entry>
+  <entry key="289">Innehåll</entry>
+  <entry key="290">Min Hemsida</entry>
+  <entry key="291">Mina Schemalagda Möten</entry>
+  <entry key="292">Mina Planerade Auditorier</entry>
+  <entry key="293">Allmänna Möten</entry>
+  <entry key="294">Privata Möten</entry>
+  <entry key="295">Allmänna Auditorier</entry>
+  <entry key="296">Privata Auditorier</entry>
+  <entry key="297">Allmänt Innehåll</entry>
+  <entry key="298">Privat Innehåll</entry>
+  <entry key="299">Personligt Innehåll</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderering</entry>
+  <entry key="302">Anhåll om Moderering</entry>
+  <entry key="303">Omröstningar</entry>
+  <entry key="304">Välj en fil</entry>
+  <entry key="305">Inställningar</entry>
+  <entry key="306">Kam. &amp; Mik. Inställn.</entry>
+  <entry key="307">Whiteboard Inställningar</entry>
+  <entry key="308">Avsluta</entry>
+  <entry key="309">Lämna Rummet</entry>
+  <entry key="310">Logga ut</entry>
+  <entry key="311">Glömt ditt lösenord?</entry>
+  <entry key="312">Återställ Lösenord</entry>
+  <entry key="313">Via E-post</entry>
+  <entry key="314">Via Användarnamn</entry>
+  <entry key="315">Din E-postadress</entry>
+  <entry key="316">Ditt Användarnamn</entry>
+  <entry key="317">OK</entry>
+  <entry key="318">Användare</entry>
+  <entry key="319">Omröstningar</entry>
+  <entry key="320">Det finns ingen Användare kopplad till detta Användarnamn</entry>
+  <entry key="321">Ett e-postmeddelande innehållande en unik länk har skickats till din epostadress, var vänlig kolla din epost. Om du fortfarande inte fått något e-postmeddelande, var vänlig ändra spaminställningarna för din e-post och skicka bekräftelsemeddelandet på nytt.</entry>
+  <entry key="322">Bearbetar</entry>
+  <entry key="323">Meddelande</entry>
+  <entry key="324">Ogiltig Hash. Ingen Användare Funnen.</entry>
+  <entry key="325">Återställ Ditt Lösenord</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Ändra Lösenord</entry>
+  <entry key="328">Nytt Lösenord</entry>
+  <entry key="329">Ange Lösenord på nytt</entry>
+  <entry key="330">Lösenorden du angett är inte identiska.</entry>
+  <entry key="331">4 eller mer tecken; versalisering inverkar!</entry>
+  <entry key="332">Lösenord valt. Du kan logga in nu.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Okänt Fel. Var vänlig rapportera detta till ditt Service-Team.</entry>
+  <entry key="335">Användarnamnet hittades inte.</entry>
+  <entry key="336">Ogiltigt Lösenord.</entry>
+  <entry key="337">Utloggning Lyckades.</entry>
+  <entry key="338">Registrering via gränssnittet är Inaktiverat.</entry>
+  <entry key="339">Ogiltig Epostadress.</entry>
+  <entry key="340">Duplikat filnamn, var vänlig välj ett annat filnamn.</entry>
+  <entry key="341">Filnamnet är för kort.</entry>
+  <entry key="342">Kunde inte spara Adressen.</entry>
+  <entry key="343">Användare tillagd, men du måste tilldela honom en Organisation för att kunna logga in.</entry>
+  <entry key="344">Nytt Record</entry>
+  <entry key="345">Inget fält med detta FältId hittades.</entry>
+  <entry key="346">Ingen Etikett hittades för det Fältet.</entry>
+  <entry key="347">Admin Auktorisering krävs.</entry>
+  <entry key="348">Språk-Editor</entry>
+  <entry key="349">Språk</entry>
+  <entry key="350">Etikett-ID</entry>
+  <entry key="351">Etikett-Namn</entry>
+  <entry key="352">Värde</entry>
+  <entry key="353">Fältvärden</entry>
+  <entry key="354">EtikettNamn</entry>
+  <entry key="355">EtikettVärde</entry>
+  <entry key="356">Etikett-ID</entry>
+  <entry key="357">Du raderade endast Etiketten, INTE Fältet! Du kan inte radera Fältet, det innehåller kanske Etiketter på andra Språk.</entry>
+  <entry key="358">Ogiltig Etikett-ID. FieldLanguagesvalues_Id kan inte hittas i databasen.</entry>
+  <entry key="359">Du kan inte radera det här Fältet. Du kan endast radera Etiketter, INTE Fält. För tillfället är ingen Etikett laddad, detta kan bero på att ingen Etikett är vald eller för att inga Etiketter är definierade för det här fältet och språket.</entry>
+  <entry key="360">Exportera</entry>
+  <entry key="361">Du måste logga ut för att se ändringar.</entry>
+  <entry key="362">Lägg till nytt språk</entry>
+  <entry key="363">Ta bort språk</entry>
+  <entry key="364">Lägg till nytt språk</entry>
+  <entry key="365">Namn</entry>
+  <entry key="366">Lägg till språk</entry>
+  <entry key="367">Säkerhetskopia</entry>
+  <entry key="368">Gå till första</entry>
+  <entry key="369">Gå till föregående</entry>
+  <entry key="370">Gå till nästa</entry>
+  <entry key="371">Gå till sista</entry>
+  <entry key="372">Användare talar (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Sätt på/av ljudet</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Dina inställningar</entry>
+  <entry key="376">Hej,</entry>
+  <entry key="377">Ändra din profil</entry>
+  <entry key="378">Nya meddelanden:</entry>
+  <entry key="379">Ladda upp nya bilder</entry>
+  <entry key="380">Användardata - Exportera</entry>
+  <entry key="381">Alla organisationer måste finnas från tidigare!</entry>
+  <entry key="382">Påbörja exporteringen</entry>
+  <entry key="383">Enligt organisation</entry>
+  <entry key="384">Påbörja exporteringen</entry>
+  <entry key="385">Användardata - Importera</entry>
+  <entry key="386">Välj users.xml</entry>
+  <entry key="387">Importera</entry>
+  <entry key="388">Exportera till XML - Dessa filer kan användas för att: - Bidra till projektet - Importera till ett annat system - Göra säkerhetskopior - Skräddarsy programmet - Lägga i language-mappen för kommande installationer</entry>
+  <entry key="389">Välj en språkfil att importera. Välj rätt språk från Comboboxen! Språkfilen kommer att importeras till detta språk oberoende av namnet på filen!</entry>
+  <entry key="390">Importera - välj fil</entry>
+  <entry key="391">Spara som</entry>
+  <entry key="392">Namn:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Spara</entry>
+  <entry key="395">Inspelningar</entry>
+  <entry key="396">Inspelningsförevisaren</entry>
+  <entry key="397">Inspelningar från allmänna och privata rum</entry>
+  <entry key="398">Användare:</entry>
+  <entry key="399">Anslöt sig:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Användare i det här rummet:</entry>
+  <entry key="402">Uppdatera</entry>
+  <entry key="403">Det här rummet är fullt. Försök igenom om någon minut.</entry>
+  <entry key="404">Klicka på ett rum för att få mera detaljer</entry>
+  <entry key="405">Chatta med användarna i det här rummet:</entry>
+  <entry key="406">Rum:</entry>
+  <entry key="407">Användare i det här rummet:</entry>
+  <entry key="408">Sedan:</entry>
+  <entry key="409">Spela upp inspelning</entry>
+  <entry key="410">Längd:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Inspelningsläge! Du kan inte ändra några värden, detta är en inspelad fil.</entry>
+  <entry key="413">Spela upp denna inspelning</entry>
+  <entry key="414">Spela upp / Pausa</entry>
+  <entry key="415">Påbörja inspelning</entry>
+  <entry key="416">Stoppa inspelning</entry>
+  <entry key="417">Inspelning:</entry>
+  <entry key="418">Det är redan någon som spelar in:</entry>
+  <entry key="419">Inspelning! Av användare:</entry>
+  <entry key="420">Avbryt</entry>
+  <entry key="421">Inspelningen kommer att avbryts och inte heller sparas.</entry>
+  <entry key="422">Återuppta</entry>
+  <entry key="423">Stäng det här fönstret och återuppta inspelningen</entry>
+  <entry key="424">Ändra Linjefärg</entry>
+  <entry key="425">Välj Färg</entry>
+  <entry key="426">Inaktivera / Aktivera Linjefärg</entry>
+  <entry key="427">Ändra Fyllfärg</entry>
+  <entry key="428">Inaktivera / Aktivera Fyllfärg</entry>
+  <entry key="429">Ändra Linjebredd</entry>
+  <entry key="430">Stäng</entry>
+  <entry key="431">Ändra storlek på teckensnitt</entry>
+  <entry key="432">Ta bort Inspelning</entry>
+  <entry key="433">Gäst</entry>
+  <entry key="434">Av:</entry>
+  <entry key="435">Namn</entry>
+  <entry key="436">Rum</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Avbryt</entry>
+  <entry key="439">Starta</entry>
+  <entry key="440">Namn</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Radera Serverns Chatlogg</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Skicka meddelande</entry>
+  <entry key="445">Emotikoner</entry>
+  <entry key="446"></entry>
+  <entry key="447">Välj Enheter</entry>
+  <entry key="448">Ljud och Video</entry>
+  <entry key="449">Endast Ljud</entry>
+  <entry key="450">Endast Video</entry>
+  <entry key="451">Inget Ljud/Video (statisk bild)</entry>
+  <entry key="452">Inget Ljud/Video kommer att publiceras, i stället kommer en bild från din profil att visas. Välj den här inställningen om du har dålig bandbredd.</entry>
+  <entry key="453">MÅ</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">ON</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">LÖ</entry>
+  <entry key="459">SÖ</entry>
+  <entry key="460">Måndag</entry>
+  <entry key="461">Tisdag</entry>
+  <entry key="462">Onsdag</entry>
+  <entry key="463">Torsdag</entry>
+  <entry key="464">Fridag</entry>
+  <entry key="465">Lördag</entry>
+  <entry key="466">Söndag</entry>
+  <entry key="467">KV</entry>
+  <entry key="468">Kalender vecka</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Februari</entry>
+  <entry key="471">Mars</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Augusti</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Deltagare</entry>
+  <entry key="483">Visa Layout inställningar</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Bredd | Höjd</entry>
+  <entry key="486">Video-Platshållare</entry>
+  <entry key="487">Modererings-Platshållare</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Platshållare</entry>
+  <entry key="490">Aktiverad</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Bredd | Höjd</entry>
+  <entry key="493">Filer, Chat, Deltagare - Platshållare</entry>
+  <entry key="494">Aktiverad</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Bredd | Höjd</entry>
+  <entry key="497">Moderatorn har lämnat rummet. För tillfället finns det ingen presentatör. Du kan ansöka om att bli Moderator eller vänta.</entry>
+  <entry key="498">Det finns ingen Moderator i det här rummet, men det finns några deltagare. Du kan ansöka om att bli Moderator eller vänta.</entry>
+  <entry key="499">Feedback för {0}</entry>
+  <entry key="500">{0} - Inbjudan</entry>
+  <entry key="501">Meddelande från Användare:</entry>
+  <entry key="502">Meddelande:</entry>
+  <entry key="503">Klicka på den här länken för att delta i Mötet:</entry>
+  <entry key="504">Klicka här för att gå in i Rummet.</entry>
+  <entry key="505">Om du har problem med den här länken, var vänlig kopiera och klistra in det här i din webbläsare:</entry>
+  <entry key="506">{0} Registrering</entry>
+  <entry key="507">Din användardata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Lösenord:</entry>
+  <entry key="510">Epost:</entry>
+  <entry key="511">{0}-Teamet</entry>
+  <entry key="512">{0} Registrering</entry>
+  <entry key="513">{0} - Återställ Lösenord</entry>
+  <entry key="514">Klicka på den här länken för att ange ett nytt lösenord:</entry>
+  <entry key="515">Klicka här för att ange ett nytt lösenord</entry>
+  <entry key="516">Om du har problem med länken, var vänlig kopiera och klistra in detta i din webbläsare:</entry>
+  <entry key="517">{0} lösenordsåterställning</entry>
+  <entry key="518">Var vänlig ange ett giltigt Datum, till exempel 24.12.2001 (dd.mm.åååå)</entry>
+  <entry key="519">Var vänlig ange en giltig Epostadress, till exempel namn@mail.com</entry>
+  <entry key="520">Var vänlig ange ett Flytande-Nummer, till exempel 1.00</entry>
+  <entry key="521">Var vänlig ange ett Nummer (Integer), till exempel 100</entry>
+  <entry key="522">Var vänlig ange ett Telefonnummer, till exempel +358 40 352 3250</entry>
+  <entry key="523">Var vänlig ange en tid, till exempel 12:23 (tt:mm)</entry>
+  <entry key="524">Lösenordsskyddad</entry>
+  <entry key="525">Lösenord</entry>
+  <entry key="526">Giltighetstid</entry>
+  <entry key="527">Oändlig</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">Engångs</entry>
+  <entry key="530">Giltig från och med:</entry>
+  <entry key="531">Giltig till:</entry>
+  <entry key="532">Inbjudan till {0}</entry>
+  <entry key="533">Ingen inbjudan tillgänglig med den här Inbjudningskoden.</entry>
+  <entry key="534">Inbjudan användes redan. Den här typen av inbjudningar kan inte återanvändas.</entry>
+  <entry key="535">Inbjudningskoden är inte giltig.</entry>
+  <entry key="536">Lösenord:</entry>
+  <entry key="537">Kontrollera Lösenord</entry>
+  <entry key="538">Ogiltigt Lösenord!</entry>
+  <entry key="539">Webbläsare</entry>
+  <entry key="540">Synkronisera Ljud/Video</entry>
+  <entry key="541">Inloggningen var korrekt, men sessionen är inte längre aktiv eller lagrad på servern. Försök att logga in igen efter att du fått ett nytt SessionId.</entry>
+  <entry key="542">SessionId är inte inloggat eller har inga Admin-rättigheter. SOAP Gateway kräver en användare med admin-rättigheter för att innesluta nya användare.</entry>
+  <entry key="543">Den här sessionen är inte kopplad till någon Remoteuser-Data. Antingen så kallades inte SOAP-Gateway före applikationen kördes eller så används ett felaktigt Session-ID.</entry>
+  <entry key="544">Inspelaren är fortfarande i Beta-stadie!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axel</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axel</entry>
+  <entry key="549">b</entry>
+  <entry key="550">bredd</entry>
+  <entry key="551">h</entry>
+  <entry key="552">höjd</entry>
+  <entry key="553">Ändra Genomskinlighet</entry>
+  <entry key="554">Öppna bläddraren</entry>
+  <entry key="555">Stäng bläddraren</entry>
+  <entry key="556">Anslutningen till Servern är förlorad. Du måste ladda om Applikationen och/eller kolla din Nätverksanslutning.</entry>
+  <entry key="557">Pekare</entry>
+  <entry key="558">Synkroniserar</entry>
+  <entry key="559">Synkroniserar användare, var vänlig vänta</entry>
+  <entry key="560">&lt;u&gt;Ladda ner som SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Ladda ner som PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Ladda ner som JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Ladda ner som PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Ladda ner som TIF&lt;/u&gt;</entry>
+  <entry key="565">Påminnelse:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">ingen</entry>
+  <entry key="569">Läge:</entry>
+  <entry key="570">Börjar</entry>
+  <entry key="571">Slutar</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Bjud in folk</entry>
+  <entry key="575">Daglig</entry>
+  <entry key="576">Månatlig</entry>
+  <entry key="577">Årlig</entry>
+  <entry key="578">Tidpunkten för mötets slut måste vara efter dess början!</entry>
+  <entry key="579">Lägg till en Titel, tack!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivera det här om du skriver på ett höger till vänster-språk (inverterad ordfölj)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Se på inspelade Möten och Auditorier</entry>
+  <entry key="584">Möte - Skapa en konferens med 4 (upp till 16) Användare &lt;br&gt; alla kommer att ha tillgång till ljud + video.</entry>
+  <entry key="585">Auditorium - Skapa en konferens med upp till 200 deltagare&lt;br/&gt;Endast Moderatorn kommer att ha tillgång till ljud + video</entry>
+  <entry key="586">Skapa användare, rum, organisationer&lt;br/&gt; + ändra konfigurationer</entry>
+  <entry key="587">Användare i det här Rummet nu</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Laddar Dokument. Vänligen vänta tills alla klienter är synkroniserade.</entry>
+  <entry key="592">Uppladdning klar, konverterar Dokument ...</entry>
+  <entry key="593">Påbörja Uppladdning</entry>
+  <entry key="594">Dialog för Uppladdning och Importering. Var vänlig välj en Fil från din Hårdskiva.</entry>
+  <entry key="595">Avbryt</entry>
+  <entry key="596">Välj Fil</entry>
+  <entry key="597">Anslutningar</entry>
+  <entry key="598">Värde</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Ansluten sedan</entry>
+  <entry key="602">Rum</entry>
+  <entry key="603">Sparka Användare</entry>
+  <entry key="604">Sparka Användare</entry>
+  <entry key="605">Vill du verkligen sparka den här Klienten?&lt;br/&gt; Det här avlägsnar endast Klienten från det aktuella rummet och ger honom möjlighet att återansluta sig.</entry>
+  <entry key="606">Din session har stängts av en Administratör eller Moderator.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Användaren är Moderator i det här rummet</entry>
+  <entry key="609">Användaren har tillåtelse att rita på Whiteboarden</entry>
+  <entry key="610">Starta (om) Ljud/Video eller ändra Anordningens Inställningar</entry>
+  <entry key="611">Tillåt den här Användaren att rita på Whiteboarden</entry>
+  <entry key="612">Ta bort möjligheten att rita på Whiteboarden</entry>
+  <entry key="613">Användare</entry>
+  <entry key="614">Filer</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ditt konto är tilldelat flera Organisationer. Var vänlig välj en för den här Sessionen.</entry>
+  <entry key="618">Det här rummet är fullt för tillfället. Var vänlig försök på nytt senare.</entry>
+  <entry key="619">Typ av rum</entry>
+  <entry key="620">Tidsbokat rum</entry>
+  <entry key="621">Servertid</entry>
+  <entry key="622">{0} - Påminnelse</entry>
+  <entry key="623">Meddelande från Användare:</entry>
+  <entry key="624">Meddelande:</entry>
+  <entry key="625">Klicka på den här länken för att delta i Mötet:</entry>
+  <entry key="626">Klicka här för att gå in i rummet</entry>
+  <entry key="627">Om du har problem med länken, vänligen kopiera och klistra in det här i din webbläsare:</entry>
+  <entry key="628">Sök internt</entry>
+  <entry key="629">externa användare</entry>
+  <entry key="630">förnamn</entry>
+  <entry key="631">namn</entry>
+  <entry key="632">E-post</entry>
+  <entry key="633">Bekräfta utloggning</entry>
+  <entry key="634">Är du säker på att du vill logga ut?</entry>
+  <entry key="635">Åtgärder</entry>
+  <entry key="636">Demo Rum</entry>
+  <entry key="637">Demo Tid</entry>
+  <entry key="638">Mötestimer</entry>
+  <entry key="639">Det här Rummet är ett Demo Rum. För att få bort den här varningen så måste du antingen skaffa ett privat mötesrum eller sätta upp en egen Server. Du kommer att loggas ut automatiskt om:</entry>
+  <entry key="640">Modererat</entry>
+  <entry key="641">Var vänlig vänta tills Moderatorn har anslutigt sig till Rummet. Moderatorn kan antingen vara en Lärare, Admin eller skapare av det här Rummet.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Inkommande Skärmdelning</entry>
+  <entry key="644">En ny Skärmdelning vill påbörjas av användaren:</entry>
+  <entry key="645">Börja Dela</entry>
+  <entry key="646">Lägg Till Ett Möte</entry>
+  <entry key="647">Mötesrum</entry>
+  <entry key="648">Auditorium</entry>
+  <entry key="649">Moderering</entry>
+  <entry key="650">Moderera Användare</entry>
+  <entry key="651">Moderera Rum</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vill du ändra den här Användaren till Moderator av den Organisationen?</entry>
+  <entry key="654">Var vänlig välj en Organisation före du försöker lägga till en Användare till den!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Vill du verkligen ta bort den här Användaren från Organisationen?</entry>
+  <entry key="657">Den här Användaren är Moderator</entry>
+  <entry key="658">Den här Användaren är inte Moderator</entry>
+  <entry key="659">Vill du ta bort den här Användaren som Moderator för den här Organisationen?</entry>
+  <entry key="660">Lägg till eller ta bort Användare eller Rum inom din Organisation</entry>
+  <entry key="661">Vill du verkligen ta bort det här?</entry>
+  <entry key="662">Vill du verkligen ta bort den här Användaren från Organisationen? Du kommer endast att ta bort kopplingen mellan Användaren och Organisationen, för att ta bort själva Användaren så måste du logga in på Administrationspanelen.</entry>
+  <entry key="663">Du kan inte ta bort din egen Användare!</entry>
+  <entry key="664">Den här Metoden kräver ett Administrationskonto för att kunna åberopas!</entry>
+  <entry key="665">Det finns ingen Session associerad med detta ID.</entry>
+  <entry key="666">Det här är ett Administratörs- eller Moderatorkonto. Du kan endast ändra det här kontot via Administratörspanelen.</entry>
+  <entry key="667">Var vänlig klicka på följande länk eller klistra in den i din webbläsares adressfält för att slutföra registreringen.</entry>
+  <entry key="668">Klicka här för att verifiera din E-postadress</entry>
+  <entry key="669">Ingen Användare hittades med detta Hash.</entry>
+  <entry key="670">Den här Användaren är redan aktiverad!</entry>
+  <entry key="671">Du har aktiverat ditt konto!</entry>
+  <entry key="672">Logga in nu</entry>
+  <entry key="673">Ditt konto är inte aktiverat. Använd länken i det e-postmeddelande du fick när du registrerade dig.</entry>
+  <entry key="674">Du har framgångsrikt registrerat dig. Vi har skickat ett e-postmeddelande till dig med din verifikationskod. Vänligen kolla din Inkorg.</entry>
+  <entry key="675">Ta bort den här användaren som Moderator</entry>
+  <entry key="676">Bevilja Moderator-rättigheter till den här Användaren</entry>
+  <entry key="677">Användare</entry>
+  <entry key="678">Tillgång till Whiteboarden</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderering: Vänligen välj en Användare från Listan för att bevilja honom tillträde till Whiteboard, Moderering eller Video.</entry>
+  <entry key="681">Den här Användaren är redan Moderator, så han har automatiskt rätt att rita.</entry>
+  <entry key="682">Det här är du! Du kan inte ta bort Moderator-rättigheterna från dig själv.</entry>
+  <entry key="683">Tillåt den här Användaren att Publicera Ljud/Video</entry>
+  <entry key="684">Ta bort Ljud/Video från den här Användaren</entry>
+  <entry key="685">Jag skulle vilja få Moderering för det här rummet</entry>
+  <entry key="686">Jag skulle vilja rita på Whiteboarden</entry>
+  <entry key="687">Jag skulle vilja dela Ljud/Video</entry>
+  <entry key="688">Du är Moderator för det här Rummet</entry>
+  <entry key="689">Du har tillåtelse att rita på Whiteboarden</entry>
+  <entry key="690">Du har tillåtelse att publicera Audio/Video</entry>
+  <entry key="691">Meddelande till Moderatorn</entry>
+  <entry key="692">Användaren</entry>
+  <entry key="693">vill ha Moderator-rättigheter. Använd Statusikonerna i Användarlistan för att dela ut och ta bort Moderator-rättigheter.</entry>
+  <entry key="694">vill rita på Whiteboarden. Använd Statusikonerna i Användarlistan för att dela ut och ta bort rättigheter att rita på Whiteboarden.</entry>
+  <entry key="695">vill publicera Ljud/Video. Använd Statusikonerna i Användarlistan för att dela ut och ta bort rättigheter att publicera Ljud/Video.</entry>
+  <entry key="696">Du måste vänta tills en Moderator har stigit in i rummet.</entry>
+  <entry key="697">Avbryt</entry>
+  <entry key="698">Spara</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Månad</entry>
+  <entry key="701">År</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml
new file mode 100644
index 0000000..82b934f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">การประชุมกลุ่ม</entry>
+  <entry key="2">การประชุม</entry>
+  <entry key="3">งานต่างๆ</entry>
+  <entry key="4">การตั้งค่า</entry>
+  <entry key="5">โปรไฟล์</entry>
+  <entry key="6">การบริหารงาน</entry>
+  <entry key="7">หยุด</entry>
+  <entry key="8">บันทึก</entry>
+  <entry key="9">ไม่มีไฟล์</entry>
+  <entry key="10">บันทึกโดยอาจารย์</entry>
+  <entry key="11">ผู้ใช้ที่เชื่อมต่อ:</entry>
+  <entry key="12">เริ่มการประชุม</entry>
+  <entry key="13">ชื่อของฉัน</entry>
+  <entry key="14">การประชุมผ่านวีดีโอ</entry>
+  <entry key="15">อัพโหลดไฟล์</entry>
+  <entry key="16">รีเฟรชลิสต์รายการ</entry>
+  <entry key="17">ไปยังไฟล์หลัก</entry>
+  <entry key="18">โพลล์ใหม่</entry>
+  <entry key="19">โพลล์ใหม่สำหรับการประชุม</entry>
+  <entry key="20">คำถาม:</entry>
+  <entry key="21">ประเภทของโพลล์:</entry>
+  <entry key="22">จัดทำ</entry>
+  <entry key="23">ข้อมูล: ผู้ใช้ที่เชื่อมต่ออยู่แต่ละรายได้รับข้อความพร้อมด้วยโพลล์ใหม่</entry>
+  <entry key="24">จัดทำโพลล์</entry>
+  <entry key="25">ยกเลิก</entry>
+  <entry key="26">ใช่/ไม่</entry>
+  <entry key="27">เลข 1-10</entry>
+  <entry key="28">โพลล์</entry>
+  <entry key="29">ต้องเป็นผู้ดำเนินรายการจึงจะตั้งคำถามได้</entry>
+  <entry key="30">การโหวตของคุณได้รับการลงทะเบียนแล้ว</entry>
+  <entry key="31">คุณโหวตโพลล์นี้ไปแล้ว</entry>
+  <entry key="32">เชิญโหวต!</entry>
+  <entry key="33">คำตอบของคุณ:</entry>
+  <entry key="34">ใช่</entry>
+  <entry key="35">ไม่</entry>
+  <entry key="36">อยากรู้:</entry>
+  <entry key="37">ผลการสำรวจโพลล์</entry>
+  <entry key="38">คำถาม:</entry>
+  <entry key="39">ผล:</entry>
+  <entry key="40">คำตอบ:</entry>
+  <entry key="41">ยังไม่มีการเริ่มการสำรวจโพลล์ใดเลย</entry>
+  <entry key="42">เชิญโหวต!</entry>
+  <entry key="43">การประชุม (สูงสุด 4 ที่นั่ง)</entry>
+  <entry key="44">การประชุมกลุ่ม (สูงสุด 50 ที่นั่ง)</entry>
+  <entry key="45">ประเภท</entry>
+  <entry key="46">ที่นั่งอื่นๆ</entry>
+  <entry key="47">เลือกไปแล้ว</entry>
+  <entry key="48">ป้อนข้อมูล</entry>
+  <entry key="49">ผู้ดำเนินรายการออกจากที่ประชุมไปแล้ว</entry>
+  <entry key="50">ข้อมูลระบบ</entry>
+  <entry key="51">เลือกอุปกรณ์</entry>
+  <entry key="52">เลือกเว็บแคม:</entry>
+  <entry key="53">เลือกไมโครโฟน:</entry>
+  <entry key="54">ตกลง</entry>
+  <entry key="55">ยกเลิก</entry>
+  <entry key="56">คุณต้องทำการเชื่อมต่อใหม่</entry>
+  <entry key="57">แก้ไขการตั้งค่า</entry>
+  <entry key="58">หลักสูตร:</entry>
+  <entry key="59">ภาษา:</entry>
+  <entry key="60">ตกลง</entry>
+  <entry key="61">ยกเลิก</entry>
+  <entry key="62">ลบไวท์บอร์ด</entry>
+  <entry key="63">คุณต้องการให้ลบไวท์บอร์ดให้ว่างก่อนที่จะเพิ่มรูปใหม่หรือไม่</entry>
+  <entry key="64">ไม่ต้องถามอีก</entry>
+  <entry key="65">ไม่</entry>
+  <entry key="66">แก้ไขการตั้งค่า</entry>
+  <entry key="67">ขอให้ยืนยันอีกครั้งก่อนจะลบไวท์บอร์ดให้ว่าง</entry>
+  <entry key="68">ข้อมูลผู้ใช้</entry>
+  <entry key="69">ลบบริเวณวาดรูป</entry>
+  <entry key="70">เลิกทำ</entry>
+  <entry key="71">ทำซ้ำ</entry>
+  <entry key="72">เลือกรายการ</entry>
+  <entry key="73">ข้อความ</entry>
+  <entry key="74">ระบายสี</entry>
+  <entry key="75">วาดเส้น</entry>
+  <entry key="76">ขีดเส้นใต้</entry>
+  <entry key="77">สี่เหลี่ยมผืนผ้า</entry>
+  <entry key="78">วงรี</entry>
+  <entry key="79">ลูกศร</entry>
+  <entry key="80">ลบรายการที่เลือกไว้</entry>
+  <entry key="81">สมัครเพื่อทำหน้าที่ดำเนินรายการ</entry>
+  <entry key="82">สมัคร</entry>
+  <entry key="83">ยกเลิก</entry>
+  <entry key="84">กลายเป็นผู้ดำเนินรายการ</entry>
+  <entry key="85">ปิด</entry>
+  <entry key="86">ตัวเอียง</entry>
+  <entry key="87">ตัวหนา</entry>
+  <entry key="88">กำลังรอ</entry>
+  <entry key="89">ผู้ใช้ต้องการสมัครเป็นผู้ดำเนินรายการ:</entry>
+  <entry key="90">ยอมรับ</entry>
+  <entry key="91">ปฏิเสธ</entry>
+  <entry key="92">ยกเลิก</entry>
+  <entry key="93">ส่งคำขอไปยังผู้ใช้ดังต่อไปนี้</entry>
+  <entry key="94">ยอมรับแล้ว</entry>
+  <entry key="95">ปฏิเสธแล้ว</entry>
+  <entry key="96">เปลี่ยนผู้ดำเนินรายการ</entry>
+  <entry key="97">คุณไม่ได้กำลังดำเนินหลักสูตรนี้!</entry>
+  <entry key="98">ผู้ดำเนินรายการ:</entry>
+  <entry key="99">ห้องนี้เต็มแล้ว ขออภัย โปรดลองใหม่ภายหลัง</entry>
+  <entry key="100">วงรี</entry>
+  <entry key="101">ปิด</entry>
+  <entry key="102">ข้อมูลที่กรอกขัดข้อง</entry>
+  <entry key="103">ตัวอักษร 4 ตัวขึ้นไป อักษรตัวใหญ่มีผลสำคัญ</entry>
+  <entry key="104">รหัสผู้ใช้ต้องมีตัวอักษรอย่างน้อย 4 ตัว</entry>
+  <entry key="105">มีผู้ใช้ชื่อนี้ไปแล้ว</entry>
+  <entry key="106">อีเมล์นี้ลงทะเบียนไปแล้ว</entry>
+  <entry key="107">ระบบขัดข้อง โปรดติดต่อผู้ดูแลระบบ</entry>
+  <entry key="108">ล็อคอิน</entry>
+  <entry key="109">ผู้ใช้:</entry>
+  <entry key="110">รหัสผ่าน:</entry>
+  <entry key="111">ภาษา</entry>
+  <entry key="112">ลงชื่อเข้าใช้</entry>
+  <entry key="113">ลงทะเบียน</entry>
+  <entry key="114">ผู้ใช้:</entry>
+  <entry key="115">รหัสผ่าน:</entry>
+  <entry key="116">พิมพ์ซ้ำ:</entry>
+  <entry key="117">ชื่อ:</entry>
+  <entry key="118">นามสกุล:</entry>
+  <entry key="119">อีเมล์:</entry>
+  <entry key="120">ประเทศ:</entry>
+  <entry key="121">ลงทะเบียน</entry>
+  <entry key="122">ยกเลิก</entry>
+  <entry key="123">ไม่ได้เป็นสมาชิก?</entry>
+  <entry key="124">หน้าแรก</entry>
+  <entry key="125">ผู้ใช้</entry>
+  <entry key="126">กลุ่ม</entry>
+  <entry key="127">องค์กร</entry>
+  <entry key="128">ห้องประชุม</entry>
+  <entry key="129">สาธารณะ</entry>
+  <entry key="130">องค์กร</entry>
+  <entry key="131">เข้าห้อง</entry>
+  <entry key="132">ล็อกอิน</entry>
+  <entry key="133">รหัสผ่าน</entry>
+  <entry key="134">พิมพ์ซ้ำ</entry>
+  <entry key="135">ชื่อ</entry>
+  <entry key="136">นามสกุล</entry>
+  <entry key="137">อีเมล์</entry>
+  <entry key="138">วันเกิด</entry>
+  <entry key="139">ถนน/เลขที่</entry>
+  <entry key="140">รหัสไปรษณีย์/จังหวัด</entry>
+  <entry key="141">ประเทศ</entry>
+  <entry key="142">ข้อมูลที่อยู่</entry>
+  <entry key="143">ข้อมูลผู้ใช้</entry>
+  <entry key="144">บันทึก</entry>
+  <entry key="145">บันทึก</entry>
+  <entry key="146">หมายเลขประจำตัวผู้ใช้</entry>
+  <entry key="147">ล็อคอิน</entry>
+  <entry key="148">ชื่อ</entry>
+  <entry key="149">นามสกุล</entry>
+  <entry key="150">แสดงถัดไป</entry>
+  <entry key="151">แสดงก่อนหน้านี้</entry>
+  <entry key="152">ลบบันทึก</entry>
+  <entry key="153">ยกเลิก</entry>
+  <entry key="154">ลบ</entry>
+  <entry key="155">บันทึกใหม่</entry>
+  <entry key="156">รีเฟรชบันทึก</entry>
+  <entry key="157">ลบบันทึก</entry>
+  <entry key="158">สถานะ</entry>
+  <entry key="159">ยกเลิกแล้ว</entry>
+  <entry key="160">ใช้งานแล้ว</entry>
+  <entry key="161">องค์กร</entry>
+  <entry key="162">ปฏิทิน</entry>
+  <entry key="163">ปิด</entry>
+  <entry key="164">หมายเลขประจำองค์กร</entry>
+  <entry key="165">ชื่อ</entry>
+  <entry key="166">ผู้ใช้</entry>
+  <entry key="167">ผู้ดำเนินรายการ</entry>
+  <entry key="168">ผู้ดูแล</entry>
+  <entry key="169">ระดับผู้ใช้</entry>
+  <entry key="170">องค์กร</entry>
+  <entry key="171">ชื่อ</entry>
+  <entry key="172">เพิ่มองค์กร</entry>
+  <entry key="173">เพิ่มองค์กร</entry>
+  <entry key="174">ยกเลิก</entry>
+  <entry key="175">เพิ่ม</entry>
+  <entry key="176">ย้ายองค์กรออก</entry>
+  <entry key="177">ผู้ใช้</entry>
+  <entry key="178">เพิ่มผู้ใช้</entry>
+  <entry key="179">ลบผู้ใช้</entry>
+  <entry key="180">เพิ่มผู้ใช้</entry>
+  <entry key="181">ค้นหาผู้ใช้</entry>
+  <entry key="182">ค้นหา</entry>
+  <entry key="183">ผู้ใช้</entry>
+  <entry key="184">องค์กร</entry>
+  <entry key="185">ป้อนข้อมูล</entry>
+  <entry key="186">ห้องประชุมกลุ่ม</entry>
+  <entry key="187">ห้องประชุมกลุ่ม</entry>
+  <entry key="188">หมายเลขประจำตัว</entry>
+  <entry key="189">ชื่อ</entry>
+  <entry key="190">สาธารณะ</entry>
+  <entry key="191">องค์กร</entry>
+  <entry key="192">ห้องประชุม</entry>
+  <entry key="193">ชื่อ</entry>
+  <entry key="194">ประเภท</entry>
+  <entry key="195">สาธารณะ</entry>
+  <entry key="196">ข้อคิดเห็น</entry>
+  <entry key="197">บันทึกและเอ็กซ์พอร์ต</entry>
+  <entry key="198">โหลด</entry>
+  <entry key="199">บันทึกเป็น</entry>
+  <entry key="200">ชื่อไฟล์</entry>
+  <entry key="201">ชื่อไฟล์</entry>
+  <entry key="202">ยกเลิก</entry>
+  <entry key="203">ยกเลิก</entry>
+  <entry key="204">ขัดข้อง</entry>
+  <entry key="205">กำลังโหลด</entry>
+  <entry key="206">รายการที่โหลดแล้ว</entry>
+  <entry key="207">กำลังซิงค์โครไนซ์ลูกค้าอยู่ ลูกค้าต้องรอ:</entry>
+  <entry key="208">กำลังโหลดข้อมูลรูปภาพ</entry>
+  <entry key="209">กำลังซิงค์โครไนซ์ลูกค้าอยู่ ลูกค้าต้องรอ:</entry>
+  <entry key="210">ลบบริเวณวาดรูป</entry>
+  <entry key="211">ลบบริเวณวาดรูป ข้อมูลทั้งหมดบนไวท์บอร์ดจะสูญหายไป</entry>
+  <entry key="212">ยืนยันก่อนโหลดไฟล์</entry>
+  <entry key="213">ส่งคำเชิญ</entry>
+  <entry key="214">ส่งคำเชิญ</entry>
+  <entry key="215">เรื่อง</entry>
+  <entry key="216">ผู้รับ</entry>
+  <entry key="217">ข้อความ</entry>
+  <entry key="218">ส่ง</entry>
+  <entry key="219">ยกเลิก</entry>
+  <entry key="220">ส่ง</entry>
+  <entry key="221">ข้อมูลผู้ใช้</entry>
+  <entry key="222">ชื่อเล่นของคุณในการประชุมครั้งนี้</entry>
+  <entry key="223">ชื่อเล่น</entry>
+  <entry key="224">ชื่อ</entry>
+  <entry key="225">นามสกุล</entry>
+  <entry key="226">อีเมล์</entry>
+  <entry key="227">ภาษา</entry>
+  <entry key="228">ป้อนข้อมูล</entry>
+  <entry key="229">กำลังโหลด</entry>
+  <entry key="230">กำลังดาวน์โหลดข้อมูล โปรดรอสักครู่!</entry>
+  <entry key="231">รหัสผ่านผิด</entry>
+  <entry key="232">โปรดใส่รหัสผ่านสองครั้งให้ตรงกันโดยมีตัวอักษรอย่างน้อย 6 ตัว</entry>
+  <entry key="233">อีเมล์ผิด</entry>
+  <entry key="234">อีเมล์ที่คุณกรอกไม่ถูกต้อง</entry>
+  <entry key="235">การลงทะเบียนเสร็จสมบูรณ์</entry>
+  <entry key="236">จัดทำบัญชีของคุณเสร็จเรียบร้อยแล้ว คุณสามารถล็อคอินได้แล้ว</entry>
+  <entry key="237">คุณไม่สามารถแชร์หน้าจอได้ในขณะนี้ มีใครบางคนแชร์หน้าจอไปแล้ว</entry>
+  <entry key="238">ห้ามแชร์</entry>
+  <entry key="239">แชร์หน้าจอ</entry>
+  <entry key="240">แบนด์วิธไม่ดี: คุณไม่สามารถซิงค์โครไนซ์หน้าจอได้ เฟรมต่างๆ จะถูกทิ้งไป หากมีคำเตือนนี้ปรากฏบ่อยครั้ง ควรขอให้ผู้ดำเนินรายการลดคุณภาพหน้าจอ</entry>
+  <entry key="241">หน้าจอของ:</entry>
+  <entry key="242">ระบายสี</entry>
+  <entry key="243">เอกสาร</entry>
+  <entry key="244">แชท</entry>
+  <entry key="245">ไฟล์</entry>
+  <entry key="246">สมาชิก</entry>
+  <entry key="247">ดาวน์โหลดเอกสารต้นฉบับ</entry>
+  <entry key="248">ดาวน์โหลดเอกสาร PDF</entry>
+  <entry key="249">โหลดการนำเสนอไปยังไวท์บอร์ด</entry>
+  <entry key="250">การปรับแต่งค่า</entry>
+  <entry key="251">ลากรายการนี้</entry>
+  <entry key="252">ปรับขนาดรายการนี้</entry>
+  <entry key="253">%</entry>
+  <entry key="254">ของ</entry>
+  <entry key="255">ไปยังหน้าแรก</entry>
+  <entry key="256">ไปยังหน้าก่อนนี้</entry>
+  <entry key="257">ไปยังหน้าถัดไป</entry>
+  <entry key="258">ไปยังหน้าสุดท้าย</entry>
+  <entry key="259">ขยายย่อ --</entry>
+  <entry key="260">ขยายใหญ่ ++</entry>
+  <entry key="261">นาย</entry>
+  <entry key="262">นางสาว</entry>
+  <entry key="263">การปรับแต่งค่า</entry>
+  <entry key="264">หมายเลขประจำตัว</entry>
+  <entry key="265">ปุ่ม</entry>
+  <entry key="266">การปรับแต่งค่า</entry>
+  <entry key="267">ปุ่ม</entry>
+  <entry key="268">อัพเดทล่าสุด</entry>
+  <entry key="269">อัพเดทโดย</entry>
+  <entry key="270">ข้อคิดเห็น</entry>
+  <entry key="271">ค่า</entry>
+  <entry key="272">ของ</entry>
+  <entry key="273">ผู้ใช้</entry>
+  <entry key="274">ลบผู้ใช้ออกจากองค์กร</entry>
+  <entry key="275">ลบ</entry>
+  <entry key="276">ผู้ใช้รายนี้เป็นสมาชิกขององค์กรนี้อยู่แล้ว</entry>
+  <entry key="277">ข่าวสาร</entry>
+  <entry key="278">ควิกลิงค์</entry>
+  <entry key="279">ไปยังการประชุม</entry>
+  <entry key="280">ไปยังหอประชุม</entry>
+  <entry key="281">ข้อมูลช่วยเหลือและสนับสนุน</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">รายงานเหตุขัดข้อง!</entry>
+  <entry key="285">เพิ่มเติม</entry>
+  <entry key="286">เว็บไซต์ของโครงการ (http://openmeetings.apache.org)</entry>
+  <entry key="287">รายชื่ออีเมล์ของผู้ใช้ (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">จำชื่อล็อคอิน</entry>
+  <entry key="289">เนื้อหา</entry>
+  <entry key="290">หน้าหลักของฉัน</entry>
+  <entry key="291">การประชุมที่นัดหมายไว้ของฉัน</entry>
+  <entry key="292">งานที่นัดหมายไว้ของฉัน</entry>
+  <entry key="293">การประชุมสาธารณะ</entry>
+  <entry key="294">การประชุมส่วนตัว</entry>
+  <entry key="295">งานสาธารณะ</entry>
+  <entry key="296">งานส่วนตัว</entry>
+  <entry key="297">เนื้อหาสาธารณะ</entry>
+  <entry key="298">เนื้อหาส่วนตัว</entry>
+  <entry key="299">เนื้อหาส่วนบุคคล</entry>
+  <entry key="300"></entry>
+  <entry key="301">การดำเนินรายการ</entry>
+  <entry key="302">สมัครเพื่อทำหน้าที่ดำเนินรายการ</entry>
+  <entry key="303">โพลล์</entry>
+  <entry key="304">เลือกไฟล์</entry>
+  <entry key="305">การตั้งค่า</entry>
+  <entry key="306">การตั้งค่ากล้องและไมโครโฟน</entry>
+  <entry key="307">การตั้งค่าไวท์บอร์ด</entry>
+  <entry key="308">ออก</entry>
+  <entry key="309">กลับไปยังห้อง</entry>
+  <entry key="310">ล็อคเอ้าท์</entry>
+  <entry key="311">ลืมรหัสผ่าน?</entry>
+  <entry key="312">ตั้งรหัสผ่านใหม่</entry>
+  <entry key="313">โดยอีเมล์</entry>
+  <entry key="314">โดยชื่อล็อคอิน</entry>
+  <entry key="315">อีเมล์ของคุณ</entry>
+  <entry key="316">ชื่อล็อคอินของคุณ</entry>
+  <entry key="317">ส่งอีเมล์พร้อมลิงค์สำหรับตั้งรหัสผ่านใหม่</entry>
+  <entry key="318">ไม่พบอีเมล์แอดเดรสดังกล่าว ดูให้แน่ใจว่าคุณกรอกอีเมล์แอดเดรสเดียวกับที่คุณใช้ในการจัดทำบัญชีของคุณ</entry>
+  <entry key="319">โปรดกรอกอีเมล์หรือชื่อผู้ใช้</entry>
+  <entry key="320">ไม่มีผู้ใช้รายใดเชื่อมต่อกับชื่อผู้ใช้รายนี้</entry>
+  <entry key="321">ได้ส่งอีเมล์ซึ่งมีลิงค์พิเศษไปยังอีเมล์แอดเดรสของคุณแล้ว โปรดเช็คอีเมล์ด้วย หากยังคงไม่ได้รับอีเมล์ โปรดปรับการตั้งค่าอีเมล์สแปมและส่งอีเมล์ยืนยันใหม่อีกครั้ง</entry>
+  <entry key="322">ขัดข้อง</entry>
+  <entry key="323">ข้อความ</entry>
+  <entry key="324">รหัสผ่านไม่ถูกต้อง ไม่พบผู้ใช้</entry>
+  <entry key="325">ตั้งรหัสผ่านของคุณใหม่</entry>
+  <entry key="326">ล็อคอิน</entry>
+  <entry key="327">เปลี่ยนรหัสผ่าน</entry>
+  <entry key="328">รหัสผ่านใหม่</entry>
+  <entry key="329">กรอกรหัสผ่านใหม่</entry>
+  <entry key="330">รหัสผ่านที่คุณกรอกไม่ตรงกัน</entry>
+  <entry key="331">ตัวอักษร 4 ตัวขึ้นไป อักษรตัวใหญ่มีผลสำคัญ</entry>
+  <entry key="332">ตั้งรหัสผ่านแล้ว คุณสามารถล็อคอินได้แล้ว</entry>
+  <entry key="333">ตกลง</entry>
+  <entry key="334">ขัดข้องโดยไม่ทราบสาเหตุ โปรดรายงานต่อทีมบริการของคุณ</entry>
+  <entry key="335">ไม่พบชื่อผู้ใช้</entry>
+  <entry key="336">รหัสผ่านไม่ถูกต้อง</entry>
+  <entry key="337">ออกจากระบบเรียบร้อยแล้ว</entry>
+  <entry key="338">การลงทะเบียนถูกยกเลิกแล้ว</entry>
+  <entry key="339">อีเมล์ไม่ถูกต้อง</entry>
+  <entry key="340">ชื่อไฟล์ซ้ำ โปรดเลือกชื่อไฟล์อื่น</entry>
+  <entry key="341">ชื่อไฟล์สั้นเกินไป</entry>
+  <entry key="342">บันทึกที่อยู่ไม่ได้</entry>
+  <entry key="343">เพิ่มผู้ใช้แล้ว แต่คุณต้องมอบหมายผู้ใช้รายนี้ให้แก่องค์กรใดองค์กรหนึ่ง มิฉะนั้นเขาจะไม่สามารถลงชื่อเข้าใช้ได้</entry>
+  <entry key="344">บันทึกใหม่</entry>
+  <entry key="345">ไม่พบฟิลด์ที่มาพร้อมกับหมายเลขฟิลด์นี้</entry>
+  <entry key="346">ไม่พบป้ายชื่อสำหรับฟิลด์นั้น</entry>
+  <entry key="347">ต้องใช้การอนุญาตจากผู้ดูแล</entry>
+  <entry key="348">โปรแกรมแก้ไขภาษา</entry>
+  <entry key="349">ภาษา</entry>
+  <entry key="350">หมายเลขประจำป้าย</entry>
+  <entry key="351">ป้ายชื่อ</entry>
+  <entry key="352">ค่า</entry>
+  <entry key="353">ค่าฟิลด์</entry>
+  <entry key="354">ป้ายชื่อ</entry>
+  <entry key="355">ค่าป้าย</entry>
+  <entry key="356">หมายเลขประจำป้าย</entry>
+  <entry key="357">คุณลบแต่ป้ายเท่านั้น ไม่ได้ลบฟิลด์! คุณลบฟิลด์ไม่ได้ อาจเป็นเพราะว่าฟิลด์มีป้ายเป็นภาษาอื่น</entry>
+  <entry key="358">หมายเลขประจำป้ายไม่ถูกต้อง ไม่พบหมายเลขประจำค่าภาษาของฟิลด์นั้นในฐานข้อมูล</entry>
+  <entry key="359">คุณลบฟิลด์นี้ไม่ได้ คุณลบได้แต่เพียงป้ายเท่านั้น ลบฟิลด์ไม่ได้ ไม่มีการโหลดป้ายในขณะนี้ อาจเป็นเพราะว่าไม่ได้เลือกฟิลด์ใดเลยหรือว่าไม่มีป้ายสำหรับภาษานี้สำหรับฟิลด์ที่กำหนด</entry>
+  <entry key="360">เอ็กซ์พอร์ต</entry>
+  <entry key="361">คุณจะต้องออกจากระบบก่อน จึงจะเห็นการเปลี่ยนแปลง</entry>
+  <entry key="362">เพิ่มภาษาใหม่</entry>
+  <entry key="363">ลบภาษา</entry>
+  <entry key="364">เพิ่มภาษาใหม่</entry>
+  <entry key="365">ชื่อ</entry>
+  <entry key="366">เพิ่มภาษา</entry>
+  <entry key="367">สำรองข้อมูล</entry>
+  <entry key="368">ไปยังหน้าแรก</entry>
+  <entry key="369">ไปยังหน้าก่อนนี้</entry>
+  <entry key="370">ไปยังหน้าถัดไป</entry>
+  <entry key="371">ไปยังหน้าสุดท้าย</entry>
+  <entry key="372">ผู้ใช้พูด (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">เปิด/ปิดเสียง</entry>
+  <entry key="374">ระบบ</entry>
+  <entry key="375">การตั้งค่าของคุณ</entry>
+  <entry key="376">สวัสดี</entry>
+  <entry key="377">แก้ไขโปรไฟล์ของคุณ</entry>
+  <entry key="378">ข้อความใหม่:</entry>
+  <entry key="379">อัพโหลดภาพใหม่ๆ</entry>
+  <entry key="380">ข้อมูลผู้ใช้ - เอ็กซ์พอร์ต</entry>
+  <entry key="381">ต้องมีทุกองค์กรอยู่ก่อนแล้ว</entry>
+  <entry key="382">เริ่มเอ็กซ์พอร์ต</entry>
+  <entry key="383">โดยองค์กร</entry>
+  <entry key="384">เริ่มเอ็กซ์พอร์ต</entry>
+  <entry key="385">ข้อมูลผู้ใช้ - อิมพอร์ต</entry>
+  <entry key="386">เลือกผู้ใช้.xml</entry>
+  <entry key="387">อิมพอร์ต</entry>
+  <entry key="388">เอ็กซ์พอร์ตไปยัง XML – ไฟล์เหล่านี้สามารถใช้เพื่อ – ส่งเสริมโครงการ – อิมพอร์ตไปยังระบบอื่น – สำรองข้อมูล – การปรับตามความต้องการ - ใส่ไว้ในรายชื่อภาษาสำหรับการติดตั้งครั้งต่อไป</entry>
+  <entry key="389">เลือกไฟล์ภาษาเพื่ออิมพอร์ต เลือกภาษาที่ถูกต้องจาก Combobox! ไม่ว่าชื่อไฟล์จะเป็นอะไรก็ตาม ก็จะอิมพอร์ตเป็นภาษานี้!</entry>
+  <entry key="390">อิมพอร์ต - เลือกไฟล์</entry>
+  <entry key="391">บันทึกเป็น</entry>
+  <entry key="392">ชื่อ:</entry>
+  <entry key="393">ข้อคิดเห็น:</entry>
+  <entry key="394">บันทึก</entry>
+  <entry key="395">บันทึก</entry>
+  <entry key="396">บันทึกผู้ชม</entry>
+  <entry key="397">บันทึกห้องสาธารณะและห้องส่วนตัว</entry>
+  <entry key="398">ผู้ใช้:</entry>
+  <entry key="399">เข้าร่วม:</entry>
+  <entry key="400"></entry>
+  <entry key="401">ผู้ใช้ในห้องนี้:</entry>
+  <entry key="402">รีเฟรช</entry>
+  <entry key="403">ห้องนี้เต็มแล้ว อีกสักครู่โปรดลองใหม่</entry>
+  <entry key="404">คลิกที่ห้องเพื่อดูรายละเอียด</entry>
+  <entry key="405">แชทกับผู้ใช้ในห้องนี้</entry>
+  <entry key="406">ห้อง:</entry>
+  <entry key="407">ผู้ใช้ในห้องนี้:</entry>
+  <entry key="408">ตั้งแต่:</entry>
+  <entry key="409">เล่นบันทึก</entry>
+  <entry key="410">ความยาว</entry>
+  <entry key="411">วันที่</entry>
+  <entry key="412">โหมดการบันทึก! คุณไม่สามารถเปลี่ยนแปลงค่าใดๆ ได้ ไฟล์นี้ได้รับการบันทึกไว้แล้ว</entry>
+  <entry key="413">เล่นบันทึกนี้</entry>
+  <entry key="414">เล่น / หยุดชั่วคราว</entry>
+  <entry key="415">เริ่มการบันทึก</entry>
+  <entry key="416">หยุดการบันทึก</entry>
+  <entry key="417">Recording: / บันทึก:</entry>
+  <entry key="418">มีคนกำลังบันทึกอยู่ในขณะนี้</entry>
+  <entry key="419">กำลังบันทึก! โดยผู้ใช้:</entry>
+  <entry key="420">ยกเลิก</entry>
+  <entry key="421">การบันทึกจะถูกยกเลิกและไม่บันทึกไว้</entry>
+  <entry key="422">เล่นต่อ</entry>
+  <entry key="423">ปิดหน้าต่างนี้และกลับเข้าสู่การบันทึก</entry>
+  <entry key="424">เปลี่ยนสีเส้น</entry>
+  <entry key="425">เลือกสี</entry>
+  <entry key="426">ยกเลิก / เริ่มใช้เส้นสี</entry>
+  <entry key="427">เปลี่ยนสีเติม</entry>
+  <entry key="428">ยกเลิก / เริ่มใช้สีเติม</entry>
+  <entry key="429">เปลี่ยนความหนาของเส้น</entry>
+  <entry key="430">ปิด</entry>
+  <entry key="431">เปลี่ยนขนาดตัวอักษร</entry>
+  <entry key="432">ลบการบันทึก</entry>
+  <entry key="433">แขก</entry>
+  <entry key="434">โดย:</entry>
+  <entry key="435">ชื่อ</entry>
+  <entry key="436">ห้อง</entry>
+  <entry key="437">วันที่</entry>
+  <entry key="438">ยกเลิก</entry>
+  <entry key="439">เริ่ม</entry>
+  <entry key="440">ชื่อ</entry>
+  <entry key="441">วันที่</entry>
+  <entry key="442">ลบเซิร์ฟเวอร์-บันทึกการแชท</entry>
+  <entry key="443">แชท</entry>
+  <entry key="444">ส่งข้อความ</entry>
+  <entry key="445">อีโมติคอน</entry>
+  <entry key="446">อีโมติคอน</entry>
+  <entry key="447">เลือกอุปกรณ์ที่ใช้เผยแพร่</entry>
+  <entry key="448">เสียงและภาพวีดีโอ</entry>
+  <entry key="449">เสียงเท่านั้น</entry>
+  <entry key="450">ภาพวีดีโอเท่านั้น</entry>
+  <entry key="451">ไม่มีเสียง/ภาพวีดีโอ (ภาพนิ่ง)</entry>
+  <entry key="452">ไม่เผยแพร่เสียง/ภาพวีดีโอจากเครื่องคอมพิวเตอร์ของคุณสู่สาธารณะ โดยที่จะแสดงภาพจากโปรโฟล์ของคุณแทน ควรเลือกการตั้งค่าเหล่านี้หากคุณมีปัญหากับแบนด์วิธหรืออินเตอร์เน็ตช้ามาก</entry>
+  <entry key="453">จ</entry>
+  <entry key="454">อ</entry>
+  <entry key="455">พ</entry>
+  <entry key="456">พฤ</entry>
+  <entry key="457">ศ</entry>
+  <entry key="458">ส</entry>
+  <entry key="459">อา</entry>
+  <entry key="460">วันจันทร์</entry>
+  <entry key="461">วันอังคาร</entry>
+  <entry key="462">วันพุธ</entry>
+  <entry key="463">วันพฤหัสบดี</entry>
+  <entry key="464">วันศุกร์</entry>
+  <entry key="465">วันเสาร์</entry>
+  <entry key="466">วันอาทิตย์</entry>
+  <entry key="467">สัปดาห์</entry>
+  <entry key="468">สัปดาห์ตามปฏิทิน</entry>
+  <entry key="469">มกราคม</entry>
+  <entry key="470">กุมภาพันธ์</entry>
+  <entry key="471">มีนาคม</entry>
+  <entry key="472">เมษายน</entry>
+  <entry key="473">พฤษภาคม</entry>
+  <entry key="474">มิถุนายน</entry>
+  <entry key="475">กรกฎาคม</entry>
+  <entry key="476">สิงหาคม</entry>
+  <entry key="477">กันยายน</entry>
+  <entry key="478">ตุลาคม</entry>
+  <entry key="479">พฤศจิกายน</entry>
+  <entry key="480">ธันวาคม</entry>
+  <entry key="481">ปฏิทิน</entry>
+  <entry key="482">ผู้เข้าร่วม</entry>
+  <entry key="483">แสดงการตั้งค่าโครงร่าง</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">กว้าง | สูง</entry>
+  <entry key="486">กล่องวีดีโอ</entry>
+  <entry key="487">กล่องการดำเนินรายการ</entry>
+  <entry key="488">X</entry>
+  <entry key="489">กล่องไวท์บอร์ด</entry>
+  <entry key="490">ดำเนินการแล้ว</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">กว้าง | สูง</entry>
+  <entry key="493">กล่องไฟล์ แชท ผู้เข้าร่วม</entry>
+  <entry key="494">ดำเนินการแล้ว</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">กว้าง | สูง</entry>
+  <entry key="497">ผู้ดำเนินรายการออกจากห้องไปแล้ว ไม่มีใครอยู่ในขณะนี้ คุณสามารถสมัครเพื่อทำหน้าที่ดำเนินรายการได้หรือรอ</entry>
+  <entry key="498">ผู้ดำเนินรายการออกจากห้องไปแล้ว แต่มีผู้เข้าร่วมบางรายอยู่ คุณต้องสมัครเพื่อทำหน้าที่ดำเนินรายการหรือรอ</entry>
+  <entry key="499">ผลตอบรับการประชุมแบบเปิด</entry>
+  <entry key="500">การประชุมแบบเปิด – คำเชิญ</entry>
+  <entry key="501">ข้อความจากผู้ใช้</entry>
+  <entry key="502">ข้อความ</entry>
+  <entry key="503">คลิกลิงค์นี้เพื่อเข้าร่วมการประชุม</entry>
+  <entry key="504">คลิกที่นี่เพื่อเข้าห้อง</entry>
+  <entry key="505">หากมีปัญหากับลิงค์นี้ โปรดคัดลอกลิงค์นี้แล้วนำไปวางที่เบราวเซอร์:</entry>
+  <entry key="506">ลงทะเบียนการประชุมแบบเปิด</entry>
+  <entry key="507">ข้อมูลผู้ใช้ของคุณ:</entry>
+  <entry key="508">ชื่อล็อคอิน:</entry>
+  <entry key="509">รหัสผ่าน:</entry>
+  <entry key="510">อีเมล์:</entry>
+  <entry key="511">การประชุมแบบเปิด - ทีม</entry>
+  <entry key="512">ลงทะเบียนการประชุมแบบเปิด</entry>
+  <entry key="513">การประชุมแบบเปิด - ตั้งรหัสผ่านใหม่</entry>
+  <entry key="514">คลิกลิงค์นี้เพื่อกรอกรหัสผ่านใหม่:</entry>
+  <entry key="515">คลิกที่นี่เพื่อกรอกรหัสผ่านใหม่</entry>
+  <entry key="516">หากมีปัญหากับลิงค์นี้ โปรดคัดลอกลิงค์นี้แล้วนำไปวางที่เบราวเซอร์:</entry>
+  <entry key="517">การประชุมแบบเปิด ตั้งรหัสผ่านใหม่</entry>
+  <entry key="518">โปรดกรอกวันที่ที่ถูกต้อง ตัวอย่างเช่น 24/12/2001 (วว/ดด/ปปปป)</entry>
+  <entry key="519">โปรดกรอกอีเมล์ที่ถูกต้อง ตัวอย่างเช่น name@mail.com</entry>
+  <entry key="520">โปรดกรอกตัวเลขที่มีจุดทศนิยม เช่น 1.00</entry>
+  <entry key="521">โปรดกรอกตัวเลข (จำนวนเต็ม) ตัวอย่างเช่น 100</entry>
+  <entry key="522">โปรดกรอกหมายเลขโทรศัพท์ที่ถูกต้อง ตัวอย่างเช่น ++49 0123 123123</entry>
+  <entry key="523">โปรดกรอกเวลาที่ถูกต้อง เช่น 12.33 (ชช.นน)</entry>
+  <entry key="524">ป้องกันรหัสผ่านแล้ว</entry>
+  <entry key="525">รหัสผ่าน</entry>
+  <entry key="526">ระยะเวลาที่ใช้การได้</entry>
+  <entry key="527">ไม่จำกัด</entry>
+  <entry key="528">จำกัดระยะเวลา</entry>
+  <entry key="529">ใช้ครั้งเดียว</entry>
+  <entry key="530">ใช้งานได้ตั้งแต่:</entry>
+  <entry key="531">ถึง:</entry>
+  <entry key="532">คำเชิญเข้าสู่การประชุมแบบเปิด</entry>
+  <entry key="533">ไม่มีคำเชิญสำหรับรหัสคำเชิญนี้</entry>
+  <entry key="534">คำเชิญนี้ใช้ไปแล้ว คำเชิญประเภทนี้ไม่สามารถใช้ซ้ำได้</entry>
+  <entry key="535">รหัสคำเชิญนี้ไม่ถูกต้อง</entry>
+  <entry key="536">รหัสผ่าน:</entry>
+  <entry key="537">ตรวจสอบรหัสผ่าน</entry>
+  <entry key="538">รหัสผ่านไม่ถูกต้อง!</entry>
+  <entry key="539">เสียง_ภาพวีดีโอ</entry>
+  <entry key="540">ซิงค์โครไนซ์เสียง/ภาพวีดีโอ</entry>
+  <entry key="541">ล็อคอินถูกต้อง แต่หมวดที่คุณล็อกอินนั้นไม่ได้ใช้งานอยู่หรือไม่ได้จัดเก็บไว้ในเซิร์ฟเวอร์ คุณจะต้องขอหมายเลขประจำหมวดใหม่และลองล็อกอินอีกครั้ง</entry>
+  <entry key="542">ยังไม่ได้ล็อคอินหมายเลขประจำหมวดหรือไม่มีสิทธิ์ของผู้ดูแล SOAP Gateway จำเป็นต้องใช้ผู้ใช้ที่สิทธิ์ของผู้ดูแลในการฝากฝังผู้ใช้รายใหม่</entry>
+  <entry key="543">หมวดนี้ไม่มีการเชื่อมต่อข้อมูลผู้ใช้ระยะไกล อาจเป็นเพราะว่าคุณไม่ได้เรียก SOAP-Gateway ก่อนที่จะเข้าใช้โปรแกรมหรือว่าคุณใช้หมายเลขประจำหมวดผิด</entry>
+  <entry key="544">ตัวบันทึกในปัจจุบันอยู่ในช่วงทดลองใช้!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">แกน x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">แกน y</entry>
+  <entry key="549">กว้าง</entry>
+  <entry key="550">ความกว้าง</entry>
+  <entry key="551">สูง</entry>
+  <entry key="552">ความสูง</entry>
+  <entry key="553">เปลี่ยนความโปร่งแสง</entry>
+  <entry key="554">เปิดเบราวเซอร์</entry>
+  <entry key="555">ปิดเบราวเซอร์</entry>
+  <entry key="556">การเชื่อมต่อกับเซิร์ฟเวอร์ขาดลง คุณจำเป็นต้องโหลดโปรแกรมใหม่หรือ/และตรวจสอบเครือข่ายของคุณ</entry>
+  <entry key="557">พอยเตอร์</entry>
+  <entry key="558">กำลังซิงค์โครไนซ์</entry>
+  <entry key="559">กำลังซิงค์โครไนซ์กับผู้ใช้ โปรดรอสักครู่</entry>
+  <entry key="560">&lt;u&gt;ดาวน์โหลดเป็น SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;ดาวน์โหลดเป็น PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;ดาวน์โหลดเป็น JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;ดาวน์โหลดเป็น PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;ดาวน์โหลดเป็น TIF&lt;/u&gt;</entry>
+  <entry key="565">เตือนความจำ:</entry>
+  <entry key="566">ประเภท:</entry>
+  <entry key="567">การทำซ้ำ:</entry>
+  <entry key="568">ไม่มี</entry>
+  <entry key="569">สถานที่ตั้ง:</entry>
+  <entry key="570">เริ่ม</entry>
+  <entry key="571">สิ้นสุด</entry>
+  <entry key="572">หัวข้อ:</entry>
+  <entry key="573">ข้อคิดเห็น:</entry>
+  <entry key="574">เชิญผู้อื่น</entry>
+  <entry key="575">รายวัน</entry>
+  <entry key="576">รายเดือน</entry>
+  <entry key="577">รายปี</entry>
+  <entry key="578">การสิ้นสุดการนัดต้องเป็นหลังจากการเริ่มต้นการนัด!</entry>
+  <entry key="579">โปรดแทรกหัวข้อ!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">เปิดใช้งานส่วนนี้หากภาษาที่คุณใช้เป็นแบบขวาไปซ้าย (การเรียงคำกลับกัน)</entry>
+  <entry key="582">แดชบอร์ด</entry>
+  <entry key="583">ชมการประชุมและงานอีเวนท์ที่บันทึกไว้</entry>
+  <entry key="584">การประชุม - เปิดการประชุมตั้งแต่ผู้ใช้ 4 รายขึ้นไป (มากที่สุด 16 ราย)&lt;br/&gt;ทุกท่านสามารถเข้าใช้เสียง + ภาพวีดีโอได้</entry>
+  <entry key="585">งานอีเวนท์ - เปิดการประชุมโดยมีผู้เข้าร่วมได้มากที่สุด 200 ราย&lt;br/&gt;ผู้ดำเนินรายการเท่านั้นที่สามารถใช้เสียง/ภาพวีดีโอได้</entry>
+  <entry key="586">สร้างผู้ใช้ ห้อง องค์กร&lt;br/&gt; + เปลี่ยนการปรับแต่งค่า</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
new file mode 100644
index 0000000..197197c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">konferans</entry>
+  <entry key="2">toplantı</entry>
+  <entry key="3">Etkinlikler</entry>
+  <entry key="4">Ayarlar</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Yönetim</entry>
+  <entry key="7">Dur</entry>
+  <entry key="8">Kayıt</entry>
+  <entry key="9">Kullanılabilir dosya yok</entry>
+  <entry key="10">Öğretmene Göre Kayıt</entry>
+  <entry key="11">Bağlı kullanıcılar:</entry>
+  <entry key="12">Bir konferans başlat</entry>
+  <entry key="13">Benim Adım</entry>
+  <entry key="14">Görüntülü Konferans</entry>
+  <entry key="15">Dosya Yükleme</entry>
+  <entry key="16">Listeyi Yenile</entry>
+  <entry key="17">Ana Dosyaya</entry>
+  <entry key="18">Yeni Anket</entry>
+  <entry key="19">Konferans için yeni bir anket.</entry>
+  <entry key="20">Soru:</entry>
+  <entry key="21">Anket tipi:</entry>
+  <entry key="22">Yarat</entry>
+  <entry key="23">Bilgi: Bağlı her kullanıcı yeni anketle ilgili bir mesaj alır.</entry>
+  <entry key="24">Bir anket yarat</entry>
+  <entry key="25">İptal</entry>
+  <entry key="26">Evet/Hayır</entry>
+  <entry key="27">Sayısal 1-10</entry>
+  <entry key="28">Anket</entry>
+  <entry key="29">Soru oluşturabilmek için Düzenleyici olmanız gerekmekte</entry>
+  <entry key="30">Oyunuz kaydedildi.</entry>
+  <entry key="31">Bu anket için zaten oy kullanmıştınız.</entry>
+  <entry key="32">Oyla !</entry>
+  <entry key="33">Sizin yanıtınız:</entry>
+  <entry key="34">Evet</entry>
+  <entry key="35">Hayır</entry>
+  <entry key="36">Sonuçları gör:</entry>
+  <entry key="37">Anket sonuçları</entry>
+  <entry key="38">Soru:</entry>
+  <entry key="39">Sonuçlar:</entry>
+  <entry key="40">Cevaplar:</entry>
+  <entry key="41">Başlamış olan anket yok.</entry>
+  <entry key="42">Oyla!</entry>
+  <entry key="43">Toplantı (en fazla 4 yer)</entry>
+  <entry key="44">Konferans (en fazla 50 yer)</entry>
+  <entry key="45">Tip</entry>
+  <entry key="46">Diğer yerler</entry>
+  <entry key="47">Halihazırda seçili</entry>
+  <entry key="48">giriş</entry>
+  <entry key="49">Düzenleyici toplantıyı terk etti.</entry>
+  <entry key="50">Sistem bilgisi</entry>
+  <entry key="51">Araç seçiniz</entry>
+  <entry key="52">Web Kamerası seçiniz:</entry>
+  <entry key="53">Mikrofon seçiniz:</entry>
+  <entry key="54">tamam</entry>
+  <entry key="55">iptal</entry>
+  <entry key="56">Yeniden bağlanmanız gerekmekte.</entry>
+  <entry key="57">Ayarları düzenle.</entry>
+  <entry key="58">Ders:</entry>
+  <entry key="59">Dil:</entry>
+  <entry key="60">tamam</entry>
+  <entry key="61">iptal</entry>
+  <entry key="62">Tahtayı temizle</entry>
+  <entry key="63">Yeni resim eklenmeden önce tahtanın temizlenmesini istiyor musunuz?</entry>
+  <entry key="64">Tekrar sormayın</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Ayarları düzenle</entry>
+  <entry key="67">Tahtanın temizlenmesinden önce onay başvurusu.</entry>
+  <entry key="68">Kullanıcı Bilgisi</entry>
+  <entry key="69">Çizim alanını temizle</entry>
+  <entry key="70">Geri al</entry>
+  <entry key="71">İleri al</entry>
+  <entry key="72">Bir Nesne Seçin</entry>
+  <entry key="73">Metin</entry>
+  <entry key="74">Boyama</entry>
+  <entry key="75">Çizgi çiz</entry>
+  <entry key="76">Altını çiz</entry>
+  <entry key="77">Dikdörtgen</entry>
+  <entry key="78">Elips</entry>
+  <entry key="79">Ok</entry>
+  <entry key="80">Seçili öğeyi sil</entry>
+  <entry key="81">Düzenleme için uygula</entry>
+  <entry key="82">uygula</entry>
+  <entry key="83">iptal</entry>
+  <entry key="84">Düzenleyici ol</entry>
+  <entry key="85">kapat</entry>
+  <entry key="86">eğik</entry>
+  <entry key="87">kalın</entry>
+  <entry key="88">BEKLİYOR</entry>
+  <entry key="89">Düzenleyicilik için bir kullanıcı bekleniyor:</entry>
+  <entry key="90">onay</entry>
+  <entry key="91">reddet</entry>
+  <entry key="92">iptal</entry>
+  <entry key="93">Bu kullanıcılar için istek gönder</entry>
+  <entry key="94">Onaylandı</entry>
+  <entry key="95">Reddedildi</entry>
+  <entry key="96">Düzenleyiciyi Değiştir</entry>
+  <entry key="97">Bu dersin düzenleyicisi değilsiniz!</entry>
+  <entry key="98">Düzenleyici:</entry>
+  <entry key="99">Bu oda dolu. Lütfen daha sonra yeniden deneyiniz.</entry>
+  <entry key="100">Elips</entry>
+  <entry key="101">kapat</entry>
+  <entry key="102">veri giriş hatası</entry>
+  <entry key="103">4 ya da daha fazla karakter; büyük-küçük harfe duyarlı!</entry>
+  <entry key="104">Kullanıcı şifresi en az 4 karakter olmalıdır</entry>
+  <entry key="105">Bu kullanıcı adı alınmış</entry>
+  <entry key="106">Bu e-posta adresi zaten kayıtlı</entry>
+  <entry key="107">Sistem hatası. Lütfen sistem yöneticileri ile bağlantıya geçiniz.</entry>
+  <entry key="108">Oturum Aç</entry>
+  <entry key="109">Kullanıcı Adı:</entry>
+  <entry key="110">Şifre:</entry>
+  <entry key="111">Dil</entry>
+  <entry key="112">Giriş Yap</entry>
+  <entry key="113">Kayıt Ol</entry>
+  <entry key="114">Kullanıcı Adı:</entry>
+  <entry key="115">Şifre:</entry>
+  <entry key="116">Yeniden Yazın:</entry>
+  <entry key="117">Ad:</entry>
+  <entry key="118">Soyad:</entry>
+  <entry key="119">E-posta:</entry>
+  <entry key="120">Ülke:</entry>
+  <entry key="121">Kayıt</entry>
+  <entry key="122">İptal</entry>
+  <entry key="123">Üye değil misiniz?</entry>
+  <entry key="124">Ev</entry>
+  <entry key="125">Kullanıcılar</entry>
+  <entry key="126">Gruplar</entry>
+  <entry key="127">Kurumlar</entry>
+  <entry key="128">Toplantı-Odaları</entry>
+  <entry key="129">herkese açık</entry>
+  <entry key="130">Kurum</entry>
+  <entry key="131">giriş</entry>
+  <entry key="132">Oturum Aç</entry>
+  <entry key="133">Şifre</entry>
+  <entry key="134">Yeniden yaz</entry>
+  <entry key="135">Ad</entry>
+  <entry key="136">Soyad</entry>
+  <entry key="137">E-Posta</entry>
+  <entry key="138">Doğum günü</entry>
+  <entry key="139">Cadde/No</entry>
+  <entry key="140">ZIP/Şehir</entry>
+  <entry key="141">Ülke</entry>
+  <entry key="142">Adres</entry>
+  <entry key="143">Kullanıcı bilgisi</entry>
+  <entry key="144">kaydet</entry>
+  <entry key="145">Kaydet</entry>
+  <entry key="146">Kullanıcı kodu</entry>
+  <entry key="147">Oturum aç</entry>
+  <entry key="148">Ad</entry>
+  <entry key="149">Soyad</entry>
+  <entry key="150">sonrakini göster</entry>
+  <entry key="151">öncekini göster</entry>
+  <entry key="152">kaydı sil</entry>
+  <entry key="153">iptal</entry>
+  <entry key="154">sil</entry>
+  <entry key="155">yeni kayıt</entry>
+  <entry key="156">kayıt yenile</entry>
+  <entry key="157">kayıt sil</entry>
+  <entry key="158">durum</entry>
+  <entry key="159">devre dışı</entry>
+  <entry key="160">etkin</entry>
+  <entry key="161">Kurumlar</entry>
+  <entry key="162">takvim</entry>
+  <entry key="163">kapat</entry>
+  <entry key="164">Kurum Kodu</entry>
+  <entry key="165">Ad</entry>
+  <entry key="166">Kullanıcı</entry>
+  <entry key="167">Düzenleyici</entry>
+  <entry key="168">Yönetici</entry>
+  <entry key="169">kullanıcı seviyesi</entry>
+  <entry key="170">Kurum</entry>
+  <entry key="171">ad</entry>
+  <entry key="172">kurum ekle</entry>
+  <entry key="173">kurum ekle</entry>
+  <entry key="174">iptal</entry>
+  <entry key="175">ekle</entry>
+  <entry key="176">kurumu kaldır</entry>
+  <entry key="177">kullanıcı</entry>
+  <entry key="178">kullanıcı ekle</entry>
+  <entry key="179">kullanıcı sil</entry>
+  <entry key="180">kullanıcı ekle</entry>
+  <entry key="181">kullanıcı ara</entry>
+  <entry key="182">ara</entry>
+  <entry key="183">kullanıcı</entry>
+  <entry key="184">Kurum</entry>
+  <entry key="185">giriş</entry>
+  <entry key="186">Konferans Odaları</entry>
+  <entry key="187">Konferans Odaları</entry>
+  <entry key="188">kod</entry>
+  <entry key="189">Ad</entry>
+  <entry key="190">herkese açık</entry>
+  <entry key="191">Kurumlar</entry>
+  <entry key="192">Toplantı Odaları</entry>
+  <entry key="193">Ad</entry>
+  <entry key="194">Tip</entry>
+  <entry key="195">Herkese Açık</entry>
+  <entry key="196">Yorum</entry>
+  <entry key="197">kaydet</entry>
+  <entry key="198">yükle</entry>
+  <entry key="199">farklı kaydet</entry>
+  <entry key="200">Dosya adı</entry>
+  <entry key="201">dosya adı</entry>
+  <entry key="202">iptal</entry>
+  <entry key="203">kaydet</entry>
+  <entry key="204">hata</entry>
+  <entry key="205">yükleniyor</entry>
+  <entry key="206">nesneler yüklendi</entry>
+  <entry key="207">istemciler senkronize oluyor, bekleyen istemciler:</entry>
+  <entry key="208">İmaj verisi yükleniyor</entry>
+  <entry key="209">istemciler senkronize oluyor, bekleyen istemciler:</entry>
+  <entry key="210">çizim alanını temizle</entry>
+  <entry key="211">çizim alanını temizle, tahtadaki tüm bilgiler silinecek</entry>
+  <entry key="212">Dosyayı yollamadan önce onaylayınız</entry>
+  <entry key="213">Davet gönder</entry>
+  <entry key="214">Davet gönder</entry>
+  <entry key="215">Konu</entry>
+  <entry key="216">Alıcı</entry>
+  <entry key="217">Mesaj</entry>
+  <entry key="218">Yolla</entry>
+  <entry key="219">İptal</entry>
+  <entry key="220">gönder</entry>
+  <entry key="221">Kullanıcı verisi</entry>
+  <entry key="222">Bu konferans için takma adınız</entry>
+  <entry key="223">Takma Ad</entry>
+  <entry key="224">Ad</entry>
+  <entry key="225">Soyad</entry>
+  <entry key="226">E-posta</entry>
+  <entry key="227">Dil</entry>
+  <entry key="228">giriş</entry>
+  <entry key="229">Yükleniyor</entry>
+  <entry key="230">Veri yükleniyor, lütfen bekleyin!</entry>
+  <entry key="231">Hatalı Şifre</entry>
+  <entry key="232">Lütfen en az 6 karakter içeren birbiri ile aynı iki şifre giriniz</entry>
+  <entry key="233">Hatalı E-posta</entry>
+  <entry key="234">Hatalı bir e-posta adresi girdiniz</entry>
+  <entry key="235">Kayıt Başarılı</entry>
+  <entry key="236">Hesabınız oluşturuldu, oturum açabilirsiniz.</entry>
+  <entry key="237">Şu anda ekranınızı paylaşamazsınız. Başka biri hâlihazırda ekranı paylaşmış.</entry>
+  <entry key="238">Paylaşıma izin yok</entry>
+  <entry key="239">Ekranı Paylaş</entry>
+  <entry key="240">Düşük Bağlantı Hızı: Ekranınız senkronize edilemiyor. Görüntüler atlanacak. Eğer bu uyarıyı almaya devam ederseniz, düzenleyiciden kaliteyi düşürmesini isteyebilirsiniz.</entry>
+  <entry key="241">Ekranı:</entry>
+  <entry key="242">Boyama</entry>
+  <entry key="243">Doküman</entry>
+  <entry key="244">Sohbet</entry>
+  <entry key="245">Dosyalar</entry>
+  <entry key="246">Üyeler</entry>
+  <entry key="247">Orijinal dokümanı indir</entry>
+  <entry key="248">PDF dokümanı indir</entry>
+  <entry key="249">Sunumu tahtaya yükle</entry>
+  <entry key="250">Konfigürasyon</entry>
+  <entry key="251">Bu nesneyi bırak</entry>
+  <entry key="252">Bu nesneyi boyutlandır</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">İlk sayfaya git</entry>
+  <entry key="256">Önceki sayfaya git</entry>
+  <entry key="257">Sonraki sayfaya git</entry>
+  <entry key="258">Son sayfaya git</entry>
+  <entry key="259">Uzaklaştır --</entry>
+  <entry key="260">Yakınlaştır ++</entry>
+  <entry key="261">Sayın</entry>
+  <entry key="262">Sayın</entry>
+  <entry key="263">Konfigürasyon</entry>
+  <entry key="264">KOD</entry>
+  <entry key="265">Anahtar</entry>
+  <entry key="266">Konfigürasyon</entry>
+  <entry key="267">Anahtar</entry>
+  <entry key="268">son güncelleme</entry>
+  <entry key="269">güncellemeye göre</entry>
+  <entry key="270">yorum</entry>
+  <entry key="271">Değer</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Kullanıcılar</entry>
+  <entry key="274">kullanıcıyı kurumdan sil</entry>
+  <entry key="275">sil</entry>
+  <entry key="276">Bu kullanıcı hâlihazırda bu grubun bir üyesi.</entry>
+  <entry key="277">Haberler</entry>
+  <entry key="278">Hızlı Bağlantılar</entry>
+  <entry key="279">Konferansa git</entry>
+  <entry key="280">Oditoryuma git</entry>
+  <entry key="281">yardım ve Destek</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Hata bildir!</entry>
+  <entry key="285">daha fazlası</entry>
+  <entry key="286">Proje Web Sitesi (http://openmeetings.apache.org)</entry>
+  <entry key="287">Kullanıcı E-Posta Listesi (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Oturumu Hatırla</entry>
+  <entry key="289">İçerik</entry>
+  <entry key="290">Ana Sayfam</entry>
+  <entry key="291">Planlanmış Toplantılarım</entry>
+  <entry key="292">Planlanmış Etkinliklerim</entry>
+  <entry key="293">Herkese Açık Toplantılar</entry>
+  <entry key="294">Özel Toplantılar</entry>
+  <entry key="295">Herkese Açık Etkinlikler</entry>
+  <entry key="296">Özel Etkinlikler</entry>
+  <entry key="297">Herkese Açık İçerik</entry>
+  <entry key="298">Özel İçerik</entry>
+  <entry key="299">Kişisel İçerik</entry>
+  <entry key="300"></entry>
+  <entry key="301">Düzenleme</entry>
+  <entry key="302">Düzenleyicilik için onay</entry>
+  <entry key="303">Anketler</entry>
+  <entry key="304">Bir dosya seçin</entry>
+  <entry key="305">Ayarlar</entry>
+  <entry key="306">Kamera ve Mikrofon Ayarları</entry>
+  <entry key="307">Tahta Ayarları</entry>
+  <entry key="308">Çıkış</entry>
+  <entry key="309">Odalara geri dön</entry>
+  <entry key="310">Oturumu Kapat</entry>
+  <entry key="311">Şifreyi Unut?</entry>
+  <entry key="312">Şİfreyi Sıfırla</entry>
+  <entry key="313">E-postaya göre</entry>
+  <entry key="314">Oturuma göre</entry>
+  <entry key="315">Postanız</entry>
+  <entry key="316">Oturumunuz</entry>
+  <entry key="317">Sınıflama bağlantısı ile e-posta gönder</entry>
+  <entry key="318">E-posta adresi bulunamadı. Kayıt esnasında kullandığınız e-posta adresini girdiğinizden emin olun.</entry>
+  <entry key="319">Lütfen bir e-posta adresi ya da bir kullanıcı adı giriniz</entry>
+  <entry key="320">Bu kullanıcı adı ile bağlanmış bir kullanıcı yok</entry>
+  <entry key="321">Özel bir bağlantıya sahip olan bir e-posta, e-posta adresinize yollanmış durumda. Lütfen posta kutunuzu kontrol edin. Eğer e-posta mesajını alamazsanız, lütfen posta kutunuzun gereksiz posta ayarlarını kontrol edin ve/veya yeniden doğrulama mesajının gönderilmesini sağlayın.</entry>
+  <entry key="322">Hata</entry>
+  <entry key="323">Mesaj</entry>
+  <entry key="324">Geçersiz Komut. Hiçbir Kullanıcı Bulunamadı.</entry>
+  <entry key="325">Şifrenizi Sıfırlayın</entry>
+  <entry key="326">Oturum Aç</entry>
+  <entry key="327">Şifre değiştir</entry>
+  <entry key="328">Yeni Şifre</entry>
+  <entry key="329">Şifrenizi yeniden girin</entry>
+  <entry key="330">Girmiş olduğunuz şifreler birbiri ile aynı değil.</entry>
+  <entry key="331">4 ya da daha fazla karakter; büyük-küçük harfe duyarlı!</entry>
+  <entry key="332">Şİfre belirlendi. Şuan oturum açabilirsiniz.</entry>
+  <entry key="333">TAMAM</entry>
+  <entry key="334">Bilinmeyen Hata. Lütfen bu durumu sistem sorumlusuna rapor ediniz.</entry>
+  <entry key="335">Kullanıcı adı bulunamadı</entry>
+  <entry key="336">Geçersiz Şifre</entry>
+  <entry key="337">Oturum başarıyla kapatıldı</entry>
+  <entry key="338">Geriplan kayıt işlemi devre dışı.</entry>
+  <entry key="339">Geçersiz E-posta</entry>
+  <entry key="340">yinelenen dosya adı, lütfen farklı bir dosya adu seçiniz</entry>
+  <entry key="341">dosya adı çok kısa</entry>
+  <entry key="342">Adres kayıt edilemiyor</entry>
+  <entry key="343">Kullanıcı eklendi fakat kullanıcıyı bir kuruma atamanız gerekmekte, aksi halde oturum açması mümkün olamayacak.</entry>
+  <entry key="344">Yeni Kayıt</entry>
+  <entry key="345">Bu alan kodu ile bir alan bulunamadı.</entry>
+  <entry key="346">Bu alan için etiket bulunamadı.</entry>
+  <entry key="347">Yönetici oturumu gerekmektedir</entry>
+  <entry key="348">Dil Düzenleyicisi</entry>
+  <entry key="349">Dil</entry>
+  <entry key="350">Etiket-Kodu</entry>
+  <entry key="351">Etiket-Adı</entry>
+  <entry key="352">Değer</entry>
+  <entry key="353">Alan değerleri</entry>
+  <entry key="354">EtiketAdı</entry>
+  <entry key="355">EtiketDeğeri</entry>
+  <entry key="356">Etiket-Kodu</entry>
+  <entry key="357">Sadece etiketi sildiniz, alanı değil! Alanı silemezsiniz; diğer dillerde etiketleri bulunmakta.</entry>
+  <entry key="358">Geçersiz EtiketKodu. Dil alanı değer kodu (FieldLanguagesvalues_Id) veritabanında bulunamıyor.</entry>
+  <entry key="359">Bu alanı silemezsiniz. Sadece etiketleri silebilirsiniz, alanları değil. Şu anda yüklenmiş olan bir etiket yok, herhangi bir alan seçilmemiş ya da tanımlanmış bu alan için bu dilde etiket yok.</entry>
+  <entry key="360">ihraç</entry>
+  <entry key="361">Değişiklikleri görebilmeniz için oturumu kapatmanız gerekmektedir.</entry>
+  <entry key="362">Yeni dil ekle</entry>
+  <entry key="363">dil sil</entry>
+  <entry key="364">Yeni dil ekle</entry>
+  <entry key="365">Ad</entry>
+  <entry key="366">dil ekle</entry>
+  <entry key="367">Yedekleme</entry>
+  <entry key="368">ilke git</entry>
+  <entry key="369">öncekine git</entry>
+  <entry key="370">sonrakine git</entry>
+  <entry key="371">sonuncuya git</entry>
+  <entry key="372">kullanıcı konuşuyor (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">sesi aç/kapa</entry>
+  <entry key="374">Sistem</entry>
+  <entry key="375">Ayarlarınız</entry>
+  <entry key="376">selam,</entry>
+  <entry key="377">Profilinizi düzenleyin</entry>
+  <entry key="378">Yeni Mesaj:</entry>
+  <entry key="379">Yeni resim yükle</entry>
+  <entry key="380">Kullanıcı verisi - İhraç Et</entry>
+  <entry key="381">Tüm kurumlar daha önceden oluşturulmuş olmalı!</entry>
+  <entry key="382">ihraç (export) işlemine başla</entry>
+  <entry key="383">Kuruma göre</entry>
+  <entry key="384">ihraç (export) işlemine başla</entry>
+  <entry key="385">Kullanıcı verisi - Import</entry>
+  <entry key="386">users.xml dosyasını seç</entry>
+  <entry key="387">ithal et (import)</entry>
+  <entry key="388">XML olarak ihraç et - Bu dosyalar şu amaçlar için kullanılabilir: - Projeye katılmak - Bilgileri başka bir sisteme aktarmak - Yedekleme - Özelleştirme - Bir sonraki yüklemede dil klasörünün içine koymak için.</entry>
+  <entry key="389">İthal (import) etmek istediğiniz dil dosyasını seçiniz. Açılan kutudan doğru dili seçiniz! Dosyanın adı önemli değildir, bu dilin içine ithal edilecektir!</entry>
+  <entry key="390">ithal et - dosya seç</entry>
+  <entry key="391">Farklı kaydet</entry>
+  <entry key="392">Ad:</entry>
+  <entry key="393">Yorum:</entry>
+  <entry key="394">kaydet</entry>
+  <entry key="395">Kayıtlar</entry>
+  <entry key="396">Kayıt Görüntüleyicisi</entry>
+  <entry key="397">Genel (herkese açık) ve Özel Odaların kayıtları</entry>
+  <entry key="398">Kullanıcılar :</entry>
+  <entry key="399">Katılanlar:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Bu odadaki kullanıcılar:</entry>
+  <entry key="402">yenile</entry>
+  <entry key="403">Bu oda dolu. Bir kaç dakika içinde yeniden deneyiniz.</entry>
+  <entry key="404">Detaylı bilgi için bir odanın üzerine tıklayınız</entry>
+  <entry key="405">Bu odanın içindeki kullanıcılar ile sohbet et:</entry>
+  <entry key="406">Oda:</entry>
+  <entry key="407">Bu odadaki kullanıcılar:</entry>
+  <entry key="408">den beri:</entry>
+  <entry key="409">kaydı oynat</entry>
+  <entry key="410">Uzunluk:</entry>
+  <entry key="411">Tarih:</entry>
+  <entry key="412">Kaydedici Kipi! Hiçbir ayarı değiştiremezsiniz, bu kaydedilmiş bir dosyadır!</entry>
+  <entry key="413">Bu kaydı onat</entry>
+  <entry key="414">Oynat / Durdur</entry>
+  <entry key="415">Kaydı başlat</entry>
+  <entry key="416">kaydı durdur</entry>
+  <entry key="417">Kayıt:</entry>
+  <entry key="418">Şu an zaten biri kayıtta:</entry>
+  <entry key="419">Kayıt! Kullanıcıya göre:</entry>
+  <entry key="420">iptal</entry>
+  <entry key="421">Kayıt iptal edilecek ve kaydedilmeyecek.</entry>
+  <entry key="422">devam et</entry>
+  <entry key="423">Bu pencereyi kapat ve kayda devam et</entry>
+  <entry key="424">Çizgi rengini değiştir</entry>
+  <entry key="425">Renk seç</entry>
+  <entry key="426">Çizgi rengini Devre Dışı Bırak / Etkinleştir</entry>
+  <entry key="427">İç rengi değiştir</entry>
+  <entry key="428">İç rengi Devre Dışı Bırak / Etkinleştir</entry>
+  <entry key="429">Çizgi genişliğini değiştir</entry>
+  <entry key="430">kapat</entry>
+  <entry key="431">Yazı tipini değiştir</entry>
+  <entry key="432">Kaydı Sil</entry>
+  <entry key="433">Misafir</entry>
+  <entry key="434">Göre:</entry>
+  <entry key="435">Ad</entry>
+  <entry key="436">Oda</entry>
+  <entry key="437">Tarih</entry>
+  <entry key="438">iptal</entry>
+  <entry key="439">başlat</entry>
+  <entry key="440">Ad</entry>
+  <entry key="441">Tarih</entry>
+  <entry key="442">Sunucu sohbet kayıtlarını sil</entry>
+  <entry key="443">Sohbet</entry>
+  <entry key="444">Mesaj yolla</entry>
+  <entry key="445">Yüz İfadeleri</entry>
+  <entry key="446">İfadeler</entry>
+  <entry key="447">Yayınlanmış Araçları Seç</entry>
+  <entry key="448">Ses ve Görüntü</entry>
+  <entry key="449">Sadece Ses</entry>
+  <entry key="450">Sadece Görüntü</entry>
+  <entry key="451">Ses Görüntü yok (sabit resim)</entry>
+  <entry key="452">Bilgisayarınız tarafından yayınlanabilecek olan ses / görüntü bulunmamaktadır, bunun yerine profilinizde yer alan resim kullnılacaktır. Bu seçeneği bant genişliğinizde bir sorun varsa ya da İnternet bağlantınız çok yavaşsa tercih ediniz.</entry>
+  <entry key="453">PZT</entry>
+  <entry key="454">SAL</entry>
+  <entry key="455">ÇAR</entry>
+  <entry key="456">PER</entry>
+  <entry key="457">CUM</entry>
+  <entry key="458">CMT</entry>
+  <entry key="459">PAZ</entry>
+  <entry key="460">Pazartesi</entry>
+  <entry key="461">Salı</entry>
+  <entry key="462">Çarşamba</entry>
+  <entry key="463">Perşembe</entry>
+  <entry key="464">Cuma</entry>
+  <entry key="465">Cumartesi</entry>
+  <entry key="466">Pazar</entry>
+  <entry key="467">TH</entry>
+  <entry key="468">Takvim hafta</entry>
+  <entry key="469">Ocak</entry>
+  <entry key="470">Şubat</entry>
+  <entry key="471">Mart</entry>
+  <entry key="472">Nisan</entry>
+  <entry key="473">Mayıs</entry>
+  <entry key="474">Haziran</entry>
+  <entry key="475">Temmuz</entry>
+  <entry key="476">Ağustos</entry>
+  <entry key="477">Eylül</entry>
+  <entry key="478">Ekim</entry>
+  <entry key="479">Kasım</entry>
+  <entry key="480">Aralık</entry>
+  <entry key="481">Takvim</entry>
+  <entry key="482">Katılımcılar</entry>
+  <entry key="483">Mizanpaj Ayarlarını Göster</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Genişlik | Yükseklik</entry>
+  <entry key="486">Video-Gösterici</entry>
+  <entry key="487">Düzenleyici-Gösterici</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tahta-Gösterici</entry>
+  <entry key="490">Etkin</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Genişlik | Yükseklik</entry>
+  <entry key="493">Dosyalar,Sohbet,Katılımcı-Gösterici</entry>
+  <entry key="494">Etkin</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Genişlik | Yükseklik</entry>
+  <entry key="497">Düzenleyici odayı terk etti. Şu anda sunum yapan kimse yok. Düzenleyicilik için başvuruda bulunabilirsiniz ya da bekleyebilirsiniz.</entry>
+  <entry key="498">Odada bir Düzenleyici yok, fakat bazı katılımcılar var. Düzenleyicilik için başvuruda bulunabilirsiniz ya da bekleyebilirsiniz.</entry>
+  <entry key="499">{0} geribildirim</entry>
+  <entry key="500">{0} - Davet</entry>
+  <entry key="501">Kullanıcıdan Mesaj:</entry>
+  <entry key="502">Mesaj:</entry>
+  <entry key="503">Toplantıya katılmak için linke tıklayınız:</entry>
+  <entry key="504">Odaya girmek için buraya tıklayınız</entry>
+  <entry key="505">Bağlantı (link) ile ilgili probleminiz varsa, lütfen bağlantıyı kopyalayarak tarayıcınızın adres çubuğuna yapıştırınız:</entry>
+  <entry key="506">{0} Kayıt</entry>
+  <entry key="507">Kullanıcı verileriniz:</entry>
+  <entry key="508">Kullanıcı Adı:</entry>
+  <entry key="509">Şifre:</entry>
+  <entry key="510">E-posta:</entry>
+  <entry key="511">{0}-Takımı</entry>
+  <entry key="512">{0} Kayıt Ol</entry>
+  <entry key="513">{0} - Şifre Sıfırla</entry>
+  <entry key="514">Yeni bir şifre girmek için bağlantıya tıklayınız:</entry>
+  <entry key="515">Yeni bir şifre girmek için buraya tıklayınız</entry>
+  <entry key="516">bu bağlantı (link) ile ilgili probleminiz varsa, lütfen bağlantıyı kopyalayarak tarayıcınızın adres çubuğuna yapıştırınız:</entry>
+  <entry key="517">{0} Şifre Sıfırla</entry>
+  <entry key="518">Lütfen geçerli bir tarih girin, örnek olarak 25.06.2005 (gg.aa.yyyy)</entry>
+  <entry key="519">Lütfen geçerli bir e-posta adresi girin, örnek olarak ad@posta.com</entry>
+  <entry key="520">Lütfen Float-Sayı giriniz, örnek olarak 1.00</entry>
+  <entry key="521">Lütfen bir tamsayı giriniz, örnek olarak 100</entry>
+  <entry key="522">Lütfen geçerli bir telefon numarası giriniz, örnek olarak ++90 0123 123123</entry>
+  <entry key="523">Lütfen geçerli bir saat bilgisi giriniz, örnek olarak 12:23 (ss:dd)</entry>
+  <entry key="524">Şifre korumalı</entry>
+  <entry key="525">Şifre</entry>
+  <entry key="526">Geçerlilik periyodu</entry>
+  <entry key="527">Süresiz</entry>
+  <entry key="528">Periyot</entry>
+  <entry key="529">Bir kerelik</entry>
+  <entry key="530">Oturum başlangıcı:</entry>
+  <entry key="531">Oturum sonu:</entry>
+  <entry key="532">{0}'e Davet</entry>
+  <entry key="533">Bu davet kodu için geçerli olan bir davet yok.</entry>
+  <entry key="534">Bu davet halihazırda kullanılmakta. Bu bip bir davet tekrar kullanılamaz.</entry>
+  <entry key="535">Bu davet kodu geçerli değil.</entry>
+  <entry key="536">Şifre:</entry>
+  <entry key="537">Şifre Kontrol</entry>
+  <entry key="538">Geçersiz Şifre!</entry>
+  <entry key="539">Ses-Görüntü</entry>
+  <entry key="540">Ses/Görüntü Senkronizasyonu</entry>
+  <entry key="541">Kullanıcı adı doğru, fakat girmeye çalıştığınız oturum aktif durumda değil ya da sunucuda depolanmış. Yeni bir oturum kodu almalısınız ve yeniden oturum açmalısınız.</entry>
+  <entry key="542">Oturum kodu kayıtlı değil ya da yönetici haklarına sahip değil. SOAP Gateway yeni bir kullanıcı ekleyebilmek için yönetici haklarına sahip bir kullanıcıya ihtiyaç duyar.</entry>
+  <entry key="543">Bu oturum uzak kullanıcı veri bağlantısı içermiyor. Uygulamaya girmeden veya yanlış oturum kodu ile SOAP-Gateway araması yapamazsınız.</entry>
+  <entry key="544">Kaydedici halen Beta versiyonunda!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-ekseni</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-ekseni</entry>
+  <entry key="549">g</entry>
+  <entry key="550">genişlik</entry>
+  <entry key="551">y</entry>
+  <entry key="552">yükseklik</entry>
+  <entry key="553">Transparanlığı değiştir</entry>
+  <entry key="554">Tarayıcı Aç</entry>
+  <entry key="555">Tarayıcı Kapat</entry>
+  <entry key="556">Şunucuyla bağlantı kesildi. Uygulamayı yeniden yüklemeli veya Ağ Bağlantısını kontrol etmelisiniz.</entry>
+  <entry key="557">İmleç</entry>
+  <entry key="558">Eşitliyor…</entry>
+  <entry key="559">Kullanıcıları eşitliyor, lütfen bekleyiniz</entry>
+  <entry key="560">&lt;u&gt;SVG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;PNG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;JPG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;PDF Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;TIF Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="565">Hatırlatıcı:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Tekrar:</entry>
+  <entry key="568">hiçbiri</entry>
+  <entry key="569">Konum:</entry>
+  <entry key="570">Baş</entry>
+  <entry key="571">Son</entry>
+  <entry key="572">Başlık:</entry>
+  <entry key="573">Yorum:</entry>
+  <entry key="574">Kişi Davet Et</entry>
+  <entry key="575">Günlük</entry>
+  <entry key="576">Aylık</entry>
+  <entry key="577">Yıllık</entry>
+  <entry key="578">Yetkilendirme sonu yetkilendirme başından sonradır!</entry>
+  <entry key="579">Lütfen bir başlık giriniz!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Sağdan sola yazım modunu açmak için bunu aktifleştirin</entry>
+  <entry key="582">Pano</entry>
+  <entry key="583">Kayıtlı Görüşmeleri İzle</entry>
+  <entry key="584">Görüşme – 4 kişilik konferans oluştur (en fazla 16 kişi) &lt;br/&gt;herkes ses + görüntü yayın hakkına sahip</entry>
+  <entry key="585">Etkinlik – 200 katılımcılı konferans ayarla&lt;br/&gt;Sadece düzenleyici ses ve görüntü yayın hakkına sahip</entry>
+  <entry key="586">Kullanıcıları, odaları ve organizasyonları oluştur &lt;br/&gt; + yapılandırmayı değiştir</entry>
+  <entry key="587">Kullanıcılar şu anda bu odada</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Giriş</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Belge Yükleniyor. Tüm istemciler eşitleninceye kadar lütfen bekleyiniz.</entry>
+  <entry key="592">Aktarım tamamlandı, belge dönüştürülüyor ...</entry>
+  <entry key="593">Aktarımı Başlat</entry>
+  <entry key="594">Aktarım ve Yükleme Penceresi. Lütfen Diskinizden bir Dosya seçiniz.</entry>
+  <entry key="595">İptal</entry>
+  <entry key="596">Dosya Seç</entry>
+  <entry key="597">Bağlantılar</entry>
+  <entry key="598">Değer</entry>
+  <entry key="599">Yayın_ID</entry>
+  <entry key="600">Giriş</entry>
+  <entry key="601">Bağlantı zamanı</entry>
+  <entry key="602">Oda / Kapsam</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kullanıcıyı At</entry>
+  <entry key="605">Bu istemciyi bağlantıdan çıkarmak istediğinize emin misiniz?&lt;br/&gt;Bu işlem sadece uyarı amaçlıdır ve kullanıcının odaya yeniden giriş yapmasını engellemez.</entry>
+  <entry key="606">Oturumunuz Yönetici veya Düzenleyici tarafından sonlandırıldı.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Kullanıcı bu Oda’nın Düzenleyicisi</entry>
+  <entry key="609">Kullanıcı Karatahtayı düzenleme hakkına sahip</entry>
+  <entry key="610">Ses/Görüntüyü (Yeniden) Başlat veya Aygıt Ayarlarını değiştir</entry>
+  <entry key="611">Bu kullanıcının Karatahtayı kullanmasına izin ver</entry>
+  <entry key="612">Kullanıcının Karatahtayı kullanmasını engelle</entry>
+  <entry key="613">Kullanıcılar</entry>
+  <entry key="614">Dosyalar</entry>
+  <entry key="615">Karatahta</entry>
+  <entry key="616">Sohbet</entry>
+  <entry key="617">Hesabınız pek çok Organizasyonla ilişkilendirilmiş. Bu oturum için lütfen birini seçiniz.</entry>
+  <entry key="618">Bu oda şu anda dolu; lütfen daha sonra tekrar deneyiniz.</entry>
+  <entry key="619">Oda Tipi</entry>
+  <entry key="620">Randevu Odası</entry>
+  <entry key="621">Sunucu Zamanı</entry>
+  <entry key="622">{0} - Hatırlatıcı</entry>
+  <entry key="623">Kullanıcıdan Mesaj:</entry>
+  <entry key="624">Mesaj:</entry>
+  <entry key="625">Görüşmelere katılmak için bu bağlantıyı tıklayınız:</entry>
+  <entry key="626">Odaya giriş için burayı tıklayın</entry>
+  <entry key="627">bağlantıyı tıklamakla ilgili sorun yaşıyorsanız kopyalayıp gezgin penceresine yapıştırabilirsiniz:</entry>
+  <entry key="628">iç kullanıcılar</entry>
+  <entry key="629">dış kullanıcılar</entry>
+  <entry key="630">ön ad</entry>
+  <entry key="631">ad</entry>
+  <entry key="632">E-Posta</entry>
+  <entry key="633">Oturum kapatmayı onayla</entry>
+  <entry key="634">Oturumu kapatmak istediğinize emin misiniz?</entry>
+  <entry key="635">Eylemler</entry>
+  <entry key="636">Demo Odası</entry>
+  <entry key="637">Demo Zamanı</entry>
+  <entry key="638">Görüşme İçin Kalan Zaman</entry>
+  <entry key="639">Bu Oda bir Demo Odası’dır. Bu uyarıyı almak istemiyorsanız özel bir oda alabilir veya kendinize özel bir sunucu ayarlayabilirsiniz. Oturumunuzun otomatik kapatılma zamanı:</entry>
+  <entry key="640">Dengeli</entry>
+  <entry key="641">Düzenleyici odaya girinceye kadar lütfen bekleyiniz. Düzenleyici olarak anılan kişi Düzenleyici, Yönetici veya odayı oluşturan kişi olabilir.</entry>
+  <entry key="642">Tamam</entry>
+  <entry key="643">Ekran Paylaşımı Başlıyor</entry>
+  <entry key="644">Kullanıcı Ekran Paylaşımı uygulamasını başlatıyor:</entry>
+  <entry key="645">Paylaşımı Başlat</entry>
+  <entry key="646">Yeni bir Görüşme ekle</entry>
+  <entry key="647">Görüşme Odası</entry>
+  <entry key="648">Etkinlik Odası</entry>
+  <entry key="649">Düzenleme</entry>
+  <entry key="650">Kullanıcıları Düzenle</entry>
+  <entry key="651">Odaları Düzenle</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Bu kullanıcının organizasyonun Düzenleyicisi olmasını istediğinize emin misiniz?</entry>
+  <entry key="654">Kullanıcıyı bir Organizasyona eklemeden önce lütfen listeden bir tane Organizasyon seçiniz!</entry>
+  <entry key="655">Organizasyon - Düzenleyici</entry>
+  <entry key="656">Bu kullanıcıyı Organizasyondan silmek istediğinize emin misiniz?</entry>
+  <entry key="657">Bu Kullanıcı Düzenleyici</entry>
+  <entry key="658">Bu Kullanıcı Düzenleyici Değil</entry>
+  <entry key="659">Bu kullanıcının Organizasyonda Düzenleyici Olmamasını İstediğinize Emin Misiniz?</entry>
+  <entry key="660">Kullanıcıları Organizasyona ekle veya Organizasyondan sil</entry>
+  <entry key="661">Bu kaydı silmek istediğinize emin misiniz?</entry>
+  <entry key="662">Bu kullanıcıyı organizasyondan silmek istediğinize emin misiniz? Bu kullanıcıyı sadece organizasyondan silersiniz. Eğer kullanıcıyı tamamen silmek istiyorsanız Yönetici-Panelinden giriş yapmalısınız.</entry>
+  <entry key="663">Kendi kullanıcınızı silemezsiniz!</entry>
+  <entry key="664">Bu yöntem Yönetici hakları erişimini gerektirir!</entry>
+  <entry key="665">Bu ID ile ilişkilendirilmiş Oturum bulunmamaktadır.</entry>
+  <entry key="666">Bu bir Yönetici veya Düzenleyici hesabı. Bu hesabı sadece Yönetici Panelinden düzenleyebilirsiniz.</entry>
+  <entry key="667">Kaydınızı tamamlamak için lütfen bağlantıyı tıklayın ya da tarayıcı adres çubuğuna kopyalayıp oradan açın.</entry>
+  <entry key="668">E-Postanızı Onaylamak İçin Tıklayınız</entry>
+  <entry key="669">Bu Hash bilgisine uyan hiçbir kullanıcı bulunamadı.</entry>
+  <entry key="670">Bu kullanıcı zaten aktif edildi!</entry>
+  <entry key="671">Hesabınızı başarıyla aktifleştirdiniz!</entry>
+  <entry key="672">Giriş Yap</entry>
+  <entry key="673">Hesabınız aktifleştirilmedi. Kayıt sırasında vermiş olduğunuz E-Postanıza gelen bağlantıyı tıklayarak aktivasyon işlemini tamamlayınız.</entry>
+  <entry key="674">Kaydınız başarıyla tamamlandı. Vermiş olduğunuz e-posta adresinize hesabınızı aktifleştirmek için ileti gönderdik. İletideki bağlantıyı açarak hesabınızı aktifleştirebilirsiniz.</entry>
+  <entry key="675">Bu Kullanıcının Düzenleyici Yetkisini İptal Et</entry>
+  <entry key="676">Bu Kullanıcıya Düzenleyici Yetkileri Ver</entry>
+  <entry key="677">Kullanıcı</entry>
+  <entry key="678">Karatahtaya eriş</entry>
+  <entry key="679">Düzenleyici</entry>
+  <entry key="680">Düzenleme: Lütfen kendisine Karatahtaya Erişme, Düzenleme ve Ses/Görüntü yetkisi vermek üzere bir kullanıcı seçiniz.</entry>
+  <entry key="681">Bu kullanıcı Düzenleyici haklarına sahip olduğundan çizme yetkisine zaten sahip.</entry>
+  <entry key="682">Kendi kendinizin Düzenleyici hakkını iptal edemezsiniz.</entry>
+  <entry key="683">Bu kullanıcının Ses/Görüntüsünü Yayınlamasına İzin Ver</entry>
+  <entry key="684">Kullanıcının Ses/Görüntüsünü İptal Et</entry>
+  <entry key="685">Bu odanın düzenleyicisi olmak istiyorum.</entry>
+  <entry key="686">Tahtayı düzenleyebilmek istiyorum.</entry>
+  <entry key="687">Ses/Görüntümü paylaşmak istiyorum.</entry>
+  <entry key="688">Bu odanın Düzenleyicisisiniz.</entry>
+  <entry key="689">Tahtayı düzenleme hakkına sahipsiniz.</entry>
+  <entry key="690">Ses/Görüntünüzü paylaşma hakkına sahipsiniz.</entry>
+  <entry key="691">Düzenleyiciye Mesaj</entry>
+  <entry key="692">Kullanıcı</entry>
+  <entry key="693">düzenleyici olmak istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="694">tahtayı düzenlemek istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="695">Ses ve Görüntüsünü paylaşmak istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="696">Düzenleyici odaya giriş yapana kadar beklemelisiniz.</entry>
+  <entry key="697">İptal</entry>
+  <entry key="698">Kaydet</entry>
+  <entry key="699">Gün</entry>
+  <entry key="700">Ay</entry>
+  <entry key="701">Yıl</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
new file mode 100644
index 0000000..d7b6b58
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференція</entry>
+  <entry key="2">Зустріч</entry>
+  <entry key="3">Аудиторія</entry>
+  <entry key="4">Налаштування</entry>
+  <entry key="5">Користувач</entry>
+  <entry key="6">Адміністратор</entry>
+  <entry key="7">Пауза</entry>
+  <entry key="8">Запис</entry>
+  <entry key="9">Немає даних</entry>
+  <entry key="10">Функція запису для модераторів</entry>
+  <entry key="11">Пов'язаний користувач:</entry>
+  <entry key="12">Почати конференцію</entry>
+  <entry key="13">Моє ім'я</entry>
+  <entry key="14">Відеоконференція</entry>
+  <entry key="15">Імпорт</entry>
+  <entry key="16">Оновити список</entry>
+  <entry key="17">На головну</entry>
+  <entry key="18">Нове опитування</entry>
+  <entry key="19">Нове опитування для конференції.</entry>
+  <entry key="20">Запитання:</entry>
+  <entry key="21">Вид опитування:</entry>
+  <entry key="22">Створити</entry>
+  <entry key="23">Інформація: кожен пов'язани користувач отримує повідомлення з новим опитуванням</entry>
+  <entry key="24">Створити опитування</entry>
+  <entry key="25">Відмінити</entry>
+  <entry key="26">Так/Ні</entry>
+  <entry key="27">В числовому порядку 1-10</entry>
+  <entry key="28">Опитування</entry>
+  <entry key="29">Для створення опитування Ви повинні бути модератором/інструктором даної кімнати.</entry>
+  <entry key="30">Ви проголосували.</entry>
+  <entry key="31">Ви вже проголосували в даному опитуванні.</entry>
+  <entry key="32">Проголосувати!</entry>
+  <entry key="33">Ваша відповідь:</entry>
+  <entry key="34">Так</entry>
+  <entry key="35">Ні</entry>
+  <entry key="36">Хочу знати:</entry>
+  <entry key="37">Результати опитування</entry>
+  <entry key="38">Запитання:</entry>
+  <entry key="39">Відповіді:</entry>
+  <entry key="40">Результати:</entry>
+  <entry key="41">В даний момент опитування не існує.</entry>
+  <entry key="42">Проголосувати!</entry>
+  <entry key="43">Зустріч (максимум 4 місця)</entry>
+  <entry key="44">Конференція (максимум 50 місць)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Залишилось місць</entry>
+  <entry key="47">Вже присвоєно</entry>
+  <entry key="48">Вхід</entry>
+  <entry key="49">Модератор/інструктор цієї кімнати покинув кімнату</entry>
+  <entry key="50">Системне повідомлення</entry>
+  <entry key="51">Вибір пристрою</entry>
+  <entry key="52">Обрати камеру:</entry>
+  <entry key="53">Обрати мікрофон:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Скасувати</entry>
+  <entry key="56">Ви повинні ввійти знову, щоб активізувати зміни.</entry>
+  <entry key="57">Змінити налаштування.</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Мова:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Скасувати</entry>
+  <entry key="62">Очистити планшет</entry>
+  <entry key="63">Очистити планшет перед додаванням нового зображення?</entry>
+  <entry key="64">чистити планшет перед додаванням нового зображення</entry>
+  <entry key="65">ні</entry>
+  <entry key="66">Обробити налаштування</entry>
+  <entry key="67">Запросити підтвердження перед очисткою планшету.</entry>
+  <entry key="68">Наша інформація</entry>
+  <entry key="69">Очистити планшет</entry>
+  <entry key="70">Відмінити</entry>
+  <entry key="71">Відновлення</entry>
+  <entry key="72">Вибрати об'єкт</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Малювання</entry>
+  <entry key="75">Провести лінію</entry>
+  <entry key="76">Підкреслити</entry>
+  <entry key="77">Прямокутник</entry>
+  <entry key="78">Еліпс</entry>
+  <entry key="79">Стрілка</entry>
+  <entry key="80">Стерти обраний елемент</entry>
+  <entry key="81">Запит функції модератора</entry>
+  <entry key="82">Запит</entry>
+  <entry key="83">Скасувати</entry>
+  <entry key="84">Отримати функцію модератора</entry>
+  <entry key="85">Закрити</entry>
+  <entry key="86">Курсив</entry>
+  <entry key="87">Жирний шрифт</entry>
+  <entry key="88">Будь-ласкаа зачекайте...</entry>
+  <entry key="89">Користувач бажає отримати функцію модератора</entry>
+  <entry key="90">Згода</entry>
+  <entry key="91">Скасування</entry>
+  <entry key="92">Скасувати</entry>
+  <entry key="93">Надсилання запиту наступному користувачу</entry>
+  <entry key="94">Дано згоду</entry>
+  <entry key="95">Скасовано</entry>
+  <entry key="96">Заміна модератора</entry>
+  <entry key="97">Ви не є модератором даного курсу!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">Вибачте, в цій кімнаті немає місця. Будь-ласка попробуйте ще через деякий час.</entry>
+  <entry key="100">Еліпс</entry>
+  <entry key="101">Закрити</entry>
+  <entry key="102">Помилка при вводі</entry>
+  <entry key="103">Ім'я користувача повинно складатись мінімум з 4 знаків</entry>
+  <entry key="104">Пароль повинен містити мінімум 4 знаки</entry>
+  <entry key="105">Це ім'я користувача вже присвоєне</entry>
+  <entry key="106">Введена електронна адреса вже зареєстрована</entry>
+  <entry key="107">Присутня помилка, просимо зв''язатись з адміністрацією</entry>
+  <entry key="108">Логін</entry>
+  <entry key="109">Користувач:</entry>
+  <entry key="110">Пароль:</entry>
+  <entry key="111">Мова</entry>
+  <entry key="112">Логін</entry>
+  <entry key="113">Зареєструватись</entry>
+  <entry key="114">Користувач:</entry>
+  <entry key="115">Пароль:</entry>
+  <entry key="116">Повторити:</entry>
+  <entry key="117">Ім'я:</entry>
+  <entry key="118">Прізвище:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Країна:</entry>
+  <entry key="121">Зареєструватись</entry>
+  <entry key="122">Скасувати</entry>
+  <entry key="123">Регістр</entry>
+  <entry key="124">На головну</entry>
+  <entry key="125">Користувачі</entry>
+  <entry key="126">Групи</entry>
+  <entry key="127">Організації</entry>
+  <entry key="128">Кімнати для конференцій</entry>
+  <entry key="129">Публічно</entry>
+  <entry key="130">Організація</entry>
+  <entry key="131">Вхід</entry>
+  <entry key="132">Користувач</entry>
+  <entry key="133">Пароль</entry>
+  <entry key="134">Повторити</entry>
+  <entry key="135">Ім'я</entry>
+  <entry key="136">Прізвище</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Дата народження</entry>
+  <entry key="139">Вулиця/№ будинка</entry>
+  <entry key="140">Індекс/населений пункт</entry>
+  <entry key="141">Країна</entry>
+  <entry key="142">Додаткова brінформація</entry>
+  <entry key="143">Дані користувача</entry>
+  <entry key="144">Зберегти</entry>
+  <entry key="145">Процес збереження</entry>
+  <entry key="146">Ідент. № користувача</entry>
+  <entry key="147">Логін</entry>
+  <entry key="148">Ім'я</entry>
+  <entry key="149">Прізвище</entry>
+  <entry key="150">Вперед</entry>
+  <entry key="151">Назад</entry>
+  <entry key="152">Стерти запис</entry>
+  <entry key="153">Скасувати</entry>
+  <entry key="154">Стери</entry>
+  <entry key="155">Створити запис</entry>
+  <entry key="156">Оновити запис</entry>
+  <entry key="157">Стерти запис</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">Заблоковано</entry>
+  <entry key="160">Активно</entry>
+  <entry key="161">Організації</entry>
+  <entry key="162">Календар</entry>
+  <entry key="163">Закрити</entry>
+  <entry key="164">Ідент. № організації</entry>
+  <entry key="165">Ім'я</entry>
+  <entry key="166">Користувач</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Адміністратор</entry>
+  <entry key="169">Роль користувача</entry>
+  <entry key="170">Організація</entry>
+  <entry key="171">Ім'я</entry>
+  <entry key="172">Додати організацію</entry>
+  <entry key="173">Додати організацію</entry>
+  <entry key="174">Скасувати</entry>
+  <entry key="175">Додати</entry>
+  <entry key="176">Стерти організацію</entry>
+  <entry key="177">Користувач</entry>
+  <entry key="178">Додати користувача</entry>
+  <entry key="179">Видалити користувача</entry>
+  <entry key="180">Додати користувача</entry>
+  <entry key="181">Пошук користувача</entry>
+  <entry key="182">Шукати</entry>
+  <entry key="183">Користувач</entry>
+  <entry key="184">Організація</entry>
+  <entry key="185">Обрати</entry>
+  <entry key="186">Кімнати для конференцій</entry>
+  <entry key="187">Кімнати для конференцій</entry>
+  <entry key="188">Ідент. №</entry>
+  <entry key="189">Ім'я</entry>
+  <entry key="190">Публічно</entry>
+  <entry key="191">Організації</entry>
+  <entry key="192">Кімнати для конференцій</entry>
+  <entry key="193">Ім'я</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">Публічно</entry>
+  <entry key="196">Коментар</entry>
+  <entry key="197">Зберегти</entry>
+  <entry key="198">Вікдрити</entry>
+  <entry key="199">Зберегти як</entry>
+  <entry key="200">Ім'я файлу</entry>
+  <entry key="201">Ім'я файлу</entry>
+  <entry key="202">Скасувати</entry>
+  <entry key="203">Зберегти</entry>
+  <entry key="204">Помилка</entry>
+  <entry key="205">Завантажити</entry>
+  <entry key="206">Об'єкт завантажений</entry>
+  <entry key="207">Синхронізація клієнтів. Залишилось клієнтів:</entry>
+  <entry key="208">Завантаження графічних даних</entry>
+  <entry key="209">Синхронізація клієнтів. Залишилось клієнтів:</entry>
+  <entry key="210">Очистити планшет</entry>
+  <entry key="211">Очистити планшет, при цьому всі зміни будуть втрачені!</entry>
+  <entry key="212">Перед завантаженням файлу запросити підтвердження</entry>
+  <entry key="213">Відіслати запрошення</entry>
+  <entry key="214">Відправити запрошення</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Адреса одержувача</entry>
+  <entry key="217">Повідомлення</entry>
+  <entry key="218">Відправити</entry>
+  <entry key="219">Скасувати</entry>
+  <entry key="220">Відправити</entry>
+  <entry key="221">Данні користувача</entry>
+  <entry key="222">Нік для даної конфренції</entry>
+  <entry key="223">Прізвище/псевдонім</entry>
+  <entry key="224">Ім'я</entry>
+  <entry key="225">Прізвище</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Мова</entry>
+  <entry key="228">Відправити</entry>
+  <entry key="229">Триває завантаження...</entry>
+  <entry key="230">Дані завантажуються, будь-ласка зачекайте...</entry>
+  <entry key="231">Невірний пароль</entry>
+  <entry key="232">Будь ласка введіть два ідентичні паролі, що містять мінімум 6 символи.</entry>
+  <entry key="233">Невірний e-mail</entry>
+  <entry key="234">Ви ввели не вірний e-mail</entry>
+  <entry key="235">Реєстрація завершена</entry>
+  <entry key="236">Ваш акаунт створено. Тепер Ви можете ввійти в систему.</entry>
+  <entry key="237">Ви не можете завантажити ваш знімок. Хтось вже зробив це.</entry>
+  <entry key="238">Завантаження заборонене</entry>
+  <entry key="239">Зробити знімок екрану</entry>
+  <entry key="240">Поганий пропускний кнаал: Ви не можете синхронізувати ваш екран. Фрейми будуть втрачені. Якщо це повідомлення повториться запитайте в модератора про зменшення якості.</entry>
+  <entry key="241">Екран:</entry>
+  <entry key="242">Малюнок</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файли</entry>
+  <entry key="246">Користувачі</entry>
+  <entry key="247">Завантажити оригінальні документи</entry>
+  <entry key="248">Завантажити pdf документ</entry>
+  <entry key="249">Завантажити презентацію на планшет</entry>
+  <entry key="250">Налаштування</entry>
+  <entry key="251">Потягнути цей об'єкт</entry>
+  <entry key="252">Змінити розмір об'єкта</entry>
+  <entry key="253">%</entry>
+  <entry key="254">з</entry>
+  <entry key="255">На 1 сторінку</entry>
+  <entry key="256">На попередню сторінку</entry>
+  <entry key="257">На наступну сторінку</entry>
+  <entry key="258">На останню сторінку</entry>
+  <entry key="259">Зменшити</entry>
+  <entry key="260">Збільшити</entry>
+  <entry key="261">П.</entry>
+  <entry key="262">П.</entry>
+  <entry key="263">Налаштування</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Налаштування</entry>
+  <entry key="267">Ключ</entry>
+  <entry key="268">Останнє оновлення</entry>
+  <entry key="269">Оновлення</entry>
+  <entry key="270">Коментарі</entry>
+  <entry key="271">Ключ</entry>
+  <entry key="272">з</entry>
+  <entry key="273">Користувачі</entry>
+  <entry key="274">Стерти користувача з організації</entry>
+  <entry key="275">Стерти</entry>
+  <entry key="276">Цей користувач є вже учасником цієї організації.</entry>
+  <entry key="277">Новини</entry>
+  <entry key="278">Посиланння</entry>
+  <entry key="279">В Конференції</entry>
+  <entry key="280">В Аудиторії</entry>
+  <entry key="281">Допомога і підтримка</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Повідомити про помилки!</entry>
+  <entry key="285">Більше</entry>
+  <entry key="286">Сайт проекту (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запам'ятати вхід</entry>
+  <entry key="289">Контент</entry>
+  <entry key="290">Моя домашня сторінка</entry>
+  <entry key="291">Заплановані конференції</entry>
+  <entry key="292">Заплановані події</entry>
+  <entry key="293">Публічні конференції</entry>
+  <entry key="294">Приватні конференції</entry>
+  <entry key="295">Публічні події</entry>
+  <entry key="296">Приватні події</entry>
+  <entry key="297">Публічний контент</entry>
+  <entry key="298">Приватний контент</entry>
+  <entry key="299">Персональний контент</entry>
+  <entry key="300"></entry>
+  <entry key="301">Модерація</entry>
+  <entry key="302">Призначити модератором</entry>
+  <entry key="303">Опитування</entry>
+  <entry key="304">Вибрати файл</entry>
+  <entry key="305">Налаштування</entry>
+  <entry key="306">Налаштування камери і мікрофона</entry>
+  <entry key="307">Налаштування планшету</entry>
+  <entry key="308">Вихід</entry>
+  <entry key="309">Повернутись до кімнат</entry>
+  <entry key="310">Вийти</entry>
+  <entry key="311">Провідник</entry>
+  <entry key="312">Запуск провідника</entry>
+  <entry key="313">Відео і Аудіо</entry>
+  <entry key="314">Чат</entry>
+  <entry key="315">Планшет</entry>
+  <entry key="316">Модерація</entry>
+  <entry key="317">Файли</entry>
+  <entry key="318">Користувачі</entry>
+  <entry key="319">Опитування</entry>
+  <entry key="320">Користувач з даним іменем відсутній</entry>
+  <entry key="321">На вашу поштоу скриньку вислано лист. Будь-ласка перевірте ваш поштову скриньку.</entry>
+  <entry key="322">Помилка</entry>
+  <entry key="323">Повідомлення</entry>
+  <entry key="324">Неправильний хеш. Користувача не знайдено.</entry>
+  <entry key="325">Скинути Ваш пароль</entry>
+  <entry key="326">Логін</entry>
+  <entry key="327">змінити пароль</entry>
+  <entry key="328">Новий пароль</entry>
+  <entry key="329">Повторіть пароль</entry>
+  <entry key="330">Введені паролі не ідентичні.</entry>
+  <entry key="331">Пароль повинен містити мінімум 4 символи!</entry>
+  <entry key="332">Пароль встановлено. Тепер ви можете ввійти.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Невідома помилка. Будь-ласка зв'яжіться з адміністратором.</entry>
+  <entry key="335">Невідоме ім'я користувача</entry>
+  <entry key="336">Невірний пароль</entry>
+  <entry key="337">Ви успішно вийшли з системи</entry>
+  <entry key="338">Попередня реєстрація вимкнена.</entry>
+  <entry key="339">Невірний e-mail</entry>
+  <entry key="340">Однакові імена файлів, будь-ласка виберіть інше ім'я</entry>
+  <entry key="341">Ім'я файлу надто коротке</entry>
+  <entry key="342">Неможливо зберегти адресу</entry>
+  <entry key="343">Користувач доданий, але Ви повинні додати користувача в організацію, бо інакше він не зможе ввійти в систему.</entry>
+  <entry key="344">Новий запис</entry>
+  <entry key="345">Не знайдено полів з цим ID.</entry>
+  <entry key="346">Не знайдено міток для цього поля.</entry>
+  <entry key="347">Потрібні права адміністратора</entry>
+  <entry key="348">Редактор мови</entry>
+  <entry key="349">Мова</entry>
+  <entry key="350">ID змінної</entry>
+  <entry key="351">ID змінної</entry>
+  <entry key="352">Значення</entry>
+  <entry key="353">Значення полів</entry>
+  <entry key="354">Назви міток</entry>
+  <entry key="355">Значення міток</entry>
+  <entry key="356">ID мітки</entry>
+  <entry key="357">Ви тільки стираєте мітку, а не поле! Ви не можете стерти поле, оскільки воно маже мітки на інших мовах.</entry>
+  <entry key="358">Невірний ID мітки. FieldLanguagesvalues_Id не знайдено в базі даних.</entry>
+  <entry key="359">Ви не можете стерти поле. Ви можете стирати лише мітки, а не поля. Немає мітки завантаженої в даний момент, або не існує мітки для даного поля.</entry>
+  <entry key="360">Експорт</entry>
+  <entry key="361">Ви повинні вийти з системи, щоб побачити внесені зміни.</entry>
+  <entry key="362">Додати нову мову</entry>
+  <entry key="363">Видалити мову</entry>
+  <entry key="364">Додати нову мову</entry>
+  <entry key="365">Ім'я</entry>
+  <entry key="366">Додати мову</entry>
+  <entry key="367">Резервні копії</entry>
+  <entry key="368">На початок</entry>
+  <entry key="369">Назад</entry>
+  <entry key="370">Наступне</entry>
+  <entry key="371">В кінець</entry>
+  <entry key="372">Розмови користувача (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">вкл/викл звук</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Особисті налаштування</entry>
+  <entry key="376">Привіт,</entry>
+  <entry key="377">Налаштувати профіль</entry>
+  <entry key="378">Нове повідомлення:</entry>
+  <entry key="379">Завантажити малюнок</entry>
+  <entry key="380">Дані користувача - Експорт</entry>
+  <entry key="381">Спочатку повинні бути створені усі організації</entry>
+  <entry key="382">Почати експорт</entry>
+  <entry key="383">По організаціях</entry>
+  <entry key="384">Почати експорт</entry>
+  <entry key="385">Дані користувача - імпорт</entry>
+  <entry key="386">Вибрати users.xml</entry>
+  <entry key="387">Імпорт</entry>
+  <entry key="388">Експортувати в XML</entry>
+  <entry key="389">Виберіть мовний файл для імпорту. Виберіть правильну мову зі списку! Незаважаючи, яку назву має файл, він буде імпортований в цю мову</entry>
+  <entry key="390">Імпорт - вибрати файл</entry>
+  <entry key="391">Зберегти як</entry>
+  <entry key="392">Ім'я:</entry>
+  <entry key="393">Коментарі:</entry>
+  <entry key="394">Зберегти</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Перегляд записів</entry>
+  <entry key="397">Записи публічних і приватних кімнат</entry>
+  <entry key="398">Користувачі:</entry>
+  <entry key="399">Під'єднано:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Користувачів в кімнаті:</entry>
+  <entry key="402">Оновити</entry>
+  <entry key="403">Ця кімната переповнена. Спробуйте ще через декілька хвилин.</entry>
+  <entry key="404">Виберіть кімнату щоб взнати деталі</entry>
+  <entry key="405">Чат з користувачами даної кімнати:</entry>
+  <entry key="406">Кімната:</entry>
+  <entry key="407">Користувачів в цій кімнаті:</entry>
+  <entry key="408">Після:</entry>
+  <entry key="409">Програти запис</entry>
+  <entry key="410">Довжина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим запису! Ви не можете змінити ніяких значень, цей файл вже записаний!</entry>
+  <entry key="413">Програти запис</entry>
+  <entry key="414">Програти / Пауза</entry>
+  <entry key="415">Початок запису</entry>
+  <entry key="416">Зупинити запис</entry>
+  <entry key="417">Запис:</entry>
+  <entry key="418">На даний момент хтось уже виконує запис:</entry>
+  <entry key="419">Запис! Користувач:</entry>
+  <entry key="420">Скасувати</entry>
+  <entry key="421">Запису був скасований і не може бути збережений.</entry>
+  <entry key="422">Продовжити</entry>
+  <entry key="423">Закрити це вікно і продовжити запис</entry>
+  <entry key="424">Інший колір лінії</entry>
+  <entry key="425">Вибрати колір</entry>
+  <entry key="426">Вкл / Викл колір лінії</entry>
+  <entry key="427">Змінити колір наповнення</entry>
+  <entry key="428">Викл / Вкл колір наповнення</entry>
+  <entry key="429">Змінити ширину лінії</entry>
+  <entry key="430">Закрити</entry>
+  <entry key="431">Змінити розмір шрифту</entry>
+  <entry key="432">Стерти запис</entry>
+  <entry key="433">Гість</entry>
+  <entry key="434">В:</entry>
+  <entry key="435">Ім'я</entry>
+  <entry key="436">Кімната</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">Відміна</entry>
+  <entry key="439">Старт</entry>
+  <entry key="440">Ім'я</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Стерти лог чату серверу</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">Відправити повідомлення</entry>
+  <entry key="445">Емоції</entry>
+  <entry key="446">Емоції</entry>
+  <entry key="447">Виберіть публічні пристрої</entry>
+  <entry key="448">Аудіо і відео</entry>
+  <entry key="449">Лише аудіо</entry>
+  <entry key="450">Лише відео</entry>
+  <entry key="451">без Аудіо/Відео (статичні малюнки)</entry>
+  <entry key="452">Без показу Аудіо/Відео від вашого ПК. Буде доступна лиша картинка вашого профілю. Виберіть ці параметри якщо у вас поганий канал Internet.</entry>
+  <entry key="453">ПН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧТ</entry>
+  <entry key="457">ПТ</entry>
+  <entry key="458">СБ</entry>
+  <entry key="459">НД</entry>
+  <entry key="460">Понеділок</entry>
+  <entry key="461">Вівторок</entry>
+  <entry key="462">Середа</entry>
+  <entry key="463">Четвер</entry>
+  <entry key="464">Пятниця</entry>
+  <entry key="465">Субота</entry>
+  <entry key="466">Неділя</entry>
+  <entry key="467">КТ</entry>
+  <entry key="468">Календарний тиждень</entry>
+  <entry key="469">Січень</entry>
+  <entry key="470">Лютий</entry>
+  <entry key="471">Березень</entry>
+  <entry key="472">Квітень</entry>
+  <entry key="473">Травень</entry>
+  <entry key="474">Червень</entry>
+  <entry key="475">Липень</entry>
+  <entry key="476">Серпень</entry>
+  <entry key="477">Вересень</entry>
+  <entry key="478">Жовтень</entry>
+  <entry key="479">Листопад</entry>
+  <entry key="480">Грудень</entry>
+  <entry key="481">Календар</entry>
+  <entry key="482">Учасники</entry>
+  <entry key="483">Показати налаштування показу</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Висота</entry>
+  <entry key="486">Відео-контейнер</entry>
+  <entry key="487">Контейнер модерації</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Контейнер планшету</entry>
+  <entry key="490">Активізувати</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Висота</entry>
+  <entry key="493">Контейнер файлів,чату,учасників -</entry>
+  <entry key="494">Активізувати</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ширина | Висота</entry>
+  <entry key="497">Модератор покинув кімнату. Ви можете стати модератором або чекати.</entry>
+  <entry key="498">Немає модератора в даній кімнаті, але є учасники. Ви можете стати модератором або чекати</entry>
+  <entry key="499">Зворотній зв'язок {0}</entry>
+  <entry key="500">{0} - Запрошення</entry>
+  <entry key="501">Повідомлення для користувачів:</entry>
+  <entry key="502">Повідомлення:</entry>
+  <entry key="503">Натисніть на цей лінк щоб взяти участь в конференції:</entry>
+  <entry key="504">Натисніть тут, щоб увійти в кімнату</entry>
+  <entry key="505">Якщо ви має проблему з даним посилання, будь-ласка скопіюйте його і вставте в свій браузер:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Ваші дані користувача:</entry>
+  <entry key="508">Логін:</entry>
+  <entry key="509">Пароль:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">Команда {0}</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Відновити пароль</entry>
+  <entry key="514">Натисніть на це посилання, щоб ввести новий пароль</entry>
+  <entry key="515">Натисніть тут, щоб вести новий пароль</entry>
+  <entry key="516">Якщо ви має проблему з даним посилання, будь-ласка скопіюйте його і вставте в свій браузер:</entry>
+  <entry key="517">Відновлення пароля {0}</entry>
+  <entry key="518">Будь-ласка введіть правильну дату, наприклад 24.12.2007 (dd.mm.yyyy)</entry>
+  <entry key="519">Будь ласка введіть дійсний E-mail, наприклад name@mail.com</entry>
+  <entry key="520">Будь ласка введіть число з плаваючою крапкою, наприклад 1.00</entry>
+  <entry key="521">Будь ласка введіть число, наприклад 100</entry>
+  <entry key="522">Будь ласка введіть дійсний номер, наприклад ++49 0123 123123</entry>
+  <entry key="523">Будь-ласка введіть час, наприклад 12:23 (hh:mm)</entry>
+  <entry key="524">Пароль захищений</entry>
+  <entry key="525">Пароль</entry>
+  <entry key="526">Період дійсності</entry>
+  <entry key="527">Бескінечний</entry>
+  <entry key="528">Період</entry>
+  <entry key="529">Минулий</entry>
+  <entry key="530">Дійсни з:</entry>
+  <entry key="531">Дійсний до:</entry>
+  <entry key="532">Запрошення на {0}</entry>
+  <entry key="533">Нема запрошення для цього коду</entry>
+  <entry key="534">Запрошення вже використане. Даний тип запрошення не може бути використаний багаторазово</entry>
+  <entry key="535">Код запрошення не дійсний.</entry>
+  <entry key="536">Пароль:</entry>
+  <entry key="537">Перевірити пароль</entry>
+  <entry key="538">Невірний пароль!</entry>
+  <entry key="539">Бравзер</entry>
+  <entry key="540">Синхронізувати аудіо/відео</entry>
+  <entry key="541">Вхід виконано, але Ваша сесія, яку ви пробували не активна чи збережена на сервері. Ви повинні отримати новий SessionId і повторити вхід.</entry>
+  <entry key="542">SessionId не є loggedin чи не має адміністраторських прав. SOAP шлюз потребує адміністаривних прав для додання нових користувачів.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">На даний момент функція запису є в Beta-тестуванні!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
new file mode 100644
index 0000000..bc4d6ec
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">会议</entry>
+  <entry key="2">会议</entry>
+  <entry key="3">演讲</entry>
+  <entry key="4">设置</entry>
+  <entry key="5">用户</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">记录</entry>
+  <entry key="9">文件不存在</entry>
+  <entry key="10">由讲师记录</entry>
+  <entry key="11">已连接用户</entry>
+  <entry key="12">开始会议</entry>
+  <entry key="13">我的名称</entry>
+  <entry key="14">视频会议</entry>
+  <entry key="15">导入演示</entry>
+  <entry key="16">刷新列表</entry>
+  <entry key="17">转到主主文件</entry>
+  <entry key="18">新建投票</entry>
+  <entry key="19">新会议投票.</entry>
+  <entry key="20">问题:</entry>
+  <entry key="21">投票类型:</entry>
+  <entry key="22">创建</entry>
+  <entry key="23">提示:每个连接用户将收到一个新投票的消息提示.</entry>
+  <entry key="24">创建投票</entry>
+  <entry key="25">取消</entry>
+  <entry key="26">是/否</entry>
+  <entry key="27">数字 1-10</entry>
+  <entry key="28">投票</entry>
+  <entry key="29">主持人才能提问</entry>
+  <entry key="30">已您的投票.</entry>
+  <entry key="31">您已经投过这个票.</entry>
+  <entry key="32">投票 !</entry>
+  <entry key="33">你的回答:</entry>
+  <entry key="34">是</entry>
+  <entry key="35">否</entry>
+  <entry key="36">想要提问:</entry>
+  <entry key="37">投票结果</entry>
+  <entry key="38">提问:</entry>
+  <entry key="39">结果:</entry>
+  <entry key="40">回答:</entry>
+  <entry key="41">还未开始投票.</entry>
+  <entry key="42">投票!</entry>
+  <entry key="43">会议 (最大4用户)</entry>
+  <entry key="44">会议 (最大50用户)</entry>
+  <entry key="45">类型</entry>
+  <entry key="46">其他座位</entry>
+  <entry key="47">已经选择</entry>
+  <entry key="48">进入</entry>
+  <entry key="49">主持人已经离开.</entry>
+  <entry key="50">系统信息</entry>
+  <entry key="51">请选择设备</entry>
+  <entry key="52">请选择摄像头:</entry>
+  <entry key="53">请选择话筒:</entry>
+  <entry key="54">确定</entry>
+  <entry key="55">取消</entry>
+  <entry key="56">需要从新连接.</entry>
+  <entry key="57">编辑设置.</entry>
+  <entry key="58">课题:</entry>
+  <entry key="59">语言:</entry>
+  <entry key="60">确定</entry>
+  <entry key="61">取消</entry>
+  <entry key="62">清除白板</entry>
+  <entry key="63">新图片加入后清除白板?</entry>
+  <entry key="64">不再询问</entry>
+  <entry key="65">否</entry>
+  <entry key="66">编辑设置</entry>
+  <entry key="67">清除白板前确认.</entry>
+  <entry key="68">用户信息</entry>
+  <entry key="69">清除画板</entry>
+  <entry key="70">取消</entry>
+  <entry key="71">重做</entry>
+  <entry key="72">选择对象</entry>
+  <entry key="73">文本</entry>
+  <entry key="74">绘画</entry>
+  <entry key="75">画线</entry>
+  <entry key="76">下划线</entry>
+  <entry key="77">矩形</entry>
+  <entry key="78">椭圆</entry>
+  <entry key="79">箭头</entry>
+  <entry key="80">删除已选项</entry>
+  <entry key="81">接受主持</entry>
+  <entry key="82">应用</entry>
+  <entry key="83">取消</entry>
+  <entry key="84">成为主持</entry>
+  <entry key="85">关闭</entry>
+  <entry key="86">斜体</entry>
+  <entry key="87">粗体</entry>
+  <entry key="88">等待中</entry>
+  <entry key="89">用户想申请为主持:</entry>
+  <entry key="90">接受</entry>
+  <entry key="91">拒绝</entry>
+  <entry key="92">取消</entry>
+  <entry key="93">向下列用户发送请求</entry>
+  <entry key="94">接受</entry>
+  <entry key="95">拒绝</entry>
+  <entry key="96">更换主持</entry>
+  <entry key="97">你不是这个课题的主持!</entry>
+  <entry key="98">主持:</entry>
+  <entry key="99">房间已满.请稍后再试.</entry>
+  <entry key="100">椭圆</entry>
+  <entry key="101">关闭</entry>
+  <entry key="102">输入错误</entry>
+  <entry key="103">用户名必须长于4个字符</entry>
+  <entry key="104">用户密码必须长于4个字符</entry>
+  <entry key="105">用户名已存在</entry>
+  <entry key="106">邮件地址已注册</entry>
+  <entry key="107">系统错误，请联系管理员</entry>
+  <entry key="108">登录</entry>
+  <entry key="109">用户:</entry>
+  <entry key="110">密码:</entry>
+  <entry key="111">语言</entry>
+  <entry key="112">登录</entry>
+  <entry key="113">注册</entry>
+  <entry key="114">登录账号:</entry>
+  <entry key="115">密码:</entry>
+  <entry key="116">再次输入:</entry>
+  <entry key="117">姓:</entry>
+  <entry key="118">名:</entry>
+  <entry key="119">邮件:</entry>
+  <entry key="120">国家:</entry>
+  <entry key="121">注册</entry>
+  <entry key="122">取消</entry>
+  <entry key="123">注册</entry>
+  <entry key="124">首页</entry>
+  <entry key="125">用户管理</entry>
+  <entry key="126">群组管理</entry>
+  <entry key="127">组织管理</entry>
+  <entry key="128">会议室</entry>
+  <entry key="129">公开会议</entry>
+  <entry key="130">组织</entry>
+  <entry key="131">进入</entry>
+  <entry key="132">登录</entry>
+  <entry key="133">密码</entry>
+  <entry key="134">再次输入</entry>
+  <entry key="135">姓</entry>
+  <entry key="136">名</entry>
+  <entry key="137">邮件</entry>
+  <entry key="138">生日</entry>
+  <entry key="139">地址</entry>
+  <entry key="140">邮编</entry>
+  <entry key="141">国家</entry>
+  <entry key="142">详细地址</entry>
+  <entry key="143">用户数据</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">用户编号</entry>
+  <entry key="147">登录</entry>
+  <entry key="148">姓</entry>
+  <entry key="149">名</entry>
+  <entry key="150">显示下一个</entry>
+  <entry key="151">显示前一个</entry>
+  <entry key="152">删除记录</entry>
+  <entry key="153">取消</entry>
+  <entry key="154">删除</entry>
+  <entry key="155">新记录</entry>
+  <entry key="156">刷新记录</entry>
+  <entry key="157">删除记录</entry>
+  <entry key="158">状态</entry>
+  <entry key="159">禁止</entry>
+  <entry key="160">允许</entry>
+  <entry key="161">组织管理</entry>
+  <entry key="162">日历</entry>
+  <entry key="163">关闭</entry>
+  <entry key="164">组织编号</entry>
+  <entry key="165">名称</entry>
+  <entry key="166">用户</entry>
+  <entry key="167">主持</entry>
+  <entry key="168">管理员</entry>
+  <entry key="169">用户级别</entry>
+  <entry key="170">组织</entry>
+  <entry key="171">名称</entry>
+  <entry key="172">添加组织</entry>
+  <entry key="173">添加组织</entry>
+  <entry key="174">取消</entry>
+  <entry key="175">添加</entry>
+  <entry key="176">删除组织</entry>
+  <entry key="177">用户</entry>
+  <entry key="178">添加用户</entry>
+  <entry key="179">删除用户</entry>
+  <entry key="180">添加用户</entry>
+  <entry key="181">搜索用户</entry>
+  <entry key="182">搜索</entry>
+  <entry key="183">用户</entry>
+  <entry key="184">组织</entry>
+  <entry key="185">进入</entry>
+  <entry key="186">会议室</entry>
+  <entry key="187">会议室</entry>
+  <entry key="188">编号</entry>
+  <entry key="189">名称</entry>
+  <entry key="190">公开</entry>
+  <entry key="191">组织</entry>
+  <entry key="192">会议室</entry>
+  <entry key="193">名称</entry>
+  <entry key="194">类型</entry>
+  <entry key="195">公开</entry>
+  <entry key="196">备注</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">载入</entry>
+  <entry key="199">另存为</entry>
+  <entry key="200">文件名</entry>
+  <entry key="201">文件名</entry>
+  <entry key="202">取消</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">错误</entry>
+  <entry key="205">读取中</entry>
+  <entry key="206">对象已载入</entry>
+  <entry key="207">同步用户中, 用户请等待:</entry>
+  <entry key="208">载入图像</entry>
+  <entry key="209">同步用户中, 用户请等待:</entry>
+  <entry key="210">清除绘画</entry>
+  <entry key="211">清除绘画, 绘画数据将丢失</entry>
+  <entry key="212">载入文件前请确认</entry>
+  <entry key="213">发送邀请</entry>
+  <entry key="214">发送邀请</entry>
+  <entry key="215">主题</entry>
+  <entry key="216">收信人</entry>
+  <entry key="217">消息</entry>
+  <entry key="218">发送</entry>
+  <entry key="219">取消</entry>
+  <entry key="220">发送</entry>
+  <entry key="221">用户数据</entry>
+  <entry key="222">会议昵称</entry>
+  <entry key="223">昵称</entry>
+  <entry key="224">姓</entry>
+  <entry key="225">名</entry>
+  <entry key="226">邮件</entry>
+  <entry key="227">语言</entry>
+  <entry key="228">进入</entry>
+  <entry key="229">载入中</entry>
+  <entry key="230">数据载入，请等待!</entry>
+  <entry key="231">错误的密码</entry>
+  <entry key="232">密码不得少于6个字符</entry>
+  <entry key="233">邮件有误</entry>
+  <entry key="234">非法邮件地址</entry>
+  <entry key="235">注册成功</entry>
+  <entry key="236">用户已建立. 请登录.</entry>
+  <entry key="237">现在不能共享屏幕. 屏幕已使用.</entry>
+  <entry key="238">禁止共享</entry>
+  <entry key="239">共享屏幕</entry>
+  <entry key="240">传输有误: 不能同步屏幕. 当前窗口将丢失. 请联系主持人降低画质.</entry>
+  <entry key="241">屏幕:</entry>
+  <entry key="242">绘画</entry>
+  <entry key="243">文档</entry>
+  <entry key="244">讨论</entry>
+  <entry key="245">文件</entry>
+  <entry key="246">成员</entry>
+  <entry key="247">下载原始文档</entry>
+  <entry key="248">下载PDF文档</entry>
+  <entry key="249">载入演示到白板</entry>
+  <entry key="250">设置</entry>
+  <entry key="251">拖动这个对象</entry>
+  <entry key="252">缩放这个对象</entry>
+  <entry key="253">%</entry>
+  <entry key="254">之</entry>
+  <entry key="255">转到第一页</entry>
+  <entry key="256">转到前一页</entry>
+  <entry key="257">转到后一页</entry>
+  <entry key="258">转到最后一页</entry>
+  <entry key="259">缩小</entry>
+  <entry key="260">放大</entry>
+  <entry key="261">先生.</entry>
+  <entry key="262">女士.</entry>
+  <entry key="263">配置信息</entry>
+  <entry key="264">序号</entry>
+  <entry key="265">关键字</entry>
+  <entry key="266">配置信息</entry>
+  <entry key="267">关键字</entry>
+  <entry key="268">最新更新</entry>
+  <entry key="269">更新者</entry>
+  <entry key="270">注释</entry>
+  <entry key="271">关键字</entry>
+  <entry key="272">的</entry>
+  <entry key="273">用户</entry>
+  <entry key="274">从组织中删除用户</entry>
+  <entry key="275">删除</entry>
+  <entry key="276">此组织中已存在该用户.</entry>
+  <entry key="277">新闻</entry>
+  <entry key="278">快速链接</entry>
+  <entry key="279">会议室导航</entry>
+  <entry key="280">观众室导航</entry>
+  <entry key="281">服务与支持</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">软件问题反馈</entry>
+  <entry key="285">更多</entry>
+  <entry key="286">项目主页 (http://openmeetings.apache.org)</entry>
+  <entry key="287">用户邮件列表 (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">记录登录</entry>
+  <entry key="289">内容</entry>
+  <entry key="290">我的主页</entry>
+  <entry key="291">我的会议日程</entry>
+  <entry key="292">我的事件日程</entry>
+  <entry key="293">开放会议</entry>
+  <entry key="294">私人会议</entry>
+  <entry key="295">开放事件</entry>
+  <entry key="296">私人事件</entry>
+  <entry key="297">开放内容</entry>
+  <entry key="298">私人内容</entry>
+  <entry key="299">个人内容</entry>
+  <entry key="300"></entry>
+  <entry key="301">主持人</entry>
+  <entry key="302">申请为主持人</entry>
+  <entry key="303">投票</entry>
+  <entry key="304">选择文件</entry>
+  <entry key="305">设置</entry>
+  <entry key="306">视频音频设置</entry>
+  <entry key="307">白板设置</entry>
+  <entry key="308">退出</entry>
+  <entry key="309">回到房间</entry>
+  <entry key="310">注销</entry>
+  <entry key="311">桌面查看器</entry>
+  <entry key="312">启动桌面查看器</entry>
+  <entry key="313">视频和音频</entry>
+  <entry key="314">讨论</entry>
+  <entry key="315">白板</entry>
+  <entry key="316">主持人</entry>
+  <entry key="317">文件</entry>
+  <entry key="318">用户</entry>
+  <entry key="319">投票</entry>
+  <entry key="320">没有此用户名</entry>
+  <entry key="321">一封包含特殊链接的邮件已发送至你的信箱,请查收.如果没有收到,请检查和调整你的邮箱垃圾邮件设置,重新发送认证邮件.</entry>
+  <entry key="322">错误</entry>
+  <entry key="323">消息</entry>
+  <entry key="324">无效的哈希值,没有该用户.</entry>
+  <entry key="325">重置你的密码</entry>
+  <entry key="326">登录</entry>
+  <entry key="327">更改密码</entry>
+  <entry key="328">新密码</entry>
+  <entry key="329">重新输入密码</entry>
+  <entry key="330">密码不一致.</entry>
+  <entry key="331">4个或更多的字符,注意大小写!</entry>
+  <entry key="332">密码设置完毕,你可以登录.</entry>
+  <entry key="333">完成</entry>
+  <entry key="334">未知错误.</entry>
+  <entry key="335">未发现该用户名</entry>
+  <entry key="336">无效密码</entry>
+  <entry key="337">注销成功</entry>
+  <entry key="338">禁止前端注册.</entry>
+  <entry key="339">无效邮件地址</entry>
+  <entry key="340">文件名重复, 请选择另一文件名</entry>
+  <entry key="341">文件名太短</entry>
+  <entry key="342">无法保存地址</entry>
+  <entry key="343">用户已增加,但你必须将该用户与一个组织关联,否则他可能无法登录.</entry>
+  <entry key="344">新纪录</entry>
+  <entry key="345">与此字段编号没有对应的字段</entry>
+  <entry key="346">没有发现该标签对应的字段</entry>
+  <entry key="347">需要管理员权限</entry>
+  <entry key="348">语言编辑器</entry>
+  <entry key="349">语言</entry>
+  <entry key="350">标识号</entry>
+  <entry key="351">标识名称</entry>
+  <entry key="352">标识值</entry>
+  <entry key="353">字段值</entry>
+  <entry key="354">标签名</entry>
+  <entry key="355">标签值</entry>
+  <entry key="356">标签号</entry>
+  <entry key="357">您只删除了标签而没删除字段，因为字段可能被其它标签所使用。</entry>
+  <entry key="358">无效的标签号，FieldLanguagesvalues_Id在数据库中缺失.</entry>
+  <entry key="359">您不能删除该字段。只能删除标签。当前没有载入该字段的标签，可能是对应的字段的标签缺失的缘故</entry>
+  <entry key="360">导出</entry>
+  <entry key="361">你必须注销才能看到变化.</entry>
+  <entry key="362">增加新的语言</entry>
+  <entry key="363">删除语言</entry>
+  <entry key="364">增加新的语言</entry>
+  <entry key="365">名称</entry>
+  <entry key="366">增加语言</entry>
+  <entry key="367">备份</entry>
+  <entry key="368">到首页</entry>
+  <entry key="369">到前一页</entry>
+  <entry key="370">到下一页</entry>
+  <entry key="371">到最后一页</entry>
+  <entry key="372">用户发言</entry>
+  <entry key="373">声音 开/关</entry>
+  <entry key="374">系统</entry>
+  <entry key="375">你的设置</entry>
+  <entry key="376">你好,</entry>
+  <entry key="377">编辑你的信息</entry>
+  <entry key="378">新消息:</entry>
+  <entry key="379">上传新图片</entry>
+  <entry key="380">用户数据 - 导出</entry>
+  <entry key="381">所有的组织必须事先存在!</entry>
+  <entry key="382">开始导出</entry>
+  <entry key="383">由组织</entry>
+  <entry key="384">开始导出</entry>
+  <entry key="385">用户数据 - 导入</entry>
+  <entry key="386">选择 users.xml</entry>
+  <entry key="387">导入</entry>
+  <entry key="388">导出为 XML - 这些文件能用于: - 创建项目 - 导入到另一个系统 - 备份 - 自定义 - 放入language 目录,可以在下一次安装使用</entry>
+  <entry key="389">选择一个语言文件导入. 在下拉框中选择正确的语言! 不管文件的名称是什么, 将覆盖当前的语言!</entry>
+  <entry key="390">导入 - 选择文件</entry>
+  <entry key="391">另存为</entry>
+  <entry key="392">名称:</entry>
+  <entry key="393">注释</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">记录</entry>
+  <entry key="396">记录查看器</entry>
+  <entry key="397">开放和私人房间记录</entry>
+  <entry key="398">用户 :</entry>
+  <entry key="399">已参加:</entry>
+  <entry key="400"></entry>
+  <entry key="401">此房间的用户:</entry>
+  <entry key="402">刷新</entry>
+  <entry key="403">此房间已满. 请稍后再试.</entry>
+  <entry key="404">点击房间获取详细信息</entry>
+  <entry key="405">与此房间内的用户讨论:</entry>
+  <entry key="406">房间:</entry>
+  <entry key="407">此房间内的用户:</entry>
+  <entry key="408">自从:</entry>
+  <entry key="409">播放记录</entry>
+  <entry key="410">长度:</entry>
+  <entry key="411">日期:</entry>
+  <entry key="412">记录模式! 你不能更改任何信息, 这是一个记录文件!</entry>
+  <entry key="413">播放此记录</entry>
+  <entry key="414">播放 / 暂停</entry>
+  <entry key="415">开始记录</entry>
+  <entry key="416">停止记录</entry>
+  <entry key="417">记录中:</entry>
+  <entry key="418">现在已经有人在记录:</entry>
+  <entry key="419">记录中! 记录用户:</entry>
+  <entry key="420">取消</entry>
+  <entry key="421">记录将被取消且不被保存.</entry>
+  <entry key="422">继续</entry>
+  <entry key="423">关闭此窗口并且继续记录</entry>
+  <entry key="424">修改线条颜色</entry>
+  <entry key="425">选择颜色</entry>
+  <entry key="426">禁止 / 允许 线条颜色</entry>
+  <entry key="427">修改填充颜色</entry>
+  <entry key="428">禁止 / 允许 填充颜色</entry>
+  <entry key="429">修改 线宽</entry>
+  <entry key="430">关闭</entry>
+  <entry key="431">修改 字体大小</entry>
+  <entry key="432">删除记录</entry>
+  <entry key="433">客人</entry>
+  <entry key="434">由:</entry>
+  <entry key="435">名称</entry>
+  <entry key="436">房间</entry>
+  <entry key="437">日期</entry>
+  <entry key="438">取消</entry>
+  <entry key="439">开始</entry>
+  <entry key="440">名称</entry>
+  <entry key="441">日期</entry>
+  <entry key="442">删除服务器端讨论记录</entry>
+  <entry key="443">讨论</entry>
+  <entry key="444">发送消息</entry>
+  <entry key="445">表情</entry>
+  <entry key="446">表情</entry>
+  <entry key="447">选择发布设备</entry>
+  <entry key="448">音频和视频</entry>
+  <entry key="449">只有音频</entry>
+  <entry key="450">只有视频</entry>
+  <entry key="451">无 音频/视频 (静态图片)</entry>
+  <entry key="452">你的个人电脑上将不会有 音频/视频 发布, 而用你个人信息里的图片代替显示. 如果你遇到带宽问题或者速度过慢, 请选择这些设置.</entry>
+  <entry key="453">一</entry>
+  <entry key="454">二</entry>
+  <entry key="455">三</entry>
+  <entry key="456">四</entry>
+  <entry key="457">五</entry>
+  <entry key="458">六</entry>
+  <entry key="459">日</entry>
+  <entry key="460">星期一</entry>
+  <entry key="461">星期二</entry>
+  <entry key="462">星期三</entry>
+  <entry key="463">星期四</entry>
+  <entry key="464">星期五</entry>
+  <entry key="465">星期六</entry>
+  <entry key="466">星期日</entry>
+  <entry key="467">星期</entry>
+  <entry key="468">星期日历</entry>
+  <entry key="469">一月</entry>
+  <entry key="470">二月</entry>
+  <entry key="471">三月</entry>
+  <entry key="472">四月</entry>
+  <entry key="473">五月</entry>
+  <entry key="474">六月</entry>
+  <entry key="475">七月</entry>
+  <entry key="476">八月</entry>
+  <entry key="477">九月</entry>
+  <entry key="478">十月</entry>
+  <entry key="479">十一月</entry>
+  <entry key="480">十二月</entry>
+  <entry key="481">日历</entry>
+  <entry key="482">参与者</entry>
+  <entry key="483">显示布局设置</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">宽 | 高</entry>
+  <entry key="486">视频-容器</entry>
+  <entry key="487">主持人-容器</entry>
+  <entry key="488">X</entry>
+  <entry key="489">白板-容器</entry>
+  <entry key="490">允许</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">宽 | 高</entry>
+  <entry key="493">文件,讨论,参与者 - Container</entry>
+  <entry key="494">允许</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">宽 | 高</entry>
+  <entry key="497">主持人已离开房间. 现在无人演示. 你可以申请为主持人或者等待.</entry>
+  <entry key="498">此房间没有主持人, 但是有参与者. 你可以申请为主持人或者等待.</entry>
+  <entry key="499">反馈给{0}</entry>
+  <entry key="500">{0}——邀请</entry>
+  <entry key="501">消息发自:</entry>
+  <entry key="502">消息:</entry>
+  <entry key="503">点击此链接来参与会议:</entry>
+  <entry key="504">点击此处进入房间</entry>
+  <entry key="505">如果你在此链接遇到问题, 请拷贝并粘贴此链接到浏览器中:</entry>
+  <entry key="506">{0}——注册</entry>
+  <entry key="507">你的用户数据:</entry>
+  <entry key="508">登录:</entry>
+  <entry key="509">密码:</entry>
+  <entry key="510">邮件:</entry>
+  <entry key="511">{0}——团队</entry>
+  <entry key="512">{0}——注册</entry>
+  <entry key="513">{0}——重置密码</entry>
+  <entry key="514">点击此链接并键入新密码:</entry>
+  <entry key="515">点击此处键入新密码</entry>
+  <entry key="516">如果你在此链接遇到问题, 请拷贝并粘贴此链接到浏览器中:</entry>
+  <entry key="517">{0}系统重置密码</entry>
+  <entry key="518">请输入一个有效的日期, 比如 24.12.2001 (天.月.年)</entry>
+  <entry key="519">请输入一个有效的邮件地址, 比如 name@mail.com</entry>
+  <entry key="520">请输入一个浮点数, 比如 1.00</entry>
+  <entry key="521">请输入一个整数, 比如 100</entry>
+  <entry key="522">请输入一个有效的电话号码, 比如 ++86 010 12312123</entry>
+  <entry key="523">请输入一个有效的时间, 比如 12:23 (小时:分钟)</entry>
+  <entry key="524">密码保护</entry>
+  <entry key="525">密码</entry>
+  <entry key="526">有效期</entry>
+  <entry key="527">没有结束</entry>
+  <entry key="528">时期</entry>
+  <entry key="529">以前</entry>
+  <entry key="530">从:</entry>
+  <entry key="531">到:</entry>
+  <entry key="532">邀请参加{0}的讨论</entry>
+  <entry key="533">没有此邀请码对应的有效邀请</entry>
+  <entry key="534">此邀请已被使用. 此种类型邀请不能重用.</entry>
+  <entry key="535">此邀请码无效.</entry>
+  <entry key="536">密码:</entry>
+  <entry key="537">检查密码</entry>
+  <entry key="538">无效密码!</entry>
+  <entry key="539">浏览</entry>
+  <entry key="540">同步 音频/视频</entry>
+  <entry key="541">登录有效, 但是会话没有激活或保存在服务器上. 你必须重新登录获取新的会话.</entry>
+  <entry key="542">用户没有登录或没有管理员权限. SOAP网关必须要有管理员权限才可以添加新用户.</entry>
+  <entry key="543">此会话没有远端数据连接. 在访问应用程序之前你可能没有调用SOAP网关或者你使用了错误的Session-ID</entry>
+  <entry key="544">记录功能测试之中!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x轴</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y轴</entry>
+  <entry key="549">w</entry>
+  <entry key="550">宽</entry>
+  <entry key="551">h</entry>
+  <entry key="552">高</entry>
+  <entry key="553">改变透明度</entry>
+  <entry key="554">浏览器打开</entry>
+  <entry key="555">浏览器关闭</entry>
+  <entry key="556">与服务器的连接已丢失. 你需要重新载入程序或检查网络.</entry>
+  <entry key="557">指针</entry>
+  <entry key="558">同步</entry>
+  <entry key="559">正在同步用户, 请等待</entry>
+  <entry key="560">&lt;u&gt;下载为 SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;下载为 PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;下载为 JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;下载为 PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;下载为 TIF&lt;/u&gt;</entry>
+  <entry key="565">提醒:</entry>
+  <entry key="566">类别:</entry>
+  <entry key="567">重复:</entry>
+  <entry key="568">无</entry>
+  <entry key="569">位置:</entry>
+  <entry key="570">开始</entry>
+  <entry key="571">结束</entry>
+  <entry key="572">标题:</entry>
+  <entry key="573">注释:</entry>
+  <entry key="574">邀请</entry>
+  <entry key="575">每日</entry>
+  <entry key="576">每月</entry>
+  <entry key="577">每年</entry>
+  <entry key="578">约会结束日期必须晚于开始日期!</entry>
+  <entry key="579">请插入一个标题!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">如果您所用的语言是自右向左的，请激活此选项（反转字母顺序）</entry>
+  <entry key="582">仪表板</entry>
+  <entry key="583">观看已记录的会议或事件</entry>
+  <entry key="584">会议 - 创建一个4人会议（最多16人）&lt;br/&gt;每个人都有音频+视频权限</entry>
+  <entry key="585">事件 - 创建一个最多有200个听众的会议&lt;br/&gt;只有主持人拥有音频/视频</entry>
+  <entry key="586">创建用户, 房间, 组织&lt;br/&gt; + 修改配置</entry>
+  <entry key="587">目前有用户在此房间中</entry>
+  <entry key="588">身份识别</entry>
+  <entry key="589">登录</entry>
+  <entry key="590">D</entry>
+  <entry key="591">载入文档中. 所有用户正在同步，请稍等.</entry>
+  <entry key="592">上传结束, 正在转换文档 ...</entry>
+  <entry key="593">开始上传</entry>
+  <entry key="594">上传，导入对话框. 请从硬盘上选择一个文件.</entry>
+  <entry key="595">取消</entry>
+  <entry key="596">选择文件</entry>
+  <entry key="597">连接</entry>
+  <entry key="598">值</entry>
+  <entry key="599">流编号</entry>
+  <entry key="600">登录</entry>
+  <entry key="601">已连接 从</entry>
+  <entry key="602">房间 / 范围</entry>
+  <entry key="603">踢出用户</entry>
+  <entry key="604">踢出用户</entry>
+  <entry key="605">你确认从此连接断开用户？&lt;br/&gt; 仅将用户从此房间踢出.用户可以重新连入.</entry>
+  <entry key="606">你的会话已经被管理员或主持人关闭.</entry>
+  <entry key="607">电话</entry>
+  <entry key="608">用户是此房间的主持人</entry>
+  <entry key="609">用户被允许在白板上画画</entry>
+  <entry key="610">(Re) 启动音频/视频 或者修改设备配置</entry>
+  <entry key="611">允许此用户在白板上画画</entry>
+  <entry key="612">移除在白板画画功能</entry>
+  <entry key="613">用户</entry>
+  <entry key="614">文件</entry>
+  <entry key="615">白板</entry>
+  <entry key="616">讨论</entry>
+  <entry key="617">你的帐号已与多个组织关联. 请为当前会话选择一个组织.</entry>
+  <entry key="618">会议室当前满员，请稍后再试</entry>
+  <entry key="619">会议室类型</entry>
+  <entry key="620">指定会议室</entry>
+  <entry key="621">服务器时间</entry>
+  <entry key="622">{0}会议系统——提醒</entry>
+  <entry key="623">用户信息：</entry>
+  <entry key="624">消息：</entry>
+  <entry key="625">点击此链接参加会议</entry>
+  <entry key="626">点击进入会议室</entry>
+  <entry key="627">如果下面的链接无法点击，请将此链接地址复制到浏览器中进行访问：</entry>
+  <entry key="628">搜索</entry>
+  <entry key="629">外部用户</entry>
+  <entry key="630">头衔</entry>
+  <entry key="631">姓名</entry>
+  <entry key="632">邮件地址</entry>
+  <entry key="633">确认注销</entry>
+  <entry key="634">您确定要注销吗？</entry>
+  <entry key="635">操作</entry>
+  <entry key="636">演示会议室</entry>
+  <entry key="637">演示时间</entry>
+  <entry key="638">会议室计时器</entry>
+  <entry key="639">此会议室只是一个演示。如果不想此警告出现，可以创建一个私人会议室或者设置您自己的服务器。您的登录将会在如下时间内被自动注销：</entry>
+  <entry key="640">主持</entry>
+  <entry key="641">会议室需要一个主持人，主持人可以是讲座人、管理员或会议室创建者。</entry>
+  <entry key="642">确定</entry>
+  <entry key="643">新的屏幕共享</entry>
+  <entry key="644">屏幕共享，来自用户</entry>
+  <entry key="645">开始广播</entry>
+  <entry key="646">添加新会议</entry>
+  <entry key="647">会议室</entry>
+  <entry key="648">活动室</entry>
+  <entry key="649">主持人</entry>
+  <entry key="650">主持的用户</entry>
+  <entry key="651">主持的会议室</entry>
+  <entry key="652">M</entry>
+  <entry key="653">确定要将此用户设置为部门的主持人？</entry>
+  <entry key="654">在添加用户前请先选择一个部门</entry>
+  <entry key="655">部门-主持人</entry>
+  <entry key="656">确定要将此用户从部门中删除？</entry>
+  <entry key="657">此用户是主持人</entry>
+  <entry key="658">此用户不是主持人</entry>
+  <entry key="659">确定要取消该用户的支持人身份？</entry>
+  <entry key="660">在部门中添加或删除用户、会议室</entry>
+  <entry key="661">确定要删除此记录？</entry>
+  <entry key="662">确定要将此用户从部门删除？您只能删除用户与部门之间的关联，如果要删除此用户信息，请登录到管理单元进行操作</entry>
+  <entry key="663">您不能删除自己！</entry>
+  <entry key="664">此操作只能由管理员进行！</entry>
+  <entry key="665">没有与此ID关联的会话</entry>
+  <entry key="666">这是管理员或主持人帐户，您只能在管理模块中进行设置.</entry>
+  <entry key="667">要完成注册，请点击下面的链接，或将链接复制到地址栏中进行访问</entry>
+  <entry key="668">点击此处验证您的邮箱</entry>
+  <entry key="669">未找到此用户</entry>
+  <entry key="670">此用户已经激活！</entry>
+  <entry key="671">您已经成功激活帐户！</entry>
+  <entry key="672">正在登录</entry>
+  <entry key="673">您的帐户没有激活，请先使用注册时发送给您的邮件中的链接进行激活。</entry>
+  <entry key="674">注册成功！已经将验证码发送到您的邮箱，请查收。</entry>
+  <entry key="675">移除此用户的主持人角色</entry>
+  <entry key="676">赋予该用户主持的权限</entry>
+  <entry key="677">用户</entry>
+  <entry key="678">使用演示板</entry>
+  <entry key="679">主持人</entry>
+  <entry key="680">主持:请从列表中选择用户以赋予其使用演示版、主持或视频的权限</entry>
+  <entry key="681">此用户是主持人，已经自动拥有书写的权限</entry>
+  <entry key="682">您不能取消自己的主持人角色</entry>
+  <entry key="683">允许该用户发布声音或视频</entry>
+  <entry key="684">禁止该用户发布声音或视频</entry>
+  <entry key="685">我需要成为此会议室的主持人</entry>
+  <entry key="686">我需要在演示板上进行书写</entry>
+  <entry key="687">我需要共享声音和视频</entry>
+  <entry key="688">您是会议室的主持人</entry>
+  <entry key="689">您可以在演示板上进行书写了</entry>
+  <entry key="690">您可以接收声音和视频了</entry>
+  <entry key="691">主持人消息</entry>
+  <entry key="692">用户</entry>
+  <entry key="693">如果要成为主持人，请在用户列表中，通过该用户的状态图标进行设置</entry>
+  <entry key="694">如果要在演示板上书写，请在用户列表中，通过该用户的状态图标添加或删除此用户的书写权限。</entry>
+  <entry key="695">如果要共享声音和视频，请在用户列表中，通过该用户的状态图标设置是否共享此用户的声音和图像。</entry>
+  <entry key="696">会议室中必需有一个主持人</entry>
+  <entry key="697">取消</entry>
+  <entry key="698">保存</entry>
+  <entry key="699">日</entry>
+  <entry key="700">月</entry>
+  <entry key="701">年</entry>
+  <entry key="702">上载文件</entry>
+  <entry key="703">新建目录</entry>
+  <entry key="704">刷新</entry>
+  <entry key="705">回收站</entry>
+  <entry key="706">我的文件(Home Drive)</entry>
+  <entry key="707">会议室文件 (Public Drive)</entry>
+  <entry key="708">新建文件</entry>
+  <entry key="709">新建文件夹</entry>
+  <entry key="710">删除文件夹</entry>
+  <entry key="711">编辑文件名</entry>
+  <entry key="712">新建文件夹</entry>
+  <entry key="713">您确定要删除此项目？</entry>
+  <entry key="714">搜索</entry>
+  <entry key="715">搜索</entry>
+  <entry key="716">打开文档</entry>
+  <entry key="717">显示所有文件 (Tree View)</entry>
+  <entry key="718">关闭文档</entry>
+  <entry key="719">删除文件</entry>
+  <entry key="720">你没有绘画白板的权限。你必须是版主，或赋予你绘画白板的权利。你可以向版主申请绘画白板的权利。</entry>
+  <entry key="721">文档属性</entry>
+  <entry key="722">启动Java</entry>
+  <entry key="723">启动Flash</entry>
+  <entry key="724">用户希望分享他的屏幕。你想看到它吗？</entry>
+  <entry key="725">你正在分享你的屏幕。点击停止按钮可以中止分享会话。</entry>
+  <entry key="726">分享会话</entry>
+  <entry key="727">你正在分享你的屏幕！</entry>
+  <entry key="728">桌面浏览器</entry>
+  <entry key="729">停止分享</entry>
+  <entry key="730">桌面共享器</entry>
+  <entry key="731">单击开始发布您的屏幕</entry>
+  <entry key="732">开始分享</entry>
+  <entry key="733">暂停分享</entry>
+  <entry key="734">选择你的屏幕区域：</entry>
+  <entry key="735">改变宽度</entry>
+  <entry key="736">共享器已经结束会话！</entry>
+  <entry key="737">改变高度</entry>
+  <entry key="738">横向偏移</entry>
+  <entry key="739">纵向偏移</entry>
+  <entry key="740">宽：</entry>
+  <entry key="741">高：</entry>
+  <entry key="742">连接被服务器关闭</entry>
+  <entry key="743">取消</entry>
+  <entry key="744">启动Java</entry>
+  <entry key="745">如果你关闭本次会话，你将不能再重启本次会话的共享浏览器！</entry>
+  <entry key="746">确认关闭浏览会话</entry>
+  <entry key="747">分享屏幕</entry>
+  <entry key="748">录制会话</entry>
+  <entry key="749">分享浏览器</entry>
+  <entry key="750">Windows下火狐浏览器的分享浏览功能不太清晰，请使用其它浏览器来使用该功能</entry>
+  <entry key="751">前一页</entry>
+  <entry key="752">后一页</entry>
+  <entry key="753">重新载入</entry>
+  <entry key="754">首页</entry>
+  <entry key="755">载入</entry>
+  <entry key="756">将本页设为默认首页</entry>
+  <entry key="757">测试音频视频配置</entry>
+  <entry key="758">你在进入会议室前，可以使用音频视频测试来录制几秒钟的声音图像。然后通过回放你的录像录音来检查你的声音图像是否正常。</entry>
+  <entry key="759">下次不要再显示这个测试对话框</entry>
+  <entry key="760">取消</entry>
+  <entry key="761">开始进入会议室</entry>
+  <entry key="762">不要再次询问</entry>
+  <entry key="763">录制</entry>
+  <entry key="764">播放</entry>
+  <entry key="765">如果你不打算发表你的声音或图片，你可以不进行测试。没有音频或视频的参与者仍然可以使用白板，分享他们的屏幕或发布讨论消息。</entry>
+  <entry key="766">停止</entry>
+  <entry key="767">声音电平表</entry>
+  <entry key="768">按下开始</entry>
+  <entry key="769">开始会议</entry>
+  <entry key="770">开始演讲</entry>
+  <entry key="771">选择会议室</entry>
+  <entry key="772">检查音频视频设置</entry>
+  <entry key="773">开始会议</entry>
+  <entry key="774">参加视频会议的步骤如下:</entry>
+  <entry key="775">开始录制</entry>
+  <entry key="776">下次进入会议前不要再显示视频音频测试（录制）对话框</entry>
+  <entry key="777">公共会议室</entry>
+  <entry key="778">公共会议室－－所有用户都能访问。</entry>
+  <entry key="779">私有会议室</entry>
+  <entry key="780">私有会议室－－只允许同组织的用户访问。</entry>
+  <entry key="781">个人会议室</entry>
+  <entry key="782">个人会议室只供个人使用。 通过日历来设置会议的开始和结束日期时间。它们仅仅在有效期内罗列在此。</entry>
+  <entry key="783">这个操作需要主持人权限。</entry>
+  <entry key="784">申请成为主持人</entry>
+  <entry key="785">申请使用白板权限</entry>
+  <entry key="786">申请使用音频视频权限</entry>
+  <entry key="787">本次会话Hash已经使用，你不能同时使用两次。</entry>
+  <entry key="788">开始</entry>
+  <entry key="789">退出</entry>
+  <entry key="790">你真的退出会议吗？建议你清除你上载的文件、白板和讨论记录。</entry>
+  <entry key="791">退出会议</entry>
+  <entry key="792">会议室</entry>
+  <entry key="793">选择会议室</entry>
+  <entry key="794">日历中存在未有保存的事件。请选择保存它或删除它。</entry>
+  <entry key="795">请为你的会议添加至少一名与会者。</entry>
+  <entry key="796">你真的要删除你的事件?</entry>
+  <entry key="797">警告</entry>
+  <entry key="798">添加事件</entry>
+  <entry key="799">日</entry>
+  <entry key="800">周</entry>
+  <entry key="801">月</entry>
+  <entry key="802">描述</entry>
+  <entry key="803">与会者</entry>
+  <entry key="804">本远程视频会议系统是一个用来召开远程视频会议、培训演讲、审查文件的平台。按照上面的指引，按下开始按钮可以马上进入会议。或者进入日历预约一个会议计划</entry>
+  <entry key="805">预约会议</entry>
+  <entry key="806">要建立一个会议，您可以添加日历上的一个新的事件。对于每个日历事件将自动创建一个会议室。你和每一个与会者将获得一个到房间链接的电子邮件。&lt;br/&gt;&lt;br/&gt;您可以选择不同的房间类型有不同的布局和适度系统。您也可以为每日历事件选择不同的电子邮件通知发送类型</entry>
+  <entry key="807">需要帮助吗？</entry>
+  <entry key="808">受限制</entry>
+  <entry key="809">搜索</entry>
+  <entry key="810">添加</entry>
+  <entry key="811">没有选择用户。请从列表中选择一个项目，然后点击添加。</entry>
+  <entry key="812">添加与会者</entry>
+  <entry key="813">保存</entry>
+  <entry key="814">删除</entry>
+  <entry key="815">活动详情</entry>
+  <entry key="816">默认主持人</entry>
+  <entry key="817">超级用户</entry>
+  <entry key="818">用户号</entry>
+  <entry key="819">姓名</entry>
+  <entry key="820">邮件地址</entry>
+  <entry key="821">添加一个新的默认主持人</entry>
+  <entry key="822">是超级主持人</entry>
+  <entry key="823">如果房间拥有主持配置，那么拥有主持权限或管理员权限的人进入会议室后，将自动获取这个会议室的主持权。如果你不希望这样，而且你希望指定一个用户主持这个会议室，请使用默认主持人选项。</entry>
+  <entry key="824">一个超级主持人进入房间时，他将自动获取这个会议室的主持权限。没有人能取消他的主持权限。</entry>
+  <entry key="825">为用户申请超级主持权限</entry>
+  <entry key="826">取消超级主持权限</entry>
+  <entry key="827">D</entry>
+  <entry key="828">如果为会议室添加专属组织，那么只有该组织成员才能进入该会议室。（仅仅对公共会议室有效！）</entry>
+  <entry key="829">主持</entry>
+  <entry key="830">限制数</entry>
+  <entry key="831">单位</entry>
+  <entry key="832">你确认吗？</entry>
+  <entry key="833">你真的确认需要删除这个项目吗？你需要点击保存按钮来保存更改！</entry>
+  <entry key="834">没有用户被选择。添加前你必须先选择用户！</entry>
+  <entry key="835">添加新的默认主持人</entry>
+  <entry key="836">你确认要赋予该用户超级主持人权限吗？注意：其他主持人是无法取消超级主持人权限的。你需要保存房间对象来保存这些设置！</entry>
+  <entry key="837">你确认要取消该用户的超级主持人权限吗？ 你需要保存房间对象来保存这些设置！</entry>
+  <entry key="838">这个是超级主持人！你不能取消一个超级主持人的权限！</entry>
+  <entry key="839">你真的要删除这个文件/文件夹？</entry>
+  <entry key="840">删除文件/文件夹?</entry>
+  <entry key="841">女士</entry>
+  <entry key="842">先生</entry>
+  <entry key="843">属性</entry>
+  <entry key="844">在共享器中显示鼠标位置</entry>
+  <entry key="845">使用SIP小应用程序共享音频</entry>
+  <entry key="846">使用SIP小应用程序共享音频，用flash共享视频</entry>
+  <entry key="847">满屏</entry>
+  <entry key="848">显示屏幕</entry>
+  <entry key="849">用户</entry>
+  <entry key="850">想分享他的屏幕。你想看到它吗？</entry>
+  <entry key="851">关闭</entry>
+  <entry key="852">缩放</entry>
+  <entry key="853">本次会话已经被发布分享用户关闭！</entry>
+  <entry key="854">暂停</entry>
+  <entry key="855">新的屏幕分享</entry>
+  <entry key="856">最小化</entry>
+  <entry key="857">最大化</entry>
+  <entry key="858">视频</entry>
+  <entry key="859">录制时间线</entry>
+  <entry key="860">私有会议记录</entry>
+  <entry key="861">公开会议记录</entry>
+  <entry key="862">信息</entry>
+  <entry key="863">名称</entry>
+  <entry key="864">长度</entry>
+  <entry key="865">日期</entry>
+  <entry key="866">用／以</entry>
+  <entry key="867">下载</entry>
+  <entry key="868">主 - 视频</entry>
+  <entry key="869">录制</entry>
+  <entry key="870">你可以同时录制和分享你的屏幕。你可以点击上面的开始按钮来让其他与会者看到你的屏幕。如果仅仅是录制会话，那点击开始录制按钮就足够了。</entry>
+  <entry key="871">开始录制</entry>
+  <entry key="872">停止录制</entry>
+  <entry key="873">下载 FLV 格式文件</entry>
+  <entry key="874">会议室</entry>
+  <entry key="875">播放</entry>
+  <entry key="876">停止</entry>
+  <entry key="877">用户打开麦克风</entry>
+  <entry key="878">停止分享</entry>
+  <entry key="879">允许所有用户发问</entry>
+  <entry key="880">关闭这个功能可以防止任何用户在你会议室捣乱。影响效果是向主持人发问的按钮是不可见的。</entry>
+  <entry key="881">权利</entry>
+  <entry key="882">下载 AVI 格式文件</entry>
+  <entry key="883">FLV格式</entry>
+  <entry key="884">AVI格式</entry>
+  <entry key="885">原始屏幕视频</entry>
+  <entry key="886">只用音频</entry>
+  <entry key="887">在处理记录时出错</entry>
+  <entry key="888">记录未准备好,请过几分钟再试</entry>
+  <entry key="889">日志:</entry>
+  <entry key="890">消息日志</entry>
+  <entry key="891">确认</entry>
+  <entry key="892">SIP控件没有准备好</entry>
+  <entry key="893">设置SIP账户</entry>
+  <entry key="894">每个用户的SIP设置。可以通过管理员打开或者关闭SIP。 &gt; 配置键值（enable_sip）。每个用户的SIP数据是自动产生的，可以通过“重新生成SIP数据”选项重新生成。</entry>
+  <entry key="895">SIP用户</entry>
+  <entry key="896">Sip密码</entry>
+  <entry key="897">Sip授权号</entry>
+  <entry key="898">登录到SIP网关失败，需要检查SIP供应商以及用户账号的授权。如果是管理员，还可以登录和检查配置，其它用户和主持人将不能进行任何操作。</entry>
+  <entry key="899">登录到SIP网关失败，请联系系统维护人员。</entry>
+  <entry key="900">正在登录SIP网关 ...</entry>
+  <entry key="901">正在登录SIP网关 ...</entry>
+  <entry key="902">显示日志</entry>
+  <entry key="903">会后记录日志</entry>
+  <entry key="904">SIP小应用程序的消息</entry>
+  <entry key="905">SIP控件没有准备好,请点击确认按钮允许控件的使用!</entry>
+  <entry key="906">申请成为主持人</entry>
+  <entry key="907">保存更改</entry>
+  <entry key="908">约定的会议已经更改了，您是否象保存这些更改？&lt;br/&gt;&lt;br/&gt;所有的参会人员都会受到时间更改后的会议通知邮件</entry>
+  <entry key="909">如需都区其它记录,请先登陆系统</entry>
+  <entry key="910">会议人员邀请</entry>
+  <entry key="911">会议可邀请的人员</entry>
+  <entry key="912">您是这次会议的主持人,您可以决定会议中谁可以发言,您也可以控制启动和停止会议的视频录制。</entry>
+  <entry key="913">开始录制</entry>
+  <entry key="914">结束录制</entry>
+  <entry key="915">会议视频录制已经开始</entry>
+  <entry key="916">视频录制已经停止，也可能还没开始</entry>
+  <entry key="917">会议视频录制已经开始d!</entry>
+  <entry key="918">取消</entry>
+  <entry key="919">录制的视频后续处理每1分钟时间需5分钟时间来处理，正在转码处理的录制视频是:</entry>
+  <entry key="920">您必须重新输入密码</entry>
+  <entry key="921">重新产生SIP数据</entry>
+  <entry key="922">您不能将文件或者文件夹移入自己所在的子目录!</entry>
+  <entry key="923">私有记录文件大小</entry>
+  <entry key="924">公共记录文件大小</entry>
+  <entry key="925">授权设置</entry>
+  <entry key="926">在授权时您可以把用户设置为有效期过期或者设置最大的使用时间数</entry>
+  <entry key="927">检查授权</entry>
+  <entry key="928">费率</entry>
+  <entry key="929">过期时间</entry>
+  <entry key="930">剩余的秒数</entry>
+  <entry key="931">总共时间</entry>
+  <entry key="932">您的授权已经过期，需要重新购买使用权</entry>
+  <entry key="933">点击购买</entry>
+  <entry key="934">账号上剩余的时间</entry>
+  <entry key="935">用户授权信息</entry>
+  <entry key="936">信息</entry>
+  <entry key="937">关闭</entry>
+  <entry key="938">您的授权已经过期，需要重新购买使用权</entry>
+  <entry key="939">授权设置</entry>
+  <entry key="940">您可以购买分钟数时间来召开会议，&lt;br/&gt;&lt;br/&gt; 或者使用3-12个月的费率折扣来购买，&lt;br/&gt;&lt;br/&gt;发送邀请函（直接进入会议室的外部链接）或者通过日历来创建会议是只能有包月的用户使用的</entry>
+  <entry key="941">9.99欧元购买60分钟（0.16欧元每分钟）</entry>
+  <entry key="942">19.99欧元购买5小时（0.06欧元每分钟）</entry>
+  <entry key="943">29.99欧元购买3个月（9.99欧元每个月）</entry>
+  <entry key="944">39.99欧元每6个月（6.66欧元每个月）</entry>
+  <entry key="945">按分钟数付费</entry>
+  <entry key="946">按语音流量付费</entry>
+  <entry key="947">您的授权永不过期</entry>
+  <entry key="948">您的授权即将在以下日期过期:</entry>
+  <entry key="949">您购买了分钟付费服务，您还有:</entry>
+  <entry key="950">购买新的信用卡!</entry>
+  <entry key="951">需要您自己的服务器?</entry>
+  <entry key="952">您如果想拥有自己的{0}会议服务器或者集成到已有的应用中去，5000元每次!</entry>
+  <entry key="953">或者给我们发送信息</entry>
+  <entry key="954">回复：</entry>
+  <entry key="955">消息:</entry>
+  <entry key="956">发送</entry>
+  <entry key="957">点此获取联系人信息</entry>
+  <entry key="958">信用卡详情</entry>
+  <entry key="959">名</entry>
+  <entry key="960">姓</entry>
+  <entry key="961">信用卡类型</entry>
+  <entry key="962">VISA卡</entry>
+  <entry key="963">主卡</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">快递</entry>
+  <entry key="966">信用卡号</entry>
+  <entry key="967">过期日期</entry>
+  <entry key="968">卡号验证码</entry>
+  <entry key="969">账单寄送地址</entry>
+  <entry key="970">地址</entry>
+  <entry key="971"></entry>
+  <entry key="972">城市</entry>
+  <entry key="973">国家</entry>
+  <entry key="974">省</entry>
+  <entry key="975">邮编</entry>
+  <entry key="976">数量</entry>
+  <entry key="977">提交</entry>
+  <entry key="978">步骤1: 支付单</entry>
+  <entry key="979">邮件地址</entry>
+  <entry key="980">点击‘payola付款’，接受visa卡，master卡，discover卡或美国运通卡。无需签入payola。德国居民也可通过借记卡付款(Per Lastschrift-Einzug)。</entry>
+  <entry key="981">感谢购买OpenMeetings。款项收到后您的帐户会被更新。您会在邮件中收到pdf格式的发票。您也可以在个人设置中查询过往交易。关闭此浏览窗口以回到OpenMeetings。</entry>
+  <entry key="982">点击购买</entry>
+  <entry key="983">点击购买</entry>
+  <entry key="984">步骤3: {0}系统支付 - 检查订单及付款!</entry>
+  <entry key="985">姓名</entry>
+  <entry key="986">付款已经收到</entry>
+  <entry key="987">您好,</entry>
+  <entry key="988">已经收到您的付款，并已经更新了您的用户设置。所有以往的付款信息都能够在您的用户配置中下载</entry>
+  <entry key="989">感谢您使用{0}系统!</entry>
+  <entry key="990">{0}系统已经收到您的付款-</entry>
+  <entry key="991">支付状态</entry>
+  <entry key="992">支付随机号</entry>
+  <entry key="993">分钟数</entry>
+  <entry key="994">约数</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">状态</entry>
+  <entry key="997">支付单</entry>
+  <entry key="998"></entry>
+  <entry key="999">您需要购买语音容量的费率才可以发送邀请或者通过日历创建会议。使用按分钟付费的方式就可以访问系统了，您也可以让第三方访问会议</entry>
+  <entry key="1000">该邮件地址已经被其他用户使用</entry>
+  <entry key="1001">SIP设置</entry>
+  <entry key="1002">会议号是自动创建的</entry>
+  <entry key="1003">SIP号</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">清除此片子中的所有对象</entry>
+  <entry key="1006">只有在状态栏中输入的URL地址才会发到参会者</entry>
+  <entry key="1007">创建团队会议室</entry>
+  <entry key="1008">为团队创建新的会议室!</entry>
+  <entry key="1009">您可以创建一新的会议室并选择参会人员。所有被选择的人员将自动的移动新的会议室，或者是接受到通知信。团队会议室的主持人可以获取所有会议室的列表，并在各会议室之间来回切换，方便各会议室的即时问题需要</entry>
+  <entry key="1010">用户名</entry>
+  <entry key="1011">登录</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">新团队会议室的所有成员：</entry>
+  <entry key="1014">创建团队会议室</entry>
+  <entry key="1015">取消</entry>
+  <entry key="1016">至少为团队会议室选择一个用户</entry>
+  <entry key="1017">为团队增加用户</entry>
+  <entry key="1018">从团队会议室中移除该用户</entry>
+  <entry key="1019">用户是团队会议室的主持人（他可以管理所有的团体会议并可以接受所管理的团队会议室的邀请）</entry>
+  <entry key="1020">会议类型</entry>
+  <entry key="1021">如果您选择“强制所有用户都移动新的会议室”，则所有选中的成员将自动的移到新创建的团队会议室中，否则他们会得到移到新会议室的通知按钮，用户可以自由选择是否进入新团队会议室。</entry>
+  <entry key="1022">管理团队成员</entry>
+  <entry key="1023">作为主持人，您可以游走在所有的团队会议室间，团队参会者可以发送消息给你，如：可以邀请您参与到他们的会议室中帮助他们。您也可以终止所有的团队会议，这样所有的用户将退出系统。</entry>
+  <entry key="1024">强制所有用户都移动新的会议室</entry>
+  <entry key="1025">姓名</entry>
+  <entry key="1026">被创建</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">参会的人员</entry>
+  <entry key="1030">使用加号从左边增加会议成员，或者从右边移除参会人员</entry>
+  <entry key="1031">1) 团队会议室设置</entry>
+  <entry key="1032">2) 将用户加入到团队会议室中</entry>
+  <entry key="1033">团队会议室名称</entry>
+  <entry key="1034">团队会议室</entry>
+  <entry key="1035">切换到该会议室中</entry>
+  <entry key="1036">切换到该团队会议室中</entry>
+  <entry key="1037">关闭团队会议室并让所有的用户退出</entry>
+  <entry key="1038">新的团队会议室</entry>
+  <entry key="1039">您有新的团队会议室可用</entry>
+  <entry key="1040">切换到团队会议室中</entry>
+  <entry key="1041">团队会议室动作</entry>
+  <entry key="1042">您可以通过主菜单中的“动作”菜单重新打开该窗口!</entry>
+  <entry key="1043">发送消息给团队会议室主持人</entry>
+  <entry key="1044">新建团队会议室</entry>
+  <entry key="1045">有新的会议室可用，您可以切入到该会议室中去。团队会议室就像有一群会议室，所有会议室有一个超级主持人可以请求帮助。在“我的会议室”中您可以看到团队会议室。</entry>
+  <entry key="1046">切换到团队会议室</entry>
+  <entry key="1047">创建者:</entry>
+  <entry key="1048">团队会议室名称:</entry>
+  <entry key="1049">如果您离开本会议室，窗口仍旧会保留!</entry>
+  <entry key="1050">本团会议室成员</entry>
+  <entry key="1051">3)其它您可以切入的团队会议室</entry>
+  <entry key="1052">如果碰到问题，请发送一条消息给团队会议室的主持人。</entry>
+  <entry key="1053">发送</entry>
+  <entry key="1054">2)邀请至这个团队会议室的所有用户</entry>
+  <entry key="1055">是否团队会议室主持人</entry>
+  <entry key="1056">所有的用户被主持人邀请至这个会议室</entry>
+  <entry key="1057">此刻团队会议室没有主持人!</entry>
+  <entry key="1058">请输入一条消息</entry>
+  <entry key="1059">请求帮助，我们在团队会议室中遇到了麻烦</entry>
+  <entry key="1060">一个团队会议室成员请求您的帮助</entry>
+  <entry key="1061">团队会议室请求帮助p</entry>
+  <entry key="1062">消息:</entry>
+  <entry key="1063">从:</entry>
+  <entry key="1064">您不属于任何团队的会议室，但您可以加入到任何团队的会议室中</entry>
+  <entry key="1065">备份系统，包括所有用户产生的数据，不过不包括语言配置，这是由于语言的配置是有系统安装时候导入的。如果需要更新您的系统，需要导出旧系统然后，1）重新生成数据库；2）导入备份的文件；3）在系统产生任何数据前先导入备份的文件。</entry>
+  <entry key="1066">系统备份</entry>
+  <entry key="1067">允许用户共享屏幕</entry>
+  <entry key="1068">D禁止用户共享屏幕</entry>
+  <entry key="1069">用户是主持人，可以做任何动作!</entry>
+  <entry key="1070">想共享屏幕</entry>
+  <entry key="1071">您可以共享屏幕了</entry>
+  <entry key="1072">请求共享屏幕</entry>
+  <entry key="1073">允许/禁止共享屏幕</entry>
+  <entry key="1074">T关闭声音</entry>
+  <entry key="1075">打开声音</entry>
+  <entry key="1076">只有音频</entry>
+  <entry key="1077">勾选此项可以使得会议室只能有音频功能有利于节省带宽</entry>
+  <entry key="1078">在共享屏幕期间允许远程控制</entry>
+  <entry key="1079">在共享屏幕期间禁止远程控制</entry>
+  <entry key="1080">请求在共享屏幕期间允许远程控制</entry>
+  <entry key="1081">您被允许在共享屏幕期间允许远程控制</entry>
+  <entry key="1082">想远程控制</entry>
+  <entry key="1083">用户是主持人，他可以操控任何功能! [远程桌面控制]</entry>
+  <entry key="1084">允许/禁止使用远程桌面控制的屏幕 (在屏幕共享时)</entry>
+  <entry key="1085">1) 从您的计算机到远程计算机：从本机的剪切板拷贝和粘贴到远程控制计算机中，首先在屏幕上点一下，然后在文本框中右键点击，选择“插入”。2）从远程计算机到您的计算机：从远程计算机拷贝文本到您的计算机中，首先高亮选择远程计算机的文本，然后右键点击屏幕选择拷贝高亮文本即可。</entry>
+  <entry key="1086">在您的计算和远程计算机间拷贝和粘贴文本</entry>
+  <entry key="1087">拷贝高亮文本</entry>
+  <entry key="1088">如何拷贝和粘贴</entry>
+  <entry key="1089">共享屏幕的质量:</entry>
+  <entry key="1090">超高清晰</entry>
+  <entry key="1091">高清晰</entry>
+  <entry key="1092">一般清晰</entry>
+  <entry key="1093">低清晰度</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">键盘:</entry>
+  <entry key="1097">关闭网络会议!</entry>
+  <entry key="1098">会议已经关闭，您将重定向到其它网址</entry>
+  <entry key="1099">关闭会议室</entry>
+  <entry key="1100">关闭后展示给用户的地址URL</entry>
+  <entry key="1101">会议室关闭设置</entry>
+  <entry key="1102">如果会议室关闭则用户会被重定位到相应的地址中去</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">编号</entry>
+  <entry key="1105">名称</entry>
+  <entry key="1106">配置文件</entry>
+  <entry key="1107">Ldap配置</entry>
+  <entry key="1108">名称</entry>
+  <entry key="1109">是否有效</entry>
+  <entry key="1110">被插入</entry>
+  <entry key="1111">插入者</entry>
+  <entry key="1112">被更新</entry>
+  <entry key="1113">更新者</entry>
+  <entry key="1114">配置文件需要与hibernate.cfg.xml文件在同一目录中，您需要手工的将配置文件上传到该文件夹中，对该文件的任何修改都会即刻在系统中反应出来。</entry>
+  <entry key="1115">配置文件名称</entry>
+  <entry key="1116">如果您勾选了“增加域选项”，则在登录界面中将出现“域”选择下拉框选项。这项功能在LDAP目录服务的配置中是非常有用的。如：如果用户使用hans@localhost.com作为ldap目录服务的登录名，则在用户名中只需要输入hans，而域选项则选择localhost.com</entry>
+  <entry key="1117">在用户名后加入域名</entry>
+  <entry key="1118">域名</entry>
+  <entry key="1119">插入</entry>
+  <entry key="1120">拷贝高亮文本</entry>
+  <entry key="1121">远程粘贴板中的文本</entry>
+  <entry key="1122">显示远程粘贴板</entry>
+  <entry key="1123">不要再显示</entry>
+  <entry key="1124">在此拷贝文本 ...</entry>
+  <entry key="1125">您需要远程控制的权限或者是作为主持人才能进行拷贝和粘贴的操作</entry>
+  <entry key="1126">编辑默认配置...</entry>
+  <entry key="1127">不要在远程控制中显示拷贝和粘贴的信息框</entry>
+  <entry key="1128">保存</entry>
+  <entry key="1129">移除</entry>
+  <entry key="1130">取消</entry>
+  <entry key="1131">邀请用户参与会议</entry>
+  <entry key="1132">选择一个会议室，被邀请者会受到一条您的名字和进入会议室的链接</entry>
+  <entry key="1133">连接时间:</entry>
+  <entry key="1134">邀请后进入会议室</entry>
+  <entry key="1135">邀请</entry>
+  <entry key="1136">消息</entry>
+  <entry key="1137">想请您加入会议室:</entry>
+  <entry key="1138">邀请信</entry>
+  <entry key="1139">发送邀请</entry>
+  <entry key="1140">不希望收到您的邀请!</entry>
+  <entry key="1141">同意</entry>
+  <entry key="1142">拒绝</entry>
+  <entry key="1143">时区</entry>
+  <entry key="1144">事件详情</entry>
+  <entry key="1145">姓名</entry>
+  <entry key="1146">详细描述</entry>
+  <entry key="1147">创建者</entry>
+  <entry key="1148">时区信息</entry>
+  <entry key="1149">勾选“时区”选项使得用户在下次登录时可以让他们更新用户资料信息</entry>
+  <entry key="1150">请查核您所在的时区.</entry>
+  <entry key="1151">新会议:</entry>
+  <entry key="1152">详细情况</entry>
+  <entry key="1153">开始时间:</entry>
+  <entry key="1154">结束时间:</entry>
+  <entry key="1155">会议变更:</entry>
+  <entry key="1156">主持人:</entry>
+  <entry key="1157">会议取消:</entry>
+  <entry key="1158">会议提醒:</entry>
+  <entry key="1159">社区设置</entry>
+  <entry key="1160">联系信息对于任何人都可见</entry>
+  <entry key="1161">添加个人专长以便其他人方便找到您，用逗号分隔多个专长</entry>
+  <entry key="1162">供职单位</entry>
+  <entry key="1163">个人兴趣</entry>
+  <entry key="1164">姓名</entry>
+  <entry key="1165">时区</entry>
+  <entry key="1166">个人特长</entry>
+  <entry key="1167">联系信息</entry>
+  <entry key="1168">只给自己的联系人显示联系信息</entry>
+  <entry key="1169">不开放个人联系信息</entry>
+  <entry key="1170">个人简介</entry>
+  <entry key="1171">设置</entry>
+  <entry key="1172">查找用户</entry>
+  <entry key="1173">您的简介可被其它人查看</entry>
+  <entry key="1174">编辑个人信息</entry>
+  <entry key="1175">查找其它人员</entry>
+  <entry key="1176">查找</entry>
+  <entry key="1177">供职单位</entry>
+  <entry key="1178">其它信息</entry>
+  <entry key="1179">关键字</entry>
+  <entry key="1180">姓名</entry>
+  <entry key="1181">时区</entry>
+  <entry key="1182">供职</entry>
+  <entry key="1183">搜索</entry>
+  <entry key="1184">搜索返回结果</entry>
+  <entry key="1185">动作</entry>
+  <entry key="1186">增加为联系人</entry>
+  <entry key="1187">发送消息</entry>
+  <entry key="1188">联系人及消息</entry>
+  <entry key="1189">被禁止的用户</entry>
+  <entry key="1190">接受</entry>
+  <entry key="1191">拒绝</entry>
+  <entry key="1192">您好,</entry>
+  <entry key="1193">想把您添加为联系人.</entry>
+  <entry key="1194">检查您的联系人请求消息，通过点击链接来接受或者拒绝请求</entry>
+  <entry key="1195">该用户已经在您的联系人表中，或者该用户收到您的邀请后没有处理</entry>
+  <entry key="1196">联系人列表</entry>
+  <entry key="1197">编辑联系人及消息，处理还未处理的请求!</entry>
+  <entry key="1198">已经确认了您的请求!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">查看 /拷贝讨论日志</entry>
+  <entry key="1201">讨论日志</entry>
+  <entry key="1202">来自</entry>
+  <entry key="1203">主题</entry>
+  <entry key="1204">发送</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">消息</entry>
+  <entry key="1207">新的邮件</entry>
+  <entry key="1208">给所有联系人发送新消息</entry>
+  <entry key="1209">撰写新消息</entry>
+  <entry key="1210">发送给:</entry>
+  <entry key="1211">主题:</entry>
+  <entry key="1212">使用满屏功能将使白板根据参会人员的屏幕分辨率调整可见性</entry>
+  <entry key="1213">踢出用户</entry>
+  <entry key="1214">您不能将自己踢出，如果想离开，请关闭浏览器或者退出点击按钮</entry>
+  <entry key="1215">您确信将该用户踢出会议室吗？</entry>
+  <entry key="1216">确认...</entry>
+  <entry key="1217">您不能将超级主持人踢出会议室!</entry>
+  <entry key="1218">预订会议室</entry>
+  <entry key="1219">开始</entry>
+  <entry key="1220">结束</entry>
+  <entry key="1221">在会议请求消息中增加其他内容，该请求事件会添加到所有的参会人员的日历中</entry>
+  <entry key="1222">收件箱</entry>
+  <entry key="1223">发送箱</entry>
+  <entry key="1224">回收站</entry>
+  <entry key="1225">您不能把自己加入为联系人</entry>
+  <entry key="1226">用户已经拒绝请求!</entry>
+  <entry key="1227">用户已经接受请求!</entry>
+  <entry key="1228">用户请求已经失效!</entry>
+  <entry key="1229">用户已经加入到联系人列表!</entry>
+  <entry key="1230">用户已经拒绝联系人请求，并从未处理联系人中移除!</entry>
+  <entry key="1231">没有这样的联系人!</entry>
+  <entry key="1232">您确实想移除该联系人马？</entry>
+  <entry key="1233">移除确认</entry>
+  <entry key="1234">从联系人单中删除联系人</entry>
+  <entry key="1235">用户简介</entry>
+  <entry key="1236">显示用户资料</entry>
+  <entry key="1237">消息</entry>
+  <entry key="1238">查找</entry>
+  <entry key="1239">全部选择</entry>
+  <entry key="1240">全部取消</entry>
+  <entry key="1241">选择未阅读的</entry>
+  <entry key="1242">选择已阅读的</entry>
+  <entry key="1243">移动到文件夹...</entry>
+  <entry key="1244">增加新文件夹...</entry>
+  <entry key="1245">删除</entry>
+  <entry key="1246">删除的邮件仍旧在垃圾箱中!</entry>
+  <entry key="1247">标记未阅读的</entry>
+  <entry key="1248">标记已阅的</entry>
+  <entry key="1249">回复</entry>
+  <entry key="1250">给所有人回复</entry>
+  <entry key="1251">转发</entry>
+  <entry key="1252">动作...</entry>
+  <entry key="1253">发送私人消息</entry>
+  <entry key="1254">没有选择任何消息!</entry>
+  <entry key="1255">移入收件箱</entry>
+  <entry key="1256">彻底删除</entry>
+  <entry key="1257">不可撤销的动作!</entry>
+  <entry key="1258">增加文件夹</entry>
+  <entry key="1259">增加文件夹并整理消息!</entry>
+  <entry key="1260">增加文件夹</entry>
+  <entry key="1261">增加</entry>
+  <entry key="1262">删除文件夹</entry>
+  <entry key="1263">您不能删除该文件夹，文件夹中还有消息，首先删除消息或者移动到其它文件夹中</entry>
+  <entry key="1264">编辑姓名</entry>
+  <entry key="1265">您确信要删除该文件夹吗？删除后不可撤销</entry>
+  <entry key="1266">您的请求已发送到用户，对方会收到一条接受或者拒绝的通知，只有被接受了的用户才会出现在您的联系人中</entry>
+  <entry key="1267">消息</entry>
+  <entry key="1268">用户没有共享个人信息</entry>
+  <entry key="1269">用户只对他的联系人共享信息</entry>
+  <entry key="1270">地址 &amp; 电话</entry>
+  <entry key="1271">邀请编码已经失效，该码只有一段时间的有效期</entry>
+  <entry key="1272">此事件与日历中的几个其他用户相关联，您的更改同时会更新其他用户的日历，您确实需要更新吗？</entry>
+  <entry key="1273">确认更新</entry>
+  <entry key="1274">允许其他用户查看日历</entry>
+  <entry key="1275">不共享日历</entry>
+  <entry key="1276">日历中的联系人</entry>
+  <entry key="1277">您需要得到确认才可以查看其他用户的日历</entry>
+  <entry key="1278">您不能删除他人的日历!</entry>
+  <entry key="1279">只显示自己的日历!</entry>
+  <entry key="1280">此事件与日历中的几个其他用户相关联，您删除同时会删除其他用户的日历，您确实需要删除吗？</entry>
+  <entry key="1281">确认删除</entry>
+  <entry key="1282">进入会议室</entry>
+  <entry key="1283">访问会议室</entry>
+  <entry key="1284">此消息中包含预订会议室的消息</entry>
+  <entry key="1285">您需要首先保存事件!</entry>
+  <entry key="1286">会议室不存在，日历中的事件已经被取消</entry>
+  <entry key="1287">选择您的昵称</entry>
+  <entry key="1288">名</entry>
+  <entry key="1289">姓</entry>
+  <entry key="1290">邮件地址</entry>
+  <entry key="1291">确认</entry>
+  <entry key="1292">最少4个字符，需要姓和名。</entry>
+  <entry key="1293">请输入有效的邮件地址!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">使用Facebook账号登录</entry>
+  <entry key="1296">成为成员的时间</entry>
+  <entry key="1297">您已经使用Facebook账号登录，您需要使用正确的邮箱地址更新您的资料，如果邮箱不正确，您将不能从其他联系人中收到邀请。</entry>
+  <entry key="1298">消息</entry>
+  <entry key="1299">不再显示简介更新的消息</entry>
+  <entry key="1300">更多的显示选项...</entry>
+  <entry key="1301">新的私人消息:</entry>
+  <entry key="1302">点此查看简介以及全部的消息</entry>
+  <entry key="1303">回复</entry>
+  <entry key="1304">会议室及讨论</entry>
+  <entry key="1305">会议室</entry>
+  <entry key="1306">在线会议室(1-16人)</entry>
+  <entry key="1307">在线研讨会(1-120人)</entry>
+  <entry key="1308">成员号</entry>
+  <entry key="1309">请输入密码</entry>
+  <entry key="1310">您需要账号</entry>
+  <entry key="1311">Web-Service (通过SOAP访问)</entry>
+  <entry key="1312">直接载入到白板</entry>
+  <entry key="1313">您是否真的想删除白板？此动作不可逆!</entry>
+  <entry key="1314">载入到白板</entry>
+  <entry key="1315">不用忘记录制，一个用户一个会是室的情况经常需要录制</entry>
+  <entry key="1316">开支录制</entry>
+  <entry key="1317">箭头</entry>
+  <entry key="1318">圆</entry>
+  <entry key="1319">直线</entry>
+  <entry key="1320">矩形</entry>
+  <entry key="1321">三角形</entry>
+  <entry key="1322">文本/便签</entry>
+  <entry key="1323">剪贴画</entry>
+  <entry key="1324">自有绘制</entry>
+  <entry key="1325">选择/移动</entry>
+  <entry key="1326">绘制形状</entry>
+  <entry key="1327">剪切/移动</entry>
+  <entry key="1328">缩小/放大</entry>
+  <entry key="1329">打印</entry>
+  <entry key="1330">撤销</entry>
+  <entry key="1331">回收站</entry>
+  <entry key="1332">增加网格</entry>
+  <entry key="1333">共享文件</entry>
+  <entry key="1334">形状选取</entry>
+  <entry key="1335">点击选取</entry>
+  <entry key="1336">拷贝</entry>
+  <entry key="1337">剪切</entry>
+  <entry key="1338">粘贴</entry>
+  <entry key="1339">删除</entry>
+  <entry key="1340">您是否真的想删除白板中的所有内容?</entry>
+  <entry key="1341">直接载入到白板</entry>
+  <entry key="1342">参与者</entry>
+  <entry key="1343">考勤管理员</entry>
+  <entry key="1344">出席</entry>
+  <entry key="1345">远程控制</entry>
+  <entry key="1346">弹出</entry>
+  <entry key="1347">讨论</entry>
+  <entry key="1348">邀请参与人员</entry>
+  <entry key="1349">通过邮件</entry>
+  <entry key="1350">用户是主持人</entry>
+  <entry key="1351">用户将摄像头打开了</entry>
+  <entry key="1352">关闭以形状方式填充</entry>
+  <entry key="1353">激活以形状方式填充</entry>
+  <entry key="1354">自动按网格排列</entry>
+  <entry key="1355">允许录制</entry>
+  <entry key="1356">等待录制</entry>
+  <entry key="1357">掩藏顶栏</entry>
+  <entry key="1358">播放视频</entry>
+  <entry key="1359">确定删除当前幻灯片的内容?</entry>
+  <entry key="1360">接受并且授予用户权限</entry>
+  <entry key="1361">拒绝</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">活动</entry>
+  <entry key="1364">移除白板</entry>
+  <entry key="1365">您需要主持人权限操作白板</entry>
+  <entry key="1366">不允许</entry>
+  <entry key="1367">离开了会议室.</entry>
+  <entry key="1368">数学符号</entry>
+  <entry key="1369">未分类</entry>
+  <entry key="1370">配色方案</entry>
+  <entry key="1371">质量</entry>
+  <entry key="1372">域</entry>
+  <entry key="1373">访问</entry>
+  <entry key="1374">橙色</entry>
+  <entry key="1375">浅绿色</entry>
+  <entry key="1376">浅蓝色</entry>
+  <entry key="1377">深蓝色</entry>
+  <entry key="1378">金黄色</entry>
+  <entry key="1379">银灰色</entry>
+  <entry key="1380">自定义</entry>
+  <entry key="1381">最佳体验</entry>
+  <entry key="1382">上行</entry>
+  <entry key="1383">适中</entry>
+  <entry key="1384">静音</entry>
+  <entry key="1385">开启麦克风</entry>
+  <entry key="1386">给予独家音频</entry>
+  <entry key="1387">已被主持人设置为全场静音，不可本人解除</entry>
+  <entry key="1388">是否设置本人为全场静音？</entry>
+  <entry key="1389">是否确认设置本人为全场静音？其他用户将无法听到你。</entry>
+  <entry key="1390">是否设置其他用户为静音？</entry>
+  <entry key="1391">是否确认设置此麦克风为静音？仅限于此屏幕设置。其他用户不受影响。仅主持人可设置全场静音</entry>
+  <entry key="1392">设置其他用户为全场静音？</entry>
+  <entry key="1393">是否确认设置此用户为全场静音？其他用户将无法听到他／她</entry>
+  <entry key="1394">声音已打开。单击此处将请求主持人设置本人为全场（本会议室）静音</entry>
+  <entry key="1395">声音已关闭。单击此处将请求主持人解除本人全场（本会议室）静音设置</entry>
+  <entry key="1396">请求主持人设置本人为全场静音</entry>
+  <entry key="1397">请求主持人解除本人全场静音设置</entry>
+  <entry key="1398">请求主持人解除自身静音设置</entry>
+  <entry key="1399">请求主持人设置自身为静音</entry>
+  <entry key="1400">解除静音。单击此处将设置该用户为全场静音</entry>
+  <entry key="1401">设置静音。单击此处将解除该用户全场静音设置</entry>
+  <entry key="1402">该用户已被主持人设置为全场静音。你无法解除静音设置</entry>
+  <entry key="1403">设置本人为全场静音</entry>
+  <entry key="1404">解除本人全场静音设置</entry>
+  <entry key="1405">设置为静音</entry>
+  <entry key="1406">解除静音设置</entry>
+  <entry key="1407">设置为全场设置</entry>
+  <entry key="1408">解除全场静音设置</entry>
+  <entry key="1409">仅限主持人可设置／解除任一用户全场静音设置。设置本人静音：请使用你视频中的麦克风图标。</entry>
+  <entry key="1410">调查名称</entry>
+  <entry key="1411">调查人</entry>
+  <entry key="1412">存档的调查</entry>
+  <entry key="1413">活跃</entry>
+  <entry key="1414">简单图表</entry>
+  <entry key="1415">饼图</entry>
+  <entry key="1416">请输入邮箱</entry>
+  <entry key="1417">新信息</entry>
+  <entry key="1418">关闭调查</entry>
+  <entry key="1419">确定要关闭此调查？其他人将无法投票。</entry>
+  <entry key="1420">删除调查</entry>
+  <entry key="1421">确定要删除此调查？调查结果也将会被删除。</entry>
+  <entry key="1422">语言ISO码</entry>
+  <entry key="1423">允许／拒绝提供独家音频的权利</entry>
+  <entry key="1424">允许用户提供独家音频</entry>
+  <entry key="1425">拒绝用户提供独家音频</entry>
+  <entry key="1426">希望被允许独家音频</entry>
+  <entry key="1427">希望主持人允许本人提供独家音频</entry>
+  <entry key="1428">允许提供独家音频</entry>
+  <entry key="1429">摄像头像素</entry>
+  <entry key="1430">更改像素会影响频宽，较大的图片需要较高频宽</entry>
+  <entry key="1431">你无权给予自己或其他人独家音频。需要向主持人申请该权利或申请得到独家音频。</entry>
+  <entry key="1432">希望得到独家音频的权利</entry>
+  <entry key="1433">赋予我独家音频（或点击你的视频，或点击F12）</entry>
+  <entry key="1434">麦克风已打开</entry>
+  <entry key="1435">麦克风已被静音</entry>
+  <entry key="1436">隐藏对话</entry>
+  <entry key="1437">隐藏活动</entry>
+  <entry key="1438">隐藏档案总管</entry>
+  <entry key="1439">隐藏操作菜单</entry>
+  <entry key="1440">隐藏屏幕共享</entry>
+  <entry key="1441">隐藏白板</entry>
+  <entry key="1442">显示视频中麦克风状态</entry>
+  <entry key="1443">布局选项</entry>
+  <entry key="1444">新事件</entry>
+  <entry key="1445">密码保护是当你保存日历事件时发送给参与者的会议链接，而非会议室。如果多次用不同密码保存事件，每个参与者会收到一个新链接和新密码，但之前发出的链接仍将适用。</entry>
+  <entry key="1446">编辑详情</entry>
+  <entry key="1447">显示sip拨号</entry>
+  <entry key="1448">拨打</entry>
+  <entry key="1449">显示联系人的日历事件</entry>
+  <entry key="1450">你的主页</entry>
+  <entry key="1451">安排你的会议</entry>
+  <entry key="1452">观看录音及访问</entry>
+  <entry key="1453">选择及启动网络会议</entry>
+  <entry key="1454">管理用户及权利</entry>
+  <entry key="1455">管理连接及踢除用户</entry>
+  <entry key="1456">管理用户组</entry>
+  <entry key="1457">管理会议室</entry>
+  <entry key="1458">管理系统设置</entry>
+  <entry key="1459">管理标签及文字</entry>
+  <entry key="1460">管理LDAP及ADS配置</entry>
+  <entry key="1461">输出／输入系统备份</entry>
+  <entry key="1462">需要主持人或被赋予权利以在白板上绘图，上传，添加，删除或加载文件及文件夹。</entry>
+  <entry key="1463">编辑内容</entry>
+  <entry key="1464">教授</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
new file mode 100644
index 0000000..18965ac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">视訊會議</entry>
+  <entry key="2">會議</entry>
+  <entry key="3">會議廳</entry>
+  <entry key="4">設定</entry>
+  <entry key="5">用戶</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">記錄</entry>
+  <entry key="9">沒有資料</entry>
+  <entry key="10">老師記錄</entry>
+  <entry key="11">連接用戶 :</entry>
+  <entry key="12">啟動會議</entry>
+  <entry key="13">我的名字</entry>
+  <entry key="14">视訊會議</entry>
+  <entry key="15">輸入演示</entry>
+  <entry key="16">刷新列表</entry>
+  <entry key="17">回到主要檔案</entry>
+  <entry key="18">新的民意</entry>
+  <entry key="19">一項新的民意測驗給這會議</entry>
+  <entry key="20">問題:</entry>
+  <entry key="21">民調類型 :</entry>
+  <entry key="22">建立</entry>
+  <entry key="23">信息:每個接入用戶收到新的民意信息</entry>
+  <entry key="24">創造一個新的民調</entry>
+  <entry key="25">取诮</entry>
+  <entry key="26">是/否</entry>
+  <entry key="27">數字的 1-10</entry>
+  <entry key="28">民調</entry>
+  <entry key="29">必須是主持人能提出問題</entry>
+  <entry key="30">你的投票己登記</entry>
+  <entry key="31">你已經投票在本次民調中</entry>
+  <entry key="32">投票!</entry>
+  <entry key="33">你的回應 :</entry>
+  <entry key="34">是</entry>
+  <entry key="35">否</entry>
+  <entry key="36">知道事情的立場:</entry>
+  <entry key="37">投票結果</entry>
+  <entry key="38">問題:</entry>
+  <entry key="39">結果:</entry>
+  <entry key="40">答案:</entry>
+  <entry key="41">民調還沒開始</entry>
+  <entry key="42">投票!</entry>
+  <entry key="43">會議 (最多4席)</entry>
+  <entry key="44">會議 (最多50席)</entry>
+  <entry key="45">類型</entry>
+  <entry key="46">其他席位</entry>
+  <entry key="47">已選定</entry>
+  <entry key="48">進入</entry>
+  <entry key="49">主持人已經離開了會議 .</entry>
+  <entry key="50">系統信息</entry>
+  <entry key="51">選擇裝置</entry>
+  <entry key="52">選擇攝像机 :</entry>
+  <entry key="53">選擇麥克風 :</entry>
+  <entry key="54">设定好了</entry>
+  <entry key="55">取消</entry>
+  <entry key="56">你需要重新連接 .</entry>
+  <entry key="57">編輯設定 .</entry>
+  <entry key="58">課程 :</entry>
+  <entry key="59">語言 :</entry>
+  <entry key="60">设定好了</entry>
+  <entry key="61">取消</entry>
+  <entry key="62">清掉電子白板</entry>
+  <entry key="63">你想要在加圖片之前先清掉白板嗎?</entry>
+  <entry key="64">不要再問</entry>
+  <entry key="65">否</entry>
+  <entry key="66">編輯設定</entry>
+  <entry key="67">請求確認清掉白板</entry>
+  <entry key="68">用户資料</entry>
+  <entry key="69">清掉畫圖</entry>
+  <entry key="70">撤消</entry>
+  <entry key="71">重做</entry>
+  <entry key="72">選擇對象</entry>
+  <entry key="73">全文</entry>
+  <entry key="74">繪畫</entry>
+  <entry key="75">畫線</entry>
+  <entry key="76">畫強洞底線</entry>
+  <entry key="77">長方形</entry>
+  <entry key="78">橢圓形</entry>
+  <entry key="79">箭頭</entry>
+  <entry key="80">刪除選定項目</entry>
+  <entry key="81">申請成為主持人</entry>
+  <entry key="82">應用</entry>
+  <entry key="83">取消</entry>
+  <entry key="84">成為主持人</entry>
+  <entry key="85">關閉</entry>
+  <entry key="86">斜體字</entry>
+  <entry key="87">粗體字</entry>
+  <entry key="88">等待</entry>
+  <entry key="89">有用户想申請成為主持人</entry>
+  <entry key="90">接受</entry>
+  <entry key="91">拒绝</entry>
+  <entry key="92">取诮</entry>
+  <entry key="93">送出請求到以下的用戶</entry>
+  <entry key="94">接受</entry>
+  <entry key="95">拒绝</entry>
+  <entry key="96">改變主持人</entry>
+  <entry key="97">你不是這課程的主持人!</entry>
+  <entry key="98">主持人:</entry>
+  <entry key="99">這個房間已滿 . 對不起 ,請捎後再試</entry>
+  <entry key="100">橢圓形</entry>
+  <entry key="101">關閉</entry>
+  <entry key="102">輸入資料有誤</entry>
+  <entry key="103">用戶名必須至少4個字符</entry>
+  <entry key="104">用戶密碼必須至少4個字符</entry>
+  <entry key="105">用戶台已被姶用</entry>
+  <entry key="106">這電子郵件已註冊过了</entry>
+  <entry key="107">系統錯誤 ,請聯繫系統管理員</entry>
+  <entry key="108">登錄</entry>
+  <entry key="109">用戶 :</entry>
+  <entry key="110">密碼 :</entry>
+  <entry key="111">語言</entry>
+  <entry key="112">註冊登錄</entry>
+  <entry key="113">報名</entry>
+  <entry key="114">用戶 :</entry>
+  <entry key="115">密碼 :</entry>
+  <entry key="116">重打:</entry>
+  <entry key="117">名稱:</entry>
+  <entry key="118">姓氏:</entry>
+  <entry key="119">郵件 :</entry>
+  <entry key="120">國家 :</entry>
+  <entry key="121">登記</entry>
+  <entry key="122">取消</entry>
+  <entry key="123">登記</entry>
+  <entry key="124">首頁</entry>
+  <entry key="125">用戶管理</entry>
+  <entry key="126">團體管理</entry>
+  <entry key="127">組織管理</entry>
+  <entry key="128">會議室</entry>
+  <entry key="129">公開會議</entry>
+  <entry key="130">組織</entry>
+  <entry key="131">進入</entry>
+  <entry key="132">登錄</entry>
+  <entry key="133">密碼</entry>
+  <entry key="134">重打</entry>
+  <entry key="135">名稱</entry>
+  <entry key="136">姓氏</entry>
+  <entry key="137">郵件</entry>
+  <entry key="138">生日</entry>
+  <entry key="139">街名/號碼</entry>
+  <entry key="140">郵編 /城市</entry>
+  <entry key="141">國家</entry>
+  <entry key="142">地址-信息</entry>
+  <entry key="143">用户资料</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">用户-ID</entry>
+  <entry key="147">登錄</entry>
+  <entry key="148">名稱</entry>
+  <entry key="149">姓氏</entry>
+  <entry key="150">顯示下一個</entry>
+  <entry key="151">顯示前一個</entry>
+  <entry key="152">刪除紀錄</entry>
+  <entry key="153">取消</entry>
+  <entry key="154">刪除</entry>
+  <entry key="155">新紀錄</entry>
+  <entry key="156">刷新紀錄</entry>
+  <entry key="157">刪除紀錄</entry>
+  <entry key="158">狀態</entry>
+  <entry key="159">關閉</entry>
+  <entry key="160">啟動</entry>
+  <entry key="161">組織</entry>
+  <entry key="162">日曆</entry>
+  <entry key="163">關閉</entry>
+  <entry key="164">組織 -ID</entry>
+  <entry key="165">名稱</entry>
+  <entry key="166">用戶</entry>
+  <entry key="167">主持</entry>
+  <entry key="168">管理</entry>
+  <entry key="169">用戶級別</entry>
+  <entry key="170">組織</entry>
+  <entry key="171">名稱</entry>
+  <entry key="172">增加組織</entry>
+  <entry key="173">增加組織</entry>
+  <entry key="174">取消</entry>
+  <entry key="175">增加</entry>
+  <entry key="176">移除組織</entry>
+  <entry key="177">用戶</entry>
+  <entry key="178">增加用戶</entry>
+  <entry key="179">移除用戶</entry>
+  <entry key="180">增加用戶</entry>
+  <entry key="181">尋找用戶</entry>
+  <entry key="182">尋找</entry>
+  <entry key="183">用戶</entry>
+  <entry key="184">組織</entry>
+  <entry key="185">進入</entry>
+  <entry key="186">會議室</entry>
+  <entry key="187">會議室</entry>
+  <entry key="188">身份證</entry>
+  <entry key="189">名字</entry>
+  <entry key="190">公開</entry>
+  <entry key="191">組織</entry>
+  <entry key="192">會議室</entry>
+  <entry key="193">名字</entry>
+  <entry key="194">類型</entry>
+  <entry key="195">公開</entry>
+  <entry key="196">評論</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">輸入</entry>
+  <entry key="199">另存為</entry>
+  <entry key="200">文件名稱</entry>
+  <entry key="201">文件名稱</entry>
+  <entry key="202">取消</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">錯誤</entry>
+  <entry key="205">輸入中</entry>
+  <entry key="206">主題輸入</entry>
+  <entry key="207">正在同步客戶 ,客戶請诮等</entry>
+  <entry key="208">載入圖檔</entry>
+  <entry key="209">正在同步客戶 ,客戶請诮等</entry>
+  <entry key="210">清除畫圖區</entry>
+  <entry key="211">清除畫圖區，所有资料會不見！</entry>
+  <entry key="212">確認後再載入檔案</entry>
+  <entry key="213">發送邀請</entry>
+  <entry key="214">發送邀請</entry>
+  <entry key="215">主題</entry>
+  <entry key="216">受邀者</entry>
+  <entry key="217">信息</entry>
+  <entry key="218">送出</entry>
+  <entry key="219">取消</entry>
+  <entry key="220">送出</entry>
+  <entry key="221">用戶資料</entry>
+  <entry key="222">你這次會議的別名</entry>
+  <entry key="223">別名</entry>
+  <entry key="224">名稱</entry>
+  <entry key="225">姓名</entry>
+  <entry key="226">電子郵件</entry>
+  <entry key="227">語言</entry>
+  <entry key="228">進入</entry>
+  <entry key="229">載入</entry>
+  <entry key="230">资料正在載入, 請诮等!</entry>
+  <entry key="231">密碼錯誤</entry>
+  <entry key="232">請輸入兩個相同的密碼最少6個字符</entry>
+  <entry key="233">錯的郵件</entry>
+  <entry key="234">你輸入了一個無效的郵件地址</entry>
+  <entry key="235">註冊完成</entry>
+  <entry key="236">你的賬戶已經建立. 你現在以可登錄</entry>
+  <entry key="237">己有別人在共用這电子白板, 你现在暫時無法再分享。</entry>
+  <entry key="238">嚴禁共享</entry>
+  <entry key="239">分享你的屏幕</entry>
+  <entry key="240">如果看到這項警告，顯示你的频寬不夠造成無法同步屏幕. 您可以問主持人降低寬頻標準 .</entry>
+  <entry key="241">畫面用户:</entry>
+  <entry key="242">畫圖</entry>
+  <entry key="243">文件</entry>
+  <entry key="244">聊天</entry>
+  <entry key="245">檔案</entry>
+  <entry key="246">會員</entry>
+  <entry key="247">下載原始文件</entry>
+  <entry key="248">下載 pdf 文件</entry>
+  <entry key="249">把演示放到白板</entry>
+  <entry key="250">设定</entry>
+  <entry key="251">拖這影象</entry>
+  <entry key="252">調整大小</entry>
+  <entry key="253">%</entry>
+  <entry key="254">的</entry>
+  <entry key="255">到第–頁</entry>
+  <entry key="256">到前一頁</entry>
+  <entry key="257">到下一頁</entry>
+  <entry key="258">到最後一頁</entry>
+  <entry key="259">縮小 --</entry>
+  <entry key="260">放大 ++</entry>
+  <entry key="261">先生</entry>
+  <entry key="262">女士</entry>
+  <entry key="263">配置</entry>
+  <entry key="264">编号</entry>
+  <entry key="265">關鍵</entry>
+  <entry key="266">配置</entry>
+  <entry key="267">關鍵</entry>
+  <entry key="268">最後更新</entry>
+  <entry key="269">更新</entry>
+  <entry key="270">評論t</entry>
+  <entry key="271">關鍵</entry>
+  <entry key="272">的</entry>
+  <entry key="273">用戶</entry>
+  <entry key="274">刪除用戶，從組織</entry>
+  <entry key="275">刪除</entry>
+  <entry key="276">此用戶已經是這個組織的會員</entry>
+  <entry key="277">新聞</entry>
+  <entry key="278">連結</entry>
+  <entry key="279">進入會議</entry>
+  <entry key="280">進入課堂</entry>
+  <entry key="281">幫助和支持</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">告訴我們問題!</entry>
+  <entry key="285">更多</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">記住登錄</entry>
+  <entry key="289">內容</entry>
+  <entry key="290">我的首頁</entry>
+  <entry key="291">我安排的會議</entry>
+  <entry key="292">我的預定活動</entry>
+  <entry key="293">公開會議</entry>
+  <entry key="294">私人會議</entry>
+  <entry key="295">公開活動</entry>
+  <entry key="296">私人活動</entry>
+  <entry key="297">公開內容</entry>
+  <entry key="298">私人內容</entry>
+  <entry key="299">各人內容</entry>
+  <entry key="300"></entry>
+  <entry key="301">主持</entry>
+  <entry key="302">申請成為主持</entry>
+  <entry key="303">民調</entry>
+  <entry key="304">選擇一個文件</entry>
+  <entry key="305">設定</entry>
+  <entry key="306">攝像机和麥克風设定</entry>
+  <entry key="307">白板設定</entry>
+  <entry key="308">退出</entry>
+  <entry key="309">回到房間</entry>
+  <entry key="310">登出</entry>
+  <entry key="311">桌面瀏覽</entry>
+  <entry key="312">啟動桌面瀏覽</entry>
+  <entry key="313">視頻和音頻</entry>
+  <entry key="314">聊天</entry>
+  <entry key="315">白板</entry>
+  <entry key="316">主持</entry>
+  <entry key="317">文件</entry>
+  <entry key="318">用戶</entry>
+  <entry key="319">民調</entry>
+  <entry key="320">有沒有用戶連接到該用戶名</entry>
+  <entry key="321">該電郵載有一個特殊的聯繫已被發送到您的電子郵件地址，請檢查您的信箱。如果您還沒有收到郵件，請調整你的垃圾郵件設置，並重新發送確認郵件</entry>
+  <entry key="322">錯误</entry>
+  <entry key="323">訊息</entry>
+  <entry key="324">無效散列。找不到用戶.</entry>
+  <entry key="325">重置密碼</entry>
+  <entry key="326">登錄</entry>
+  <entry key="327">修改密碼</entry>
+  <entry key="328">新密碼</entry>
+  <entry key="329">重新輸入密碼</entry>
+  <entry key="330">你所輸入的密碼並不相同</entry>
+  <entry key="331">4或更多個字符;大寫有分!</entry>
+  <entry key="332">密碼設定。您可以立即登錄。</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">未知錯誤。請告知您的服務團隊</entry>
+  <entry key="335">用戶名找不到</entry>
+  <entry key="336">密碼無效</entry>
+  <entry key="337">成功登出</entry>
+  <entry key="338">前端登記禁用</entry>
+  <entry key="339">無效電子郵件</entry>
+  <entry key="340">重複的文件名，請選擇另一個文件名</entry>
+  <entry key="341">文件名太短</entry>
+  <entry key="342">不能儲存地址</entry>
+  <entry key="343">用戶添加，但你需要设定此用戶屬於一個組織，否則他將無法登錄。</entry>
+  <entry key="344">新紀錄</entry>
+  <entry key="345">沒有發現這一個ID.</entry>
+  <entry key="346">內容的標籤無法出现.</entry>
+  <entry key="347">管理者 授權要求</entry>
+  <entry key="348">語言-編者</entry>
+  <entry key="349">語言</entry>
+  <entry key="350">標籤-ID</entry>
+  <entry key="351">標籤-名稱</entry>
+  <entry key="352">價值</entry>
+  <entry key="353">內容價值</entry>
+  <entry key="354">標籤-名稱</entry>
+  <entry key="355">標籤價值</entry>
+  <entry key="356">標籤-ID</entry>
+  <entry key="357">你只刪除標籤，而不是領域！您不能刪除領域，它可能已在標籤上的其他語言。</entry>
+  <entry key="358">無效標籤id 。該fieldlanguagesvalues_id不能找到在數據庫</entry>
+  <entry key="359">您不能刪除這一領域。你只能刪除標籤並非領域。有無標籤裝在此時或者它是沒有選中的任何領域，或者有沒有商標，這門語言會成為這一領域的設定。</entry>
+  <entry key="360">出口</entry>
+  <entry key="361">你需要登出看到有任何變化.</entry>
+  <entry key="362">添加新的語言</entry>
+  <entry key="363">刪除語言</entry>
+  <entry key="364">添加新的語言</entry>
+  <entry key="365">姓名</entry>
+  <entry key="366">添加新的語言</entry>
+  <entry key="367">備份</entry>
+  <entry key="368">到第–頁</entry>
+  <entry key="369">到前一頁</entry>
+  <entry key="370">到下一頁</entry>
+  <entry key="371">最後一頁</entry>
+  <entry key="372">用戶说话 (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">把聲音開/關</entry>
+  <entry key="374">系統</entry>
+  <entry key="375">您的設置</entry>
+  <entry key="376">hi,</entry>
+  <entry key="377">編輯您的檔案</entry>
+  <entry key="378">新訊息:</entry>
+  <entry key="379">上傳新形象</entry>
+  <entry key="380">用戶數據 - 出口</entry>
+  <entry key="381">所有組織都必須已存在的</entry>
+  <entry key="382">開始出口</entry>
+  <entry key="383">由組織</entry>
+  <entry key="384">開始 出口</entry>
+  <entry key="385">用戶數據 - 進口</entry>
+  <entry key="386">選擇用戶.xml</entry>
+  <entry key="387">進口</entry>
+  <entry key="388">出口到XML -這些檔案可用於： -為該項目做貢獻 -導入到另一個系統 -備份 -個性化 -把它納入語文目錄，為你的下一次安裝</entry>
+  <entry key="389">選擇一種語言的文件輸入。選擇正確的語言從組合框中！ 無論是什麼名稱的文件，它都將匯入這語言!</entry>
+  <entry key="390">進口-選擇文件</entry>
+  <entry key="391">另存為</entry>
+  <entry key="392">姓名:</entry>
+  <entry key="393">評論:</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">錄影</entry>
+  <entry key="396">錄影觀眾</entry>
+  <entry key="397">公共和私人會議室的錄影</entry>
+  <entry key="398">用戶 :</entry>
+  <entry key="399">加入:</entry>
+  <entry key="400"></entry>
+  <entry key="401">用戶在這個房間:</entry>
+  <entry key="402">刷新</entry>
+  <entry key="403">這個房間己滿,在數分鐘再試一次.</entry>
+  <entry key="404">點擊一個房間獲得細節</entry>
+  <entry key="405">和這個會議室的用户聊天:</entry>
+  <entry key="406">房間:</entry>
+  <entry key="407">用戶在這個房間:</entry>
+  <entry key="408">從何時:</entry>
+  <entry key="409">播放錄影</entry>
+  <entry key="410">總計時間:</entry>
+  <entry key="411">日期:</entry>
+  <entry key="412">錄影儀模式！你不能改變，這是一個錄影文件！</entry>
+  <entry key="413">播放這個錄影</entry>
+  <entry key="414">播放/暫停</entry>
+  <entry key="415">開始錄影</entry>
+  <entry key="416">停止錄影</entry>
+  <entry key="417">錄影:</entry>
+  <entry key="418">現在已經有人在錄影:</entry>
+  <entry key="419">錄影！按用戶:</entry>
+  <entry key="420">取消</entry>
+  <entry key="421">錄影將被取消，並不會被保存</entry>
+  <entry key="422">恢復</entry>
+  <entry key="423">關閉此窗口，並恢復錄影</entry>
+  <entry key="424">改變線的顏色</entry>
+  <entry key="425">選擇顏色</entry>
+  <entry key="426">禁用/使用 線顏色</entry>
+  <entry key="427">改變補色</entry>
+  <entry key="428">禁止/使用補色</entry>
+  <entry key="429">改變線寬</entry>
+  <entry key="430">關閉</entry>
+  <entry key="431">改變文字大小</entry>
+  <entry key="432">刪除記錄</entry>
+  <entry key="433">客戶</entry>
+  <entry key="434">由:</entry>
+  <entry key="435">姓名</entry>
+  <entry key="436">房間</entry>
+  <entry key="437">日期</entry>
+  <entry key="438">取消</entry>
+  <entry key="439">開始</entry>
+  <entry key="440">姓名</entry>
+  <entry key="441">日期</entry>
+  <entry key="442">刪除服務器 聊天記錄</entry>
+  <entry key="443">聊天</entry>
+  <entry key="444">發送消息</entry>
+  <entry key="445">表情符號</entry>
+  <entry key="446">表情符號</entry>
+  <entry key="447">選擇播放裝置</entry>
+  <entry key="448">音頻和視頻</entry>
+  <entry key="449">僅音頻</entry>
+  <entry key="450">僅視頻</entry>
+  <entry key="451">沒有音頻/視頻（靜態影像）</entry>
+  <entry key="452">沒有音頻/視頻從你的個人電腦將會公佈，而不是一個圖片從你的檔案就會顯示。選擇這些設置，如果您有問題，與你的帶寬還是一個非常緩慢的互聯網連接。</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">週一</entry>
+  <entry key="461">週二</entry>
+  <entry key="462">週三</entry>
+  <entry key="463">週四</entry>
+  <entry key="464">週五</entry>
+  <entry key="465">週六</entry>
+  <entry key="466">週日</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">日曆週</entry>
+  <entry key="469">1月</entry>
+  <entry key="470">2月</entry>
+  <entry key="471">3月</entry>
+  <entry key="472">4月</entry>
+  <entry key="473">5月</entry>
+  <entry key="474">6月</entry>
+  <entry key="475">7月</entry>
+  <entry key="476">8月</entry>
+  <entry key="477">9月</entry>
+  <entry key="478">10月</entry>
+  <entry key="479">11月</entry>
+  <entry key="480">12月</entry>
+  <entry key="481">日曆</entry>
+  <entry key="482">參加者</entry>
+  <entry key="483">顯示佈局設置</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | Height</entry>
+  <entry key="486">視頻-集裝箱</entry>
+  <entry key="487">主持-集裝箱</entry>
+  <entry key="488">X</entry>
+  <entry key="489">白板-集裝箱</entry>
+  <entry key="490">啟用</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">寬度|高度</entry>
+  <entry key="493">檔案，聊天，參加者-集裝箱</entry>
+  <entry key="494">啟用</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">寬度|高度</entry>
+  <entry key="497">主持人離開了房間。在時刻沒有人介紹,你可以申請成為主持或等待</entry>
+  <entry key="498">在這個房間裡是沒有主持人,有一些人參加。你要申請成主持或等待</entry>
+  <entry key="499">反饋 {0}</entry>
+  <entry key="500">{0} - 邀請</entry>
+  <entry key="501">用戶訊息:</entry>
+  <entry key="502">訊息:</entry>
+  <entry key="503">點擊此鏈接，參加會議:</entry>
+  <entry key="504">點擊這裡進入房間</entry>
+  <entry key="505">如果您有問題連接，請複製並貼到你的瀏覽器上:</entry>
+  <entry key="506">{0} - 註冊</entry>
+  <entry key="507">你的用戶數據:</entry>
+  <entry key="508">登錄:</entry>
+  <entry key="509">密碼:</entry>
+  <entry key="510">郵箱:</entry>
+  <entry key="511">{0}-團隊</entry>
+  <entry key="512">{0} - 註冊</entry>
+  <entry key="513">{0} - 重設密碼</entry>
+  <entry key="514">點擊這個鏈接進入設定新的密碼:</entry>
+  <entry key="515">點擊這裡設定新的密碼</entry>
+  <entry key="516">如果您有問題連接，請複製並貼到你的瀏覽器上:</entry>
+  <entry key="517">{0} 密碼重設</entry>
+  <entry key="518">請輸入有效日期，例如 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">請輸入一個有效的電子郵件, 例如 name@mail.com</entry>
+  <entry key="520">請輸入一個浮點數號碼, 例如 1.00</entry>
+  <entry key="521">請輸入一個號碼 (Integer), 例如 100</entry>
+  <entry key="522">請輸入有效的電話號碼, 例如++49 0123 123123</entry>
+  <entry key="523">請輸入有效的時候，例如 12:23 (hh:mm)</entry>
+  <entry key="524">密碼保護</entry>
+  <entry key="525">密碼</entry>
+  <entry key="526">有效期</entry>
+  <entry key="527">無限期</entry>
+  <entry key="528">期限</entry>
+  <entry key="529">一次性</entry>
+  <entry key="530">有效期從:</entry>
+  <entry key="531">有效期至:</entry>
+  <entry key="532">I邀請到 {0}</entry>
+  <entry key="533">沒有這一邀請碼</entry>
+  <entry key="534">該邀請已經使用。這種類型的邀請，不能再使用。</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">密碼:</entry>
+  <entry key="537">核對密碼</entry>
+  <entry key="538">密碼無效！</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java b/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
new file mode 100644
index 0000000..22093fd
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.resource.loader.IStringResourceLoader;
+
+/**
+ * Map property values to OpenMeetings labelid's and get the string
+ * 
+ * @author swagner
+ *
+ */
+public class LabelResourceLoader implements IStringResourceLoader {
+	
+	private static Map<String,Long> STRING_LABEL_MAPPING = new HashMap<String,Long>();
+	
+	static {
+		STRING_LABEL_MAPPING.put("PagingNavigator.first", 368L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.previous", 369L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.next", 370L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.last", 371L);
+	}
+
+	public String loadStringResource(Class<?> clazz, String key, Locale locale,
+			String style, String variation) {
+		return getStringByPropertyKey(key);
+	}
+
+	public String loadStringResource(Component component, String key,
+			Locale locale, String style, String variation) {
+		return getStringByPropertyKey(key);
+	}
+	
+	private String getStringByPropertyKey(String key) {
+		Long labelId = STRING_LABEL_MAPPING.get(key);
+		if (labelId == null) 
+			return null;
+		return Application.getString(labelId);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java b/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java
new file mode 100644
index 0000000..5ea4905
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class OmAuthenticationStrategy extends DefaultAuthenticationStrategy {
+	/** The separator used to concatenate the username and password */
+	private static final String VALUE_SEPARATOR = "-sep-";
+	private static final String COOKIE_KEY = "LoggedIn";
+	private static final Logger log = Red5LoggerFactory.getLogger(OmAuthenticationStrategy.class, webAppRootKey);
+	/** The cookie name to store the username/password/type/domain */
+	private final String cookieKey;
+
+	public OmAuthenticationStrategy() {
+		super(COOKIE_KEY);
+		cookieKey = COOKIE_KEY;
+	}
+
+	/**
+	 * @see org.apache.wicket.authentication.IAuthenticationStrategy#load()
+	 */
+	@Override
+	public String[] load() {
+		String value = getCookieUtils().load(cookieKey);
+		if (Strings.isEmpty(value) == false) {
+			try {
+				value = getCrypt().decryptUrlSafe(value);
+			} catch (RuntimeException e) {
+				log.info("Error decrypting login cookie: {}. The cookie will be deleted. Possible cause is that a "
+						+ "session-relative encryption key was used to encrypt this cookie while this decryption attempt "
+						+ "is happening in a different session, eg user coming back to the application after session expiration",
+						cookieKey);
+				getCookieUtils().remove(cookieKey);
+				value = null;
+			}
+			if (!Strings.isEmpty(value)) {
+				String username = null;
+				String password = null;
+				String type = null;
+				String domainId = null;
+
+				String[] values = value.split(VALUE_SEPARATOR);
+				if (values.length > 0 && !Strings.isEmpty(values[0])) {
+					username = values[0];
+				}
+				if (values.length > 1 && !Strings.isEmpty(values[1])) {
+					password = values[1];
+				}
+				if (values.length > 2 && !Strings.isEmpty(values[2])) {
+					type = values[2];
+				}
+				if (values.length > 3 && !Strings.isEmpty(values[3])) {
+					domainId = values[3];
+				}
+
+				return new String[] { username, password, type, domainId };
+			}
+		}
+
+		return null;
+	}
+
+	public void save(final String username, final String password, final Type type, final Long domainId) {
+		if (type != Type.oauth) {
+			String value = username + VALUE_SEPARATOR + password + VALUE_SEPARATOR + type.name() + VALUE_SEPARATOR + domainId;
+			String encryptedValue = getCrypt().encryptUrlSafe(value);
+			getCookieUtils().save(cookieKey, encryptedValue);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/WebClient.java b/src/web/java/org/apache/openmeetings/web/app/WebClient.java
new file mode 100644
index 0000000..dcb351b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/WebClient.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+
+/**
+ * Temporary class, later will be merged with {@link org.apache.openmeetings.db.entity.room.Client}
+ * @author solomax
+ *
+ */
+public class WebClient  implements IDataProviderEntity, Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public enum Right {
+		moderator
+	}
+	private String sessionId;
+	private int pageId;
+	private long userId;
+	private String uid;
+	private Set<Right> rights = new HashSet<Right>();
+	private Date connectedSince;
+	private int serverId = 0;
+
+	public WebClient() {
+	}
+	
+	public WebClient(String sessionId, IKey key, long userId) {
+		this(sessionId, key.hashCode(), userId);
+	}
+	
+	public WebClient(String sessionId, int pageId, long userId) {
+		this.sessionId = sessionId;
+		this.pageId = pageId;
+		this.userId = userId;
+		this.connectedSince = new Date();
+	}
+
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
+	public int getPageId() {
+		return pageId;
+	}
+
+	public void setPageId(int pageId) {
+		this.pageId = pageId;
+	}
+
+	public long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(long userId) {
+		this.userId = userId;
+	}
+
+	public String getUid() {
+		return uid;
+	}
+
+	public void setUid(String uid) {
+		this.uid = uid;
+	}
+	public Date getConnectedSince() {
+		return connectedSince;
+	}
+
+	public void setConnectedSince(Date connectedSince) {
+		this.connectedSince = connectedSince;
+	}
+	
+	public int getServerId() {
+		return this.serverId;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + pageId;
+		result = prime * result + ((sessionId == null) ? 0 : sessionId.hashCode());
+		result = prime * result + (int) (userId ^ (userId >>> 32));
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		WebClient other = (WebClient) obj;
+		if (pageId != other.pageId)
+			return false;
+		if (sessionId == null) {
+			if (other.sessionId != null)
+				return false;
+		} else if (!sessionId.equals(other.sessionId))
+			return false;
+		if (userId != other.userId)
+			return false;
+		return true;
+	}
+
+	public Set<Right> getRights() {
+		return rights;
+	}
+
+	public boolean hasRight(Right right) {
+		return rights.contains(Right.moderator) ? true : rights.contains(right);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/WebSession.java b/src/web/java/org/apache/openmeetings/web/app/WebSession.java
new file mode 100644
index 0000000..edbaf6d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/WebSession.java
@@ -0,0 +1,509 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static java.text.DateFormat.SHORT;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.getClientByKeys;
+import static org.apache.openmeetings.web.app.Application.getDashboardContext;
+import static org.apache.openmeetings.web.app.Application.isInvaldSession;
+import static org.apache.openmeetings.web.app.Application.removeInvalidSession;
+import static org.apache.openmeetings.web.app.Application.removeOnlineUser;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.ldap.LdapLoginManagement;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
+import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.UserDashboard;
+import org.apache.wicket.RestartResponseAtInterceptPageException;
+import org.apache.wicket.authentication.IAuthenticationStrategy;
+import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
+import org.apache.wicket.authroles.authorization.strategies.role.Roles;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.string.Strings;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetFactory;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+
+public class WebSession extends AbstractAuthenticatedWebSession {
+	private static final long serialVersionUID = 1L;
+	public static int MILLIS_IN_MINUTE = 60000;
+	public static final String SECURE_HASH = "secureHash";
+	private long userId = -1;
+	private Set<Right> rights = new HashSet<User.Right>(); //TODO renew somehow on user edit !!!!
+	private long languageId = -1; //TODO renew somehow on user edit !!!!
+	private String SID = null;
+	private OmUrlFragment area = null;
+	private TimeZone tz;
+	private TimeZone browserTz;
+	public final static String ISO8601_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ssZ";
+	private DateFormat ISO8601FORMAT = new SimpleDateFormat(ISO8601_FORMAT_STRING); //FIXME not thread safe
+	private DateFormat sdf;
+	private UserDashboard dashboard;
+	private Locale browserLocale = null;
+	private Long recordingId;
+	private Long loginError = null;
+	private String externalType;
+	public static boolean kickedByAdmin = false;
+	public final static List<String> AVAILABLE_TIMEZONES = Arrays.asList(TimeZone.getAvailableIDs());
+	public final static Set<String> AVAILABLE_TIMEZONE_SET = new LinkedHashSet<String>(AVAILABLE_TIMEZONES);
+	
+	public WebSession(Request request) {
+		super(request);
+		browserLocale = getLocale();
+	}
+
+	@Override
+	public void invalidate() {
+		removeOnlineUser(getClientByKeys(getUserId(), get().getId()));
+		super.invalidate();
+		userId = -1;
+		rights = new HashSet<User.Right>();
+		SID = null;
+		sdf = null;
+		recordingId = null;
+		externalType = null;
+		tz = null;
+		browserTz = null;
+		loginError = null;
+		browserLocale = null;
+	}
+	
+	@Override
+	public Roles getRoles() {
+		//first of all will check hashes
+		try {
+			IRequestParameters params = RequestCycle.get().getRequest().getRequestParameters();
+			StringValue secureHash = params.getParameterValue(SECURE_HASH);
+			StringValue invitationHash = params.getParameterValue("invitationHash");
+			if (!secureHash.isEmpty() || !invitationHash.isEmpty()) {
+				PageParameters pp = new PageParameters();
+				for (String p : params.getParameterNames()) {
+					List<StringValue> vals = params.getParameterValues(p);
+					if (vals != null) {
+						for (StringValue sv : vals) {
+							if (!sv.isEmpty()) {
+								pp.add(p, sv.toString());
+							}
+						}
+					}
+				}
+				if (isSignedIn()) {
+					invalidate();
+				}
+				throw new RestartResponseAtInterceptPageException(SwfPage.class, pp);
+			}
+		} catch (RestartResponseAtInterceptPageException e) {
+			throw e;
+		} catch (Exception e) {
+			//no-op, will continue to sign-in page
+		}
+		if (rights.isEmpty()) {
+			isSignedIn();
+		}
+		Roles r = new Roles();
+		for (Right right : rights) {
+			r.add(right.name());
+		}
+		return r;
+	}
+
+	@Override
+	public boolean isSignedIn() {
+		if (userId < 1) {
+			IAuthenticationStrategy strategy = getAuthenticationStrategy();
+			// get username and password from persistence store
+			String[] data = strategy.load();
+			if (data != null && data.length > 3 && data[2] != null) {
+				Long domainId = null;
+				try {
+					domainId = Long.parseLong(data[3]);
+				} catch (Exception e) {
+					//no-op
+				}
+				// try to sign in the user
+				if (!signIn(data[0], data[1], Type.valueOf(data[2]), domainId)) {
+					// the loaded credentials are wrong. erase them.
+					strategy.remove();
+				}
+			}
+		}
+		return userId > -1;
+	}
+
+	public boolean signIn(String secureHash) {
+		//FIXME code is duplicated from MainService, need to be unified
+		SOAPLoginDao soapDao = getBean(SOAPLoginDao.class);
+		SOAPLogin soapLogin = soapDao.get(secureHash);
+		if (soapLogin != null && !soapLogin.getUsed()) { //add code for  || (soapLogin.getAllowSameURLMultipleTimes())
+			SessiondataDao sessionDao = getBean(SessiondataDao.class);
+			Sessiondata sd = sessionDao.getSessionByHash(soapLogin.getSessionHash());
+			if (sd != null && sd.getSessionXml() != null) {
+				RemoteSessionObject remoteUser = RemoteSessionObject.fromXml(sd.getSessionXml());
+				if (remoteUser != null && !Strings.isEmpty(remoteUser.getExternalUserId())) {
+					UserDao userDao = getBean(UserDao.class);
+					User user = userDao.getExternalUser(remoteUser.getExternalUserId(), remoteUser.getExternalUserType());
+					if (user == null) {
+						user = userDao.getNewUserInstance(null);
+						user.setFirstname(remoteUser.getFirstname());
+						user.setLastname(remoteUser.getLastname());
+						user.setLogin(remoteUser.getUsername()); //FIXME check if login UNIQUE
+						user.setExternalUserId(remoteUser.getExternalUserId());
+						user.setExternalUserType(remoteUser.getExternalUserType());
+						user.getRights().add(Right.Room);
+						user.getAdresses().setEmail(remoteUser.getEmail());
+						user.setPictureuri(remoteUser.getPictureUrl());
+					} else {
+						user.setFirstname(remoteUser.getFirstname());
+						user.setLastname(remoteUser.getLastname());
+						user.setPictureuri(remoteUser.getPictureUrl());
+					}
+					user = userDao.update(user, null);
+
+					soapLogin.setUsed(true);
+					soapLogin.setUseDate(new Date());
+					//soapLogin.setClientURL(clientURL); //FIXME
+					soapDao.update(soapLogin);
+
+					sessionDao.updateUser(SID, user.getUser_id());
+					setUser(user);
+					recordingId = soapLogin.getRoomRecordingId();
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	private void setUser(User u) {
+		userId = u.getUser_id();
+		rights = Collections.unmodifiableSet(u.getRights());
+		languageId = u.getLanguage_id();
+		externalType = u.getExternalUserType();
+		tz = getBean(TimezoneUtil.class).getTimeZone(u);
+		ISO8601FORMAT.setTimeZone(tz);
+		setLocale(languageId == 3 ? Locale.GERMANY : LabelDao.languages.get(languageId)); //FIXME hack
+		//FIXMW locale need to be set by User language first
+		sdf = DateFormat.getDateTimeInstance(SHORT, SHORT, getLocale());
+		if (null == getId()) {
+			bind();
+		}
+	}
+	
+	public boolean signIn(String login, String password, Type type, Long domainId) {
+		try {
+			User u = null;
+			switch (type) {
+				case ldap:
+					u = getBean(LdapLoginManagement.class).login(login, password, domainId);
+					break;
+				case user:
+					/* we will allow login against internal DB in case user 'guess' LDAP password */
+					u = getBean(UserDao.class).login(login, password);
+					break;
+				case oauth:
+					// we did all the checks at this stage, just set the user
+					u = getBean(UserDao.class).getByLogin(login, Type.oauth, domainId);
+					break;
+				default:
+					throw new OmException(-1L);
+			}
+			if (u == null) {
+				return false;
+			}
+			signIn(u);
+			return true;
+		} catch (OmException oe) {
+			loginError = oe.getCode() == null ? -1L : oe.getCode();
+		}
+		return false;
+	}
+	
+	public boolean signIn(User u) {
+		Sessiondata sessData = getBean(SessiondataDao.class).startsession();
+		SID = sessData.getSession_id();
+		if (u == null) {
+			return false;
+		}
+		setUser(u);
+		return true;
+	}
+	
+	public Long getLoginError() {
+		return loginError;
+	}
+	
+	public static WebSession get() {
+		return (WebSession)AbstractAuthenticatedWebSession.get();
+	}
+	
+	public void setLanguage(long languageId) {
+		this.languageId = languageId;
+	}
+	
+	public static long getLanguage() {
+		checkIsInvalid();
+		WebSession session = get();
+		if (session.languageId < 0) {
+			if (session.isSignedIn()) {
+				session.languageId = getBean(UserDao.class).get(session.userId).getLanguage_id();
+			} else {
+				session.languageId = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+			}
+		}
+		return session.languageId;
+	}
+	
+	public String getValidatedSid() {
+		SessiondataDao sessionDao = getBean(SessiondataDao.class);
+		Long _userId = sessionDao.checkSession(SID);
+		if (_userId == null || userId != _userId) {
+			Sessiondata sessionData = sessionDao.getSessionByHash(SID);
+			if (sessionData == null) {
+				sessionData = sessionDao.startsession();
+			}
+			if (!sessionDao.updateUser(sessionData.getSession_id(), userId, false, languageId)) {
+				//something bad, force user to re-login
+				invalidate();
+			} else {
+				SID = sessionData.getSession_id();
+			}
+		}
+		return SID;
+	}
+	
+	public static String getSid() {
+		return get().getValidatedSid();
+	}
+
+	public static long getUserId() {
+		checkIsInvalid();
+		return get().userId;
+	}
+	
+	public static Long getRecordingId() {
+		return get().recordingId;
+	}
+	
+	public static String getExternalType() {
+		return get().externalType;
+	}
+	
+	public static TimeZone getUserTimeZone() {
+		return get().tz;
+	}
+
+	public static Calendar getCalendar() {
+		return Calendar.getInstance(get().tz);
+	}
+
+	public static Calendar getClientCalendar() {
+		return Calendar.getInstance(getClientTimeZone());
+	}
+
+	public static DateFormat getIsoDateFormat() {
+		return get().ISO8601FORMAT;
+	}
+	
+	public static DateFormat getDateFormat() {
+		return get().sdf;
+	}
+	
+	public static Set<Right> getRights() {
+		checkIsInvalid();
+		return get().rights;
+	}
+	
+	public static void setKickedByAdmin(boolean kicked) {
+		kickedByAdmin = kicked;
+	}
+	
+	public boolean isKickedByAdmin() {
+		return kickedByAdmin;
+	}
+
+	public OmUrlFragment getArea() {
+		return area;
+	}
+
+	public void setArea(OmUrlFragment area) {
+		this.area = area;
+	}
+
+	
+	public static Dashboard getDashboard() {
+		Dashboard d = get().dashboard;
+		if (d == null) {
+			get().initDashboard();
+			d = get().dashboard;
+		}
+		return d;
+	}
+	
+	public Locale getBrowserLocale(){
+		return browserLocale;
+	}
+
+	public Long getLanguageByBrowserLocale() {
+		return getBean(IUserManager.class).getLanguage(getBrowserLocale());
+	}
+
+	public State getCountryByBrowserLocale() {
+		return getBean(IUserManager.class).getCountry(getBrowserLocale());
+	}
+
+	public String getClientTZCode() {
+		TimeZone _zone = browserTz;
+		if (browserTz == null) {
+			try {
+				browserTz = getClientInfo().getProperties().getTimeZone();
+				if (!AVAILABLE_TIMEZONE_SET.contains(browserTz.getID())) {
+					for (String availableID : AVAILABLE_TIMEZONES) {
+						TimeZone zone = TimeZone.getTimeZone(availableID);
+						if (zone.hasSameRules(browserTz)) {
+							browserTz = zone;
+							break;
+						}
+					}
+				}
+				_zone = browserTz;
+			} catch (Exception e) {
+				_zone = Calendar.getInstance(getBrowserLocale()).getTimeZone();
+			}
+		}
+		return _zone == null ? null : _zone.getID();
+	}
+	
+	public static TimeZone getClientTimeZone() {
+		String tzCode = get().getClientTZCode();
+		return tzCode == null ? null : TimeZone.getTimeZone(tzCode);
+	}
+	
+	private void initDashboard() {
+		DashboardContext dashboardContext = getDashboardContext();
+		dashboard = (UserDashboard)dashboardContext.getDashboardPersister().load();
+		boolean existMyRoomWidget = false, existRssWidget = false;
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		boolean showMyRoomConfValue = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+		boolean showRssConfValue = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+		boolean save = false;
+
+		WidgetFactory widgetFactory = dashboardContext.getWidgetFactory();
+
+		if (dashboard == null) {
+			dashboard = new UserDashboard("default", "Default");
+
+			dashboard.addWidget(widgetFactory.createWidget(new WelcomeWidgetDescriptor()));
+			dashboard.addWidget(widgetFactory.createWidget(new StartWidgetDescriptor()));
+			if (showMyRoomConfValue) {
+				dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+			}
+			if (showRssConfValue) {
+				dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+			}
+			save = true;
+		} else {
+			for (Iterator<Widget> iter = dashboard.getWidgets().iterator(); iter.hasNext();) {
+				Widget w = iter.next();
+				// PrivateRoomWidget is stored in the profile of user. Now, Show_MyRooms_key is disable.
+				if (w.getClass().equals(MyRoomsWidget.class)) {
+					existMyRoomWidget = true;
+					if (!showMyRoomConfValue) {
+						iter.remove();
+					}
+				} else if ((w.getClass().equals(RssWidget.class))) {
+					// RssWidget is stored in the profile of user. Now, Show_RSS_Key is disable.
+					existRssWidget = true;
+					if (!showRssConfValue) {
+						iter.remove();
+					}
+				} else {
+					w.init();
+				}
+			}
+			// PrivateRoomWidget was deleted from profile and now it's enabled. It's added again to dashboard.
+			if (!existMyRoomWidget && showMyRoomConfValue && !dashboard.isWidgetMyRoomsDeleted()) {
+				dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+				save = true;
+			}
+			// RssWidget was deleted from profile and now it's enabled. It's added again to dashboard.
+			if (!existRssWidget && showRssConfValue && !dashboard.isWidgetRssDeleted()) {
+				dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+				save = true;
+			}
+		}
+		if (save) {
+			dashboardContext.getDashboardPersister().save(dashboard);
+		}
+	}
+	
+	private static void checkIsInvalid() {
+		if (isInvaldSession(get().getId())) {
+			setKickedByAdmin(true);
+			removeInvalidSession(get().getId());
+			org.apache.wicket.Session session = (org.apache.wicket.Session)get();
+			session.invalidate();
+			Application.get().restartResponseAtSignInPage();
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html
new file mode 100644
index 0000000..5f9cdd0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<span style="padding-left: 20px; padding-right: 20px;"><wicket:message key="572"/></span><input type="text" wicket:id="title"/>
+		<div wicket:id="feedback"></div>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java
new file mode 100644
index 0000000..361438c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public abstract class AddFolderDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private final DialogButton add = new DialogButton("add", Application.getString(1261));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final Form<String> form;
+	private final FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private final String name;
+	private RequiredTextField<String> title;
+
+	public AddFolderDialog(String id) {
+		this(id, null);
+	}
+	
+	public AddFolderDialog(String id, String name) {
+		super(id, Application.getString(1260), Model.of(name));
+		this.name = name;
+		form = new Form<String>("form", getModel()) {
+			private static final long serialVersionUID = 1L;
+			{
+				add(title = new RequiredTextField<String>("title", getModel()));
+				title.setLabel(Model.of(Application.getString(572)));
+				add(feedback.setOutputMarkupId(true));
+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = -3612671587183668912L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						AddFolderDialog.this.onSubmit(target);
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						AddFolderDialog.this.onError(target);
+					}
+				});
+			}
+		};
+		add(form);
+	}
+
+	@Override
+	protected void onOpen(AjaxRequestTarget target) {
+		super.onOpen(target);
+		
+		setModelObject(name);
+		getFeedbackMessages().clear();
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		close(target, getSubmitButton());
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(add, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return add;
+	}
+
+	@Override
+	public Form<String> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/BasePanel.java b/src/web/java/org/apache/openmeetings/web/common/BasePanel.java
new file mode 100644
index 0000000..c0502d4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/BasePanel.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+public abstract class BasePanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	public BasePanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+	}
+
+	public BasePanel(String id, IModel<?> model) {
+		super(id, model);
+		setOutputMarkupId(true);
+	}
+
+	protected MainPage getMainPage() {
+		return (MainPage)super.getPage();
+	}
+	
+	protected boolean isRtl() { //TODO unify, remove copy/paste
+		return FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
+	}
+	
+	/**
+	 * Overwrite this method to execute Java code after Panel is loaded by the
+	 * {@link MenuPanel}
+	 * 
+	 * @param target
+	 */
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+	}
+
+	/**
+	 * This method should be overridden to perform necessary cleanup: remove timers etc.
+	 * 
+	 * @param target
+	 */
+	public void cleanup(AjaxRequestTarget target) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html
new file mode 100644
index 0000000..92f5967
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="formelementradiobox">
+		<div wicket:id="community_settings">
+			<div>
+				<input wicket:id="everybody" type="radio" /><label style="width: 250px" wicket:for="everybody"><wicket:message key="1160"/></label>
+				<div class="clear"></div>
+			</div>
+			<div>
+				<input wicket:id="contact" type="radio" /><label style="width: 250px" wicket:for="contact"><wicket:message key="1168"/></label>
+				<div class="clear"></div>
+			</div>
+			<div>
+				<input wicket:id="nobody" type="radio" /><label style="width: 250px" wicket:for="nobody"><wicket:message key="1169"/></label>
+				<div class="clear"></div>
+			</div>
+		</div>
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1162" /></label>
+		<textarea wicket:id="userOffers" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1163" /></label>
+		<textarea wicket:id="userSearchs" />
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java
new file mode 100644
index 0000000..9396952
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class ComunityUserForm extends Form<User> {
+	private static final long serialVersionUID = -4487619335283747717L;
+
+	public ComunityUserForm(String id, IModel<User> model) {
+		super(id, model);
+
+		RadioGroup<Long> rg = new RadioGroup<Long>("community_settings", new IModel<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			public Long getObject() {
+				User u = ComunityUserForm.this.getModelObject();
+				if (Boolean.TRUE.equals(u.getShowContactData())) {
+					return 1L;
+				} else if (Boolean.TRUE.equals(u.getShowContactDataToContacts())) {
+					return 2L;
+				}
+				return 3L;
+			}
+
+			public void setObject(Long choice) {
+				User u = ComunityUserForm.this.getModelObject();
+				if (choice.equals(1L)) {
+					u.setShowContactData(true);
+					u.setShowContactDataToContacts(false);
+				} else if (choice.equals(2L)) {
+					u.setShowContactData(false);
+					u.setShowContactDataToContacts(true);
+				} else {
+					u.setShowContactData(false);
+					u.setShowContactDataToContacts(false);
+				}
+			}
+
+			public void detach() {
+			}
+		});
+		add(rg.add(new Radio<Long>("everybody", Model.of(1L)), new Radio<Long>("contact", Model.of(2L))
+			, new Radio<Long>("nobody", Model.of(3L))).setOutputMarkupId(true).setRenderBodyOnly(false)
+			);
+
+		add(new TextArea<String>("userOffers"));
+		add(new TextArea<String>("userSearchs"));
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ConfirmCallListener.java b/src/web/java/org/apache/openmeetings/web/common/ConfirmCallListener.java
new file mode 100644
index 0000000..4a4239e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmCallListener.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.attributes.AjaxCallListener;
+import org.apache.wicket.core.util.string.JavaScriptUtils;
+
+public class ConfirmCallListener extends AjaxCallListener {
+	private static final long serialVersionUID = 7355235720213137963L;
+
+	public ConfirmCallListener(long id) {
+		this(id, "");
+	}
+	
+	//TODO confirm need to be replaced with jQuery modal dialog
+	public ConfirmCallListener(long id, String js) {
+		onPrecondition("if (!confirm('" + JavaScriptUtils.escapeQuotes(Application.getString(id)) + "')) {" 
+				+ js + "; hideBusyIndicator(); return false;}");
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
new file mode 100644
index 0000000..5689b22
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+
+public abstract class ConfirmableAjaxLink extends AjaxLink<Void> {
+	private static final long serialVersionUID = 7301747891668537168L;
+	private long confirmId;
+
+	public ConfirmableAjaxLink(String id, long confirmId) {
+		super(id);
+		this.confirmId = confirmId;
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+		super.updateAjaxAttributes(attributes);
+		attributes.getAjaxCallListeners().add(new ConfirmCallListener(confirmId, "hideBusyIndicator();"));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html
new file mode 100644
index 0000000..c25dd0e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="message error">
+		<h3 wicket:id="msg"></h3>
+		<pre wicket:id="err"></pre>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java
new file mode 100644
index 0000000..f5c1c4b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.PrintWriter;
+
+import org.apache.commons.io.output.StringBuilderWriter;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ErrorMessagePanel extends Panel {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorMessagePanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+
+	public ErrorMessagePanel(String id, String msg, Throwable err) {
+		super(id);
+		
+		log.error(msg, err);
+		add(new Label("msg", msg));
+		StringBuilderWriter sw = new StringBuilderWriter();
+		err.printStackTrace(new PrintWriter(sw));
+		add(new Label("err", sw.toString()));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html
new file mode 100644
index 0000000..b269c55
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="formSaveBar ui-widget-header">
+			<div class="formSaveButton">
+				<input type="submit" value="" wicket:id="ajax-save-button" wicket:message="title:144" />
+			</div>
+			<div class="formRefreshButton">
+				<input type="submit" value="" wicket:id="ajax-refresh-button" wicket:message="title:156" />
+			</div>
+			<wicket:child/>
+		</div>
+		<div wicket:id="feedback" class="adminFormsFeedbackPanel"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java
new file mode 100644
index 0000000..0a7db65
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public abstract class FormSaveRefreshPanel<T> extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	protected final KendoFeedbackPanel feedback;
+	
+	public FormSaveRefreshPanel(String id, Form<T> form) {
+		super(id);
+		setOutputMarkupId(true);
+
+		feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+		add(feedback.setOutputMarkupId(true));
+
+		// add a save button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-save-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				onSaveSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				onSaveError(target, form);
+			}
+		});
+
+		// add a refresh button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-refresh-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				hideNewRecord();
+				onRefreshSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				hideNewRecord();
+				onRefreshError(target, form);
+			}
+		});
+
+	}
+	/**
+	 * Hide the new record text
+	 */
+	public void hideNewRecord() {
+		// for admin only, will be implemented in admin
+	}
+	
+	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);
+
+	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html
new file mode 100644
index 0000000..10a42d9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="formelement">
+		<label><wicket:message key="133" /></label><input type="password" wicket:id="password" />
+	</div>
+	<wicket:child/>
+	<div class="formelement">
+		<label><wicket:message key="135" /></label><select
+			wicket:id="salutation" style="width: 60px;" /><input type="text"
+			wicket:id="firstname" style="width: 216px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="136" /></label><input type="text" wicket:id="lastname" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1143" /></label><select wicket:id="timeZoneId" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="111" /></label><select wicket:id="language_id" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="137" /></label><input type="text" wicket:id="adresses.email" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="607" /></label><input type="text" wicket:id="adresses.phone" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1503" /></label><input class="formcheckbox" type="checkbox" wicket:id="sendSMS" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="138" /></label><input type="text" class="date time picker" wicket:id="age" style="width: 258px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="139" /></label><input type="text"
+			wicket:id="adresses.street" style="width: 244px;" /> <input
+			type="text" wicket:id="adresses.additionalname" style="width: 30px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="140" /></label><input type="text"
+			wicket:id="adresses.zip" style="width: 60px;" /> <input type="text"
+			wicket:id="adresses.town" style="width: 214px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="141" /></label><select wicket:id="adresses.states" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="142" /></label>
+		<textarea wicket:id="adresses.comment" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="161" /></label><input type="hidden" class="input" wicket:id="organisation_users" style="max-height: 80px" />
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java
new file mode 100644
index 0000000..64b5ec2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java
@@ -0,0 +1,221 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.threeten.bp.LocalDate;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2MultiChoice;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+import com.googlecode.wicket.kendo.ui.form.datetime.local.AjaxDatePicker;
+import com.googlecode.wicket.kendo.ui.resource.KendoGlobalizeResourceReference;
+
+public class GeneralUserForm extends Form<User> {
+	private static final long serialVersionUID = 1L;
+	private Salutation salutation;
+	private LocalDate age;
+	private PasswordTextField passwordField;
+	private RequiredTextField<String> email;
+
+	public GeneralUserForm(String id, IModel<User> model, boolean isAdminForm) {
+		super(id, model);
+
+		//TODO should throw exception if non admin User edit somebody else (or make all fields read-only)
+		add(passwordField = new PasswordTextField("password", new Model<String>()));
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		passwordField.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
+
+		updateModelObject(getModelObject());
+		SalutationDao salutDao = getBean(SalutationDao.class);
+		add(new DropDownChoice<Salutation>("salutation"
+				, new PropertyModel<Salutation>(this, "salutation")
+				, salutDao.getUserSalutations(getLanguage())
+				, new IChoiceRenderer<Salutation>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public Object getDisplayValue(Salutation object) {
+						return getString("" + object.getFieldvalues_id());
+					}
+
+					@Override
+					public String getIdValue(Salutation object, int index) {
+						return "" + object.getSalutations_id();
+					}
+				})
+			.add(new AjaxFormComponentUpdatingBehavior("onchange") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					GeneralUserForm.this.getModelObject().setSalutations_id(salutation.getSalutations_id());
+				}
+			}));
+		add(new TextField<String>("firstname"));
+		add(new TextField<String>("lastname"));
+		
+		add(new DropDownChoice<String>("timeZoneId", AVAILABLE_TIMEZONES));
+
+		add(new LanguageDropDown("language_id"));
+
+		add(email = new RequiredTextField<String>("adresses.email"));
+		email.setLabel(Model.of(Application.getString(137)));
+		email.add(RfcCompliantEmailAddressValidator.getInstance());
+		add(new TextField<String>("adresses.phone"));
+		add(new CheckBox("sendSMS"));
+		add(new AjaxDatePicker("age", new PropertyModel<LocalDate>(this, "age"), WebSession.get().getLocale()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onValueChanged(AjaxRequestTarget target) {
+				User u = GeneralUserForm.this.getModelObject();
+				u.setAge(CalendarHelper.getDate(age, u.getTimeZoneId()));
+			}
+		});
+		add(new TextField<String>("adresses.street"));
+		add(new TextField<String>("adresses.additionalname"));
+		add(new TextField<String>("adresses.zip"));
+		add(new TextField<String>("adresses.town"));
+		add(new DropDownChoice<State>("adresses.states", getBean(StateDao.class).getStates(), new ChoiceRenderer<State>("name", "state_id")));
+		add(new TextArea<String>("adresses.comment"));
+
+		final List<Organisation_Users> orgUsers;
+		if (isAdminForm) {
+			List<Organisation> orgList = getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);
+			orgUsers = new ArrayList<Organisation_Users>(orgList.size());
+			for (Organisation org : orgList) {
+				orgUsers.add(new Organisation_Users(org));
+			}
+		} else {
+			orgUsers = getModelObject().getOrganisation_users();
+		}
+		add(new Select2MultiChoice<Organisation_Users>("organisation_users", null, new TextChoiceProvider<Organisation_Users>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getDisplayText(Organisation_Users choice) {
+				return choice.getOrganisation().getName();
+			}
+
+			@Override
+			protected Object getId(Organisation_Users choice) {
+				return choice.getOrganisation().getOrganisation_id();
+			}
+
+			@Override
+			public void query(String term, int page, Response<Organisation_Users> response) {
+				for (Organisation_Users ou : orgUsers) {
+					if (Strings.isEmpty(term) || (!Strings.isEmpty(term) && ou.getOrganisation().getName().contains(term))) {
+						response.add(ou);
+					}
+				}
+			}
+
+			@Override
+			public Collection<Organisation_Users> toChoices(Collection<String> _ids) {
+				List<Long> ids = new ArrayList<Long>();
+				for (String id : _ids) {
+					ids.add(Long.parseLong(id));
+				}
+				List<Organisation_Users> list = new ArrayList<Organisation_Users>();
+				for (Organisation o : getBean(OrganisationDao.class).get(ids)) {
+					list.add(new Organisation_Users(o));
+				}
+				return list;
+			}
+		}).setEnabled(isAdminForm));
+	}
+
+	public void updateModelObject(User u) {
+		salutation = getBean(SalutationDao.class).get(u.getSalutations_id(), getLanguage());
+		age = CalendarHelper.getDate(u.getAge(), u.getTimeZoneId());
+	}
+	
+	@Override
+	protected void onValidate() {
+		User u = getModelObject();
+		if(!getBean(UserDao.class).checkEmail(email.getConvertedInput(), u.getType(), u.getDomainId(), u.getUser_id())) {
+			error(Application.getString(1000));
+		}
+		super.onValidate();
+	}
+	
+	public PasswordTextField getPasswordField() {
+		return passwordField;
+	}
+
+	
+	public String getEmail() {
+		return email.getValue();
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(new KendoGlobalizeResourceReference(WebSession.get().getLocale())));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html
new file mode 100644
index 0000000..3f72418
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="header">
+			<span wicket:id="appName"></span>
+		</div>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java
new file mode 100644
index 0000000..45929f2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class HeaderPanel extends BasePanel {
+	private static final long serialVersionUID = 9020842845946685193L;
+
+	public HeaderPanel(String id, String appName) {
+		super(id);
+		add(new Label("appName", Strings.isEmpty(appName) ? "&nbsp;" : appName).setEscapeModelStrings(false));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java b/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java
new file mode 100644
index 0000000..6df9067
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.model.IModel;
+
+public class LanguageDropDown extends DropDownChoice<Long> {
+	private static final long serialVersionUID = 1L;
+	private final List<Long> languages = new ArrayList<Long>();
+
+	public LanguageDropDown(String id, IModel<Long> model) {
+		super(id, model, new ArrayList<Long>());
+		internalInit();
+	}
+	
+	public LanguageDropDown(String id) {
+		super(id);
+		internalInit();
+	}
+	
+	private void internalInit() {
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			languages.add(e.getKey());
+		}
+		setChoices(languages);
+		setChoiceRenderer(new IChoiceRenderer<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Object getDisplayValue(Long object) {
+				return LabelDao.languages.get(object).getDisplayName();
+			}
+
+			@Override
+			public String getIdValue(Long object, int index) {
+				return "" + object;
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html
new file mode 100644
index 0000000..6e6e095
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/jquery.ui.menubar.css"/>
+	</wicket:head>
+	<wicket:panel>
+		<script type="text/javascript" src="js/jquery.ui.menubar.js"></script>
+		<script type="text/javascript">
+			$(function() {
+				$("#jMenu").menubar({
+					autoExpand: true
+					, menuIcon: true
+					, buttons: true
+					, position: {
+						within: $("#menu").add(window).first()
+					}
+					//, select: select
+				});
+			});
+		</script>
+		<ul id="jMenu">
+			<li wicket:id="mainItem">
+				<a class="fNiv" href="#" onclick="return false;"><span wicket:id="label"></span></a>
+				<ul wicket:enclosure="childItem">
+					<li wicket:id="childItem"><a>
+						<span class="menuName" wicket:id="name"></span><br />
+						<span class="menuDesc" wicket:id="description"></span>
+					</a></li>
+				</ul>
+			</li>
+		</ul>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java
new file mode 100644
index 0000000..7a11487
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.entity.basic.Naviglobal;
+import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.OmUrlFragment.MenuActions;
+import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+
+/**
+ * Loads the menu items into the main area
+ * 
+ * @author sebawagner
+ *
+ */
+public class MenuPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public MenuPanel(String id) {
+		super(id);
+		setMarkupId(id);
+		
+		final NavigationDao man = Application.getBean(NavigationDao.class);
+		add(new ListView<Naviglobal>("mainItem", man.getMainMenu(AuthLevelUtil.hasAdminLevel(WebSession.getRights()), WebSession.getUserId())) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<Naviglobal> item) {
+				Naviglobal gl = item.getModelObject();
+				item.add(new Label("label", getString("" + gl.getFieldvalues_id())).setRenderBodyOnly(true));
+				
+				item.add(new ListView<Navimain>("childItem", gl.getMainnavi()) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void populateItem(ListItem<Navimain> item) {
+						Navimain m = item.getModelObject();
+						final String name = getString("" + m.getFieldvalues_id());
+						final String desc = getString("" + m.getTooltip_fieldvalues_id());
+						final MenuActions action = MenuActions.valueOf(m.getAction());
+						final MenuParams params = m.getParams() != null ? MenuParams.valueOf(m.getParams()) : MenuParams.publicTabButton;
+						item.add(new Label("name", name), new Label("description", desc));
+						item.add(new AjaxEventBehavior("click") {
+							private static final long serialVersionUID = 1L;
+
+							@Override
+							protected void onEvent(AjaxRequestTarget target) {
+								((MainPage)getPage()).updateContents(new OmUrlFragment(action, params), target);
+							}
+						});
+					}
+				}.setReuseItems(true));
+			}
+		}.setReuseItems(true));
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		if (getMainPage().isRtl()) {
+			response.render(CssHeaderItem.forUrl("css/jquery.ui.menubar-rtl.css"));
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java b/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
new file mode 100644
index 0000000..1b7f263
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.LocalTime;
+
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DatePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.TimePicker;
+import com.googlecode.wicket.kendo.ui.resource.KendoGlobalizeResourceReference;
+
+public class OmDateTimePicker extends DateTimePicker {
+	private static final long serialVersionUID = 1L;
+
+	public OmDateTimePicker(String id, IModel<LocalDateTime> model) {
+		super(id, model);
+	}
+	
+	@Override
+	protected DatePicker newDatePicker(String id, IModel<LocalDate> model, String datePattern) {
+		return new DatePicker(id, model, WebSession.get().getLocale());
+	}
+	
+	@Override
+	protected TimePicker newTimePicker(String id, IModel<LocalTime> model, String timePattern) {
+		return new TimePicker(id, model, WebSession.get().getLocale());
+	}
+
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(new KendoGlobalizeResourceReference(WebSession.get().getLocale())));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmLabel.java b/src/web/java/org/apache/openmeetings/web/common/OmLabel.java
new file mode 100644
index 0000000..a89911c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmLabel.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.StringResourceModel;
+
+public class OmLabel extends Label {
+	private static final long serialVersionUID = 1L;
+
+	public OmLabel(String id, String key, Object... parameters) {
+		super(id);
+		setDefaultModel(new StringResourceModel(key, this, null, parameters));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
new file mode 100644
index 0000000..9b178ca
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+	    <a wicket:id="first" class="goto icon ui-icon ui-icon-seek-first"></a>
+	    <a wicket:id="prev" class="goto icon ui-icon ui-icon-seek-prev"></a>
+	    <span wicket:id="navigation" class="goto">
+	        <a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>
+	    </span>
+	    <a wicket:id="next" class="goto icon ui-icon ui-icon-seek-next"></a>
+	    <a wicket:id="last" class="goto icon ui-icon ui-icon-seek-end"></a>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
new file mode 100644
index 0000000..596ab5f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+
+public class OmPagingNavigator extends AjaxPagingNavigator {
+
+	private static final long serialVersionUID = 1L;
+	
+	public OmPagingNavigator(String id, IPageable pageable) {
+		super(id, pageable);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html
new file mode 100644
index 0000000..b83c5e8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="pagedPanel" class="pagedEntityListPanel"></div>
+		<form wicket:id="searchForm" class="searchForm">
+			<input type="text" wicket:id="searchText" wicket:message="title:714"/>
+			<input type="submit" wicket:id="search" wicket:message="value:715"/>
+		</form>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java
new file mode 100644
index 0000000..5e4764b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.PropertyModel;
+
+public abstract class PagedEntityListPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	private List<Integer> numbers = Arrays.asList(10, 25, 50, 75, 100, 200);
+	
+	public PagedEntityListPanel(String id, final SearchableDataView<? extends IDataProviderEntity> dataView) {
+		super(id);
+
+		final PagingNavigatorPanel navPanel = new PagingNavigatorPanel("pagedPanel", dataView, numbers) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				PagedEntityListPanel.this.onEvent(target);
+			}
+		};
+		
+		final SearchableDataProvider<? extends IDataProviderEntity> dp = dataView.getDataProvider();
+		Form<Void> searchForm = new Form<Void>("searchForm");
+		add(searchForm.setOutputMarkupId(true));
+		searchForm.add(new TextField<String>("searchText", new PropertyModel<String>(dp, "search")).setOutputMarkupId(true));
+		searchForm.add(new AjaxButton("search", searchForm) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				target.add(navPanel);
+				PagedEntityListPanel.this.onEvent(target);
+			}
+		});
+		add(navPanel);
+	}
+
+	protected abstract void onEvent(AjaxRequestTarget target);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html
new file mode 100644
index 0000000..a3728e5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="pagingForm" class="pagedEntityListPanel">
+		<select wicket:id="entitiesPerPage"></select> <span
+			wicket:id="navigator">[dataview navigator]</span>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java
new file mode 100644
index 0000000..255adfa
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.List;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.model.PropertyModel;
+
+public abstract class PagingNavigatorPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	private int entitiesPerPage;
+	
+	public PagingNavigatorPanel(String id, final DataView<?> dataView, List<Integer> numbers) {
+		this(id, dataView, numbers, 50);
+	}
+	
+	public PagingNavigatorPanel(String id, final DataView<?> dataView, List<Integer> numbers, int _entitiesPerPage) {
+		super(id);
+		setOutputMarkupId(true);
+		this.entitiesPerPage = _entitiesPerPage;
+		dataView.setItemsPerPage(entitiesPerPage);
+		final Form<Void> f = new Form<Void>("pagingForm");
+		f.add(new OmPagingNavigator("navigator", dataView).setOutputMarkupId(true))
+			.add(new DropDownChoice<Integer>("entitiesPerPage", new PropertyModel<Integer>(this, "entitiesPerPage"), numbers)
+				.add(new AjaxFormComponentUpdatingBehavior("onchange") {
+					private static final long serialVersionUID = 1L;
+	
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						long newPage = dataView.getCurrentPage() * dataView.getItemsPerPage() / entitiesPerPage;
+						dataView.setItemsPerPage(entitiesPerPage);
+						dataView.setCurrentPage(newPage);
+						target.add(f);
+						PagingNavigatorPanel.this.onEvent(target);
+					}
+				}));
+		add(f.setOutputMarkupId(true));
+	}
+
+	public int getEntitiesPerPage() {
+		return entitiesPerPage;
+	}
+	
+	public void setEntitiesPerPage(int entitiesPerPage) {
+		this.entitiesPerPage = entitiesPerPage;
+	}
+	
+	protected abstract void onEvent(AjaxRequestTarget target);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html
new file mode 100644
index 0000000..92f58ff
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="profile" wicket:id="profile"><img wicket:id="img"/><wicket:child/></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
new file mode 100644
index 0000000..a072e1b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.URI;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.util.io.IOUtils;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProfileImagePanel extends BasePanel {
+	private static final long serialVersionUID = 1119719397241677937L;
+	private static final Logger log = Red5LoggerFactory.getLogger(ProfileImagePanel.class, webAppRootKey);
+	protected final WebMarkupContainer profile;
+	
+	public ProfileImagePanel(String id, final long userId) {
+		super(id);
+		
+		profile = new TransparentWebMarkupContainer("profile");
+		String uri = getBean(UserDao.class).get(userId).getPictureuri();
+		boolean absolute = false;
+		try {
+			absolute = URI.create(uri).isAbsolute();
+		} catch (Exception e) {
+			//no-op
+		}
+		if (absolute) {
+			profile.add(new Image("img", Application.getString(5L)).add(AttributeModifier.replace("src", uri)));
+		} else {
+			profile.add(new Image("img", new ByteArrayResource("image/jpeg") {
+				private static final long serialVersionUID = 6039580072791941591L;
+
+				@Override
+				protected ResourceResponse newResourceResponse(Attributes attributes) {
+					ResourceResponse rr = super.newResourceResponse(attributes);
+					rr.disableCaching();
+					return rr;
+				}
+				
+				@Override
+				protected byte[] getData(Attributes attributes) {
+					String uri = getBean(UserDao.class).get(userId).getPictureuri();
+					File img = OmFileHelper.getUserProfilePicture(userId, uri);
+					try {
+						return IOUtils.toByteArray(new FileInputStream(img));
+					} catch (Exception e) {
+						log.error("failed to get bytes from image", e);
+					}
+					return null;
+				}
+			}));
+		}
+		add(profile.setOutputMarkupId(true));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
new file mode 100644
index 0000000..d1a3c9e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<form wicket:id="form"><div 
+			class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;"><span 
+			class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
+			style="width: 120px;"><span class="ui-button-text"><wicket:message key="379"/></span><input 
+			type="file" accept="image/*" wicket:id="image"/></span></div><span wicket:id="progress">[progressbar]</span></form>
+	</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
new file mode 100644
index 0000000..8b2cd2d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.List;
+
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.lang.Bytes;
+
+public class UploadableProfileImagePanel extends ProfileImagePanel {
+	private static final long serialVersionUID = 1L;
+	private FileUploadField fileUploadField;
+	
+	public UploadableProfileImagePanel(String id, final long userId) {
+		super(id, userId);
+		final Form<Void> form = new Form<Void>("form");
+		form.setMultiPart(true);
+		form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
+		// Model is necessary here to avoid writing image to the User object
+		form.add(fileUploadField = new FileUploadField("image", new IModel<List<FileUpload>>() {
+			private static final long serialVersionUID = 1L;
+
+			//FIXME this need to be eliminated
+			public void detach() {
+			}
+			
+			public void setObject(List<FileUpload> object) {
+			}
+			
+			public List<FileUpload> getObject() {
+				return null;
+			}
+		}));
+		form.add(new UploadProgressBar("progress", form, fileUploadField));
+		fileUploadField.add(new AjaxFormSubmitBehavior(form, "onchange") {
+			private static final long serialVersionUID = 2160216679027859231L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FileUpload fu = fileUploadField.getFileUpload();
+				if (fu != null) {
+					StoredFile sf = new StoredFile(fu.getClientFileName());
+					if (sf.isImage()) {
+						boolean asIs = sf.isAsIs();
+						try {
+							//FIXME need to work with InputStream !!!
+							getBean(GenerateImage.class)
+								.convertImageUserProfile(fu.writeToTempFile(), userId, asIs);
+						} catch (Exception e) {
+							// TODO display error
+							e.printStackTrace();
+						}
+					} else {
+						//TODO display error
+					}
+				}
+				target.add(profile, form);
+			}
+		});
+		add(form.setOutputMarkupId(true));
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/UserPanel.java b/src/web/java/org/apache/openmeetings/web/common/UserPanel.java
new file mode 100644
index 0000000..96282ed
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UserPanel.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.model.IModel;
+
+@AuthorizeInstantiation("Dashboard")
+public abstract class UserPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public UserPanel(String id) {
+		super(id);
+	}
+	
+	public UserPanel(String id, IModel<?> model) {
+		super(id, model);
+	}
+	
+	public static List<Room> getMyRooms() {
+		List<Room> result = new ArrayList<Room>();
+		result.add(getBean(IRoomManager.class).getRoomByOwnerAndTypeId(getUserId(), 1L, Application.getString(1306L)));
+		result.add(getBean(IRoomManager.class).getRoomByOwnerAndTypeId(getUserId(), 3L, Application.getString(1307L)));
+		result.addAll(getBean(RoomDao.class).getAppointedRoomsByUser(getUserId()));
+		return result;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java b/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java
new file mode 100644
index 0000000..aaf178a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public class DataViewContainer<T extends IDataProviderEntity> implements Serializable {
+	private static final long serialVersionUID = -1027478954223527890L;
+	public WebMarkupContainer container;
+	public SearchableDataView<T> view;
+	public PagedEntityListPanel navigator;
+	private List<OmOrderByBorder<T>> orderLinks = new ArrayList<OmOrderByBorder<T>>();
+	
+	public DataViewContainer(WebMarkupContainer container, SearchableDataView<T> view, PagedEntityListPanel navigator) {
+		this.container = container;
+		this.view = view;
+		this.navigator = navigator;
+	}
+	
+	public DataViewContainer<T> addLink(OmOrderByBorder<T> link) {
+		orderLinks.add(link);
+		return this;
+	}
+	
+	public OmOrderByBorder<T>[] getLinks() {
+		@SuppressWarnings("unchecked")
+		OmOrderByBorder<T>[] a = new OmOrderByBorder[0];
+		return orderLinks.toArray(a);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java b/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
new file mode 100644
index 0000000..59f4343
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.CssProvider;
+
+public class OmOrderByBorder<T extends IDataProviderEntity> extends AjaxFallbackOrderByBorder<String> {
+	private static final long serialVersionUID = -867341109912297431L;
+	private DataViewContainer<T> container;
+	
+	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {
+		super(id, property, container.view.getDataProvider(), new SortIconCssProvider());
+		this.container = container;
+		setOutputMarkupId(true);
+	}
+	
+    protected void onSortChanged() {
+    	container.view.setCurrentPage(0);
+    }
+
+	@Override
+	protected void onAjaxClick(AjaxRequestTarget target) {
+		target.add(container.container, container.navigator);
+		target.add(container.getLinks());
+	}
+	
+	static class SortIconCssProvider extends CssProvider<String> {
+		private static final long serialVersionUID = 60178231250586887L;
+
+		public SortIconCssProvider() {
+			super("ui-icon ui-icon-carat-1-n sort-icon", "ui-icon ui-icon-carat-1-s sort-icon", "ui-icon ui-icon-carat-2-n-s sort-icon");
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java b/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
new file mode 100644
index 0000000..7b66be2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+/**
+ * provides function to fill paging tables
+ * 
+ * @author swagner
+ * 
+ * @param <T>
+ */
+public class SearchableDataProvider<T extends IDataProviderEntity> extends SortableDataProvider<T, String> {
+	private static final long serialVersionUID = 4325721185888905204L;
+	protected Class<? extends IDataProviderDao<T>> clazz;
+	protected String search = null;
+	
+	public SearchableDataProvider(Class<? extends IDataProviderDao<T>> c) {
+		this.clazz = c;
+	}
+	
+	public void detach() {
+		// does nothing
+	}
+
+	protected IDataProviderDao<T> getDao() {
+		return getBean(clazz);
+	}
+	
+	protected String getSortStr() {
+		String result = null;
+		if (getSort() != null) {
+			result = getSort().getProperty() + " " + (getSort().isAscending() ? "ASC" : "DESC");
+		}
+		return result;
+	}
+	
+	public Iterator<? extends T> iterator(long first, long count) {
+		return (search == null && getSort() == null
+			? getDao().get((int)first, (int)count)
+			: getDao().get(search, (int)first, (int)count, getSortStr())).iterator();
+	}
+
+	public long size() {
+		return search == null ? getDao().count() : getDao().count(search);
+	}
+
+	public IModel<T> model(T object) {
+		return new CompoundPropertyModel<T>(object);
+	}
+
+	public void setSearch(String search) {
+		if (search != null && !search.trim().isEmpty()) {
+			this.search = search.trim();
+		} else {
+			this.search = null;
+		}
+	}
+	
+	public String getSearch() {
+		return search;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java
new file mode 100644
index 0000000..7ae71e1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+public abstract class AbstractAppointmentTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+	protected Appointment a;
+	protected TimeZone tz;
+
+	public AbstractAppointmentTemplate(Long langId, Appointment a, TimeZone tz) {
+		super(langId);
+		this.a = a;
+		this.tz = tz;
+	}
+
+	public String getEmail() {
+		return renderPanel(this).toString();
+	}
+
+	public abstract String getSubject();
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html
new file mode 100644
index 0000000..f8038c1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container">
+		<wicket:child/>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java
new file mode 100644
index 0000000..fc2020e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.mock.MockWebResponse;
+import org.apache.wicket.protocol.http.BufferedWebResponse;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
+import org.apache.wicket.protocol.http.mock.MockHttpSession;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+public abstract class AbstractTemplatePanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	protected long langId;
+	
+	public AbstractTemplatePanel(Long langId) {
+		super(TemplatePage.COMP_ID);
+		this.langId = langId == null ? getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : langId;
+		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(LabelDao.languages.get(langId).toLanguageTag()) ? "rtl" : "ltr")));
+	}
+	
+	/**
+	 * Collects the html generated by the rendering of a page.
+	 * 
+	 * @param panel
+	 *            the panel that should be rendered.
+	 * @return the html rendered by the panel
+	 */
+	protected static CharSequence renderPanel(final Panel panel) {
+		RequestCycle requestCycle = RequestCycle.get();
+
+		final Response oldResponse = requestCycle.getResponse();
+		BufferedWebResponse tempResponse = new BufferedWebResponse(null);
+
+		try {
+			requestCycle.setResponse(tempResponse);
+
+			TemplatePage page = new TemplatePage();
+			page.add(panel);
+
+			panel.render();
+		} finally {
+			requestCycle.setResponse(oldResponse);
+		}
+
+		return tempResponse.getText();
+	}
+
+	public static class TemplatePage extends WebPage implements IMarkupResourceStreamProvider {
+		private static final long serialVersionUID = 1L;
+		public static final String COMP_ID = "template";
+
+		public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) {
+			return new StringResourceStream("<wicket:container wicket:id='" + COMP_ID + "'></wicket:container>");
+		}
+	}
+	
+	public static void ensureApplication(long langId) {
+		Application a = null;
+		if (Application.exists()) {
+			a = Application.get();
+		} else {
+			a = (Application)Application.get(Application.getAppName());
+			ThreadContext.setApplication(a);
+		}
+		if (ThreadContext.getRequestCycle() == null) {
+			ServletWebRequest req = new ServletWebRequest(new MockHttpServletRequest(a, new MockHttpSession(a.getServletContext()), a.getServletContext()), "");
+			RequestCycleContext rctx = new RequestCycleContext(req, new MockWebResponse(), a.getRootRequestMapper(), a.getExceptionMapperProvider().get()); 
+			ThreadContext.setRequestCycle(new RequestCycle(rctx));
+		}
+		if (ThreadContext.getSession() == null) {
+			WebSession s = WebSession.get();
+			s.setLanguage(langId);
+			ThreadContext.setSession(s);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html
new file mode 100644
index 0000000..5e80e9a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java
new file mode 100644
index 0000000..f6eaae0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class AppointmentReminderTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private AppointmentReminderTemplate(Long langId, Appointment a, TimeZone tz) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1158L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+	}
+	
+	public static AppointmentReminderTemplate get(Long langId, Appointment a, TimeZone tz) {
+		ensureApplication(langId);
+		return new AppointmentReminderTemplate(langId, a, tz);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1158L, langId)).append(" ").append(" ").append(a.getTitle()).append(' ')
+			.append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java
new file mode 100644
index 0000000..5a7f670
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class CanceledAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private CanceledAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1157L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static CanceledAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new CanceledAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1157L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java
new file mode 100644
index 0000000..7ba76c8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class CreatedAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private CreatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1151L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static CreatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new CreatedAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1151L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html
new file mode 100644
index 0000000..68b10b4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><span wicket:id="appname"></span> - Feedback</b><br />
+	Message from User: <span wicket:id="username"></span><br/>
+	Mail: <span wicket:id="email"></span><br/>
+	Message: <span wicket:id="message"></span><br/><br/>
+	<b>Click on this link to participate in the Meeting:</b><br/>
+	<a wicket:id="invitation_link">Click here to enter room</a><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java
new file mode 100644
index 0000000..95c28fc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class FeedbackTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public FeedbackTemplate(String username, String email, String message) {
+		super(WebSession.getLanguage());
+		add(new Label("appname", getBean(ConfigurationDao.class).getAppName()));
+		add(new Label("username", username));
+		add(new Label("email", email));
+		add(new Label("message", message));
+		add(new ExternalLink("invitation_link", ""));
+	}
+	
+	public static String getEmail(String username, String email, String message) {
+		return renderPanel(new FeedbackTemplate(username, email, message)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html
new file mode 100644
index 0000000..d47fbcf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><span wicket:id="titleLbl"></span></b><br />
+	<span wicket:id="userLbl"></span> <span wicket:id="user"></span><br/>
+	<span wicket:id="messageLbl"></span> <span wicket:id="message"></span><br/>
+	<div wicket:id="links">
+		<span wicket:id="comment_for_link1"></span><br/>
+		<a wicket:id="invitation_link1"><span wicket:id="clickMe"></span></a><br/>
+		<br/><br/>
+		<span wicket:id="comment_for_link2"></span><br/>
+		<span wicket:id="invitation_link2"></span>
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java
new file mode 100644
index 0000000..4c6f31e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class InvitationTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	private InvitationTemplate(Long langId, String invitorName, String message, String link) {
+		super(langId);
+
+		add(new Label("titleLbl", Application.getString(500, langId)));
+		add(new Label("userLbl", Application.getString(501, langId)));
+		add(new Label("user", invitorName));
+		add(new Label("messageLbl", Application.getString(502, langId)));
+		add(new Label("message", message).setEscapeModelStrings(false));
+		
+		add(new WebMarkupContainer("links")
+			.add(new Label("comment_for_link1", Application.getString(503, langId)))
+			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", Application.getString(504, langId))))
+			.add(new Label("comment_for_link2", Application.getString(505, langId)))
+			.add(new Label("invitation_link2", link))
+			.setVisible(link != null)
+			);
+	}
+	
+	public static String getEmail(Long langId, String invitorName, String message, String link) {
+		ensureApplication(langId);
+		return renderPanel(new InvitationTemplate(langId, invitorName, message, link)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html
new file mode 100644
index 0000000..eef2bc8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="registrationLbl"></span>
+	<br />
+	<br />
+	<b><wicket:message key="507" /></b><br />
+	<wicket:message key="508" /> <span wicket:id="username"></span><br />
+	<wicket:message key="509" /> <span wicket:id="userpass"></span><br />
+	<wicket:message key="510" /> <span wicket:id="email"></span><br />
+	<br />
+	<div wicket:id="verification">
+		<wicket:message key="667" /> <br />
+		<a wicket:id="verification_url1"><wicket:message key="668" /></a> <br />
+		<span wicket:id="verification_url2"></span> <br />
+	</div>
+	<span wicket:id="organisationLbl"></span>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java
new file mode 100644
index 0000000..5e02662
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class RegisterUserTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RegisterUserTemplate(String username, String userpass, String email, String verification_url) {
+		super(WebSession.getLanguage());
+		add(new Label("registrationLbl", Application.getString(506, langId)));
+		add(new Label("username", username));
+		add(new Label("userpass", userpass));
+		add(new Label("email", email));
+		WebMarkupContainer verification = new WebMarkupContainer("verification");
+		add(verification.add(new Label("verification_url2", verification_url))
+			.add(new ExternalLink("verification_url1", verification_url))
+			.setVisible(verification_url != null));
+		add(new Label("organisationLbl", Application.getString(511, langId)));
+	}
+
+	public static String getEmail(String username, String userpass, String email, String verification_url) {
+		return renderPanel(new RegisterUserTemplate(username, userpass, email, verification_url)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html
new file mode 100644
index 0000000..0c73eb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="hi"></span>&nbsp;<span wicket:id="firstName"></span>&nbsp;<span wicket:id="lastName"></span><br/>
+	<br/>
+	<span wicket:id="addedFirstName"></span>&nbsp;<span wicket:id="addedLastName"></span>&nbsp;<span wicket:id="confirmed"></span><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java
new file mode 100644
index 0000000..d13ee2d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.basic.Label;
+
+public class RequestContactConfirmTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RequestContactConfirmTemplate(UserContact contact) {
+		super(contact.getOwner().getLanguage_id());
+		add(new Label("hi", Application.getString(1192, langId)));
+		add(new Label("firstName", contact.getOwner().getFirstname()));
+		add(new Label("lastName", contact.getOwner().getLastname()));
+		add(new Label("addedFirstName", contact.getContact().getFirstname()));
+		add(new Label("addedLastName", contact.getContact().getLastname()));
+		add(new Label("confirmed", Application.getString(1198, langId)));
+	}
+	
+	public static String getEmail(UserContact contact) {
+		return renderPanel(new RequestContactConfirmTemplate(contact)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html
new file mode 100644
index 0000000..967bfce
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="hi"></span>&nbsp;<span wicket:id="addedFirstName"></span>&nbsp;<span wicket:id="addedLastName"></span><br/>
+	<br/>
+	<span wicket:id="firstName"></span>&nbsp;<span wicket:id="lastName"></span>&nbsp;<span wicket:id="likeToAdd"></span><br/>
+	<span wicket:id="check"></span><br/>
+	<br/>
+	<br/>
+	<a wicket:id="link"><span wicket:id="contactList"></span></a><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java
new file mode 100644
index 0000000..c10d012
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class RequestContactTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RequestContactTemplate(User userToAdd, User user) {
+		super(userToAdd.getLanguage_id());
+		add(new Label("hi", Application.getString(1192, langId)));
+		add(new Label("addedFirstName", userToAdd.getFirstname()));
+		add(new Label("addedLastName", userToAdd.getLastname()));
+		add(new Label("firstName", user.getFirstname()));
+		add(new Label("lastName", user.getLastname()));
+		add(new Label("likeToAdd", Application.getString(1193, langId)));
+		add(new Label("check", Application.getString(1194, langId)));
+		add(new ExternalLink("link", ContactsHelper.getLink()).add(new Label("contactList", Application.getString(1196, langId))));
+	}
+	
+	public static String getEmail(User userToAdd, User user) {
+		return renderPanel(new RequestContactTemplate(userToAdd, user)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html
new file mode 100644
index 0000000..a6d5e04
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><wicket:message key="513"/></b><br />
+	<b><wicket:message key="514"/></b><br/>
+	<a wicket:id="reset_link1"><wicket:message key="515"/></a><br/>
+	<wicket:message key="516"/><br/>
+	<span wicket:id="reset_link2"></span>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java
new file mode 100644
index 0000000..4646c3b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class ResetPasswordTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public ResetPasswordTemplate(String link) {
+		super(WebSession.getLanguage());
+		add(new ExternalLink("reset_link1", link));
+		add(new Label("reset_link2", link));
+	}
+	
+	public static String getEmail(String link) {
+		return renderPanel(new ResetPasswordTemplate(link)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java
new file mode 100644
index 0000000..5882dbe
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class UpdatedAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private UpdatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1155L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static UpdatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new UpdatedAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1155L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java b/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java
new file mode 100644
index 0000000..47485ad
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class ActivatePage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	private final String ACTIVATION_PARAM = "u";
+	
+	public ActivatePage(PageParameters pp) {
+		String userHash = pp.get(ACTIVATION_PARAM).toString();
+		if (userHash != null) {
+			User user = Application.getBean(UserDao.class).getUserByActivationHash(userHash);
+
+			if (!AuthLevelUtil.hasLoginLevel(user.getRights())) {
+				// activate
+				user.getRights().add(Right.Login);
+				user.setUpdatetime(new Date());
+
+				Application.getBean(UserDao.class).update(user, null);
+	
+			}
+		}
+		setResponsePage(Application.get().getSignInPageClass());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java
new file mode 100644
index 0000000..45f1708
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+
+public abstract class BaseInitedPage extends BasePage {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	protected String getApplicationName() {
+		return getBean(ConfigurationDao.class).getAppName();
+	}
+	
+	@Override
+	protected String getLanguageCode() {
+		return WebSession.get().getLocale().toLanguageTag();
+	}
+	
+	@Override
+	public boolean isRtl() {
+		return FormatHelper.isRtlLanguage(getLanguageCode());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java
new file mode 100644
index 0000000..8a50115
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestParameters;
+
+public abstract class BaseNotInitedPage extends BasePage {
+	private static final long serialVersionUID = 5716753033219700254L;
+	private static final InstallationConfig installCfg = new InstallationConfig(); 
+
+	@Override
+	protected String getApplicationName() {
+		return installCfg.appName;
+	}
+	
+	@Override
+	protected String getLanguageCode() {
+		return WebSession.get().getLocale().getCountry();
+	}
+	
+	@Override
+	public boolean isRtl() {
+		boolean rtl = false;
+		if (Application.isInstalled()) {
+			rtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toString());
+		}
+		return rtl;
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters arg0, AjaxRequestTarget arg1) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BasePage.html b/src/web/java/org/apache/openmeetings/web/pages/BasePage.html
new file mode 100644
index 0000000..c5a002c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BasePage.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org" wicket:id="html">
+	<head>
+		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+		<wicket:header-items/>
+		<link rel="shortcut icon" href="public/favicon.ico" type="image/x-icon"/>
+		<title wicket:id="pageTitle">[title]</title>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/theme.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/forms.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/calendar.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/admin.css"/>
+	</head>
+	<body>
+		<div wicket:id="header"></div>
+		<wicket:child />
+	</body>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BasePage.java b/src/web/java/org/apache/openmeetings/web/pages/BasePage.java
new file mode 100644
index 0000000..3dde020
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BasePage.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.HeaderPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.OmUrlFragment.AreaKeys;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.CssReferenceHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.wicketstuff.urlfragment.AsyncUrlFragmentAwarePage;
+
+public abstract class BasePage extends AsyncUrlFragmentAwarePage {
+	private static final long serialVersionUID = 1L;
+	private final Map<String, String> options;
+
+	public abstract boolean isRtl();
+	protected abstract String getLanguageCode();
+	protected abstract String getApplicationName();
+	
+	public BasePage() {
+		options = new HashMap<String, String>();
+		options.put("fragmentIdentifierSuffix", "");
+		options.put("keyValueDelimiter", "/");
+		String appName = getApplicationName();
+
+		String code = getLanguageCode();
+		add(new TransparentWebMarkupContainer("html")
+	    	.add(new AttributeModifier("xml:lang", code))
+	    	.add(new AttributeModifier("lang", code))
+	    	.add(new AttributeModifier("dir", isRtl() ? "rtl" : "ltr"))); 
+		add(new Label("pageTitle", appName));
+		add(new HeaderPanel("header", appName));
+	}
+	
+	protected OmUrlFragment getUrlFragment(IRequestParameters params) {
+		for (AreaKeys key : AreaKeys.values()) {
+			StringValue type = params.getParameterValue(key.name());
+			if (!type.isEmpty()) {
+				return new OmUrlFragment(key, type.toString());
+			}
+		}
+		return null;
+	}
+	
+	@Override
+	protected Map<String, String> getOptions() {
+		return options;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
+		super.renderHead(response);
+		response.render(CssReferenceHeaderItem.forUrl(String.format("css/theme_om/jquery-ui-1.11.4.custom.%scss"
+				, RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType() ? "" : "min.")));
+		if (isRtl()) {
+			response.render(CssHeaderItem.forUrl("css/theme-rtl.css"));
+			response.render(CssHeaderItem.forUrl("css/admin-rtl.css"));
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/MainPage.html b/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
new file mode 100644
index 0000000..c876c15
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function showBusyIndicator() {
+				$('#busy_indicator').show();
+			}
+			function hideBusyIndicator() {
+				$('#busy_indicator').hide();
+			}
+		</script>
+	</wicket:head>
+	<wicket:extend>
+		<script type="text/javascript">
+			$(function() {
+				Wicket.Event.subscribe('/ajax/call/failure', hideBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/before', showBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/success', hideBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/complete', hideBusyIndicator);
+			});
+		</script>
+		<div id="topControls">
+			<div id="topLinks"><span 
+				id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span 
+				id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span 
+				id="logout"><a wicket:id="logout"><wicket:message key="310"/></a></span><span 
+				id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a 
+				wicket:id="about"><wicket:message key="1549"/></a></span>
+				</div>
+			<div wicket:id="dev" id="devMenu"/>
+			<div id="busy_indicator"><wicket:message key="1554"/></div>
+			<div wicket:id="menu"></div>
+		</div>
+		<div wicket:id="contents"><div wicket:id="child"></div></div>
+		<div wicket:id="chatPanel"></div>
+		<div wicket:id="aboutDialog"></div>
+	</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/MainPage.java b/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
new file mode 100644
index 0000000..a212428
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.addOnlineUser;
+import static org.apache.openmeetings.web.app.Application.getClientByKeys;
+import static org.apache.openmeetings.web.app.Application.removeOnlineUser;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.OmUrlFragment.CHILD_ID;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+import static org.apache.openmeetings.web.util.OmUrlFragment.getPanel;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.MenuPanel;
+import org.apache.openmeetings.web.user.AboutDialog;
+import org.apache.openmeetings.web.user.ChatPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.devutils.debugbar.DebugBar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.urlfragment.UrlFragment;
+
+@AuthorizeInstantiation({"Admin", "Dashboard", "Room"})
+public class MainPage extends BaseInitedPage {
+	private static final long serialVersionUID = 6421960759218157999L;
+	private static final Logger log = Red5LoggerFactory.getLogger(MainPage.class, webAppRootKey);
+	private final MenuPanel menu;
+	private final MarkupContainer contents;
+	private final AbstractAjaxTimerBehavior areaBehavior;
+	private DebugBar dev = null;
+	
+	public MainPage(PageParameters pp) {
+		super();
+		add(new AjaxClientInfoBehavior());
+		contents = new WebMarkupContainer("contents");
+		add(contents.add(new WebMarkupContainer(CHILD_ID)).setOutputMarkupId(true).setMarkupId("contents"));
+		menu = new MenuPanel("menu");
+		add(menu);
+		add(new AjaxLink<Void>("messages") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				updateContents(PROFILE_MESSAGES, target);
+			}
+		});
+		add(new ConfirmableAjaxLink("logout", 634L) {
+			private static final long serialVersionUID = -2994610981053570537L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				getSession().invalidate();
+				setResponsePage(Application.get().getSignInPageClass());
+			}
+		});
+		add(new AjaxLink<Void>("profile") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				updateContents(PROFILE_EDIT, target);
+			}
+		});
+		final AboutDialog about = new AboutDialog("aboutDialog");
+		add(new AjaxLink<Void>("about") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				about.open(target);
+			}
+		});
+		add(about);
+		if (getApplication().getDebugSettings().isDevelopmentUtilitiesEnabled()) {
+		    add(dev = new DebugBar("dev"));
+		    dev.setOutputMarkupId(true);
+		} else {
+		    add(new EmptyPanel("dev").setVisible(false));
+		}		
+		add(new ExternalLink("bug", "https://issues.apache.org/jira/browse/OPENMEETINGS"));//FIXME hardcoded
+		
+		add(new ChatPanel("chatPanel"));
+		add(new WebSocketBehavior() {
+			private static final long serialVersionUID = -3311970325911992958L;
+
+			@Override
+			protected void onConnect(ConnectedMessage message) {
+				super.onConnect(message);
+				addOnlineUser(new WebClient(WebSession.get().getId(), message.getKey(), getUserId()));
+				log.debug("WebSocketBehavior::onConnect");
+			}
+			
+			@Override
+			protected void onClose(ClosedMessage message) {
+				WebClient client = getClientByKeys(getUserId(), WebSession.get().getId());
+				removeOnlineUser(client);
+				super.onClose(message);
+				log.debug("WebSocketBehavior::onClose");
+			}
+		});
+		//load preselected content
+		add(areaBehavior = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+			private static final long serialVersionUID = -1551197896975384329L;
+
+			@Override
+			protected void onTimer(AjaxRequestTarget target) {
+				OmUrlFragment area = WebSession.get().getArea();
+				updateContents(area == null ? OmUrlFragment.get() : area, target);
+				stop(target);
+				WebSession.get().setArea(null);
+			}
+		});
+	}
+	
+	public void updateContents(OmUrlFragment f, AjaxRequestTarget target) {
+		updateContents(f, target, true);
+	}
+	
+	public void updateContents(OmUrlFragment f, AjaxRequestTarget target, boolean updateFragment) {
+		BasePanel panel = getPanel(f.getArea(), f.getType());
+		if (panel != null) {
+			Component prev = contents.get(CHILD_ID);
+			if (prev != null && prev instanceof BasePanel) {
+				((BasePanel)prev).cleanup(target);
+			}
+			target.add(contents.replace(panel));
+			if (updateFragment) {
+				UrlFragment uf = new UrlFragment(target);
+				uf.set(f.getArea().name(), f.getType());
+			}
+			panel.onMenuPanelLoad(target);
+		}
+		if (dev != null){
+			target.add(dev);
+		}
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget target) {
+		OmUrlFragment uf = getUrlFragment(params);
+		if (uf != null) {
+			areaBehavior.stop(target);
+			updateContents(uf, target, false);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html
new file mode 100644
index 0000000..3171a21
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<!-- FIXME localized versions of this file need to be created -->
+	<div class="message">
+		<b>OpenMeetings - Loading ...</b><br />
+		The server is not yet completely initialized. Please try again in a couple of seconds.<br/>
+		If this message persists for several minutes contact your Sys-Administration.<br/>
+		If that message stays forever you should check the logs located in 
+		<pre>openmeetings_install_dir/log</pre> folder, probably your database user/pwd/host is wrong!
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java
new file mode 100644
index 0000000..fe82fd5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.RestartResponseException;
+
+public class NotInitedPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 5002281516467955607L;
+	
+	public NotInitedPage() {
+		if (InitializationContainer.initComplete) {
+			continueToOriginalDestination();
+			// Ups, no original destination. Go to the home page
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
new file mode 100644
index 0000000..2c80d35
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<div class="page recording">
+		<div wicket:id="info"></div>
+		<div wicket:id="player"></div>
+	</div>
+</wicket:extend>
+</html>
+
diff --git a/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
new file mode 100644
index 0000000..ab1d546
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.user.record.VideoInfo;
+import org.apache.openmeetings.web.user.record.VideoPlayer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class RecordingPage extends BaseInitedPage {
+	private static final long serialVersionUID = 1L;
+
+	public RecordingPage(PageParameters p) {
+		String hash = p.get("hash").toString();
+		FlvRecording r = null;
+		if (WebSession.get().signIn(hash)) {
+			Long recId = getRecordingId();
+			if (recId != null) {
+				r = getBean(FlvRecordingDao.class).get(recId);
+			}
+		}
+		add(new VideoInfo("info", r).setVisible(r != null), new VideoPlayer("player", r).setVisible(r != null));
+	}
+
+	@Override
+	protected void onParameterArrival(IRequestParameters requestParameters, AjaxRequestTarget target) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html
new file mode 100644
index 0000000..4f6d993
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<div wicket:id="resetPassword"></div>
+	</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java
new file mode 100644
index 0000000..a341ddb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class ResetPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;	
+	private final String RESET_PARAM = "hash";
+	
+	public ResetPage(PageParameters pp){
+		String resetHash = pp.get(RESET_PARAM).toString();
+		if (resetHash != null){
+			Object user = Application.getBean(UserDao.class).getUserByHash(resetHash);
+			if (user instanceof User){
+				add(new ResetPasswordDialog("resetPassword", (User)user));
+			}else {
+				setResponsePage(Application.get().getSignInPageClass());		
+			}
+		} else {
+			setResponsePage(Application.get().getSignInPageClass());		
+		}
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html
new file mode 100644
index 0000000..481a297
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<meta http-equiv="cache-control" content="no-cache">
+	
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<style type="text/css">
+		html,body { /* http://www.quirksmode.org/css/100percheight.html */
+			height: 100%;
+			/* prevent scrollbars */
+			margin: 0;
+			padding: 0;
+			border: 0 none;
+			overflow: hidden;
+		}
+		body {
+			background-color: #ffffff;
+		}
+		img {
+			border: 0 none;
+		}
+	</style>
+</wicket:head>
+<wicket:extend>
+<!-- <body style="width: 100%; height: 100%;"> -->
+	<div wicket:id="room" style="width: 100%; height: 100%;"></div>
+<!--  </body> -->
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java
new file mode 100644
index 0000000..debe7eb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.SECURE_HASH;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.web.user.rooms.RoomPanel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+
+public class SwfPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+
+	public SwfPage() {
+		this(new PageParameters());
+	}
+
+	public SwfPage(PageParameters pp) {
+		StringValue shash = pp.get(SECURE_HASH);
+		if (!shash.isEmpty()) {
+			SOAPLogin soapLogin = getBean(SOAPLoginDao.class).get(shash.toString());
+			Long roomId = soapLogin.getRoom_id();
+			if (roomId != null) {
+				pp = pp.mergeWith(RoomPanel.addServer(roomId, false));
+			}
+		}
+		add(new RoomPanel("room", pp));
+	}
+
+	@Override
+	protected String getApplicationName() {
+		return getBean(ConfigurationDao.class).getAppName();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
new file mode 100644
index 0000000..6dc458b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr wicket:id="type">
+				<td>
+					<label wicket:for="email"><wicket:message key="313" /></label>&nbsp;<input
+						type="radio" wicket:id="email" />
+				</td>
+				<td>
+					<label wicket:for="login"><wicket:message key="314" /></label>&nbsp;<input
+						type="radio" wicket:id="login" />
+				</td>
+			</tr>
+			<tr>
+				<td><span wicket:id="label"></span></td>
+				<td><input wicket:id="name" type="text" /></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmDialog"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
new file mode 100644
index 0000000..a61a5d2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
@@ -0,0 +1,254 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.ResetPasswordTemplate;
+import org.apache.openmeetings.web.pages.ResetPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class ForgetPasswordDialog extends AbstractFormDialog<String> {
+	private static final Logger log = Red5LoggerFactory.getLogger(ForgetPasswordDialog.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+	private String sendLbl = Application.getString(317);
+	private DialogButton send = new DialogButton("send", sendLbl);
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(122));
+	private FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private RequiredTextField<String> nameField;
+	private Form<String> form;
+	private SignInDialog s;
+	private String name;
+	private Type type = Type.email;
+    final MessageDialog confirmDialog;
+	
+	enum Type {
+		email
+		, login
+	}
+	
+	public ForgetPasswordDialog(String id) {
+		super(id, Application.getString(312));
+		add(form = new Form<String>("form") {
+			private static final long serialVersionUID = 1L;
+			private IModel<String> lblModel = Model.of(Application.getString(315));
+			private Label label = new Label("label", lblModel);
+			
+			{
+				add(feedback.setOutputMarkupId(true));
+				add(label.setOutputMarkupId(true));
+				add(nameField = new RequiredTextField<String>("name", new PropertyModel<String>(ForgetPasswordDialog.this, "name")));
+				nameField.setLabel(Model.of(Application.getString(type == Type.email ? 315 : 316)));
+				RadioGroup<Type> rg = new RadioGroup<Type>("type", new PropertyModel<Type>(ForgetPasswordDialog.this, "type"));
+				add(rg.add(new Radio<Type>("email", Model.of(Type.email)).setOutputMarkupId(true))
+						.add(new Radio<Type>("login", Model.of(Type.login)).setOutputMarkupId(true))
+						.setOutputMarkupId(true));
+				rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						lblModel.setObject(Application.getString(type == Type.email ? 315 : 316));
+						nameField.setLabel(Model.of(Application.getString(type == Type.email ? 315 : 316)));
+						target.add(label);
+					}
+				});
+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						ForgetPasswordDialog.this.onSubmit(target);
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						ForgetPasswordDialog.this.onError(target);
+					}
+				});
+			}
+			
+			@Override
+			protected void onValidate() {
+				UserDao dao = getBean(UserDao.class);
+				String n = nameField.getConvertedInput();
+				if (n != null) {
+					if (type == Type.email && null == dao.getByEmail(n)) {
+						error(Application.getString(318));
+					}
+					if (type == Type.login && null == dao.getByLogin(n, User.Type.user, null)) {
+						error(Application.getString(320));
+					}
+				}
+			}
+			
+			@Override
+			protected void onDetach() {
+				lblModel.detach();
+				super.onDetach();
+			}
+		});
+		confirmDialog = new MessageDialog("confirmDialog", Application.getString(312), Application.getString(321), DialogButtons.OK, DialogIcon.INFO){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+		        behavior.setOption("dialogClass", Options.asString("no-close"));
+				behavior.setOption("closeOnEscape", false);
+			}
+			
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				s.open(target);
+			}
+		};
+		add(confirmDialog);
+	}
+
+	@Override
+	public boolean isDefaultCloseEventEnabled()	{
+		return true;
+	}
+	
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (send.equals(button)){
+			confirmDialog.open(target);
+		} else {
+			s.open(target);
+		}
+	}
+
+	public void setSignInDialog(SignInDialog s) {
+		this.s = s;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(send, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		resetUser(type == Type.email ? name : "", type == Type.login ? name : ""
+			, getBean(ConfigurationDao.class).getBaseUrl() + getRequestCycle().urlFor(ResetPage.class, new PageParameters()).toString().substring(2));
+	}
+
+	/**
+	 * reset a username by a given mail oder login by sending a mail to the
+	 * registered EMail-Address
+	 * 
+	 * @param email
+	 * @param username
+	 * @param appLink
+	 * @return
+	 */
+	private Long resetUser(String email, String username, String appLink) {
+		try {
+			UserDao userDao = getBean(UserDao.class);
+			log.debug("resetUser " + email);
+
+			// check if Mail given
+			if (email.length() > 0) {
+				// log.debug("getAdresses_id "+addr_e.getAdresses_id());
+				User us = userDao.getByEmail(email);
+				if (us != null) {
+					sendHashByUser(us, appLink, userDao);
+					return new Long(-4);
+				} else {
+					return new Long(-9);
+				}
+			} else if (username.length() > 0) {
+				User us = userDao.getByLogin(username, User.Type.user, null);
+				if (us != null) {
+					sendHashByUser(us, appLink, userDao);
+					return new Long(-4);
+				} else {
+					return new Long(-3);
+				}
+			}
+		} catch (Exception e) {
+			log.error("[resetUser]", e);
+			return new Long(-1);
+		}
+		return new Long(-2);
+	}
+
+	private void sendHashByUser(User us, String appLink, UserDao userDao) throws Exception {
+		String loginData = us.getLogin() + new Date();
+		log.debug("User: " + us.getLogin());
+		us.setResethash(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(loginData));
+		userDao.update(us, -1L);
+		String reset_link = appLink + "?hash=" + us.getResethash();
+
+		String email = us.getAdresses().getEmail();
+
+		String template = ResetPasswordTemplate.getEmail(reset_link);
+
+		getBean(MailHandler.class).send(email, Application.getString(517), template);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
new file mode 100644
index 0000000..1163346
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<table>
+			<tr>
+				<td wicket:id="message">[message]</td>
+			</tr>
+		</table>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
new file mode 100644
index 0000000..16ab6a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.basic.Label;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class KickMessageDialog extends AbstractDialog<String> {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public KickMessageDialog(String id) {
+		super(id, "");
+		add(new Label("message", Application.getString(606)));
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+            protected String $()  {
+                return this.$(Options.asString("open"));
+            }
+        });
+	};
+	
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("closeOnEscape", false);
+        behavior.setOption("dialogClass", Options.asString("no-close"));
+        behavior.setOption("resizable", false);
+	}
+
+	public String getOnClickJavaScript() {
+		return "$('#" + getButtons().get(0).getMarkupId() +"').click(function(e){$('#" + getMarkupId() +"').close(); })";
+	}
+
+	@Override
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		WebSession.setKickedByAdmin(false);
+		Application.get().restartResponseAtSignInPage();
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
new file mode 100644
index 0000000..3f9cf22
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td class="desc"><wicket:message key="117" /></td>
+				<td><input wicket:id="firstName" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="118" /></td>
+				<td><input wicket:id="lastName" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="114" /></td>
+				<td><input wicket:id="login" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="115" /></td>
+				<td><input wicket:id="password" type="password" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="116" /></td>
+				<td><input wicket:id="confirmPassword" type="password" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="119" /></td>
+				<td><input wicket:id="email" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="1143" /></td>
+				<td><select wicket:id="tz"></select></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="120" /></td>
+				<td><select wicket:id="state"></select></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="111" /></td>
+				<td><select wicket:id="lang"></select></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmRegistration"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
new file mode 100644
index 0000000..d301823
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -0,0 +1,291 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.LanguageDropDown;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class RegisterDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RegisterDialog.class, webAppRootKey);
+	private DialogButton cancelBtn = new DialogButton("cancel", Application.getString(122));
+	private DialogButton registerBtn = new DialogButton("register", Application.getString(121));
+	private FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private final IModel<String> tzModel = Model.of(WebSession.get().getClientTZCode());
+	private final DropDownChoice<String> tzDropDown = new DropDownChoice<String>("tz", tzModel, AVAILABLE_TIMEZONES);
+	private RegisterForm form;
+	private SignInDialog s;
+	private String firstName;
+	private String lastName;
+	private String login;
+	private String password;
+	private String email;
+	private State state;
+	private Long lang;
+
+	final MessageDialog confirmRegistration;
+	private boolean sendConfirmation = false;
+	private boolean sendEmailAtRegister = false;
+
+	public RegisterDialog(String id) {
+		super(id, Application.getString(113));
+		add(form = new RegisterForm("form"));
+		form.setOutputMarkupId(true);
+		tzDropDown.setOutputMarkupId(true);
+
+		confirmRegistration = new MessageDialog("confirmRegistration", Application.getString(235),
+				Application.getString(674), DialogButtons.OK, DialogIcon.INFO) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("dialogClass", Options.asString("no-close"));
+				behavior.setOption("closeOnEscape", false);
+			}
+
+			@Override
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				s.open(target);
+			}
+		};
+		add(confirmRegistration);
+		reset();
+	}
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("closeOnEscape", false);
+	}
+
+	public void setSignInDialog(SignInDialog s) {
+		this.s = s;
+	}
+
+	public void setClientTimeZone() {
+		tzModel.setObject(WebSession.get().getClientTZCode());
+	}
+	
+	@Override
+	public int getWidth() {
+		return 400;
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(registerBtn, cancelBtn);
+	}
+
+	public void reset() {
+		firstName = null;
+		lastName = null;
+		login = null;
+		password = null;
+		form.confirmPassword.setModelObject(null);
+		email = null;
+		lang = WebSession.get().getLanguageByBrowserLocale();
+		state = WebSession.get().getCountryByBrowserLocale();
+	}
+
+	public void onOpen(AjaxRequestTarget target) {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		String baseURL = cfgDao.getBaseUrl();
+		sendEmailAtRegister = 1 == cfgDao.getConfValue("sendEmailAtRegister", Integer.class, "0");
+		sendConfirmation = !Strings.isEmpty(baseURL)
+				&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+		long messageCode = 236;
+		if (sendConfirmation && sendEmailAtRegister) {
+			messageCode = 674;
+		} else if (sendConfirmation) {
+			messageCode = 1591;
+		}
+		confirmRegistration.setModelObject(Application.getString(messageCode));
+		reset();
+		target.add(form);
+	}
+
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (registerBtn.equals(button)) {
+			confirmRegistration.open(target);
+		} else {
+			s.open(target);
+		}
+	}
+
+	@Override
+	protected DialogButton getSubmitButton() {
+		return registerBtn;
+	}
+
+	@Override
+	public Form<Void> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		String hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(
+				login + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+
+		try {
+			getBean(IUserManager.class).registerUserInit(UserDao.getDefaultRights(), login, password, lastName
+					, firstName, email, null /* age/birthday */, "" /* street */
+					, "" /* additionalname */, "" /* fax */, "" /* zip */, state.getState_id()
+					, "" /* town */, lang, true /* sendWelcomeMessage */
+					, Arrays.asList(getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)),
+					"" /* phone */, false, sendConfirmation, TimeZone.getTimeZone(tzModel.getObject()),
+					false /* forceTimeZoneCheck */, "" /* userOffers */, "" /* userSearchs */, false /* showContactData */,
+					true /* showContactDataToContacts */, hash);
+
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+
+	}
+
+	@Override
+	protected void onDetach() {
+		tzModel.detach();
+		super.onDetach();
+	}
+	
+	class RegisterForm extends StatelessForm<Void> {
+		private static final long serialVersionUID = 1L;
+		private PasswordTextField confirmPassword;
+		private PasswordTextField passwordField;
+		private RequiredTextField<String> emailField;
+		private RequiredTextField<String> loginField;
+		private RequiredTextField<String> firstNameField;
+		private RequiredTextField<String> lastNameField;
+		private LanguageDropDown langField;
+		private DropDownChoice<State> stateField;
+
+		public RegisterForm(String id) {
+			super(id);
+			add(feedback.setOutputMarkupId(true));
+			ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+			add(firstNameField = new RequiredTextField<String>("firstName", new PropertyModel<String>(
+					RegisterDialog.this, "firstName")));
+			firstNameField.setLabel(Model.of(Application.getString(117)));
+			add(lastNameField = new RequiredTextField<String>("lastName", new PropertyModel<String>(
+					RegisterDialog.this, "lastName")));
+			lastNameField.setLabel(Model.of(Application.getString(118)));
+			add(loginField = new RequiredTextField<String>("login", new PropertyModel<String>(RegisterDialog.this,
+					"login")));
+			loginField.setLabel(Model.of(Application.getString(114)));
+			loginField.add(minimumLength(getMinLoginLength(cfgDao)));
+			add(passwordField = new PasswordTextField("password", new PropertyModel<String>(RegisterDialog.this,
+					"password")));
+			passwordField.setLabel(Model.of(Application.getString(115)));
+			passwordField.setResetPassword(true).add(minimumLength(getMinPasswdLength(cfgDao)));
+			add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()).setResetPassword(true));
+			confirmPassword.setLabel(Model.of(Application.getString(116)));
+			add(emailField = new RequiredTextField<String>("email", new PropertyModel<String>(RegisterDialog.this,
+					"email")));
+			emailField.setLabel(Model.of(Application.getString(119)));
+			emailField.add(RfcCompliantEmailAddressValidator.getInstance());
+			add(langField = new LanguageDropDown("lang", new PropertyModel<Long>(RegisterDialog.this, "lang")));
+			langField.setRequired(true).setLabel(Model.of(Application.getString(111)));
+			add(tzDropDown.setRequired(true).setLabel(Model.of(Application.getString(1143))));
+			add(stateField = new DropDownChoice<State>("state", new PropertyModel<State>(RegisterDialog.this, "state"),
+					getBean(StateDao.class).getStates(), new ChoiceRenderer<State>("name", "state_id")));
+			stateField.setRequired(true).setLabel(Model.of(Application.getString(120)));
+			add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					RegisterDialog.this.onSubmit(target);
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target, Form<?> form) {
+					RegisterDialog.this.onError(target);
+				}
+			});
+		}
+
+		@Override
+		protected void onValidate() {
+			if (passwordField.getConvertedInput() == null
+					|| !passwordField.getConvertedInput().equals(confirmPassword.getConvertedInput())) {
+				error(Application.getString(232));
+			}
+			if (!getBean(UserDao.class).checkEmail(emailField.getConvertedInput(), User.Type.user, null, null)) {
+				error(Application.getString(1000));
+			}
+			if (!getBean(UserDao.class).checkLogin(loginField.getConvertedInput(), User.Type.user, null, null)) {
+				error(Application.getString(105));
+			}
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
new file mode 100644
index 0000000..fd73713
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td><label wicket:for="login"><wicket:message key="314" /></label></td>
+				<td><input type="text" readonly wicket:id="login" /></td>
+			</tr>
+			<tr>
+				<td><label><wicket:message key="328" /></label></td>
+				<td><input type="password" wicket:id="password" /></td>
+			</tr>
+			<tr>
+				<td><label><wicket:message key="329" /></label></td>
+				<td><input type="password" wicket:id="confirmPassword" /></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmReset"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
new file mode 100644
index 0000000..0f0d65d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class ResetPasswordDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = -523469331995677748L;
+	private DialogButton resetBtn = new DialogButton("reset", Application.getString(327));
+	private Form<String> form;
+	private FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private PasswordTextField password;
+	private final User user;
+    final MessageDialog confirmReset;
+
+	public ResetPasswordDialog(String id, final User user) {
+		super(id, Application.getString(325));
+		this.user = user;
+		add(form = new Form<String>("form"){
+			private static final long serialVersionUID = -4553809631029292229L;
+			private TextField<String> login;
+			private PasswordTextField confirmPassword;
+			{
+				add(feedback.setOutputMarkupId(true));
+				add(login = new TextField<String>("login", Model.of(user.getLogin())));
+				login.setOutputMarkupId(true);
+				add(password = new PasswordTextField("password", new Model<String>()));
+				password.setOutputMarkupId(true);
+				password.setLabel(Model.of(Application.getString(328)));
+				ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+				password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
+				add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
+				confirmPassword.setOutputMarkupId(true);
+				confirmPassword.setLabel(Model.of(Application.getString(329)));
+				confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));
+
+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = 5257502637636428620L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						ResetPasswordDialog.this.onSubmit(target);
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						ResetPasswordDialog.this.onError(target);
+					}
+				});
+			}
+
+			@Override
+			protected void onValidate() {
+				String pass = password.getConvertedInput();
+				if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
+					error(Application.getString(232));
+				}
+				super.onValidate();
+			}
+			
+		});
+		confirmReset = new MessageDialog("confirmReset", Application.getString(325), Application.getString(332), DialogButtons.OK, DialogIcon.INFO){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+		        behavior.setOption("dialogClass", Options.asString("no-close"));
+				behavior.setOption("closeOnEscape", false);
+			}
+			
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				setResponsePage(Application.get().getSignInPageClass());
+			}
+		};
+		add(confirmReset);
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+	}
+	
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+        behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("closeOnEscape", false);
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(resetBtn);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return resetBtn;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		try {
+			getBean(UserDao.class).update(user, password.getConvertedInput(), user.getUser_id());
+		} catch (Exception e) {
+			error(e.getMessage());
+		}
+	}
+	
+	@Override
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (resetBtn.equals(button)){
+			confirmReset.open(target);
+		} else {
+			setResponsePage(Application.get().getSignInPageClass());
+		}
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {
+			private static final long serialVersionUID = -8870674570404919597L;
+
+			@Override
+            protected String $()
+            {
+                return this.$(Options.asString("open"));
+            }
+        });
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
new file mode 100644
index 0000000..154cf79
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript" src="js/openmeetings_functions.js"></script>
+</wicket:head>
+<wicket:panel>
+	<form wicket:id="signin">
+		<table>
+			<tr>
+				<td>
+					<table>
+						<tr>
+							<td class="desc"><wicket:message key="109" /></td>
+							<td><input wicket:id="login" type="text" value="" /></td>
+						</tr>
+						<tr>
+							<td class="desc"><wicket:message key="110" /></td>
+							<td><input wicket:id="pass" type="password" value="" /></td>
+						</tr>
+						<tr wicket:id="ldap">
+							<td class="desc"><wicket:message key="1372" /></td>
+							<td><select wicket:id="domain"></select></td>
+						</tr>
+						<tr>
+							<td></td>
+							<td style="white-space: nowrap;"><input wicket:id="rememberMe" 
+								type="checkbox" /><label wicket:for="rememberMe"><wicket:message key="288" /></label></td>
+						</tr>
+						<tr>
+							<td><a wicket:id="forget"><wicket:message key="311"/></a></td>
+							<td><a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a></td>
+						</tr>
+					</table>
+				</td>
+				<td wicket:id="oauthContainer" style="border-left: 2px dotted;">
+					<div wicket:id="oauthList">
+						<button wicket:id="oauthBtn"><img wicket:id="icon" width="16" height="16"/><span wicket:id="label"></span></button>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<span wicket:id="feedback" class="error"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
new file mode 100644
index 0000000..84f321b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
@@ -0,0 +1,309 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
+import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.pages.auth.SignInPage.allowOAuthLogin;
+import static org.apache.openmeetings.web.pages.auth.SignInPage.allowRegister;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.OmAuthenticationStrategy;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.Strings;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.effect.JQueryEffectBehavior;
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class SignInDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private Form<String> form;
+	private DialogButton loginBtn = new DialogButton("login", Application.getString(112));
+	private DialogButton registerBtn = new DialogButton("register", Application.getString(123));
+    private String password;
+    private String login;
+    private boolean rememberMe = false;
+    private RegisterDialog r;
+    private ForgetPasswordDialog f;
+    private LdapConfig domain;
+    private FeedbackPanel feedback = new FeedbackPanel("feedback");
+    
+	public SignInDialog(String id) {
+		super(id, Application.getString(108));
+		add(form = new SignInForm("signin"));
+		add(new AjaxClientInfoBehavior());
+	}
+
+	public void setRegisterDialog(RegisterDialog r) {
+		this.r = r;
+	}
+
+	public void setForgetPasswordDialog(ForgetPasswordDialog f) {
+		this.f = f;
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+            protected String $()
+            {
+                return this.$(Options.asString("open"));
+            }
+        });
+	}
+	
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		//behavior.setOption("autoOpen", true); //TODO need to be updated as soon as API will be added
+		behavior.setOption("closeOnEscape", false);
+        behavior.setOption("dialogClass", Options.asString("no-close"));
+        behavior.setOption("resizable", false);
+	}
+	
+	@Override
+	public boolean isDefaultCloseEventEnabled() {
+		return false;
+	}
+	
+	@Override
+	public int getWidth() {
+		return allowOAuthLogin()? 550: 450;
+	}
+	
+	@Override
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (registerBtn.equals(button)) {
+			r.setClientTimeZone();
+			r.open(target);
+		}
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		List<DialogButton> list = new ArrayList<DialogButton>();
+		if (allowRegister()) {
+			list.add(registerBtn);
+		}
+		list.add(loginBtn);
+		return list;
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return loginBtn;
+	}
+
+	@Override
+	public Form<String> getForm() {
+		return form;
+	}
+	
+	private void shake(AjaxRequestTarget target) {
+		target.appendJavaScript(JQueryEffectBehavior.toString("#" + getMarkupId(), "shake"));
+	}
+	
+	@Override
+	public void onClick(AjaxRequestTarget target, DialogButton button) {
+		if (registerBtn.equals(button) || WebSession.get().isSignedIn()) {
+			super.onClick(target, button);
+		}
+	}
+	
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		shake(target);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		if (domain.getAddDomainToUserName()) {
+			login = login + "@" + domain.getDomain();
+		}
+		OmAuthenticationStrategy strategy = getAuthenticationStrategy();
+		WebSession ws = WebSession.get();
+		Type type = domain.getLdapConfigId() > 0 ? Type.ldap : Type.user;
+		if (ws.signIn(login, password, type, domain.getLdapConfigId())) {
+ 			setResponsePage(Application.get().getHomePage());
+			if (rememberMe) {
+				strategy.save(login, password, type, domain.getLdapConfigId());
+			} else {
+				strategy.remove();
+			}
+		} else {
+			strategy.remove();
+			if (ws.getLoginError() != null) {
+				ErrorValue eValue = getBean(ErrorDao.class).get(-1 * ws.getLoginError());
+				if (eValue != null) {
+					error(Application.getString(eValue.getFieldvalues_id()));
+					target.add(feedback);
+				}
+			}
+			shake(target);
+		}
+	}
+	
+	class SignInForm extends StatelessForm<String> {
+		private static final long serialVersionUID = 1L;
+		private PasswordTextField passField;
+		private RequiredTextField<String> loginField;
+
+		public SignInForm(String id) {
+			super(id);
+			
+			if (WebSession.get().isSignedIn()) {
+				alreadyLoggedIn();
+			}
+			add(feedback.setOutputMarkupId(true));
+			add(loginField = new RequiredTextField<String>("login", new PropertyModel<String>(SignInDialog.this, "login")));
+			loginField.setLabel(Model.of(Application.getString(114)));
+			add(passField = new PasswordTextField("pass", new PropertyModel<String>(SignInDialog.this, "password")).setResetPassword(true));
+			passField.setLabel(Model.of(Application.getString(115)));
+			List<LdapConfig> ldaps = getBean(LdapConfigDao.class).get();
+			int selectedLdap = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LDAP_ID, Integer.class, "0");
+			domain = ldaps.get(selectedLdap < ldaps.size() && selectedLdap > 0 ? selectedLdap : 0);
+			add(new WebMarkupContainer("ldap")
+				.add(new DropDownChoice<LdapConfig>("domain", new PropertyModel<LdapConfig>(SignInDialog.this, "domain")
+						, ldaps, new ChoiceRenderer<LdapConfig>("name", "ldapConfigId"))).setVisible(ldaps.size() > 1));
+			add(new CheckBox("rememberMe", new PropertyModel<Boolean>(SignInDialog.this, "rememberMe")).setOutputMarkupId(true));
+			AjaxButton ab = new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					SignInDialog.this.onSubmit(target);
+				}
+				
+				@Override
+				protected void onError(AjaxRequestTarget target, Form<?> form) {
+					SignInDialog.this.onError(target);
+				}
+			};
+			add(ab);
+			setDefaultButton(ab);
+			add(new AjaxLink<Void>("forget") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick(AjaxRequestTarget target) {
+					SignInDialog.this.close(target, null);
+					f.open(target);
+				}
+			});
+			add(new Link<Void>("netTest") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick() {
+					PageParameters pp = new PageParameters();
+					pp.add("swf", RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType()
+							? "networktestingdebug.swf10.swf" : "networktesting.swf10.swf");
+					setResponsePage(SwfPage.class, pp);
+				}
+			});
+			add(new WebMarkupContainer("oauthContainer").add(
+				new ListView<OAuthServer>("oauthList", getBean(OAuth2Dao.class).getActive()) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void populateItem(final ListItem<OAuthServer> item) {
+						Button btn = new Button("oauthBtn");
+						Image icon = new Image("icon", new Model<String>());
+						icon.setVisible(!Strings.isEmpty(item.getModelObject().getIconUrl()));
+						icon.add(new AttributeModifier("src", new AbstractReadOnlyModel<String>() {
+							private static final long serialVersionUID = 1L;
+
+							@Override
+							public String getObject() {
+								return item.getModelObject().getIconUrl();
+							}
+							
+						}));
+						btn.add(icon);
+						btn.add(new Label("label", item.getModelObject().getName()))
+							.add(new AjaxEventBehavior("click") {
+								private static final long serialVersionUID = 1L;
+								
+								@Override
+								protected void onEvent(AjaxRequestTarget target) {
+									PageParameters parameters = new PageParameters();
+									parameters.add("oauthid", item.getModelObject().getId());
+									setResponsePage(SignInPage.class, parameters);
+								}
+							});
+						item.add(btn);
+					}
+				}).setVisible(allowOAuthLogin()));
+		}
+
+		private void alreadyLoggedIn() {
+			// logon successful. Continue to the original destination
+			continueToOriginalDestination();
+			// Ups, no original destination. Go to the home page
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
new file mode 100644
index 0000000..3b0451f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<style>
+			input:not([type='checkbox']):not([type='radio']), select {
+				width: 170px;
+			}
+			td.desc {
+				width: 200px;
+			}
+		</style>
+	</wicket:head>
+	<wicket:extend>
+		<script type="text/javascript">
+			$(function(){
+				$('#area').val(location.hash);
+			});
+		</script>
+		<div wicket:id="signin"></div>
+		<div wicket:id="register"></div>
+		<div wicket:id="forget"></div>
+		<div wicket:id="kick"></div>
+	</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
new file mode 100644
index 0000000..686c737
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
@@ -0,0 +1,363 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.BaseInitedPage;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.flow.RedirectToUrlException;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SignInPage extends BaseInitedPage {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(SignInPage.class, webAppRootKey);
+	private SignInDialog d;
+	private KickMessageDialog m;
+	
+	static boolean allowRegister() {
+		return "1".equals(getBean(ConfigurationDao.class).getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0"));
+	}
+	
+	static boolean allowOAuthLogin() {
+		return getBean(OAuth2Dao.class).getActive().size() > 0;
+	}
+	
+	public SignInPage(PageParameters p) {
+		super();
+		StringValue oauthid = p.get("oauthid");
+		if (!oauthid.isEmpty()) { // oauth2 login
+			try {
+				long serverId = oauthid.toLong(-1);
+				OAuthServer server = getBean(OAuth2Dao.class).get(serverId);
+				log.debug("OAuthServer=" + server);
+				if (server == null) {
+					log.warn("OAuth server id=" + serverId + " not found");
+					return;
+				}
+				
+				if (p.get("code").toString() != null) { // got code
+					String code = p.get("code").toString();
+					log.debug("OAuth response code=" + code);
+				 	AuthInfo authInfo = getToken(code, server);
+				 	if (authInfo == null) return;
+				 	log.debug("OAuthInfo=" + authInfo);
+				 	Map<String, String> authParams = getAuthParams(authInfo.accessToken, code, server);
+				 	if (authParams != null) {
+				 		loginViaOAuth2(authParams, serverId);
+				 	}
+				} else { // redirect to get code
+					String redirectUrl = prepareUrlParams(server.getRequestKeyUrl(), server.getClientId(), 
+							null, null, getRedirectUri(server, this), null);
+					log.debug("redirectUrl=" + redirectUrl);
+					throw new RedirectToUrlException(redirectUrl);
+				}
+			} catch (IOException e) {
+				log.error("OAuth2 login error", e);
+			} catch (NoSuchAlgorithmException e) {
+				log.error("OAuth2 login error", e);
+			}
+		}
+		//will try to login directly using parameters sent by POST
+		IRequestParameters pp = RequestCycle.get().getRequest().getPostParameters();
+		StringValue login = pp.getParameterValue("login"), password = pp.getParameterValue("password");
+		if (!login.isEmpty() && !password.isEmpty()) {
+			if (WebSession.get().signIn(login.toString(), password.toString(), Type.user, null)) {
+	 			setResponsePage(Application.get().getHomePage());
+			} else {
+				log.error("Failed to login using POST parameters passed");
+			}
+		}
+		
+		RegisterDialog r = new RegisterDialog("register");
+		ForgetPasswordDialog f = new ForgetPasswordDialog("forget");
+		d = new SignInDialog("signin");
+		d.setRegisterDialog(r);
+		d.setForgetPasswordDialog(f);
+		r.setSignInDialog(d);
+		f.setSignInDialog(d);
+		m = new KickMessageDialog("kick");
+		add(d.setVisible(!WebSession.get().isKickedByAdmin()), 
+				r.setVisible(allowRegister()), f, m.setVisible(WebSession.get().isKickedByAdmin()));
+	}
+	
+	public SignInPage() {
+		this(new PageParameters());
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(OnDomReadyHeaderItem.forScript(m.getOnClickJavaScript()));
+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget arg1) {
+		WebSession.get().setArea(getUrlFragment(params));
+	}
+	
+	// ============= OAuth2 methods =============
+		
+	public String prepareUrlParams(String urlTemplate, String clientId, String clientSecret, 
+			String clientToken, String redirectUri, String code) throws UnsupportedEncodingException {
+		String result = urlTemplate;
+		if (clientId != null) {
+			result = result.replace("{$client_id}", clientId);
+		}
+		if (clientSecret != null) {
+			result = result.replace("{$client_secret}", clientSecret);
+		}
+		if (clientToken != null) {
+			result = result.replace("{$access_token}", clientToken);
+		}
+		if (redirectUri != null) {
+			result = result.replace("{$redirect_uri}", URLEncoder.encode(redirectUri, "UTF-8"));
+		}
+		if (code != null) {
+			result = result.replace("{$code}", code);
+		}
+		return result;
+	}
+		
+	public static String getRedirectUri(OAuthServer server, Component component) {
+		String result = "";
+		if (server.getId() != null) {
+			try {
+				String base = getBean(ConfigurationDao.class).getBaseUrl();
+				URI uri = new URI(base + component.urlFor(SignInPage.class, new PageParameters().add("oauthid", server.getId())));
+				result = uri.normalize().toString();
+			} catch (URISyntaxException e) {
+				log.error("Unexpected error while getting redirect URL", e);
+			}
+		}
+		return result;
+	}
+		
+	private void prepareConnection(URLConnection connection) {
+		if (!(connection instanceof HttpsURLConnection)) return;
+		ConfigurationDao configurationDao = getBean(ConfigurationDao.class);
+		Boolean ignoreBadSSL = configurationDao.getConfValue(CONFIG_IGNORE_BAD_SSL, String.class, "no").equals("yes");
+		if (!ignoreBadSSL) return;
+		TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
+			public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+			public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+
+			public X509Certificate[] getAcceptedIssuers() {
+				return null;
+			}
+				
+	    } };
+		try {
+			SSLContext sslContext = SSLContext.getInstance("SSL");
+			sslContext.init( null, trustAllCerts, new java.security.SecureRandom() );
+		    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+			((HttpsURLConnection) connection).setSSLSocketFactory(sslSocketFactory);
+			((HttpsURLConnection) connection).setHostnameVerifier(new HostnameVerifier() {
+					
+				public boolean verify(String arg0, SSLSession arg1) {
+					return true;
+				}
+					
+			});
+		} catch (Exception e) {
+			log.error("[prepareConnection]", e);
+		}
+	}
+		
+	private AuthInfo getToken(String code, OAuthServer server) throws IOException {
+		String requestTokenBaseUrl = server.getRequestTokenUrl();
+		// build url params to request auth token
+		String requestTokenParams = server.getRequestTokenAttributes();
+		requestTokenParams = prepareUrlParams(requestTokenParams, server.getClientId(), server.getClientSecret(), 
+				null, getRedirectUri(server, this), code);
+		// request auth token
+		HttpURLConnection urlConnection = (HttpURLConnection) new URL(requestTokenBaseUrl).openConnection();
+		prepareConnection(urlConnection);
+		urlConnection.setRequestMethod("POST");
+		urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+		urlConnection.setRequestProperty("charset", "utf-8");
+		urlConnection.setRequestProperty("Content-Length", String.valueOf(requestTokenParams.length()));
+		urlConnection.setDoInput(true);
+		urlConnection.setDoOutput(true);
+		urlConnection.setUseCaches(false);
+		DataOutputStream paramsOutputStream = new DataOutputStream(urlConnection.getOutputStream());
+		paramsOutputStream.writeBytes(requestTokenParams);
+		paramsOutputStream.flush();
+		String sourceResponse = IOUtils.toString(urlConnection.getInputStream(), "utf-8");
+		// parse json result
+		AuthInfo result = new AuthInfo();
+		try {
+			JSONObject jsonResult = new JSONObject(sourceResponse.toString());
+			if (jsonResult.has("access_token")) {
+				result.accessToken = jsonResult.getString("access_token");
+			}
+			if (jsonResult.has("refresh_token")) {
+				result.refreshToken = jsonResult.getString("refresh_token");
+			}
+			if (jsonResult.has("token_type")) {
+				result.tokenType = jsonResult.getString("token_type");
+			}
+			if (jsonResult.has("expires_in")) {
+				result.expiresIn = jsonResult.getLong("expires_in");
+			}
+		} catch (JSONException e) {
+			// try to parse as canonical
+			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse.toString());
+			result.accessToken = parsedMap.get("access_token");
+			result.refreshToken = parsedMap.get("refresh_token");
+			result.tokenType = parsedMap.get("token_type");
+			try {
+				result.expiresIn = Long.valueOf(parsedMap.get("expires_in"));
+			} catch (NumberFormatException nfe) {}
+		}
+		// access token must be specified
+		if (result.accessToken == null) {
+			log.error("Response doesn't contain access_token field:\n" + sourceResponse.toString());
+			return null;
+		}
+		return result;
+	}
+	
+	private Map<String, String> parseCanonicalResponse(String response) {
+		String[] parts = response.split("&");
+		Map<String, String> result = new HashMap<String, String>();
+		for (String part: parts) {
+			String pair[] = part.split("=");
+			if (pair.length > 1) {
+				result.put(pair[0], pair[1]);
+			}
+		}
+		return result;
+	}
+	
+	private Map<String, String> getAuthParams(String token, String code, OAuthServer server) throws IOException {
+		// get attributes names
+		String loginAttributeName = server.getLoginParamName();
+		String emailAttributeName = server.getEmailParamName();
+		String firstname = server.getFirstnameParamName();
+		String lastname = server.getLastnameParamName();
+		// prepare url
+		String requestInfoUrl = server.getRequestInfoUrl();
+		requestInfoUrl = prepareUrlParams(requestInfoUrl, server.getClientId(), server.getClientSecret(), 
+				token, getRedirectUri(server, this), code);
+		// send request
+		URLConnection connection = new URL(requestInfoUrl).openConnection();
+		prepareConnection(connection);
+		String sourceResponse = IOUtils.toString(connection.getInputStream(), "utf-8");
+        // parse json result
+        Map<String, String> result = new HashMap<String, String>();
+        try {
+			JSONObject parsedJson = new JSONObject(sourceResponse);
+			result.put("login", parsedJson.getString(loginAttributeName));
+			result.put("email", parsedJson.getString(emailAttributeName));
+			if (parsedJson.has(firstname)) {
+				result.put("firstname", parsedJson.getString(firstname));
+			}
+			if (parsedJson.has(lastname)) {
+				result.put("lastname", parsedJson.getString(lastname));
+			}
+		} catch (JSONException e) {
+			// try to parse response as canonical
+			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse);
+			result.put("login", parsedMap.get(loginAttributeName));
+			result.put("email", parsedMap.get(emailAttributeName));
+			if (parsedMap.containsKey(firstname)) {
+				result.put("firstname", parsedMap.get(firstname));
+			}
+			if (parsedMap.containsKey(lastname)) {
+				result.put("lastname", parsedMap.get(lastname));
+			}
+		}
+		return result;
+	}
+	
+	private void loginViaOAuth2(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException {
+		User u = getBean(IUserManager.class).loginOAuth(params, serverId);
+		
+		if (u != null && WebSession.get().signIn(u)) {
+ 			setResponsePage(Application.get().getHomePage());
+		} else {
+			log.error("Failed to login via OAuth2!");
+		}
+	}
+		
+	private static class AuthInfo {
+			
+		String accessToken;
+		String refreshToken;
+		String tokenType;
+		long expiresIn;
+			
+		@Override
+		public String toString() {
+			return "AuthInfo [accessToken=" + accessToken + ", refreshToken="
+					+ refreshToken + ", tokenType=" + tokenType
+					+ ", expiresIn=" + expiresIn + "]";
+		}
+			
+	}
+	
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html
new file mode 100644
index 0000000..ef59478
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<h2>
+		<a wicket:id="url"><wicket:message key="install.wizard.congrats.enter"/></a>
+	</h2>
+	<br />
+	<br />
+	<wicket:message key="install.wizard.congrats.port"/>
+	<br />
+	<a href="public/config.xml"><wicket:message key="install.wizard.congrats.config"/></a>
+	<br />
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.4em"><wicket:message key="install.wizard.congrats.mail"/></span></b>
+	<br />
+	<br />
+
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/mail-lists.html" target="_blank">http://openmeetings.apache.org/mail-lists.html</a></span>
+	<br />
+	<br />
+
+
+	<b> <span style="font-size: 1.4em"><wicket:message key="install.wizard.congrats.commercial"/></span></b>
+	<br />
+	<br />
+
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
new file mode 100644
index 0000000..6e7a2e5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class CongratulationsPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	public CongratulationsPanel(String id) {
+		super(id);
+		
+		add(new Link<Void>("url") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick() {
+				setResponsePage(Application.get().getHomePage());
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
new file mode 100644
index 0000000..71a4dd3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userData">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.db.step.field.title"/></legend>
+		<div wicket:id="note"></div>
+		<form class="adminForm" wicket:id="form">
+            <div class="formelement">
+                  <label wicket:for="dbType"><wicket:message key="install.wizard.db.step.dbtype" /></label> <select wicket:id="dbType"></select>
+            </div>
+            <div wicket:id="hostelem" class="formelement">
+                  <label wicket:for="host"><wicket:message key="install.wizard.db.step.host" /></label> <input type="text" wicket:id="host"/>
+            </div>
+            <div wicket:id="portelem" class="formelement">
+                  <label wicket:for="port"><wicket:message key="install.wizard.db.step.port" /></label> <input type="text" wicket:id="port"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="dbname"><wicket:message key="install.wizard.db.step.dbname" /></label> <input type="text" wicket:id="dbname"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="login"><wicket:message key="install.wizard.db.step.user" /></label> <input type="text" wicket:id="login"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="password"><wicket:message key="install.wizard.db.step.pass" /></label> <input type="text" wicket:id="password"/>
+            </div>
+            <div class="formelement" style="max-width:860px;">
+            	<button class="align-right" wicket:id="check"><wicket:message key="install.wizard.db.step.check"/></button>
+            </div>
+		</form>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
new file mode 100644
index 0000000..d59cb47
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<p wicket:id="desc"></p>
+	<div wicket:id="container" style="margin: 20px;">
+		<div wicket:id="progress"><!-- div><span wicket:id="value"></span>%</div--></div>
+		<div wicket:id="status"></div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
new file mode 100644
index 0000000..f6f8cd8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userData">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step1.userdata"/></legend>
+		<ul>
+			<li><label wicket:for="cfg.username"><wicket:message key="install.wizard.params.step1.username"/></label>
+				<input wicket:id="cfg.username" wicket:message="title:install.wizard.params.step1.username.title" type="text" />
+			</li>
+			<li><label wicket:for="cfg.password"><wicket:message key="install.wizard.params.step1.password"/></label>
+				<input wicket:id="cfg.password" wicket:message="title:install.wizard.params.step1.password.title" type="password" />
+			</li>
+			<li><label wicket:for="cfg.email"><wicket:message key="install.wizard.params.step1.email"/></label>
+				<input wicket:id="cfg.email" wicket:message="title:install.wizard.params.step1.email.title" type="text" />
+			</li>
+			<li><label wicket:for="ical_timeZone"><wicket:message key="install.wizard.params.step1.tz"/></label>
+				<select wicket:id="ical_timeZone"></select>
+			</li>
+		</ul>
+	</fieldset>
+
+	<fieldset class="ui-widget-content" id="userOrga">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step1.groupdata"/></legend>
+		<ul>
+			<li><label wicket:for="cfg.group"><wicket:message key="install.wizard.params.step1.group"/></label>
+				<input wicket:id="cfg.group" wicket:message="title:install.wizard.params.step1.group.title" type="text" /></li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
new file mode 100644
index 0000000..634749c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step2.configuration"/></legend>
+		<ul>
+			<li><label wicket:for="allowFrontendRegister"><wicket:message key="install.wizard.params.step2.allowFrontendRegister"/></label>
+				<select wicket:id="allowFrontendRegister"></select>
+			</li>
+			<li><label wicket:for="sendEmailAtRegister"><wicket:message key="install.wizard.params.step2.sendEmailAtRegister"/></label>
+				<select wicket:id="sendEmailAtRegister"></select>
+			</li>
+			<li><label wicket:for="sendEmailWithVerficationCode"><wicket:message key="install.wizard.params.step2.sendEmailWithVerficationCode"/></label>
+				<select wicket:id="sendEmailWithVerficationCode"></select>
+			</li>
+			<li><label wicket:for="createDefaultRooms"><wicket:message key="install.wizard.params.step2.createDefaultRooms"/></label>
+				<select wicket:id="createDefaultRooms"></select>
+			</li>
+			<li><label wicket:for="cfg.mailReferer"><wicket:message key="install.wizard.params.step2.mailReferer"/></label>
+				<input wicket:id="cfg.mailReferer" wicket:message="title:install.wizard.params.step2.mailReferer.title" type="text" />
+			</li>
+			<li><label wicket:for="cfg.smtpServer"><wicket:message key="install.wizard.params.step2.smtpServer"/></label>
+				<input wicket:id="cfg.smtpServer" wicket:message="title:install.wizard.params.step2.smtpServer.title" type="text" />
+			</li>
+			<li><label wicket:for="cfg.smtpPort"><wicket:message key="install.wizard.params.step2.smtpPort"/></label>
+				<input wicket:id="cfg.smtpPort" wicket:message="title:install.wizard.params.step2.smtpPort.title" type="text" />
+			</li>
+			<li><label wicket:for="cfg.mailAuthName"><wicket:message key="install.wizard.params.step2.mailAuthName"/></label>
+				<input wicket:id="cfg.mailAuthName" wicket:message="title:install.wizard.params.step2.mailAuthName.title" type="text" />
+			</li>
+			<li><label wicket:for="cfg.mailAuthPass"><wicket:message key="install.wizard.params.step2.mailAuthPass"/></label>
+				<input wicket:id="cfg.mailAuthPass" wicket:message="title:install.wizard.params.step2.mailAuthPass.title" type="password" />
+			</li>
+			<li><label wicket:for="mailUseTls"><wicket:message key="install.wizard.params.step2.mailUseTls"/></label>
+				<select wicket:id="mailUseTls"></select>
+			</li>
+			<li><label wicket:for="replyToOrganizer"><wicket:message key="install.wizard.params.step2.replyToOrganizer"/></label>
+				<select wicket:id="replyToOrganizer"></select>
+			</li>
+			<li><label wicket:for="defaultLangId"><wicket:message key="install.wizard.params.step2.defaultLangId"/></label>
+				<select wicket:id="defaultLangId"></select>
+			</li>
+			<li><label wicket:for="cfg.defaultExportFont"><wicket:message key="install.wizard.params.step2.defaultExportFont"/></label>
+				<select wicket:id="cfg.defaultExportFont"></select>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
new file mode 100644
index 0000000..f072081
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf1">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step3.converters"/></legend>
+		<ul>
+			<li><label wicket:for="cfg.swfZoom"><wicket:message key="install.wizard.params.step3.swfZoom"/></label>
+				<input wicket:id="cfg.swfZoom" wicket:message="title:install.wizard.params.step3.swfZoom.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfZoom.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.swfJpegQuality"><wicket:message key="install.wizard.params.step3.swfJpegQuality"/></label>
+				<input wicket:id="cfg.swfJpegQuality" 
+				wicket:message="title:install.wizard.params.step3.swfJpegQuality.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfJpegQuality.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.swfPath"><wicket:message key="install.wizard.params.step3.swfPath"/></label>
+				<input wicket:id="cfg.swfPath" 
+				wicket:message="title:install.wizard.params.step3.swfPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.imageMagicPath"><wicket:message key="install.wizard.params.step3.imageMagicPath"/></label>
+				<input wicket:id="cfg.imageMagicPath" 
+				wicket:message="title:install.wizard.params.step3.imageMagicPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.imageMagicPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.ffmpegPath"><wicket:message key="install.wizard.params.step3.ffmpegPath"/></label>
+				<input wicket:id="cfg.ffmpegPath" 
+				wicket:message="title:install.wizard.params.step3.ffmpegPath.title" type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.ffmpegPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.soxPath"><wicket:message key="install.wizard.params.step3.soxPath"/></label>
+				<input wicket:id="cfg.soxPath" 
+				wicket:message="title:install.wizard.params.step3.soxPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.soxPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.jodPath"><wicket:message key="install.wizard.params.step3.jodPath"/></label>
+				<input wicket:id="cfg.jodPath"
+				wicket:message="title:install.wizard.params.step3.jodPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.jodPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.officePath"><wicket:message key="install.wizard.params.step3.officePath"/></label>
+				<input wicket:id="cfg.officePath"
+				wicket:message="title:install.wizard.params.step3.officePath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.officePath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/><a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
new file mode 100644
index 0000000..b8360b3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf2">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step4.crypt"/></legend>
+		<ul>
+			<li><label wicket:for="cfg.cryptClassName"><wicket:message key="install.wizard.params.step4.cryptClassName"/></label>
+				<input wicket:id="cfg.cryptClassName" type="text"
+					wicket:message="title:install.wizard.params.step4.cryptClassName.title" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step4.cryptClassName.text"/>
+					</i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+
+	<fieldset class="ui-widget-content" id="red5sip">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step4.red5SIP"/></legend>
+		<ul>
+			<li><label wicket:for="red5SipEnable"><wicket:message key="install.wizard.params.step4.red5SipEnable"/></label>
+				<select wicket:id="red5SipEnable"></select>
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipEnable.text"/></i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.red5SipRoomPrefix"><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix"/></label>
+				<input wicket:id="cfg.red5SipRoomPrefix" type="text" />
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix.text"/></i>
+				</p>
+			</li>
+			<li><label wicket:for="cfg.red5SipExtenContext"><wicket:message key="install.wizard.params.step4.red5SipExtenContext"/></label>
+				<input wicket:id="cfg.red5SipExtenContext" type="text" />
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipExtenContext.text"/></i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html
new file mode 100644
index 0000000..21b4422
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="step"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.html
new file mode 100644
index 0000000..92ec993
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<wicket:panel xmlns:wicket="http://wicket.apache.org">
+	<div class="wicketExtensionsWizard">
+		<form wicket:id="form" class="wicketExtensionsWizardForm">
+			<table class="wicketExtensionsWizardOuterTable">
+				<tr>
+					<td valign="top"><span wicket:id="overview"></span></td>
+					<td valign="top">
+						<table class="wicketExtensionsWizardInnerTable">
+							<tr class="wicketExtensionsWizardHeaderRow">
+								<td valign="top" class="wicketExtensionsWizardHeader"><span
+									wicket:id="header"></span></td>
+							</tr>
+							<tr class="wicketExtensionsWizardFeedbackRow">
+								<td valign="top" class="wicketExtensionsWizardFeedback"><span
+									wicket:id="feedback"></span></td>
+							</tr>
+							<tr class="wicketExtensionsWizardViewRow">
+								<td valign="top" class="wicketExtensionsWizardView"><div
+										wicket:id="view" class="wicketExtensionsWizardViewInner"></div></td>
+							</tr>
+							<tr class="wicketExtensionsWizardButtonBarRow">
+								<td valign="top" class="wicketExtensionsWizardButtonBar"><span
+									wicket:id="buttons"></span></td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</div>
+</wicket:panel>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
new file mode 100644
index 0000000..a102e31
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -0,0 +1,748 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONE_SET;
+import static org.apache.wicket.validation.validator.RangeValidator.range;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.cli.ConnectionProperties;
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ErrorMessagePanel;
+import org.apache.openmeetings.web.common.OmLabel;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.extensions.wizard.IWizardStep;
+import org.apache.wicket.extensions.wizard.Wizard;
+import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardModel;
+import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardStep;
+import org.apache.wicket.extensions.wizard.dynamic.IDynamicWizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+import com.googlecode.wicket.kendo.ui.form.button.IndicatingAjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+//TODO maybe JQ wizard should be used
+public class InstallWizard extends Wizard {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(InstallWizard.class, webAppRootKey);
+	private InstallationConfig cfg;
+	private CompoundPropertyModel<InstallWizard> model;
+	private final static List<SelectOption> yesNoList = Arrays.asList(SelectOption.NO, SelectOption.YES);
+	private final static List<SelectOption> yesNoTextList = Arrays.asList(SelectOption.NO_TEXT, SelectOption.YES_TEXT);
+	private final static List<String> allFonts = Arrays.asList("TimesNewRoman", "Verdana", "Arial");
+	private final IDynamicWizardStep welcomeStep;
+	private final IDynamicWizardStep dbStep;
+	private final ParamsStep1 paramsStep1;
+	private final IDynamicWizardStep paramsStep2;
+	private final IDynamicWizardStep paramsStep3;
+	private final IDynamicWizardStep paramsStep4;
+	private final InstallStep installStep;
+	private Throwable th = null;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	
+	public void initTzDropDown() {
+		paramsStep1.tzDropDown.setOption();
+	}
+	
+	//onInit, applyState
+	public InstallWizard(String id) {
+		super(id);
+		//TODO enable install after first params
+		cfg = new InstallationConfig();
+		setDefaultModel(model = new CompoundPropertyModel<InstallWizard>(this));
+		welcomeStep = new WelcomeStep();
+		dbStep = new DbStep();
+		paramsStep1 = new ParamsStep1();
+		paramsStep2 = new ParamsStep2();
+		paramsStep3 = new ParamsStep3();
+		paramsStep4 = new ParamsStep4();
+		//TODO add install/progress step
+		installStep = new InstallStep();
+
+		DynamicWizardModel wmodel = new DynamicWizardModel(welcomeStep);
+		wmodel.setCancelVisible(false);
+		wmodel.setLastVisible(true);
+		init(wmodel);
+	}
+	
+	@Override
+	protected Component newButtonBar(String id) {
+		final Panel bBar = (Panel)super.newButtonBar(id);
+		AjaxButton finish = new AjaxButton("finish", new ResourceModel("org.apache.wicket.extensions.wizard.finish")) {
+			private static final long serialVersionUID = 1L;
+
+			public boolean isEnabled() {
+				IWizardStep activeStep = getWizardModel().getActiveStep();
+				return ((activeStep != null) && getWizardModel().isLastStep(activeStep));
+			}
+			
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				installStep.startInstallation(target);
+				target.add(bBar.setEnabled(false));
+			}
+		};
+		return bBar.replace(finish).setOutputMarkupId(true);
+	}
+
+	protected Component newFeedbackPanel(final String id) {
+		return feedback.setEscapeModelStrings(false);
+	}
+	
+	@Override
+	protected void onDetach() {
+		model.detach();
+		super.onDetach();
+	}
+	
+	private abstract class BaseStep extends DynamicWizardStep {
+		private static final long serialVersionUID = 1L;
+
+		public BaseStep(IDynamicWizardStep prev) {
+			super(prev);
+			setTitleModel(Model.of(cfg.appName + " - " + getString("install.wizard.install.header")));
+            setSummaryModel(Model.of(""));
+		}
+	}
+	
+	private final class WelcomeStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public WelcomeStep() {
+			super(null);
+			//TODO localize
+            add(new Label("step", getString("install.wizard.welcome.panel")).setEscapeModelStrings(false));
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return dbStep;
+		}
+	}
+
+	private final class DbStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final WebMarkupContainer hostelem = new WebMarkupContainer("hostelem");
+		private final WebMarkupContainer portelem = new WebMarkupContainer("portelem");
+		private final RequiredTextField<String> host = new RequiredTextField<String>("host", Model.of(""));
+		private final RequiredTextField<Integer> port = new RequiredTextField<Integer>("port", Model.of(0));
+		private final RequiredTextField<String> dbname = new RequiredTextField<String>("dbname", Model.of(""));
+		private final Form<ConnectionProperties> form = new Form<ConnectionProperties>("form", new CompoundPropertyModel<ConnectionProperties>(getProps(null))) {
+			private static final long serialVersionUID = 1L;
+			private final DropDownChoice<DbType> db = new DropDownChoice<DbType>("dbType", Arrays.asList(DbType.values()), new IChoiceRenderer<DbType>() {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+	        	public Object getDisplayValue(DbType object) {
+	        		return getString(String.format("install.wizard.db.step.%s.name", object.name()));
+	        	}
+	        	
+	        	@Override
+	        	public String getIdValue(DbType object, int index) {
+	        		return object.name();
+	        	}
+	        });
+			private final RequiredTextField<String> user = new RequiredTextField<String>("login");
+			private final TextField<String> pass = new TextField<String>("password");
+			
+        	{
+        		add(db.add(new OnChangeAjaxBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						target.add(feedback);
+						initForm(true, target);
+					}
+				}));
+        		add(hostelem.add(host), portelem.add(port));
+        		add(dbname, user, pass);
+        		add(new IndicatingAjaxButton("check") {
+					private static final long serialVersionUID = 1L;
+					
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						target.add(feedback);
+					}
+					
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						target.add(feedback);
+					}
+        		});
+        	}
+        	
+        	protected void onValidateModelObjects() {
+				ConnectionProperties props = getModelObject();
+				try {
+					Class.forName(props.getDriver());
+				} catch (Exception e) {
+					form.error(new StringResourceModel("install.wizard.db.step.nodriver", InstallWizard.this, null, null, getString("install.wizard.db.step.instructions." + props.getDbType().name())).getObject());
+					return;
+				}
+				Connection conn = null;
+				boolean valid = true;
+				try {
+					ConnectionPropertiesPatcher.updateUrl(props, host.getModelObject(), "" + port.getModelObject(), dbname.getModelObject());
+					DriverManager.setLoginTimeout(3);
+					conn = DriverManager.getConnection(props.getURL(), props.getLogin(), props.getPassword());
+					valid = conn.isValid(0); //no timeout
+					String sql = null;
+					switch (props.getDbType()) {
+						case db2:
+							sql = "select count(*) from systables";
+							break;
+						case oracle:
+							sql = "SELECT 1 FROM DUAL";
+							break;
+						case derby:
+							sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1";
+							break;
+						default:
+							sql = "SELECT 1";
+							break;
+					}
+					valid &= conn.prepareStatement(sql).execute();
+					if (!valid) {
+						form.error(getString("install.wizard.db.step.notvalid") + "<br/>" + getString("install.wizard.db.step.instructions." + props.getDbType().name()));
+					}
+				} catch (Exception e) {
+					form.error(e.getMessage() + "<br/>" + getString("install.wizard.db.step.instructions." + props.getDbType().name()));
+					log.error("error while testing DB", e);
+					valid = false;
+				} finally {
+					if (conn != null) {
+						try {
+							conn.close();
+						}  catch (Exception e) {
+							//no-op
+						}
+					}
+				}
+				if (valid) {
+					form.success(getString("install.wizard.db.step.valid"));
+				}
+        	}
+        	
+        	protected void onSubmit() {
+        		try {
+        			ConnectionPropertiesPatcher.patch(getModelObject());
+        			XmlWebApplicationContext ctx = (XmlWebApplicationContext)getWebApplicationContext(Application.get().getServletContext());
+        			AutowireCapableBeanFactory f = ctx.getBeanFactory();
+        			LocalEntityManagerFactoryBean emb = f.getBean(LocalEntityManagerFactoryBean.class);
+        			emb.afterPropertiesSet();
+        		} catch (Exception e) {
+					form.error(new StringResourceModel("install.wizard.db.step.error.patch", InstallWizard.this, null, null, e.getMessage()).getObject());
+					log.error("error while patching", e);
+        		}
+        	}
+        };
+        
+        private ConnectionProperties getProps(DbType type) {
+			ConnectionProperties props = new ConnectionProperties();
+			try {
+				File conf = OmFileHelper.getPersistence(type);
+				props = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+			} catch (Exception e) {
+				form.warn(getString("install.wizard.db.step.errorprops"));
+			}
+        	return props;
+        }
+        
+		private void initForm(boolean getProps, AjaxRequestTarget target) {
+			ConnectionProperties props = getProps ? getProps(form.getModelObject().getDbType()) : form.getModelObject();
+			form.setModelObject(props);
+			hostelem.setVisible(props.getDbType() != DbType.derby);
+			portelem.setVisible(props.getDbType() != DbType.derby);
+			try {
+				switch (props.getDbType()) {
+					case mssql: {
+						String url = props.getURL().substring("jdbc:sqlserver://".length());
+						String[] parts = url.split(";");
+						String[] hp = parts[0].split(":");
+						host.setModelObject(hp[0]);
+						port.setModelObject(Integer.parseInt(hp[1]));
+						dbname.setModelObject(parts[1].substring(parts[1].indexOf('=') + 1));
+						}
+						break;
+					case oracle: {
+						String[] parts = props.getURL().split(":");
+						host.setModelObject(parts[3].substring(1));
+						port.setModelObject(Integer.parseInt(parts[4]));
+						dbname.setModelObject(parts[5]);
+						}
+						break;
+					case derby: {
+						host.setModelObject("");
+						port.setModelObject(0);
+						String[] parts = props.getURL().split(";");
+						String[] hp = parts[0].split(":");
+						dbname.setModelObject(hp[2]);
+						}
+						break;
+					default:
+						URI uri = URI.create(props.getURL().substring(5));
+						host.setModelObject(uri.getHost());
+						port.setModelObject(uri.getPort());
+						dbname.setModelObject(uri.getPath().substring(1));
+						break;
+				}
+			} catch (Exception e) {
+				form.warn(getString("install.wizard.db.step.errorprops"));
+			}
+			if (target != null) {
+				target.add(form);
+			}
+		}
+		
+		public DbStep() {
+			super(welcomeStep);
+			//TODO localize
+            add(new OmLabel("note", "install.wizard.db.step.note", cfg.appName, getString("install.wizard.db.step.instructions.derby")
+            		, getString("install.wizard.db.step.instructions.mysql"), getString("install.wizard.db.step.instructions.postgresql")
+            		, getString("install.wizard.db.step.instructions.db2"), getString("install.wizard.db.step.instructions.mssql")
+            		, getString("install.wizard.db.step.instructions.oracle")).setEscapeModelStrings(false));
+            add(form.setOutputMarkupId(true));
+            initForm(false, null);
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return paramsStep1;
+		}
+	}
+
+	private final class ParamsStep1 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final TzDropDown tzDropDown;
+
+		public ParamsStep1() {
+			super(dbStep);
+			//TODO localize
+			add(new RequiredTextField<String>("cfg.username").add(minimumLength(USER_LOGIN_MINIMUM_LENGTH)));
+			add(new PasswordTextField("cfg.password").add(minimumLength(USER_PASSWORD_MINIMUM_LENGTH)));
+			add(new RequiredTextField<String>("cfg.email").add(RfcCompliantEmailAddressValidator.getInstance()));
+			add(tzDropDown = new TzDropDown("ical_timeZone"));
+			add(new RequiredTextField<String>("cfg.group"));
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return paramsStep2;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep2 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep2() {
+			super(paramsStep1);
+			//TODO localize
+			//TODO validation
+			add(new YesNoDropDown("allowFrontendRegister"));
+			add(new YesNoDropDown("sendEmailAtRegister"));
+			add(new YesNoDropDown("sendEmailWithVerficationCode"));
+			add(new YesNoDropDown("createDefaultRooms"));
+			add(new TextField<String>("cfg.mailReferer"));
+			add(new TextField<String>("cfg.smtpServer"));
+			add(new TextField<Integer>("cfg.smtpPort").setRequired(true));
+			add(new TextField<String>("cfg.mailAuthName"));
+			add(new PasswordTextField("cfg.mailAuthPass").setRequired(false));
+			add(new YesNoDropDown("mailUseTls"));
+			//TODO check mail server
+			add(new YesNoDropDown("replyToOrganizer"));
+			add(new LangDropDown("defaultLangId"));
+			add(new DropDownChoice<String>("cfg.defaultExportFont", allFonts));
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return paramsStep3;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep3 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep3() {
+			super(paramsStep2);
+			
+            add(new TextField<Integer>("cfg.swfZoom").setRequired(true).add(range(50, 600)));
+            add(new TextField<Integer>("cfg.swfJpegQuality").setRequired(true).add(range(1, 100)));
+            add(new TextField<String>("cfg.swfPath"));
+            add(new TextField<String>("cfg.imageMagicPath"));
+            add(new TextField<String>("cfg.ffmpegPath"));
+            add(new TextField<String>("cfg.soxPath"));
+            add(new TextField<String>("cfg.jodPath"));
+            add(new TextField<String>("cfg.officePath"));
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return paramsStep4;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep4 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep4() {
+			super(paramsStep3);
+            add(new RequiredTextField<String>("cfg.cryptClassName")); //Validate class
+            
+            //TODO add check for red5sip connection
+            add(new YesNoTextDropDown("red5SipEnable"));
+            add(new TextField<String>("cfg.red5SipRoomPrefix"));
+            add(new TextField<String>("cfg.red5SipExtenContext"));
+		}
+
+		public boolean isLastStep() {
+			return false;
+		}
+
+		public IDynamicWizardStep next() {
+			return installStep;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+}
+	
+	private final class InstallStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final CongratulationsPanel congrat;
+		private WebMarkupContainer container = new WebMarkupContainer("container");
+		private AbstractAjaxTimerBehavior timer;
+		private ProgressBar progressBar;
+		private Label desc = new Label("desc", getString("install.wizard.install.desc"));
+		private boolean started = false;
+		
+		public void startInstallation(AjaxRequestTarget target) {
+			started = true;
+			timer.restart(target);
+			new Thread(new InstallProcess(Application.get()._getBean(ImportInitvalues.class))
+				, "Openmeetings - Installation").start();
+			//progressBar.setVisible(true);
+			desc.setDefaultModelObject(getString("install.wizard.install.started"));
+			target.add(desc, container);
+		}
+		
+		public InstallStep() {
+			super(paramsStep4);
+			
+			add(desc.setOutputMarkupId(true));
+			// Timer //
+			container.add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					if (!started) {
+						timer.stop(target);
+						return;
+					}
+					if (th != null) {
+						timer.stop(target);
+						//TODO change text, localize
+						progressBar.setVisible(false);
+						target.add(container.replace(new ErrorMessagePanel("status", getString("install.wizard.install.failed"), th))
+							, desc.setVisible(false)
+							);
+					} else {
+						progressBar.setModelObject(Application.get()._getBean(ImportInitvalues.class).getProgress());
+						progressBar.refresh(target);
+						//TODO uncomment later target.add(value);
+						//TODO add current step result as info
+					}
+				}
+			});
+			container.add(progressBar = new ProgressBar("progress", new Model<Integer>(0)) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onComplete(AjaxRequestTarget target) {
+					timer.stop(target);
+					progressBar.setVisible(false);
+					congrat.setVisible(true);
+					target.add(container, desc.setVisible(false));
+				}
+			});
+			//TODO uncomment later progressBar.add(value = new Label("value", progressBar.getModel()));
+			//TODO uncomment later value.setOutputMarkupId(true);
+			//progressBar.setVisible(false);
+			
+			container.add(congrat = new CongratulationsPanel("status"));
+			congrat.setVisible(false);
+			
+			add(container.setOutputMarkupId(true));
+		}
+
+		public boolean isLastStep() {
+			return true;
+		}
+
+		public IDynamicWizardStep next() {
+			return null;
+		}
+	}
+	
+	private class InstallProcess implements Runnable {
+		private ImportInitvalues installer;
+		
+		public InstallProcess(ImportInitvalues installer) {
+			this.installer = installer;
+			th = null;
+		}
+		
+		public void run() {
+			try {
+				installer.loadAll(cfg, true);
+			} catch (Exception e) {
+				th = e;
+			}
+		}
+	}
+	
+	private static class SelectOption implements Serializable {
+		private static final long serialVersionUID = 1L;
+		private static SelectOption NO = new SelectOption("0", "No");
+		private static SelectOption NO_TEXT = new SelectOption("no", "No");
+		private static SelectOption YES = new SelectOption("1", "Yes");
+		private static SelectOption YES_TEXT = new SelectOption("yes", "Yes");
+		public String key;
+		@SuppressWarnings("unused")
+		public String value;
+
+		SelectOption(String key, String value) {
+			this.key = key;
+			this.value = value;
+		}
+	}
+
+	private abstract class WizardDropDown<T>  extends DropDownChoice<T> {
+		private static final long serialVersionUID = 1L;
+		T option;
+		IModel<Object> propModel;
+		
+		WizardDropDown(String id) {
+			super(id);
+			propModel = InstallWizard.this.model.bind("cfg." + id);
+			setModel(new PropertyModel<T>(this, "option"));
+		}
+		
+		@Override
+		protected void onDetach() {
+			propModel.detach();
+			super.onDetach();
+		}
+	}
+	
+	private final class TzDropDown extends WizardDropDown<String> {
+		private static final long serialVersionUID = 1L;
+
+		public void setOption() {
+			String tzId = WebSession.get().getClientTZCode();
+			option = AVAILABLE_TIMEZONE_SET.contains(tzId) ? tzId : AVAILABLE_TIMEZONES.get(0);
+		}
+		
+		public TzDropDown(String id) {
+			super(id);
+			setChoices(AVAILABLE_TIMEZONES);
+			setChoiceRenderer(new IChoiceRenderer<String>() {
+				private static final long serialVersionUID = 1L;
+				
+				public Object getDisplayValue(String object) {
+    				return object.toString();
+    			}
+				public String getIdValue(String object, int index) {
+					return object.toString();
+				}
+			});
+		}
+		
+		@Override
+		protected void onModelChanged() {
+			if (propModel != null && option != null) {
+				propModel.setObject(option);
+			}
+		}
+	}
+	
+	private class SelectOptionDropDown extends WizardDropDown<SelectOption> {
+		private static final long serialVersionUID = 1L;
+
+		SelectOptionDropDown(String id) {
+			super(id);
+			setChoiceRenderer(new ChoiceRenderer<SelectOption>("value", "key"));
+		}
+		
+		@Override
+		protected void onModelChanged() {
+			if (propModel != null && option != null) {
+				propModel.setObject(option.key);
+			}
+		}
+		
+	}
+	
+	private final class YesNoDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+		
+		YesNoDropDown(String id) {
+			super(id);
+			setChoices(yesNoList);
+			this.option = SelectOption.NO.key.equals(propModel.getObject()) ?
+					SelectOption.NO : SelectOption.YES;
+		}
+	}
+	
+	private final class YesNoTextDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+		
+		YesNoTextDropDown(String id) {
+			super(id);
+			setChoices(yesNoTextList);
+			this.option = SelectOption.NO_TEXT.key.equals(propModel.getObject()) ?
+					SelectOption.NO_TEXT : SelectOption.YES_TEXT;
+		}
+	}
+	
+	private final class LangDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+
+		public LangDropDown(String id) {
+			super(id);
+			
+			List<SelectOption> list = new ArrayList<SelectOption>();
+			
+			for (Map.Entry<Long, Locale> me : LabelDao.languages.entrySet()) {
+				SelectOption op = new SelectOption(me.getKey().toString(), me.getValue().getDisplayName());
+				if (getSession().getLocale().equals(me.getValue())) {
+					option = op;
+				}
+				list.add(op);
+				if (option == null && me.getKey().toString().equals(cfg.defaultLangId)) {
+					option = op;
+				}
+			}
+			setChoices(list);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
new file mode 100644
index 0000000..214a9f8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript" src="js/openmeetings_functions.js" >
+	</script>
+	<style type="text/css">
+		form,fieldset {
+			margin: 0;
+			padding: 0;
+		}
+		fieldset {
+			border: 1px solid #000;
+		}
+		legend {
+			padding: 0;
+			color: #000;
+		}
+		input:focus,textarea:focus {
+			color: #000;
+			background: #fff;
+			outline: 1px solid black;
+		}
+		input,textarea,select {
+			margin: 0;
+			padding: 1px;
+			position: absolute;
+			left: 700px;
+			background: #ddd;
+			font-size: 100%;
+			font-family: inherit;
+			width: 300px;
+		}
+		select {
+			padding: 0;
+		}
+		form.wicketExtensionsWizardForm {
+			width: 1024px;
+			font-size: 1.1em;
+			color: #333;
+		}
+		form.wicketExtensionsWizardForm legend {
+			padding-left: 0;
+		}
+		form.wicketExtensionsWizardForm legend,form.wicketExtensionsWizardForm label {
+			color: #333;
+		}
+		form.wicketExtensionsWizardForm fieldset {
+			border: none;
+			border-top: 1px solid #C9DCA6;
+		}
+		form.wicketExtensionsWizardForm fieldset fieldset {
+			background: none;
+		}
+		form.wicketExtensionsWizardForm fieldset li {
+			padding: 5px 10px 7px;
+		}
+		form.wicketExtensionsWizardForm fieldset {
+			margin-bottom: 10px;
+		}
+		form.wicketExtensionsWizardForm legend {
+			padding: 0 2px;
+			font-weight: bold;
+		}
+		form.wicketExtensionsWizardForm label {
+			display: inline-block;
+			line-height: 1.8;
+			vertical-align: top;
+		}
+		form.wicketExtensionsWizardForm fieldset ol {
+			margin: 0;
+			padding: 0;
+		}
+		form.wicketExtensionsWizardForm fieldset li {
+			list-style: none;
+			margin: 0;
+		}
+		form.wicketExtensionsWizardForm fieldset fieldset {
+			border: none;
+			margin: 3px 0 0;
+		}
+		form.wicketExtensionsWizardForm fieldset fieldset legend {
+			padding: 0 0 5px;
+			font-weight: normal;
+		}
+		form.wicketExtensionsWizardForm fieldset fieldset label {
+			display: block;
+			width: auto;
+		}
+		form.wicketExtensionsWizardForm em {
+			font-weight: bold;
+			font-style: normal;
+			color: #f00;
+		}
+		form.wicketExtensionsWizardForm label {
+			width: 420px;
+		}
+		form.wicketExtensionsWizardForm fieldset fieldset label {
+			margin-left: 123px;
+		}
+		.wicketExtensionsWizard {
+			padding-right: 100px;
+			padding-left: 100px;
+			width: 850px;
+		}
+		.wicketExtensionsWizardHeader {
+			font-size: 2em;
+			padding: 10px;
+		}
+		.wicketExtensionsWizardViewInner {
+			padding: 5px;
+		}
+		.wicketExtensionsWizardInnerTable, .wicketExtensionsWizardOuterTable {
+			width: 100%;
+		}
+		.wicketExtensionsWizardButtonBar input {
+			position: static;
+			width: auto;
+			padding-right: 15px;
+			padding-left: 15px;
+			margin: 5px;
+		}
+	</style>
+</wicket:head>
+<wicket:extend>
+	<div>
+		<div wicket:id="wizard"></div>
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
new file mode 100644
index 0000000..7bf6f5e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.BaseNotInitedPage;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.protocol.http.request.WebClientInfo;
+
+public class InstallWizardPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	private InstallWizard wizard = null;
+
+	public InstallWizardPage() {
+		if (Application.isInstalled()) {
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+		add(wizard = new InstallWizard("wizard"));
+		// This code is required to detect time zone offset
+		add(new AjaxClientInfoBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onClientInfo(AjaxRequestTarget target, WebClientInfo clientInfo) {
+				super.onClientInfo(target, clientInfo);
+				wizard.initTzDropDown();
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml
new file mode 100644
index 0000000..3f046b5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+	<entry key="org.apache.wicket.extensions.wizard.next"><![CDATA[Siguiente >]]></entry>
+	<entry key="org.apache.wicket.extensions.wizard.finish"><![CDATA[Finalizar]]></entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html
new file mode 100644
index 0000000..021a6cc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<table>
+			<tr>
+				<td><wicket:message key="1550" /></td>
+				<td wicket:id="name">[name]</td>
+			</tr>
+			<tr>
+				<td><wicket:message key="1551" /></td>
+				<td wicket:id="version">[version]</td>
+			</tr>
+			<tr>
+				<td><wicket:message key="1552" /></td>
+				<td wicket:id="revision">[revision]</td>
+			</tr>
+			<tr>
+				<td><wicket:message key="1553" /></td>
+				<td wicket:id="buildDate">[buildDate]</td>
+			</tr>
+		</table>		
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java
new file mode 100644
index 0000000..8286a10
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import static org.apache.openmeetings.util.Version.getBuildDate;
+import static org.apache.openmeetings.util.Version.getRevision;
+import static org.apache.openmeetings.util.Version.getVersion;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.basic.Label;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class AboutDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 1400355222295594321L;
+	
+	public AboutDialog(String id) {
+		super(id, Application.getString(1549));
+		
+		add(new Label("name", Application.getBean(ConfigurationDao.class).getConfValue(
+				"application.name"
+				, String.class
+				, ConfigurationDao.DEFAULT_APP_NAME)));
+		add(new Label("version", getVersion()));
+		add(new Label("revision", getRevision()));
+		add(new Label("buildDate", getBuildDate()));
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return new ArrayList<DialogButton>();
+	}
+
+	public void onClose(AjaxRequestTarget arg0, DialogButton arg1) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html
new file mode 100644
index 0000000..a244c3c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function toggleChat() {
+				var chat = $('#chat');
+				$('#chat #controlBlock #control')
+					.removeClass('ui-icon-carat-1-' + (chat.height() < 24 ? 'n' : 's'))
+					.addClass('ui-icon-carat-1-' + (chat.height() < 24 ? 's' : 'n'));
+				chat.animate({ height: chat.height() < 24 ? "320px" : "20px" }, 1000);
+			}
+			function addChatMessageInternal(m) {
+				if (m && m.type == "chat") {
+					var msg = $('<div><span class="from">' + m.msg.from + '</span><span class="date">'
+							+ m.msg.sent + '</span>' + m.msg.message + '</div>');
+					$('#messageArea').append(msg);
+					msg[0].scrollIntoView();
+				}
+			}
+			function addChatMessage(m) {
+				if (m && m.type == "chat") {
+					addChatMessageInternal(m)
+					$('#messageArea').emoticonize();
+				}
+			}
+			Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
+				addChatMessage(jQuery.parseJSON(msg)); 
+			});
+		</script>
+	</wicket:head>
+	<wicket:panel>
+		<div id="chat" class="ui-state-default">
+			<div id="controlBlock" onclick="toggleChat();" class="ui-state-active clickable"><span id="control" class="ui-icon ui-icon-carat-1-n sort-icon"></span><span><wicket:message key="244"/></span></div>
+			<div wicket:id="messages"></div>
+			<form wicket:id="sendForm">
+				<div wicket:id="toolbarContainer"></div>
+				<table style="width: 100%">
+					<tr>
+						<td><div id="chatMessage" wicket:id="chatMessage"></div></td>
+						<td style="width: 50px"><div wicket:id="send"><wicket:message key="220"/></div></td>
+					</tr>
+				</table>
+			</form>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java
new file mode 100644
index 0000000..03cb166
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import static org.apache.commons.lang3.StringEscapeUtils.unescapeXml;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.ws.IWebSocketSettings;
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.plugins.emoticons.EmoticonsBehavior;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+
+@AuthorizeInstantiation({"Dashboard", "Room"})
+public class ChatPanel extends BasePanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
+	private static final long serialVersionUID = -9144707674886211557L;
+	private static final String MESSAGE_AREA_ID = "messageArea";
+	
+	private JSONObject getMessage(ChatMessage m) throws JSONException {
+		String msg = m.getMessage();
+		msg = msg == null ? msg : " " + msg.replaceAll("&nbsp;", " ") + " ";
+		return new JSONObject()
+			.put("type", "chat")
+			.put("msg", new JSONObject()
+				.put("id", m.getId())
+				.put("message", msg)
+				.put("from", m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname())
+				.put("sent", getDateFormat().format(m.getSent()))
+			);
+	}
+
+	public ChatPanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+		setMarkupId(id);
+
+		add(new Behavior() {
+			private static final long serialVersionUID = -2205036360048419129L;
+
+			@Override
+			public void renderHead(Component component, IHeaderResponse response) {
+				ChatDao dao = getBean(ChatDao.class);
+				try {				
+					StringBuilder sb = new StringBuilder();
+					//FIXME limited count should be loaded with "earlier" link
+					for (ChatMessage m : dao.get(0, 30)) {
+						sb.append("addChatMessageInternal(").append(getMessage(m).toString()).append(");");
+					}
+					if (sb.length() > 0) {
+						sb.append("$('#").append(MESSAGE_AREA_ID).append("').emoticonize();");
+						response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
+					}
+				} catch (JSONException e) {
+					
+				}
+				super.renderHead(component, response);
+			}
+		});
+		add(new EmoticonsBehavior("#" + MESSAGE_AREA_ID));
+		add(new WebMarkupContainer("messages").setMarkupId(MESSAGE_AREA_ID));
+		ChatToolbar toolbar = new ChatToolbar("toolbarContainer");
+		final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar);
+		add(new Form<Void>("sendForm").add(
+				toolbar
+				, chatMessage.setOutputMarkupId(true)
+				, new AjaxButton("send") {
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						ChatDao dao = getBean(ChatDao.class);
+						ChatMessage m = new ChatMessage();
+						m.setMessage(unescapeXml(chatMessage.getDefaultModelObjectAsString()));
+						m.setSent(new Date());
+						m.setFromUser(getBean(UserDao.class).get(getUserId()));
+						dao.update(m);
+						IWebSocketConnectionRegistry reg = IWebSocketSettings.Holder.get(getApplication()).getConnectionRegistry();
+						for (IWebSocketConnection c : reg.getConnections(getApplication())) {
+							try {
+								c.sendMessage(getMessage(m).toString());
+							} catch(Exception e) {
+								log.error("Error while sending message", e);
+							}
+						}
+						chatMessage.setDefaultModelObject("");
+						target.add(chatMessage);
+					};
+				}));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html
new file mode 100644
index 0000000..f00af1a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<style>
+		.emt {
+			font-size: 10pt;
+		}
+		.chat.btn{
+			font-weight: bold;
+		}
+		.chat.dropdown-menu {
+			left: -50px;
+		}
+	</style>
+	<script type="text/javascript">
+	    function emtClick(emoticon) {
+	        var editor = $('#chatMessage .wysiwyg-editor');
+	        editor.html(editor.html() + ' ' + emoticon + ' ');
+	    }
+		$(function() {
+			 var emots = [":-)", ":)", ":o)", ":c)", ":^)", ":-D", ":-(", ":-9", ";-)", ":-P", ":-p", ":-Þ", ":-b"
+			 	, ":-O", ":-/", ":-X", ":-#", ":'(", "B-)", "8-)", ":-\\", ";*(", ":-*", ":]", ":>", "=]", "=)", "8)"
+			 	, ":}", ":D", "8D", "XD", "xD", "=D", ":(", ":<", ":[", ":{", "=(", ";)", ";]", ";D", ":P", ":p"
+			 	, "=P", "=p", ":b", ":Þ", ":O", "8O", ":/", "=/", ":S", ":#", ":X", "B)", "O:)", "<3", ";(", ">:)"
+			 	, ">;)", ">:(", "O_o", "O_O", "o_o", "0_o", "T_T", "^_^", "?-)"];
+			 var emotMenuList = $('#emotMenuList');
+			 var rowSize = 15;
+			 var row = $('<tr></tr>');
+			 for (var i = 0; i < emots.length; ++i) {
+			 	row.append('<td><div class="emt" onclick="emtClick(\'' + emots[i] + '\');">'
+			 		+ emots[i] + '</div></td>');
+			 	if (i != 0 && i % rowSize == 0) {
+			 		emotMenuList.append(row);
+			 		row = $('<tr></tr>');
+			 	}
+			 }
+			 $('.emt').emoticonize();
+		});
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div wicket:id="toolbar" class="btn-toolbar" data-role="editor-toolbar">
+		<div class="btn-group">
+			<a id="emoticons" class="chat btn emt dropdown-toggle" data-toggle="dropdown" title="Emoticons"> :) <b class="caret"></b></a>
+			<ul class="chat dropdown-menu" >
+				<li>
+					<table id="emotMenuList">
+					</table>
+				</li>
+			</ul>
+		</div>
+		<div class="btn-group">
+			<a id="fontSize" class="chat btn dropdown-toggle" data-toggle="dropdown" title="Font Size"> A <b class="caret"></b></a>
+			<ul class="dropdown-menu">
+				<li><a data-edit="fontSize 5"><font size="3">Huge</font></a></li>
+				<li><a data-edit="fontSize 3"><font size="2">Normal</font></a></li>
+				<li><a data-edit="fontSize 1"><font size="1">Small</font></a></li>
+			</ul>
+			<a id="bold" class="chat btn" data-edit="bold" title="Bold (Ctrl/Cmd+B)"> B
+			</a> <a id="italic" class="chat btn" data-edit="italic" title="Italic (Ctrl/Cmd+I)" style="font-style: italic;"> I
+			</a> <a id="strikethrough" class="chat btn" data-edit="strikethrough" title="Strikethrough" style="text-decoration: line-through;"> S
+			</a> <a id="underline" class="chat btn" data-edit="underline" title="Underline (Ctrl/Cmd+U)" style="text-decoration: underline;"> U
+			</a>
+		</div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java
new file mode 100644
index 0000000..e433dd2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+import com.googlecode.wicket.jquery.core.IJQueryWidget.JQueryWidget;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.IWysiwygToolbar;
+
+/**
+ * Provides a custom implementation for com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.IWysiwygToolbar suitable
+ * for chat}
+ */
+public class ChatToolbar extends Panel implements IWysiwygToolbar {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer toolbar;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param id
+	 *            the markup-id
+	 */
+	public ChatToolbar(String id) {
+		this(id, null);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param id
+	 *            the markup-id
+	 * @param model
+	 *            the {@link org.apache.wicket.model.IModel}
+	 */
+	public ChatToolbar(String id, IModel<String> model) {
+		super(id, model);
+
+		toolbar = new WebMarkupContainer("toolbar");
+		toolbar.setMarkupId("bToolbar");
+		add(toolbar);
+
+	}
+
+	public void attachToEditor(Component editor) {
+		toolbar.add(AttributeModifier.replace("data-target", JQueryWidget.getSelector(editor)));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
new file mode 100644
index 0000000..1f3c270
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<form wicket:id="appForm" class="appointmentPopUp">
+			<span wicket:id="feedback"></span>
+			<table>
+				<tr>
+					<td><wicket:message key="572" /></td>
+					<td><input type="text" wicket:id="title" /></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="570" /></td>
+					<td><span class="date time picker" wicket:id="start"></span></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="571" /></td>
+					<td><span class="date time picker" wicket:id="end"></span></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="565" /></td>
+					<td><select wicket:id="remind" ></select></td>
+				</tr>
+				<tr>
+					<td colspan="2"><input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="619" /></td>
+					<td><select wicket:id="room.roomtype" ></select></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="406" /></td>
+					<td><select wicket:id="room" ></select></td>
+				</tr>
+				<tr>
+					<td colspan="2"><input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="525" /></td>
+					<td><input type="password" wicket:id="password" /></td>
+				</tr>
+				<tr>
+					<td colspan="2" style="font-size: smaller;"><wicket:message key="1445" /></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="1156" /></td>
+					<td><span wicket:id="aowner"></span></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="803" /></td>
+					<td wicket:message="title:1588"><input class="appointment attendees" type="hidden" wicket:id="attendees"/></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="569" /></td>
+					<td><input type="text" wicket:id="location" /></td>
+				</tr>
+				<tr>
+					<td><wicket:message key="573" /></td>
+					<td>
+						<div wicket:id="toolbarContainer"></div>
+						<div wicket:id="description"></div>
+					</td>
+				</tr>
+			</table>
+		</form>
+		<div wicket:id="confirmDelete"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
new file mode 100644
index 0000000..602906e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -0,0 +1,377 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
+import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.threeten.bp.LocalDateTime;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class AppointmentDialog extends AbstractFormDialog<Appointment> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);
+	
+	private AppointmentForm form;
+	private DialogButton save = new DialogButton("save", Application.getString(813));
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));
+	private DialogButton delete = new DialogButton("delete", Application.getString(814));
+	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));
+	private final CalendarPanel calendarPanel;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	final MessageDialog confirmDelete;
+	private IModel<Collection<User>> attendeesModel = new CollectionModel<User>(new ArrayList<User>());
+	
+	@Override
+	public int getWidth() {
+		return 650;
+	}
+	
+	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {
+		form.setModelObject(a);
+		form.start.setModelObject(getDateTime(a.getStart()));
+		form.end.setModelObject(getDateTime(a.getEnd()));
+		form.setEnabled(isOwner(a));
+		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);
+		if (a.getId() != null) {
+			delete.setVisible(isOwner(a), target);
+			enterRoom.setVisible(a.getRoom() != null, target);
+		} else {
+			delete.setVisible(false, target);
+			enterRoom.setVisible(false, target);
+		}
+		save.setVisible(isOwner(a), target);
+		super.setModelObject(a);
+	}
+	
+	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {
+		super(id, title, model, true);
+		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());
+		this.calendarPanel = calendarPanel;
+		setOutputMarkupId(true);
+		form = new AppointmentForm("appForm", model);
+		add(form);
+		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){
+			private static final long serialVersionUID = 1L;
+
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				if (button != null && button.match(AbstractDialog.OK)){
+					deleteAppointment(target);
+				}
+			}
+		};
+		add(confirmDelete);
+	}
+
+	protected void deleteAppointment(AjaxRequestTarget target) {
+		getBean(AppointmentDao.class).delete(getModelObject(), getUserId());
+		calendarPanel.refresh(target);		
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(enterRoom, save, delete, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return save;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return this.form;
+	}
+
+	@Override
+	protected void onOpen(AjaxRequestTarget target) {
+		target.add(this.form);
+	}
+	
+	@Override
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (delete.equals(button)) {
+			confirmDelete.open(target);
+		} else if (enterRoom.equals(button)) {
+			RoomEnterBehavior.roomEnter((MainPage)getPage(), target, getModelObject().getRoom().getRooms_id());
+		}
+	}
+	
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+        Appointment a = form.getModelObject();
+        final List<MeetingMember> attendees = a.getMeetingMembers() == null ? new ArrayList<MeetingMember>() : a.getMeetingMembers();
+        Set<Long> currentIds = new HashSet<Long>();
+        for (User u : attendeesModel.getObject()) {
+        	if (u.getUser_id() != null) {
+        		currentIds.add(u.getUser_id());
+        	}
+        }
+        
+        //remove users
+        for (Iterator<MeetingMember> i = attendees.iterator(); i.hasNext();) {
+        	MeetingMember m = i.next();
+        	if (!currentIds.contains(m.getUser().getUser_id())) {
+        		i.remove();
+        	}
+        }
+        Set<Long> originalIds = new HashSet<Long>();
+        for (MeetingMember m : attendees) {
+        	originalIds.add(m.getUser().getUser_id());
+        }
+        //add users
+        for (User u : attendeesModel.getObject()) {
+        	if (u.getUser_id() == null || !originalIds.contains(u.getUser_id())) {
+        		MeetingMember mm = new MeetingMember();
+        		mm.setUser(u);
+        		mm.setDeleted(false);
+        		mm.setInserted(a.getInserted());
+        		mm.setUpdated(a.getUpdated());
+        		mm.setAppointment(a);
+        		attendees.add(mm);
+        	}
+        }
+        a.setMeetingMembers(attendees);
+        a.setStart(getDate(form.start.getModelObject()));
+        a.setEnd(getDate(form.end.getModelObject()));
+        getBean(AppointmentDao.class).update(a, getUserId());
+		target.add(feedback);
+		calendarPanel.refresh(target);
+	}
+	
+	public static boolean isOwner(Appointment object) {
+		return object.getOwner() != null && getUserId() == object.getOwner().getUser_id();
+	}
+	
+	@Override
+	protected void onDetach() {
+		attendeesModel.detach();
+		super.onDetach();
+	}
+	
+	private class AppointmentForm extends Form<Appointment> {
+		private static final long serialVersionUID = 1L;
+		private boolean createRoom = true;
+		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
+		private final PasswordTextField pwd = new PasswordTextField("password");
+		private final Label owner = new Label("aowner", Model.of(""));
+		private final DropDownChoice<RoomType> roomType = new RoomTypeDropDown("room.roomtype");
+		private final DropDownChoice<Room> room = new DropDownChoice<Room>(
+				"room"
+				, getRoomList()
+				, new ChoiceRenderer<Room>("name", "rooms_id"));
+
+		@Override
+		protected void onModelChanged() {
+			super.onModelChanged();
+
+			Appointment a = getModelObject();
+			List<AppointmentReminderTyps> remindTypes = getRemindTypes();
+			if (a.getRemind() == null && !remindTypes.isEmpty()) {
+				a.setRemind(remindTypes.get(0));
+			}
+			
+			List<RoomType> roomTypes = getRoomTypes();
+			if (a.getRoom() == null) {
+				Room r = new Room();
+				r.setAppointment(true);
+				a.setRoom(r);
+			}
+			if (a.getRoom().getRoomtype() == null && !roomTypes.isEmpty()) {
+				a.getRoom().setRoomtype(roomTypes.get(0));
+			}
+			createRoom = Boolean.TRUE.equals(a.getRoom().getAppointment());
+			roomType.setEnabled(createRoom);
+			room.setEnabled(!createRoom);
+			if (a.getId() == null) {
+				java.util.Calendar start = WebSession.getCalendar();
+				start.setTime(a.getStart());
+				java.util.Calendar end = WebSession.getCalendar();
+				end.setTime(a.getEnd());
+				
+				if (start.equals(end)) {
+					end.add(java.util.Calendar.HOUR_OF_DAY, 1);
+					a.setEnd(end.getTime());
+				}
+			}
+			attendeesModel.setObject(new ArrayList<User>());
+			if (a.getMeetingMembers() != null) {
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					attendeesModel.getObject().add(mm.getUser());
+				}
+			}
+			pwd.setEnabled(a.isPasswordProtected());
+			owner.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true);
+			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));
+			owner.setVisible(!isOwner(a));
+		}
+		
+		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {
+			super(id, model);
+			setOutputMarkupId(true);
+			
+			add(feedback.setOutputMarkupId(true));
+			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));
+			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
+			add(toolbar);
+			add(new WysiwygEditor("description", toolbar));
+			add(new TextField<String>("location"));
+			add(start);
+			add(end);
+			pwd.setEnabled(getModelObject().isPasswordProtected());
+			pwd.setOutputMarkupId(true);
+			add(pwd);
+			
+			List<AppointmentReminderTyps> remindTypes = getRemindTypes();
+			add(new DropDownChoice<AppointmentReminderTyps>(
+					"remind"
+					, remindTypes
+					, new IChoiceRenderer<AppointmentReminderTyps>() {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public Object getDisplayValue(AppointmentReminderTyps object) {
+							return getString("" + object.getFieldvalues_id());
+						}
+
+						@Override
+						public String getIdValue(AppointmentReminderTyps object, int index) {
+							return "" + object.getTypId();
+						}
+					}));
+			
+			add(roomType.setEnabled(createRoom).setOutputMarkupId(true));
+			
+			add(room.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));
+			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					createRoom = getConvertedInput();
+					target.add(roomType.setEnabled(createRoom), room.setEnabled(!createRoom));
+				}
+			});
+			add(new AjaxCheckBox("passwordProtected") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());
+					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());
+					target.add(pwd);
+				}
+			});
+			add(new UserMultiChoice("attendees", attendeesModel));
+				
+			add(owner);
+		}
+		
+		private List<AppointmentReminderTyps> getRemindTypes() {
+			return getBean(AppointmentReminderTypDao.class).getAppointmentReminderTypList(getLanguage());
+		}
+		
+		private List<Room> getRoomList() {
+			//FIXME need to be reviewed
+			List<Room> result = new ArrayList<Room>();
+			RoomDao dao = getBean(RoomDao.class);
+			result.addAll(dao.getPublicRooms());
+			for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {
+				result.addAll(dao.getOrganisationRooms(ou.getOrganisation().getOrganisation_id()));
+			}
+			if (getModelObject().getRoom() != null && getModelObject().getRoom().getAppointment()) { //FIXME review
+				result.add(getModelObject().getRoom());
+			}
+			return result;
+		}
+		
+		@Override
+		protected void onValidate() {
+			if (end.getConvertedInput().isBefore(start.getConvertedInput())) {
+				error(Application.getString(1592));
+			}
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
new file mode 100644
index 0000000..b8ba20b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
+import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
+
+public class AppointmentModel extends CalendarModel implements ICalendarVisitor {
+	private static final long serialVersionUID = 1L;
+
+	public void visit(CalendarEvent event) {
+		//every event can be customized
+	}
+
+	@Override
+	protected List<? extends CalendarEvent> load() {
+		List<CalendarEvent> list = new ArrayList<CalendarEvent>();
+		for (Appointment a : getBean(AppointmentDao.class).getAppointmentsByRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {
+			list.add(new OmCalendarEvent(a));
+		}
+		return list;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
new file mode 100644
index 0000000..76616f2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author Sebastien Briquet
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.resource.TextTemplateResourceReference;
+import org.apache.wicket.util.collections.MicroMap;
+
+public class CalendarFunctionsBehavior extends Behavior {
+	private static final long serialVersionUID = 1L;
+	private final String markupId;
+	
+	public CalendarFunctionsBehavior(String markupId) {
+		this.markupId = markupId;
+	}
+	
+	private IModel<Map<String, Object>> newResourceModel() {
+		return Model.ofMap(new MicroMap<String, Object>("markupId", this.markupId));
+	}
+	
+	private ResourceReference newResourceReference() {
+		return new TextTemplateResourceReference(CalendarFunctionsBehavior.class, "calendar-functions.js", this.newResourceModel());
+	}
+	
+	@Override
+	public void renderHead(Component component, IHeaderResponse response) {
+		super.renderHead(component, response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(this.newResourceReference(), "calendar-functions")));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
new file mode 100644
index 0000000..6468e94
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="wrapper-panel-frame" class="ui-corner-all">
+			<form wicket:id="form">
+				<div id="calendar" wicket:id="calendar"></div>
+				<br/>
+				<!-- div wicket:id="feedback"></div -->
+			</form>
+		</div>
+		<div wicket:id="appointment">[appointment]</div>
+		<!-- bottom section -->
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
new file mode 100644
index 0000000..193e8cf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
@@ -0,0 +1,273 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_FIRST_DAY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getZoneId;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONArray;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+import org.threeten.bp.temporal.ChronoUnit;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.calendar.Calendar;
+import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
+
+public class CalendarPanel extends UserPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarPanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+	private static final String javaScriptMarkup = "setCalendarHeight();";
+	private final String javaScriptAddDatepicker;
+	private final AbstractAjaxTimerBehavior refreshTimer = new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void onTimer(AjaxRequestTarget target) {
+			target.appendJavaScript("setCalendarHeight();");
+			refresh(target);
+		}
+	};
+	private Calendar calendar;
+	
+	@Override
+	public void onMenuPanelLoad(AjaxRequestTarget target) {
+	}
+
+	@Override
+	public void cleanup(AjaxRequestTarget target) {
+		refreshTimer.stop(target);
+	}
+	
+	private AppointmentDao getDao() {
+		return getBean(AppointmentDao.class);
+	}
+	
+	private AppointmentReminderTypDao getAppointmentReminderTypDao() {
+		return getBean(AppointmentReminderTypDao.class);
+	}
+	
+	public void refresh(AjaxRequestTarget target) {
+		calendar.refresh(target);
+	}
+	
+	Calendar getCalendar() {
+		return calendar;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+
+		AjaxRequestTarget target = getRequestCycle().find(AjaxRequestTarget.class);
+		if (target != null) {
+			target.appendJavaScript(javaScriptMarkup);
+			target.appendJavaScript(javaScriptAddDatepicker);
+		} else {
+			response.render(JavaScriptHeaderItem.forScript(javaScriptMarkup, this.getId()));
+		}
+	}
+
+	public CalendarPanel(String id) {
+		super(id);
+		
+		final Form<Date> form = new Form<Date>("form");
+		add(form);
+		
+		final AppointmentDialog dialog = new AppointmentDialog("appointment", Application.getString(815)
+				, this, new CompoundPropertyModel<Appointment>(getDefault()));
+		add(dialog);
+		
+		boolean isRtl = isRtl();
+		javaScriptAddDatepicker = String.format("addCalButton(%s, 'datepicker');", isRtl);
+		Options options = new Options();
+		options.set("isRTL", isRtl);
+		options.set("header", isRtl ? "{left: 'agendaDay,agendaWeek,month', center: 'title', right: 'today nextYear,next,prev,prevYear'}"
+				: "{left: 'prevYear,prev,next,nextYear today', center: 'title', right: 'month,agendaWeek,agendaDay'}");
+		options.set("allDaySlot", false);
+		options.set("axisFormat", Options.asString("H(:mm)"));
+		options.set("defaultEventMinutes", 60);
+		options.set("timeFormat", Options.asString("H(:mm)"));
+
+		options.set("buttonText", "{month: '" + Application.getString(801) +
+								"', week: '" + Application.getString(800) + 
+								"', day: '"  + Application.getString(799) + 
+								"', today: '"  + Application.getString(1555) + 
+								"'}");
+
+		JSONArray monthes = new JSONArray();
+		JSONArray shortMonthes = new JSONArray();
+		JSONArray days = new JSONArray();
+		JSONArray shortDays = new JSONArray();
+		try {
+			// first week day must be Sunday
+			days.put(0, Application.getString(466));
+			shortDays.put(0, Application.getString(459));
+			for (int i = 0; i < 12; i++) {
+				monthes.put(i, Application.getString(469 + i));
+				shortMonthes.put(i, Application.getString(1556 + i));
+				if (i + 1 < 7) {
+					days.put(i + 1, Application.getString(460 + i));
+					shortDays.put(i + 1, Application.getString(453 + i));
+				}
+			}
+		} catch (JSONException e) {
+			log.error("Unexpected error while creating label lists", e);
+		}
+		options.set("monthNames", monthes.toString());
+		options.set("monthNamesShort", shortMonthes.toString());
+		options.set("dayNames", days.toString());
+		options.set("dayNamesShort", shortDays.toString());
+		options.set("firstDay", getBean(ConfigurationDao.class).getConfValue(CONFIG_CALENDAR_FIRST_DAY, String.class, "0"));
+		
+		calendar = new Calendar("calendar", new AppointmentModel(), options) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onInitialize() {
+				super.onInitialize();
+				add(new CalendarFunctionsBehavior(getMarkupId()));
+			}
+			
+			@Override
+			public boolean isSelectable() {
+				return true;
+			}
+			
+			@Override
+			public boolean isDayClickEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventClickEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventDropEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventResizeEnabled() {
+				return true;
+			}
+			
+			//no need to override onDayClick
+			
+			@Override
+			public void onSelect(AjaxRequestTarget target, CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
+				Appointment a = getDefault();
+				LocalDateTime s = start, e = end;
+				if (CalendarView.month == view) {
+					LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
+					s = start.withHour(now.getHour()).withMinute(now.getMinute());
+					e = s.plus(1, ChronoUnit.HOURS);
+				}
+				a.setStart(getDate(s));
+				a.setEnd(getDate(e));
+				dialog.setModelObjectWithAjaxTarget(a, target);
+				
+				dialog.open(target);
+			}
+			
+			@Override
+			public void onEventClick(AjaxRequestTarget target, CalendarView view, int eventId) {
+				Appointment a = getDao().get((long)eventId);
+				dialog.setModelObjectWithAjaxTarget(a, target);
+				
+				dialog.open(target);
+			}
+			
+			@Override
+			public void onEventDrop(AjaxRequestTarget target, int eventId, long delta, boolean allDay) {
+				AppointmentDao dao = getDao();
+				Appointment a = dao.get((long)eventId);
+
+				if (!AppointmentDialog.isOwner(a)) {
+					return;
+				}
+				java.util.Calendar cal = WebSession.getCalendar();
+				cal.setTime(a.getStart());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setStart(cal.getTime());
+				
+				cal.setTime(a.getEnd());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setEnd(cal.getTime());
+				
+				dao.update(a, getUserId());
+				//FIXME add feedback info
+			}
+
+			@Override
+			public void onEventResize(AjaxRequestTarget target, int eventId, long delta) {
+				AppointmentDao dao = getDao();
+				Appointment a = dao.get((long)eventId);
+				if (!AppointmentDialog.isOwner(a)) {
+					return;
+				}
+				java.util.Calendar cal = WebSession.getCalendar();
+				cal.setTime(a.getEnd());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setEnd(cal.getTime());
+				
+				dao.update(a, getUserId());
+				//FIXME add feedback info
+			}
+		};
+		
+		form.add(calendar);
+		add(refreshTimer);
+	}
+	
+	private Appointment getDefault() {
+		Appointment a = new Appointment();
+		a.setRemind(getAppointmentReminderTypDao().get(3L)); //TODO: Make configurable
+		a.setOwner(getBean(UserDao.class).get(getUserId()));
+		a.setTitle(Application.getString(1444));
+		log.debug(" -- getDefault -- Current model " + a);
+		return a;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java b/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
new file mode 100644
index 0000000..5f62a2c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+
+public class OmCalendarEvent extends CalendarEvent {
+	private static final long serialVersionUID = 1L;
+	
+	public OmCalendarEvent(Appointment a) {
+		super(a.getId().intValue(), a.getTitle(), null);
+		setStart(getDateTime(a.getStart()));
+		setEnd(getDateTime(a.getEnd()));
+		setEditable(AppointmentDialog.isOwner(a));
+		setAllDay(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js b/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
new file mode 100644
index 0000000..fe10b46
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author Sebastien Briquet
+ */
+function getCalendarHeight() {
+    return $(window).height() - $('#${markupId}').position().top - 20;
+}
+
+function setCalendarHeight() {
+	var cal = $('#${markupId}');
+	if (cal.length) {
+    	cal.fullCalendar('option', 'height', getCalendarHeight());
+	}
+}
+
+$(function() {
+    $(window).load(function() { setCalendarHeight(); } );
+});
+
+function toggleDatePicker(id) {
+	var dp = $("#" + id);
+	dp.datepicker(dp.datepicker("widget").is(":visible") ? "hide" : "show");
+	return false;
+}
+function addCalButton(rtl, id) {
+	var my_button = 
+		'<button class="fc-button fc-state-default fc-corner-right fc-corner-left" onclick="return toggleDatePicker(\'' + id + '\');">' +
+		'<input type="text" id="' + id + '" /></button>';
+
+	if (rtl) {
+		$(".fc .fc-toolbar .fc-right").prepend(my_button);
+	} else {
+		$(".fc .fc-toolbar .fc-left").append(my_button);
+	}
+	 
+	var dp = $("#" + id);
+	dp.datepicker({
+		showOn: "button",
+		buttonImage: "images/calendar.gif",
+		buttonImageOnly: true,
+		changeMonth: true,
+		changeYear: true,
+		changeDay: true,
+		dayNames: $('#${markupId}').fullCalendar("option","dayNames"),
+		dayNamesShort: $('#${markupId}').fullCalendar("option","dayNamesShort"),
+		dayNamesMin: $('#${markupId}').fullCalendar("option","dayNamesShort"),
+		monthNames: $('#${markupId}').fullCalendar("option","monthNames"),
+		monthNamesShort: $('#${markupId}').fullCalendar("option","monthNamesShort"),
+		isRTL: rtl,
+		onChangeMonthYear: function(year, month, inst) {
+			$('#${markupId}').fullCalendar('gotoDate', year + '-' + ('0' + month).slice(-2) + '-' + inst.selectedDay);
+		},
+		onSelect: function(dateText, inst) {
+			var date = new Date(dateText);
+			$('#${markupId}').fullCalendar('gotoDate', date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + date.getDate());
+		}
+	});
+	dp.hide();
+}
+ 
+function setDatepickerDate(id, date) {
+	$("#"+id).datepicker('setDate', date);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
new file mode 100644
index 0000000..6c7657d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.AbstractWidget;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetLocation;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class MyRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
+
+	public MyRoomsWidget() {
+		super();
+		location = new WidgetLocation(0, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(781L);
+		id = WIDGET_ID_MY_ROOMS;
+	}
+	
+	public WidgetView createView(String viewId) {
+		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
new file mode 100644
index 0000000..27c2b87
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+
+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	public String getName() {
+		return Application.getString(781L);
+	}
+
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	public String getDescription() {
+		return Application.getString(782L);
+	}
+
+	public String getWidgetClassName() {
+		return MyRoomsWidget.class.getName();
+	}
+
+	public String getTypeName() {
+		return "om.widget.myrooms";
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
new file mode 100644
index 0000000..3ae8f1d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+    	<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
new file mode 100644
index 0000000..1d8ba5a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;
+
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class MyRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public MyRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		
+		add(new RoomsPanel("rooms", getMyRooms()));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
new file mode 100644
index 0000000..63665f4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="dashboard" class="dashboard"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
new file mode 100644
index 0000000..5afa653
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.web.DashboardPanel;
+
+public class OmDashboardPanel extends UserPanel {
+	private static final long serialVersionUID = 7815949875883825949L;
+
+	public OmDashboardPanel(String id) {
+		super(id);
+
+		add(new DashboardPanel("dashboard", new Model<Dashboard>(WebSession.getDashboard())).setRtlModel(Model.of(isRtl())));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
new file mode 100644
index 0000000..92da6ca
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.AbstractWidget;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetLocation;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class RssWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RSS = "RssWidget";
+
+	public RssWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(277L);
+		id = WIDGET_ID_RSS;
+	}
+	
+	public WidgetView createView(String viewId) {
+		return new RssWidgetView(viewId, new Model<Widget>(this));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
new file mode 100644
index 0000000..67d96d1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+
+public class RssWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = -9113376703084624276L;
+
+	public String getName() {
+		return Application.getString(277L);
+	}
+
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	public String getDescription() {
+		return Application.getString(277L);
+	}
+
+	public String getWidgetClassName() {
+		return RssWidget.class.getName();
+	}
+
+	public String getTypeName() {
+		return "om.widget.rss";
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
new file mode 100644
index 0000000..4671c4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript">
+		var MAX_ITEM_COUNT = 5;
+		function getRssItems(url, next) {
+			//TODO items need to be merged and sorted by date
+			$.ajax({
+				url: url
+				, type: 'GET'
+			    , crossDomain: true
+				, dataType: 'xml'
+				, success: function(data, status, xhr) {
+					var $xml = $(data);
+					var counter = MAX_ITEM_COUNT;
+					$xml.find("item").each(function() {
+						var $this = $(this), item = {
+							title : $this.find("title").text(),
+							link : $this.find("link").text(),
+							description : $this.find("description").text(),
+							pubDate : $this.find("pubDate").text(),
+							author : $this.find("author").text()
+						}
+						addItem(item);
+						if (--counter < 0) {
+							return false;
+						}
+					});
+					counter = MAX_ITEM_COUNT;
+					$xml.find("entry").each(function() {
+						var $this = $(this), item = {
+							title : $this.find("title").text(),
+							link : $this.find("link").text(),
+							description : $this.find("content"),
+							pubDate : $this.find("published").text(),
+							author : $this.find("author").text()
+						}
+						addItem(item);
+						if (--counter < 0) {
+							return false;
+						}
+					});
+					if (next) {
+						getRssItems(next, null)
+					} else {
+						$('#feeds').accordion({collapsible: true, active: false, header: 'h3'});
+					}
+				}
+			});
+		}
+		function addItem(item) {
+			//TODO need to be checked
+			$('#feeds').append('<h3>' + item.title + '</h3>')
+				.append($('<div></div>').append(item.description));
+		}
+		function loadRssTab(url1, url2) {
+			$('#feedcontainer').html('');
+			$('#feedcontainer').append('<div id="feeds"></div>');
+			getRssItems(url1, url2);
+		}
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div id="feedcontainer"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
new file mode 100644
index 0000000..0b38886
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.rss.LoadAtomRssFeed.getFeedConnection;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class RssWidgetView extends WidgetView {
+	private static final long serialVersionUID = -6257866996099503210L;
+	private RSSFeedBehavior feed1; 
+	private RSSFeedBehavior feed2; 
+
+	public RssWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		add(feed1 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED1_KEY, String.class, "")));
+		add(feed2 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED2_KEY, String.class, "")));
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(OnDomReadyHeaderItem.forScript("loadRssTab('" + feed1.getCallbackUrl() + "',"
+				+ "'" + feed2.getCallbackUrl() + "');")) ;
+	}
+	
+	class RSSFeedBehavior extends AbstractAjaxBehavior {
+		private static final long serialVersionUID = 721009368063152450L;
+		private String url;
+
+		RSSFeedBehavior(String url) {
+			this.url = url;
+		}
+		
+		public void onRequest() {
+			ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new AbstractResourceStream() {
+				private static final long serialVersionUID = -322593118428697261L;
+				HttpURLConnection con;
+				
+				public InputStream getInputStream() throws ResourceStreamNotFoundException {
+					try {
+						con = getFeedConnection(url);
+						con.connect();
+						return con.getInputStream();
+					} catch (IOException e) {
+						throw new ResourceStreamNotFoundException();
+					}
+				}
+
+				public void close() throws IOException {
+					if (con != null) {
+						con.disconnect();
+					}
+				}
+			}, "feed");
+			handler.setContentDisposition(ContentDisposition.ATTACHMENT);
+			getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
new file mode 100644
index 0000000..cf42431
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.AbstractWidget;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetLocation;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class StartWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+
+	public StartWidget() {
+		super();
+		location = new WidgetLocation(1, 0);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(774L);
+		id = "StartWidget";
+	}
+	
+	public WidgetView createView(String viewId) {
+		return new StartWidgetView(viewId, new Model<Widget>(this));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
new file mode 100644
index 0000000..75e4a69
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+
+public class StartWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 2533010836978961930L;
+
+	public String getName() {
+		return Application.getString(774L);
+	}
+
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	public String getDescription() {
+		return Application.getString(804L);
+	}
+
+	public String getWidgetClassName() {
+		return StartWidget.class.getName();
+	}
+
+	public String getTypeName() {
+		return "om.widget.start";
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
new file mode 100644
index 0000000..e783ab0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<h3><wicket:message key="774"/></h3>
+		<div><div wicket:id="step1" class="clickable start_step1"><wicket:message key="768"/></div></div>
+		<div><div wicket:id="step2" class="clickable start_step2"><wicket:message key="771"/></div></div>
+		<div><div wicket:id="step3" class="clickable start_step3"><wicket:message key="772"/></div></div>
+		<div><div wicket:id="step4" class="clickable start_step4"><wicket:message key="773"/></div></div>
+		<table>
+			<tr>
+				<td><span wicket:id="desc"></span></td>
+				<td>
+					<button wicket:id="start" type="button"><wicket:message key="788"/></button><br/>
+					<button wicket:id="calendar" type="button"><wicket:message key="291"/></button>
+				</td>
+			</tr>
+		</table>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
new file mode 100644
index 0000000..e1dd66b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.util.OmUrlFragment.CALENDAR;
+import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public class StartWidgetView extends WidgetView {
+	private static final long serialVersionUID = -3886388347737468022L;
+
+	public StartWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		add(new WebMarkupContainer("step1").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step2").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step3").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step4").add(new PublicRoomsEventBehavior()));
+		add(new Label("desc", Application.getString(804L)));
+		add(new Button("start").add(new PublicRoomsEventBehavior()));
+		add(new Button("calendar").add(new AjaxEventBehavior("onclick") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(CALENDAR, target);
+			}
+		}));
+	}
+	
+	private class PublicRoomsEventBehavior extends AjaxEventBehavior {
+		private static final long serialVersionUID = 1L;
+
+		public PublicRoomsEventBehavior() {
+			super("onclick");
+		}
+		
+		@Override
+		protected void onEvent(AjaxRequestTarget target) {
+			((MainPage)getPage()).updateContents(ROOMS_PUBLIC, target);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
new file mode 100644
index 0000000..8b27fb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.AbstractWidget;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetLocation;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class WelcomeWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+
+	public WelcomeWidget() {
+		super();
+		location = new WidgetLocation(0, 0);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(1546L);
+		id = "WelcomeWidget";
+	}
+	
+	public WidgetView createView(String viewId) {
+		return new WelcomeWidgetView(viewId, new Model<Widget>(this));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
new file mode 100644
index 0000000..83f2c51
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+
+public class WelcomeWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 7835392425157215242L;
+
+	public String getName() {
+		return Application.getString(1546L);
+	}
+
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	public String getDescription() {
+		return Application.getString(1547L);
+	}
+
+	public String getWidgetClassName() {
+		return WelcomeWidget.class.getName();
+	}
+
+	public String getTypeName() {
+		return "om.widget.welcome";
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
new file mode 100644
index 0000000..b41c9f3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+   	<table>
+   		<tr>
+   			<td><div wicket:id="img"></div></td>
+   			<td>
+   				<h3><wicket:message key="376"/>&nbsp;<span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></h3>
+   				<wicket:message key="1143"/>&nbsp;<span wicket:id="tz"></span><br/>
+   				<wicket:message key="378"/>&nbsp;<a wicket:id="openUnread"><span wicket:id="unread"></span></a><br/>
+   				<a wicket:id="editProfile"><wicket:message key="377"/></a>
+   			</td>
+   		</tr>
+   		<tr>
+   			<td colspan="2" class="help support">
+   				<h3><wicket:message key="281"/></h3>
+   				<a wicket:message="href:282"><wicket:message key="286"/></a><br/>
+   				<a wicket:message="href:283"><wicket:message key="287"/></a><br/>
+				<a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a><br/>
+			</td>
+   		</tr>
+   	</table>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
new file mode 100644
index 0000000..f1586c9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.UploadableProfileImagePanel;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+public class WelcomeWidgetView extends WidgetView {
+	private static final long serialVersionUID = -6257866996099503210L;
+
+	public WelcomeWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+
+		User u = getBean(UserDao.class).get(getUserId());
+		add(new UploadableProfileImagePanel("img", getUserId()));
+		 //FIXME this need to be aligned according to Locale
+		add(new Label("firstname", Model.of(u.getFirstname())));
+		add(new Label("lastname", Model.of(u.getLastname())));
+		add(new Label("tz", Model.of(u.getTimeZoneId())));
+		add(new AjaxLink<Void>("openUnread") {
+			private static final long serialVersionUID = -1847619557485964386L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(PROFILE_MESSAGES, target);
+			}
+		}.add(new Label("unread", Model.of("" + getBean(PrivateMessagesDao.class).count(getUserId(), INBOX_FOLDER_ID, null)))));
+		add(new AjaxLink<Void>("editProfile") {
+			private static final long serialVersionUID = -1847619557485964386L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(PROFILE_EDIT, target);
+			}
+		});
+		add(new Link<Void>("netTest") {
+			private static final long serialVersionUID = -9055312659797800331L;
+
+			@Override
+			public void onClick() {
+				PageParameters pp = new PageParameters();
+				pp.add("swf", "networktesting.swf10.swf");
+				setResponsePage(SwfPage.class, pp);
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
new file mode 100644
index 0000000..b5ce92e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<style type="text/css">
+		.ui-autocomplete {
+			z-index: 999 !important;
+		}
+	</style>
+</wicket:head>
+<wicket:panel>
+	<form wicket:id="form">
+		<table style="width: 100%;">
+			<tr>
+				<td colspan="2" wicket:id="feedback"></td>
+			</tr>
+			<tr>
+				<td class="messages column label"><wicket:message key="1210"/></td>
+				<td wicket:message="title:1588"><input class="messages text to" type="hidden" wicket:id="to"/></td>
+			</tr>
+			<tr>
+				<td class="messages column label"><wicket:message key="1211"/></td>
+				<td><input class="messages text" type="text" wicket:id="subject"/></td>
+			</tr>
+			<tr>
+				<td colspan="2">
+					<div wicket:id="toolbarContainer"></div>
+					<div wicket:id="message"></div>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="2"><input type="checkbox" wicket:id="bookedRoom" /><label wicket:for="bookedRoom"><wicket:message key="1218"/></label></td>
+			</tr>
+			<tr wicket:id="roomParamsBlock">
+				<td colspan="2" wicket:id="roomParams">
+					<table style="width: 100%">
+						<tr>
+							<td style="width: 70px;">
+								<table>
+									<tr>
+										<td><wicket:message key="194"/></td>
+										<td><select class="messages selector" wicket:id="room.roomtype"></select></td>
+									</tr>
+									<tr>
+										<td><wicket:message key="570" /></td>
+										<td><span class="date time picker" wicket:id="start"></span></td>
+									</tr>
+									<tr>
+										<td><wicket:message key="571" /></td>
+										<td><span class="date time picker" wicket:id="end"></span></td>
+									</tr>
+								</table>
+							</td>
+							<td><div class="info-text"><wicket:message key="1221" /></div></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</form>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
new file mode 100644
index 0000000..1b74972
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
@@ -0,0 +1,271 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getZoneId;
+import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.util.LinkHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.util.CalendarWebHelper;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.CollectionModel;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+import org.threeten.bp.temporal.ChronoUnit;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class MessageDialog extends AbstractFormDialog<PrivateMessage> {
+	private static final long serialVersionUID = 1L;
+	private final Form<PrivateMessage> form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	DialogButton send = new DialogButton("send", Application.getString(218));
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final WebMarkupContainer roomParamsBlock = new WebMarkupContainer("roomParamsBlock");
+	private final WebMarkupContainer roomParams = new WebMarkupContainer("roomParams");
+	private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+	private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
+	private boolean isPrivate = false; 
+	private final IModel<Collection<User>> modelTo = new CollectionModel<User>(new ArrayList<User>());
+
+	@Override
+	public int getWidth() {
+		return 650;
+	}
+	
+	public void open(AjaxRequestTarget target, long userId) {
+		getModelObject().setTo(getBean(UserDao.class).get(userId));
+		open(target);
+	}
+	
+	public MessageDialog reset(boolean isPrivate) {
+		//TODO should be 'in sync' with appointment
+		LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
+		start.setModelObject(now);
+		end.setModelObject(now.plus(1, ChronoUnit.HOURS));
+		modelTo.setObject(new ArrayList<User>());
+		PrivateMessage p = new PrivateMessage();
+		p.setFrom(getBean(UserDao.class).get(getUserId()));
+		p.setOwner(p.getFrom());
+		p.setIsRead(false);
+		p.setFolderId(INBOX_FOLDER_ID);
+		Room r = new Room();
+		r.setAppointment(true);
+		r.setRoomtype(getRoomTypes().get(0));
+		p.setRoom(r);
+		setModelObject(p);
+		roomParams.setVisible(getModelObject().isBookedRoom());
+		form.setModelObject(p);
+		this.isPrivate = isPrivate;
+		return this;
+	}
+	
+	@Override
+	protected void onOpen(AjaxRequestTarget target) {
+		if (getModel().getObject().getTo() != null) {
+			modelTo.getObject().add(getModel().getObject().getTo());
+		}
+		target.add(form);
+		super.onOpen(target);
+	}
+	
+	public MessageDialog(String id, CompoundPropertyModel<PrivateMessage> model) {
+		super(id, Application.getString(1209), model);
+		form = new Form<PrivateMessage>("form", getModel());
+		
+		form.add(feedback.setOutputMarkupId(true));
+		form.add(new UserMultiChoice("to", modelTo).setRequired(true));
+		form.add(new TextField<String>("subject"));
+		DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
+		form.add(toolbar);
+		form.add(new WysiwygEditor("message", toolbar));
+		form.add(roomParamsBlock.setOutputMarkupId(true));
+		final CheckBox bookedRoom = new CheckBox("bookedRoom");
+		form.add(bookedRoom.setOutputMarkupId(true).add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				PrivateMessage p = MessageDialog.this.getModelObject();
+				p.setBookedRoom(!p.isBookedRoom());
+				roomParams.setVisible(p.isBookedRoom());
+				target.add(bookedRoom, roomParamsBlock);
+			}
+		}));
+		roomParamsBlock.add(roomParams);
+		roomParams.add(new RoomTypeDropDown("room.roomtype"));
+		roomParams.add(start);
+		roomParams.add(end);
+		add(form.setOutputMarkupId(true));
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(send, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	public Form<PrivateMessage> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		PrivateMessage p = getModelObject();
+		p.setInserted(new Date());
+		UserDao userDao = getBean(UserDao.class); 
+		User owner = userDao.get(getUserId());
+		if (p.isBookedRoom()) {
+			Room r = p.getRoom();
+			r.setName(p.getSubject());
+			r.setComment("");
+			r.setNumberOfPartizipants(100L);
+			r.setAppointment(true);
+			r.setAllowUserQuestions(true);
+			r.setAllowFontStyles(true);
+			r = getBean(RoomDao.class).update(r, getUserId());
+			Appointment a = new Appointment();
+			a.setTitle(p.getSubject());
+			a.setDescription(p.getMessage());
+			a.setRoom(r);
+			a.setStart(CalendarWebHelper.getDate(start.getModelObject()));
+			a.setEnd(CalendarWebHelper.getDate(end.getModelObject()));
+			List<MeetingMember> attendees = new ArrayList<>();
+			for (User to : modelTo.getObject()) {
+        		MeetingMember mm = new MeetingMember();
+        		mm.setUser(to);
+        		mm.setDeleted(false);
+        		mm.setInserted(a.getInserted());
+        		mm.setUpdated(a.getUpdated());
+        		mm.setAppointment(a);
+        		attendees.add(mm);
+			}
+			a.setOwner(owner);
+			a.setMeetingMembers(attendees);
+	        getBean(AppointmentDao.class).update(a, getUserId(), false);
+			p.setRoom(r);
+		} else {
+			p.setRoom(null);
+		}
+		PrivateMessagesDao msgDao = getBean(PrivateMessagesDao.class);
+		for (User to : modelTo.getObject()) {
+			if (to.getUser_id() == null) {
+				userDao.update(to, getUserId());
+			}
+			//to send
+			p = new PrivateMessage(p);
+			p.setTo(to);
+			p.setFolderId(SENT_FOLDER_ID);
+			msgDao.update(p, getUserId());
+			//to inbox
+			p = new PrivateMessage(p);
+			p.setOwner(to);
+			p.setFolderId(INBOX_FOLDER_ID);
+			msgDao.update(p, getUserId());
+			if (to.getAdresses() != null) {
+				String aLinkHTML = 	(isPrivate && to.getType() == Type.user) ? "<br/><br/>" + "<a href='" + ContactsHelper.getLink() + "'>"
+							+ Application.getString(1302, to.getLanguage_id()) + "</a><br/>" : "";
+				String invitation_link = "";
+				if (p.isBookedRoom()) {
+					Invitation i = getBean(InvitationManager.class).getInvitation(to, p.getRoom(),
+							false, null, Valid.Period, owner, to.getLanguage_id()
+							, CalendarHelper.getDate(start.getModelObject(), to.getTimeZoneId())
+							, CalendarHelper.getDate(end.getModelObject(), to.getTimeZoneId()), null);
+					
+					invitation_link = LinkHelper.getInvitationLink(getBean(ConfigurationDao.class).getBaseUrl(), i);
+
+					if (invitation_link == null) {
+						invitation_link = "";
+					} else {
+						invitation_link = "<br/>" //
+								+ Application.getString(503, to.getLanguage_id())
+								+ "<br/><a href='" + invitation_link
+								+ "'>"
+								+ Application.getString(504, to.getLanguage_id()) + "</a><br/>";
+					}
+				}
+				
+				getBean(MailHandler.class).send(to.getAdresses().getEmail(),
+						Application.getString(1301, to.getLanguage_id()) + p.getSubject(),
+						(p.getMessage() == null ? "" : p.getMessage().replaceAll("\\<.*?>", "")) + aLinkHTML + invitation_link);
+			}
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		modelTo.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
new file mode 100644
index 0000000..c1dd333
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<!-- TODO design should be changed in the future -->
+	<table class="messages">
+		<tr>
+			<td class="side left">
+				<div class="email new clickable" wicket:id="new" wicket:message="title:1208"><wicket:message key="1207"/></div>
+				<div wicket:id="folders">
+					<div wicket:id="inbox"><wicket:message key="1222"/></div>
+					<div wicket:id="sent"><wicket:message key="1223"/></div>
+					<div wicket:id="trash"><wicket:message key="1224"/></div>
+					<div class="email newdir clickable" wicket:id="newdir" wicket:message="title:1259"><wicket:message key="1258"/></div>
+					<div wicket:id="folder">
+						<div wicket:id="name"></div>
+						<div class="delete" wicket:id="delete" wicket:message="title:1262"></div>
+					</div>
+				</div>
+			</td>
+			<td class="main">
+				<div><b><wicket:message key="1206"/>&nbsp;(<span wicket:id="unread"></span>)</b></div>
+				<div wicket:id="navigator"></div>
+				<table id="messagesTable" style="width: 100%;">
+					<thead>
+					<tr>
+						<th align="left"><span wicket:id="orderById"></span><wicket:message key="1205"/></th>
+						<th align="left"><span wicket:id="orderByFrom"></span><wicket:message key="1202"/></th>
+						<th align="left"><span wicket:id="orderBySubject"></span><wicket:message key="1203"/></th>
+						<th align="left"><span wicket:id="orderBySend"></span><wicket:message key="1204"/></th>
+					</tr>
+					</thead>
+					<tbody wicket:id="container" style="background-color: white;">
+					<tr wicket:id="messages">
+						<td wicket:id="id"></td>
+						<td wicket:id="from"></td>
+						<td wicket:id="subject"></td>
+						<td wicket:id="send"></td>
+					</tr>
+					</tbody>
+				</table>
+				<div wicket:id="buttons">
+					<select wicket:id="msgSelect"></select>
+					<input wicket:id="toInboxBtn" type="button" wicket:message="value:1255"/>
+					<input wicket:id="deleteBtn" type="button" wicket:message="value:1245"/>
+					<input wicket:id="readBtn" type="button" wicket:message="value:1248"/>
+					<input wicket:id="unreadBtn" type="button" wicket:message="value:1247"/>
+					<select wicket:id="msgMove"></select>
+				</div>
+				<div wicket:id="selectedMessage">
+					<table style="width: 100%">
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1202"/></td>
+							<td wicket:id="from"></td>
+						</tr>
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1210"/></td>
+							<td wicket:id="to"></td>
+						</tr>
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1211"/></td>
+							<td wicket:id="subj"></td>
+						</tr>
+					</table>
+					<div style="background-color: white;min-height: 300px;" wicket:id="body"></div>
+					<div wicket:id="roomContainer">
+						<table style="width: 100%">
+							<tr>
+								<td>
+									<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" wicket:id="enter">
+										<span class="ui-button-text"><wicket:message key="1282"/></span>
+									</button>
+								</td>
+								<td>
+									<div style="display: inline-block; width: 300px;"><wicket:message key="570" /></div><span wicket:id="start"></span><br/>
+									<div style="display: inline-block; width: 300px;"><wicket:message key="571" /></div><span wicket:id="end"></span>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</td>
+			<td class="side right" wicket:id="contacts">
+				<div><b><wicket:message key="1189"/>&nbsp;(<span wicket:id="pendingContacts"></span>)</b></div>
+				<div><b><wicket:message key="1188"/>&nbsp;(<span wicket:id="allContacts"></span>)</b></div>
+				<table style="width: 100%">
+					<tr>
+						<th><wicket:message key="1180"/></th>
+						<th><wicket:message key="1185"/></th>
+					</tr>
+					<tr wicket:id="users">
+						<td><div wicket:id="name" style="overflow-x: hidden;"></div></td>
+						<td><div wicket:id="accept" class="tick om-icon clickable" wicket:message="title:1190"
+							></div><div wicket:id="decline" class="cross om-icon clickable" wicket:message="title:1191"
+							></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"
+							></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
+							></div><div wicket:id="delete" class="cross om-icon clickable" wicket:message="title:1234"
+							></div></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+	<div wicket:id="addFolder"></div>
+	<div wicket:id="newMessage"></div>
+	<div wicket:id="infoDialog"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
new file mode 100644
index 0000000..51f6ac0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@ -0,0 +1,646 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.AddFolderDialog;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+import ro.fortsoft.wicket.dashboard.web.util.ConfirmAjaxCallListener;
+
+public class MessagesContactsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final static long MOVE_CHOOSE = -1;
+	private final static int SELECT_CHOOSE = 1252;
+	private final static int SELECT_ALL = 1239;
+	private final static int SELECT_NONE = 1240;
+	private final static int SELECT_UNREAD = 1241;
+	private final static int SELECT_READ = 1242;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final WebMarkupContainer folders = new WebMarkupContainer("folders");
+	private final Label unread = new Label("unread", Model.of(0L));
+	private final Label pendingContacts = new Label("pendingContacts", Model.of(0L));
+	private final Label allContacts = new Label("allContacts", Model.of(0L));
+	private final IModel<Long> selectedFolderModel = Model.of(INBOX_FOLDER_ID);
+	private final IModel<List<? extends PrivateMessageFolder>> foldersModel;
+	private final WebMarkupContainer inbox = new WebMarkupContainer("inbox");
+	private final WebMarkupContainer sent = new WebMarkupContainer("sent");
+	private final WebMarkupContainer trash = new WebMarkupContainer("trash");
+	private final WebMarkupContainer selectedMessage = new WebMarkupContainer("selectedMessage");
+	private final WebMarkupContainer roomContainer = new WebMarkupContainer("roomContainer");
+	private final WebMarkupContainer buttons = new WebMarkupContainer("buttons");
+	private final WebMarkupContainer contacts = new WebMarkupContainer("contacts");
+	private final MessageDialog newMessage;
+	private final DataViewContainer<PrivateMessage> dataContainer;
+	private final Set<Long> selectedMessages = new HashSet<Long>();
+	private final Set<Long> allMessages = new HashSet<Long>();
+	private final Set<Long> readMessages = new HashSet<Long>();
+	private final Set<Long> unreadMessages = new HashSet<Long>();
+	private final Button toInboxBtn = new Button("toInboxBtn");
+	private final Button deleteBtn = new Button("deleteBtn");
+	private final Button readBtn = new Button("readBtn");
+	private final Button unreadBtn = new Button("unreadBtn");
+	private final FixedHeaderTableBehavior fixedTable = new FixedHeaderTableBehavior("#messagesTable", new Options("height", 100));
+	private final DropDownChoice<Integer> selectDropDown = new DropDownChoice<Integer>(
+		"msgSelect", Model.of(SELECT_CHOOSE)
+		, Arrays.asList(SELECT_CHOOSE, SELECT_ALL, SELECT_NONE, SELECT_UNREAD, SELECT_READ)
+		, new IChoiceRenderer<Integer>() {
+			private static final long serialVersionUID = 1L;
+	
+			public Object getDisplayValue(Integer object) {
+				return Application.getString(object);
+			}
+			
+			public String getIdValue(Integer object, int index) {
+				return "" + object;
+			}
+		});
+	private PrivateMessageFolder NOT_MOVE_FOLDER = new PrivateMessageFolder();
+	private final DropDownChoice<PrivateMessageFolder> moveDropDown = new DropDownChoice<PrivateMessageFolder>("msgMove", Model.of(NOT_MOVE_FOLDER)
+		, Arrays.asList(NOT_MOVE_FOLDER)
+		, new IChoiceRenderer<PrivateMessageFolder>() {
+			private static final long serialVersionUID = 1L;
+
+			public Object getDisplayValue(PrivateMessageFolder object) {
+				return object.getFolderName();
+			}
+
+			public String getIdValue(PrivateMessageFolder object, int index) {
+				return "" + object.getPrivateMessageFolderId();
+			}
+		});
+	private WebMarkupContainer selectedFolder;
+	
+	private void setDefaultFolderClass() {
+		inbox.add(AttributeAppender.replace("class", "email inbox clickable"));
+		sent.add(AttributeAppender.replace("class", "email sent clickable"));
+		trash.add(AttributeAppender.replace("class", "email trash clickable"));
+	}
+	
+	private void selectFolder(WebMarkupContainer folder) {
+		folder.add(AttributeAppender.append("class", "ui-widget-header ui-corner-all"));
+	}
+	
+	private void setFolderClass(ListItem<PrivateMessageFolder> folder) {
+		folder.add(AttributeAppender.replace("class", "email folder clickable"));
+		if (folder.getModelObject().getPrivateMessageFolderId() == selectedFolderModel.getObject()) {
+			selectFolder(folder);
+		}
+	}
+	
+	private void updateControls(AjaxRequestTarget target) {
+		deleteBtn.setEnabled(!selectedMessages.isEmpty());
+		readBtn.setEnabled(TRASH_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		unreadBtn.setEnabled(TRASH_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		toInboxBtn.setVisible(INBOX_FOLDER_ID != selectedFolderModel.getObject() && SENT_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		target.add(buttons);
+	}
+	
+	private String getEmail(User u) {
+		return u == null || u.getAdresses() == null ? "" : u.getAdresses().getEmail();
+	}
+	
+	private void selectMessage(long id, AjaxRequestTarget target) {
+		PrivateMessage msg = getBean(PrivateMessagesDao.class).get(id);
+		selectedMessage.addOrReplace(new Label("from", msg == null ? "" : getEmail(msg.getFrom())));
+		selectedMessage.addOrReplace(new Label("to", msg == null ? "" : getEmail(msg.getTo())));
+		selectedMessage.addOrReplace(new Label("subj", msg == null ? "" : msg.getSubject()));
+		selectedMessage.addOrReplace(new Label("body", msg == null ? "" : msg.getMessage()).setEscapeModelStrings(false));
+		if (msg != null) {
+			Room r = msg.getRoom();
+			if (r != null) {
+				//TODO add time check
+				Appointment a = getBean(AppointmentDao.class).getAppointmentByRoom(r.getRooms_id());
+				roomContainer.addOrReplace(new Label("start", a == null ? "" : getDateFormat().format(a.getStart())));
+				roomContainer.addOrReplace(new Label("end", a == null ? "" : getDateFormat().format(a.getEnd())));
+				roomContainer.addOrReplace(new Button("enter").add(new RoomEnterBehavior(r.getRooms_id())));
+			}
+			roomContainer.setVisible(r != null);
+		}
+		if (target != null) {
+			target.add(selectedMessage);
+			updateControls(target);
+		}
+	}
+	
+	void updateTable(AjaxRequestTarget target) {
+		container.add(fixedTable);
+		if (target != null) {
+			target.add(container);
+		}
+	}
+	
+	private void selectFolder(WebMarkupContainer folder, long id, AjaxRequestTarget target) {
+		selectedFolder = folder;
+		selectedFolderModel.setObject(id);
+		setDefaultFolderClass();
+		selectFolder(folder);
+		emptySelection(target);
+		selectDropDown.setModelObject(SELECT_CHOOSE);
+		moveDropDown.setModelObject(NOT_MOVE_FOLDER);
+		deleteBtn.add(AttributeModifier.replace("value", Application.getString(TRASH_FOLDER_ID == id ? 1256 : 1245)));
+		readBtn.setEnabled(false);
+		unreadBtn.setEnabled(false);
+		if (target != null) {
+			updateTable(target);
+			target.add(folders, unread, selectDropDown, moveDropDown);
+			target.add(dataContainer.container, dataContainer.navigator);
+			target.add(dataContainer.getLinks());
+		}
+	}
+	
+	private void emptySelection(AjaxRequestTarget target) {
+		selectedMessages.clear();
+		selectMessage(-1, target);
+		unread.setDefaultModelObject(getBean(PrivateMessagesDao.class).count(getUserId(), selectedFolderModel.getObject(), null));
+		if (target != null) {
+			target.add(unread);
+		}
+	}
+	
+	private String getDisplayName(User u) {
+		return new StringBuilder().append(u.getFirstname()).append(" ")
+				.append(u.getLastname()).append(" ")
+				.append("<").append(getEmail(u)).append(">")
+				.toString();
+	}
+	
+	private void updateMoveModel() {
+		List<PrivateMessageFolder> list = new ArrayList<PrivateMessageFolder>();
+		list.add(NOT_MOVE_FOLDER);
+		list.addAll(foldersModel.getObject());
+		moveDropDown.setChoices(list);
+	}
+	
+	private void updateContacts(AjaxRequestTarget target) {
+		pendingContacts.setDefaultModelObject(getBean(UserContactsDao.class).getContactRequestsByUserAndStatus(getUserId(), true).size());
+		allContacts.setDefaultModelObject(getBean(UserContactsDao.class).getContactsByUserAndStatus(getUserId(), false).size());
+		if (target != null) {
+			target.add(contacts);
+		}
+	}
+	
+	public MessagesContactsPanel(String id) {
+		super(id);
+		NOT_MOVE_FOLDER.setPrivateMessageFolderId(MOVE_CHOOSE);
+		NOT_MOVE_FOLDER.setFolderName(Application.getString(1243));
+		foldersModel = Model.ofList(getBean(PrivateMessageFolderDao.class).get(0, Integer.MAX_VALUE));
+		updateMoveModel();
+		add(newMessage = new MessageDialog("newMessage", new CompoundPropertyModel<PrivateMessage>(new PrivateMessage())) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				if (send.equals(button)) {
+					target.add(container);
+				}
+			}
+		});
+		
+		final AddFolderDialog addFolder = new AddFolderDialog("addFolder") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				super.onSubmit(target);
+				PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
+				fDao.addPrivateMessageFolder(getModelObject(), getUserId());
+				foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
+				updateMoveModel();
+				target.add(folders, moveDropDown);
+			}
+		};
+		add(addFolder);
+		add(new WebMarkupContainer("new").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				newMessage.reset(true).open(target);
+			}
+		}).add(new JQueryBehavior(".email.new", "button")));
+		folders.add(inbox.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(inbox, INBOX_FOLDER_ID, target);
+			}
+		}));
+		folders.add(sent.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(sent, SENT_FOLDER_ID, target);
+			}
+		}));
+		folders.add(trash.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(trash, TRASH_FOLDER_ID, target);
+			}
+		}));
+		folders.add(new WebMarkupContainer("newdir").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}).add(new JQueryBehavior(".email.newdir", "button")));
+		add(folders.add(new ListView<PrivateMessageFolder>("folder", foldersModel) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<PrivateMessageFolder> item) {
+				item.add(new Label("name", item.getModelObject().getFolderName()));
+				item.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
+						fDao.delete(item.getModelObject(), getUserId());
+						foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
+						updateMoveModel();
+						target.add(folders, moveDropDown);
+					}
+					
+					@Override
+					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+						super.updateAjaxAttributes(attributes);
+						attributes.getAjaxCallListeners().add(new ConfirmAjaxCallListener(Application.getString(713)));
+					}
+				}));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						selectFolder(item, item.getModelObject().getPrivateMessageFolderId(), target);
+					}
+				});
+				setFolderClass(item);
+			}
+		}).setOutputMarkupId(true));
+		
+		SearchableDataProvider<PrivateMessage> sdp = new SearchableDataProvider<PrivateMessage>(PrivateMessagesDao.class) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected PrivateMessagesDao getDao() {
+				return (PrivateMessagesDao)super.getDao();
+			}
+			
+			@Override
+			public Iterator<? extends PrivateMessage> iterator(long first, long count) {
+				allMessages.clear();
+				readMessages.clear();
+				unreadMessages.clear();
+				String sort = getSort() == null ? "" : "m." + getSort().getProperty();
+				boolean isAsc = getSort() == null ? true : getSort().isAscending();
+				return getDao().get(getUserId(), selectedFolderModel.getObject(), search, sort, isAsc, (int)first, (int)count).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return getDao().count(getUserId(), selectedFolderModel.getObject(), search);
+			}
+		};
+		final SearchableDataView<PrivateMessage> dv = new SearchableDataView<PrivateMessage>("messages", sdp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<PrivateMessage> item) {
+				PrivateMessage m = item.getModelObject();
+				final long id = m.getId();
+				allMessages.add(id);
+				if (m.getIsRead()) {
+					readMessages.add(id);
+				} else {
+					unreadMessages.add(id);
+				}
+				item.add(new Label("id", id));
+				item.add(new Label("from", getDisplayName(m.getFrom())));
+				item.add(new Label("subject", m.getSubject()));
+				item.add(new Label("send", getDateFormat().format(m.getInserted())));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						long selected = id;
+						if (selectedMessages.contains(id)) {
+							selectedMessages.remove(id);
+							selected = selectedMessages.isEmpty() ? -1 : selectedMessages.iterator().next();
+						} else {
+							selectedMessages.add(id);
+						}
+						selectMessage(selected, target);
+						target.add(container);
+					}
+				});
+				StringBuilder cssClass = new StringBuilder(Boolean.FALSE.equals(m.getIsRead()) ? "unread" : "");
+				if (selectedMessages.contains(id)) {
+					if (cssClass.length() > 0) {
+						cssClass.append(" ");
+					}
+					cssClass.append("ui-state-active");
+				}
+				item.add(AttributeModifier.replace("class", cssClass.toString()));
+			}
+		};
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dv) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				emptySelection(target);
+				target.add(container);
+			}
+		};
+		dataContainer = new DataViewContainer<PrivateMessage>(container, dv, navigator);
+		dataContainer.addLink(new OmOrderByBorder<PrivateMessage>("orderById", "id", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderByFrom", "from.lastname", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderBySubject", "subject", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderBySend", "inserted", dataContainer));
+		add(dataContainer.getLinks());
+		add(navigator);
+		
+		add(unread.setOutputMarkupId(true));
+		
+		add(buttons.setOutputMarkupId(true));
+		buttons.add(toInboxBtn.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, INBOX_FOLDER_ID);
+				selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
+			}
+		}));
+		buttons.add(deleteBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					if (TRASH_FOLDER_ID == selectedFolderModel.getObject()) {
+						getBean(PrivateMessagesDao.class).delete(selectedMessages);
+					} else {
+						getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, TRASH_FOLDER_ID);
+					}
+					emptySelection(target);
+					target.add(container);
+				}
+			}));
+		buttons.add(readBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					getBean(PrivateMessagesDao.class).updateReadStatus(selectedMessages, true);
+					emptySelection(target);
+					target.add(container, unread);
+				}
+			}));
+		buttons.add(unreadBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					getBean(PrivateMessagesDao.class).updateReadStatus(selectedMessages, false);
+					emptySelection(target);
+					target.add(container);
+				}
+			}));
+		buttons.add(selectDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				switch (selectDropDown.getModelObject()) {
+					case SELECT_CHOOSE:
+						break;
+					case SELECT_ALL:
+						selectedMessages.clear();
+						selectedMessages.addAll(allMessages);
+						break;
+					case SELECT_NONE:
+						selectedMessages.clear();
+						break;
+					case SELECT_UNREAD:
+						selectedMessages.clear();
+						selectedMessages.addAll(unreadMessages);
+						break;
+					case SELECT_READ:
+						selectedMessages.clear();
+						selectedMessages.addAll(readMessages);
+						break;
+				}
+				target.add(container);
+			}
+		}));
+		buttons.add(moveDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				long folderId = moveDropDown.getModelObject().getPrivateMessageFolderId();
+				if (folderId != MOVE_CHOOSE) {
+					getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, folderId);
+				}
+				selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
+			}
+		}));
+		
+		selectMessage(-1, null);
+		add(container.add(dv).setOutputMarkupId(true));
+		//TODO add valid autoupdate add(new AjaxSelfUpdatingTimerBehavior(seconds(15)));
+		add(selectedMessage.add(roomContainer.setVisible(false)).setOutputMarkupId(true));
+		
+		IDataProvider<UserContact> dp = new IDataProvider<UserContact>() {
+			private static final long serialVersionUID = 1L;
+
+			public void detach() {
+			}
+
+			public Iterator<? extends UserContact> iterator(long first, long count) {
+				return getBean(UserContactsDao.class).get(getUserId(), (int)first, (int)count).iterator();
+			}
+
+			public long size() {
+				return getBean(UserContactsDao.class).count(getUserId());
+			}
+
+			public IModel<UserContact> model(UserContact object) {
+				return Model.of(object);
+			}
+		};
+		final UserInfoDialog d = new UserInfoDialog("infoDialog", newMessage);
+		final DataView<UserContact> dw = new DataView<UserContact>("users", dp) {
+			private static final long serialVersionUID = 1L;
+
+			private String getName(UserContact uc) {
+				return uc.getOwner().getFirstname() + " " + uc.getOwner().getLastname(); //FIXME salutation
+			}
+			
+			@Override
+			protected void populateItem(Item<UserContact> item) {
+				UserContact uc = item.getModelObject();
+				final long contactId = uc.getUserContactId();
+				final long userId = uc.getOwner().getUser_id();
+				if (uc.getPending()) {
+					item.add(AttributeModifier.append("class", "unread"));
+				}
+				item.add(new Label("name", getName(uc)));	
+				item.add(new WebMarkupContainer("accept").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						ContactsHelper.acceptUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.getPending()));
+				item.add(new WebMarkupContainer("decline").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.getPending()));
+				item.add(new WebMarkupContainer("view").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						d.open(target, userId);
+					}
+				}));
+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						newMessage.reset(true).open(target, userId);
+					}
+				}).setVisible(!uc.getPending()));
+				item.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(!uc.getPending()));
+			}
+		};
+		updateContacts(null);
+		add(d, contacts.add(dw, pendingContacts, allContacts).setOutputMarkupId(true));//TODO update
+		
+		//hack to add FixedHeaderTable after Tabs.
+		add(new AbstractDefaultAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void respond(AjaxRequestTarget target) {
+				selectFolder(inbox, INBOX_FOLDER_ID, target);
+				selectMessage(-1, target);
+			}
+			
+			@Override
+			public void renderHead(Component component, IHeaderResponse response) {
+				super.renderHead(component, response);
+				response.render(OnDomReadyHeaderItem.forScript(getCallbackScript()));
+			}
+		});
+	}
+
+	@Override
+	protected void onDetach() {
+		foldersModel.detach();
+		selectedFolderModel.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html
new file mode 100644
index 0000000..f08dc8e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="buttons"></div>
+	<table style="width: 100%; height: 100%">
+		<tr>
+			<td rowspan="2">
+				<fieldset class="ui-widget-content">
+					<legend class="ui-widget-header">
+						<wicket:message key="143" />
+					</legend>
+					<form wicket:id="general"></form>
+				</fieldset>
+			</td>
+			<td>
+				<div wicket:id="img"></div>
+			</td>
+		</tr>
+		<tr>
+			<td>
+				<fieldset class="ui-widget-content">
+					<legend class="ui-widget-header">
+						<wicket:message key="1159" />
+					</legend>
+					<form wicket:id="comunity"></form>
+				</fieldset>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java
new file mode 100644
index 0000000..98bc25f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.ComunityUserForm;
+import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
+import org.apache.openmeetings.web.common.UploadableProfileImagePanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.util.time.Duration;
+
+public class ProfileForm extends Form<User> {
+	private static final long serialVersionUID = 1L;
+	private final UserForm userForm;
+
+	public ProfileForm(String id) {
+		super(id, new CompoundPropertyModel<User>(getBean(UserDao.class).get(getUserId())));
+		
+		add(new FormSaveRefreshPanel<User>("buttons", this) {
+			private static final long serialVersionUID = 6578425915881674309L;
+
+			@Override
+			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+				User u = getModelObject();
+				try {
+					u = getBean(UserDao.class).update(u, userForm.getPasswordField().getConvertedInput(), getUserId());
+				} catch (Exception e) {
+					// FIXME update feedback with the error details
+				}
+				setModelObject(u);
+				target.add(ProfileForm.this);
+			}
+
+			@Override
+			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+				// FIXME update feedback with the error details
+			}
+
+			@Override
+			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+				User user = getModelObject();
+				if (user.getUser_id() != null) {
+					user = getBean(UserDao.class).get(user.getUser_id());
+				} else {
+					user = new User();
+				}
+				setModelObject(user);
+				target.add(ProfileForm.this);
+			}
+
+			@Override
+			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+				// FIXME update feedback with the error details
+			}
+		});
+		add(userForm = new UserForm("general", getModel()));
+		add(new UploadableProfileImagePanel("img", getUserId()));
+		add(new ComunityUserForm("comunity", getModel()));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", Duration.ONE_SECOND);
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html
new file mode 100644
index 0000000..3335891
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form" class="adminForm"/>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java
new file mode 100644
index 0000000..8eccfa3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import org.apache.openmeetings.web.common.UserPanel;
+
+public class ProfilePanel extends UserPanel {
+	private static final long serialVersionUID = -5837090230776586182L;
+
+	public ProfilePanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+		
+		add(new ProfileForm("form"));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html
new file mode 100644
index 0000000..c02100a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="tabs"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java
new file mode 100644
index 0000000..1c1d51e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.tabs.AjaxTab;
+import com.googlecode.wicket.jquery.ui.widget.tabs.TabbedPanel;
+
+public class SettingsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	public static final int PROFILE_TAB_ID = 0;
+	public static final int MESSAGES_TAB_ID = 1;
+	public static final int EDIT_PROFILE_TAB_ID = 2;
+	public static final int SEARCH_TAB_ID = 3;
+	public static final int DASHBOARD_TAB_ID = 4;
+
+	public SettingsPanel(String id, int active) {
+		super(id);
+		
+		List<ITab> tabs = new ArrayList<ITab>();
+		tabs.add(new AjaxTab(Model.of(Application.getString(1170))) {
+			private static final long serialVersionUID = 1L;
+			UserProfilePanel profilePanel = null;
+
+			@Override
+			protected WebMarkupContainer getLazyPanel(String panelId) {
+				if (profilePanel == null) {
+					profilePanel = new UserProfilePanel(panelId, getUserId());
+					profilePanel.setOutputMarkupId(true);
+				}
+				return profilePanel;
+			}
+			
+			@Override
+			public boolean load(AjaxRequestTarget target) {
+				if (profilePanel != null) {
+					profilePanel.setDefaultModelObject(getBean(UserDao.class).get(getUserId()));
+					target.add(profilePanel);
+				}
+				return super.load(target);
+			}
+		});
+		tabs.add(new AjaxTab(Model.of(Application.getString(1188))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected WebMarkupContainer getLazyPanel(String panelId) {
+				return new MessagesContactsPanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1171))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new ProfilePanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1172))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new UserSearchPanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1548))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new WidgetsPanel(panelId);
+			}
+		});
+		add(new TabbedPanel("tabs", tabs, new Options("active", active)).setActiveTab(active));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html
new file mode 100644
index 0000000..9d9b117
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<div class="formelement">
+		<label><wicket:message key="134" /></label><input type="password" wicket:id="confirmPassword" />
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java
new file mode 100644
index 0000000..a550e27
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.GeneralUserForm;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class UserForm extends GeneralUserForm {
+	private static final long serialVersionUID = 1305752513494262480L;
+	private final PasswordTextField confirmPassword;
+	
+	public UserForm(String id, IModel<User> model) {
+		super(id, model, false);
+		add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
+		confirmPassword.setRequired(false);
+	}
+	
+	@Override
+	protected void onValidate() {
+		String pass = getPasswordField().getConvertedInput();
+		if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
+			error(Application.getString(232));
+		}
+		super.onValidate();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
new file mode 100644
index 0000000..42cd4b3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container">
+		<div wicket:id="body"></div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
new file mode 100644
index 0000000..81344a2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class UserInfoDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 6393565468567393270L;
+	private WebMarkupContainer container = new WebMarkupContainer("container");
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(61));
+	private DialogButton message = new DialogButton("message", Application.getString(1253));
+	private DialogButton contacts = new DialogButton("contacts", Application.getString(1186));
+	private MessageDialog newMessage;
+	private long userId;
+	
+	public UserInfoDialog(String id, MessageDialog newMessage) {
+		super(id, Application.getString(1235));
+		add(container.add(new WebMarkupContainer("body")).setOutputMarkupId(true));
+		this.newMessage = newMessage;
+	}
+
+	public void open(AjaxRequestTarget target, long userId) {
+		this.userId = userId;
+		container.replace(new UserProfilePanel("body", userId));
+		target.add(container);
+		open(target);
+	}
+	
+	public WebMarkupContainer getContainer() {
+		return container;
+	}
+	
+	@Override
+	public int getWidth() {
+		return 500;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return userId != getUserId() && 0 == getBean(UserContactsDao.class).checkUserContacts(userId, getUserId())
+				? Arrays.asList(message, cancel) : Arrays.asList(contacts, message, cancel);
+	}
+	
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (message.equals(button)) {
+			newMessage.reset(false).open(target, userId);
+		} else if (contacts.equals(button)) {
+			ContactsHelper.addUserToContactList(userId);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
new file mode 100644
index 0000000..c70afe5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="user info panel">
+		<table>
+			<tr>
+				<td><div wicket:id="img"></div></td>
+				<td>
+					<table>
+						<tr>
+							<td><wicket:message key="1164"/></td><td><span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="1165"/></td><td><span wicket:id="timeZoneId"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="1296"/></td><td><span wicket:id="regdate"></span></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+		<div>
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1166"/></legend>
+				<table>
+					<tr>
+						<td><wicket:message key="1162"/></td>
+						<td><textarea wicket:id="userOffers"></textarea></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="1163"/></td>
+						<td><textarea wicket:id="userSearchs"></textarea></td>
+					</tr>
+				</table>
+			</fieldset> 
+		</div>
+		<div>
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1167"/></legend>
+				<table wicket:id="address">
+					<tr>
+						<td><wicket:message key="607" /></td>
+						<td><span wicket:id="adresses.phone"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="139" /></td>
+						<td><span wicket:id="adresses.street"></span>&nbsp;<span wicket:id="adresses.additionalname"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="140" /></td>
+						<td><span wicket:id="adresses.zip"></span>&nbsp;<span wicket:id="adresses.town"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="141" /></td>
+						<td><span wicket:id="adresses.states.name"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="142" /></td>
+						<td><span wicket:id="adresses.comment"></span></td>
+					</tr>
+				</table>
+				<div wicket:id="addressDenied"></div>
+			</fieldset> 
+		</div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
new file mode 100644
index 0000000..b6ec73c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ProfileImagePanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+
+public class UserProfilePanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer address = new WebMarkupContainer("address");
+	private final Label addressDenied = new Label("addressDenied", "");
+
+	public UserProfilePanel(String id, long userId) {
+		this(id, new CompoundPropertyModel<User>(getBean(UserDao.class).get(userId)));
+	}
+	
+	public UserProfilePanel(String id, CompoundPropertyModel<User> model) {
+		super(id, model);
+
+		add(new ProfileImagePanel("img", model.getObject().getUser_id()));
+		add(new Label("firstname"));
+		add(new Label("lastname"));
+		add(new Label("timeZoneId"));
+		add(new Label("regdate"));
+		add(new TextArea<String>("userOffers").setEnabled(false));
+		add(new TextArea<String>("userSearchs").setEnabled(false));
+		if (getUserId() == model.getObject().getUser_id() || Boolean.TRUE.equals(model.getObject().getShowContactData()) 
+				|| (Boolean.TRUE.equals(model.getObject().getShowContactDataToContacts())
+						&& getBean(UserContactsDao.class).checkUserContacts(model.getObject().getUser_id(), getUserId()) > 0))
+		{
+			addressDenied.setVisible(false);
+			address.add(new Label("adresses.phone"));
+			address.add(new Label("adresses.street"));
+			address.add(new Label("adresses.additionalname"));
+			address.add(new Label("adresses.zip"));
+			address.add(new Label("adresses.town"));
+			address.add(new Label("adresses.states.name"));
+			address.add(new Label("adresses.comment"));
+		} else {
+			address.setVisible(false);
+			addressDenied.setDefaultModelObject(Application.getString(Boolean.TRUE.equals(model.getObject().getShowContactDataToContacts()) ? 1269 : 1268));
+		}
+		add(address.setDefaultModel(model));
+		add(addressDenied);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
new file mode 100644
index 0000000..c3b2d51
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<!--  FIXME move styles into CSS -->
+	<table style="width: 100%; height: 100%;">
+		<tr>
+			<td valign="top" style="width: 200px;">
+				<form wicket:id="form">
+					<div><wicket:message key="1179"/></div>
+					<input type="text" wicket:id="text"/><br/>
+					<div><wicket:message key="1177"/></div>
+					<input type="text" wicket:id="offer"/><br/>
+					<div><wicket:message key="1178"/></div>
+					<input type="text" wicket:id="search"/><br/>
+					<br/>
+					<input type="submit" wicket:message="value:1176"/>
+				</form>
+			</td>
+			<td valign="top">
+				<div wicket:id="container" style="height: 100%; min-height: 400px;">
+					<div><strong><wicket:message key="1184"/></strong>&nbsp;&nbsp;&nbsp;<span wicket:id="navigator"></span></div>
+					<table id="searchUsersTable" style="width: 100%;">
+						<thead>
+							<tr>
+								<th><wicket:message key="1180"/></th>
+								<th><wicket:message key="1181"/></th>
+								<th><wicket:message key="1182"/></th>
+								<th><wicket:message key="1183"/></th>
+								<th><wicket:message key="1185"/></th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr wicket:id="users">
+								<td><span class="om-icon" wicket:id="status"></span><span wicket:id="name"></span></td>
+								<td wicket:id="tz"></td>
+								<td wicket:id="offer"></td>
+								<td wicket:id="search"></td>
+								<td style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" wicket:message="title:1186"
+									></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
+									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</td>
+		</tr>
+	</table>
+	<div wicket:id="infoDialog"></div>
+	<div wicket:id="newMessage"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
new file mode 100644
index 0000000..89a9585
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.isUserOnline;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.web.common.PagingNavigatorPanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class UserSearchPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final static List<Integer> itemsPerPage = Arrays.asList(10, 25, 50, 75, 100, 200, 500, 1000, 2500, 5000);
+	private String text;
+	private String search;
+	private String offer;
+	private String orderBy = "u.firstname";
+	private boolean asc = true;
+	private boolean searched = false;
+	private final MessageDialog newMessage;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final FixedHeaderTableBehavior fixedHeader = new FixedHeaderTableBehavior("#searchUsersTable", new Options("height", 400));
+
+	private void refresh(AjaxRequestTarget target) {
+		target.add(container.add(fixedHeader));
+	}
+	
+	public UserSearchPanel(String id) {
+		super(id);
+		
+		add(new Form<Void>("form") {
+			private static final long serialVersionUID = 1L;
+			{
+				add(new TextField<String>("text", new PropertyModel<String>(UserSearchPanel.this, "text")));
+				add(new TextField<String>("offer", new PropertyModel<String>(UserSearchPanel.this, "offer")));
+				add(new TextField<String>("search", new PropertyModel<String>(UserSearchPanel.this, "search")));
+				add(new AjaxFormSubmitBehavior(this, "onsubmit") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						searched = true;
+						refresh(target);
+					}
+				});
+			}
+		});
+		add(newMessage = new MessageDialog("newMessage", new CompoundPropertyModel<PrivateMessage>(new PrivateMessage())) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(AjaxRequestTarget target, DialogButton button) {
+				if (send.equals(button)) {
+					refresh(target);
+				}
+			}
+		});
+		IDataProvider<User> dp = new IDataProvider<User>() {
+			private static final long serialVersionUID = 1L;
+
+			public void detach() {
+			}
+
+			public Iterator<? extends User> iterator(long first, long count) {
+				return searched ? getBean(UserDao.class).searchUserProfile(getUserId(), text, offer, search, orderBy, (int)first, (int)count, asc).iterator()
+						: new ArrayList<User>().iterator();
+			}
+
+			public long size() {
+				return searched ? getBean(UserDao.class).searchCountUserProfile(getUserId(), text, offer, search) : 0;
+			}
+
+			public IModel<User> model(User object) {
+				return new CompoundPropertyModel<User>(object);
+			}
+			
+		};
+		final UserInfoDialog d = new UserInfoDialog("infoDialog", newMessage);
+		final DataView<User> dv = new DataView<User>("users", dp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<User> item) {
+				final UserContactsDao contactsDao = getBean(UserContactsDao.class);
+				User u = item.getModelObject();
+				final long userId = u.getUser_id();
+				item.add(new WebMarkupContainer("status").add(AttributeModifier.append("class", isUserOnline(userId) ? "online" : "offline")));
+				item.add(new Label("name", getName(u)));
+				item.add(new Label("tz", getBean(TimezoneUtil.class).getTimeZone(u).getID()));
+				item.add(new Label("offer", u.getUserOffers()));
+				item.add(new Label("search", u.getUserSearchs()));
+				item.add(new WebMarkupContainer("view").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						d.open(target, userId);
+					}
+				}));
+				item.add(new WebMarkupContainer("add").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						ContactsHelper.addUserToContactList(userId);
+						refresh(target);
+					}
+				}).setVisible(userId != getUserId() && 0 == contactsDao.checkUserContacts(userId, getUserId())));
+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("onclick") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						newMessage.reset(true).open(target, userId);
+					}
+				}));
+				//item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME 
+			}
+		};
+
+		add(d, container.add(dv, new PagingNavigatorPanel("navigator", dv, itemsPerPage, 100) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				refresh(target);
+			}
+		}).setOutputMarkupId(true));
+	}
+	
+	private String getName(User u) {
+		return "" + u.getFirstname() + " " + u.getLastname() + " [" + u.getLogin() + "]"; //FIXME salutation
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
new file mode 100644
index 0000000..eeabc06
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<table class="widget">
+			<tr wicket:id="widgets">
+				<td wicket:id="name"></td>
+				<td wicket:id="description"></td>
+				<td><label wicket:for="display"><wicket:message key="1590"/></label>&nbsp;&nbsp;<input type="checkbox" wicket:id="display"/></td>
+			</tr>
+		</table>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
new file mode 100644
index 0000000..d368372
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.getDashboardContext;
+import static org.apache.openmeetings.web.app.WebSession.getDashboard;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+
+public class WidgetsPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	private Widget isDisplayed(WidgetDescriptor wd) {
+		for (Widget w : getDashboard().getWidgets()) {
+			if (w.getClass().getName().equals(wd.getWidgetClassName())) {
+				return w;
+			}
+		}
+		return null;
+	}
+	public WidgetsPanel(String id) {
+		super(id);
+		
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		boolean confShowMyRooms = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+		boolean confShowRss = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+		List<WidgetDescriptor> widgets = getDashboardContext().getWidgetRegistry().getWidgetDescriptors();
+		for (Iterator<WidgetDescriptor> i = widgets.iterator(); i.hasNext();) {
+			WidgetDescriptor wd = i.next();
+			if (!confShowMyRooms && MyRoomsWidget.class.getCanonicalName().equals(wd.getWidgetClassName())) {
+				i.remove();
+				continue;
+			}
+			if (!confShowRss && RssWidget.class.getCanonicalName().equals(wd.getWidgetClassName())) {
+				i.remove();
+				continue;
+			}
+		}
+		add(new ListView<WidgetDescriptor>("widgets", widgets) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<WidgetDescriptor> item) {
+				final WidgetDescriptor wd = item.getModelObject();
+				item.add(new Label("name", wd.getName()));
+				item.add(new Label("description", wd.getDescription()));
+				item.add(new AjaxCheckBox("display", Model.of(isDisplayed(wd) != null)) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						Widget w = isDisplayed(wd);
+						boolean b = getModelObject();
+						DashboardContext dashboardContext = getDashboardContext();
+						Dashboard d = getDashboard();
+						if (w != null && !b) {
+							d.deleteWidget(w.getId());
+						}
+						if (w == null && b) {
+							d.addWidget(dashboardContext.getWidgetFactory().createWidget(wd));
+						}
+						dashboardContext.getDashboardPersister().save(d);
+					}
+				});
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html
new file mode 100644
index 0000000..12776d8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container" class="recording dialog errors">
+		<h3 wicket:id="message"></h3>
+		<table style="width: 100%">
+			<tr>
+				<th><wicket:message key="1593"/></th>
+				<th><wicket:message key="1594"/></th>
+			</tr>
+			<tr wicket:id="row">
+				<td wicket:id="exitCode"></td>
+				<td wicket:id="message" class="message"></td>
+			</tr>
+		</table>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java
new file mode 100644
index 0000000..691be49
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingLog;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class RecordingErrorsDialog extends AbstractDialog<FlvRecording> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Label message = new Label("message", Model.of((String)null));
+	private final ListView<FlvRecordingLog> logView = new ListView<FlvRecordingLog>("row") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void populateItem(ListItem<FlvRecordingLog> item) {
+			FlvRecordingLog l = item.getModelObject();
+			item.add(new Label("exitCode", l.getExitValue()));
+			item.add(new Label("message", l.getFullMessage()));
+			if (!"0".equals(l.getExitValue())) {
+				item.add(AttributeModifier.replace("class", "alert"));
+			}
+		}
+	};
+
+	@Override
+	public int getWidth() {
+		return 600;
+	}
+	
+	@Override
+	public boolean isResizable() {
+		return true;
+	}
+
+	@Override
+	public boolean isModal() {
+		return true;
+	}
+
+	public RecordingErrorsDialog(String id, IModel<FlvRecording> model) {
+		super(id, Application.getString(887), model);
+		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
+	}
+	
+	@Override
+	protected void onOpen(AjaxRequestTarget target) {
+		FlvRecording f = getModelObject();
+		List<FlvRecordingLog> logs = getBean(FlvRecordingLogDao.class).getByRecordingId(f.getFlvRecordingId());
+		if (f.getFileHash() == null) {
+			message.setVisible(true);
+			message.setDefaultModelObject(Application.getString(888));
+		} else if (!isRecordingExists(f.getFileHash() + MP4_EXTENSION)) {
+			message.setVisible(true);
+			message.setDefaultModelObject(Application.getString(1595));
+		} else {
+			message.setVisible(false);
+		}
+		if (!logs.isEmpty()) {
+			logView.setVisible(false);
+			logView.setList(logs).setVisible(true);
+		}
+		target.add(container);
+		super.onOpen(target);
+	}
+	
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return new ArrayList<DialogButton>();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html
new file mode 100644
index 0000000..9caedb0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend><span wicket:id="errors" class="errors"></span></wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java
new file mode 100644
index 0000000..d82fd96
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.IModel;
+
+public class RecordingItemPanel extends RecordingPanel {
+	private static final long serialVersionUID = 1L;
+
+	public RecordingItemPanel(String id, final IModel<FlvRecording> model, final RecordingsPanel treePanel) {
+		super(id, model, treePanel);
+		FlvRecording r = model.getObject();
+		long errorCount = getBean(FlvRecordingLogDao.class).countErrors(r.getFlvRecordingId());
+		boolean visible = errorCount != 0 || (Status.RECORDING != r.getStatus() && Status.CONVERTING != r.getStatus() && !isRecordingExists(r.getFileHash() + MP4_EXTENSION));
+		drag.add(new WebMarkupContainer("errors").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				treePanel.errorsDialog.setDefaultModel(model);
+				treePanel.errorsDialog.open(target);
+			}
+		}).setVisible(visible));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html
new file mode 100644
index 0000000..0436c22
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="drop" class="recording item"><div wicket:id="drag"><wicket:child /><span wicket:id="name" class="name"></span></div></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java
new file mode 100644
index 0000000..3524821
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.interaction.draggable.Draggable;
+import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
+
+public class RecordingPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	protected final MarkupContainer drop;
+	protected final MarkupContainer drag;
+
+	public RecordingPanel(String id, final IModel<FlvRecording> model, final RecordingsPanel treePanel) {
+		super(id, model);
+		FlvRecording r = model.getObject();
+		drop = r.isFolder() ? new Droppable<FlvRecording>("drop", model) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("hoverClass", Options.asString("ui-state-hover"));
+				behavior.setOption("accept", Options.asString(".recorditem"));
+			}
+			
+			@Override
+			public void onDrop(AjaxRequestTarget target, Component component) {
+				Object o = component.getDefaultModelObject();
+				if (o instanceof FlvRecording) {
+					FlvRecording p = (FlvRecording)drop.getDefaultModelObject();
+					FlvRecording f = (FlvRecording)o;
+					long pid = p.getFlvRecordingId();
+					//FIXME parent should not be moved to child !!!!!!!
+					if (pid == f.getFlvRecordingId()) {
+						return;
+					}
+					f.setParentFileExplorerItemId(pid > 0 ? pid : null);
+					f.setOwnerId(p.getOwnerId());
+					f.setRoom_id(p.getRoom_id());
+					f.setOrganization_id((p).getOrganization_id());
+					getBean(FlvRecordingDao.class).update(f);
+				}
+				target.add(treePanel.trees); //FIXME add correct refresh
+			}
+		} : new WebMarkupContainer("drop");
+		if (r.getFlvRecordingId() < 1) {
+			drag = new WebMarkupContainer("drag");
+		} else {
+			Draggable<FlvRecording> d = new Draggable<FlvRecording>("drag", model) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onConfigure(JQueryBehavior behavior) {
+					super.onConfigure(behavior);
+					behavior.setOption("revert", "treeRevert");
+					behavior.setOption("cursor", Options.asString("move"));
+				}
+			};
+			d.setContainment(".file.tree");
+			d.add(AttributeAppender.append("class", "recorditem"));
+			drag = d;
+		}
+		drag.add(r.getFlvRecordingId() < 1 ? new Label("name", r.getFileName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected String getLabelAjaxEvent() {
+				return "dblClick";
+			}
+			
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				super.onSubmit(target);
+				FlvRecording fi = model.getObject();
+				fi.setFileName(getEditor().getModelObject());
+				getBean(FlvRecordingDao.class).update(fi);
+			}
+			
+			@Override
+			public void onEdit(AjaxRequestTarget target) {
+				super.onEdit(target);
+			}
+		});
+		add(drop.add(drag).setOutputMarkupId(true));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
new file mode 100644
index 0000000..ba373f7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<script type="text/javascript">
+		function treeRevert(dropped) {
+			$('#tree-anchor').get(0).scrollIntoView();
+			this.parent().parent().get(0).scrollIntoView();
+			return !dropped;
+		}
+	</script>
+	<table class="recording">
+		<tr>
+			<td valign="top" class="files file tree">
+				<div class="icons clear trash-toolbar" wicket:id="trash-toolbar">
+					<span wicket:id="create" class="folder-create om-icon align-left clickable" wicket:message="title:703"></span>
+					<span wicket:id="refresh" class="refresh om-icon align-left clickable" wicket:message="title:704"></span>
+					<span wicket:id="trash" class="trash om-icon align-right clickable"></span>
+					<span style="padding-left: 20px;" wicket:message="title:705"><wicket:message key="1224"/></span>
+					<div class="clear"></div>
+				</div>
+				<div wicket:id="tree-container" class="trees">
+					<div id="tree-anchor" style="height: 2px; width: 2px;"></div>
+					<div wicket:id="tree"></div>
+				</div>
+				<div class="sizes" wicket:id="sizes">
+					<table>
+						<tr>
+							<td><wicket:message key="923"/></td>
+							<td><span wicket:id="homeSize"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="924"/></td>
+							<td><span wicket:id="publicSize"></span></td>
+						</tr>
+					</table>
+				</div>
+				<div wicket:id="info"></div>
+			</td>
+			<td valign="top">
+				<div wicket:id="video"></div>
+			</td>
+		</tr>
+	</table>
+	<div wicket:id="addFolder"></div>
+	<div wicket:id="errors"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
new file mode 100644
index 0000000..0fc3cee
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@ -0,0 +1,361 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingContainerData;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.AddFolderDialog;
+import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
+import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
+
+public class RecordingsPanel extends UserPanel {
+	private static final long serialVersionUID = 1321258690447136958L;
+	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
+	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
+	private final VideoPlayer video = new VideoPlayer("video");
+	private final VideoInfo info = new VideoInfo("info");
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+	private final IModel<String> homeSize = Model.of((String)null);
+	private final IModel<String> publicSize = Model.of((String)null);
+	final RecordingErrorsDialog errorsDialog = new RecordingErrorsDialog("errors", Model.of((FlvRecording)null));
+	private RecordingTree selected;
+	
+	public RecordingsPanel(String id) {
+		super(id);
+		rm.getObject().setFlvRecordingId(Long.MIN_VALUE);
+		final AddFolderDialog addFolder = new AddFolderDialog("addFolder", Application.getString(712)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FlvRecording f = new FlvRecording();
+				f.setFileName(getModelObject());
+				f.setInsertedBy(getUserId());
+				f.setInserted(new Date());
+				f.setFolder(true);
+				f.setIsImage(false);
+				f.setIsPresentation(false);
+				f.setIsRecording(true);
+				FlvRecording p = rm.getObject();
+				long parentId = p.getFlvRecordingId();
+				if (p.isFolder()) {
+					f.setParentFileExplorerItemId(parentId);
+				}
+				f.setOwnerId(p.getOwnerId());
+				f.setOrganization_id(p.getOrganization_id());
+				getBean(FlvRecordingDao.class).update(f);
+				target.add(trees); //FIXME add correct refresh
+			}
+		};
+		add(addFolder);
+		Droppable<FlvRecording> trashToolbar = new Droppable<FlvRecording>("trash-toolbar") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("hoverClass", Options.asString("ui-state-hover trash-toolbar-hover"));
+				behavior.setOption("accept", Options.asString(".recorditem, .fileitem"));
+			}
+			
+			@Override
+			public void onDrop(AjaxRequestTarget target, Component component) {
+				Object o = component.getDefaultModelObject();
+				if (o instanceof FlvRecording) {
+					delete((FlvRecording)o, target);
+				}
+			}
+		};
+		add(trashToolbar);
+		trashToolbar.add(new WebMarkupContainer("create").add(new AjaxEventBehavior("onclick") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}));
+		trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("onclick") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(trees); //FIXME add correct refresh
+			}
+		}));
+		trashToolbar.add(new ConfirmableAjaxLink("trash", 713) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				delete(rm.getObject(), target);
+			}
+		});
+		RepeatingView treesView = new RepeatingView("tree");
+		treesView.add(selected = new RecordingTree(treesView.newChildId(), new MyRecordingTreeProvider()));
+		treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(null, null)));
+		for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {
+			Organisation o = ou.getOrganisation();
+			treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(o.getOrganisation_id(), o.getName())));
+		}
+		add(trees.add(treesView).setOutputMarkupId(true));
+		updateSizes();
+		add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
+		sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
+			private static final long serialVersionUID = 1L;
+
+			protected void onPostProcessTarget(AjaxRequestTarget target) {
+				updateSizes();
+			}
+		});
+		add(video, info, errorsDialog);
+	}
+
+	void delete(FlvRecording f, AjaxRequestTarget target) {
+		long id = f.getFlvRecordingId();
+		if (id > 0) {
+			getBean(FlvRecordingDao.class).delete(f);
+		}
+		target.add(trees); //FIXME add correct refresh
+	}
+	
+	private void updateSizes() {
+		RecordingContainerData sizeData = getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
+		if (sizeData != null) {
+			homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
+			publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
+		}
+	}
+	
+	//FIXME need to be generalized to use as Room files explorer
+	class RecordingTree extends DefaultNestedTree<FlvRecording> {
+		private static final long serialVersionUID = 2527395034256868022L;
+
+		public RecordingTree(String id, ITreeProvider<FlvRecording> tp) {
+			super(id, tp);
+			setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
+		}
+		
+		@Override
+		protected Component newContentComponent(String id, IModel<FlvRecording> node) {
+			return new Folder<FlvRecording>(id, this, node) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected Component newLabelComponent(String id, final IModel<FlvRecording> lm) {
+					FlvRecording r = lm.getObject();
+					return r.isFolder() || r.getFlvRecordingId() < 1 ? new RecordingPanel(id, lm, RecordingsPanel.this) : new RecordingItemPanel(id, lm, RecordingsPanel.this);
+				}
+				
+				@Override
+				protected boolean isSelected() {
+					return getModelObject().getFlvRecordingId() == rm.getObject().getFlvRecordingId();
+				}
+				
+				@Override
+				protected boolean isClickable() {
+					return true;
+				}
+				
+				@Override
+				protected void onClick(AjaxRequestTarget target) {
+					FlvRecording r = getModelObject();
+					FlvRecording _prev = rm.getObject();
+					rm.setObject(r);
+					if (_prev != null) {
+						if (_prev.isFolder()) {
+							selected.updateBranch(_prev, target);
+						} else {
+							selected.updateNode(_prev, target);
+						}
+					}
+ 					selected = RecordingTree.this;
+					if (r.isFolder()) {
+						if (getState(r) == State.COLLAPSED) {
+							super.onClick(target);
+						}
+						updateBranch(r, target);
+					} else {
+						video.update(target, r);
+						info.update(target, r);
+						updateNode(r, target);
+					}
+				}
+				
+				private String getRecordingStyle(FlvRecording r, String def) {
+					String style;
+					if (r.getFlvRecordingId() == 0) {
+						style = "my-recordings om-icon";
+					} else if (r.getFlvRecordingId() < 0) {
+						style = "public-recordings om-icon";
+					} else if (r.isFolder()) {
+						style = def;
+					} else if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+						style = "recording om-icon";
+					} else if (Status.RECORDING == r.getStatus() || Status.CONVERTING == r.getStatus()) {
+						style = "processing-recording om-icon";
+					} else {
+						style = "broken-recording om-icon";
+					}
+					return style;
+				}
+				
+				@Override
+				protected String getOtherStyleClass(FlvRecording r) {
+					return getRecordingStyle(r, super.getOtherStyleClass(r));
+				}
+				
+				@Override
+				protected String getOpenStyleClass() {
+					return getRecordingStyle(getModelObject(), super.getOpenStyleClass());
+				}
+				
+				@Override
+				protected String getClosedStyleClass() {
+					return getRecordingStyle(getModelObject(), super.getClosedStyleClass());
+				}
+				
+				@Override
+				protected String getSelectedStyleClass() {
+					return "ui-state-active";
+				}
+				
+				@Override
+				protected IModel<String> newLabelModel(IModel<FlvRecording> model) {
+					return Model.of(model.getObject().getFileName());
+				}
+			};
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		rm.detach();
+		homeSize.detach();
+		publicSize.detach();
+		super.onDetach();
+	}
+	
+	class MyRecordingTreeProvider extends RecordingTreeProvider {
+		private static final long serialVersionUID = 1L;
+
+		public Iterator<? extends FlvRecording> getRoots() {
+			FlvRecording r = new FlvRecording();
+			r.setFlvRecordingId(0);
+			r.setFileName(Application.getString(860));
+			r.setFolder(true);
+			r.setOwnerId(getUserId());
+			return Arrays.asList(r).iterator();
+		}
+		
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			if (node.getFlvRecordingId() == 0) {
+				return getBean(FlvRecordingDao.class).getFlvRecordingRootByOwner(getUserId()).iterator();
+			} else {
+				return super.getChildren(node);
+			}
+		}
+	}
+	
+	class PublicRecordingTreeProvider extends RecordingTreeProvider {
+		private static final long serialVersionUID = 5502610991599632079L;
+		private final Long orgId;
+		private final String name;
+
+		public PublicRecordingTreeProvider(Long orgId, String name) {
+			this.orgId = orgId;
+			this.name = name;
+		}
+		
+		public Iterator<? extends FlvRecording> getRoots() {
+			FlvRecording r = new FlvRecording();
+			r.setFlvRecordingId(orgId == null ? -1 : -orgId);
+			r.setOrganization_id(orgId);
+			r.setOwnerId(null);
+			r.setFolder(true);
+			String pub = Application.getString(861);
+			r.setFileName(orgId == null ? pub : String.format("%s (%s)", pub, name));
+			return Arrays.asList(r).iterator();
+		}
+		
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			if (node.getFlvRecordingId() < 0) {
+				return getBean(FlvRecordingDao.class).getFlvRecordingRootByPublic(orgId).iterator();
+			} else {
+				return super.getChildren(node);
+			}
+		}
+	}
+	
+	abstract class RecordingTreeProvider implements ITreeProvider<FlvRecording> {
+		private static final long serialVersionUID = 1L;
+
+		public void detach() {
+			// TODO LDM should be used
+		}
+
+		public boolean hasChildren(FlvRecording node) {
+			return node.getFlvRecordingId() <= 0 || node.isFolder();
+		}
+
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			return getBean(FlvRecordingDao.class).getFlvRecordingByParent(node.getFlvRecordingId()).iterator();
+		}
+
+		public IModel<FlvRecording> model(FlvRecording object) {
+			// TODO LDM should be used
+			return Model.of(object);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
new file mode 100644
index 0000000..12f557c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form class="info" wicket:id="form">
+		<table>
+			<tr>
+				<td><wicket:message key="863"/></td>
+				<td><span wicket:id="fileName"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="864"/></td>
+				<td><span wicket:id="duration"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="865"/></td>
+				<td><span wicket:id="recordEnd"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="874"/></td>
+				<td><span wicket:id="roomName"></span></td>
+			</tr>
+		</table>
+		<table>
+			<tr>
+				<td><button wicket:id="dAVI"><wicket:message key="884"/></button></td>
+				<td><button wicket:id="dFLV"><wicket:message key="883"/></button></td>
+				<td><button wicket:id="re-convert"><wicket:message key="1600"/></button></td>
+			</tr>
+		</table>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
new file mode 100644
index 0000000..8dc3205
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.List;
+
+import org.apache.openmeetings.converter.FlvInterviewConverter;
+import org.apache.openmeetings.converter.FlvRecorderConverter;
+import org.apache.openmeetings.converter.IRecordingConverter;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.resource.FileResourceStream;
+
+import com.googlecode.wicket.jquery.ui.JQueryIcon;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+
+public class VideoInfo extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final Form<Void> form = new Form<Void>("form");
+	private final AjaxButton downloadAvi = new AjaxButton("dAVI") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected String getIcon() {
+			return JQueryIcon.ARROWTHICKSTOP_1_S;
+		};
+		
+		@Override
+		protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+			download.setFileName(rm.getObject().getAlternateDownload());
+			download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getAlternateDownload())));
+			download.initiate(target);
+		}
+	};
+	private final AjaxButton downloadFlv = new AjaxButton("dFLV") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected String getIcon() {
+			return JQueryIcon.ARROWTHICKSTOP_1_S;
+		};
+		
+		@Override
+		protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+			download.setFileName(rm.getObject().getFileHash());
+			download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getFileHash())));
+			download.initiate(target);
+		}
+	};
+	private final AjaxButton reConvert = new AjaxButton("re-convert") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected String getIcon() {
+			return JQueryIcon.REFRESH;
+		};
+		
+		@Override
+		protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+			final IRecordingConverter converter = getBean(isInterview ? FlvInterviewConverter.class : FlvRecorderConverter.class);
+			new Thread() {
+				public void run() {
+					converter.startConversion(rm.getObject().getFlvRecordingId());
+				}
+			}.start();
+		}
+	};
+	private final AjaxDownload download = new AjaxDownload();
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+	private final IModel<String> roomName = Model.of((String)null);
+	private boolean isInterview = false;
+
+	public VideoInfo(String id) {
+		this(id, null);
+	}
+	
+	public VideoInfo(String id, FlvRecording r) {
+		super(id);
+		add(form.setOutputMarkupId(true));
+		setDefaultModel(rm);
+		
+		form.add(new Label("fileName"), new Label("duration"), new Label("recordEnd"), new Label("roomName", roomName),
+				downloadFlv.setEnabled(false), downloadAvi.setEnabled(false), reConvert.setEnabled(false));
+		add(download);
+		update(null, r);
+	}
+	
+	public VideoInfo update(AjaxRequestTarget target, FlvRecording _r) {
+		FlvRecording r = _r == null ? new FlvRecording() : _r;
+		rm.setObject(r);
+		try {
+			String name = null;
+			if (r.getRoom_id() != null) {
+				Room room = getBean(RoomDao.class).get(r.getRoom_id());
+				if (room != null) {
+					name = room.getName();
+					isInterview = room.getRoomtype().getRoomtypes_id() == 4;
+				}
+			}
+			roomName.setObject(name);
+		} catch (Exception e) {
+			//no-op
+		}
+		
+		boolean reConvEnabled = false;
+		if (r.getOwnerId() != null && getUserId() == r.getOwnerId() && r.getStatus() != Status.RECORDING && r.getStatus() != Status.CONVERTING) {
+			List<FlvRecordingMetaData> metas = getBean(FlvRecordingMetaDataDao.class).getByRecording(r.getFlvRecordingId());
+			reconvLabel:
+			if (!metas.isEmpty()) {
+				for (FlvRecordingMetaData meta : metas) {
+					if (r.getRoom_id() == null || !getRecordingMetaData(r.getRoom_id(), meta.getStreamName()).exists()) {
+						break reconvLabel;
+					}
+				}
+				reConvEnabled = true;
+			}
+		}
+		reConvert.setEnabled(reConvEnabled);
+		downloadAvi.setEnabled(isRecordingExists(r.getAlternateDownload()));
+		downloadFlv.setEnabled(isRecordingExists(r.getFileHash()));
+		if (target != null) {
+			target.add(form);
+		}
+		
+		return this;
+	}
+	
+	@Override
+	protected void onDetach() {
+		rm.detach();
+		roomName.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
new file mode 100644
index 0000000..8d0defe
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="video" wicket:id="container">
+		<div wicket:id="wait"></div>
+		<video wicket:id="player">
+			Your browser does not support HTML5 video. <!-- FIXME hardcoded -->
+		</video>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
new file mode 100644
index 0000000..04cf3b5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.wicketstuff.html5.media.MediaSource;
+import org.wicketstuff.html5.media.video.Html5Video;
+
+public class VideoPlayer extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer wait = new WebMarkupContainer("wait"); //FIXME not used
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Mp4RecordingResourceReference mp4res = new Mp4RecordingResourceReference();
+	private final OggRecordingResourceReference oggres = new OggRecordingResourceReference();
+	private final IModel<List<MediaSource>> playerModel = new ListModel<MediaSource>(new ArrayList<MediaSource>());
+	private final OmHtml5Video player = new OmHtml5Video("player", playerModel, null);
+
+	public VideoPlayer(String id) {
+		this(id, null);
+	}
+	
+	public VideoPlayer(String id, FlvRecording r) {
+		super(id);
+		add(container.setOutputMarkupPlaceholderTag(true));
+		container.add(wait.setVisible(false), player);
+		update(null, r);
+	}
+	
+	public VideoPlayer update(AjaxRequestTarget target, FlvRecording r) {
+		boolean videoExists = r != null && getMp4Recording(r.getFileHash()).exists();
+		if (videoExists) {
+			PageParameters pp = new PageParameters().add("id", r.getFlvRecordingId());
+			playerModel.setObject(Arrays.asList(
+					new MediaSource("" + getRequestCycle().urlFor(mp4res, pp), "video/mp4")
+					, new MediaSource("" + getRequestCycle().urlFor(oggres, pp), "video/ogg")));
+			player.recId = r.getFlvRecordingId();
+		}
+		container.setVisible(videoExists);
+		if (target != null) {
+			target.add(container);
+		}
+		
+		return this;
+	}
+	
+	@Override
+	protected void onDetach() {
+		playerModel.detach();
+		super.onDetach();
+	}
+	
+	private static class OmHtml5Video extends Html5Video {
+		private static final long serialVersionUID = 1L;
+		Long recId = null;
+		
+		OmHtml5Video(String id, IModel<List<MediaSource>> model, Long recId) {
+			super(id, model);
+			this.recId = recId;
+		}
+		
+		@Override
+		protected boolean isAutoPlay() {
+			return false;
+		}
+		
+		@Override
+		protected boolean isControls() {
+			return true;
+		}
+		
+		@Override
+		protected String getPoster() {
+			return recId == null ? null : "recordings/jpg/" + recId;
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
new file mode 100644
index 0000000..9dd156d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.OmUrlFragment.AreaKeys;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+public class RoomEnterBehavior extends AjaxEventBehavior {
+	private static final long serialVersionUID = -5195740583653865055L;
+	private final long roomid;
+	
+	public RoomEnterBehavior(long roomid) {
+		super("click");
+		this.roomid = roomid;
+	}
+
+	public static OmUrlFragment getRoomUrlFragment(long roomId) {
+		return new OmUrlFragment(AreaKeys.room, "" + roomId);
+	}
+	
+	public static void roomEnter(MainPage page, AjaxRequestTarget target, long roomId) {
+		page.updateContents(getRoomUrlFragment(roomId), target);
+	}
+	
+	@Override
+	protected void onEvent(AjaxRequestTarget target) {
+		roomEnter((MainPage)getComponent().getPage(), target, roomid);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.html
new file mode 100644
index 0000000..edde44a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div id="swfloading"
+		style="z-index: 666666; position: absolute; top: 50%; left: 50%;">
+		<img src="images/ajax-loader.gif" />
+	</div>
+	<noscript>Please enable JavaScript in order to use this application.</noscript>
+	<script type="text/javascript" wicket:id="init"></script>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java
new file mode 100644
index 0000000..1502fce
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.session.SessionManager;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class RoomPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
+	
+	public RoomPanel(String id) {
+		this(id, new PageParameters());
+	}
+	
+	private String getFlashFile() {
+		return RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType()
+				? "maindebug.as3.swf11.swf" : "main.as3.swf11.swf";
+	}
+	
+	private static PageParameters addServer(PageParameters pp, Server s) {
+		return pp.add("protocol", s.getProtocol()).add("host", s.getAddress()).add("port", s.getPort()).add("context", s.getWebapp());
+	}
+	
+	public static PageParameters addServer(long roomId, boolean addBasic) {
+		PageParameters pp = new PageParameters();
+		if (addBasic) {
+			pp.add("wicketsid", getSid()).add("wicketroomid", roomId).add("language", getLanguage());
+		}
+		List<Server> serverList = getBean(ServerDao.class).getActiveServers();
+
+		long minimum = -1;
+		Server result = null;
+		HashMap<Server, List<Long>> activeRoomsMap = new HashMap<Server, List<Long>>();
+		for (Server server : serverList) {
+			List<Long> roomIds = getBean(SessionManager.class).getActiveRoomIdsByServer(server);
+			if (roomIds.contains(roomId)) {
+				// if the room is already opened on a server, redirect the user to that one,
+				log.debug("Room is already opened on a server " + server.getAddress());
+				return addServer(pp, server);
+			}
+			activeRoomsMap.put(server, roomIds);
+		}
+		for (Map.Entry<Server, List<Long>> entry : activeRoomsMap.entrySet()) {
+			List<Long> roomIds = entry.getValue();
+			Long capacity = getBean(RoomDao.class).getRoomsCapacityByIds(roomIds);
+			if (minimum < 0 || capacity < minimum) {
+				minimum = capacity;
+				result = entry.getKey();
+			}
+			log.debug("Checking server: " + entry.getKey() + " Number of rooms " + roomIds.size() + " RoomIds: "
+					+ roomIds + " max(Sum): " + capacity);
+		}
+		return result == null ? pp : addServer(pp, result);
+	}
+
+	public RoomPanel(String id, long roomId) {
+		this(id, addServer(roomId, true));
+	}
+	
+	public RoomPanel(String id, PageParameters pp) {
+		super(id);
+
+		StringValue swfVal = pp.get("swf");
+		String swf = (swfVal.isEmpty() ? getFlashFile() : swfVal.toString())
+				+ new PageParametersEncoder().encodePageParameters(pp);
+		add(new Label("init", String.format("initSwf('%s');", swf)).setEscapeModelStrings(false));
+		add(new AbstractAjaxTimerBehavior(Duration.minutes(5)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onTimer(AjaxRequestTarget target) {
+				getBean(SessiondataDao.class).checkSession(WebSession.getSid()); //keep SID alive
+			}
+		});
+	}
+
+	private ResourceReference newResourceReference() {
+		return new JavaScriptResourceReference(RoomPanel.class, "swf-functions.js");
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forUrl("js/history.js")));
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forUrl("js/openmeetings_functions.js")));
+		response.render(new PriorityHeaderItem(CssHeaderItem.forUrl("css/history.css")));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
new file mode 100644
index 0000000..6c5b9b5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<table>
+		<tr>
+			<td style="vertical-align: top">
+				<table class="room-list">
+					<tr wicket:id="list" class="room-row">
+						<td>
+							<div wicket:id="roomContainer">		
+								<span wicket:id="roomName">[room name]</span><br/>
+								<wicket:message key="398" />&nbsp;<span wicket:id="curUsers"></span>&nbsp;/&nbsp;<span
+								wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 
+								class="ui-icon ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>
+							</div>
+						</td>
+						<td><button wicket:id="enter"><wicket:message key="131"/></button></td>
+					</tr>
+				</table>
+			</td>
+			<td style="vertical-align: top">
+				<!-- Users in this Room -->
+				<fieldset class="ui-widget-content" wicket:id="details">
+					<div class="formelement" style="font-style: italic;">
+	                    <label><wicket:message key="404" /></label>
+					</div>
+					<div class="formelement">
+	                    <label style="font-weight: bold;"><wicket:message key="406" /></label>
+	                    <span wicket:id="roomName"></span>&nbsp;#<span wicket:id="roomId"></span>
+					</div>
+					<div class="formelement">
+	                    <label style="font-weight: bold;"><wicket:message key="270" /></label>
+	                    <span wicket:id="roomComment"></span>
+					</div>
+					<div class="formelement">
+	                    <label><wicket:message key="407" /></label>
+					</div>
+					<div class="tableWrapper" id="adminTable">
+						<table class="adminListTable">
+							<tbody wicket:id="clientsContainer">		
+					    		<tr wicket:id="clients">
+									<td style="width: 50px;"><img wicket:id="clientImage" style="min-width: 50px; height:50px" /></td>
+									<td style="width: 350px; height:50px">
+										<div style="width: 350px; height:50px"><span wicket:id="clientLogin"></span>&nbsp;<wicket:message key="408"/>&nbsp;<span wicket:id="from"></span></div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</fieldset>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
new file mode 100644
index 0000000..21dd4fa
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.util.io.IOUtils;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public class RoomsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
+	private final WebMarkupContainer details = new WebMarkupContainer("details");
+	private final ListView<Client> clients;
+	private IModel<Long> roomID = Model.of((Long)null);
+	private IModel<String> roomName = Model.of((String)null);
+	private IModel<String> roomComment = Model.of((String)null);
+	private List<Client> clientsInRoom = null;
+	private long roomId = 0;
+
+	public RoomsPanel(String id, List<Room> rooms) {
+		super(id);
+		add(new ListView<Room>("list", rooms) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<Room> item) {
+				final Room r = item.getModelObject();
+				WebMarkupContainer roomContainer;
+				item.add((roomContainer = new WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("onclick"){
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						roomId = r.getRooms_id();
+						updateRoomDetails(target);
+					}
+				}));
+				roomContainer.add(new Label("roomName", r.getName()));
+				final Label curUsers = new Label("curUsers", new Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getRooms_id()).size()));
+				roomContainer.add(curUsers.setOutputMarkupId(true));
+				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));
+				item.add(new Button("enter").add(new RoomEnterBehavior(r.getRooms_id())));
+				roomContainer.add(new AjaxLink<Void>("refresh") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						roomId = r.getRooms_id();
+						target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getRooms_id()).size()));
+						updateRoomDetails(target);
+					}
+				});
+			}
+		});
+		
+		// Users in this Room
+		add(details.setOutputMarkupId(true).setVisible(rooms.size() > 0));
+		details.add(new Label("roomId", roomID));
+		details.add(new Label("roomName", roomName));
+		details.add(new Label("roomComment", roomComment));
+		clients = new ListView<Client>("clients", clientsInRoom){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<Client> item) {
+				Client client = item.getModelObject();
+				final Long userId = client.getUser_id();
+				item.add(new Image("clientImage", new ByteArrayResource("image/jpeg") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected ResourceResponse newResourceResponse(Attributes attributes) {
+						ResourceResponse rr = super.newResourceResponse(attributes);
+						rr.disableCaching();
+						return rr;
+					}
+					
+					@Override
+					protected byte[] getData(Attributes attributes) {
+						String uri = null;
+						if (userId != null) {
+							uri = Application.getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();
+						}
+						File img = OmFileHelper.getUserProfilePicture(userId, uri);
+						InputStream is = null;
+						try {
+							is = new FileInputStream(img);
+							return IOUtils.toByteArray(is);
+						} catch (Exception e) {
+						} finally {
+							if (is != null) {
+								try {
+									is.close();
+								} catch (IOException e) {}
+							}
+						}
+						return null;
+					}
+				}));
+				item.add(new Label("clientLogin", client.getUsername()));
+				item.add(new Label("from", client.getConnectedSince()));
+			}
+		};
+		details.add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
+	}
+
+	void updateRoomDetails(AjaxRequestTarget target) {
+		final List<Client> clientsInRoom = Application.getBean(ISessionManager.class).getClientListByRoom(roomId);
+		clients.setDefaultModelObject(clientsInRoom);
+		Room room = Application.getBean(RoomDao.class).get(roomId);
+		roomID.setObject(room.getRooms_id());
+		roomName.setObject(room.getName());
+		roomComment.setObject(room.getComment());
+		target.add(clientsContainer, details);
+	}
+	
+	@Override
+	protected void onDetach() {
+		roomID.detach();
+		roomName.detach();
+		roomComment.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
new file mode 100644
index 0000000..eea6f53
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="title" class="rooms title"></div>
+		<div wicket:id="desc" class="rooms desc info-text"></div>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
new file mode 100644
index 0000000..45daa4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;
+import org.apache.wicket.markup.html.basic.Label;
+
+public class RoomsSelectorPanel extends UserPanel {
+	private static final long serialVersionUID = -3246259803623925341L;
+
+	public RoomsSelectorPanel(String id, MenuParams param) {
+		super(id);
+
+		long title, desc;
+		RoomDao roomDao = Application.getBean(RoomDao.class);
+		switch (param) {
+			case myTabButton:
+				title = 781L;
+				desc = 782L;
+				add(new RoomsPanel("rooms", getMyRooms()));
+				break;
+			case privateTabButton:
+				title = 779L;
+				desc = 780L;
+				add(new RoomsTabbedPanel("rooms")); 
+				break;
+			case publicTabButton:
+			default:
+				title = 777L;
+				desc = 778L;
+				add(new RoomsPanel("rooms", roomDao.getPublicRooms()));
+				break;
+		}
+		add(new Label("title", Application.getString(title)));
+		add(new Label("desc", Application.getString(desc)));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
new file mode 100644
index 0000000..b8aa48b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="orgTabs">
+			<ul>
+				<li wicket:id="orgTabs"><a wicket:id="link"><wicket:container wicket:id="name"></wicket:container></a></li>
+			</ul>
+			<wicket:container wicket:id="orgRooms"><div wicket:id="rooms"></div></wicket:container>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
new file mode 100644
index 0000000..7a501c9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+
+public class RoomsTabbedPanel extends UserPanel {
+	private static final long serialVersionUID = 3642004664480074881L;
+
+	public RoomsTabbedPanel(String id) {
+		super(id);
+		
+		User u = getBean(UserDao.class).get(getUserId());
+		add(new ListView<Organisation_Users>("orgTabs", u.getOrganisation_users()) {
+			private static final long serialVersionUID = -145637079945252731L;
+
+			@Override
+			protected void populateItem(ListItem<Organisation_Users> item) {
+				Organisation org = item.getModelObject().getOrganisation();
+				item.add(new WebMarkupContainer("link")
+					.add(new Label("name", Model.of(org.getName())))
+					.add(new AttributeModifier("href", "#org" + org.getOrganisation_id())));
+			}
+		});
+		add(new ListView<Organisation_Users>("orgRooms", u.getOrganisation_users()) {
+			private static final long serialVersionUID = 9039932126334250798L;
+
+			@Override
+			protected void populateItem(ListItem<Organisation_Users> item) {
+				Organisation org = item.getModelObject().getOrganisation();
+				item.add(new RoomsPanel("rooms"
+					, getBean(RoomDao.class).getOrganisationRooms(org.getOrganisation_id()))
+					.setMarkupId("org" + org.getOrganisation_id())).setRenderBodyOnly(true);
+			}
+		});
+		add(new JQueryBehavior("#orgTabs", "tabs"));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/swf-functions.js b/src/web/java/org/apache/openmeetings/web/user/rooms/swf-functions.js
new file mode 100644
index 0000000..3c3ead6
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/swf-functions.js
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+function getAppletStatus() {
+	return false;
+}
+
+function initSwf(swfurl) {
+	var general = {
+			url : swfurl,
+			bgcolor : '#ffffff',
+			width : '100%',
+			height : '100%',
+			id : 'lzapp',
+			__lzminimumversion : 8
+		};
+	var options = $.extend({}, general, {allowfullscreen : 'true'});
+	$('#header, #topControls, #chatPanel').hide();
+	$('div[id="contents"], div[id="contents"] > div').css('height', '100%');
+	var embed = $('<embed>').attr('quality', 'high').attr('bgcolor', options.bgcolor)
+		.attr('src', "public/" + options.url)
+		.attr('wmode', 'window').attr('allowfullscreen', true)
+		.attr('width', options.width).attr('height', options.height)
+		.attr('id', 'lzapp').attr('name', 'lzapp')
+		.attr('flashvars', escape($.param(general)))
+		.attr('swliveconnect', true).attr('align', 'middle')
+		.attr('allowscriptaccess', 'sameDomain').attr('type', 'application/x-shockwave-flash')
+		.attr('pluginspage', 'http://www.macromedia.com/go/getflashplayer');
+	$('#swfloading').after($('<div id="lzappContainer">').append(embed)).width('1px').height('1px');
+}
+
+function roomExit() {
+	$('#header, #topControls, #chatPanel').show();
+	$('div[id="contents"], div[id="contents"] > div').css('height', 'auto');
+	window.location.hash = "#rooms/public";
+	$('#lzappContainer').remove();
+}
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java b/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java
new file mode 100644
index 0000000..2000987
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * see: <a href="https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow">
+ * https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow</href>
+ * 
+ */
+public class AjaxDownload extends AbstractAjaxBehavior {
+	private static final long serialVersionUID = 1L;
+
+	private boolean addAntiCache;
+
+	private String fileName;
+	private IResourceStream resourceStream;
+
+	public AjaxDownload() {
+		this(true);
+	}
+
+	public AjaxDownload(boolean addAntiCache) {
+		super();
+		this.addAntiCache = addAntiCache;
+	}
+
+	/**
+	 * Call this method to initiate the download.
+	 */
+	public void initiate(AjaxRequestTarget target) {
+		String url = getCallbackUrl().toString();
+
+		if (addAntiCache) {
+			url = url + (url.contains("?") ? "&" : "?");
+			url = url + "antiCache=" + System.currentTimeMillis();
+		}
+
+		// the timeout is needed to let Wicket release the channel
+		target.appendJavaScript("setTimeout(\"window.location.href='" + url + "'\", 100);");
+	}
+
+	public void onRequest() {
+		ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName());
+		handler.setContentDisposition(getContentDisposition());
+		getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+	}
+
+	protected ContentDisposition getContentDisposition() {
+		return ContentDisposition.ATTACHMENT;
+	}
+	/**
+	 * Override this method for a file name which will let the browser prompt
+	 * with a save/open dialog.
+	 * 
+	 * @see ResourceStreamRequestTarget#getFileName()
+	 */
+	protected String getFileName() {
+		return this.fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	/**
+	 * Hook method providing the actual resource stream.
+	 */
+	protected IResourceStream getResourceStream() {
+		return resourceStream;
+
+	}
+
+	public void setResourceStream(IResourceStream resourceStream) {
+		this.resourceStream = resourceStream;
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
new file mode 100644
index 0000000..f354341
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class AviRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public AviRecordingResourceReference() {
+		super(AviRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/avi";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getAlternateDownload();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getAlternateDownload());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java b/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java
new file mode 100644
index 0000000..0d85df4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+
+public class BootstrapFileUploadBehavior extends Behavior {
+	private static final long serialVersionUID = 1L;
+	private final static JavaScriptResourceReference BOOTSTRAP_FILEUPLOAD_JS_REFERENCE
+			= new JavaScriptResourceReference(BootstrapFileUploadBehavior.class, "bootstrap-fileupload.js");
+	private final static CssResourceReference BOOTSTRAP_FILEUPLOAD_CSS_REFERENCE
+			= new CssResourceReference(BootstrapFileUploadBehavior.class, "bootstrap-fileupload.css");
+	public final static BootstrapFileUploadBehavior INSTANCE = new BootstrapFileUploadBehavior(); 
+	
+	private BootstrapFileUploadBehavior() {
+	}
+	
+	@Override
+	public void renderHead(Component component, IHeaderResponse response) {
+		super.renderHead(component, response);
+        response.render(JavaScriptHeaderItem.forReference(BOOTSTRAP_FILEUPLOAD_JS_REFERENCE));
+        response.render(CssHeaderItem.forReference(BOOTSTRAP_FILEUPLOAD_CSS_REFERENCE));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java b/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java
new file mode 100644
index 0000000..2c8cd87
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserTimeZone;
+
+import java.util.Date;
+
+import org.apache.openmeetings.util.CalendarHelper;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZoneId;
+
+public class CalendarWebHelper extends CalendarHelper {
+	public static ZoneId getZoneId() {
+		return getZoneId(getUserTimeZone().getID());
+	}
+	
+	public static Date getDate(LocalDateTime d) {
+		return getDate(d, getUserTimeZone().getID());
+	}
+	
+	public static Date getDate(LocalDate d) {
+		return getDate(d, getUserTimeZone().getID());
+	}
+	
+	public static LocalDateTime getDateTime(Date d) {
+		return getDateTime(d, getUserTimeZone().getID());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java b/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.RequestContactConfirmTemplate;
+import org.apache.openmeetings.web.mail.template.RequestContactTemplate;
+
+public class ContactsHelper {
+	public static long addUserToContactList(long userIdToAdd) {
+		Long countContacts = getBean(UserContactsDao.class).checkUserContacts(userIdToAdd, getUserId());
+
+		if (countContacts != null && countContacts > 0) {
+			return -45L;
+		}
+		String hash = ManageCryptStyle.getInstanceOfCrypt()
+			.createPassPhrase(CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+
+		Long userContactId = getBean(UserContactsDao.class).addUserContact(userIdToAdd, getUserId(), true, hash);
+
+		User user = getBean(UserDao.class).get(getUserId());
+		User userToAdd = getBean(UserDao.class).get(userIdToAdd);
+
+		String subj = user.getFirstname() + " " + user.getLastname() + " " + Application.getString(1193);
+		String message = RequestContactTemplate.getEmail(userToAdd, user);
+
+		getBean(PrivateMessagesDao.class).addPrivateMessage(
+			subj, message, 0L, user, userToAdd, userToAdd, false, null, true, userContactId);
+
+		if (userToAdd.getAdresses() != null) {
+			getBean(MailHandler.class).send(userToAdd.getAdresses().getEmail(), subj, message);
+		}
+
+		return userContactId;
+	}
+
+	public static Long acceptUserContact(long userContactId) {
+		UserContactsDao dao = getBean(UserContactsDao.class);
+		UserContact contact = dao.get(userContactId);
+
+		if (contact == null) {
+			return -46L;
+		}
+
+		if (!contact.getPending()) {
+			return -47L;
+		}
+
+		dao.updateContactStatus(userContactId, false);
+
+		contact = dao.get(userContactId);
+		User user = contact.getOwner();
+
+		dao.addUserContact(user.getUser_id(), getUserId(), false, "");
+
+		if (user.getAdresses() != null) {
+			String message = RequestContactConfirmTemplate.getEmail(contact);
+
+			String subj = contact.getContact().getFirstname() + " " + contact.getContact().getLastname() + " " + Application.getString(1198);
+
+			getBean(PrivateMessagesDao.class).addPrivateMessage(
+					subj, message,
+					0L, contact.getContact(), user, user, false, null, false, 0L);
+
+			getBean(MailHandler.class).send(user.getAdresses().getEmail(), subj, message);
+		}
+		return userContactId;
+	}
+	
+	public static String getLink() {
+		return PROFILE_MESSAGES.getLink();		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
new file mode 100644
index 0000000..13accb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class FlvRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public FlvRecordingResourceReference() {
+		super(FlvRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/flv";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java b/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
new file mode 100644
index 0000000..cb07401
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
+
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.db.entity.user.User;
+
+public class FormatHelper {
+	/**
+	 * taken from BidiUtils
+	 * 
+	 * A regular expression for matching right-to-left language codes. See
+	 * {@link #isRtlLanguage} for the design.
+	 */
+	private static final Pattern RtlLocalesRe = Pattern.compile("^(ar|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Arab|Hebr|Thaa|Nkoo|Tfng))"
+					+ "(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)");
+
+	/**
+	 * Check if a BCP 47 / III language code indicates an RTL language, i.e.
+	 * either: - a language code explicitly specifying one of the right-to-left
+	 * scripts, e.g. "az-Arab", or
+	 * <p>
+	 * - a language code specifying one of the languages normally written in a
+	 * right-to-left script, e.g. "fa" (Farsi), except ones explicitly
+	 * specifying Latin or Cyrillic script (which are the usual LTR
+	 * alternatives).
+	 * <p>
+	 * The list of right-to-left scripts appears in the 100-199 range in
+	 * http://www.unicode.org/iso15924/iso15924-num.html, of which Arabic and
+	 * Hebrew are by far the most widely used. We also recognize Thaana, N'Ko,
+	 * and Tifinagh, which also have significant modern usage. The rest (Syriac,
+	 * Samaritan, Mandaic, etc.) seem to have extremely limited or no modern
+	 * usage and are not recognized. The languages usually written in a
+	 * right-to-left script are taken as those with Suppress-Script:
+	 * Hebr|Arab|Thaa|Nkoo|Tfng in
+	 * http://www.iana.org/assignments/language-subtag-registry, as well as
+	 * Sindhi (sd) and Uyghur (ug). The presence of other subtags of the
+	 * language code, e.g. regions like EG (Egypt), is ignored.
+	 */
+	public static boolean isRtlLanguage(String languageString) {
+		return languageString != null && RtlLocalesRe.matcher(languageString).find();
+	}
+
+	public static String formatUser(User u) {
+		return formatUser(u, false);
+	}
+
+	// TODO check RIGHTS here (email might need to be hidden)
+	public static String formatUser(User u, boolean isHTMLEscape) {
+		String user = "";
+		if (u != null) {
+			String email = u.getAdresses() == null ? "" : u.getAdresses().getEmail();
+			user = String.format("\"%s %s\" <%s>", u.getFirstname(), u.getLastname(), email);
+			user = isHTMLEscape ? escapeHtml4(user) : user;
+		}
+		return user;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
new file mode 100644
index 0000000..8a92f2c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class JpgRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public JpgRecordingResourceReference() {
+		super(JpgRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "image/jpeg";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getPreviewImage();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getPreviewImage());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
new file mode 100644
index 0000000..41df9e0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class Mp4RecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public Mp4RecordingResourceReference() {
+		super(Mp4RecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/mp4";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash() + MP4_EXTENSION;
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getMp4Recording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
new file mode 100644
index 0000000..758757c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class OggRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public OggRecordingResourceReference() {
+		super(OggRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/ogg";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash() + OGG_EXTENSION;
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getOggRecording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java b/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
new file mode 100644
index 0000000..674e321
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.user.profile.SettingsPanel.EDIT_PROFILE_TAB_ID;
+import static org.apache.openmeetings.web.user.profile.SettingsPanel.MESSAGES_TAB_ID;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.admin.backup.BackupPanel;
+import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
+import org.apache.openmeetings.web.admin.connection.ConnectionsPanel;
+import org.apache.openmeetings.web.admin.groups.GroupsPanel;
+import org.apache.openmeetings.web.admin.labels.LangPanel;
+import org.apache.openmeetings.web.admin.ldaps.LdapsPanel;
+import org.apache.openmeetings.web.admin.oauth.OAuthPanel;
+import org.apache.openmeetings.web.admin.rooms.RoomsPanel;
+import org.apache.openmeetings.web.admin.servers.ServersPanel;
+import org.apache.openmeetings.web.admin.users.UsersPanel;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.user.calendar.CalendarPanel;
+import org.apache.openmeetings.web.user.dashboard.OmDashboardPanel;
+import org.apache.openmeetings.web.user.profile.SettingsPanel;
+import org.apache.openmeetings.web.user.record.RecordingsPanel;
+import org.apache.openmeetings.web.user.rooms.RoomPanel;
+import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
+
+public class OmUrlFragment implements Serializable {
+	private static final long serialVersionUID = 7382435810352033914L;
+	private AreaKeys area = AreaKeys.user;
+	private String type = "";
+	public static final String CHILD_ID = "child";
+	public static final String TYPE_CALENDAR = "calendar";
+	public static final String TYPE_DASHBOARD = "dashboard";
+	public static final String TYPE_MESSAGES = "messages";
+	public static final String TYPE_EDIT = "edit";
+	public static final String TYPE_RECORDINGS = "record";
+	public static final String TYPE_MY = "my";
+	public static final String TYPE_GROUP = "group";
+	public static final String TYPE_PUBLIC = "public";
+	public static final String TYPE_USER = "user";
+	public static final String TYPE_CONNECTION = "connection";
+	public static final String TYPE_ROOM = "room";
+	public static final String TYPE_CONFIG = "config";
+	public static final String TYPE_LANG = "lang";
+	public static final String TYPE_LDAP = "ldap";
+	public static final String TYPE_BACKUP = "backup";
+	public static final String TYPE_SERVER = "server";
+	public static final String TYPE_OAUTH2 = "oauth2";
+	public static final OmUrlFragment DASHBOARD = new OmUrlFragment(AreaKeys.user, TYPE_DASHBOARD);
+	public static final OmUrlFragment PROFILE_EDIT = new OmUrlFragment(AreaKeys.profile, TYPE_EDIT);
+	public static final OmUrlFragment PROFILE_MESSAGES = new OmUrlFragment(AreaKeys.profile, TYPE_MESSAGES);
+	public static final OmUrlFragment CALENDAR = new OmUrlFragment(AreaKeys.user, TYPE_CALENDAR);
+	public static final OmUrlFragment ROOMS_PUBLIC = new OmUrlFragment(AreaKeys.rooms, TYPE_PUBLIC);
+	
+	public enum AreaKeys {
+		user
+		, admin
+		, profile
+		, room
+		, rooms
+	}
+	
+	public enum MenuActions {
+		dashboardModuleStartScreen
+		, dashboardModuleCalendar
+		, recordModule
+		, conferenceModuleRoomList
+		, eventModuleRoomList
+		, moderatorModuleUser
+		, moderatorModuleRoom
+		, adminModuleUser
+		, adminModuleConnections
+		, adminModuleOrg
+		, adminModuleRoom
+		, adminModuleConfiguration
+		, adminModuleLanguages
+		, adminModuleLDAP
+		, adminModuleBackup
+		, adminModuleServers
+		, adminModuleOAuth
+	}
+	
+	public enum MenuParams {
+		publicTabButton
+		, privateTabButton
+		, myTabButton
+	}
+	
+	public static OmUrlFragment get() {
+		String[] arr = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANDING_ZONE, String.class, "").split("/");
+		if (arr != null && arr.length == 2) {
+			try {
+				return new OmUrlFragment(AreaKeys.valueOf(arr[0]), arr[1]);
+			} catch (Exception e) {
+				// no-op
+			}
+		}
+		return DASHBOARD;
+	}
+	
+	public OmUrlFragment(AreaKeys area, String type) {
+		this.setArea(area);
+		this.setType(type);
+	}
+	
+	public OmUrlFragment(MenuActions action) {
+		this(action, MenuParams.myTabButton);
+	}
+	
+	public OmUrlFragment(MenuActions action, MenuParams params) {
+		switch(action) {
+			case dashboardModuleStartScreen:
+				setArea(AreaKeys.user);
+				setType(TYPE_DASHBOARD);
+				break;
+			case dashboardModuleCalendar:
+				setArea(AreaKeys.user);
+				setType(TYPE_CALENDAR);
+				break;
+			case recordModule:
+				setArea(AreaKeys.user);
+				setType(TYPE_RECORDINGS);
+				break;
+			case conferenceModuleRoomList:
+				setArea(AreaKeys.rooms);
+				switch (params) {
+					case myTabButton:
+						setType(TYPE_MY);
+						break;
+					case privateTabButton:
+						setType(TYPE_GROUP);
+						break;
+					case publicTabButton:
+						setType(TYPE_PUBLIC);
+						break;
+				}
+				break;
+			case eventModuleRoomList:
+				break;
+			case moderatorModuleUser:
+				break;
+			case moderatorModuleRoom:
+				break;
+			case adminModuleUser:
+				setArea(AreaKeys.admin);
+				setType(TYPE_USER);
+				break;
+			case adminModuleConnections:
+				setArea(AreaKeys.admin);
+				setType(TYPE_CONNECTION);
+				break;
+			case adminModuleOrg:
+				setArea(AreaKeys.admin);
+				setType(TYPE_GROUP);
+				break;
+			case adminModuleRoom:
+				setArea(AreaKeys.admin);
+				setType(TYPE_ROOM);
+				break;
+			case adminModuleConfiguration:
+				setArea(AreaKeys.admin);
+				setType(TYPE_CONFIG);
+				break;
+			case adminModuleLanguages:
+				setArea(AreaKeys.admin);
+				setType(TYPE_LANG);
+				break;
+			case adminModuleLDAP:
+				setArea(AreaKeys.admin);
+				setType(TYPE_LDAP);
+				break;
+			case adminModuleBackup:
+				setArea(AreaKeys.admin);
+				setType(TYPE_BACKUP);
+				break;
+			case adminModuleServers:
+				setArea(AreaKeys.admin);
+				setType(TYPE_SERVER);
+				break;
+			case adminModuleOAuth:
+				setArea(AreaKeys.admin);
+				setType(TYPE_OAUTH2);
+		}
+	}
+
+	public AreaKeys getArea() {
+		return area;
+	}
+
+	public void setArea(AreaKeys area) {
+		this.area = area;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public static BasePanel getPanel(AreaKeys area, String type) {
+		BasePanel basePanel = null;
+		switch(area) {
+			case admin:
+				if (TYPE_USER.equals(type)) {
+					basePanel = new UsersPanel(CHILD_ID);
+				} else if (TYPE_CONNECTION.equals(type)) {
+					basePanel = new ConnectionsPanel(CHILD_ID);
+				} else if (TYPE_GROUP.equals(type)) {
+					basePanel = new GroupsPanel(CHILD_ID);
+				} else if (TYPE_ROOM.equals(type)) {
+					basePanel = new RoomsPanel(CHILD_ID);
+				} else if (TYPE_CONFIG.equals(type)) {
+					basePanel = new ConfigsPanel(CHILD_ID);
+				} else if (TYPE_LANG.equals(type)) {
+					basePanel = new LangPanel(CHILD_ID);
+				} else if (TYPE_LDAP.equals(type)) {
+					basePanel = new LdapsPanel(CHILD_ID);
+				} else if (TYPE_BACKUP.equals(type)) {
+					basePanel = new BackupPanel(CHILD_ID);
+				} else if (TYPE_SERVER.equals(type)) {
+					basePanel = new ServersPanel(CHILD_ID);
+				} else if (TYPE_OAUTH2.equals(type)) {
+					basePanel = new OAuthPanel(CHILD_ID);
+				}
+				break;
+			case profile:
+				if (TYPE_MESSAGES.equals(type)) {
+					basePanel = new SettingsPanel(CHILD_ID, MESSAGES_TAB_ID);
+				} else if (TYPE_EDIT.equals(type)) {
+					basePanel = new SettingsPanel(CHILD_ID, EDIT_PROFILE_TAB_ID);
+				}
+				break;
+			case room:
+				try {
+					Long roomId = Long.parseLong(type);
+					if (roomId != null) {
+						basePanel = new RoomPanel(CHILD_ID, roomId);
+					}
+				} catch(NumberFormatException ne) {
+					//skipit, bad roomid passed
+				}
+				break;
+			case rooms:
+				MenuParams params = MenuParams.publicTabButton;
+				if (TYPE_GROUP.equals(type)) {
+					params = MenuParams.privateTabButton;
+				} else if (TYPE_MY.equals(type)) {
+					params = MenuParams.myTabButton;
+				}
+				basePanel = new RoomsSelectorPanel(CHILD_ID, params);
+				break;
+			case user:
+				if (TYPE_CALENDAR.equals(type)) {
+					basePanel = new CalendarPanel(CHILD_ID);
+				} else if (TYPE_RECORDINGS.equals(type)) {
+					basePanel = new RecordingsPanel(CHILD_ID);
+				} else {
+					basePanel = new OmDashboardPanel(CHILD_ID);
+				}
+				break;
+			default:
+				break;
+		}
+		return basePanel;
+	}
+	
+	public String getLink() {
+		return getLink(getBean(ConfigurationDao.class).getBaseUrl());
+	}
+
+	public String getLink(String baseUrl) {
+		return baseUrl + "#" + getArea().name() + "/" + getType();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
new file mode 100644
index 0000000..5ed9730
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getExternalType;
+import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.input.BoundedInputStream;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.protocol.http.servlet.ResponseIOException;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.IResource.Attributes;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.Streams;
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.time.Time;
+import org.slf4j.Logger;
+
+public abstract class RecordingResourceReference extends ResourceReference {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = getLogger(RecordingResourceReference.class, webAppRootKey);
+
+	public RecordingResourceReference(Class<? extends RecordingResourceReference> clazz) {
+		super(clazz, "recordings");
+	}
+
+	@Override
+	public IResource getResource() {
+		return new AbstractResource() {
+			private static final long serialVersionUID = 1L;
+			private final static String ACCEPT_RANGES_HEADER = "Accept-Ranges";
+			private final static String RANGE_HEADER = "Range";
+			private final static String CONTENT_RANGE_HEADER = "Content-Range";
+			private final static String RANGES_BYTES = "bytes";
+			private File file;
+			private boolean isRange = false;
+			private long start = 0;
+			private long end = 0;
+			
+			private long getChunkLength() {
+				return isRange ? end - start + 1 : (file == null ? -1 : file.length());
+			}
+			
+			private IResourceStream getResourceStream() {
+				return file == null ? null : new FileResourceStream(file) {
+					private static final long serialVersionUID = 2546785247219805747L;
+					private transient BoundedInputStream bi;
+
+					@Override
+					public InputStream getInputStream() throws ResourceStreamNotFoundException {
+						if (bi == null) {
+							//bi = new BoundedInputStream(super.getInputStream(), end + 1);
+							bi = new BoundedInputStream(super.getInputStream(), isRange ? end + 1 : (file == null ? -1 : file.length()));
+							try {
+								bi.skip(start);
+							} catch (IOException e) {
+								throw new ResourceStreamNotFoundException(e);
+							}
+						}
+						return bi;
+					}
+					
+					@Override
+					public Bytes length() {
+						return Bytes.bytes(getChunkLength());
+					}
+					
+					@Override
+					public void close() throws IOException {
+						if (bi != null) {
+							bi.close(); //also will close original stream
+							bi = null;
+						}
+					}
+					
+					@Override
+					public String getContentType() {
+						return RecordingResourceReference.this.getContentType();
+					}
+				};
+			}
+
+			@Override
+			protected void setResponseHeaders(ResourceResponse data, Attributes attributes) {
+				Response response = attributes.getResponse();
+				if (response instanceof WebResponse) {
+					WebResponse webResponse = (WebResponse)response;
+					webResponse.setStatus(isRange ? HttpServletResponse.SC_PARTIAL_CONTENT : HttpServletResponse.SC_OK);
+				}
+				super.setResponseHeaders(data, attributes);
+			}
+
+			@Override
+			protected ResourceResponse newResourceResponse(Attributes attributes) {
+				ResourceResponse rr = new ResourceResponse();
+				FlvRecording r = getRecording(attributes);
+				if (r != null) {
+					isRange = false;
+					file = getFile(r);
+					rr.setFileName(getFileName(r));
+					rr.setContentType(RecordingResourceReference.this.getContentType());
+					rr.setContentDisposition(ContentDisposition.INLINE);
+					rr.setLastModified(Time.millis(file.lastModified()));
+					rr.getHeaders().addHeader(ACCEPT_RANGES_HEADER, RANGES_BYTES);
+					String range = ((HttpServletRequest)attributes.getRequest().getContainerRequest()).getHeader(RANGE_HEADER);
+					if (range != null && range.startsWith(RANGES_BYTES)) {
+						String[] bounds = range.substring(RANGES_BYTES.length() + 1).split("-");
+						if (bounds != null && bounds.length > 0) {
+							long length = file.length();
+							isRange = true;
+							start = Long.parseLong(bounds[0]);
+							end = bounds.length > 1 ? Long.parseLong(bounds[1]) : length - 1;
+							//Content-Range: bytes 229376-232468/232469
+							rr.getHeaders().addHeader(CONTENT_RANGE_HEADER, String.format("%s %d-%d/%d", RANGES_BYTES, start, end, length));
+						}
+					}
+					rr.setContentLength(getChunkLength());
+					rr.setWriteCallback(new WriteCallback() {
+						@Override
+						public void writeData(Attributes attributes) throws IOException {
+							IResourceStream rStream = getResourceStream();
+							try {
+								final Response response = attributes.getResponse();
+								Streams.copy(rStream.getInputStream(), response.getOutputStream());
+							} catch (ResourceStreamNotFoundException e1) {
+							} catch (ResponseIOException e) {
+								// in case of range operations we expecting such exceptions
+								if (!isRange) {
+									log.error("Error while playing the stream", e);
+								}
+							} finally {
+								rStream.close();
+							}
+						}
+					});
+				} else {
+					rr.setError(HttpServletResponse.SC_NOT_FOUND);
+				}
+				return rr;
+			}
+		};
+	}
+	
+	abstract String getContentType();
+	abstract String getFileName(FlvRecording r);
+	abstract File getFile(FlvRecording r);
+	
+	private Long getLong(StringValue id) {
+		Long result = null;
+		try {
+			result = id.toLongObject();
+		} catch(Exception e) {
+			//no-op
+		}
+		return result;
+	}
+	
+	private FlvRecording getRecording(Long id) {
+		FlvRecording r = getBean(FlvRecordingDao.class).get(id);
+		// TODO should we process public?
+		// || r.getOwnerId() == 0 || r.getParentFileExplorerItemId() == null || r.getParentFileExplorerItemId() == 0
+		if (r == null) {
+			return r;
+		}
+		if (r.getOwnerId() == null || getUserId() == r.getOwnerId()) {
+			return r;
+		}
+		if (r.getOrganization_id() == null || getBean(OrganisationUserDao.class).isUserInOrganization(r.getOrganization_id(), getUserId())) {
+			return r;
+		}
+		//TODO external group check was added for plugin recording download
+		String extType = getExternalType();
+		if (extType != null && extType.equals(r.getCreator().getExternalUserType())) {
+			return r;
+		}
+		return null;
+	}
+	
+	private FlvRecording getRecording(Attributes attributes) {
+		PageParameters params = attributes.getParameters();
+		StringValue idStr = params.get("id");
+		Long id = getLong(idStr);
+		WebSession ws = WebSession.get();
+		if (id != null && ws.isSignedIn()) {
+			return getRecording(id);
+		} else {
+			ws.invalidate();
+			if (ws.signIn(idStr.toString())) {
+				return getRecording(getRecordingId());
+			}
+		}
+		return null;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java b/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java
new file mode 100644
index 0000000..7262a8d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+
+public class RoomTypeDropDown extends DropDownChoice<RoomType> {
+	private static final long serialVersionUID = 1L;
+	
+	public static List<RoomType> getRoomTypes() {
+		return getBean(RoomTypeDao.class).getAll(getLanguage());
+	}
+	
+	public RoomTypeDropDown(String id) {
+		super(id);
+		setChoices(getRoomTypes());
+		setChoiceRenderer(new IChoiceRenderer<RoomType>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Object getDisplayValue(RoomType object) {
+				return getString("" + object.getFieldvalues_id());
+			}
+
+			@Override
+			public String getIdValue(RoomType object, int index) {
+				return "" + object.getRoomtypes_id();
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java b/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
new file mode 100644
index 0000000..4c7a2a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONWriter;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.validation.Validatable;
+import org.wicketstuff.select2.ChoiceProvider;
+import org.wicketstuff.select2.Response;
+
+public class UserChoiceProvider extends ChoiceProvider<User> {
+	private static final long serialVersionUID = 1L;
+	private final static int PAGE_SIZE = 10;
+	private Map<String, User> newContacts = new Hashtable<String, User>();
+	
+	public static User getUser(String value) {
+		User u = null;
+		//FIXME refactor this
+		String email = null;
+		String fName = null;
+		String lName = null;
+		int idx = value.indexOf('<');
+		if (idx > -1) {
+			int idx1 = value.indexOf('>', idx);
+			if (idx1 > -1) {
+				email = value.substring(idx + 1, idx1);
+				
+				String name = value.substring(0, idx).replace("\"", "");
+				int idx2 = name.indexOf(' ');
+				if (idx2 > -1) {
+					fName = name.substring(0, idx2);
+					lName = name.substring(idx2 + 1);
+				} else {
+					fName = "";
+					lName = name;
+				}
+				 
+			}
+		} else {
+			email = value;
+		}
+		Validatable<String> valEmail = new Validatable<String>(email);
+		RfcCompliantEmailAddressValidator.getInstance().validate(valEmail);
+		if (valEmail.isValid()) {
+			u = getBean(UserDao.class).getContact(email, fName, lName, getUserId());
+		}
+		return u;
+	}
+
+	protected Object getId(User u) {
+		String id = "" + u.getUser_id();
+		if (u.getUser_id() == null) {
+			newContacts.put(u.getLogin(), u);
+			id = u.getLogin();
+		}
+		return id;
+	}
+
+	@Override
+	public void query(String term, int page, Response<User> response) {
+		User c = getUser(term);
+		if (c != null) {
+			response.add(c);
+		}
+		UserDao dao = getBean(UserDao.class);
+		response.addAll(dao.get(term, page * PAGE_SIZE, PAGE_SIZE, null, true, getUserId()));
+
+		response.setHasMore(page < dao.count(term, getUserId()) / PAGE_SIZE);
+	}
+
+	@Override
+	public Collection<User> toChoices(Collection<String> ids) {
+		Collection<User> c = new ArrayList<User>();
+		for (String id : ids) {
+			if (newContacts.containsKey(id)) {
+				c.add(newContacts.get(id));
+			} else {
+				c.add(getBean(UserDao.class).get(Long.valueOf(id)));
+			}
+		}
+		return c;
+	}
+
+    public void toJson(User choice, JSONWriter writer) throws JSONException {
+    	writer
+    		.key("id").value(getId(choice))
+    		.key("text").value(FormatHelper.formatUser(choice, true))
+    		.key("contact").value(choice.getType() == Type.contact);
+    };
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java b/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
new file mode 100644
index 0000000..e9c43f0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.user.dashboard.MyRoomsWidget.WIDGET_ID_MY_ROOMS;
+import static org.apache.openmeetings.web.user.dashboard.RssWidget.WIDGET_ID_RSS;
+import ro.fortsoft.wicket.dashboard.DefaultDashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+
+public class UserDashboard extends DefaultDashboard {
+	private static final long serialVersionUID = 1L;
+	private boolean widgetRssDeleted = false;
+	private boolean widgetMyRoomsDeleted = false;
+	
+	public UserDashboard(String id, String title) {
+		super(id, title);
+	}
+
+	public boolean isWidgetRssDeleted() {
+		return widgetRssDeleted;
+	}
+
+	public void setWidgetRssDeleted(boolean widgetRssDeleted) {
+		this.widgetRssDeleted = widgetRssDeleted;
+	}
+
+	public boolean isWidgetMyRoomsDeleted() {
+		return widgetMyRoomsDeleted;
+	}
+
+	public void setWidgetMyRoomsDeleted(boolean widgetMyRoomsDeleted) {
+		this.widgetMyRoomsDeleted = widgetMyRoomsDeleted;
+	}
+	
+	@Override
+	public void deleteWidget(String widgetId) {
+		switch (widgetId) {
+			case WIDGET_ID_RSS:
+				widgetRssDeleted = true;
+				break;
+			case WIDGET_ID_MY_ROOMS:
+				widgetMyRoomsDeleted = true;
+				break;
+			default:
+				break;
+		}
+		super.deleteWidget(widgetId);
+	}
+	
+	@Override
+	public void addWidget(Widget widget) {
+		switch (widget.getId()) {
+			case WIDGET_ID_RSS:
+				widgetRssDeleted = false;
+				break;
+			case WIDGET_ID_MY_ROOMS:
+				widgetMyRoomsDeleted = false;
+				break;
+			default:
+				break;
+		}
+		super.addWidget(widget);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java b/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
new file mode 100644
index 0000000..25a02ef
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Collections;
+
+import org.slf4j.Logger;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.DashboardPersister;
+import ro.fortsoft.wicket.dashboard.WidgetComparator;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+public class UserDashboardPersister implements DashboardPersister {
+	private static final Logger log = getLogger(UserDashboardPersister.class, webAppRootKey);
+	
+	public Dashboard load() {
+		return new XStreamDashboardPersister().load();
+	}
+
+	public void save(Dashboard dashboard) {
+		new XStreamDashboardPersister().save(dashboard);
+	}
+
+	public class XStreamDashboardPersister implements DashboardPersister {
+		private File file;
+		private XStream xstream;
+		
+		public XStreamDashboardPersister() {
+			this.file = getUserDashboard(getUserId());
+			
+	        xstream = new XStream(new DomDriver("UTF-8"));
+	        xstream.setMode(XStream.NO_REFERENCES);
+	        xstream.alias("dashboard", UserDashboard.class);
+		}
+		
+		@Override
+		public Dashboard load() {
+			if (!file.exists() || !file.isFile()) {
+				return null;
+			}
+			
+			try {
+				return (Dashboard) xstream.fromXML(new FileInputStream(file));
+			} catch (Exception e) {
+				log.error("Error while loading dashboard", e);
+				return null;
+			}
+		}
+
+		@Override
+		public void save(Dashboard dashboard) {
+			// sort widgets
+			Collections.sort(dashboard.getWidgets(), new WidgetComparator());
+			
+			try {
+				xstream.toXML(dashboard, new FileOutputStream(file));
+			} catch (Exception e) {
+				log.error("Error while saving dashboard", e);
+			}
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java b/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java
new file mode 100644
index 0000000..a234148
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import java.util.Collection;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+public class UserMultiChoice extends Select2MultiChoice<User> {
+	private static final long serialVersionUID = 1L;
+
+	public UserMultiChoice(String id, IModel<Collection<User>> model) {
+		super(id, model, new UserChoiceProvider());
+		getSettings().setFormatResult("formatOmUser");
+		getSettings().setFormatSelection("formatOmUser");
+		getSettings().setEscapeMarkup("escapeOmUserMarkup");
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(getClass(), "user-multi-choice.js"), "user-multi-choice")));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css
new file mode 100644
index 0000000..d6e603a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css
@@ -0,0 +1,124 @@
+/*!
+ * Bootstrap v2.3.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.btn-file {
+	position: relative;
+	overflow: hidden;
+	vertical-align: middle;
+}
+
+.btn-file>input {
+	position: absolute;
+	top: 0;
+	right: 0;
+	margin: 0;
+	font-size: 23px;
+	cursor: pointer;
+	opacity: 0;
+	filter: alpha(opacity = 0);
+	transform: translate(-300px, 0) scale(4);
+	direction: ltr;
+}
+
+.fileupload {
+	margin-bottom: 9px;
+}
+
+.fileupload .uneditable-input {
+	display: inline-block;
+	margin-bottom: 0;
+	vertical-align: middle;
+	cursor: text;
+}
+
+.fileupload .thumbnail {
+	display: inline-block;
+	margin-bottom: 5px;
+	overflow: hidden;
+	text-align: center;
+	vertical-align: middle;
+}
+
+.fileupload .thumbnail>img {
+	display: inline-block;
+	max-height: 100%;
+	vertical-align: middle;
+}
+
+.fileupload .btn {
+	vertical-align: middle;
+}
+
+.fileupload-exists .fileupload-new,.fileupload-new .fileupload-exists {
+	display: none;
+}
+
+.fileupload-inline .fileupload-controls {
+	display: inline;
+}
+
+.fileupload-new .input-append .btn-file {
+	-webkit-border-radius: 0 3px 3px 0;
+	-moz-border-radius: 0 3px 3px 0;
+	border-radius: 0 3px 3px 0;
+}
+
+.thumbnail-borderless .thumbnail {
+	padding: 0;
+	border: none;
+	-webkit-border-radius: 0;
+	-moz-border-radius: 0;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+	box-shadow: none;
+}
+
+.fileupload-new.thumbnail-borderless .thumbnail {
+	border: 1px solid #ddd;
+}
+
+.control-group.warning .fileupload .uneditable-input {
+	color: #a47e3c;
+	border-color: #a47e3c;
+}
+
+.control-group.warning .fileupload .fileupload-preview {
+	color: #a47e3c;
+}
+
+.control-group.warning .fileupload .thumbnail {
+	border-color: #a47e3c;
+}
+
+.control-group.error .fileupload .uneditable-input {
+	color: #b94a48;
+	border-color: #b94a48;
+}
+
+.control-group.error .fileupload .fileupload-preview {
+	color: #b94a48;
+}
+
+.control-group.error .fileupload .thumbnail {
+	border-color: #b94a48;
+}
+
+.control-group.success .fileupload .uneditable-input {
+	color: #468847;
+	border-color: #468847;
+}
+
+.control-group.success .fileupload .fileupload-preview {
+	color: #468847;
+}
+
+.control-group.success .fileupload .thumbnail {
+	border-color: #468847;
+}
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js
new file mode 100644
index 0000000..97a6da5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js
@@ -0,0 +1,169 @@
+/* ===========================================================
+ * bootstrap-fileupload.js j2
+ * http://jasny.github.com/bootstrap/javascript.html#fileupload
+ * ===========================================================
+ * Copyright 2012 Jasny BV, Netherlands.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function ($) {
+
+  "use strict"; // jshint ;_
+
+ /* FILEUPLOAD PUBLIC CLASS DEFINITION
+  * ================================= */
+
+  var Fileupload = function (element, options) {
+    this.$element = $(element)
+    this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
+      
+    this.$input = this.$element.find(':file')
+    if (this.$input.length === 0) return
+
+    this.name = this.$input.attr('name') || options.name
+
+    this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
+    if (this.$hidden.length === 0) {
+      this.$hidden = $('<input type="hidden" />')
+      this.$element.prepend(this.$hidden)
+    }
+
+    this.$preview = this.$element.find('.fileupload-preview')
+    var height = this.$preview.css('height')
+    if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
+
+    this.original = {
+      'exists': this.$element.hasClass('fileupload-exists'),
+      'preview': this.$preview.html(),
+      'hiddenVal': this.$hidden.val()
+    }
+    
+    this.$remove = this.$element.find('[data-dismiss="fileupload"]')
+
+    this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
+
+    this.listen()
+  }
+  
+  Fileupload.prototype = {
+    
+    listen: function() {
+      this.$input.on('change.fileupload', $.proxy(this.change, this))
+      $(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
+      if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
+    },
+    
+    change: function(e, invoked) {
+      if (invoked === 'clear') return
+      
+      var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
+      
+      if (!file) {
+        this.clear()
+        return
+      }
+      
+      this.$hidden.val('')
+      this.$hidden.attr('name', '')
+      this.$input.attr('name', this.name)
+
+      if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
+        var reader = new FileReader()
+        var preview = this.$preview
+        var element = this.$element
+
+        reader.onload = function(e) {
+          preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
+          element.addClass('fileupload-exists').removeClass('fileupload-new')
+        }
+
+        reader.readAsDataURL(file)
+      } else {
+        this.$preview.text(file.name)
+        this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
+      }
+    },
+
+    clear: function(e) {
+      this.$hidden.val('')
+      this.$hidden.attr('name', this.name)
+      this.$input.attr('name', '')
+
+      //ie8+ doesn't support changing the value of input with type=file so clone instead
+      if (navigator.userAgent.match(/msie/i)){ 
+          var inputClone = this.$input.clone(true);
+          this.$input.after(inputClone);
+          this.$input.remove();
+          this.$input = inputClone;
+      }else{
+          this.$input.val('')
+      }
+
+      this.$preview.html('')
+      this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
+
+      if (e) {
+        this.$input.trigger('change', [ 'clear' ])
+        e.preventDefault()
+      }
+    },
+    
+    reset: function(e) {
+      this.clear()
+      
+      this.$hidden.val(this.original.hiddenVal)
+      this.$preview.html(this.original.preview)
+      
+      if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
+       else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
+    },
+    
+    trigger: function(e) {
+      this.$input.trigger('click')
+      e.preventDefault()
+    }
+  }
+
+  
+ /* FILEUPLOAD PLUGIN DEFINITION
+  * =========================== */
+
+  $.fn.fileupload = function (options) {
+    return this.each(function () {
+      var $this = $(this)
+      , data = $this.data('fileupload')
+      if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
+      if (typeof options == 'string') data[options]()
+    })
+  }
+
+  $.fn.fileupload.Constructor = Fileupload
+
+
+ /* FILEUPLOAD DATA-API
+  * ================== */
+
+  $(document).on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
+    var $this = $(this)
+    if ($this.data('fileupload')) return
+    $this.fileupload($this.data())
+      
+    var $target = $(e.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');
+    if ($target.length > 0) {
+      $target.trigger('click.fileupload')
+      e.preventDefault()
+    }
+  })
+
+}(window.jQuery);
diff --git a/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js b/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js
new file mode 100644
index 0000000..de43cb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+function formatOmUser(user) {
+	return "<span class='user " + (user.contact ? "external" : "internal") + "' >" + user.text + "</span>";
+}
+
+function escapeOmUserMarkup(m) {
+	return m;
+}
\ No newline at end of file
diff --git a/xdocs/ApacheDerbyConfig.xml b/xdocs/ApacheDerbyConfig.xml
new file mode 100644
index 0000000..0474013
--- /dev/null
+++ b/xdocs/ApacheDerbyConfig.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Apache Derby Configuration</title>
+		<author email="sebawagner@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="Apache Derby Configuration">
+
+			<p>
+				OpenMeetings default configuration is to use Apache Derby.
+			</p>
+
+			<p>
+				It is recommended for production environments and high
+				availibility to change to an usual relational database like MySQL,
+				Postgres or DB2.
+			</p>
+			<p>
+				For more information about Apache Derby see
+				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>
+			</p>
+
+			<p>
+				There is a sample configuration for Apache Derby that ships with
+				every release in:
+				<br />
+				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
+			</p>
+
+			<p>
+				If you encounter issues, you can drop the db again and delete the
+				file /webapps/openmeetings/conf/install.xml and then run the web
+				based installer again
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/ApiClassesTemplate.vm b/xdocs/ApiClassesTemplate.vm
new file mode 100644
index 0000000..1ea3714
--- /dev/null
+++ b/xdocs/ApiClassesTemplate.vm
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Classes</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+		#set( $foo = ".html" )
+	
+       <div class="navigation">
+	   #foreach ( $class in $classes )
+            <div>
+            <a href="$class.get("name")$foo" target="_PARENT"><b>$class.get("name")</b></a><br/>
+            <div class="navigation_comment"><i >$class.get("comment")</i></div>
+            </div>
+        #end
+        </div>
+	
+	
+	</body>
+	</html>
diff --git a/xdocs/ApiMethodsTemplate.vm b/xdocs/ApiMethodsTemplate.vm
new file mode 100644
index 0000000..57da677
--- /dev/null
+++ b/xdocs/ApiMethodsTemplate.vm
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    
+     <html>
+        <head>
+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+		<meta name="author" content="OpenMeetings Team">
+		<meta name="email" content="sebawagner@apache.org">
+		<title>OpenMeetings API Methods</title>
+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
+        </head>
+	<body>
+	
+		<h3>Available WebServices:</h3>
+	
+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"
+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
+		  <p>Your Browser does not support frames ...</p>
+		</iframe>
+		
+		<hr />
+	
+	   <h3>WebService: $webServiceName</h3>
+	   <p>$classComment<p>
+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/$webServiceName?wsdl">http://localhost:5080/openmeetings/services/$webServiceName?wsdl</a><p>
+	
+	<!-- Links to Methods -->
+	   <h3>Index of Methods available in $webServiceName</h3>
+	   
+       <div class="navigation">
+	   #foreach ( $method in $methods )
+            #if ($method.isPublic()) 
+                <div>
+                <a href="#$method.name()"><b>$method.name()</b></a><br/>
+                <div class="navigation_comment"><i >$method.commentText()</i></div>
+                </div>
+           #end
+        #end
+        </div>
+	   
+	    <h3>Methods Details in $webServiceName</h3>
+	
+		#foreach ( $method in $methods )
+		    #if ($method.isPublic()) 
+		      <div class="method">
+		        <div class="method_header">
+		        <div style="margin-left:10px">
+    			<a name="$method.name()" ><b>$method.name()</b></a>
+    			</div>
+    			</div>
+    			
+    			Method: <i>$method.name() (
+    			#set ($index = 0) 
+    			#foreach ( $parameter in $method.parameters() )
+    			   #if ($index > 0) 
+    			     , 
+    			   #end
+    			   $parameter.type().simpleTypeName() $parameter.name()
+    			   #set ($index = $index+1) 
+    			#end
+    			)
+    			</i><br/>
+    			<p>
+    			  $method.commentText()
+    			</p>
+    			<p>
+                  Return Type: $method.returnType()
+                </p>
+    			<p>Params:</p>
+    			#if ( $method.paramTags().size() != $method.parameters().size() ) 
+    				<b>Warning:</b><i> Params in this method do not seem to be correctly documentated</i>
+    				<br/><br/>
+    			#end
+    			
+    			#if ($method.paramTags().size() > 0) 
+	    			<table rules="all" border="1">
+	    			   <thead>
+	    			   <tr>
+	    			     <th width="200" align="left">Type</th>
+	    			     <th width="200" align="left">Fieldname</th>
+	    			     <th width="400" align="left">Description</th>
+	    			   </tr>
+	    			   </thead>
+	    			   <tbody>
+	    			   #set ($index = 0) 
+	    			   #foreach ( $parameter in $method.paramTags() )
+	    			   <tr>
+	                     <td valign="top">
+	                     	#if ($method.parameters().size() <= $index) 
+	                     		$index Doclet Param Mismatch: fix JavaDocs in this Method!
+	                     	#else
+	                     		$method.parameters().get($index).type().simpleTypeName()
+	                     	#end 
+	                     </td>
+	                     <td valign="top">$parameter.parameterName()</td>
+	                     <td valign="top">$parameter.parameterComment()</td>
+	                   </tr>
+	                   
+	                   #set ($index = $index+1) 
+	                   #end
+	                   </tbody>
+	    			</table>
+    			#else
+    				<i>No Params</i>
+    			#end
+    			<br/>
+    			REST Sample Call/URL:<br/>
+    			#set ($link = "http://localhost:5080/openmeetings/services/"+$webServiceName+"/"+$method.name()) 
+    			#set ($displayLink = $link)
+    			#set ($index = 0)
+    			#foreach ( $parameter in $method.parameters() )
+    				#if ($index == 0)
+    					#set ($link = $link+"?")
+    					#set ($displayLink = $link)
+    				#else
+    					#set ($link = $link+"&") 
+    					#set ($displayLink = $displayLink + "&amp;")
+    				#end
+    				#set ($link = $link + $parameter.name()+"=VALUE") 
+    				#set ($displayLink = $displayLink + $parameter.name()+"=VALUE") 
+    				#set ($index = $index+1)
+				#end
+				<a href="$link">$displayLink</a>
+    		  </div>
+    	   #end
+		#end
+	
+	
+	</body>
+</html>
+
diff --git a/xdocs/BitrixPlugin.xml b/xdocs/BitrixPlugin.xml
new file mode 100644
index 0000000..87dcfc2
--- /dev/null
+++ b/xdocs/BitrixPlugin.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Bitrix Plugin</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Bitrix">
+			<p>
+				Current Development Snapshots for testing can be created from the sources:
+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-bitrix-plugin/trunk">here</a>
+				.
+			</p>			
+		</section>
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Enter videoconference rooms from Bitrix (http://www.1c-bitrix.ru/): </li>
+			</ul>
+		</section>
+		<section name="Configuration">			
+			<div>
+				<b>OpenMeetings Bitrix Plugin Installation</b><br/>
+				<ol>
+					<li>Build plugin from sources</li>
+					<li>Unpack it into bitrix/modules</li>
+					<li>Install via Admin</li>
+					<li>Add OPenmeetings component to any page.</li>
+				</ol>              
+			</div>
+		</section>
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/BuildInstructions.xml b/xdocs/BuildInstructions.xml
new file mode 100644
index 0000000..6f92f12
--- /dev/null
+++ b/xdocs/BuildInstructions.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Build instructions</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Nightly Builds">
+
+			<p>
+				You can find Nightly Builds of the software at:
+				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/"
+					rel="nofollow" target="_BLANK">
+					https://builds.apache.org/view/M-R/view/OpenMeetings/
+				</a>
+			</p>
+
+		</section>
+
+		<section name="How to Build a Distribution">
+
+			<div>
+				<p>To build a binary release of OpenMeetings you need: </p>
+				<ul>
+					<li>Sun JDK6</li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_BLANK"
+							rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+				</ul>
+			</div>
+
+			<p>Get the source: </p>
+			<div class="xmlcode">
+				svn checkout
+				https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+			</div>
+			<p>Run the command: </p>
+			<div class="xmlcode">
+				ant
+			</div>
+			<p>There is no need to compile the client additionally! The ant task
+				does it all! You will find a directory dist that contains
+				OpenMeetings and a red5-server.
+			</p>
+			<p>To compile the client you can also use ant: </p>
+			<div class="xmlcode">
+				ant
+				<span style="margin-left: 200px;"># compiles a complete package into the folder dist
+				</span>
+				<br />
+				ant compile.laszlo.main
+				<span style="margin-left: 70px;"># compiles the client into main.as3.swf10.swf and
+					main.swf8.swf</span>
+				<br />
+				ant compile.laszlo.main.debug
+				<span style="margin-left: 30px;"># compiles the debug-client into
+					maindebug.as3.swf10.swf and maindebug.swf8.swf
+				</span>
+				<br />
+				ant -Ddb=&lt;name of DB&gt;
+				<span style="margin-left: 50px;"># will copy &lt;name of DB&gt;_persistense.xml to
+					persistense.xml
+				</span>
+				<br />
+				<span style="margin-left: 230px;">#(for ex. ant -Ddb=mysql will set mysql as default
+					DB)
+				</span>
+			</div>
+			<p>To compile just the openmeetings JAR file: </p>
+			<div class="xmlcode">
+				ant jar.only
+			</div>
+			<p>
+				To run Junit tests using ANT see
+				<a href="JUnitTesting.html">JUnitTesting</a>
+			</p>
+		</section>
+
+		<section name="Run, Develop, Test">
+
+			<p>
+				To develop or build OpenMeetings you checkout the source as Eclipse
+				project. You need the Subclipse or Subversive Plugin for Eclipse. If
+				you just need to change 3 lines of code then your probably better
+				switch to
+				<a href="#How_to_build_a_distribution" rel="nofollow">How to build a
+					distribution
+				</a>
+				.
+			</p>
+
+			<subsection name="Step1 - Get required Software">
+
+				<p>To develop OpenMeetings you need at least: </p>
+				<ul>
+					<li>Eclipse in a up to date copy and Sun JDK6 </li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						Subclipse 1.8 (Subversion 1.7 required!)
+						<a href="http://subclipse.tigris.org/" target="_BLANK" rel="nofollow">http://subclipse.tigris.org/
+						</a>
+					</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_BLANK"
+							rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+					<li>Spring IDE for Eclipse (installable via Help &gt; Eclipse
+						Marketplace)
+					</li>
+					<li>
+						Apache IvyDE&#8482; For Eclipse (installable via Help &gt; Install
+						New Software)
+						URL: http://www.apache.org/dist/ant/ivyde/updatesite
+						detailed steps can be found here:
+						<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_BLANK"
+							rel="nofollow">http://ant.apache.org/ivy/ivyde/download.cgi</a>
+					</li>
+					<li>MySQL (or Postgres, or other Databases supported by openJPA)
+						are optionally but handy to have them
+					</li>
+				</ul>
+
+			</subsection>
+
+			<subsection name="Step2 - Download the Source">
+
+				<p>Advanced Users: Check out the Code from the Repository as a
+					Java
+					project into Eclipse.
+				</p>
+				<p>
+					URL:
+					<a
+						href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">
+						https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+					</a>
+				</p>
+				<p>To download the required JARs for building and developing
+					OpenMeetings you need to run the ANT comand:
+				</p>
+				<div class="xmlcode">
+					ant -Ddb=&lt;your_DB&gt; prepare-eclipse
+				</div>
+				<p>After the ANT command you need to press F5 and rebuild the
+					project from inside Eclipse
+				</p>
+				<p>Step-By-Step: </p>
+				<p>1) Start Eclipse </p>
+				<p>
+					2) Change Perspective to SVN Repository Exploring:
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_1.png">
+						<img src="images/checkout_1.png" alt="" width="400" height="289" />
+					</a>
+
+				</p>
+				<p>
+					3) Select SVN Repository Exploring and click ok.
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_2.png">
+						<img src="images/checkout_2.png" alt="" width="304" height="417" />
+					</a>
+				</p>
+				<p>
+					4) A new Dialog in Eclipse opens
+					<strong>SVN Repositories</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_3.png">
+						<img src="images/checkout_3.png" alt="" width="460" height="102" />
+					</a>
+				</p>
+				<p>
+					5) Click on the icon with the plus in the top right corner in the
+					SVN Repository Dialog
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_4.png">
+						<img src="images/checkout_4.png" alt="" width="57" height="38" />
+					</a>
+				</p>
+				<p>
+					6) Add the URL
+					<a
+						href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/"
+						rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+					</a>
+					and click Finish
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_5.png">
+						<img src="images/checkout_5.png" alt="" width="455" height="272" />
+					</a>
+				</p>
+				<p>
+					7) After download is complete you see a new Source Repository in
+					the Repository Explorer. Right click on it and choose
+					<strong>checkout</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_6.png">
+						<img src="images/checkout_6.png" alt="" width="340" height="135" />
+					</a>
+				</p>
+				<p>
+					8) In the Dialog the opens now just click next
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_7.png">
+						<img src="images/checkout_7.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+				<p>
+					9) In the next Dialog just click Finish, Eclipse will then download
+					the sources
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_8.png">
+						<img src="images/checkout_8.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+				<p>
+					10) After the download is complete you will see a new Project in
+					the Package Explorer Dialog of Eclipse
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_9.png">
+						<img src="images/checkout_9.png" alt="" width="310" height="297" />
+					</a>
+				</p>
+				<div>
+					11) Please run
+					<div class="xmlcode">
+						ant prepare-eclipse
+					</div>
+					to download all necessary jar files, and perform source
+					<tt>Refresh</tt>
+					to resolve all compilation issues.
+				</div>
+			</subsection>
+
+			<subsection name="Step3 - Deploy and Run">
+
+				<p>
+					see the first chapter about the ANT tasks to compile the code. You
+					will find a directory called
+					<strong>dist</strong>
+					which contains a regular openmeetings including red5. You can then
+					use the usual process like described at
+					<a href="installation.html">installation</a>
+					to run the code then.
+				</p>
+			</subsection>
+
+		</section>
+
+		<section name="Links">
+
+			<ul>
+				<li>
+					Getting Started with OpenLaszlo, checkout
+					<a
+						href="http://www.openlaszlo.org/lps4.2/laszlo-explorer/index.jsp?lzr=swf8"
+						target="_BLANK" rel="nofollow">Laszlo-in-10-Minutes</a>
+					and the
+					<a href="http://www.openlaszlo.org/lps4.2/docs/" target="_BLANK"
+						rel="nofollow">Application
+						Developer's Guide
+					</a>
+					or try the
+					<a href="http://www.openlaszlo.org/getstarted" target="_BLANK"
+						rel="nofollow">ScreenCast</a>
+				</li>
+				<li>
+					<a href="http://openmeetings.apache.org/svn.html">
+						browse SVN source
+					</a>
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Tipps and Gotchas">
+
+			<p>When you want to develop only client side there are handy ANT
+				tasks so that you only rebuild the SWFs, same for the Java side.
+			</p>
+			<p>
+				It
+				also takes much less time if you do use MySQL as database then
+				rebuilding the software and waiting for Apache Derby to set up the
+				database everytime you did rebuild.
+			</p>
+			<p>
+				<b>Working behind a proxy:</b>
+				If you are sitting behind a proxy you should add some proxy settings
+				before starting the build process.
+				<br />
+				For Apache Ivy see:
+				<a href="http://ant.apache.org/ivy/faq.html" target="_BLANK" rel="nofollow">http://ant.apache.org/ivy/faq.html
+				</a>
+				<br />
+				For SVN Command Line Client (From CollabNet 1.7) see:
+				<a
+					href="https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html"
+					target="_BLANK" rel="nofollow">https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/CalendarAndTimezone.xml b/xdocs/CalendarAndTimezone.xml
new file mode 100644
index 0000000..4846e2f
--- /dev/null
+++ b/xdocs/CalendarAndTimezone.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Changing the Calendar and Timezone default</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing the Calendar and Timezone default">
+
+			<p>
+				In general the timezone is configured in the user profile of each
+				user, so changing the server timezone has no effect how to the users
+				calendar for example.
+				<br />
+				<br />
+				However there are some circumstances where there is no user profile
+				available.
+			</p>
+		</section>
+
+		<section
+			name="Changing servers default timzeone for Emails and Invitations (display)">
+			<p>
+				Goto Administration &gt; Configuration and change the config-key:
+				<tt>default.timezone</tt>
+			</p>
+			<p>Valid timezone have to meet standards! </p>
+		</section>
+
+		<section
+			name="Changing first day in week for calendar from Sunday to Monday">
+
+			<p>in the public/config.xml change the key: </p>
+			<div class="xmlcode">
+				&lt;!--
+				<br />
+				First day in the Week used by the Calendar
+				<br />
+				0 means Sunday
+				<br />
+				1 means Monday
+				<br />
+				this is the way how the Celendar inits a week
+				<br />
+				--&gt;
+				<br />
+				&lt;firstdayinweek&gt;0&lt;/firstdayinweek&gt;
+				<br />
+			</div>
+		</section>
+
+		<section
+			name="Changing the default number of max participants of a conference room created via calendar">
+
+			<p>Goto
+				Administration &gt; Configuration and change the config-key:
+				<tt>calendar.conference.rooms.default.size</tt>
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/Clustering.xml b/xdocs/Clustering.xml
new file mode 100644
index 0000000..5f7edcf
--- /dev/null
+++ b/xdocs/Clustering.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Clustering</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="Description">
+			<p>
+				OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings 
+				servers, so all database tables are shared across OM instances. Certain folders should be shared 
+				between all servers to allow access to the files/recording.</p>
+		</section>
+		<section name="Configuration">
+			<ul>
+				<li>
+					Multiple OM servers should be set up as described in
+					<a href="installation.html" target="_BLANK">
+						<b>Installation</b>
+					</a>
+				</li>
+				<li>All servers should be configured to have same Time zone (To avoid
+					Schedulers to drop user sessions as outdated)
+				</li>
+				<li>All servers should be configured to use the same DB</li>
+				<li>Servers should be added in Administration -&gt; Servers section</li>
+			</ul>
+		</section>
+		<section name="Database">
+			All servers should be configured to use the same database. It can be on the server or on the one node 
+			of the cluster. 
+			<ul>
+				<li>Add users who can connect to the database remotely</li>
+				<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt>
+					set correct server address, login and password. Also add the following section:
+					<div class="xmlcode">&lt;property name="openjpa.RemoteCommitProvider" value="tcp(Addresses=10.1.1.1;10.1.1.2)" /&gt;</div>
+					Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster.
+				</li>
+			</ul>
+		</section>
+		<section name="File systems">
+			If files and recordings using the same physical folders the files and recordings will be available for 
+			each node. You can do this using Samba or NFS, for example. For using NFS do the following:
+			<ul>
+				<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:
+					<div class="xmlcode">
+						/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)<br/>
+						/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
+					</div>
+					Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with 
+					folders.
+				</li>
+				<li>
+					Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:
+					<div class="xmlcode">
+						10.1.1.1:/opt/red5/webapps/openmeetings/upload/<br/>
+						/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr<br/>
+						10.1.1.1:/opt/red5/webapps/openmeetings/streams/<br/>
+						/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr
+					</div>
+					Here 10.1.1.1 – data server ip. And run the command:
+					<div class="xmlcode">
+						mount -a
+					</div>
+				</li>
+			</ul> 
+		</section>
+		<section name="OM nodes configuration">
+			In the file <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt>:
+			<ul>
+				<li>
+					For each node uncomment line:
+					<div class="xmlcode">
+						&lt;!-- Need to be uncommented and set to the real ID if in cluster mode--&gt;<br/>
+						&lt;property name="serverId" value="1" /&gt;
+					</div>
+					and input the unique value for each node.
+				</li>
+				<li> 
+					Replace <tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based session cache by default --&gt;</tt><br/>
+					with <tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt> 
+					(Currently commented out with following comment: <tt>"The following section should be used in clustering mode"</tt>)
+				</li>
+			</ul>
+		</section>
+		<section name="Configuring cluster in Administration">
+			Run red5 on each node. Login to the system as admin.
+			<ul>
+				<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>
+				<li>
+					Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:
+					<div class="xmlcode">
+						Server Name = node name;<br/>
+						Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;<br/>
+						Server Address = node ip;<br/>
+						HTTP Port = 5080 - port for http part of Openmeetings;<br/>
+						User (SOAP Access) = login of Webservice user from the previous step;<br/>
+						Password = password of Webservise user;<br/>
+						Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;<br/>
+						Protocol = http.
+					</div>
+				</li> 
+			</ul>
+			<img src="images/cluster1.png" alt="" width="650" height="461" />
+		</section>
+		<section name="Ensure everything works as expected">
+			<ul>
+				<li>Set up the cluster and loggin with two users, go to the same room (also check before room 
+				entering that the status page with the room list shows the correct number of participants before 
+				entering the room). You should login to the same server initially, the server will redirect you 
+				for the conference room to the appropriate server automatically. Both users should be in the same room.
+				</li>
+				<li>Do the same with only two users but go to _different_ rooms. The calculation should send 
+				both users to different servers, cause based on the calculation two different rooms on a cluster 
+				with two nodes should go exactly one room for each node. You can now loggin really to node1 
+				and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt>
+				and check in the column "servers" where they are located. They should be on different server.
+				</li>
+			</ul>
+			<img src="images/cluster2.png" alt="" width="650" height="369" />
+		</section>
+	</body>
+</document>
\ No newline at end of file
diff --git a/xdocs/CommandLineAdmin.xml b/xdocs/CommandLineAdmin.xml
new file mode 100644
index 0000000..f6a46e1
--- /dev/null
+++ b/xdocs/CommandLineAdmin.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Command line admin</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="Usage">
+			<p>To avoid intensive traffic utilization and save your time you can
+				use command line admin to achieve following tasks:</p>
+			<ul>
+				<li>Install using defaults</li>
+				<li>Install from backup</li>
+				<li>Backup</li>
+				<li>Cleanup</li>
+			</ul>
+			<p>Some example commands:</p>
+			<p>MySQL (requires to place the MySQL JDBC driver into webapps/openmeetings/WEB-INF/lib before running the command):</p>
+			<div>
+				<div class="xmlcode">
+./admin.sh -i -v -tz Europe/Berlin -email your.email@gmail.com -group webbase -user admin --smtp-server localhost --db-type mysql --db-name openmeetings_db --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --db-user root --db-host localhost --email-auth-pass 123qweasd<br/>
+				</div>
+			</div>
+			<p>Derby (Not recommended for production environment):</p>
+			<div>
+				<div class="xmlcode">
+./admin.sh -i -v -tz Europe/Berlin -email seba.wagner@gmail.com -group webbase -user admin --smtp-server localhost --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --email-auth-pass 123qweasd<br/>
+				</div>
+			</div>
+		</section>
+		<section name="Command reference">	
+			<div>
+				<div class="xmlcode">
+ -v,--verbose                        verbose error messages<br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -h,--help                           prints this message<br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -b,--backup                         Backups OM<br/>
+<span style="margin-left: 50px;">-file &lt;arg&gt;                       (optional) file used for backup/restore/install</span><br/>
+<span style="margin-left: 100px;">--exclude-files                (optional) should backup exclude files [default: include]</span><br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -r,--restore                        Restores OM<br/>
+<span style="margin-left: 50px;">-file &lt;arg&gt;                       file used for backup/restore/install</span><br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -l,--languages                      Reimport All language files into DB<br/>
+<span style="margin-left: 50px;">-lang,--language &lt;arg&gt;            (optional) Single language to be imported (id or name)</span><br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -i,--install                        Fill DB table, and make OM usable<br/>
+<span style="margin-left: 50px;">-user &lt;arg&gt;                       Login name of the default user, minimum 4 characters (mutually exclusive with 'file')</span><br/>
+<span style="margin-left: 50px;">-group &lt;arg&gt;                      The name of the default user group (mutually exclusive with 'file')</span><br/>
+<span style="margin-left: 50px;">-email &lt;arg&gt;                      Email of the default user (mutually exclusive with 'file')</span><br/>
+<span style="margin-left: 50px;">-tz &lt;arg&gt;                         Default server time zone, and time zone for the selected user (mutually exclusive with 'file') file used for backup/restore/install</span><br/>
+<span style="margin-left: 100px;">--email-auth-pass &lt;arg&gt;        (optional) Email auth password (anonymous connection will be used if not set)</span><br/>
+<span style="margin-left: 100px;">--db-host &lt;arg&gt;                (optional) DNS name or IP address of database</span><br/>
+<span style="margin-left: 100px;">--drop                         (optional) Drop database before installation</span><br/>
+<span style="margin-left: 100px;">--db-user &lt;arg&gt;                (optional) User with write access to the DB specified</span><br/>
+<span style="margin-left: 100px;">--system-email-address &lt;arg&gt;   (optional) System e-mail address [default: noreply@openmeetings.apache.org]</span><br/>
+<span style="margin-left: 100px;">--password &lt;arg&gt;               (optional) Password of the default user, minimum 4 characters (will be prompted if not set)</span><br/>
+<span style="margin-left: 100px;">--email-use-tls                (optional) Is secure e-mail connection [default: no]</span><br/>
+<span style="margin-left: 100px;">--email-auth-user &lt;arg&gt;        (optional) Email auth username (anonymous connection will be used if not set)</span><br/>
+<span style="margin-left: 100px;">--db-port &lt;arg&gt;                (optional) Database port</span><br/>
+<span style="margin-left: 100px;">--smtp-port &lt;arg&gt;              (optional) SMTP server for outgoing e-mails [default: 25]</span><br/>
+<span style="margin-left: 100px;">--db-name &lt;arg&gt;                (optional) The name of Openmeetings database</span><br/>
+<span style="margin-left: 100px;">--disable-frontend-register    (optional) Do not allow front end register [allowed by default]</span><br/>
+<span style="margin-left: 100px;">--db-type &lt;arg&gt;                (optional) The type of the DB to be used</span><br/>
+<span style="margin-left: 100px;">--skip-default-rooms           (optional) Do not create default rooms [created by default]</span><br/>
+<span style="margin-left: 100px;">--force                        (optional) Install without checking the existence of old data in the database.</span><br/>
+<span style="margin-left: 100px;">--smtp-server &lt;arg&gt;            (optional) SMTP server for outgoing e-mails [default: localhost]</span><br/>
+<span style="margin-left: 100px;">--db-pass &lt;arg&gt;                (optional) Password of the user with write access to the DB specified</span><br/>
+--------------------------------------------------------------------------------------------------<br/>
+ -f,--files                          File operations - statictics/cleanup<br/>
+<span style="margin-left: 100px;">--cleanup                      (optional) Should intermediate files be clean up</span><br/>
+--------------------------------------------------------------------------------------------------<br/>
+				</div>
+			</div>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/ConferenceRoomLayoutOptions.xml b/xdocs/ConferenceRoomLayoutOptions.xml
new file mode 100644
index 0000000..8a7aae5
--- /dev/null
+++ b/xdocs/ConferenceRoomLayoutOptions.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+    <properties>
+        <title>Layout options for a conference room in OpenMeetings</title>
+        <author email="sebawagner@apache.org">
+            OpenMeetings Team
+        </author>
+    </properties>
+
+    <body>
+
+        <section name="Layout options for conference rooms">
+
+            <p>Each room has a number of attributes to generate different layouts.
+            You can change those values individually for each room in Administration &gt; Rooms
+            </p>
+            <p></p>
+            <table>
+                <tr>
+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> key </th>
+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default </th>
+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> meaning </th>
+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> availabe since OpenMeetings version </th>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideTopBar </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the top bar with the menus and exit button </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideChat </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the chat tab and use space for whiteboard </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActivitiesAndActions </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the activities window with the notofications aber user activities</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideFilesExplorer </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the file explorer</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActionsMenu </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the menu with the actions</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideScreenSharing </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the button to start screensharing/recording</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideWhiteboard </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the whiteboard, if this option is true, the videos will be in the area of the whiteboard</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+                <tr>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> showMicrophoneStatus </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Show the current status of the microphone (off/on) on the bottom of each video view</td>
+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+                </tr>
+            </table>
+
+        </section>
+        
+    </body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/ConfluencePlugin.xml b/xdocs/ConfluencePlugin.xml
new file mode 100644
index 0000000..44608d0
--- /dev/null
+++ b/xdocs/ConfluencePlugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Confluence Plugin</title>
+		<author email="eschwert@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Confluence Plugin for OpenMeetings">
+			<p>				
+				Current Development Snapshots for testing can be downloaded from:
+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/confluence-plugin/target/openmeetingsconfluence-1.0-SNAPSHOT.jar">here</a>
+				.
+			</p>			
+		</section>
+		
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Confluence: </li>
+				<li>
+					<ol>
+						<li>Integrated with Confluence content </li>										
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+		</section>	
+		
+		<section name="Demo video">			
+			<p>The demo video of Confluence plugin show you the plugin in action </p>              
+		      <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage"/>
+			      <param name="allowFullScreen" value="true"/>
+			      <param name="allowScriptAccess" value="always"/>
+			      <embed src="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>
+		      </object> 
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/CustomCryptMechanism.xml b/xdocs/CustomCryptMechanism.xml
new file mode 100644
index 0000000..d4967b3
--- /dev/null
+++ b/xdocs/CustomCryptMechanism.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Howto create a Custom Crypt styles</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>
+				You can use custom Crypt-Types, but you should decide during
+				installation which Type of encryption you want to use. By default
+				two type are available:
+			</p>
+
+			<ul>
+				<li>org.xmlcrm.utils.crypt.MD5Implementation - this uses common MD5
+					Crypt like PHP does, this is the default one (results in something
+					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>
+				<li>org.xmlcrm.utils.crypt.MD5CryptImplementation - does use
+					BSD-Style of encryption using a salt (results in something like:
+					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>
+			</ul>
+			<p>
+				You can edit the config-key during Installation or later in the
+				Administration Panel. But if you change it using the
+				Administration-Panel previous passwords might be not working anymore
+				as they are encrypted with another algorithm.
+			</p>
+		</section>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>
+				To add your own crypt style you need to write a class which
+				implements the interface: org.xmlcrm.utils.cryptCryptString
+				<br />
+				and extends the Adapter: org.xmlcrm.utils.CryptStringAdapter
+				<br />
+				Example of an Implementation:
+			</p>
+			<div class="xmlcode">
+				package org.xmlcrm.utils.crypt;
+				
+				import java.security.NoSuchAlgorithmException;
+				
+				public class MD5Implementation extends CryptStringAdapter implements CryptString {
+				
+				        @Override
+				        public String createPassPhrase(String userGivenPass) {
+				                String passPhrase = null;
+				                try {
+				                        passPhrase = MD5.do_checksum(userGivenPass);
+				                } catch (NoSuchAlgorithmException e) {
+				                        e.printStackTrace();
+				                }
+				                return passPhrase;
+				        }
+				
+				        @Override
+				        public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+				                return (passwdFromDb.equals(createPassPhrase(passGiven)));
+				        }
+				        
+				}
+			</div>
+			<p>To add your own Encryption-Class you need to add your class to the
+				OpenMeetings-Webapp (make it available to the webapp-classpath) and
+				use your custom-class-name instead of
+				org.xmlcrm.utils.crypt.MD5Implementation during the Installation or
+				at runtime by editing the config-key crypt_ClassName</p>
+		</section>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>credits goto Mika for sharing his Implementation of the
+				MD5Crypt-Style</p>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/CustomRoomTypeHowTo.xml b/xdocs/CustomRoomTypeHowTo.xml
new file mode 100644
index 0000000..d86ba12
--- /dev/null
+++ b/xdocs/CustomRoomTypeHowTo.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Howto create a custom room type in OpenMeetings</title>
+		<author email="sebawagner@apache.org">
+            OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Why creating a custom room type in OpenMeetings">
+
+			<p>If you want to create your own styled room the best thing to do in 
+            order to be "update-save" is to create your own custom room type. There is an empty configuration 
+				by default shipped with every release of OpenMeetings, the room type "custom" (ID = 5).<br/>
+				<br/>
+            You can use that and extend it, or you can add more room types to fit your use case.
+			</p>
+			<p></p>
+		</section>
+		
+		<section name="Create your own room type class (User Interface)">
+			
+			<p>Lets start by creating your custom room type class.
+				<br/>
+					You could for example duplicate an existing room class, from <br/>
+					<tt>src/modules/conference/flexibleConferenceRoom</tt> folder, for example the 
+			flexibleConferenceRoom.lzx: Generate a duplicate, change the name, for example to 
+			myCustomConferenceRoom.lzx and edit the class name inside the file name="flexibleConferenceRoom" to
+			name="myCustomConferenceRoom". Also don't miss to add an entry to library.lzx so that the compiler 
+			will find your new class.
+			</p>
+			
+		</section>
+        
+		<section name="Create nesseccary entries in configuration tables">
+        	
+			<p>You first need to create a number of configuration files </p>
+			<ul>
+				<li>To have your roomtype available everytime you install OpenMeetings you need to add 
+					it to the default rooms: <tt>ImportInitvalues.java Method: loadDefaultRooms()</tt>. Add your entry here. 
+				You can choose any random name for the room. The ID is the important trigger for the room type 
+				to identify later. You need to run the installer so that your new room type is in the database.</li>
+				
+				<li>Add your room type in the default module configuration: 
+					<tt>src/base/moduleConfiguration.lzx</tt>, 
+				here you need to add a default class name for your room type </li>
+				
+				<li>Add your room type in the real configuration: public/config.xml, add a new entry.
+					<br/>
+					You should fix also the file <tt>public/config.xsd</tt> that is the Schema file for the public/config.xml.
+				</li>
+        		
+				<li>Add a parser entry to modify the room type mapping: 
+					<tt>base/mainMethods.lzx method: myinit</tt>. You 
+        		can see some example parsing, you should add your one similar to the existing room types.</li>
+        		
+			</ul>
+			
+		</section>
+		
+		<section name="Link your room type config with your room type class ">
+			
+			<p>Now you need to make sure that everytime the conference room is created 
+			your new class "myCustomConferenceRoom" is used. There are 3 places you need to add your mapping.</p>
+			
+			<ul>
+				<li>In the global mapping: 
+					<tt>base/mainMethods.lzx method name="setRoomValues"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/conference/conference/roomListItem.lzx method name="initRoom"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/invitation/autoloaderBarOnly.lzx netRemoteCallHib name="setUsernameAndSession"</tt> 
+				</li>
+			</ul>
+			
+			<p>Thats it. You can add/edit/delete your room with the new room type in the Administration > Rooms interface of 
+			OpenMeetings like any other room.</p>
+			<p>If you need to have this room type available as option in the Calendar UI, you need to add it to the combobox manually.</p>
+			
+		</section>
+		
+		
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/Dashboard.xml b/xdocs/Dashboard.xml
new file mode 100644
index 0000000..a0e7c61
--- /dev/null
+++ b/xdocs/Dashboard.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Changing Dashboard</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing Dashboard">
+
+			<p>You can configure the tabs that are visible by default at bottom
+				of the dashboard. To edit the settings, login as admin and goto
+				Administration &gt; Configuration </p>
+			<p></p>
+			<table>
+				<tr>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-key </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Values </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Meaning </th>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default.dashboard.tab </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0,1,2 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Which tab should be shown by default, counting
+						starts with 0
+					</td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.myrooms </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the MyRooms tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.chat </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the Chat tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.rssfeed </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the RSS-Feed tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rss_feed1 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http-URL </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> ATOM-Feed URL for the dashboard RSS Tab </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rss_feed2 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http-URL </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> ATOM-Feed URL for the dashboard RSS Tab </td>
+				</tr>
+			</table>
+			<p></p>
+			<p>Changes are immediately online, no need to restart anything. </p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/DrupalPlugin.xml b/xdocs/DrupalPlugin.xml
new file mode 100644
index 0000000..db8d737
--- /dev/null
+++ b/xdocs/DrupalPlugin.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Drupal Plugin</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Drupal Plugin for OpenMeetings">
+			<p>
+				Plugin for Drupal currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 
+				<br/>
+				A demo version+video of the Drupal plugin is available at
+				<a href="http://drupal.openmeetings.de/" target="_BLANK" rel="nofollow">drupal.openmeetings.de</a>.
+			</p>
+		</section>
+		
+		<section name="Installation of the Drupal Plugin for Apache OpenMeetings">
+			<p>
+				You simply download the ZIP or TAR package and unzip it to Drupal "mod" directory.
+				<br/>
+				For a detailed description on how to install plugins in Drupal please review their 
+				<a href="http://drupal.org/documentation/install/modules-themes" target="_BLANK" rel="nofollow">handbook</a>.
+				<br />
+				Then you visit the module interface of Drupal, where you will find the new module.
+				You should switch it to "enabled" to get the "Configure" and "Permissions" buttons.
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_module_installation.png">
+				<img src="images/drupal_module_installation.png" alt="" width="600"
+					height="150" />
+			</a>
+			<p>
+				In the configuration you enter the auth data to access your Apache OpenMeetings server:
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_module_configuration.png">
+				<img src="images/drupal_module_configuration.png" alt="" width="600"
+					height="340" />
+			</a>
+		</section>
+		
+		<section name="Adding a new conference room to Drupal">
+			
+			<p>
+				After installation of the plugin you can go to the front page in Drupal and add a new content item 
+				"OpenMeetings Rooms" => "Add New Room". You may find following configuration values for each 
+				conference room:
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_room_configuration.png">
+				<img src="images/drupal_room_configuration.png" alt="" width="600"
+					height="400" />
+			</a>
+		</section>
+		
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/EditTemplates.xml b/xdocs/EditTemplates.xml
new file mode 100644
index 0000000..54919d8
--- /dev/null
+++ b/xdocs/EditTemplates.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Edit Templates</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing Labels and text strings">
+			<p>
+				All language string should be localized and stored in the language
+				section. You have a full featured language editor with every
+				installation of OpenMeetings, check out the
+				<a href="LanguageEditor.html">LanguageEditor</a>
+				.
+			</p>
+			<p>
+				To lookup the labelids in the GUI you can simply run OpenMeetings
+				client with the debug enabled. That way every text-string has the
+				labelid in brackets additionally in the textfield. To start the
+				client in debug mode just add the param ?swf=maindebug.swf8.swf to
+				the URL. Example:
+				<a href="http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf"
+					rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf</a>
+			</p>
+		</section>
+
+		<section name="Changing layout, adding footers in emails">
+
+			<p>If you would like to change the standard email layout or add for
+				example some footer in every email you have to change the email
+				templates.
+			</p>
+			<p>To do that: Stop the Red5/OpenMeetings-Service Goto:
+				$Red5_HOME/webapps/openmeetings/WEB-INF/lib/openmeetings-templates.jar
+				Unzip: openmeetings-templates.jar (this is a usual ZIP file, you can
+				rename it to openmeetings-templates.zip unzip, edit the files, zip
+				it again and rename it to openmeetings-templates.jar)
+			</p>
+			<p>
+				In openmeetings-templates.jar there are all template files. They
+				have the file extension .vm (VM stands for velocity-template). After
+				you have done your changes you need to (re)start the
+				Red5/OpenMeetings
+				-Service so that changes are online.
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/FFMPEGVersionSwitch.xml b/xdocs/FFMPEGVersionSwitch.xml
new file mode 100644
index 0000000..b6d9006
--- /dev/null
+++ b/xdocs/FFMPEGVersionSwitch.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Howto switch between different versions of FFMPEG </title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Default Configuration">
+
+			<p>FFMPEG has a change in its API (possibly since GIT revision
+				88bfe4518)
+			</p>
+			<p>Since Version 1.9.x of OpenMeetings: By default OpenMeetings
+				expects you to have a new version of FFMPEG on your OpenMeetings
+				server installed and it will use the new API style to communicate
+				with FFMPEG.
+			</p>
+
+		</section>
+
+		<section name="Switching to old FFMPEG API">
+		
+			<p>
+				If you want to switch to the old style you can change that using the
+				config key:
+				<tt>use.old.style.ffmpeg.map.option</tt>
+			</p>
+			<p>
+				Set this value to
+				<tt>1</tt>
+				to have the old params in the API call to FFMPEG.
+			</p>
+			<p>References:  </p>
+			<ul>
+				<li>
+					<a
+						href="http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html"
+						rel="nofollow">http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html
+					</a>
+				</li>
+			</ul>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/GeneralConfiguration.xml b/xdocs/GeneralConfiguration.xml
new file mode 100644
index 0000000..2ff48fa
--- /dev/null
+++ b/xdocs/GeneralConfiguration.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>List of general configuration options</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="List of general configuration options">
+			<style><!--
+				.configCell {
+					border: 1px solid rgb(204, 204, 204);
+					padding: 5px;
+				}
+			--></style>
+			<p>In Administration &gt; Configuration there are a number of
+				configuration values.
+			</p>
+			<p></p>
+			<table>
+				<tr>
+					<th class="configCell"> key </th>
+					<th class="configCell"> default </th>
+					<th class="configCell"> meaning </th>
+					<th class="configCell"> availabe since OpenMeetings version </th>
+				</tr>
+				<tr>
+					<td class="configCell"> user.login.minimum.length </td>
+					<td class="configCell"> 4 </td>
+					<td class="configCell"> minimum chars required for the login to create a user </td>
+					<td class="configCell"> 1.9.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> user.pass.minimum.length </td>
+					<td class="configCell"> 4 </td>
+					<td class="configCell"> minimum chars required for the password to create a
+						user
+					</td>
+					<td class="configCell"> 1.9.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> number.minutes.reminder.send </td>
+					<td class="configCell"> 15 </td>
+					<td class="configCell"> minutes the one-time reminder in the calender is
+						send, set to 0 to disable reminder
+					</td>
+					<td class="configCell"> 1.9.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> max_upload_size </td>
+					<td class="configCell"> 1073741824 </td>
+					<td class="configCell"> Maximum size of upload file (bytes) 1073741824 bytes
+						= 1GB
+					</td>
+					<td class="configCell"> 1.8.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> show.whiteboard.draw.status </td>
+					<td class="configCell"> 0 </td>
+					<td class="configCell"> Display name of the user who draw the current object
+						(User Name auto-disapper after 3 seconds.
+					</td>
+					<td class="configCell"> 1.8.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> use.old.style.ffmpeg.map.option </td>
+					<td class="configCell"> 0 </td>
+					<td class="configCell"> If the system should "." (old ffmpeg) instead of ":"
+						(new ffmpeg) for the -map option in FFMPEG
+					</td>
+					<td class="configCell"> 1.9.x </td>
+
+				</tr>
+				<tr>
+					<td class="configCell"> inviter.email.as.replyto </td>
+					<td class="configCell"> 1 </td>
+					<td class="configCell"> Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)	</td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> office.path </td>
+					<td class="configCell"> </td>
+					<td class="configCell"> The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically	</td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> default.landing.zone </td>
+					<td class="configCell"> user/dashboard </td>
+					<td class="configCell"> Area to be shown to the user after login. Possible values are: user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection
+						, admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2 </td>
+					<td class="configCell"> 2.1.x, <b> values are changed in 3.0.0</b> </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sms.provider </td>
+					<td class="configCell">  </td>
+					<td class="configCell"> SMS service provider (bulksms.http.1) </td>
+					<td class="configCell"> 2.1.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sms.Username </td>
+					<td class="configCell">  </td>
+					<td class="configCell"> Login for SMS service provider </td>
+					<td class="configCell"> 2.1.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sms.Userpass </td>
+					<td class="configCell">  </td>
+					<td class="configCell"> Password for SMS service provider </td>
+					<td class="configCell"> 2.1.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sms.subject </td>
+					<td class="configCell">  </td>
+					<td class="configCell"> Subject of SMS reminder message </td>
+					<td class="configCell"> 2.1.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> swftools_zoom </td>
+					<td class="configCell"> 100 </td>
+					<td class="configCell"> DPI for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 DPI) </td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> swftools_jpegquality </td>
+					<td class="configCell"> 85 </td>
+					<td class="configCell"> Compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85) </td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sendEmailAtRegister </td>
+					<td class="configCell"> 0 </td>
+					<td class="configCell"> User get a EMail with their Account data. Values: 0(No) or 1(Yes) </td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td class="configCell"> sendEmailWithVerficationCode </td>
+					<td class="configCell"> 0 </td>
+					<td class="configCell"> User must activate their account by clicking on the 
+								activation-link in the registering Email. Values: 0(No) or 1(Yes) 
+								It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while 
+								sendEmailAtRegister is 0(No) cause you need
+								to send a EMail. </td>
+					<td class="configCell"> 2.0.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> redirect.url.for.external.users </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;">  </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> allow_frontend_register </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> (configurable during install) </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Is user register available on login screen </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1.8.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> allow.soap.register </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Is user register available via SOAP/REST </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 3.0.x </td>
+				</tr>
+			</table>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/GetVersionInfo.xml b/xdocs/GetVersionInfo.xml
new file mode 100644
index 0000000..e799233
--- /dev/null
+++ b/xdocs/GetVersionInfo.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>How to check which Openmeetings version running</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="How to check which Openmeetings version running (3.0.0 - )">
+			<p>Use Top Menu -&gt; About</p>
+		</section>
+		<section name="How to check which Openmeetings version running (2.1.1 - )">
+			<p>The version is printed into openmeetings.log file</p>
+			<p>
+				Run openmeetings<br/>
+				Open OM_HOME/log/openmeetings.log
+			</p>
+			<p>You get something like this: </p>
+			<div class="xmlcode"><pre>
+	##################################################
+	#               Openmeetings is up               #
+	#       2.1.1-RELEASE 1490720 7-June-2013        #
+	#                and ready to use                #
+	##################################################
+			</pre></div>
+		</section>
+		<section name="How to check which Openmeetings version running (1.8.0 - 2.1.0)">
+			<p>If you need to know what version of OpenMeetings you are running,
+				you can check that by the file: openmeetings-*.jar
+			</p>
+			<p>
+				Unzip: /webapps/openmeetings/WEB-INF/lib/openmeetings-*.jar (jars are
+				zips)
+				<br />
+				<br />
+				In the resulting unzipped folder open the file to read:
+				/META-INF/MANIFEST.MF
+			</p>
+			<p>You get something like this: </p>
+			<div class="xmlcode">
+				Manifest-Version: 1.0
+				<br />
+				Ant-Version: Apache Ant 1.8.2
+				<br />
+				Created-By: 1.6.0_26-b03-383-11A511 (Apple Inc.)
+				<br />
+				Built-By: OpenMeetings - http://openmeetings.googlecode.com
+				<br />
+				Built-On: 23-October-2011
+				<br />
+				Svn-Revision: 4368
+				<br />
+			</div>
+			<p>This version info is available since version 1.8.0. If you have an
+				older version as version 1.8.0 then you might simply check the
+				language files and the labelid in there, the numbers of labels are
+				almost always unique in the versions. </p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/HotKeys.xml b/xdocs/HotKeys.xml
new file mode 100644
index 0000000..db56499
--- /dev/null
+++ b/xdocs/HotKeys.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Hot Keys</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="Keys table">
+			<table>
+				<tr>
+					<th>Key</th>
+					<th>Functionality</th>
+					<th>Configurable</th>
+					<th>Config Key</th>
+				</tr>
+				<tr>
+					<td>F12 (code 123)</td>
+					<td>A hot key code for the 'give exclusive audio' functionality.</td>
+					<td>Yes</td>
+					<td>exclusive.audio.keycode</td>
+				</tr>
+				<tr>
+					<td>F8 (code 119)</td>
+					<td>If 1 or 2 video windows are present in the room they will be
+						"rearranged" to take all the place available</td>
+					<td>No</td>
+					<td>
+					</td>
+				</tr>
+				<tr>
+					<td>F7 (code 118)</td>
+					<td>A hot key code for the 'mute/unmute audio' functionality.</td>
+					<td>Yes</td>
+					<td>mute.keycode</td>
+				</tr>
+			</table>
+		</section>
+	</body>
+</document>
\ No newline at end of file
diff --git a/xdocs/IBMDB2Config.xml b/xdocs/IBMDB2Config.xml
new file mode 100644
index 0000000..2324502
--- /dev/null
+++ b/xdocs/IBMDB2Config.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>IBM DB2 Configuration</title>
+		<author email="sebawagner@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="IBM DB2 Configuration">
+
+			<subsection name="Before you start">
+				<i>Tested with IBM DB2 Express-C 9.7.x</i>
+				<ul>
+					<li>
+						Get the IBM Data Server Driver for JDBC and SQLJ from IBM website:
+						<a
+							href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs
+						</a>
+					</li>
+					<li>Copy JDBC driver db2jcc4.jar to
+						webapps/openmeetings/WEB-INF/lib/
+					</li>
+					<li>
+						Create database for OpenMeetings using a pagesize bigger or equal
+						8K, sample query:
+						<br />
+						<div class="xmlcode">
+							CREATE DATABASE openmeet AUTOMATIC STORAGE YES ON 'C:' DBPATH ON 'C:'
+							USING CODESET UTF-8 TERRITORY DE COLLATE USING System PAGESIZE 16
+							K
+						</div>
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again </li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml connectionURL, username and
+						password with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="DB2 Sample Configuration">
+				<p>
+					There is a sample configuration for IBM DB2 that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/Internationalisation.xml b/xdocs/Internationalisation.xml
new file mode 100644
index 0000000..c4b5f33
--- /dev/null
+++ b/xdocs/Internationalisation.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Upgrade</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Where to find language files">
+
+			<p>You can find all current language files here: </p>
+			<p>
+				<a
+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/"
+					rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/
+				</a>
+			</p>
+			<p>Just take one file and translate it to your language. </p>
+		</section>
+
+		<section name="Import and export of Language Files">
+
+			<ul>
+				<li>
+					Use the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					for translation
+				</li>
+				<li>
+					with the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					you can import and export Language Files
+				</li>
+			</ul>
+		</section>
+
+		<section name="How to add it as installation option">
+			<p>
+				Once you have finished the translation you can add a new node to:
+				<a
+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml"
+					rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml
+				</a>
+			</p>
+			<p>the name of the language should match the name of the file. Once
+				this is done the Language file will automatically be imported during
+				installation and will be an option at login.
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/JUnitTesting.xml b/xdocs/JUnitTesting.xml
new file mode 100644
index 0000000..02468c2
--- /dev/null
+++ b/xdocs/JUnitTesting.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>JUnit Testing</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+
+			<p>
+				Automatic tests are the significant part of development process.
+				Below is the instruction of how to run Openmeetings
+				<a href="http://junit.org" rel="nofollow">JUnit</a>
+				tests.
+			</p>
+		</section>
+
+		<section name="Details">
+
+
+			<ol>
+				<li>running tests using command line: </li>
+				<li>
+					<ul>
+						<li>all tests:
+							<div class="xmlcode">
+								ant test
+							</div>
+						</li>
+						<li>subset of tests by mask:
+							<div class="xmlcode">
+								ant -Dtestcases=TestError* test
+							</div>
+						</li>
+					</ul>
+				</li>
+				<li>running tests from Eclipse IDE: </li>
+				<li>
+					<ul>
+						<li>
+							<div class="xmlcode">
+								ant -Ddb=&lt;your_DB&gt; prepare-eclipse
+							</div>
+						</li>
+						<li>Start Eclipse </li>
+						<li>Load workspace with Openmeetings project (or refresh existing
+							project)
+						</li>
+						<li>Select "Debug Configurations..." </li>
+					</ul>
+				</li>
+			</ol>
+			<p>
+				<a class="fancybox-buttons" href="images/DebugConfigurations.png">
+					<img src="images/DebugConfigurations.png" alt="" width="367"
+						height="262" />
+				</a>
+			</p>
+			<ul>
+				<li>Create New Junit configuration, give it a name and select test
+					class
+				</li>
+			</ul>
+			<p>
+				<a class="fancybox-buttons" href="images/NewConfiguration.png">
+					<img src="images/NewConfiguration.png" alt="" width="420"
+						height="206" />
+				</a>
+			</p>
+			<ul>
+				<li>Select Arguments tab </li>
+				<li>Add the following code to the VM section
+					<div class="xmlcode">
+						-javaagent:${workspace_loc:Openmeetings}/build/lib/om/openjpa-bundle-2.2.2.jar
+						-Dom.home=${workspace_loc:Openmeetings}/src/main/webapp
+						-Dbackups.dir=${workspace_loc:Openmeetings}/build/lib/junit/backups
+					</div>
+				</li>
+				<li>To avoid temporary files being created in OM root, modify
+					"Working Directory" as follows
+					<div class="xmlcode">${workspace_loc:Openmeetings}/build/junit</div>
+				</li>
+			</ul>
+			<p>
+				<a class="fancybox-buttons" href="images/Arguments.png">
+					<img src="images/Arguments.png" alt="" width="435" height="410" />
+				</a>
+			</p>
+			<ul>
+				<li>Select Debug </li>
+
+			</ul>
+			<ul>
+				<li>Note: You need a file called "persistence.xml" in src/META-INF
+					if you run the JUnit test from inside Eclipse. Normally "ant
+					prepare-eclipse" should do that for you. </li>
+
+			</ul>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/JVMPerformanceTuning.xml b/xdocs/JVMPerformanceTuning.xml
new file mode 100644
index 0000000..b717e14
--- /dev/null
+++ b/xdocs/JVMPerformanceTuning.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Performance Tuning</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Performance Tuning">
+
+			<p>To use the optimum of performance from your server there is a
+				start-script for red5 available that does some basic settings in the
+				JVM. It is called red5-highperf.sh. It is recommended to use that
+				script for production and high-load scenarios.
+			</p>
+			<div class="xmlcode">
+				#!/bin/bash
+				<br />
+				<br />
+				if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
+				<br />
+				<br />
+				# Previous option set
+				<br />
+				export JAVA_OPTS="-Xrs -Xms512M -Xmx1024M -Xss128K -XX:NewSize=256m
+				-XX:SurvivorRatio=16 -XX:MinHeapFreeRatio=20
+				-XX:+ExplicitGCInvokesConcurrent -Djava.net.preferIPv4Stack=true
+				-Xverify:none"
+				<br />
+				<br />
+				# start Red5
+				<br />
+				echo "Setting Hi Performance Options"
+				<br />
+				exec $RED5_HOME/red5.sh >> $RED5_HOME/log/jvm.stdout 2>&amp;1 &amp;
+				<br />
+			</div>
+
+			<p>You have to exclude the "-XX:+UseConcMarkSweepGC" param from the
+				default red5-highperf.sh to make it functional! However if you are a
+				performance expert you might also play with the values to find
+				perfect matches for your use-case.
+			</p>
+			<p>
+				For a complete overview about possible arguments and their meaning
+				see:
+				<a
+					href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning"
+					rel="nofollow">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/JiraPlugin.xml b/xdocs/JiraPlugin.xml
new file mode 100644
index 0000000..8901bcf
--- /dev/null
+++ b/xdocs/JiraPlugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Jira Plugin</title>
+		<author email="eschwert@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Jira Plugin for OpenMeetings">
+			<p>
+				Current Development Snapshots for testing can be downloaded from:
+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/jira-plugin/target/openmeetings-1.0-SNAPSHOT.jar">here</a>
+				.
+			</p>			
+		</section>
+		
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Jira: </li>
+				<li>
+					<ol>
+						<li>Integrated with Jira issues </li>										
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>			
+		</section>	
+		
+		<section name="Demo video">			
+			<p>The demo video of Jira plugin show you the plugin in action </p>              
+		      <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage"/>
+			      <param name="allowFullScreen" value="true"/>
+			      <param name="allowScriptAccess" value="always"/>
+			      <embed src="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>
+		      </object> 
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/JoomlaPlugin.xml b/xdocs/JoomlaPlugin.xml
new file mode 100644
index 0000000..c84c420
--- /dev/null
+++ b/xdocs/JoomlaPlugin.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Joomla Plugin</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Joomla">
+			<p>
+				Plugin for Joomla currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 
+			</p>			
+		</section>
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms from Joomla: </li>
+				<li>
+					<ol>
+						<li>Create rooms</li>										
+						<li>Enter the room</li>
+					</ol>
+				</li>
+				<li>Access recordings from Joomla: </li>
+				<li>
+					<ol>
+						<li>Download recordings</li>										
+					</ol>
+				</li>
+			</ul>
+		</section>
+		<section name="Demo video">			
+			<div>
+				<b>OpenMeetings Joomla Plugin Installation</b><br/>              
+				<object style="height: 360px; width: 640px">
+					<param name="movie" value="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage"/>
+					<param name="allowFullScreen" value="true"/>
+					<param name="allowScriptAccess" value="always"/>
+					<embed src="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>
+				</object> 
+			</div>
+			<br/>
+			<div>
+				<b>OpenMeetings Integration with Joomla</b><br/>              
+				<object style="height: 360px; width: 640px">
+					<param name="movie" value="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage"/>
+					<param name="allowFullScreen" value="true"/>
+					<param name="allowScriptAccess" value="always"/>
+					<embed src="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>
+				</object> 
+			</div>
+		</section>
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/LanguageEditor.xml b/xdocs/LanguageEditor.xml
new file mode 100644
index 0000000..1f100b4
--- /dev/null
+++ b/xdocs/LanguageEditor.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Language Editor</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Language Editor">
+
+			<p>Features:</p>
+			<ul>
+				<li>edit the labels of any language, changes will take effect as
+					soon as you re-login
+				</li>
+				<li>add new languages (for example to fit your co-operative design
+					and language of your company)
+				</li>
+				<li>export the language-files to an XML File (these language Files
+					can be used for your next installation or as contribution to the
+					project)
+				</li>
+				<li>
+					import of language files (
+					<i>you should restart the server if you face problems, as the
+						database cache might be invalid
+					</i>
+					)
+				</li>
+			</ul>
+			<p>Screen from the Administration Panel: </p>
+			<p>
+				<a class="fancybox-buttons" href="images/langeditor_screen_v2.png">
+					<img src="images/langeditor_screen_v2.png" alt="" width="475"
+						height="324" />
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/LdapAndADS.xml b/xdocs/LdapAndADS.xml
new file mode 100644
index 0000000..8c9d88a
--- /dev/null
+++ b/xdocs/LdapAndADS.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+		<section name="Ubuntu Installation">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get install slapd ldap-utils
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Modify file <tt>/etc/ldap/ldap.conf</tt> add highlighted attributes:
+				<blockquote>
+					<i>
+						#<br />
+						# LDAP Defaults<br />
+						#<br />
+						# See ldap.conf(5) for details<br />
+						# This file should be world readable but not world writable.<br />
+						<b>BASE    dc=unixmen,dc=com<br />
+						URI     ldap://192.168.1.200</b><br />
+						#SIZELIMIT      12<br />
+						#TIMELIMIT      15<br />
+						#DEREF          never<br />
+						# TLS certificates (needed for GnuTLS)<br />
+						TLS_CACERT      /etc/ssl/certs/ca-certificates.crt<br />
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Run the Configuration assistant: <tt>sudo dpkg-reconfigure slapd</tt>
+			</div>
+			<div>
+				Test LDAP server: <tt>ldapsearch -x</tt>
+			</div>
+			<div>
+				Add/Edit/Delete users: <tt>sudo apt-get install phpldapadmin</tt>
+			</div>
+			<div>
+				Detailed reference: <a href="http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/">http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/</a>
+			</div>
+		</section>
+		<section name="LDAP and Active Directory Integration">
+			<p> In: $RED5_HOME/webapps/openmeetings/conf<br/>
+				you will find sample configurations for LDAP and Active Directory. The
+				nature of those Directory Servers are that they are individual for
+				every organization, so you have to modify of course at least the
+				path to your user-base et cetera.<br/>
+				<br/>
+				To activate any of those configurations you have to login into
+				OpenMeetings, goto Administration > Ldap.
+			</p>
+			<a class="fancybox-buttons" href="images/ldap_screen.png">
+				<img src="images/ldap_screen.png" alt="" width="442" height="282" />
+			</a>
+			<p>
+				Import is that you configure LDAP_SEARCH_PATH so that it points to the node of your directory server that contains the users
+			</p>
+			<p>
+				If you have multiple search paths you can either try to define a search path that points to multiple nodes or define multiple ldap configurations.
+			</p>
+			<p>
+				Successful integration is also reported with Novell eDirectory
+			</p>
+			<p>
+				You can configure multiple domains or different user-paths in the Administration of OpenMeetings. 
+			</p>
+			<p>
+				<b>NOTE: </b>You should specify file name <i>RELATIVE</i> to <tt>$RED5_HOME/webapps/openmeetings/conf</tt>
+			</p>
+		</section>
+
+	</body>
+</document>
\ No newline at end of file
diff --git a/xdocs/MSSQLConfig.xml b/xdocs/MSSQLConfig.xml
new file mode 100644
index 0000000..27f11cc
--- /dev/null
+++ b/xdocs/MSSQLConfig.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document>
+
+	<properties>
+		<title>MSSQL Configuration</title>
+		<author email="solomax@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="MSSQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>You need Openmeetings 2.2 or later to use MSSQL integration</li>
+					<li>Make sure that you have set utf8 as collation for the openmeetings database
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MSSQL is listening on TCP/IP connections! and username/password 
+						authentication is enabled for it
+						<br />
+						To verify if MSSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						You need to download the JDBC driver from Microsoft
+						<a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774" target="_BLANK"
+							rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774</a>
+						Unarchive appropriate file from it (sqljdbc.jar or sqljdbc4.jar) and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="MSSQL Sample Configuration">
+				<p>
+					There is a sample configuration for MySQL that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/ManualTesting.xml b/xdocs/ManualTesting.xml
new file mode 100644
index 0000000..0ccad05
--- /dev/null
+++ b/xdocs/ManualTesting.xml
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Manual Testing</title>
+		<author email="iarkh@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+
+			<p>
+				Below is a test plan for the OpenMeetings 2.1 pre-release testing.
+			</p>
+		</section>
+
+		<section name="Details">
+
+			<ol>
+				<li>
+					<b>User GUI tests</b>
+					<ol>
+						<li>
+							Login/logout 
+							<ol>
+								<li>Password recovering </li>
+								<li>Self-registering </li>
+								<li>"Visit Apache OpenMeetings" link </li>
+								<li>Enter wrong login/password </li>
+								<li>Enter correct login/password </li>
+								<li>Exit the system by click the Exit button </li>
+							</ol>
+						</li>
+						<li>
+							Dashboard
+							<ol>
+								<li>Correct user info in the upper left corner </li>
+								<li>Links in the "Help and support" section </li>
+								<li>It should be possible to enter user’s room from the dashboard </li>
+								<li>Room details should be shown correctly in the "Rooms in this section…" part of the screen </li>
+							</ol>					
+						</li>
+						<li>
+							Global chat 
+							<ol>
+								<li>Send/receive message where at least 3 users in the system </li>
+								<li>Adding a contact to the contact list </li>
+								<li>Private message </li>
+								<li>Showing user profile </li>
+								<li>Inviting user to the conference room </li>
+								<li>Copy chat log </li>
+								<li>Delete chat log </li>
+								<li>Changing font style in the massage </li>
+								<li>Adding emotions to the message </li>
+							</ol>
+							Attention! Correct RTL support does not work in the current implementation 
+						</li>
+						<li>
+							Calendar view
+							<ol>
+								<li>Change view (weekly/daily/monthly) and moving between the dates </li>
+								<li>Adding/removing/moving by mouse an event </li>
+							</ol>
+						</li>
+						<li>
+							Calendar invitation window
+							<ol>
+								<li>Creating/updating/deleting an event </li>
+								<li>Inviting 3 internal and 3 external guests </li>
+								<li>Different reminder types: receiving e-mail invitation for internal and external guests </li>
+								<li>Password protected invitation </li>
+								<li>Inviting to the rooms of the different types </li>
+								<li>Choosing time zone for external guest </li>
+								<li>Correct user data in the invitations </li>
+								<li>SMS reminder for internal and external guests </li>
+								<li>E-mail reminder for internal and external guests </li>
+								<li>It should be possible to enter to the event via invitation link room at the particular time slot only </li>
+								<li>Enter the room via invitation window </li>
+							</ol>
+						</li>
+						<li>
+							My Profile: User profile should contain correct user info and allow to edit this 
+						</li>
+						<li>
+							Contacts and Messages
+							<ol>
+								<li>Add/remove a message </li> 
+								<li>Creating a new folder </li>
+								<li>Moving between the folders </li>
+								<li>Marking messages as read/unread </li>
+								<li>Message filters </li>
+								<li>Contact list </li>
+							</ol>
+						</li>
+						<li>
+							User settings
+							<ol>
+								<li>Possibility to change the user info </li>
+								<li>Changing time zone and language (should start to work after user re-login </li>
+								<li>Community settings or different users </li>
+								<li>Display settings</li> 
+							</ol>
+						</li>
+						<li>
+							Search users
+							<ol>
+								<li>Send a private message </li>
+								<li>Adding a contact </li>
+								<li>View contact details via user list </li>
+							</ol>
+						</li>
+						<li>
+							Room lists 
+							<ol>
+								<li>Public rooms, private rooms and my rooms should contain correct room lists </li>
+								<li>User list for the selected room </li>
+								<li>Room details for the selected room </li>
+							</ol>
+						</li>
+						<li>
+							Recordings
+							<ol> 
+								<li>The list should contain available recordings in public and private folders </li>
+								<li>Info panel should contain actual info about the recording </li>
+								<li>Downloading a recording is different formats (AVI/FLV) </li>
+								<li>Play the recording in OpenMeetings </li>
+								<li>Play downloaded recording by Windows player </li>
+								<li>Remove a recording from the folder </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – general issues (should be tested with at least 3 attendees)
+							<ol>
+								<li>Enter the room: different cases for the cam/micro, choosing of the cam resolution, test recording, allow/deny of video </li>
+								<li>User list should be shown correctly </li>
+								<li>Correct user credentials after  the room entering </li>
+								<li>Add moderator permissions to the user </li>
+								<li>Turn micro on/off in the user list </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window </li>
+								<li>Turn micro on/off in the user list to another user – possible by the moderator only </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window - possible by the moderator only </li>
+								<li>Allow/deny drawing on whiteboard – possible by the moderator only </li>
+								<li>Allow/deny screen sharing – possible by the moderator only </li>
+								<li>Allow/deny remote screen control – possible by the moderator only </li>
+								<li>Allow/deny exclusive audio – possible by the moderator only </li>
+								<li>Re-start devise settings via user list </li>
+								<li>Re-start devise settings via video window </li>
+								<li>Kick the user off by the moderator </li>
+								<li>Click F8 key to arrange videos </li>
+								<li>Activity and actions panel should contain correct info </li>
+								<li>Exit the room </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing: file uploading + documents
+							<ol>
+								<li>Upload a document with "Load directly to whiteboard" switch turned on </li>
+								<li>Upload a with "Load directly to whiteboard" switch turned on off </li>
+								<li>Upload a document with the localized file name and spaces in the name </li>
+								<li>Uploading a document into different folders: private files should be visible only their owner only </li>
+								<li>Removing a file from the room </li>
+								<li>Home and public drive size should change correctly </li>
+								<li>Adding a new folder </li>
+								<li>Removing a folder </li>
+								<li>Load a document of each supported type and check that it’s shown correctly </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – whiteboard and properties panels (should be tested with at least 3 attendees)
+							<ol>
+								<li>Adding a removing a whiteboard </li>
+								<li>Full-fit switch </li>
+								<li>Clear whiteboard </li>
+								<li>Clear objects of current slide only </li>
+								<li>Save and export </li>
+								<li>Undo </li>
+								<li>Select an object </li>
+								<li>Pointer </li>
+								<li>Text </li>
+								<li>Paint </li>
+								<li>Draw line </li>
+								<li>Draw underline </li>
+								<li>Rectangle </li>
+								<li>Ellipse </li>
+								<li>Arrow </li>
+								<li>Cliparts</li>
+							</ol>						
+						</li>
+						<li>
+							Restricted room testing – chat (should be tested with at least 3 attendees)
+							<ol>
+								<li>Send a message </li>
+								<li>Start a private chat </li>
+								<li>Chat moderation </li>
+								<li>Font style </li>
+								<li>Emotions </li>
+								<li>Show/copy chat log </li>
+								<li>Delete server chat log </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – screen sharing and recordings (should be tested with at least 3 attendees)
+							<ol>
+								<li>"Share record/screen" button in the room </li>
+								<li>Desktop sharer: start/stop sharing </li>
+								<li>Change the shared screen area (X-offset, Y-offset, width, height) </li>
+								<li>Change the screen sharing quality </li>
+								<li>Start/stop recordings – need to check that it works as expected </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – Actions menu
+							<ol>
+								<li>Send invitation: send English and localized message </li>
+								<li>Send invitation with password </li>
+								<li>Send invitations with 3 different time periods </li>
+								<li>Change time zone of the invitation </li>
+								<li>Change language of the invitation </li>
+								<li>Send invitation screen: "Generate URL" button – check the same things as for the invitations sent by email </li>
+								<li>Apply to be moderator </li>
+								<li>Apply to whiteboard access </li>
+								<li>Apply to audio/video access </li>
+								<li>Create a poll </li>
+								<li>Poll results </li>
+								<li>Vote </li>
+								<li>Default whiteboard settings: check all of them </li>
+							</ol>
+						</li>
+						<li>
+							Conference room testing
+							<ol>
+								<li>User list should look in another way in compare with restricted type </li>
+								<li>Generally, all should look OK when enter the room </li>
+							</ol>
+						</li>
+						<li>
+							Interview room testing (should be tested with at least 3 attendees)
+							<ol>
+								<li>User list should look as expected </li>
+								<li>Change a user for video pod </li>
+								<li>Start/stop recordings </li>
+							</ol>
+						</li>						
+					</ol>			
+				</li>
+				<li>
+					<b>Admin GUI tests</b>
+					<ol>
+						<li>
+							Users
+							<ol>
+								<li>Add/edit/remove/search user in the table </li>
+								<li>Move between screens where there are many users in the table </li>
+								<li>Edit text fields </li>
+								<li>Change a time zone, re-login and check the calendar </li>
+								<li>Change a language, re-login and check the GUI language </li>
+								<li>Е-mail: e-mails should pass </li>
+								<li>Phone and SMS switch: if set and turned on, sms messages should pass </li>
+								<li>Change a status – non-active user cannot login </li>
+								<li>Change user role and re-login </li>
+								<li>Change user group  - user has an access only to the rooms belong to his organization </li>
+								<li>Change community settings and check </li>
+							</ol>
+						</li>
+						<li>
+							Connections
+							<ol>
+								<li>Should be tested with at least 3 users in the system </li>
+								<li>Sessionvars table should be shown correctly </li>
+								<li>Kick the user from the system </li>
+							</ol>
+						</li>
+						<li>
+							Organizations 
+							<ol>
+								<li>Add/remove/edit/search an organization </li>
+								<li>Add/remove a user from the user list of selected organization </li>
+							</ol>
+						</li>
+						<li>
+							Conference rooms
+							<ol>
+								<li>Add/remove/edit/search a room </li>
+								<li>User list for the given room should contain actual list </li>
+								<li>Turn the Moderation switch on/off and enter the room </li>
+								<li>Add/remove a user to the default moderator list </li>
+								<li>Check max participants number in the room </li>
+								<li>Change room type and enter the room </li>
+								<li>Turn public switch on/off </li>
+								<li>Turn "Demo switch" on/off, change the demonstration time </li>
+								<li>Turn "Allow user questions" on/off and enter the room </li>
+								<li>Turn "Audio only" switch on/off and enter the room </li>
+								<li>Set "Close URL" to some URL, enter the room and then exit – you should be re-directed correspondingly </li>
+								<li>Check that SIP settings work as expected </li>
+								<li>Check that "Allow recordings" switch  works as expected </li>
+								<li>Check that "Layout options" switch work as expected </li>
+								<li>Check that "Allow font styles" switch works as expected </li>
+							</ol>
+						</li>
+						<li>					
+							Configuration
+							<ol>
+								<li>Allow_frontend_register </li>
+								<li>Mail server settings </li>
+								<li>SMS provider settings </li>
+								<li>Application.name </li>
+								<li>Default_lang_id </li>
+								<li>default time zone </li>
+								<li>SIP settings </li>
+								<li>Reminder minutes </li>
+							</ol>
+						</li>
+						<li>					
+							Language editor 
+							<ol>
+								<li>Add/remove/edit/search a key </li>
+								<li>Import/export of localization files </li>
+							</ol>
+						</li>
+						<li>					
+							LDAP: Add/remove/edit/search a record
+						</li>
+						<li>
+							Backup
+							<ol>
+								<li>System import </li>
+								<li>System backup </li>
+								<li>TBD – need to add tests for command line admin here </li>
+							</ol> 
+						</li>
+						<li>
+							Servers: Add/remove/edit/search a server
+						</li>						
+					</ol>
+				</li>
+				<li>
+					<b>SIP integration tests</b> (should be tested with at least 3 attendees in the room; for restricted and interview rooms)
+					<ol>
+						<li>Call from the room to the external phone number </li>
+						<li>Call from external phone number to the room </li>
+						<li>Call from the software phone to the room </li>
+						<li>Call from the software phone with video to the room </li>
+					</ol>
+				</li>
+				<li>
+					<b>Network testing script</b>
+				</li>
+				<li>
+					<b>Site integration tests</b>
+					<ol>
+						<li>Enter OpenMeetings room from Mooddle site </li>
+						<li>Check that recordings link are shown on the Moodle site </li>
+						<li>Enter OpenMeetings room from Joomla site </li>
+						<li>Check that recordings link are shown on the Joomla site </li>
+						<li>Enter OpenMeetings room from Drupal site </li>
+						<li>Check that recordings link are shown on the Drupal site </li>
+					</ol>
+				</li>
+				<li>
+					<b>Extended test plan for the recordings and screen sharing testing</b>
+					<ol>
+						<li><b>Interview room testing</b>
+							<ol>
+								<li>
+									Just a 5 minutes recording:
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Wait for 5 minutes</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.1 – 1.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>there should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>Just a 30 minutes recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>Just an 1 hour recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>
+									5-minutes recording: user exits the room before the recording gets stopped
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Exit the room by user B</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.4.1 – 1.4.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>There should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>
+									5-minutes recording: user A starts recording, user B stops
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Stop recording by user B</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed as expected</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li>
+							<b>Conference room testing</b>
+							<ol>				
+								<li>
+									Screen sharing
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start screen sharing session by user A, choose High quality</li>
+										<li>Check that A's screen looks correctly for users B and C and sound is OK in the room</li>
+										<li>Stop screen sharing by user A after 5 minutes</li>
+										<li>Repeat steps 2.1.1-2.1.7 3 times</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Very high quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Medium quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Low quality” on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose some random height and width on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but turn the “Notify on disconnect” switch on the step 2.1.5</li>									
+									</ol>
+								</li>
+								<li>
+									Recordings
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start recording session by user A, choose High quality</li>
+										<li>Stop recording session by user A after 5 minutes</li>
+										<li>Repeat steps 2.2.1-2.2.6 3 times</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Very high quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Medium quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Low quality” on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose some random height and width on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but turn the “Notify on disconnect” switch on the step 2.2.5</li>
+										<li>Go to the A's recordings list and check that all the recordings are there, processed without errors and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Recordings + screen sharing: user enters the room after recording is started
+									<ol>
+										<li>Enter conference room by user A</li>
+										<li>Start screen sharing and recordings with default parameters by user A</li>
+										<li>Enter the room by user B, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Enter the room by user C, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Exit the room by user B; wait 3 minutes</li>
+										<li>Exit the room by user C; wait 3 minutes</li>
+										<li>Exit the room by user A</li>
+										<li>Repeat steps 2.3.1-2.3.7 3 times</li>
+										<li>Go to the recordings list for user A and check that all the recordings are OK and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Stress test
+									<ol>
+										<li>Enter the room by the users A, B, C, D and E</li>
+										<li>Open A, B, C, D and E videos</li>
+										<li>Start screen sharing and recordings session with high quality by user A</li>
+										<li>Wait 30 minutes</li>
+										<li>Stop screen sharing</li>
+										<li>Go to A's recordings list and check that created recording is OK</li>
+										<li>Repeat steps 2.3.1-2.3.6 3 times</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+
+			</ol>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/MoodlePlugin.xml b/xdocs/MoodlePlugin.xml
new file mode 100644
index 0000000..d17375e
--- /dev/null
+++ b/xdocs/MoodlePlugin.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Moodle Plugin</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Moodle Plugin for OpenMeetings">
+			<p>
+				You can get the latest Version of the Plugin for Moodle from the
+				<a href="downloads.html">downloads</a>
+				.
+				<br/>
+				You can find the OpenMeetings Plugin also in the
+				<a href="http://moodle.org/plugins/view.php?plugin=mod_openmeetings"
+					target="_BLANK" rel="nofollow">Moodle Plugin database</a>
+				.
+				<br/>
+				A demo version of the Moodle plugin is available at
+				<a href="http://moodle.openmeetings.de" target="_BLANK" rel="nofollow">moodle.openmeetings.de
+				</a>
+				.
+			</p>
+		</section>
+		
+		<section name="Installation of the Moodle Plugin for Apache OpenMeetings">
+			<p>
+				You simply download the ZIP or TAR package and unzip it to Moodle's "mod" directory.<br/>
+				Eventually you need to unzip the package into a folder called "openmeetings".
+				The folder structure is:<br/>
+				$MOODLE_HOME/mod/openmeetings/*.php
+				<br />
+				Then you visit the admin interface of Moodle, for example
+				<a href="http://$your_moodle_host/$MOODLE_WWW_ROOT/admin" target="_BLANK"
+					rel="nofollow">http://$your_moodle_host/$MOODLE_WWW_ROOT/admin</a> 
+					<br/>
+				Moodle will detect that there is a new plugin and will show the plugin installation screen:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_install_plugin.png">
+				<img src="images/moodle_install_plugin.png" alt="" width="430"
+					height="220" />
+			</a>
+			<p>
+				After you have clicked on "Update database" Moodle will show you the plugin configuration screen:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_configure_plugin.png">
+				<img src="images/moodle_configure_plugin.png" alt="" width="500"
+					height="300" />
+			</a>
+		</section>
+		
+		<section name="Adding a new conference room to a Moodle course">
+			
+			<p>
+				After installation of the plugin you can go to the course pages in Moodle and turn editing on.
+				Then you choose the activity "OpenMeetings", Moodle will then show you the conference room 
+				configuration with all the options:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_add_activity_plugin.png">
+				<img src="images/moodle_add_activity_plugin.png" alt="" width="430"
+					height="360" />
+			</a>
+		</section>
+		
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/MySQLConfig.xml b/xdocs/MySQLConfig.xml
new file mode 100644
index 0000000..32cbb43
--- /dev/null
+++ b/xdocs/MySQLConfig.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>MySQL Configuration</title>
+		<author email="sebawagner@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="MySQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Make sure that you have set utf8 as
+						default/server-character-set in your MySQL configuration (my.cnf)
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MySQL is listening on TCP/IP connections!
+						<br />
+						To verify if MySQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						You need to download the JConnector from mysql
+						<a href="http://www.mysql.com/downloads/connector/j/" target="_BLANK"
+							rel="nofollow">http://www.mysql.com/downloads/connector/j/</a>
+						and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="MySQL Sample Configuration">
+				<p>
+					There is a sample configuration for MySQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/Navigation.xml b/xdocs/Navigation.xml
new file mode 100644
index 0000000..1fa5fa7
--- /dev/null
+++ b/xdocs/Navigation.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Change main navigation</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing the main navigation">
+
+			<p>To customize the main menu (for example remove entries or changing
+				the order) you can edit the tables:  </p>
+			<ul>
+				<li>navimain </li>
+				<li>naviglobal </li>
+				<li>navisub (currently not in use) </li>
+			</ul>
+			<p></p>
+			<p>
+				You need to make sure that you
+				<strong>restart red5 after doing changes to the database</strong>
+				, there is a database cache, so changes might not take affect as
+				long as you did not restart.
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/OpenOfficeConverter.xml b/xdocs/OpenOfficeConverter.xml
new file mode 100644
index 0000000..f762870
--- /dev/null
+++ b/xdocs/OpenOfficeConverter.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>OpenOffice converter for OpenMeetings</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenOffice Service for OpenMeetings">
+
+			<p>
+				To import .doc, .docx, .odp, .xls, .xlsx, .ppt, .pptx, ... [ all
+				files that you can open with OpenOffice ]
+				to OpenMeetings and use
+				them in the whiteboard you need OpenOffice or LibreOffice
+				installed
+				the machine that runs OpenMeetings.
+			</p>
+			<p>
+				<i>Since Version 2.0 of OpenMeetings starting of
+					OpenOffice/LibreOffice as service in not required, JODConverter
+					will automatically start and shut down the service!
+				</i>
+			</p>
+			<p>
+				Installation of JODConverter means: You donwload the ZIP binary from
+				their
+				<a href="http://code.google.com/p/jodconverter/" target="_BLANK"
+					rel="nofollow">website</a>
+				and then configure in Apache OpenMeetings Administration >
+				Configuration (or during installation) the config key
+				<tt>jod.path</tt>
+				to point to the "lib" directory of the unpacked JODConverter binary.
+				There is no restart of OpenMeetings required.
+			</p>
+			<p>You should use an OpenOffice version greater 3</p>
+
+		</section>
+
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/OracleConfig.xml b/xdocs/OracleConfig.xml
new file mode 100644
index 0000000..8a4b0ad
--- /dev/null
+++ b/xdocs/OracleConfig.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>IBM DB2 Configuration</title>
+		<author email="sebawagner@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="IBM DB2 Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Download the latest JDBC Driver from Oracle for your database
+						version. Place those JARs into
+						$Red5/webapps/openmeetings/WEB-INF/lib
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml connectionURL, username and
+						password with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Oracle Sample Configuration">
+				<p>
+					There is a sample configuration for Oracle that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/PortSettings.xml b/xdocs/PortSettings.xml
new file mode 100644
index 0000000..07717ae
--- /dev/null
+++ b/xdocs/PortSettings.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Port settings</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Default Configuration">
+
+			<ul>
+				<li>Port 5080: HTTP (For example for file upload and download) </li>
+				<li>Port 1935: RTMP (Flash Stream and Remoting/RPC) </li>
+				<li>Port 8088: RTMP over HTTP-Tunneling (rtmpT) </li>
+			</ul>
+			<p>Additionally red5 uses some ports internally. However those ports
+				are not in use by OpenMeetings by default.
+			</p>
+
+		</section>
+
+		<section name="Configure alternative ports">
+
+			<p>You need to change two files: </p>
+			<ul>
+				<li>Server-Side configuration: $RED5_HOME/conf/red5.properties, you
+					need to restart the red5-service so that changes are online.
+				</li>
+				<li>Client-Side configuration:
+					$RED5_HOME/webapps/openmeetings/public/config.xml, you need to clear your
+					browser cache after changing the file.
+				</li>
+				<li>
+					<blockquote>Every server side configuration has a client side
+						representative
+					</blockquote>
+				</li>
+			</ul>
+			<p></p>
+			<table>
+				<tr>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-Name </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Default-value </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in red5.properties </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in public/config.xml </th>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> HTTP </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 5080 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http.port </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> red5httpport </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> RTMP </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1935 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmp.port </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmpport </td>
+				</tr>
+			</table>
+
+		</section>
+
+		<section name="Preventing Firewall issues">
+
+			<p>A common way of bypassing the firewall is to change HTTP port to
+				80 and rtmpT to 443.
+			</p>
+			<p>A short description about the connection mechanism: The
+				application first tries connecting to rtmp 3 times, because rtmp is
+				the protocol that is less performance hungry. If that fails the
+				application will fallback to rtmpT.
+			</p>
+			<p>Most firewalls do allow traffic on port 443 and they normally do
+				not analyse the packets, because 443 is normally SSL encrypted, so
+				the firewall should not be able to read the packets at all.
+			</p>
+
+		</section>
+
+		<section name="OpenMeetings over SSL">
+
+			<p>
+				You can run OpenMeetings completely over SSL. See
+				<a href="RTMPSAndHTTPS.html">RTMPSAndHTTPS</a>
+				.
+			</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/PostgresConfig.xml b/xdocs/PostgresConfig.xml
new file mode 100644
index 0000000..c1fd27c
--- /dev/null
+++ b/xdocs/PostgresConfig.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>PostgreSQL Configuration</title>
+		<author email="sebawagner@apache.org">
+			Apache OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="PostgreSQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Make sure that you have set utf8 as default/server-character-set 
+					</li>
+					<li>
+						make sure PostgreSQL is listening on TCP/IP connections!
+						<br />
+						To verify if PostgreSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db again and delete
+						the file $red5/webapps/openmeetings/conf/install.xml and then run
+						the web based installer again
+					</li>
+					<li><span style="font-size: larger; color: blue;">IMPORTANT</span> According to
+						<a href="http://markmail.org/message/opymlab2e6wygb7p">this</a> thread you need to ensure:<br/>
+						<tt>standard_conforming_strings</tt> is set to <tt><b>on</b></tt> and <br/>
+						<tt>escape_string_warning</tt> is set to <tt><b>off</b></tt>
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Rename:
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
+						<br />
+						to
+						<br />
+						$red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+					</li>
+					<li>
+						Prepare Database Settings - go to
+						openmeetings_version_no_xx/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+						<br />
+						Alter config values in persistence.xml DB_HOST USER_NAME USER_PASS
+						with your values
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="PostgreSQL Sample Configuration">
+				<p>
+					There is a sample configuration for PostgreSQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/RTMPSAndHTTPS.xml b/xdocs/RTMPSAndHTTPS.xml
new file mode 100644
index 0000000..9d613f9
--- /dev/null
+++ b/xdocs/RTMPSAndHTTPS.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Using OpenMeetings with RTMPS and HTTPS</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Using OpenMeetings with RTMPS and HTTPS">
+
+			<p>There are 3 ways the client communicates with the server: </p>
+			<ul>
+				<li>The flash-client uses RTMP protocol to transfer Audio/Video and
+					to send and receive the user data (login et cetera) to the server
+					and back
+				</li>
+				<li>The browser uses HTTP protocol to load the SWF and to upload and
+					download the files (documents, pdfs, images) to the server and
+					back.
+				</li>
+				<li>The screensharing client uses RTMP protocol to transfer screen
+					data and remote control to the server and back
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Prerequisites">
+
+			<ul>
+				<li>You need OpenMeetings 1.9.x for this, OpenMeetings 1.8.x does
+					not
+					have those options.
+				</li>
+				<li>Install OpenMeetings according to the install instructions and
+					check that it runs without problems
+				</li>
+				<li>Rename the existing keystore file red5/conf/keystore to
+					keystore.bak
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Configuring RTMPS for the Flash Client">
+
+			<ol>
+				<li>
+					Create a new keystore and key, use the same password for both:<br/>
+					(copied from
+					<a
+						href="http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS%29:"
+						rel="nofollow">http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS):</a>
+					<div class="xmlcode">
+						keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore<br/>
+						Enter keystore password:<br/>
+						Re-enter new password:<br/>
+						What is your first and last name?<br/>
+						[Unknown]:  &lt;your hostname, e.g demo.openmeetings.de&gt;<br/>
+						What is the name of your organizational unit?<br/>
+						[Unknown]:  Dev<br/>
+						What is the name of your organization?<br/>
+						[Unknown]:  OpenMeetings<br/>
+						What is the name of your City or Locality?<br/>
+						[Unknown]:  Henderson<br/>
+						What is the name of your State or Province?<br/>
+						[Unknown]:  Nevada<br/>
+						What is the two-letter country code for this unit?<br/>
+						[Unknown]:  US<br/>
+						Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?<br/>
+						[no]:  yes<br/>
+						Enter key password for &lt;red5&gt;<br/>
+					</div>
+				</li>
+		
+				<li>Generate a CSR: keytool -certreq -keyalg RSA -alias red5 -file
+					red5.csr -keystore red5/conf/keystore
+				</li>
+				<li>Submit CSR to your CA of choice and receive a signed certificate
+				</li>
+				<li>Import your chosen CA's root certificate into the keystore (may
+					need to download it from their site - make sure to get the root CA and
+					not the intermediate one): keytool -import -alias root -keystore
+					red5/conf/keystore
+					-trustcacerts -file root.crt (note: you may receive a warning that
+					the certificate already exists in the system wide keystore - import
+					anyway)
+				</li>
+				<li>Import the intermediate certificate(s) you normally receive with
+					the certificate:
+					keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts
+					-file intermediate.crt
+				</li>
+				<li>Import the certificate you received: keytool -import -alias red5
+					-keystore red5/conf/keystore -trustcacerts -file
+					demo.openmeetings.de.crt
+				</li>
+                <li>
+                Create additional certificate as described above.
+                Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>.
+                </li>
+			</ol>
+
+		</section>
+		
+		<section name="Set up RTMPS">
+		
+		  <ol>
+		      <li>
+		      Uncomment <tt>&lt;!-- RTMPS --&gt;</tt> section in <tt>red5/conf/red5-core.xml</tt>
+		      </li>
+
+				<li>
+					Edit <tt>red5/conf/red5.properties</tt> and set
+					<tt>rtmps.port=5443</tt>
+					and
+					<tt>rtmps.keystorepass=password</tt>
+					(password = password you set on your new
+					keystore)
+				</li>
+			
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>&lt;rtmpsslport&gt;5443&lt;/rtmpsslport&gt;</tt>
+					,
+					<tt>&lt;useSSL&gt;yes&lt;/useSSL&gt;</tt>
+					and
+					<tt>&lt;proxyType&gt;best&lt;/proxyType&gt;</tt>
+				</li>
+
+				<li>Restart red5 and try to connect - your connection should now be
+					made via RTMPS (close port 1935 to be sure)
+				</li>   
+					  
+		  </ol>
+		
+		</section>
+
+		<section name="SSL for the web interface">
+	
+			<p>If you want to use SSL for the web interface in addition to RTMPS,
+				you need to make some further modifications. This is mainly to secure
+				the server against MITM attacks, additionally some other features
+				like file uploads also use a plain HTTP connection if this is not
+				done. The following instructions assume that you have already set up
+				RTMPS successfully. </p>
+			<ol>
+				<li>
+					Edit <tt>red5/conf/jee-container.xml</tt> file:<br/>
+					Comment <tt>Tomcat without SSL enabled</tt> section<br/>
+					UNComment <tt>Tomcat with SSL enabled</tt> section
+				</li>
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>&lt;protocol&gt;https&lt;/protocol&gt;</tt>
+				</li>
+				<li>
+					Edit red5/webapps/openmeetings/public/config.xml and set
+					<tt>red5httpport</tt> to <tt>https</tt> port
+				</li>
+				<li>In webapps/openmeetings/WEB-INF/conf/axis2.xml add (below the existing http transportReceiver (around line 225))
+					<div class="xmlcode">&lt;transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener"&gt;<br/>
+    &#160;&#160;&#160;&#160;&lt;parameter name="port"&gt;443&lt;/parameter&gt;<br/>
+&lt;/transportReceiver&gt;</div>
+				</li>
+				<li>Edit red5/conf/red5.properties and set <tt>https.port=443</tt> </li>
+				<li>
+					Restart red5 and try to connect to
+					<a href="https://your.server" rel="nofollow">https://your.server</a>
+					- you should be redirected to the OpenMeetings
+					app and all access should be via HTTPS or RTMPS (close port 5080 to
+					be sure).
+				</li>
+            </ol>
+            
+	   </section>
+
+		<section name="Credits">
+	
+			<p>Credits goto: Nexus and Holger Rabbach for their help and
+				contribution and configuration documention! </p>
+	
+		</section>
+	
+
+	</body>
+
+</document>
+
diff --git a/xdocs/RecommendedHardwareList.xml b/xdocs/RecommendedHardwareList.xml
new file mode 100644
index 0000000..c5187e0
--- /dev/null
+++ b/xdocs/RecommendedHardwareList.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="Cameras">
+			We recommend the following cameras:
+			<ul>
+				<li>Logitech QuickCam Sphere AF</li>
+				<li>Logitech QuickCam E3500</li>
+				<li>Samsung Pleomax PWC-7100</li>
+				<li>Genius Look320S</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Skypemate WC-103M</li>
+			</ul>
+		</section>
+		<section name="Headsets">
+			The recommended headset model (i.e. headphones with microphone) is:
+			<ul>
+				<li>Logitech Clear Chat Style</li>
+			</ul>
+			Also the following headsets showed good results:
+			<ul>
+				<li>ClearChat PC Wireless (helps to suppress echo)</li>
+				<li>Logitech USB Desktop Microphone - Mikrophon (good sound, but bad echo cancellation)</li>
+			</ul>
+			<b>Note for Mac OS X users:</b> The build-in microphone normally has quite good quality and echo cancellation, so Mac OS X users often do not even require a headset.
+		</section>
+		<section name="Speakerphones">
+			When several people participate from the same location, we recommend using the following speakerphone models:
+			<ul>
+				<li>Phoenix Audio Quattro2 USB Speakerphone MT301 (a single microphone + speakers can be used even with 20-30 people sitting in a room)</li>
+				<li>Phoenix DUET Executive</li>
+				<li>Jabra SPEAK410</li>
+				<li>Plantronics MCD 100M</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Konftel 300</li>
+			</ul>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/RedminePlugin.xml b/xdocs/RedminePlugin.xml
new file mode 100644
index 0000000..de773ff
--- /dev/null
+++ b/xdocs/RedminePlugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>Redmine Plugin</title>
+		<author email="solomax@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Redmine">
+			<p>
+				Current Development Snapshots for testing can be created from the sources:
+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-redmine-plugin/trunk">here</a>.<br/>
+				The page at redmine site is <a href="http://www.redmine.org/plugins/redmine-openmeetings">here</a>
+			</p>			
+		</section>
+		<section name="Features">
+			<p>TBD</p>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/ReleaseGuide.xml b/xdocs/ReleaseGuide.xml
new file mode 100644
index 0000000..db4120a
--- /dev/null
+++ b/xdocs/ReleaseGuide.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Release Guide</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="How to Build a Release of OpenMeetings">
+
+			<subsection name="Required tools">
+
+				<div>
+					<p>To build a binary release of OpenMeetings you need: </p>
+					<ul>
+						<li>Sun JDK6</li>
+						<li>Apache ANT (minimum) 1.8.3</li>
+						<li>
+							SVN Command line client (Subversion 1.7 required!)
+							<a href="http://subversion.apache.org/packages.html" target="_BLANK"
+								rel="nofollow">http://subversion.apache.org/packages.html</a>
+						</li>
+						<li>A text editor</li>
+						<li>You need to be online! The build process actively downloads
+							needed libraries and dependencies.
+						</li>
+					</ul>
+				</div>
+
+			</subsection>
+
+			<subsection name="Prepare your Apache ID">
+
+				<div>
+					Every release package must be signed with a PGP/GPG key.
+					<br />
+					So if you want to release a package your Apache Id must be
+					connected with a PGP key!
+					<br />
+					<br />
+					You might follow:
+					<br />
+					<a
+						href="http://www.apache.org/dev/new-committers-guide.html#security-and-pgp"
+						target="_blank">http://www.apache.org/dev/new-committers-guide.html#security-and-pgp
+					</a>
+					<br />
+					<br />
+					In short:
+					<br />
+					Create PGP key pairs (private + public) (and I recommend creating a
+					Revoke Cert)
+					<br />
+					Upload the public key (either bei using the PGP Tool that you use
+					to create the key) or by using the web form to:
+					<a href="http://pgp.mit.edu/" target="_blank" rel="nofollow">http://pgp.mit.edu/
+					</a>
+					<br />
+					Add the fingerprint string (something like "BF13 CF11 F9C9 0CBE
+					4413 09AB 0055 16BF 93A3 0395") to your profile at
+					<a href="http://id.apche-org" target="_blank" rel="nofollow">id.apche-org
+					</a>
+					<br />
+					Wait for 6-8 hours, the server will search for a public key based
+					on your fingerprint, if success it will create a file with your
+					name at:
+					<br />
+					<a href="https://people.apache.org/keys/committer/">https://people.apache.org/keys/committer/</a>
+					<br />
+					<br />
+					If that is "success" then add your key to:
+					<br />
+					<a
+						href="https://svn.apache.org/repos/asf/openmeetings/project/KEYS">https://svn.apache.org/repos/asf/openmeetings/project/KEYS
+					</a>
+					<br />
+					and follow the instructions in the file.
+					<br />
+				</div>
+
+			</subsection>
+
+			<subsection name="Step1 - Prepare files">
+				<p>
+					Check that all files:
+					<br />
+					LICENSE, NOTICE, DISCLAIMER, CHANGELOG, README
+					<br />
+					are up to date and refer to the right version.
+				</p>
+
+				<p>
+					Create a TAG of the SVN tree that you would like to release<br/>
+					Example:
+				</p>
+				
+				<div class="xmlcode">
+					svn copy -r1453158 https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp \<br/>
+						https://svn.apache.org/repos/asf/openmeetings/tags/2.1RC1 \<br/>
+						-m "Release candidate 1"
+				</div>
+				
+
+				<p>Get the source from your TAG: </p>
+				<div class="xmlcode">
+					svn checkout https://svn.apache.org/repos/asf/openmeetings/tags/$BRANCHORTAG/<br />
+					$BRANCHORTAG should be replaced with your new TAG
+				</div>
+
+				<p>Edit the file build.properties change</p>
+				<div class="xmlcode">
+					project.status=SNAPSHOT
+				</div>
+				<p>to</p>
+				<div class="xmlcode">
+					project.status=RELEASE
+				</div>
+				<p>Run the command: </p>
+				<div class="xmlcode">
+					ant dist-release
+				</div>
+				<p>Test building the source on windows and OSx or Linux</p>
+				<p>Test running the binary's</p>
+				<p>Create MD5 checksums</p>
+				<div class="xmlcode">
+					#On OSX you might use this command to make a MD5 checksum and store it to a file<br />
+					md5 -r apache-openmeetings-XXX-src.zip >apache-openmeetings-XXX-src.zip.md5
+				</div>
+				<div class="xmlcode">
+					#To create MD5 hashes On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do md5sum $f > $f.md5; done<br/>
+					<br/>
+					#To check MD5 hashes On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do md5sum -c $f.md5; done
+				</div>
+				<p>
+					Create signatures with the your KEY for every file, the KEY must be available at:<br />
+					<a href="http://www.apache.org/dist/incubator/openmeetings/KEYS">
+						http://www.apache.org/dist/incubator/openmeetings/KEYS
+					</a>
+				</p>
+				<div class="xmlcode">
+					#To create signatures On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do gpg --armor --output $f.asc --detach-sig $f; done<br/>
+					<br/>
+					#To check signatures On Ubuntu:<br />
+					for f in `ls -1 *.tar.gz *.zip`; do gpg --verify $f.asc; done
+				</div>
+				
+				<p>
+					Commit artifacts you have created with KEYS file to the
+					<tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt>
+					Proposed file structure for "Release Candidate 1" of 2.1 will be:
+				</p>
+				<div class="xmlcode">
+					2.1<br />
+					2.1/rc1<br />
+					2.1/rc1/src<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.md5<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.asc<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.md5<br />
+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.asc<br />
+					2.1/rc1/bin<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.md5<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.asc<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.md5<br />
+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.asc<br />
+					2.1/rc1/CHANGELOG<br />
+					2.1/rc1/KEYS<br />
+				</div>
+			</subsection>
+
+			<subsection name="Step2 - VOTE and RESULT emails">
+				<p>
+					Send a "VOTE" to the developer mailing list including links to release artefacts.<br />
+					A VOTE always contains two parts:<br />
+					Send an email to the developer mailing list with the subject line:<br />
+					[VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a href="http://s.apache.org/vote-2.1.0RC1">example Vote email</a>
+					<a href="http://s.apache.org/vote-2.0.0RC4">example Vote email (Incubator)</a>
+					<br />
+					Forward (Not CC) this Vote email to: private@openmeetings.apache.org<br />
+					<br />
+					After the vote is over, send a "RESULT" email to the list with the subject line:<br />
+					[RESULT][VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a
+						href="http://mail-archives.apache.org/mod_mbox/incubator-openmeetings-dev/201207.mbox/%3CCACeMiA-ibo6fGCbnLjJX9H5H2kFGDVJRMfxPyMtzWzCWNi%2BpOg%40mail.gmail.com%3E">example Result email</a>
+					<br />
+					Forward (Not CC) this RESULT VOTE email to: private@openmeetings.apache.org<br />
+					<br />
+					Votes on whether a package is ready to be released use majority approval -- i.e., at 
+					least three PMC members must vote affirmatively for release, and there must be more 
+					positive than negative votes. Releases may not be vetoed. Before voting +1 PMC members
+					are required to download the signed source code package, compile it as provided, and 
+					test the resulting executable on their own platform, along with also verifying that 
+					the package meets the requirements of the ASF policy on releases.
+				</p>
+			</subsection>
+
+			<subsection name="Step3 - Distribute and announce">
+				<p>If VOTEs positive: Upload the release </p>
+				<div class="xmlcode">
+					svn mv https://dist.apache.org/repos/dist/dev/openmeetings/2.1/rc3 \<br/>
+						https://dist.apache.org/repos/dist/release/openmeetings/2.1 \<br/>
+						-m "RC3 is released as 2.1"
+				</div>
+				<p>
+					Wait 24 hours (until all Apache mirrors have synced the packages)
+					and send an announcement to the mailing list + blog and any other
+					channel.
+				</p>
+				<p>
+					Email announcements should have the subject line:
+					<br />
+					[ANNOUNCE] Apache OpenMeetings x.xx released
+				</p>
+				<p>
+					Add a section to <a href="downloads.html">downloads</a> website.<br />
+					Make sure that the binary packages are linked using the mirror URL as base path (
+					<b>not</b> http://www.apache.org/dist):<br />
+					Mirror URL: 
+					<a href="http://www.apache.org/dyn/closer.lua/openmeetings/">http://www.apache.org/dyn/closer.lua/openmeetings/</a>
+				</p>
+				<p>
+					Release candidates should be deleted from <tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt><br/>
+					Old releases should be deleted from <tt>https://dist.apache.org/repos/dist/release/openmeetings/</tt>
+				</p>
+			</subsection>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/RestAPISample.xml b/xdocs/RestAPISample.xml
new file mode 100644
index 0000000..ea79010
--- /dev/null
+++ b/xdocs/RestAPISample.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+
+			<p> For a detailed instruction which services, methods and params are available see the list in the SoapMethods. ALL methods that are implemented for the SOAP API are also available via REST. 
+			</p>
+
+		</section>
+		
+		<section name="How to invoke Services via REST">
+
+			<p>For example for the method getSession in the UserService, you would use this URL via REST:
+			</p>
+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/getSession">http://demo.openmeetings.de/openmeetings/services/UserService/getSession</a>
+			<p>Result: </p>
+			<div class="xmlcode">
+				&lt;ns:getSessionResponse/&gt;<br/>
+				&lt;ns:return type="org.apache.openmeetings.hibernate.beans.basic.Sessiondata"/&gt;<br/>
+				<div style="margin-left:20px">
+					&lt;ax219:id&#62;156971&lt;/ax219:id/&gt;<br/>
+					&lt;ax219:language_id xsi:nil="true"//&gt;<br/>
+					&lt;ax219:organization_id xsi:nil="true"//&gt;<br/>
+					&lt;ax219:refresh_time&#62;2011-07-03T14:40:44.000Z&lt;/ax219:refresh_time/&gt;<br/>
+					&lt;ax219:sessionXml xsi:nil="true"//&gt;<br/>
+					&lt;ax219:session_id&#62;26584705202d7c1de6cc8e7e28890e3d&lt;/ax219:session_id/&gt;<br/>
+					&lt;ax219:starttermin_time&#62;2011-07-03T14:40:44.000Z&lt;/ax219:starttermin_time/&gt;<br/>
+					&lt;ax219:storePermanent xsi:nil="true"//&gt;<br/>
+					&lt;ax219:user_id xsi:nil="true"//&gt;<br/>
+				</div>
+				&lt;/ns:return/&gt;<br/>
+				&lt;/ns:getSessionResponse/&gt;<br/>
+			</div>
+			<p>To login a user the call to auth would be:</p>
+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&#38;username=hans&#38;userpass=test">http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&#38;username=han&#38;userpass=test</a>
+			<p>Result: </p>
+			<div class="xmlcode">
+				&lt;ns:loginUserResponse/&gt;<br/>
+				<div style="margin-left:20px">
+				    &lt;ns:return&#62;-11&lt;/ns:return/&gt;<br/>
+				</div>
+				&lt;/ns:loginUserResponse/&gt;<br/>
+			</div>
+			<p>=> It does return -10, which is the error id cause we will not write down a SOAP login to our public server in this wiki. However the correct way to check this error would be to invoke the call to get the localized error message. So we invoke the method to get the error via REST:</p>
+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&#38;errorid=-10&#38;language_id=1">http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&#38;errorid=-10&#38;language_id=1</a>
+			<p>Result:</p>
+			<div class="xmlcode">
+				&lt;ns:getErrorByCodeResponse/&gt;<br/>
+				&lt;ns:return type="org.apache.openmeetings.db.dto.basic.ErrorResult"/&gt;<br/>
+				<div style="margin-left:20px">
+					&lt;ax218:errmessage&#62;Username not found&lt;/ax218:errmessage/&gt;<br/>
+					&lt;ax218:errorId&#62;-10&lt;/ax218:errorId/&gt;<br/>
+					&lt;ax218:errortype&#62;Error&lt;/ax218:errortype/&gt;<br/>
+				</div>
+				&lt;/ns:return/&gt;<br/>
+				&lt;/ns:getErrorByCodeResponse/&gt;<br/>
+			</div>
+		</section>
+
+
+
+	</body>
+</document>
\ No newline at end of file
diff --git a/xdocs/RestrictedAccess.xml b/xdocs/RestrictedAccess.xml
new file mode 100644
index 0000000..f2f9ead
--- /dev/null
+++ b/xdocs/RestrictedAccess.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>How to restrict access to your Openmeetings server</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+	
+		<section name="Server Side">
+	
+			<p>You can protect your OpenMeetings instance from beeing accessed
+				from 3th party by using the file:
+			</p>
+			<p>$RED5_HOME/webapps/openmeetings/WEB-INF/red5-web.properties </p>
+			<p>Content: </p>
+			<div class="xmlcode">
+				webapp.virtualHosts=*,localhost, 127.0.0.1
+			</div>
+			Sample file:
+			<a
+				href="http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties"
+				rel="nofollow">http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties
+			</a>
+		</section>
+
+		<section name="Client Side">
+
+			<p>And you can restrict the access also for the client side: Every
+				Flash Plugin will check a file called "crossdomain.xml" before it
+				tries to access the server using rtmp/RPC. This file is located: </p>
+			<p>$RED5_HOME/webapps/root/crossdomain.xml </p>
+			<p>Content: </p>
+			<div class="xmlcode">
+				&lt;?xml version="1.0"?&gt;<br/>
+				&lt;cross-domain-policy&gt;<br/>
+				        &lt;site-control permitted-cross-domain-policies="all"/&gt;<br/>
+				        &lt;allow-access-from domain="localhost" to-ports="20-65535"/&gt;<br/>
+				        &lt;allow-access-from domain="*.local" to-ports="20-65535"/&gt;<br/>
+				&lt;/cross-domain-policy&gt;<br/>
+			</div>
+			
+            <p>
+				Sample file:
+				<a
+					href="http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml"
+					rel="nofollow">http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml
+				</a>
+			</p>
+				<p>
+					If you accessing your application behind an Apache Webservre (using
+					mod_proxy or mod_jk2) be careful to make the crossdomain.xml
+					accessible. Flash will always search for this file in the www-root
+					directory of every URL you connect to. You might use
+					<a href="https://addons.mozilla.org/de/firefox/addon/firebug/" rel="nofollow">FireBug
+					</a>
+					for example to lookup requests.
+				</p>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/SakaiPlugin.xml b/xdocs/SakaiPlugin.xml
new file mode 100644
index 0000000..73439a5
--- /dev/null
+++ b/xdocs/SakaiPlugin.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Sakai Plugin</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+			<p>
+				In 2010,
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company
+				</a>
+				has developed a plugin that integrates Sakai LMS and OpenMeetings
+				.
+			</p>
+			<p>
+				The plugin was developed for some Spanish Universities that use
+				Sakai and belongs to
+				<a rel="nofollow" target="_blank" 
+					href="https://confluence.sakaiproject.org/display/SPANISH/S2G+-+Spanish+Sakai+Group">"Spanish Sakai Universities"</a>
+				group:
+			</p>
+			<ul>
+				<li>
+					<a rel="nofollow" href="http://www.udl.es/" target="_blank">Universitat de Lleida </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.upv.es/" target="_blank">Universidad Polit&#233;cnica de Valencia </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.um.es/" target="_blank">Universidad de Murcia</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.unavarra.es/" target="_blank">Universidad P&#250;blica de Navarra</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.ucam.edu/" target="_blank">Universidad Cat&#243;lica San Antonio de Murcia
+					</a>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Sakai: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with announcements </li>
+						<li>Sends an email to all site participants </li>
+						<li>Rooms restricted to site groups </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+			<p />
+			<ul>
+				<li>Future requirements </li>
+				<li>
+					<ol>
+						<li>Publish room recordings to students </li>
+						<li>Room reservation </li>
+					</ol>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Source">
+			<p>
+				You can download and build the source code
+				<a rel="nofollow" target="_blank" 
+					href="https://source.sakaiproject.org/contrib/samoo/adobeconnectpro-openmeetings-integration/trunk/">here</a>
+			</p>
+		</section>
+
+		<section name="Installation and documentation">
+			<p>
+				The documentation resides in the
+				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/OPENMTG/Home">Sakai confluence space</a>
+			</p>
+			<p>
+				Please contact the mailing list for further information. For
+				commercial support you can also contact
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company</a>
+				or other companies from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/SoapRestAPI.xml b/xdocs/SoapRestAPI.xml
new file mode 100644
index 0000000..db9ba39
--- /dev/null
+++ b/xdocs/SoapRestAPI.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Available WebServices">
+
+			<div>
+				<div>
+					<a href="UserService.html" target="_BLANK">
+						<b>UserService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods to login and create hash to
+							directly enter
+							conference rooms, recordings or the application in
+							general
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="RoomService.html" target="_BLANK">
+						<b>RoomService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>RoomService contains methods to manipulate rooms and create
+							invitation hash
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="FileService.html" target="_BLANK">
+						<b>FileService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>Contains methods to import and upload files into the Files
+							section of the
+							conference room and the personal drive of any user
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="CalendarService.html" target="_BLANK">
+						<b>CalendarService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>CalendarService contains methods to create, edit delete
+							calendar meetings
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="JabberService.html" target="_BLANK">
+						<b>JabberService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods necessary for OM to Jabber integration.
+						All methods doesn't require admin privileges to get called.
+						</i>
+					</div>
+				</div>
+				<div>
+					<a href="ServerService.html" target="_BLANK">
+						<b>ServerService</b>
+					</a>
+					<br />
+					<div style="margin-left:20px">
+						<i>The Service contains methods necessary for OM to manage servers 
+						participating in cluster.
+						All methods does require admin privileges to get called.
+						</i>
+					</div>
+				</div>
+			</div>
+
+		</section>
+
+
+	</body>
+</document>
\ No newline at end of file
diff --git a/xdocs/SugarCRMPlugin.xml b/xdocs/SugarCRMPlugin.xml
new file mode 100644
index 0000000..e3f8069
--- /dev/null
+++ b/xdocs/SugarCRMPlugin.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>SugarCRM Plugin</title>
+		<author email="eschwert@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="SugarCRM Plugin for OpenMeetings">
+			<p>
+				You can get the latest Version of the Plugin for SugarCRM from the
+				<a href="downloads.html">downloads</a>
+				.
+			</p>
+			<p>
+				You can find the OpenMeetings Plugin also in the
+				<a href="http://www.sugarforge.org/projects/openmeetings/"
+					target="_BLANK" rel="nofollow">SugarCRM Plugin database</a>
+				.
+			</p>
+			<p>
+				A demo version of the SugarCRM plugin is available at
+				<a href="http://demo.e-schwert.de/sugarcrm/" target="_BLANK" rel="nofollow">demo.e-schwert.de</a>
+				. Username: demo Password: Demouser55 
+			</p>
+		</section>
+		
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through SugarCRM: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with SugarCRM meetings </li>
+						<li>Sends invetations emails to meeting participants </li>					
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>			
+		</section>
+
+		<section name="Installation the SugarCRM Plugin for OpenMeetings">			
+			<p>In SugarCRM's administration web-interface you will find the
+				module loader.
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_plugin_conference.png">
+				<img src="images/SugarCRM_Installation.png" alt="" width="640"
+					height="320" />
+			</a>
+			<ol>
+				<li>Upload the module with module loader in administration area. </li>
+				<li>Configure OpenMeetings settings. </li>
+				<li>Create OpenMeetings rooms. </li>				
+			</ol>
+		</section>
+		
+		<section name="Demo video">			
+			<p>The demo video of SugarCRM plugin show you the plugin in action </p>              
+		      <object style="height: 390px; width: 640px">
+			      <param name="movie" value="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage"/>
+			      <param name="allowFullScreen" value="true"/>
+			      <param name="allowScriptAccess" value="always"/>
+			      <embed src="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>
+		      </object> 
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/TimeZoneHandling.xml b/xdocs/TimeZoneHandling.xml
new file mode 100644
index 0000000..e78e560
--- /dev/null
+++ b/xdocs/TimeZoneHandling.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Timezones</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+			<p>
+				List of default Timezones:
+				<a
+					href="http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml"
+					rel="nofollow">http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml
+				</a>
+			</p>
+			<p>
+				To add a new Time Zone you have to lookup its represant in Java's
+				Timezone registry. You can then add freely new time zones to the XML
+				file. The XML entries are imported into the database into the table
+				<strong>om_timezone</strong>
+				during the installation of OpenMeetings. (Don't forget to stop the
+				server before you change anything in the database).
+			</p>
+			<p>
+				The Servers default timezone is stored in the configuration table in
+				the attribute
+				<strong>default.timezone</strong>
+				. The name in this value links to an attribute in the table
+				om_timezone in the column
+				<strong>jname</strong>
+				.
+			</p>
+			<p>
+				You can set a Flag
+				<strong>forceTimeZoneCheck</strong>
+				for each user that gives him a Pop-Up notification to change his
+				time zone. The Flag can be changed in the user administration of
+				OpenMeetings. This can be handy if you update from a previous
+				version of OpenMeetings to make sure users see the new feature and
+				update their settings.
+			</p>
+			
+			
+			
+		</section>
+		
+		<section name="How to lookup timezone's">
+		
+		  <div class="xmlcode">
+		  
+                    String[] ids = TimeZone.getAvailableIDs();<br/>
+                    for (String id : ids) {<br/>
+                        
+                        <div style="margin-left:20px">
+                        TimeZone timeZone = TimeZone.getTimeZone(id);<br/>
+                        //TimeZone timeZone = timeRegistry.getTimeZone(id);<br/>
+                        <br/>
+                        Calendar cal = Calendar.getInstance();<br/>
+                                <div style="margin-left:20px">
+                                cal.setTimeZone(timeZone);<br/>
+                                // + cal.get(Calendar.DST_OFFSET)<br/>
+                                int offset = cal.get(Calendar.ZONE_OFFSET);<br/>
+                        <br/>
+                                int offsetInMinutes = offset/1000/60;<br/>
+                                <br/>
+                                System.out.println("name" + id + "name offset "+offsetInMinutes+"offset ");
+                                </div>
+                        </div>
+                    }
+		  
+		  </div>
+		  
+		  
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/Upgrade.xml b/xdocs/Upgrade.xml
new file mode 100644
index 0000000..9e8aa93
--- /dev/null
+++ b/xdocs/Upgrade.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Upgrade</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+		<section name="Upgrading OpenMeetings via the Web-Interface">
+			<ol>
+				<li>
+					<p>There is a System Backup and Import tool. Login as Administrator and Administration &gt; Backup</p>
+					<a class="fancybox-buttons" href="images/backup.png"><img src="images/backup.png" alt="" width="600" /></a>
+					<p>
+						The Text in the Administration &gt; Backup section actually just says
+						it all. The backup contains users, rooms, organizations and
+						appointments (Invitations and Reminders are NOT included in the
+						Backup and Reminders will not be send again!). The Backup contains
+						also all uploaded Files and Documents and will re-import them again.
+		
+						Max Upload Size is 1000 MB.
+					</p>
+				</li>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Drop existing OM database</li>
+				<li>Create empty Database with same name and UTF-8 support</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li>(*) Modify DB settings</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+				<li>Install OM using Web installer</li>
+				<li>Login as Administrator and Administration &gt; Backup</li>
+				<li>Perform system import</li>
+			</ol>
+			<p>(*) Optional step</p>
+		</section>
+
+		<section name="Upgrading OpenMeetings from command line">
+			<p>
+				<i>You need OpenMeetings 2.x or later to have the command line interface (CLI) 
+					feature available
+				</i>
+			</p>
+			<p>
+				Alternatively to the Web-Installer you can also export and import via the command line. <br/>
+				<b>You should shutdown the Red5-Service while doing CLI export or import operations</b><br />
+				Cd to your red5-home directory, type "./admin.sh" and hit enter. You will get options available.<br />
+				<br />
+				A typical export would be:<br />
+				<tt>./admin.sh -b -file backup_today.zip</tt><br />
+				<br />
+				A typical import would be:<br />
+				<tt>./admin.sh -r -file backup_yesterday.zip</tt><br />
+				<br />
+				You can also combine the installation with a backup, that way you will create exactly the user table 
+				that existed in the backup.<br />
+				A typical install from backup would be:<br />
+				<tt>./admin.sh -i -file backup_yesterday.zip</tt><br/>
+				please see <a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a> for more options
+			</p>
+			<p><b>Detailed steps</b></p>
+			<ol>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li><tt>./admin.sh -v -b -file ../backup_today.zip</tt></li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li><tt>./admin.sh -v -i -file ../backup_today.zip --drop --skip-default-room</tt> (Optionally you can specify
+					additional parameters like DB host/user/pass/instance etc.)</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+			</ol>
+			<p>(*) Optional step</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/WebappNamePath.xml b/xdocs/WebappNamePath.xml
new file mode 100644
index 0000000..7d5f64b
--- /dev/null
+++ b/xdocs/WebappNamePath.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Webapp Name / Path</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Customize Openmeetings logo">
+			<p>If you want to set up your logo in Openmeetings header you can do the following:</p>
+			<ol>
+				<li>create your logo image as PNG 40px height</li>
+				<li>replace <tt>/opt/red5/webapps/openmeetings/public/themes/basic-theme/general/logo.png</tt> with your logo file</li>
+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/config.xml</tt> and modify <tt>appdisplay</tt> section: set position and display for the logo and/or name</li>
+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/theme.xml</tt> (around line 57) and change image name/path</li>
+			</ol>
+		</section>
+		<section name="Renaming /openmeetings context">
+			<p>
+				If you want to have
+				<tt>http://yourcorp.com:5080/yourmeetings</tt>
+				instead of
+				<tt>http://yourcorp.com:5080/openmeetings</tt>
+				you need to do the following
+			</p>
+			<ol>
+				<li>stop openmmetings if it is running </li>
+				<li>
+					go to openmeetings install dir (for ex.
+					<tt>/opt/red5</tt>
+					)
+				</li>
+				<li>
+					rename
+					<tt>/opt/red5/webapps/openmeetings</tt>
+					to
+					<tt>/opt/red5/webapps/yourmeetings</tt>
+					(for ex.
+					<tt>mv /opt/red5/webapps/openmeetings
+						/opt/red5/webapps/yourmeetings
+					</tt>
+					)
+				</li>
+				<li>
+					open
+					<tt>/opt/red5/webapps/yourmeetings/public/config.xml</tt>
+					using your favorite text editor (for ex.
+					<tt>vim /opt/red5/webapps/yourmeetings/public/config.xml</tt>
+					)
+				</li>
+				<li>
+					find and modify
+					<tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>
+					to be
+					<tt>&lt;webAppRootKey&gt;</tt>
+					<strong>yourmeetings</strong>
+					<tt>&lt;/webAppRootKey&gt;</tt>
+				</li>
+				<li>
+					find and modify
+					<tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>
+					to be
+					<tt>&lt;httpRootKey&gt;</tt>
+					<strong>/yourmeetings/</strong>
+					<tt>&lt;/httpRootKey&gt;</tt>
+				</li>
+			</ol>
+			That's it
+		</section>
+
+		<section name="Changing hard-coded application name in string labels">
+			<p>
+				To have
+				<i>Your Application Name</i>
+				instead of
+				<i>Openmeetings</i>
+				in
+				<strong>all</strong>
+				text labels you need to do the following
+			</p>
+			<ol>
+				<li>
+					ensure
+					<strong>
+						<tt>$APP_NAME</tt>
+					</strong>
+					placeholder is used in
+					<i>all</i>
+					strings you have added and/or modified (all strings bundled into
+					Openmeetings already have this placeholder)
+				</li>
+				<li>login to Openmeetings as user with administrator privileges </li>
+				<li>
+					go to
+					<tt>Administration -&gt; Configuration</tt>
+				</li>
+				<li>
+					find and edit configuration with name
+					<strong>
+						<tt>application.name</tt>
+					</strong>
+				</li>
+				<li>
+					Set its value to be
+					<i>
+						<tt>Your Application Name</tt>
+					</i>
+				</li>
+				<li>
+					<tt>Save</tt>
+				</li>
+				<li>reload page or relogin </li>
+			</ol>
+			<p>
+			All string will display
+			<i>
+				<tt>Your Application Name</tt>
+			</i>
+			in place of
+			<i>
+				<tt>Openmeetings</tt>
+			</i>
+			</p>
+			<p>
+				Please
+				<i>NOTE</i>
+				there are 3 additional properties in the public/config.xml file which
+				should be modified for
+				<strong>TOTAL</strong>
+				Openmeetings clean up:
+			</p>
+			<div class="xmlcode">
+				&lt;currentappname&gt;OpenMeetings&lt;/currentappname&gt;
+				<br />
+				&lt;currentappnameurl&gt;http://openmeetings.apache.org&lt;/currentappnameurl&gt;
+				<br />
+				&lt;currentappnamebugurl&gt;https://issues.apache.org/jira/browse/OPENMEETINGS&lt;/currentappnamebugurl&gt;
+				<br />
+			</div>
+
+		</section>
+
+		<section name="Running multiple Openmeetings instances on the same server">
+			<p>
+				If you want to run multiple Openmeetings instances on the same server i.e. to have<br/>  
+				<tt>http://yourcorp.com:5080/openmeetings1</tt><br/> 
+				<tt>http://yourcorp.com:5080/openmeetings2</tt><br/> etc.<br/> you need to do the following:
+			</p>
+			<ol>
+				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 
+				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 
+				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)
+				</li>
+				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br/>
+					<div class="xmlcode">
+					export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"
+					</div>
+					or <tt>red5.bat</tt>:<br/>
+					<div class="xmlcode">
+					set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M
+					</div>
+				</li>
+			</ol>
+		</section>
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/WebcamResolutions.xml b/xdocs/WebcamResolutions.xml
new file mode 100644
index 0000000..697d1e4
--- /dev/null
+++ b/xdocs/WebcamResolutions.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>How to configure Camera default resolutions </title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="How to configure Camera default resolutions">
+
+			<p>When you choose the webcam you have different resolutions
+				available the user can choose from. </p>
+			<p>You can add/remove resolutions and also change the default
+				selection. In the public/config.xml there is a section: </p>
+			<div class="xmlcode">
+				&lt;availableCameraResolutions&gt;<br/>
+				<div style="margin-left:20px">
+				    &lt;resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" /&gt;<br/>
+				    &lt;resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="XGA 4:3" width="1024" height="768" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="16:9" width="256" height="150" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="pseudo 16:9" width="480" height="234" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="16:9" width="512" height="300" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="nHD 16:9" width="640" height="360" isDefault="false" /&gt;<br/>
+				    &lt;resolution type="16:9" width="1024" height="600" isDefault="false" /&gt;<br/>
+				    </div>
+				&lt;/availableCameraResolutions&gt;			 
+			</div>	
+		      
+		    <p>Tip: You might edit the public/config.xml with an XML aware editor that correctly 
+		    handles the XSD defintion to avoid misconfiguration. The openmeetings-config.xsd 
+		    is in the same folder like the public/config.xml. </p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/WebsiteGuide.xml b/xdocs/WebsiteGuide.xml
new file mode 100644
index 0000000..3aafba4
--- /dev/null
+++ b/xdocs/WebsiteGuide.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Release Guide</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="How to update Apache OpenMeetings website">
+
+			<subsection name="Required tools">
+				<div>
+					<ul>
+						<li>Sun JDK6</li>
+						<li>Apache ANT (1.8 or later)</li>
+					</ul>
+				</div>
+			</subsection>
+			
+			<subsection name="Introduction">
+				<div>
+					<p>
+						The Apache OpenMeetings HTML websites are generated from XML files. 
+						You edit the XML files, run the ANT command "ant anakia" that generates the HTML files 
+						and then you checkin to SVN both: XML and HTML files.
+					</p>
+					<p>
+						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.
+					</p>
+				</div>
+			</subsection>
+
+			<subsection name="Editing the website">
+				<div>
+					<p>
+						OpenMeetings website (
+						<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>
+						) is a copy from the SVN repository.
+						<br />
+						The file in the SVN to be synced are at:
+						<br />
+						<a
+							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/
+						</a>
+						<br/>and<br/>
+						<a
+							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/
+						</a>
+					</p>
+					
+					<div>
+						To update the website you checkout trunk:
+						<br />
+						<a
+							href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
+						</a> <br/>
+						edit the files in the folder <tt>xdocs</tt><br/>
+						then you run the command:
+						<div class="xmlcode">
+							ant anakia
+						</div>
+						control the output locally in the folder <tt>docs</tt><br/>
+						And then checkin into the SVN <i>both</i> the edited xml and generated html files.
+					</div>
+					
+					<p>
+						The public website is automatically synced with the SVN repository.<br/>
+						Changes to the SVN should be immediately synced to the production website.<br/>
+						If not you might login to people.apache.org,<br/>
+						cd to <tt>/www/openmeetings.apache.org/content/</tt><br/>
+						and run the linux command "touch" on the files that need to be synced
+					</p>
+				</div>
+			</subsection>
+			
+			<subsection name="Adding a new menu entry">
+				<div>
+					To add a new menu entry in the left side panel you need to modify the file: 
+					<br/>
+					<tt>xdocs/stylesheets/project.xml</tt>
+				</div>
+			</subsection>
+			
+			<subsection name="Writing a new macro">
+				<div>
+					<p>
+						You can write macros in a template language to parse from the XML files certain aspects.
+					</p>
+					<p>
+						To add a new macro see the file:<br/>
+						<tt>xdocs/stylesheets/site.vsl</tt>
+					</p>
+				</div>
+				
+			</subsection>
+
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/commercial-support.xml b/xdocs/commercial-support.xml
new file mode 100644
index 0000000..ec125be
--- /dev/null
+++ b/xdocs/commercial-support.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Commercial Support</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Commercial Support for OpenMeetings">
+
+			<p>There are few companies offering complex services for OpenMeetings, including code support,
+			development, integration and bug fixing
+			</p>
+			<ul>
+				<li>
+					<a href="http://www.webbase-design.de/" target="_BLANK">webbase-design.de
+					</a>
+					owned by Sebastian Wagner
+				</li>
+				<li>
+					<a href="http://www.dataved.ru" target="_BLANK">dataved.ru
+					</a>
+					run by Alexei Fedotov, Maxim Solodovnik, Timur Tleukenov, Irina Arkhipets, Denis Kandrov, Vasily Degtyarev
+				</li>
+				<li>
+                    <a href="http://www.samoo.es" target="_BLANK" rel="nofollow">samoo.es</a>
+                    provides support for the Sakai Plugin
+                </li>
+			</ul>
+			<p>
+                            Please write to <a href="mailto:support-om@dataved.ru">support-om@dataved.ru</a> to get WebBase-Design or Dataved support
+			</p>
+			<p>
+			    There are more companies offering installation, customization, hosting, conferencing and support services. You can add 
+				yourself to the <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Commercial+Support">wiki page</a>.
+			</p>
+			
+			<p>
+				Want to get listed here? Become a <a href="http://www.apache.org/dev/committers.html">committer</a>.
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/css/1b.png b/xdocs/css/1b.png
new file mode 100644
index 0000000..0d70d76
--- /dev/null
+++ b/xdocs/css/1b.png
Binary files differ
diff --git a/xdocs/css/2b.png b/xdocs/css/2b.png
new file mode 100644
index 0000000..a93e132
--- /dev/null
+++ b/xdocs/css/2b.png
Binary files differ
diff --git a/xdocs/css/3b.png b/xdocs/css/3b.png
new file mode 100644
index 0000000..f9d8b7a
--- /dev/null
+++ b/xdocs/css/3b.png
Binary files differ
diff --git a/xdocs/css/4b.png b/xdocs/css/4b.png
new file mode 100644
index 0000000..c6e41f4
--- /dev/null
+++ b/xdocs/css/4b.png
Binary files differ
diff --git a/xdocs/css/openmeetings.css b/xdocs/css/openmeetings.css
new file mode 100644
index 0000000..7f80af6
--- /dev/null
+++ b/xdocs/css/openmeetings.css
@@ -0,0 +1,84 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+body {
+	color: #000000;
+	margin: 0;
+	background: #fafafa;
+	font: 10pt Verdana, Arial, Helvetica, sans-serif;
+	  
+}
+.active {
+	font-style: italic;
+}
+
+.mainbody {
+	margin-left: 40px;
+	margin-right: 40px;
+	-moz-box-shadow: 4px 0px 5px #666666;
+	-webkit-box-shadow: 4px 0px 5px #666666;
+	box-shadow: 4px 0px 5px #666666;
+}
+.superbody {
+	background: #FFFFFF;
+	-moz-box-shadow: -4px 0px 5px #666666;
+	-webkit-box-shadow: -4px 0px 5px #666666;
+	box-shadow: -4px 0px 5px #666666;
+}
+
+/* Box CSS  */
+div {
+	margin: 0;
+}
+
+
+.ro {
+	background: url(2b.png) top right no-repeat;
+}
+
+.lo {
+	background: url(1b.png) top left no-repeat;
+}
+
+.ru {
+	background: url(3b.png) bottom right no-repeat;
+}
+
+.lu {
+	background: url(4b.png) bottom left no-repeat;
+}
+
+ul {
+	margin-top: 0em;
+	padding-left: 1.5em;
+}
+
+.inhalt {
+	margin: 0;
+	padding: 0.5em 2.0em 1.5em 1.0em;
+}
+
+.inhalt p {
+	margin: 0;
+	padding: 0;
+}
+.xmlcode {
+	margin-left: 20px;
+	background-color: #eeeeee;
+	color: #0000ff;
+	margin-top: 10px;
+	margin-bottom: 10px;
+}
\ No newline at end of file
diff --git a/xdocs/demo.xml b/xdocs/demo.xml
new file mode 100644
index 0000000..2a7f9ad
--- /dev/null
+++ b/xdocs/demo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Mailing Lists</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+		<section name="Apache OpenMeetings Demo Servers">
+
+			<p>
+				There are currently some technical issues with demo servers.
+			</p>
+			<p>
+				This is a list of servers that you can use for testing OpenMeetings.
+			</p>
+			<p>
+				<a href="http://demo.dataved.ru/openmeetings" target="_BLANK" rel="nofollow">http://demo.dataved.ru/openmeetings</a>
+			</p>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/dependencies.xml b/xdocs/dependencies.xml
new file mode 100644
index 0000000..dec7df6
--- /dev/null
+++ b/xdocs/dependencies.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+ <properties>
+<title>Project Dependencies</title>
+<author email="sebawagner@apache.org">
+ OpenMeetings Documentation Team</author>
+</properties>
+
+<body>
+<section name="The Apache Podling Project">
+
+<div>
+<p> 
+The common external dependencies of OpenMeetings include the tools used to build 
+and test it:
+</p>
+
+<ul>
+<li>Subversion</li>
+<li>Ant</li>
+<li>JUnit</li>
+</ul>
+
+<p>OpenMeetings will actively download resources from the online repositories while building.</p>
+
+</div>
+</section>
+
+</body>
+</document>
+   
diff --git a/xdocs/documentation.xml b/xdocs/documentation.xml
new file mode 100644
index 0000000..b27f399
--- /dev/null
+++ b/xdocs/documentation.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+<properties>
+<title>Documentation</title>
+<author email="sebawagner@apache.org">
+ Podling Documentation Team</author>
+</properties>
+
+<body>
+<section name="OpenMeetings Documentation">
+
+<p>
+Wiki is to be linked here, coming soon ...
+
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+
+</p>
+
+</section>
+
+</body>
+
+</document>
+
diff --git a/xdocs/downloads.xml b/xdocs/downloads.xml
new file mode 100644
index 0000000..faf49dc
--- /dev/null
+++ b/xdocs/downloads.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Downloads</title>
+		<author email="sebawagner@apache.org">
+			Podling Documentation Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Downloads">
+			<div>
+				All downloads can be verified using the Apache OpenMeetings code
+				signing <a href="https://www.apache.org/dist/openmeetings/3.0.0/KEYS">KEYS</a>.
+			</div>
+			<p>
+				All are available for download as source and binary.
+			</p>
+			
+			<subsection name="Latest Official Release">
+				<p>
+					Apache Openmeetings 3.0.0
+				</p>
+				<ul>
+					<li>
+						Binaries:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip">apache-openmeetings-3.0.0.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz">apache-openmeetings-3.0.0.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+					<li>
+						Sources:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip">apache-openmeetings-3.0.0-src.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz">apache-openmeetings-3.0.0-src.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				
+			</subsection>
+
+			<subsection name="Previous Official Releases">
+				<p>
+					Apache Openmeetings releases available here:
+					<a href="http://archive.apache.org/dist/openmeetings/">http://archive.apache.org/dist/openmeetings/</a>
+				</p>
+				<p>
+					Apache Openmeetings Incubating 2.0 is available here:
+					<a href="http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating/">http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating</a>
+				</p>
+			</subsection>
+
+			<subsection name="Plugins / Non ASF downloads">
+			
+				<p>
+					If you are looking for more plugins for 3th party applications (Moodle, Drupal, Joomla, ...) check out <a href="http://code.google.com/a/apache-extras.org/hosting/search?q=openmeetings" target="_BLANK" rel="nofollow">apache-extras.org</a>.
+				</p>
+			
+				<p>
+					OpenMeetings releases that are not part of the ASF can be downloaded from the
+					old
+					<a href="http://code.google.com/p/openmeetings/downloads/list"
+						target="_BLANK">GoogleCode website</a>
+				</p>
+			</subsection>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/get-involved.xml b/xdocs/get-involved.xml
new file mode 100644
index 0000000..7c2b823
--- /dev/null
+++ b/xdocs/get-involved.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Get Involved</title>
+		<author email="dev@openmeetings.apache.org">
+			OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="How do I contribute, give feedback, fix bugs and so on?">
+
+			<p>
+				The Apache OpenMeetings project really needs and appreciates any
+				contributions,
+				including documentation help, source code and
+				feedback. Suggested
+				changes should come in the form of source code
+				and/or very detailed
+				and constructive feedback.
+			</p>
+
+			<ul>
+				<li>
+					Discussion occurs on the
+					<a href="mail-lists.html">OpenMeetings mailing lists</a>
+				</li>
+				<li>
+					Information on access to the project source code is
+					available
+					<a href="svn.html">here</a>
+					.
+				</li>
+				<li>
+					Bugs and other issues can be posted on the project
+					<a href="https://issues.apache.org/jira/browse/OPENMEETINGS">JIRA</a>
+					(
+					<a href="https://issues.apache.org/jira/secure/Signup!default.jspa">sign up</a>
+					).
+				</li>
+				<li>
+					Additional documentation and discussion can be contributed to the
+					project
+					<a href="https://cwiki.apache.org/OPENMEETINGS">Wiki</a>
+					(
+					<a href="https://cwiki.apache.org/confluence/signup.action">sign up</a>
+					).
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Which taks could I potentially work on?">
+
+			<p>
+				No matter if you want to share your experiences, improve
+				documentation, localization, code Java, ActionScript or PHP, there
+				are dozens of areas where you can find task to work on and share
+				with others.
+				<br />
+				<br />
+				We tried to collect a list of ideas in our wiki:
+				<br />
+				<a
+					href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list"
+					target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+			</p>
+
+		</section>
+
+		<section name="How do I become a committer?">
+			<p>If you're interested in committing to the project: </p>
+			<ul>
+				<li>
+					<p>
+						You'll need to fill out some legal paperwork and go through
+						a
+						process to get an apache foundation committer account: See
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/new-committers-guide.html">
+							New Committers Guide
+						</a>
+						,
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/contributors.html"> Contributors</a>
+						, and
+						<a class="external" rel="nofollow" href="http://apache.org/dev/committers.html"> Committers</a>
+						for more details.
+					</p>
+
+				</li>
+				<li>
+					<p>
+						After you've received an email from
+						<a href="mailto:root@apache.org">root@apache.org</a>
+						with your committer account information, change your initial
+						password:
+						Login by 'ssh -l &lt;username&gt; people.apache.org';
+						run
+						'passwd';
+						run 'svnpasswd'. See
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/version-control.html">Committer Subversion Access
+						</a>
+						.
+					</p>
+				</li>
+				<li>
+					<p>
+						Check out the OpenMeetings sources and test your svn account:
+						<a href="http://svn.apache.org/viewvc/openmeetings/">
+							SubversionRepository
+						</a>
+						.
+					</p>
+
+				</li>
+
+			</ul>
+
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/images/Arguments.png b/xdocs/images/Arguments.png
new file mode 100644
index 0000000..7427236
--- /dev/null
+++ b/xdocs/images/Arguments.png
Binary files differ
diff --git a/xdocs/images/DebugConfigurations.png b/xdocs/images/DebugConfigurations.png
new file mode 100644
index 0000000..c572dda
--- /dev/null
+++ b/xdocs/images/DebugConfigurations.png
Binary files differ
diff --git a/xdocs/images/Features_Screen_Conference_Room_Thumb.png b/xdocs/images/Features_Screen_Conference_Room_Thumb.png
new file mode 100644
index 0000000..19dece9
--- /dev/null
+++ b/xdocs/images/Features_Screen_Conference_Room_Thumb.png
Binary files differ
diff --git a/xdocs/images/NewConfiguration.png b/xdocs/images/NewConfiguration.png
new file mode 100644
index 0000000..45f3d62
--- /dev/null
+++ b/xdocs/images/NewConfiguration.png
Binary files differ
diff --git a/xdocs/images/SugarCRM_Installation.png b/xdocs/images/SugarCRM_Installation.png
new file mode 100644
index 0000000..b652b7b
--- /dev/null
+++ b/xdocs/images/SugarCRM_Installation.png
Binary files differ
diff --git a/xdocs/images/apache_feather.gif b/xdocs/images/apache_feather.gif
new file mode 100644
index 0000000..1a0c3e6
--- /dev/null
+++ b/xdocs/images/apache_feather.gif
Binary files differ
diff --git a/xdocs/images/audio_and_video.png b/xdocs/images/audio_and_video.png
new file mode 100644
index 0000000..f35bb10
--- /dev/null
+++ b/xdocs/images/audio_and_video.png
Binary files differ
diff --git a/xdocs/images/backup.png b/xdocs/images/backup.png
new file mode 100644
index 0000000..f174339
--- /dev/null
+++ b/xdocs/images/backup.png
Binary files differ
diff --git a/xdocs/images/calendar.png b/xdocs/images/calendar.png
new file mode 100644
index 0000000..25f7978
--- /dev/null
+++ b/xdocs/images/calendar.png
Binary files differ
diff --git a/xdocs/images/chat.png b/xdocs/images/chat.png
new file mode 100644
index 0000000..ce9c040
--- /dev/null
+++ b/xdocs/images/chat.png
Binary files differ
diff --git a/xdocs/images/checkout_1.png b/xdocs/images/checkout_1.png
new file mode 100644
index 0000000..950891a
--- /dev/null
+++ b/xdocs/images/checkout_1.png
Binary files differ
diff --git a/xdocs/images/checkout_2.png b/xdocs/images/checkout_2.png
new file mode 100644
index 0000000..f31050b
--- /dev/null
+++ b/xdocs/images/checkout_2.png
Binary files differ
diff --git a/xdocs/images/checkout_3.png b/xdocs/images/checkout_3.png
new file mode 100644
index 0000000..94d21ce
--- /dev/null
+++ b/xdocs/images/checkout_3.png
Binary files differ
diff --git a/xdocs/images/checkout_4.png b/xdocs/images/checkout_4.png
new file mode 100644
index 0000000..7fcf576
--- /dev/null
+++ b/xdocs/images/checkout_4.png
Binary files differ
diff --git a/xdocs/images/checkout_5.png b/xdocs/images/checkout_5.png
new file mode 100644
index 0000000..e102426
--- /dev/null
+++ b/xdocs/images/checkout_5.png
Binary files differ
diff --git a/xdocs/images/checkout_6.png b/xdocs/images/checkout_6.png
new file mode 100644
index 0000000..8dd9189
--- /dev/null
+++ b/xdocs/images/checkout_6.png
Binary files differ
diff --git a/xdocs/images/checkout_7.png b/xdocs/images/checkout_7.png
new file mode 100644
index 0000000..4168d93
--- /dev/null
+++ b/xdocs/images/checkout_7.png
Binary files differ
diff --git a/xdocs/images/checkout_8.png b/xdocs/images/checkout_8.png
new file mode 100644
index 0000000..0494bb5
--- /dev/null
+++ b/xdocs/images/checkout_8.png
Binary files differ
diff --git a/xdocs/images/checkout_9.png b/xdocs/images/checkout_9.png
new file mode 100644
index 0000000..b083d00
--- /dev/null
+++ b/xdocs/images/checkout_9.png
Binary files differ
diff --git a/xdocs/images/choose_divice.png b/xdocs/images/choose_divice.png
new file mode 100644
index 0000000..1e38713
--- /dev/null
+++ b/xdocs/images/choose_divice.png
Binary files differ
diff --git a/xdocs/images/cluster1.png b/xdocs/images/cluster1.png
new file mode 100644
index 0000000..672ffc4
--- /dev/null
+++ b/xdocs/images/cluster1.png
Binary files differ
diff --git a/xdocs/images/cluster2.png b/xdocs/images/cluster2.png
new file mode 100644
index 0000000..6d47e1d
--- /dev/null
+++ b/xdocs/images/cluster2.png
Binary files differ
diff --git a/xdocs/images/cut_administration_configuration.png b/xdocs/images/cut_administration_configuration.png
new file mode 100644
index 0000000..c54ac9c
--- /dev/null
+++ b/xdocs/images/cut_administration_configuration.png
Binary files differ
diff --git a/xdocs/images/cut_conference_room.png b/xdocs/images/cut_conference_room.png
new file mode 100644
index 0000000..1a50a25
--- /dev/null
+++ b/xdocs/images/cut_conference_room.png
Binary files differ
diff --git a/xdocs/images/cut_file_explorer.png b/xdocs/images/cut_file_explorer.png
new file mode 100644
index 0000000..4e5d0c7
--- /dev/null
+++ b/xdocs/images/cut_file_explorer.png
Binary files differ
diff --git a/xdocs/images/cut_integrated_calendar.png b/xdocs/images/cut_integrated_calendar.png
new file mode 100644
index 0000000..3188354
--- /dev/null
+++ b/xdocs/images/cut_integrated_calendar.png
Binary files differ
diff --git a/xdocs/images/cut_integration_api.png b/xdocs/images/cut_integration_api.png
new file mode 100644
index 0000000..7cf6264
--- /dev/null
+++ b/xdocs/images/cut_integration_api.png
Binary files differ
diff --git a/xdocs/images/cut_private_messages.png b/xdocs/images/cut_private_messages.png
new file mode 100644
index 0000000..c080851
--- /dev/null
+++ b/xdocs/images/cut_private_messages.png
Binary files differ
diff --git a/xdocs/images/cut_recordings_playback.png b/xdocs/images/cut_recordings_playback.png
new file mode 100644
index 0000000..906d798
--- /dev/null
+++ b/xdocs/images/cut_recordings_playback.png
Binary files differ
diff --git a/xdocs/images/dashboard.png b/xdocs/images/dashboard.png
new file mode 100644
index 0000000..66152bd
--- /dev/null
+++ b/xdocs/images/dashboard.png
Binary files differ
diff --git a/xdocs/images/desktopsharing.png b/xdocs/images/desktopsharing.png
new file mode 100644
index 0000000..94e8add
--- /dev/null
+++ b/xdocs/images/desktopsharing.png
Binary files differ
diff --git a/xdocs/images/file_smal.png b/xdocs/images/file_smal.png
new file mode 100644
index 0000000..69dcc46
--- /dev/null
+++ b/xdocs/images/file_smal.png
Binary files differ
diff --git a/xdocs/images/installation_instructions.png b/xdocs/images/installation_instructions.png
new file mode 100644
index 0000000..64ab05a
--- /dev/null
+++ b/xdocs/images/installation_instructions.png
Binary files differ
diff --git a/xdocs/images/langeditor_screen_v2.png b/xdocs/images/langeditor_screen_v2.png
new file mode 100644
index 0000000..fbaf47d
--- /dev/null
+++ b/xdocs/images/langeditor_screen_v2.png
Binary files differ
diff --git a/xdocs/images/ldap_screen.png b/xdocs/images/ldap_screen.png
new file mode 100644
index 0000000..e28bbc3
--- /dev/null
+++ b/xdocs/images/ldap_screen.png
Binary files differ
diff --git a/xdocs/images/logo-2.jpg b/xdocs/images/logo-2.jpg
new file mode 100644
index 0000000..13c2512
--- /dev/null
+++ b/xdocs/images/logo-2.jpg
Binary files differ
diff --git a/xdocs/images/micro_small.png b/xdocs/images/micro_small.png
new file mode 100644
index 0000000..215c831
--- /dev/null
+++ b/xdocs/images/micro_small.png
Binary files differ
diff --git a/xdocs/images/monitor_add.png b/xdocs/images/monitor_add.png
new file mode 100644
index 0000000..a818066
--- /dev/null
+++ b/xdocs/images/monitor_add.png
Binary files differ
diff --git a/xdocs/images/mouse_add.png b/xdocs/images/mouse_add.png
new file mode 100644
index 0000000..65bcab5
--- /dev/null
+++ b/xdocs/images/mouse_add.png
Binary files differ
diff --git a/xdocs/images/pencil_add.png b/xdocs/images/pencil_add.png
new file mode 100644
index 0000000..902bbe6
--- /dev/null
+++ b/xdocs/images/pencil_add.png
Binary files differ
diff --git a/xdocs/images/poll.png b/xdocs/images/poll.png
new file mode 100644
index 0000000..5b51c9b
--- /dev/null
+++ b/xdocs/images/poll.png
Binary files differ
diff --git a/xdocs/images/pollresult.png b/xdocs/images/pollresult.png
new file mode 100644
index 0000000..88c38df
--- /dev/null
+++ b/xdocs/images/pollresult.png
Binary files differ
diff --git a/xdocs/images/privat_messages.png b/xdocs/images/privat_messages.png
new file mode 100644
index 0000000..cc6e245
--- /dev/null
+++ b/xdocs/images/privat_messages.png
Binary files differ
diff --git a/xdocs/images/recordings_timeleine.png b/xdocs/images/recordings_timeleine.png
new file mode 100644
index 0000000..407719e
--- /dev/null
+++ b/xdocs/images/recordings_timeleine.png
Binary files differ
diff --git a/xdocs/images/right_management.png b/xdocs/images/right_management.png
new file mode 100644
index 0000000..da287a6
--- /dev/null
+++ b/xdocs/images/right_management.png
Binary files differ
diff --git a/xdocs/images/system_backup.png b/xdocs/images/system_backup.png
new file mode 100644
index 0000000..ffc2964
--- /dev/null
+++ b/xdocs/images/system_backup.png
Binary files differ
diff --git a/xdocs/images/user_add.png b/xdocs/images/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/xdocs/images/user_add.png
Binary files differ
diff --git a/xdocs/images/vote.png b/xdocs/images/vote.png
new file mode 100644
index 0000000..c16ff86
--- /dev/null
+++ b/xdocs/images/vote.png
Binary files differ
diff --git a/xdocs/images/whiteboard.png b/xdocs/images/whiteboard.png
new file mode 100644
index 0000000..8e5392f
--- /dev/null
+++ b/xdocs/images/whiteboard.png
Binary files differ
diff --git a/xdocs/index.xml b/xdocs/index.xml
new file mode 100644
index 0000000..110c6bb
--- /dev/null
+++ b/xdocs/index.xml
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Apache OpenMeetings - Features and overview">
+
+			<div id="coin-slider">
+				<a href="#">
+					<img src="images/cut_conference_room.png" alt="Conference Room" />
+					<span>
+						<b>Audio/Video Conferencing</b>
+						<br />
+						OpenMeetings enables you to make Audio/Video conferencing.
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integrated_calendar.png" alt="Calendar" />
+					<span>
+						<b>Calendar</b>
+						<br />
+						You can create meetings with the integrated calendar, conference rooms and invitations are automatically send to everybody
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_file_explorer.png" alt="File Explorer" />
+					<span>
+						<b>File Explorer</b>
+						<br />
+						Each room has its own File-Explorer. Each user has his own private drive and additionally there is a public drive to share files with other participants
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integration_api.png" alt="Integration API" />
+					<span>
+						<b>Integration API</b>
+						<br />
+						There is a SOAP/REST API to integrate into your website or intranet, as well
+						as LDAP/ADS connectors and VoIP/Asterisk integration modules
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_private_messages.png" alt="Private messages" />
+					<span>
+						<b>Private messages and contacts</b>
+						<br />
+						From the private message center you can send invitations by email
+						and attach meeting invitations to every email
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_administration_configuration.png" alt="Administration" />
+					<span>
+						<b>Administration and Configuration</b>
+						<br />
+						You can configure users, rooms, usergroups, config settings or
+						edit labels with a Web-Frontend integrated in the application
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_recordings_playback.png" alt="Share and Record" />
+					<span>
+						<b>Screen sharing and Recording</b>
+						<br />
+						You can do screen sharing as well as recording of whole sessions
+						including audio/video. Recordings can be downloaded as AVI/FLV or
+						watched online in the integrated player.
+					</span>
+				</a>
+
+			</div>
+
+
+			<p> Openmeetings provides video conferencing, instant messaging,
+				white board, collaborative document editing and other groupware
+				tools using API functions of the Red5 Streaming Server for Remoting
+				and Streaming.
+			</p>
+
+			<p>
+				OpenMeetings is a project of the Apache, the old project
+				website at
+				<a href="http://code.google.com/p/openmeetings/" target="_BLANK">GoogleCode
+				</a>
+				will receive no updates anymore. The website at Apache is the only
+				place that receives updates.
+			</p>
+
+		</section>
+
+		<section name="News">
+
+			<p>
+			    <strong>
+                    Version 2.2.0 released! See <a href="downloads.html">Downloads page</a>. 
+                    (2013-12-12)
+                </strong>
+                <br />
+			    <strong>
+                    Version 2.1.1 released! See <a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_1_11" target="_BLANK">Project Blog</a> or <a href="downloads.html">Downloads page</a>. 
+                    (2013-07-06)
+                </strong>
+                <br />
+			    <strong>
+					OpenMeetings 2.1.0 is released! Please check <a href="downloads.html">Downloads page</a>. 
+					(2013-04-01)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings new URL, update your filters!
+					<a href="http://openmeetings.apache.org">openmeetings.apache.org</a> is the new home. 
+					(2013-01-28)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings on the road to graduate from the Incubator
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_on_the_road_to" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-12-07)
+				</strong>
+				<br />
+				<strong>
+					Some slides from our Fast Feather Track at the ApacheCon Europe 2012 
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_apachecon_presentation_slide" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-11-18)
+				</strong>
+				<br />
+				<strong>
+					Update: Builds are available at
+					<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" target="_BLANK" rel="nofollow">builds.apache.org</a>
+					(2012-08-03)
+				</strong>
+				<br />
+				<strong>
+					<a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_0_incubating" target="_BLANK" rel="nofollow">Version 2.0 released</a>
+					(2012-07-26)
+				</strong>
+				<br />
+				<strong>New committer: Timur Tleukenov (2012-03-06)</strong>
+				<br />
+				<strong>
+					<a href="http://demo.openmeetings.de" target="_BLANK" rel="nofollow">Demo
+						server</a>
+					updated to r1236172 (2012-01-26)
+				</strong>
+				<br />
+				<strong>New committer: German Grekhov (2011-12-26)</strong>
+				<br />
+				<strong>OpenMeetings has been accepted into the Apache Incubator
+					(2011-11-12).
+				</strong>
+			</p>
+
+		</section>
+
+		<section name="Community">
+			<div>
+				<strong>Who we are</strong>
+				<blockquote>
+					<a href="team-list.html">List of committers</a>
+					.
+				</blockquote>
+			</div>
+			<div>
+				<strong>Users!</strong>
+				<blockquote>
+					We'd love to have you involved. Check out the
+					<a href="get-involved.html">Get involved</a>
+					.
+				</blockquote>
+			</div>
+		</section>
+
+		<section name="Feature details">
+
+			<feature title="Audio and Video Conferencing">
+
+				<image fullhref="images/Features_Screen_Conference_Room_Thumb.png"
+					href="images/Features_Screen_Conference_Room_Thumb.png" title="OpenMeetings Conference Room"
+					width="250" height="175" />
+				<text>
+				<div>
+					There are four options to use OpenMeetings audio/video functions,
+					which you can select during a conference session.
+					<ul>
+						<li>audio + video</li>
+						<li>audio only</li>
+						<li>video only</li>
+						<li>picture only</li>
+					</ul>
+					Additional you can change video-/audio-quality, choose multiple
+					camera resolutions (4:3, 16:9 or 3:2)
+					and choose your input devices.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Meeting recording and Screen sharing">
+
+				<image href="images/desktopsharing.png" fullhref="images/desktopsharing.png"
+					title="Screensharing-/recording" width="140" height="150" />
+				<image href="images/recordings_timeleine.png" fullhref="images/recordings_timeleine.png"
+					title="Device" width="200" height="115" />
+					
+				<text>
+				<div>
+					<ul>
+						<li>Recorded sessions contain everything including sound recorded
+							from all audio streams in exactly the way you've seen it in the
+							conference.
+						</li>
+					</ul>
+					<ul>
+						<li>Recorded sessions can be downloaded as AVI/FLV files.</li>
+					</ul>
+					<ul>
+						<li>Possibility to select a screen area for sharing.</li>
+					</ul>
+					<ul>
+						<li>Different quality steps for Screensharing.</li>
+					</ul>
+					<ul>
+						<li>Watch and organize recordings in an integrated Drag and Drop
+							File-Explorer
+						</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+			<feature title="File Explorer">
+
+				<image href="images/file_smal.png" title="File Explorer"
+					fullhref="images/file_smal.png" width="135" height="200" />
+				<text>
+				<div>
+					Advanced File-Explorer in every conference room, Drag and Drop
+					interface for managing uploaded files, including the possibility to
+					create a document tree with folders.
+					<br />
+					<br />
+					Private and Public Drive in
+					File-Explorer. The File-Explorer has two
+					different views, one is the
+					<b>Private Drive</b>
+					and the other the
+					<b>Public Drive</b>
+					. The Private Drive
+					always contains the same files.
+					Those files are
+					visible only to the
+					user currently loggedin. The
+					Public Drive is not
+					bound to the user,
+					but to the conference room
+					instead. All users in
+					the conference room
+					have access to the Public
+					Drive.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Moderating System">
+
+				<image href="images/right_management.png" title="Right management"
+					fullhref="images/right_management.png" width="135" height="216" />
+				<text>
+				<div>
+					During a conference, the moderator can adjust the user permission
+					to every user individually .
+					<ul>
+						<li>
+							<img class="alignnone" title="Allow modaration" src="images/user_add.png"
+								alt="" />
+							Allow/Deny moderation
+						</li>
+						<li>
+							<img class="alignnone" title="Whiteboard Access" src="images/pencil_add.png"
+								alt="" />
+							Allow/Deny to draw on white board
+						</li>
+						<li>
+							<img class="alignnone" title="Screenshare" src="images/monitor_add.png"
+								alt="" />
+							Allow/Deny screen-sharing/record screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/mouse_add.png"
+								alt="" />
+							Allow/Deny Remote Control Screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/micro_small.png"
+								alt="" />
+							Give exclusive audio to others or self
+						</li>
+						<li>
+							<img class="alignnone" title="Video Audio" src="images/audio_and_video.png"
+								alt="" />
+							(Re-) Start Audio, Video or Device settings
+						</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+
+			<feature title="Multi-Whiteboard and Chat">
+
+				<image href="images/whiteboard.png" fullhref="images/whiteboard.png"
+					title="Whiteboard" width="240" height="165" />
+				<image href="images/chat.png" fullhref="images/chat.png"
+					title="Chat in Conference Room" width="240" height="68" />
+				<text>
+				<div>
+					Multi-Whiteboard, you can add new whiteboard instances, each
+					white
+					board can have the full range of tools and documents inside.
+					<br />
+					<br />
+					Save white boards. You can save each whiteboard instance as a file.
+					The file is located in the File-Explorer and can be drag n' drop'ed
+					to the white board again and organized like any other document,
+					image or folder.
+					<br />
+					<br />
+					White board with drawing, writing, Drag n' Drop, Resizing, Images
+					(Drag n'
+					Drop from File-Explorer), Symbol(s)/Cliparts .
+					<br />
+					<br />
+					Full-fit does rescale the document on the screen to be 100% visible
+					on all
+					screens no matter what kind of screen resolution different
+					users
+					have.
+					<br />
+					<br />
+					You can import from a wide range of document formats (PDF, DOC,
+					ODT, PPT, et cetera...)
+				</div>
+				</text>
+			</feature>
+
+			<feature title="User and room management">
+
+				<image href="images/dashboard.png" fullhref="images/dashboard.png"
+					title="Dashboard with MyRooms" width="250" height="130" />
+				<text>
+				<div>
+					You can manage users and multiple organizations in a single
+					OpenMeetings instance. You can also create users that only have
+					access via the SOAP-API.
+					<br />
+					<br />
+					MyRooms section. Each user has by default 2 personal rooms that
+					are
+					always accessible exclusively for that user. There are buttons
+					to
+					enter those rooms from the Dashboard.
+					<br />
+					<br />
+					You can assign conference room to all users, or you can assign them
+					only to specific user-groups.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Private message center">
+				<image href="images/privat_messages.png" fullhref="images/privat_messages.png"
+					title="Private Messages and Contact Search" width="230" height="125" />
+				<text>
+				<div>
+					Send users messages and organize them in folders. You can book
+					conference rooms by sending private messages. The booked event
+					automatically is in your and the participants calendar, changes to
+					that event will be populated to all users booked to the event.
+					<br />
+					<br />
+					User contacts, you can search users and add them to your contacts.
+					You
+					can even give them the right to see your calendar.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Plan meetings with integrated calendar">
+				<image href="images/calendar.png" fullhref="images/calendar.png"
+					title="Calendar" width="200" height="115" />
+				<text>
+				<div>
+					<ul>
+						<li>Plan your conferencing and invite attendees from OpenMeetings
+							or External.
+						</li>
+						<li>The invited attendees will recieve an E-mail with details to
+							the meetings and a link with a secure hash to the conference
+							room.
+						</li>
+						<li>Share your calendar with your contacts.</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Polls and Votes">
+				<image href="images/poll.png" fullhref="images/poll.png"
+					title="Create a poll" width="250" height="250" />
+				<text>
+				<div>
+					You can create a poll with yes/no or 1-10 questions, let the
+					user
+					vote and see the voting results.
+					<br />
+					<br />
+					Polls can be stored and results viewed as pie-chart
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Backup">
+				<image href="images/backup.png" fullhref="images/backup.png" title="Backup" width="250" />
+				<text>
+				<div>
+					You can backup all user-generated data including files
+					uploaded by the users in a single ZIP file and import that ZIP into
+					a new installation of OpenMeetings again.
+				</div>
+				</text>
+			</feature>
+
+
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/installation.xml b/xdocs/installation.xml
new file mode 100644
index 0000000..03548db
--- /dev/null
+++ b/xdocs/installation.xml
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Installation">
+
+			<p>
+				To update from past versions or migrate see <a href="Upgrade.html">Upgrade</a>.<br/>
+				If you are looking for commercial help have a look at
+				<a href="commercial-support.html" target="_BLANK" rel="nofollow">commercial support</a>.
+			</p>
+			<div>
+				<a href="downloads.html" rel="nofollow">
+					<img src="images/installation_instructions.png" alt="Installation in 3 simple steps" />
+				</a>
+				<p>
+					<i>Note: OpenMeetings requires SUN/Oracle JRE 6, not openJDK!</i><br />
+					<i>
+						Since Version 2.0 you can also install OpenMeetings from command line. Just cd to the unpacked 
+						archive and type ./admin.sh or admin.bat, please see
+						<a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a>
+						for more options
+					</i>
+				</p>
+			</div>
+			<ol>
+				<li>
+					<b>Recommendation for production environment</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						By default OpenMeetings uses the integrated Apache Derby database.
+						For production environment you should consider using
+						<a href="MySQLConfig.html">MySQL</a>
+						,
+						<a href="PostgresConfig.html">Postgres</a>
+						, or for example
+						<a href="IBMDB2Config.html">IBM DB2</a>
+						, or
+						<a href="OracleConfig.html">Oracle</a>
+						, or
+						<a href="MSSQLConfig.html">MSSQL</a>
+					</div>
+				</li>
+				<li>
+					<b>Enabling Image Upload and import to whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						Install
+						<b>ImageMagick</b>
+						on the server, you can get more information on
+						<a href="http://www.imagemagick.org" rel="nofollow" target="_BLANK">http://www.imagemagick.org
+						</a>
+						regarding installation. The instructions
+						for installation can be
+						found there
+						<a href="http://www.imagemagick.org/script/binary-releases.php"
+							target="_BLANK" rel="nofollow">http://www.imagemagick.org/script/binary-releases.php
+						</a>
+						,
+						however on
+						most Linux systems you can get it via your favorite
+						package
+						managers (apt-get it)
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of PDFs into whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>GhostScript</b>
+								on the server, you can get more
+								information on
+								<a href="http://www.ghostscript.com/download/gsdnld.html" target="_BLANK"
+									rel="nofollow">
+									http://www.ghostscript.com/download/gsdnld.html
+								</a>
+								regarding
+								installation. The instructions for installation can be
+								found
+								there, however on most Linux systems you can get it via
+								your
+								favorite package managers (apt-get it).
+							</li>
+							<li>
+								Install
+								<b>SWFTools</b>
+								on the server, you can get more information
+								on
+								<a href="http://www.swftools.org/" target="_BLANK" rel="nofollow">http://www.swftools.org/
+								</a>
+								regarding installation. Some of the
+								Linux distributions already
+								have it in there package manager (see
+								<a href="http://packages.debian.org/unstable/utils/swftools"
+									target="_BLANK" rel="nofollow">http://packages.debian.org/unstable/utils/swftools
+								</a>
+								), the
+								recommended version of SWFTools is 0.9 as prior version
+								have a
+								bug that does lead to wrong object dimensions at
+								whiteboard
+							</li>
+						</ul>
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of .doc, .docx, .ppt, .pptx, ... all Office
+						Documents into whitebaord
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								<a href="http://code.google.com/p/jodconverter/" target="_BLANK"
+									rel="nofollow">JODConverter</a>
+								installed (needed since v2.x)
+							</li>
+							<li>OpenOffice or Libre Office Installed</li>
+						</ul>
+						Since Version 2.x of OpenMeetings it is no more required to start
+						OpenOffice (or Libreoffice) service, see
+						<a href="OpenOfficeConverter.html">OpenOfficeConverter</a>
+						for details
+					</div>
+				</li>
+				<li>
+					<b>Enabling Recording and import of .avi, .flv, .mov and .mp4 into
+						whiteboard
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>FFMpeg (with -enabled libmp3lame and libx264 options)</b>
+								. You should get FFMPEG in an up to date copy! OpenMeetings is
+								tested with FFMPEG Version 10.3 and latest build from GIT
+								For Windows you can download a Build for example from
+								<a href="http://ffmpeg.zeranoe.com/builds/" target="_BLANK"
+									rel="nofollow">http://ffmpeg.zeranoe.com/builds/ </a>
+								Linux or OSx Users should be able to use one of the various
+								Installation Instructions on the Web. You need to enable
+								libmp3lame and libx264!
+							</li>
+							<li>
+								Install
+								<b>SoX</b>
+								<a href="http://sox.sourceforge.net/" target="_BLANK" rel="nofollow">http://sox.sourceforge.net/
+								</a>
+								. You should install SoX in a up
+								to date copy! SoX 12.xx will NOT
+								work!
+							</li>
+						</ul>
+					</div>
+				</li>
+			</ol>
+
+		</section>
+
+		<section name="Ports, NAT Settings, Customize">
+
+			<p>
+				See
+				<a href="PortSettings.html">PortSettings</a>
+			</p>
+		</section>
+
+		<section name="VMWare">
+			<ul>
+				<li>
+					See
+					<a href="http://nightly.openmeetings.de/openmeetings/builds/vmware/"
+						rel="nofollow">http://nightly.openmeetings.de/openmeetings/builds/vmware/</a>
+				</li>
+				<li>
+					VMWare 1.6.1
+					<a
+						href="http://openstudio.no-ip.info/2011/01/openmeetings-1-6-rc1-vmware-appliance-using-ubuntu-server-10-04-lts/"
+						rel="nofollow">blog-entry</a>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Hardware Requirements">
+			<ul>
+				<li>
+					Minimalistic requirement (without Document Converters, Recorder and
+					Upload feature) 1GHz CPU 1 GB RAM (
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Recommended requirement 2x/4x 2GHz ++ CPU (32 or 64Bit) 4GB RAM. If
+					you have a 64Bit Operating System check if there is a OpenOffice
+					64Bit Version
+					<a href="http://download.openoffice.org/other.html#de" rel="nofollow">available
+						for your OS
+					</a>
+					(
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Headset/Microphone recommendation: Logitech ClearChat PC Wireless,
+					for example from
+					<a
+						href="http://www.amazon.de/Logitech-ClearChat-kabelloser-Kopfh%C3%B6rer-Transmitter/dp/B00166WSN4"
+						rel="nofollow">Amazon</a>
+					or
+					<a
+						href="http://shop.ebay.com/i.html?_nkw=Logitech+ClearChat.+Wireless&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;LH_BIN=1&amp;LH_IncludeSIF=1&amp;_odkw=Logitech+ClearChat+PC&amp;_osacat=0"
+						rel="nofollow">EBay Auctions</a>
+					(
+					<i>cient-side</i>
+					).
+					<a href="RecommendedHardwareList.html">See all recommendations</a>
+					for cameras, headsets and speakerphones.
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Debian, Links, Changelog, VoIP">
+
+			<ul>
+				<li>
+					for VoIP and SIP Integration see also
+					<a href="voip-sip-integration.html">VoIPAndSIP</a>
+				</li>
+				<li>
+					<a href="http://meetingslive.sourceforge.net/" rel="nofollow">http://meetingslive.sourceforge.net/
+					</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Installation of OM 2.0 for Ubuntu 12.04 x64, Ubuntu 12.10 x64, Debian, Windows XP, 7, 2003, 2008</a>
+				</li>
+				<li>
+					<a
+						href="http://liberamemoria.blogspot.com/2009/02/instalando-openmeetings-07-rc-2-en.html"
+						rel="nofollow">Espanol Version for Debian Installation</a>
+				</li>
+				<li>
+					<a
+						href="http://aitinet.com/blog/wp-content/uploads/2009/08/TUTORIAL-PARA-INSTALACAO-DO-RED5-E-OPENMEETINGS-NO-LINUX-DEBIAN-LENNY-51.pdf"
+						rel="nofollow">Portuguese Version for Debian Installation of 0.9 RC1</a>
+				</li>
+				<li>
+					<a
+						href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools"
+						rel="nofollow">Automatic script installation for Ubuntu/Debian (beta)</a>
+				</li>
+				<li>
+					French version of Installation Instructions:
+					<a
+						href="http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation"
+						rel="nofollow">http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation
+					</a>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Tips and Tricks">
+			<ul>
+				<li>
+					Use the Debug-Application: Enter in your browser
+					<a
+						href="http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf"
+						rel="nofollow">http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf
+					</a>
+					for example
+					<a href="http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf"
+						rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf
+					</a>
+				</li>
+				<li>If you have Problems with conversion-jobs check your Red5-Log
+					output. There will be error Messages which help you. You must
+					install OpenOffice, ImageMagick, GhostScript and SWFTools to run
+					all conversion-Jobs correctly.
+				</li>
+				<li>if you have problems in converting Files check the Batch-Scripts
+					in $OPENMEETINGS_HOME/jod
+				</li>
+				<li>
+					If you want to use red5 as a service (without red5.bat), you need
+					to move red5\wrapper\wrapper.exe to red5\wrapper.exe. Then change
+					some path in conf\wrapper.conf (like ..\lib\foo.jar to
+					lib\foo.jar). And finally change the register key in
+					HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Red5\ImagePath
+					to point to the new wrapper.
+				</li>
+				<li>
+					you can query a Mysql Database to get the schema_collection by
+					using this query:
+					<div class="xmlcode">
+						SELECT Table_name, TABLE_COLLATION FROM
+						information_schema.tables WHERE table_schema = 'openmeetings'
+						ORDER BY table_name DESC
+					</div>
+				</li>
+			</ul>
+		</section>
+
+	</body>
+
+</document>
+
diff --git a/xdocs/license.xml b/xdocs/license.xml
new file mode 100644
index 0000000..7634d20
--- /dev/null
+++ b/xdocs/license.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0"?>
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+<properties>
+<title>License</title>
+<author email="sebawagner@apache.org">
+ Podling Documentation Team</author>
+</properties>
+
+<body>
+<section name="Apache License v2.0">
+
+<source test=""><![CDATA[
+
+
+
+                                 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:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) 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
+
+      (d) 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.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+ ]]></source>
+
+</section>
+</body>
+</document>
+
diff --git a/xdocs/mail-lists.xml b/xdocs/mail-lists.xml
new file mode 100644
index 0000000..ee90fb3
--- /dev/null
+++ b/xdocs/mail-lists.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Mailing Lists</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+		<section name="Apache OpenMeetings Mailing Lists">
+
+			<p>
+				There are currently 4 publicly available mailing lists for OpenMeetings.
+			</p>
+			<p>
+				The commits list is for notification of commits to the OpenMeetings
+				repository.
+			</p>
+			<p>
+				The dev list is for internal discussion among the OpenMeetings
+				developers. It is
+				open to the public if you are interested in seeing how the sausage is
+				made.
+			</p>
+			<p>
+				<b>Note: </b>If your email bounces with status messages like "Delivery Status Notification" it is 
+				likely that you have send your mail as HTML mail. Apache does not like sending HTML emails, see:
+				<br/> 
+				<a href="http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail" target="_BLANK" rel="nofollow">http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail</a>
+			</p>
+			
+			<p>
+				You can search the entire mailing list very easy by using markmail.com, by using the term 
+				"openmeetings" plus your search. Try yourself: <br/>
+				<a href="http://markmail.org/search/?q=openmeetings" target="_BLANK" rel="nofollow">http://markmail.org/search/?q=openmeetings</a>
+			</p>
+
+			<table>
+				<tr>
+					<td>
+						<p>
+							<strong>User List</strong>
+							:
+							<a href="mailto:user@openmeetings.apache.org">
+								user@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-user/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Spanish User List</strong>
+							:
+							<a href="mailto:user-espanol@openmeetings.apache.org">
+								user-espanol@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-espanol-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-espanol-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-user-espanol/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Commits List</strong>
+							:
+							<a href="mailto:commits@openmeetings.apache.org">
+								commits@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:commits-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:commits-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-commits/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Developer List</strong>
+							:
+							<a href="mailto:dev@openmeetings.apache.org">
+								dev@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:dev-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:dev-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+			</table>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/oauth2.xml b/xdocs/oauth2.xml
new file mode 100644
index 0000000..61aba04
--- /dev/null
+++ b/xdocs/oauth2.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>OAuth2 integration</title>
+		<author email="a_horuzhenko@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OAuth2 integration">
+			<p>You need Apache Openmeetings <strong>version 3.0</strong> to apply this guide!</p>
+			<p>You can manage various OAuth2 servers by opening "Administration => OAuth2". There are already created servers like Facebook or Google. You can use them as example or in production. To add your own servers you need to get their documentation to set necessary attributes.</p>
+		</section>
+		<section name="Attributes">
+			<ul>
+				<li><i>Name</i> - displayed in the login dialog text</li>
+				<li><i>client_id</i> and <i>client_secret</i> - credentials which you got from your oauth2 server.</li>
+				<li><i>Redirect uri</i> - put this value into application settings in the oauth2 server.</li>
+				<li><i>Request key URL</i> - an URL which will be used to request access key.</li>
+				<li><i>Request token URL</i> - an URL which will be used to request access token.</li>
+				<li><i>Request token attributes</i> - attributes for access token request.</li>
+				<li><i>Request info URL</i> - an URL which will be used to request authentication attributes.</li>
+				<li><i>Login param name</i> - login key name to get value from info response.</li>
+				<li><i>Email param name</i> - email key name to get value from info response.</li>
+				<li><i>Firstname param name</i> - firstname key name to get value from info response.</li>
+				<li><i>Lastname param name</i> - lastname key name to get value from info response.</li>
+			</ul>
+			<p>Request attributes (request key url, request token url, request token attributes, request info url) may contain next variables as a part:</p>
+			<ul>
+				<li>{$client_id}</li>
+				<li>{$client_secret}</li>
+				<li>{$redirect_uri}</li>
+				<li>{$code}</li>
+				<li>{$access_token}</li>
+			</ul>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/red5sip-integration_2.0.xml b/xdocs/red5sip-integration_2.0.xml
new file mode 100644
index 0000000..9b88d8d
--- /dev/null
+++ b/xdocs/red5sip-integration_2.0.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="timur@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="SIP-Transport Integration">
+			<p>
+				You need minimum version 2.0 of Apache OpenMeetings to apply this guide!
+			</p>
+			<p>
+				Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 10.04.
+			</p>
+		</section>
+
+        <section name="Setup Asterisk">
+			<div>
+                Run the commands
+                <blockquote>
+                    <i>
+                    sudo apt-get update<br/>
+                    sudo apt-get install asterisk asterisk-mysql
+                    </i>
+                </blockquote>
+            </div>
+            <div>
+                Ubuntu 10.04 has broken asterisk-mysql version. For other distribution next commands not needed:
+                <blockquote>
+                    <i>
+                        aptitude purge asterisk-mysql
+                        <br/>
+                        cd /tmp
+                        <br/>
+                        apt-get build-dep asterisk-mysql
+                        <br/>
+                        apt-get -b source asterisk-mysql
+                        <br/>
+                        dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb
+                    </i>
+
+                </blockquote>
+            </div>
+            <div>
+                Enable asterisk mysql realtime module:<br/><br/>
+                Add string
+                <blockquote>
+                    <i>load => res_config_mysql.so</i>
+                </blockquote>
+                to the /etc/asterisk/modules.conf into the "modules" section.
+            </div>
+            <div>
+                Configure mysql realtime module:<br/><br/>
+
+                Create file /etc/asterisk/res_mysql.conf and add lines:
+                <blockquote>
+                    <i>[general]
+                        <br/>
+                        dbhost=127.0.0.1
+                        <br/>
+                        dbname=openmeetings
+                        <br/>
+                        dbuser=root
+                        <br/>
+                        dbpass=
+                        <br/>
+                        dbport=3306
+                    </i>
+
+                </blockquote>
+            </div>
+            <div>
+                Add next lines into the /etc/asterisk/extconfig.conf:
+                <blockquote>
+                    <i>[settings]
+                        <br/>
+                        sipusers => mysql,general,sipusers
+                        <br/>
+                        sippeers => mysql,general,sipusers
+                        <br/>
+                        extensions => mysql,general,extensions
+                        <br/>
+                        meetme => mysql,general,meetme
+                    </i>
+
+                </blockquote>
+            </div>
+            <div>
+                Add next lines into the /etc/asterisk/extensions.conf:
+                <blockquote>
+                    <i>[rooms]
+                        <br/>
+                        switch => Realtime/@
+                    </i>
+
+                </blockquote>
+            </div>
+
+            <div>
+                Restart asterisk:
+                <blockquote>
+                    <i>service asterisk restart</i>
+                </blockquote>
+                Insert, for example, SIP user with name 'test':
+                <blockquote>
+                    <i>
+                        INSERT INTO sipusers (allow, context, disallow, host, name, secret) VALUES ('ulaw' , 'rooms', NULL, 'dynamic' , 'test', '12345');
+                    </i>
+                </blockquote>
+            </div>
+		</section>
+
+        <section name="Setup red5sip transport">
+            <div>
+                Download red5sip from<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip</blockquote>
+            </div>
+            <p>
+                Build with Apache Ant
+            </p>
+            <div>
+                Install jsvc:
+                <blockquote>
+                    <i>apt-get install jsvc</i>
+                </blockquote>
+            </div>
+            <div>
+                Insert proper values to the /opt/red5sip/settings.properties
+
+                <blockquote>
+                    <i>red5.host - red5 server address (127.0.0.1)
+                        <br/>
+                        sip.obproxy - asterisk adderss (127.0.0.1)
+                        <br/>
+                        sip.phone - sip phone number (test)
+                        <br/>
+                        sip.authid - sip auth id (test)
+                        <br/>
+                        sip.secret - sip password (12345)
+                        <br/>
+                        sip.realm - sip realm, "asterisk" by default
+                        <br/>
+                        sip.proxy -
+                        <br/>
+                        rooms - ids of openmeetings rooms, can be, for example, 2,3,5,6
+                    </i>
+
+                </blockquote>
+            </div>
+            <div>
+                Add red5sip to autostart:
+                <blockquote>
+                    <i>ln -s /opt/red5sip/red5sip.sh /etc/init.d/red5sip
+                        <br/>
+                        chmod a+x /etc/init.d/red5sip
+                        <br/>
+                        update-rc.d /etc/init.d/red5sip defaults
+                    </i>
+
+                </blockquote>
+            </div>
+            <div>
+                Start openmeetings
+                <blockquote>
+                    <i>service red5 start</i>
+                </blockquote>
+            </div>
+            <div>
+                Start red5sip
+                <blockquote>
+                    <i>service red5sip start</i>
+                </blockquote>
+            </div>
+        </section>
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/red5sip-integration_2.1.xml b/xdocs/red5sip-integration_2.1.xml
new file mode 100644
index 0000000..cbf9b16
--- /dev/null
+++ b/xdocs/red5sip-integration_2.1.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="solomax@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="SIP-Transport Integration">
+			<p>You need Apache OpenMeetings <strong>version 2.1</strong> to apply this guide!</p>
+			<p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+			<p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+		</section>
+		<section name="Prerequisites">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="ODBC Setup">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br/>
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Building and setting up Asterisk">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Configure Asterisk">
+			<div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload => res_odbc.so<br />
+						preload => res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled => yes<br />
+						dsn => asterisk-connector<br />
+						pre-connect => yes
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers => odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten => _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten => _400X!,n,Hangup<br />
+						exten => _400X!,n(notavail),Answer()<br />
+						exten => _400X!,n,Playback(invalid)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten => _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten => _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.data.conference.dao.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div><br />
+			<div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div><br />
+		</section>
+
+		<section name="Setup red5sip transport">
+			<div>
+				Download red5sip from
+				<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip_2.1</blockquote>
+			</div>
+			<div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+			<div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+			<div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/red5sip-integration_3.0.xml b/xdocs/red5sip-integration_3.0.xml
new file mode 100644
index 0000000..dda4da2
--- /dev/null
+++ b/xdocs/red5sip-integration_3.0.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="solomax@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="SIP-Transport Integration">
+			<p>You need Apache OpenMeetings <strong>version 3.0</strong> to apply this guide!</p>
+			<p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+			<p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+		</section>
+		<section name="Prerequisites">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="ODBC Setup">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br/>
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Building and setting up Asterisk">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Configure Asterisk">
+			<div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload => res_odbc.so<br />
+						preload => res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled => yes<br />
+						dsn => asterisk-connector<br />
+						pre-connect => yes
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers => odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten => _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten => _400X!,n,Hangup<br />
+						exten => _400X!,n(notavail),Answer()<br />
+						exten => _400X!,n,Playback(invalid)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten => _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten => _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div><br />
+			<div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div><br />
+		</section>
+
+		<section name="Setup red5sip transport">
+			<div>
+				Download red5sip from
+				<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip_2.1</blockquote>
+			</div>
+			<div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+			<div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+			<div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/stylesheets/errortable.xsl b/xdocs/stylesheets/errortable.xsl
new file mode 100644
index 0000000..6ac37d0
--- /dev/null
+++ b/xdocs/stylesheets/errortable.xsl
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+	<xsl:output method="xml"/>
+	
+	<xsl:template match="ROOT">
+<document>
+<xsl:comment>
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ </xsl:comment>
+	<properties>
+		<title>Openmeetings Errors table</title>
+		<author email="solomax@apache.org">Apache OpenMeetings Documentation Robot</author>
+	</properties>
+	<body>
+		<section name="Openmeetings Errors table">
+		<table>
+			<tr>
+				<th>Code</th>
+				<th>Type</th>
+				<th>Description</th>
+			</tr>
+			<xsl:apply-templates/>
+		</table>
+		</section>
+	</body>
+</document>
+	</xsl:template>
+	
+	<xsl:template match="row">
+			<tr>
+				<td>-<xsl:value-of select="field[@name='errorvalues_id']"/></td>
+				<td>
+					<xsl:variable name="typeId" select="field[@name='errortype_id']"/>
+					<xsl:variable name="x">
+						<xsl:choose>
+							<xsl:when test="$typeId='1'">322</xsl:when>
+							<xsl:otherwise>323</xsl:otherwise>
+						</xsl:choose>
+					</xsl:variable>
+					<xsl:value-of select="document('../../src/web/java/org/apache/openmeetings/web/app/Application.properties.xml')/properties/entry[@key=$x]/text()" />
+				</td>
+				<td>
+					<xsl:variable name="descId" select="field[@name='fieldvalues_id']"/>
+					<xsl:value-of select="document('../../src/web/java/org/apache/openmeetings/web/app/Application.properties.xml')/properties/entry[@key=$descId]/text()" />
+				</td>
+			</tr>
+	</xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/xdocs/stylesheets/project.xml b/xdocs/stylesheets/project.xml
new file mode 100644
index 0000000..05f27d4
--- /dev/null
+++ b/xdocs/stylesheets/project.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="project.xsd"
+	name="Apache OpenMeetings Project"
+    href="http://openmeetings.apache.org/">
+
+    <title>Apache OpenMeetings</title>
+    <!--  -->
+    <logo href="/images/logo-2.jpg">Apache OpenMeetings</logo>
+	
+    <body>
+
+    <menu name="General">
+        <item name="Home"                   href="/index.html"/>
+        <item name="License"                href="/license.html"/>
+        <item name="ASF"                    href="http://www.apache.org/"/>
+        <item name="Downloads"              href="/downloads.html"/>
+        <item name="Commercial Support"     href="/commercial-support.html"/>
+    </menu>
+    
+    <menu name="Installation and Upgrade">
+    	<item name="Installation"           href="/installation.html"/>
+    	<item name="Upgrade"           		href="/Upgrade.html"/>
+    	<item name="Tutorials"				href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" />
+    	<item name="Command Line Admin"		href="/CommandLineAdmin.html" />
+    </menu>
+
+    <menu name="Community">
+        <item name="Get Involved"           href="/get-involved.html"/>
+        <item name="Committers"             href="/team-list.html"/>
+        <item name="Mailing Lists"          href="/mail-lists.html"/>
+    	<item name="Wiki"                   href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" />
+    </menu>
+
+    <menu name="Development">
+        <item name="Source Code"            href="/svn.html"/>
+        <item name="Bugs / Issues (JIRA)"   href="http://issues.apache.org/jira/browse/OPENMEETINGS"/>
+        <item name="Dependencies"           href="/dependencies.html"/>
+        <item name="Build Instructions"     href="/BuildInstructions.html"/>
+        <item name="JUnit Testing"          href="/JUnitTesting.html"/>
+        <item name="Manual Testing"         href="/ManualTesting.html"/>
+        <item name="Release Guide"          href="/ReleaseGuide.html"/>
+        <item name="Website Guide"          href="/WebsiteGuide.html"/>
+    </menu>
+    
+    <menu name="Integration">
+        <item name="SOAP/REST API"          href="/SoapRestAPI.html" />
+        <item name="REST API Sample"        href="/RestAPISample.html" />
+        <item name="Ldap and ADS"           href="/LdapAndADS.html" />
+	<item name="OAuth2"		    href="/oauth2.html" />
+        <item name="VoIP and SIP"           href="/voip-sip-integration.html" />
+        <item name="Errors table"           href="/ErrorsTable.html" />
+    </menu>
+    
+    <menu name="Plugins">
+        <item name="Moodle Plugin"          href="/MoodlePlugin.html" />
+        <item name="Sakai Plugin"          	href="/SakaiPlugin.html" />
+        <item name="Jira Plugin"          	href="/JiraPlugin.html" />
+        <item name="Joomla Plugin"          href="/JoomlaPlugin.html" />
+        <item name="Drupal Plugin"          href="/DrupalPlugin.html" />
+		<item name="Bitrix Plugin"			href="/BitrixPlugin.html" />
+        <item name="Confluence Plugin"      href="/ConfluencePlugin.html" />
+        <item name="SugarCRM Plugin"        href="/SugarCRMPlugin.html" />
+        <item name="Redmine Plugin"         href="/RedminePlugin.html" />
+    </menu>
+    
+    <menu name="Configuration">
+    	<item name="DB Sample Configurations" >
+    		<subitem name="Apache Derby" href="/ApacheDerbyConfig.html" />
+    		<subitem name="IBM DB2" href="/IBMDB2Config.html" />
+    		<subitem name="Oracle" href="/OracleConfig.html" />
+    		<subitem name="MySQL" href="/MySQLConfig.html" />
+    		<subitem name="Postgres" href="/PostgresConfig.html" />
+    		<subitem name="MSSQL" href="/MSSQLConfig.html" />
+    	</item>
+    	<item name="Localization and languages" >
+    		<subitem name="Internationalisation" href="/Internationalisation.html" />
+    		<subitem name="LanguageEditor" href="/LanguageEditor.html" />
+    		<subitem name="TimeZoneHandling" href="/TimeZoneHandling.html" />
+    		<subitem name="EditTemplates" href="/EditTemplates.html" />
+    	</item>
+    	<item name="NAT Port Settings" >
+    		<subitem name="Port settings" href="/PortSettings.html" />
+    	</item>
+    	<item name="Performance" >
+    		<subitem name="JVM performance tuning" href="/JVMPerformanceTuning.html" />
+    	</item>
+    	<item name="User Interface">
+    		<subitem name="Themes" href="/themes-and-branding.html" />
+    		<subitem name="Dashboard" href="/Dashboard.html" />
+    		<subitem name="Webcam resolutions" href="/WebcamResolutions.html" />
+    		<subitem name="Room layout options" href="/ConferenceRoomLayoutOptions.html" />
+    		<subitem name="Hot Keys" href="/HotKeys.html" />
+    	</item>
+    	<item name="Customization" >
+    		<subitem name="Webapp name/path" href="/WebappNamePath.html" />
+    		<subitem name="Navigation" href="/Navigation.html" />
+    		<subitem name="Calendar and timezone" href="/CalendarAndTimezone.html" />
+    		<subitem name="Custom room type" href="/CustomRoomTypeHowTo.html" />
+    		<subitem name="Custom ctypt mechanism" href="/CustomCryptMechanism.html" />
+    		<subitem name="General Configuration" href="/GeneralConfiguration.html" />
+    	</item>
+    	<item name="Security" >
+    		<subitem name="Restricted Access" href="/RestrictedAccess.html" />
+    		<subitem name="RTMPS and HTTPS" href="/RTMPSAndHTTPS.html" />
+    	</item>
+    	<item name="Converters" >
+    		<subitem name="OpenOffice Converter" href="/OpenOfficeConverter.html" />
+            <subitem name="FFMPEG Version Switch" href="/FFMPEGVersionSwitch.html" />
+        </item>
+    	<item name="Clustering" >
+    		<subitem name="Clustering" href="/Clustering.html" />
+    	</item>
+    	<item name="Misc" >
+    		<subitem name="Get version info" href="/GetVersionInfo.html" />
+    	</item>
+    </menu>
+    
+    <!-- 
+    <menu name="Integration">
+        <item name="SOAP/REST API"          href="/integration_api.html"/>
+        <item name="LDAP and ADS"           href="/integration_ldap.html"/>
+        <item name="VoIP and SIP"           href="/integration_voip.html"/>
+        <item name="Moodle Plugin"          href="/moodle_plugin.html"/>
+        <item name="SugarCRM Plugin"        href="/sugarcrm_plugin.html"/>
+    </menu>
+     -->
+     
+    
+
+    </body>
+</project>
diff --git a/xdocs/stylesheets/project.xsd b/xdocs/stylesheets/project.xsd
new file mode 100644
index 0000000..138bfa7
--- /dev/null
+++ b/xdocs/stylesheets/project.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="project">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="title"/>
+        <xs:element ref="logo"/>
+        <xs:element ref="body"/>
+      </xs:sequence>
+      <xs:attribute name="href" use="required" type="xs:anyURI"/>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="title" type="xs:string"/>
+  <xs:element name="logo">
+    <xs:complexType mixed="true">
+      <xs:attribute name="href" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="body">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="menu"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="menu">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="item"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="item">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="subitem"/>
+      </xs:sequence>
+      <xs:attribute name="href" type="xs:anyURI"/>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="subitem">
+    <xs:complexType>
+      <xs:attribute name="href" use="required"/>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/xdocs/stylesheets/site.vsl b/xdocs/stylesheets/site.vsl
new file mode 100644
index 0000000..4449ba9
--- /dev/null
+++ b/xdocs/stylesheets/site.vsl
@@ -0,0 +1,426 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+    ## Defined variables
+    #set ($menutablebg = "#FFFFFF")
+    #set ($menutablefg = "#000000")
+    #set ($bodybg = "#ffffff")
+    #set ($bodyfg = "#000000")
+    #set ($bodylink = "#123465")
+    #set ($pagebannerbg = "#669AE6")
+    #set ($pagebannerfg = "#000000")
+    #set ($bannerbg = "#EEEEEE")
+    #set ($bannerfg = "#000000")
+    #set ($subbannerbg = "#EFEFEF")
+    #set ($subbannerfg = "#000000")
+    #set ($tablethbg = "#039acc")
+    #set ($tabletdbg = "#a0ddf0")
+    #set ($colorhrline = "#999999")
+    
+<!-- start the processing -->
+#document()
+<!-- end the processing -->
+
+## This is where the macro's live
+
+#macro ( feature $feature)
+	<h3>$feature.getAttributeValue("title")</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+					#foreach ( $items in $feature.getChildren() )
+						#if ($items.getName().equals("image"))
+							<p>
+							<a class="group1 fancybox-buttons" href="$items.getAttributeValue("fullhref")">
+								<img src="$items.getAttributeValue("href")" alt="" width="$items.getAttributeValue("width")"
+									#if ($items.getAttributeValue("height")) height="$items.getAttributeValue("height")" #end />
+							</a>
+						#end
+					#end
+				</td>
+				<td>
+					#foreach ( $items in $feature.getChildren() )
+						#if ($items.getName().equals("text"))
+							$items.getChildren()
+						#end
+					#end
+				</td>
+			</tr>
+	    </tbody>
+	</table>
+#end
+
+#macro ( table $table)
+<table>
+    #foreach ( $items in $table.getChildren() )
+        #if ($items.getName().equals("tr"))
+            #tr ($items)
+        #end
+    #end
+</table>
+#end
+
+#macro ( tr $tr)
+<tr>
+    #foreach ( $items in $tr.getChildren() )
+        #if ($items.getName().equals("td"))
+            #td ($items)
+        #elseif ($items.getName().equals("th"))
+            #th ($items)
+        #end
+    #end
+</tr>
+#end
+
+#macro ( td $value)
+#if ($value.getAttributeValue("colspan"))
+#set ($colspan = $value.getAttributeValue("colspan"))
+#end
+#if ($value.getAttributeValue("rowspan"))
+#set ($rowspan = $value.getAttributeValue("rowspan"))
+#end
+#if ($value.getAttributeValue("class"))
+#set ($class = $value.getAttributeValue("class"))
+#end
+<td bgcolor="$tabletdbg" class="$class" colspan="$!colspan" rowspan="$!rowspan" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+    #if ($value.getText().length() != 0 || $value.hasChildren())
+    $value.getContent()
+    #else
+    &nbsp;
+    #end
+</td>
+#end
+
+#macro ( th $value)
+#if ($value.getAttributeValue("colspan"))
+#set ($colspan = $value.getAttributeValue("colspan"))
+#end
+#if ($value.getAttributeValue("rowspan"))
+#set ($rowspan = $value.getAttributeValue("rowspan"))
+#end
+#if ($value.getAttributeValue("class"))
+#set ($class = $value.getAttributeValue("class"))
+#end
+<th bgcolor="$tablethbg" class="$class" colspan="$!colspan" rowspan="$!rowspan" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+    #if ($value.getText().length() != 0 || $value.hasChildren())
+    $value.getContent()
+    #else
+    &nbsp;
+    #end
+</th>
+#end
+
+#macro ( projectanchor $name $value )
+#if ($value.startsWith("http://") || $value.startsWith("https://"))
+    <a href="$value">$name</a>
+#elseif ($value.startsWith("/site"))
+    <a href="http://jakarta.apache.org$value">$name</a>
+#else
+    <a href="$relativePath$value">$name</a>
+#end
+#end
+
+#macro ( metaauthor $author $email )
+            <meta name="author" content="$author">
+            <meta name="email" content="$email">
+#end
+
+#macro ( image $value )
+#if ($value.getAttributeValue("width"))
+#set ($width=$value.getAttributeValue("width"))
+#end
+#if ($value.getAttributeValue("height"))
+#set ($height=$value.getAttributeValue("height"))
+#end
+#if ($value.getAttributeValue("align"))
+#set ($align=$value.getAttributeValue("align"))
+#else
+#set ($align="middle")
+#end
+<img src="$relativePath/$value.getAttributeValue("src")" width="$!width" height="$!height" align="$!align">
+#end
+
+#macro ( source $value)
+    <div align="left">
+    <table style="border: solid 1px #023264; padding: 5px;">
+    <tr>
+      <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td>
+    </tr>
+    </table>
+    </div>
+#end
+
+#macro ( subsection $subsection)
+    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="$subbannerbg">
+        <font color="$subbannerfg" face="arial,helvetica,sanserif">
+          <a name="$subsection.getAttributeValue("name")"><strong>$subsection.getAttributeValue("name")</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+        #foreach ( $items in $subsection.getChildren() )
+            #if ($items.getName().equals("img"))
+                #image ($items)
+            #elseif ($items.getName().equals("source"))
+                #source ($items)
+            #elseif ($items.getName().equals("table"))
+                #table ($items)
+            #else
+                $items
+            #end
+        #end
+        </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+#end
+
+#macro ( section $section)
+    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="$bannerbg" -->
+        <font color="$bannerfg" face="verdana,arial,helvetica,sanserif">
+          <a name="$section.getAttributeValue("name")"><strong>$section.getAttributeValue("name")</strong></a>
+        </font>
+        <hr style="width:100%; color:$colorhrline; background-color:$colorhrline; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+        #foreach ( $items in $section.getChildren() )
+            #if ($items.getName().equals("img"))
+                #image ($items)
+            #elseif ($items.getName().equals("source"))
+                #source ($items)
+            #elseif ($items.getName().equals("table"))
+                #table ($items)
+            #elseif ($items.getName().equals("feature"))
+                #feature ($items)
+            #elseif ($items.getName().equals("subsection"))
+                #subsection ($items)
+            #else
+                $items
+            #end
+        #end
+        </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+#end
+
+#macro ( makeProject )
+
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+    #set ($menus = $project.getChild("body").getChildren("menu"))
+    #foreach ( $menu in $menus )
+    	<h3><a href="#$menu.getAttributeValue("name").replaceAll(" ","")">$menu.getAttributeValue("name")</a></h3>
+    	<div>
+	        #foreach ( $item in $menu.getChildren() )
+	            #set ($name = $item.getAttributeValue("name"))
+	            #if ( $item.getAttributeValue("href").length() > 0 )
+	            	#projectanchor($name $item.getAttributeValue("href"))<br/>
+	        	#else
+	            	<b>$name</b><br/>
+	            		#foreach ( $subitem in $item.getChildren() )
+	            			#set ($name = $subitem.getAttributeValue("name"))
+	            			#projectanchor($name $subitem.getAttributeValue("href"))<br/>
+	            		#end
+	        	#end
+	        #end
+    	</div>
+    #end
+    
+    </div>
+     
+    <br/>
+    
+#end
+
+#macro (getProjectImage)
+#if ($project.getChild("logo"))
+#set ( $logoString = $project.getChild("logo").getAttributeValue("href") )
+<td align="left">
+#if ( $logoString.startsWith("/") )
+<a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
+#else
+<a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
+#end
+</td>
+#end
+#end
+
+#macro (getBannerTitle)
+#if ( $root.getChild("properties").getChild("bannertitle") )
+    #set ( $pageBanner = $root.getChild("properties").getChild("bannertitle") )
+#else
+    #set ( $pageBanner = $root.getChild("properties").getChild("title").getText() )
+#end
+<td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+#end
+
+#macro (printMeta $metaElement)
+<meta #set ($attribs = $metaElement.getAttributes())
+#foreach ($a in $attribs) $a.getName()="$a.getValue()" #end />
+#end
+
+#macro (document)
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+            #set ($authors = $root.getChild("properties").getChildren("author"))
+            #foreach ( $au in $authors )
+                #metaauthor ( $au.getText() $au.getAttributeValue("email") )
+            #end
+
+           #set ($metas = $root.getChildren("meta"))
+
+            ##    Parse meta directives such as
+            ##    <meta name="keyword" content="jakarta, java"/>
+            #foreach ($meta in $metas) #printMeta($meta) #end
+
+            ##    Support for <base> tags.
+            #if ($root.getChild("properties").getChild("base"))
+              #set ($url = $root.getChild("properties").getChild("base").getAttributeValue("href"))
+              <base href="$url"/>
+            #end
+
+            <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink" vlink="$bodylink" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    #getProjectImage()
+                    #getBannerTitle()
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    #makeProject()
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                    #set ($allSections = $root.getChild("body").getChildren("section"))
+                    #foreach ( $section in $allSections )
+                        #section ($section)
+                    #end
+                    </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="$bodylink" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+#end
+
+
+
+
+
diff --git a/xdocs/svn.xml b/xdocs/svn.xml
new file mode 100644
index 0000000..ea53b2d
--- /dev/null
+++ b/xdocs/svn.xml
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Source Code</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Source Code">
+
+			<p>
+				OpenMeetings uses
+				<a class="external" rel="nofollow" href="http://subversion.tigris.org">
+					Subversion
+				</a>
+				to manage its source code.
+				If you're new to Subversion, you can check out the
+				<a href="http://svnbook.red-bean.com/">online book</a>
+				about Subversion.
+				Note that we are currently using Subversion 1.1.x (there are separate
+				versions of the book covering 1.0 and 1.1).
+			</p>
+			<p>
+				To receive notice of commits to the repository subscribe to
+				<a href="mailto:commits@openmeetings.apache.org">
+					commits@openmeetings.apache.org
+				</a>
+				by sending email to
+				<a href="mailto:commits-subscribe@openmeetings.apache.org">
+					commits-subscribe@openmeetings.apache.org
+				</a>
+				.
+			</p>
+
+		</section>
+
+		<section name="Web Access to Subversion">
+
+			<p>
+				If you just want to browse the source code, you can use the
+				<a class="external" rel="nofollow"
+					href="http://svn.apache.org/viewcvs/openmeetings">
+					ViewCVS web interface
+				</a>
+				to Subversion. This is current at all times.
+			</p>
+
+		</section>
+
+		<section name="Checking Out Code Using Subversion">
+
+			<p>Anyone can check code out of Subversion. You only need to specify
+				a
+				username and password to update the Subversion repository, and only
+				OpenMeetings committers can do that.
+				If you are a committer, are working from behind a firewall, or are
+				connected to the internet through a proxy server, please see the
+				sections
+				below for more information.
+			</p>
+
+			<subsection name="Anonymous check out from Subversion">
+				<p>Use a command like:</p>
+				<pre>% svn checkout
+					http://svn.apache.org/repos/asf/openmeetings </pre>
+				<p>Once you have OpenMeetings checked out you can update the source
+					by executing the following command from within the openmeetings
+					directory.
+				</p>
+				<pre>
+					% svn update
+				</pre>
+			</subsection>
+			<subsection name="Access from behind a firewall">
+
+				<p>For those users who are stuck behind a corporate firewall which
+					is
+					blocking http access to the Subversion repository, you can try to access it
+					via HTTPS:
+				</p>
+				<pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+
+			</subsection>
+			<subsection name="Access through a proxy">
+
+				<p>The Subversion client can go through a proxy, if you configure it
+					to do so. First, edit your "servers" configuration file to indicate
+					which
+					proxy to use. The files location depends on your operating system.
+					On Linux or Unix it is located in the directory "~/.subversion".
+					On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%",
+					note this is a hidden directory.)
+				</p>
+				<p>There are comments in the file explaining what to do. If you
+					don't have
+					that file, get the latest Subversion client and run any command; this
+					will
+					cause the configuration directory and template files to be created.
+				</p>
+				<p>Example : Edit the 'servers' file and add something like :
+				</p>
+				<pre>
+					[global]
+					http-proxy-host = your.proxy.name
+					http-proxy-port = 3128
+				</pre>
+
+			</subsection>
+
+			<subsection name="Committer access">
+
+				<p>Everyone can access the Apache Podling Subversion repository via
+					HTTPS,
+					but OpenMeetings Committers must checkout the Subversion repository
+					via HTTPS.
+				</p>
+				<pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+			</subsection>
+		</section>
+
+		<section name="Submitting Code Changes">
+			<subsection name="Submitting a patch">
+
+				<p>If you make changes to OpenMeetings, and would like to contribute
+					it to the project, you should open a JIRA issue and discuss the
+					merits
+					of the proposal with the developer community. If there is agreement,
+					create a patch and attach it to the JIRA issue.
+				</p>
+				<p>
+					To create a patch, execute the svn diff command. This creates a patch
+					that
+					can easily be uploaded to a JIRA issue. A good name for the patch
+					includes
+					the JIRA issue name, e.g. OPENMEETINGS-104.patch. If there are several
+					patches
+					for the same JIRA issue, you might include your initials, e.g.
+					OPENMEETINGS-104.clr.patch
+				</p>
+				<pre>
+					% svn diff &gt; OPENMEETINGS-104.clr.patch
+				</pre>
+			</subsection>
+
+			<subsection name="Committing changes to subversion">
+				<p>
+					To commit changes to the subversion repository, you must be an
+					OpenMeetings committer. See
+					<a href="get-involved.html">get involved</a>
+					for information on how to become a committer and how to set up your
+					password once you become a committer.
+				</p>
+
+				<p>
+					Once your password is set, you can use a command like this to commit:
+				</p>
+				<pre>
+					$&gt; svn commit --username your-username
+					Authentication realm: &lt;https://svn.apache.org:443&gt; ASF Committers
+					Password for 'your-username': your-password
+				</pre>
+				<p>You can also pass your password on the command line directly, but
+					this is a security problem on multiuser unix computers (the command
+					line
+					arguments are available via the ps command). Here is the command if you
+					are Windows or a single user unix computer:
+				</p>
+				<pre>
+					$&gt; svn commit --username your-username --password your-password
+				</pre>
+				<p>Remember to replace 'your-username' and 'your-password' with
+					your actual username and password on svn.apache.org.
+				</p>
+
+			</subsection>
+		</section>
+
+		<section name="Building Podling from Source">
+			<p>
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+			</p>
+
+		</section>
+
+		<section name="Using Subversion on Windows with cygwin">
+
+			<p>
+				If you use Subversion on Windows under cygwin, you may find that the
+				Subversion client automatically assigns the executable property to
+				non-executable files. In that case, you would see this at the bottom
+				of
+				an
+				<em>svn diff</em>
+				of the file:
+			</p>
+			<pre>
+				Property changes on: test/sql/derby/datastoreidentity/schema1.sql
+				___________________________________________________________________
+				Name: svn:executable
+				+ *
+			</pre>
+			<p>This section explains the source of the problem and suggests some
+				actions to avoid it.
+			</p>
+
+			<subsection name="Background">
+
+				<p>Subversion carries executable information in the built-in
+					property
+					called svn:executable. This property, unlike others, may be present
+					or absent, but it has no value. You can add it or delete it, but you
+					cannot change its value.
+				</p>
+				<p>In theory, Subversion ignores Windows file permissions and by
+					default
+					does not set svn:executable. However, cygwin svn acts like Unix svn and
+					determines the svn:executable property based on file permissions.
+				</p>
+				<p>
+					If you create a file from the cygwin command line, by default it is
+					executable only if the filename ends with .bat, .com or .exe, or if
+					its
+					content starts with #!. [This is what the doc says, but you may see -x
+					for all files.] If you create a file using a Windows tool, by default
+					its Windows permissions are executable by all. Cygwin interprets
+					the
+					Unix-style permissions this way as well. If the file is executable by all,
+					cygwin svn sets the svn:executable property on the file when you
+					invoke
+					<em>svn add</em>
+					.
+				</p>
+			</subsection>
+			<subsection
+				name="Removing existing executable properties from the repository">
+
+				<p>You can use svn propdel to remove the svn:executable property
+					from your
+					working copy.
+				</p>
+				<pre>
+					svn propdel -R svn:executable .
+				</pre>
+				<p>will recursively remove the svn:executable property from all of
+					the
+					files below the current directory. You can use this and commit the
+					files to clean the repository if necessary.
+				</p>
+
+			</subsection>
+			<subsection
+				name="Preventing Subversion from adding unwanted executable 
+properties">
+
+				<p>
+					Windows/cygwin users who don't want to have to think about using
+					<em>svn
+						propdel
+					</em>
+					or
+					<em>chmod</em>
+					on each added file can use a non-cygwin
+					version of svn. The Subversion 1.2.3 Win32 binaries, downloadable from the
+					link at the bottom of
+					<a rel="nofollow" href="http://subversion.tigris.org/project_packages.html">
+						http://subversion.tigris.org/project_packages.html
+					</a>
+					, appear to work
+					well. After installation add the svn.exe location to your Windows PATH
+					variable. If you are switching from cygwin svn to Win32 svn
+				</p>
+				<ol type="1">
+					<li>
+						<p>Remove the subversion component from your cygwin installation
+							because when svn is invoked from a cygwin window, the cygwin
+							version is
+							found even if your cygwin/bin directory is later on the path. (In the
+							Select Packages window of the setup wizard, navigate to the
+							subversion
+							package in the Devel. category. Click on the status icon until Uninstall
+							is displayed. Click next and continue through the wizard until
+							installation
+							is complete.)
+						</p>
+					</li>
+					<li>
+						<p>Copy the servers file and the auth folder from the sygwin
+							~/.subversion
+							directory to C:\Documents and
+							Settings\&lt;user&gt;\Application Data\Subversion used by Win32
+							subversion.
+						</p>
+					</li>
+				</ol>
+				<p>Note that windows svn uses backslash as the path separator when
+					displaying file names. You cannot just copy and paste this file
+					name
+					to another svn command when running from within a cygwin shell.
+					You need to enclose the file name into double quotes.
+				</p>
+				<p>Alternatively, Windows users can set file permissions in Windows
+					Explorer. (Right-click on the top-level folder &amp; select
+					Properties.
+					Select the Security tab. Click Advanced. Remove all instances of
+					Read &amp; Execute from the Permission Entries. Click "Reset
+					permissions
+					on all child objects and enable propogations of inheritable
+					permissions".
+					Click Apply. OK. OK.) You will have to do this again when you do a clean
+					checkout to a new directory.
+				</p>
+
+			</subsection>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/team-list-ru.xml b/xdocs/team-list-ru.xml
new file mode 100644
index 0000000..0a1d366
--- /dev/null
+++ b/xdocs/team-list-ru.xml
@@ -0,0 +1,98 @@
+﻿<?xml version="1.0"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Команда проекта</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Committers">
+
+			<p>
+				Люди, отмеченные на этой странице, имеют доступ к репозиторию исходного кода Apache Openmeetings. 
+				Данная страница предназначена для того, чтобы служить основой квалификационного отбора
+				по проектам, требующим модификации исходного кода Openmeetings.
+			</p>
+
+			
+			<table>
+				<tr>
+					<th>Имя</th>
+				</tr>
+				<tr>
+					<td>Себастьян Вагнер</td>
+				</tr>
+				<tr>
+					<td>Алексей Федотов</td>
+				</tr>
+				<tr>
+					<td>Евгений Ровинский</td>
+				</tr>
+				<tr>
+					<td>Максим Солодовник</td>
+				</tr>
+				<tr>
+					<td>Oliver Becherer</td>
+				</tr>
+				<tr>
+					<td>Eugen Schwert</td>
+				</tr>
+				<tr>
+					<td>Sascha Xander</td>
+				</tr>
+				<tr>
+					<td>Johnny Strom</td>
+				</tr>
+				<tr>
+					<td>Герман Грехов</td>
+				</tr>
+				<tr>
+					<td>Тимур Тлеукенов</td>
+				</tr>
+				<tr>
+					<td>Alvaro Bustos</td>
+				</tr>
+				<tr>
+					<td>George Kirkham</td>
+				</tr>
+				<tr>
+					<td>Stephen Cottham</td>
+				</tr>
+				<tr>
+					<td>Ирина Архипец</td>
+				</tr>
+				<tr>
+					<td>Василий Дегтярев</td>
+				</tr>
+				<tr>
+					<td>Денис Кандров</td>
+				</tr>
+				<tr>
+					<td>Юлия Альгаер</td>
+				</tr>
+				<tr>
+					<td>Артём Хоруженко</td>
+				</tr>
+			</table>
+			
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/team-list.xml b/xdocs/team-list.xml
new file mode 100644
index 0000000..64f4b88
--- /dev/null
+++ b/xdocs/team-list.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Project Team</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Committers">
+
+			<p>
+				The people listed below have made significant contributions to
+				Podling
+				by
+				working long and hard to make quality software for the rest
+				of the world to
+				use.
+			</p>
+
+			<p>
+				If you would like to contribute to Podling, please see the
+				<a
+					href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list"
+					target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+				to find areas where you can contribute.
+				If there is nothing in there
+				that suits your interest, but you still
+				have
+				ideas, please feel free
+				to suggest them on the mailing list.
+			</p>
+			<p>
+				If you would like to become a committer, please see
+				<a href="get-involved.html">Get Involved</a>
+				.
+			</p>
+
+			<table>
+				<tr>
+					<th>Name</th>
+					<th>Organization</th>
+					<th>Contact/Website</th>
+				</tr>
+				<tr>
+					<td>Sebastian Wagner</td>
+					<td>Independent</td>
+					<td>
+						<a href="https://twitter.com/#!/dead_lock" target="_BLANK" rel="nofollow">https://twitter.com/#!/dead_lock
+						</a>
+					</td>
+				</tr>
+				<tr>
+					<td>Alexei Fedotov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Evgeny Rovinsky</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Maxim Solodovnik</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Oliver Becherer</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Eugen Schwert</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Sascha Xander</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Johnny Strom</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Timur Tleukenov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+                                <tr>
+					<td>Alvaro Bustos</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>George Kirkham</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Stephen Cottham</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Irina Arkhipets</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Vasiliy Degtyarev</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Denis Kandrov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Yulia Algaer</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Artyom Horuzhenko</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+								
+			</table>
+			
+			<p>
+			<a href="team-list-ru.html">Here</a> is the Russian version of this page.
+			</p>
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/themes-and-branding.xml b/xdocs/themes-and-branding.xml
new file mode 100644
index 0000000..2d71ea6
--- /dev/null
+++ b/xdocs/themes-and-branding.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Theme and color</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Available with Apache OpenMeetings 2.0">
+
+			<p>
+				Themes are only available starting with Openmeetings 2.x.
+				<br />
+				There are also more general client side configuration like port
+				configuration. Those configs are stored in the public/config.xml
+			</p>
+
+		</section>
+
+		<section name="Editing the theme">
+
+			<p>You can find the default theme in the SVN: </p>
+			<p>
+				<a
+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml"
+					target="_BLANK" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml
+				</a>
+			</p>
+			<p>
+				Or if you already installed OpenMeetings on your machine at:
+				<br />
+				<tt>/webapps/openmeetings/public/theme.xml</tt>
+				<br />
+				The file contains border, background and font color definitions as
+				well as paths to icons that are loaded at runtime.
+				<br />
+				You can change the theme at runtime and just reload the browser
+				(eventually clear the browser cache) to see updates based on
+				modification in your theme.
+			</p>
+
+
+		</section>
+
+	</body>
+
+</document>
diff --git a/xdocs/voip-sip-integration.xml b/xdocs/voip-sip-integration.xml
new file mode 100644
index 0000000..977d8d4
--- /dev/null
+++ b/xdocs/voip-sip-integration.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>VoIP and SIP Integration</title>
+		<author email="sebawagner@apache.org">
+			OpenMeetings Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="VoIP and SIP Integration">
+
+			<p>
+				There are multiple ways to integrate with VoIP and or SIP.
+				OpenMeetings does not provide out of the box a ready to run VoIP
+				integration / integration to cell phone or usual land lane.
+				The
+				nature of such integrations is that it depends heavily on the
+				infrastructure that you are using and where you would like to
+				integrate OpenMeetings into.
+				<br />
+				<br />
+				It also depends on a number of factors of which OpenMeetings is
+				impossible to set up for you, for example setting up your VoIP
+				server or provide you with a range of telephone numbers reserved for
+				conference calls in your national phone network.
+				Such an integration
+				project is likely to become a consulting job for a
+				telecommunications consultant.
+				<br />
+				<br />
+				To get help on the integration you can contact the
+				<a href="mail-lists.html">mailing lists</a>
+				or for example somebody from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+                <br/><br/>
+                <a href="red5sip-integration_2.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.0
+                </a>.<br/>
+                <a href="red5sip-integration_2.1.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.1
+                </a>.<br/>
+                <a href="red5sip-integration_3.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.0
+                </a>.<br/>
+			</p>
+		</section>
+
+	</body>
+
+</document>
\ No newline at end of file
diff --git a/xdocs/website.xsd b/xdocs/website.xsd
new file mode 100644
index 0000000..311d016
--- /dev/null
+++ b/xdocs/website.xsd
@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="document">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="properties"/>
+        <xs:element ref="body"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="properties">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="title"/>
+        <xs:element ref="author"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="title" type="xs:string"/>
+  <xs:element name="author">
+    <xs:complexType mixed="true">
+      <xs:attribute name="email" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="body">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="section"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="section">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="img"/>
+        <xs:element ref="object"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="pre"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+        <xs:element ref="feature"/>
+        <xs:element ref="source"/>
+        <xs:element ref="style"/>
+        <xs:element ref="subsection"/>
+        <xs:element ref="table"/>
+      </xs:choice>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="feature">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="image"/>
+        <xs:element ref="text"/>
+      </xs:sequence>
+      <xs:attribute name="title" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="image">
+    <xs:complexType>
+      <xs:attribute name="fullhref" use="required"/>
+      <xs:attribute name="height" type="xs:integer"/>
+      <xs:attribute name="href" use="required"/>
+      <xs:attribute name="title" use="required"/>
+      <xs:attribute name="width" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="text">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="div"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="source">
+    <xs:complexType mixed="true">
+      <xs:attribute name="test" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="style">
+  </xs:element>
+  <xs:element name="subsection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:choice>
+          <xs:element ref="i"/>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="div"/>
+            <xs:element ref="ol"/>
+            <xs:element ref="p"/>
+            <xs:element ref="pre"/>
+          </xs:choice>
+        </xs:choice>
+        <xs:element minOccurs="0" ref="ul"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="table">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="tr"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="tr">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element maxOccurs="unbounded" ref="th"/>
+        <xs:element maxOccurs="unbounded" ref="td"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="th">
+    <xs:complexType mixed="true">
+      <xs:attribute name="style"/>
+      <xs:attribute name="class"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="td">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="p"/>
+        <xs:element ref="b"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+      <xs:attribute name="class"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ul">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="li"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="b">
+    <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="br"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="i">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="p">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="em"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="em" type="xs:string"/>
+  <xs:element name="pre" type="xs:string"/>
+  <xs:element name="ol">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="li"/>
+      </xs:sequence>
+      <xs:attribute name="type" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="div">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="blockquote"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="object"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="pre"/>
+        <xs:element ref="span"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+      </xs:choice>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="id" type="xs:NCName"/>
+      <xs:attribute name="style" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="a">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="b"/>
+        <xs:element ref="img"/>
+        <xs:element ref="span"/>
+      </xs:choice>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="href" use="required" type="xs:anyURI"/>
+      <xs:attribute name="rel" type="xs:NCName"/>
+      <xs:attribute name="target" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="img">
+    <xs:complexType>
+      <xs:attribute name="alt" use="required"/>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="height" type="xs:integer"/>
+      <xs:attribute name="src" use="required"/>
+      <xs:attribute name="title"/>
+      <xs:attribute name="width" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="object">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="param"/>
+        <xs:element ref="embed"/>
+      </xs:sequence>
+      <xs:attribute name="style" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="param">
+    <xs:complexType>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="value" use="required" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="embed">
+    <xs:complexType>
+      <xs:attribute name="allowScriptAccess" use="required" type="xs:NCName"/>
+      <xs:attribute name="allowfullscreen" use="required" type="xs:boolean"/>
+      <xs:attribute name="height" use="required" type="xs:integer"/>
+      <xs:attribute name="src" use="required" type="xs:anyURI"/>
+      <xs:attribute name="type" use="required"/>
+      <xs:attribute name="width" use="required" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="br">
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="tt">
+    <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="b"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="li">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="blockquote"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="img"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="span"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="strong">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="blockquote">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="br"/>
+        <xs:element ref="i"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="span">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
